1、国家计算机二级(C)77 及答案解析(总分:3480.00,做题时间:120 分钟)一、选择题(1-10 题每题 2分,11-50 题(总题数:50,分数:3000.00)1.有以下程序 #include void fun(int a,int b) int t; t=a;a=b;b=t; main() int c10=1,2,3,4,5,6,7,8,9,0,i; for(i=0;iA.12,3,4,5,6,7,8,9,0,B.2,1,4,3,6,5,8,7,0,9,C.0,9,8,7,6,5,4,3,2,1,D.0,1,2,3,4,5,6,7,8,9,2.在计算机中,一个字节所包含二进制位的个
2、数是( )。(分数:60.00)A.2B.4C.8D.163.有以下程序 #include #include int fun(int n) int *p; p=(int*)malloc(sizeof(int); *p=n; return*p; main() int a: a=fun(10);printf(“%d/n“,a+fun(10); 程序的运行结果是 (分数:60.00)A.0B.10C.20D.出错4.设变量已正确定义,则以下能正确计算 f=n!的程序段是【 】。(分数:60.00)A.F=0: for(i=1;i=n;i+) f*=i;B.f=1; for(i=1;in;i+) f*
3、=i;C.f=1; for(i=n;i1;i+)f*=i;D.f=-1; for(i=n;i=2;i-)f*=i;5.有以下程序段: int n,t=1,S=0; scanf(“%d“,B.scallf(“%d %s“,C.scanf(“%d %s“,b,c)D.scanf(“%d%s“,b, for (;) if(i=3|i=5) continue; if (i=6) break; i+; s+=i; ; printf(“%d/n“,s); 程序运行后的输出结果是( )。 (分数:60.00)A.10B.13C.21D.程序进入死循环12.已知大写字母 A的 ASCII码是 65,小写字母
4、a的 ASCII码是 97。以下不能将变量 C中的大写字母转换为对应小写字母的语句是【 】。(分数:60.00)A.C=(C一A)26+aB.C=C+32C.C=C-A+aD.C=(A+C)26-a13.有以下程序 int f1 (int x,inty)return xy?x:y; int f2(int x,int y)return xy?y:x; main() int a=4,b=3,c=5,d=2,e,f,g; e=f2(f1(a,b),f1(c,d);f=f1(f2(a,b),f2(c,d); g=a+b+c+d-e-f; pintf(“%d,%d,%d/n“,e,f,g); 程序运行后
5、的输出结果是【 】。(分数:60.00)A.4,3,7B.3,4,7C.52,7D.2,5,714.数字字符 0的 ASC值为 48,若有以下程序 main() char a=1,b=2; printf(“%c“,b+); printf (“%d/n“,b-a); 程序运行后的输出结果是【 】。(分数:60.00)A.32B.502C.22D.2,5015.有以下程序 #include main() FILE *fp; int i; char ch=“abcd“,t; fp=fopen(“abc.dat“, “wb+“); for(i=0;iA.dB.cC.bD.a16.以下叙述中错误的是【
6、】。(分数:60.00)A.C语言源程序经编译后生成后缀为.obj 的目标程序B.C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件C.用 C语言编写的程序称为源程序,它以 ASCII代码形式存放在一个文本文件中D.C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令17.以下叙述中错误的是【 】。(分数:60.00)A.计算机不能直接执行用 C语言编写的源程序B.C程序经 C编译程序编译后,生成后缀为.obj 的文件是一个二进制文件C.后缀为.obj 的文件,经连接程序生成后缀为.exe 的文件是一个二进制文件D.后缀为.obj 和.exe 的二进制文件都
7、可以直接运行18.以下选项中不能正确把 c1定义成结构体变量的是( )。(分数:60.00)A.typedef struct int red; int green; int blue; COLOR; COLOR cl;B.struct color cl int red; int green; int blue; C.struct color int red; int green; int blue; cl;D.struct int red; int green; int blue; cl;19.程序中对 fun函数有如下说明: void *fun( ); 此说明的含义是( )。 (分数:60.
8、00)A.fun了数无返回值B.fun函数的返回值可以是任意的数据类型C.fun函数的返回值是无值型的指针类型D.指针 fun指向一个函数,该函数无返回值20.在 C语言中,函数返回值的类型最终取决于【 】。(分数:60.00)A.函数定义时在函数首部所说明的函数类型B.return语句中表达式值的类型C.调用函数时主调函数所传递的实参类型D.函数定义时形参的类型21.以下能正确定义二维数组的是( )。(分数:60.00)A.int a 3;B.int a 3=22*3;C.int a 3=;D.int a23=1,2,3,4;22.有以下程序 main() int k=5; while(-k
9、)printf(“d“,k-=3); printf(“n“); 执行后的输出结果是【 】。 (分数:60.00)A.1B.2C.4D.死循环23.有三个关系 R、S 和 T如下: (分数:60.00)A.并B.自然连接C.笛卡尔积D.交24.在 Internet中,用于在计算机之间传输文件的协议是( )。(分数:60.00)A.TELNETB.BBSC.FTPD.WWW25.以下叙述中错误的是【 】。(分数:60.00)A.C程序中的#include 和#define 行均不是 C语句B.除逗号运算符外,赋值运算符的优先级最低C.C程序中,j+;是赋值语句D.C程序中,+、一、*、号是算术运算
10、符,可用于整型和实型数的运算26.有以下程序 main() char S=“abcde“; S+=2; printf(“dn“,s 0); 执行后的结果是【 】。 (分数:60.00)A.输出字符 a的 ASCII码B.输出字符 c的 ASCII码C.输出字符 cD.程序出错27.在 Windows环境下,为了复制一个对象,在用鼠标拖动该对象时应同时按住( )。(分数:60.00)A.Alt键B.Esc键C.Shift键D.Ctrl键28.下列叙述中正确的是【 】。(分数:60.00)A.break语句只能用于 switch语句B.在 switch语句中必须使用 defaultC.break语
11、句必须与 switch语句中的 case配对使用D.在 switch语句中,不一定使用 break语句29.有以下程序 #include main() FILE * fp;int i,a6=l,2,3,4,5,6; fp=fopen(“d3.dat“,“W+b“);fwrite(a,sizeof(int),6,fp); fseek(fp,sizeof(int)* 3,SEEK_SET);*该语句使读文件的位置指针从文件头向后移动 3个 int型数 据* fread(a,sizeof(int),3,fp);fclose(fp); for(i=0;iA.4,5,6,4,5,6,B.1,2,3,4,
12、5,6,C.4,5,6,1,2,3,D.6,5,4,3,2,1,30.设 fp为指向某二进制文件的指针,且已读到此文件末尾,则函数 feof(fp)的返回值为【 】。(分数:60.00)A.EOFB.非 0值C.0D.NULL31.有以下程序 main() char ch=“uvwxyz“,* pc; pc=ch;printf(“cn“,*(pc+5); 程序运行后的输出结果是【 】。 (分数:60.00)A.ZB.0C.元素 ch5的地址D.字符 Y的地址32.在 Windows环境下,能实现窗口移动的操作是( )。(分数:60.00)A.用鼠标拖动窗口中的任何部位B.用鼠标拖动窗口的边框C
13、.用鼠标拖动窗口的控制按钮D.用鼠标拖动窗口的标题栏。33.要求通过 while循环不断读入字符,当读入字母 N时结束循环。若变量已正确定义,以下正确的程序段是【 】。(分数:60.00)A.while(ch=getchar()!=N)printf(“C“,ch);B.while(ch=getchar()!=N)printf(“C“,ch);C.while(ch=getchar()=N)printf(“C“,ch).D.while(ch=getchar()=N)printf(“C“,ch);34.设有定义:int a;float b;执行 scanf(“2df“, printf(“%d/n“,
14、(x,y); 则以下叙述中正确的是( )。 (分数:60.00)A.输出语句中格式说明符的个数少于输出项的个数,不能正确输出B.运行时产生出错信息C.输出值为 2002D.输出值为 200337.设函数 fun的定义形式为: void fun(char ch,float x) 则以下对函数 fun的调用语句中,正确的是【 】。 (分数:60.00)A.fun(“abc“,3.0);B.t=fun(D,16.5);C.fun(65,2.8);D.fun(32,32);38.有以下程序: main( ) char a,b,c,d; scanf(“%c,%c,%d,%d“, printf(“c,%c
15、,%c,%c/n“,a,b,c,d); 若运行时从键盘上输入:6,5,65,66。则输出结果是( )。(分数:60.00)A.6,5,A,BB.6,5,65,66C.6,5,6,5D.6,5,6,639.下列叙述中正确的是【 】。(分数:60.00)A.算法的效率只与问题的规模有关,而与数据的存储结构无关B.算法的时间复杂度是指执行算法所需要的计算工作量C.数据的逻辑结构与存储结构是一一对应的D.算法的时间复杂度与空间复杂度一定相关40.程序流程图中带有箭头的线段表示的是(分数:60.00)A.图元关系B.数据流C.控制流D.调用关系41.有以下程序: main( ) int s=0,a=1,
16、n; scanf(“%d“, do s+=1; a=a-2; while(a!=n); printf(“%d/n“,s); 若要使程序的输出值为 2,则应该从键盘给 n输入的值是( )。 (分数:60.00)A.-1B.-3C.-5D.042.有以下程序: main( ) int i,n=0; for(i=2;iA.n=5B.n=2C.n=3D.n=443.有以下程序: #include string.h struct STU int num; float TotalScore; ; void f(struct STU p) struct STU s2=20044,550,20045,537;
17、 p.num=s1.num;p.TotalScore=s1.TotalScore; main() struct STU s2=20041,703,20042,580; f(s0); printf(“%d%3.0t/n“,s0.num,s0.TotalScore); 程序运行后的输出结果是【 】。 (分数:60.00)A.20045 537B.20044 550C.20042 580D.20041 70344.以下程序的功能是按顺序读入 10名学生 4门课程的成绩,计算出每位学生的平均分并输出,程序如下:main( ) int n,k; float score,sum,ave; sum=0.0;
18、 for(n=1;n=10;n+) for(k=1;k=4;k+) scanf(“%f“,score);sum+=score; ave=sum/4.0; printf(“NO%d:%f/n“,n,ave); 上述程序运行后结果不正确,调试中发现有条语句出现在程序中的位置不正确。这条语句是( )。 (分数:60.00)A.sum=0.0;B.sum+=score;C.ave=sum/4.0;D.printf(“NO%d:%f/n“,n,ave);45.有以下程序 #include main() char p20=a,b,c,d,q=“abc“,r=“abcde“; strcat(P,r);str
19、cpy(P+strlen(q),q); printf(“dn“,strlen(P); 程序运行后的输出结果是【 】。 (分数:60.00)A.9B.6C.11D.746.若有以下函数首部 int fun(double X10,int *n)则下面针对此函数的函数声明语句中正确的是【 】。(分数:60.00)A.int fun(double X,int *n);B.int fun(double ,int);C.int fun(double * X,int n);D.int fun(double *int*);47.有以下程序 #include main() int i=5; do if(i%3=
20、1) if(i%5=2) printf(“*%d“,i);break; i +; while(i!=0); printf(“/n“); 程序的运行结果是 (分数:60.00)A.*7B.*3*5C.*5D.*2*648.以下程序的功能是:给 r输入数据后计算半径为 r的圆面积 s,程序在编译时出错。 main() /* Beginning */ int r;float s; scanf(“%d“, for(b=1;bc,a+cb,b+ca。请填空。 main1 float a,b,C; scanf(“fff“, printf(“%d/n“,(p/30 ? p/10 : p%3); (分数:40
21、.00)填空项 1:_54.若有以下程序 main( ) int a=4,b=3,c=5,t=0; if(ab)t=a;a=b;b=t; if(ac)t=a;a=c;c=t; printf(“%d %d %d/n“,a,b,c); 执行后输出结果为 1。 (分数:40.00)填空项 1:_55.设有说明 struct DATEintyear;intmonth;intday;请写出一条定义语句,该语句定义 d为上述结构体类型变量,并同时为其成员 year、month、day 依次赋初值 2006、10、1: 1。(分数:40.00)填空项 1:_56.以下程序运行后的输出结果是 1。 #incl
22、udestring.h main2 char ch=“abc“,x34;int i; for(i=0;i3;1+)strcpy(xi,ch); for(i=0;i3;i+)printf(“%s“, long sno; char sex; float score 4; STU; main ( ) STU a5; prinff( “% d/n“, sizeof(a) ); (分数:40.00)填空项 1:_59.对下列二叉树进行中序遍历的结果是 1。 (分数:40.00)填空项 1:_60.对长度为 10的线性表进行冒泡排序,最坏情况下需要比较的次数为 1。(分数:40.00)填空项 1:_61.
23、下列程序的运行结果是: 1 #include string.h char *ss(char *s) return s+strlen(s)/2; main( ) char *p,*str=”abcdefgh”; p=ss(str); printf(“%s/n”,p); (分数:40.00)填空项 1:_62.以下程序的输出结果是 1。 #include #define N 5 int fun(int *s,int a,int n) int j; *s=a;j=n; while(a!=sj)j-; return j: main2 int sN+1;int k; for(k=1;kc,a+cb,b+
24、ca。请填空。 main1 float a,b,C; scanf(“fff“, printf(“%d/n“,(p/30 ? p/10 : p%3); (分数:40.00)填空项 1:_ (正确答案:3)解析:54.若有以下程序 main( ) int a=4,b=3,c=5,t=0; if(ab)t=a;a=b;b=t; if(ac)t=a;a=c;c=t; printf(“%d %d %d/n“,a,b,c); 执行后输出结果为 1。 (分数:40.00)填空项 1:_ (正确答案:503)解析:55.设有说明 struct DATEintyear;intmonth;intday;请写出一条
25、定义语句,该语句定义 d为上述结构体类型变量,并同时为其成员 year、month、day 依次赋初值 2006、10、1: 1。(分数:40.00)填空项 1:_ (正确答案:struct DATE,d=2006,10,1;)解析:本题考查结构体变量初始化的问题。正确的语句应为“struct DATE d=2006,10,1;“。56.以下程序运行后的输出结果是 1。 #includestring.h main2 char ch=“abc“,x34;int i; for(i=0;i3;1+)strcpy(xi,ch); for(i=0;i3;i+)printf(“%s“, long sno;
26、 char sex; float score 4; STU; main ( ) STU a5; prinff( “% d/n“, sizeof(a) ); (分数:40.00)填空项 1:_ (正确答案:80)解析:59.对下列二叉树进行中序遍历的结果是 1。 (分数:40.00)填空项 1:_ (正确答案:DBXEAYFZC)解析:二叉树中序遍历的顺序为先遍历左子树,然后访问根结点,最后遍历右子树。60.对长度为 10的线性表进行冒泡排序,最坏情况下需要比较的次数为 1。(分数:40.00)填空项 1:_ (正确答案:45)解析:对长度 n为 10的线性表进行冒泡排序,最坏情况下需要比较的次
27、数为 n(n-1)2=59=45。61.下列程序的运行结果是: 1 #include string.h char *ss(char *s) return s+strlen(s)/2; main( ) char *p,*str=”abcdefgh”; p=ss(str); printf(“%s/n”,p); (分数:40.00)填空项 1:_ (正确答案:efgh)解析:62.以下程序的输出结果是 1。 #include #define N 5 int fun(int *s,int a,int n) int j; *s=a;j=n; while(a!=sj)j-; return j: main2 int sN+1;int k; for(k=1;k=N;k+) sk=k+1; printf(“%d/n“,fun(s,4,N); (分数:40.00)填空项 1:_ (正确答案:3)解析:fun 函数中 while循环语句得到变量 j的值,并返回给主调函数。同时考查函数参数传递。