1、二级 C语言笔试-124 及答案解析(总分:110.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.有以下程序:void fun1(char*p)char*q;q=P;while(*q!=/0)(*q)+;q+;main()char a=“Program“),*p;p=a3;funl(p);printf(“%s/n“,(分数:2.00)A.;程序执行后的输2.有以下程序:main()int k=5,n=0;while(k0)switch(k)default:break;case 1:n+=k;case 2:case 3:n+=k;k-;printf(“%d/n“,n
2、);程序运行后的输出结果是_。(分数:2.00)A.0B.4C.6D.73.当用户要求输入的字符串中含有空格时,应使用的输入函数是_。(分数:2.00)A.scanf()B.getchar()C.gets()D.getc()4.对于长度为 n的线性表,在最坏的情况下,下列各排序法所对应的比较次数中三确的是(分数:2.00)A.冒泡排序为 n/2B.冒泡排序为 nC.快速排序为 nD.快速排序为 n(n-1)/25.下列选项中不属于软件生命周期开发阶段任务的是_。(分数:2.00)A.软件测试B.概要设计C.软件维护D.详细设计6.有以下程序段int j; float y; char name5
3、0;scanf(“%2d%f%s“,j,y,name);当执行上述程序段,从键盘上输入 55566 777abc后,y 的值为_。(分数:2.00)A.55566.0B.566.0C.7777.0D.566777.07.有以下程序:int fun(int x,int n)static int sum=0,I;for(i=0;in;i+)sum+=xi;return sum;main()int a=1,2,3,4,5,b=6,7,8,9,s=0;s=fun(a,5)+fun(b,4);printf(“%d/n“,s);程序执行后的输出结果是_。(分数:2.00)A.45B.50C.60D.558
4、.有以下结构体说明和变量定义,如图所示,指针 p、q、r 分别指向此链表中的三个连续节点。struct nodeint data;struct node*next;*P,*q,*r;现要将 q所指节点从链表中删除,同时要保持链表的连续,(分数:2.00)A.p-next=q-next;B.p-next=P-next-next;C.p-next=r;D.p=q-next;9.下列叙述中正确的是_。(分数:2.00)A.一个算法的空间复杂度大,则其时间复杂度也必定大B.一个算法的空间复杂度大,则其时间复杂度必定小C.一个算法的时间复杂度大,则其空间复杂度必定小D.上述三种说法都不对10.在 E-R
5、图中,用来表示实体之间联系的图形是_。(分数:2.00)A.矩形B.椭圆形C.菱形D.平行四边形11.有以下程序:void f(int b)int i;for(i=2;i6;i+)bi*=2;main()int a10=1,2,3,4,5,6,7,8,9,10,i;f((分数:2.00)A.;for(i=0;i10;i+)printf(“%d,“,ai);程序运行后的输出结果是_12.以下叙述中正确的是_。(分数:2.00)A.预处理命令行必须位于源文件的开头B.在源文件的一行上可以有多条预处理命令C.宏名必须用大写字母表示D.宏替换不占用程序的运行时间13.有以下程序:struct Sint
6、 n;int a20;void f(int*a,int n)int i;for(i=0;in-1;i+)ai+=i;mainf()int i;struct S s10,2,3,1,6,8,7,5,4,10,9;if(s.a,s.n);for(i=0;is.n;i+)printf(“%d“,s.ai);程序运行后的输出结果是_。(分数:2.00)A.2,4,3,9,12,12,11,11,18,9B.3,4,2,7,9,8,6,5,11,10C.2,3,1,6,8,7,5,4,10,9D.1,2,3,6,8,7,5,4,10,914.执行以下程序后,test.txt 文件的内容是(若文件能正常打
7、开)_。#includestdio.hmain()FILE*fp;char*s1=“Fortran“,*s2=“Basic“;if(fp=fopen(“test.txt“,“wb“)=NULL)printf(“Cant open test.txt file/n“);exit(1);fwrite(s1,7,1,fp);/*把从地址 s1开始的 7个字符写到 fp所指文件中*/fseek(fp,0L,SEEK_SET);/*文件位置指针移到文件开头*/fwrite(s2,5,1,fp);fclose(fp);(分数:2.00)A.BasicanB.BasicFortranC.BasicD.Fort
8、ranBasic15.下列叙述中,不符合良好程序设计风格要求的是_。(分数:2.00)A.程序的效率第一,清晰第二B.程序的可读性好C.程序中要有必要的注释D.输入数据前要有提示信息16.以下选项中,不能作为合法常量的是_。(分数:2.00)A.1.234e04B.1.234e0.4C.1.234e+4D.1.234e017.有以下程序:void sum(int a)a0=a-1+a1;main()int a10=1,2,3,4,5,6,7,8,9,10;sum(a2);printf(“%d/n“,a2);程序运行后的输出结果是_。(分数:2.00)A.6B.7C.5D.818.以下不能正确计
9、算代数式 (分数:2.00)A.1/3*sin(1/2)*sin(1/2)B.sin(0.5)*sin(0.5)/3C.pow(sin(0.5),2)/3D.1/3.0*pow(sin(1.0/2),2)19.对于一个正常运行的 C语言程序,以下叙述中正确的是_。(分数:2.00)A.程序的执行总是从 main函数开始,在 main函数结束B.程序的执行总是从程序的第一个函数开始,在 main函数结束C.程序的执行总是从 main函数开始,在程序的最后一个函数中结束D.程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束20.数据库设计的根本目标是要解决_。(分数:2.00)A.数
10、据共享问题B.数据安全问题C.大量数据存储问题D.简化数据维护21.以下叙述中错误的是_。(分数:2.00)A.C语言程序中的#include 和#define 行均不是 C语句B.除逗号运算符外,赋值运算符的优先级最低C.C语言程序中,j+;是赋值语句D.C语言程序中,+、-、*、/、%号是算术运算符,可用于整型和实型数的运算22.有以下程序:main()int i=1,j=2,k=3;if(i+=l(+j=3|k+=3) printf(“%d%d%d/n“,i,j,k):程序运行后的输出结果是_。(分数:2.00)A.1 2 3B.2 3 4C.2 2 3D.2 3 323.以下不构成无限
11、循环的语句或者语句组是_。(分数:2.00)A.n=0;B.n=0;do+n;while(n=0); while(1)n+C.n=10;D.for(n=0,i=1;i+)n+=i;while(n);n-;)24.以下与函数 fseek(fp,OL,SEEK_SET)有相同作用的是_。(分数:2.00)A.feof(fp)B.tell(fp)C.fgetc(fp)D.rewind(fp)25.已定义以下函数:int fun(int*p)return*P;)fun函数返回值是_。(分数:2.00)A.不确定的值B.一个整数C.形参 P中存放的值D.形参 P的地址值26.下列对队列的叙述正确的是_。
12、(分数:2.00)A.队列属于非线性表B.队列按“先进后出”原则组织数据C.队列在队尾删除数据D.队列按“先进先出”原则组织数据27.设已有定义:float x;则以下对指针变量 P进行定义且赋初值的语句中正确的是_。(分数:2.00)A.float*p=1024;B.int*p=(float)x;C.float p=x;D.float*p=x;28.以下四个程序中,完全正确的是_。(分数:2.00)A.#includestdio.hB.#includestdio.hmain(); main()/*programming*/ /*/programming/*/printf(“programmi
13、ng!/n“); printf(“programming!/n“);C.#includestdio.hD.includestdio.hmain() main()/*/*programming*/*/ /*programming*/printf(“programming!/n“); printf(“programming!/n“);29.有以下程序:#includestdio.hint f(int x)int y;if(x=0|x=1)return(3);y=x*x-f(x-2);return y;main()int z;z=f(3);printf(“%d/n“,z);程序的运行结果是_。(分数
14、:2.00)A.0B.9C.6D.830.有以下程序:#includestdio.h#includestring.hvoid fun(char s10,int n)char t;int i,j;for(i=0;in-1;i+)for(j=i+1;jn;j+)/*比较字符串的首字符大小,并交换字符串的首字符*/if(si0sj0)t=si0;si0=sj0;sEj0=t;main()char s510=“bcc“,“bbcc“,“xy“,“aaaacc“,“aabcc“);fun(ss,5);printf(“%s,%s/n“,ss0,ss4);程序的运行结果是_。(分数:2.00)A.xy,aa
15、aaccB.aaaacc,xyC.xcc,aabccD.acc,xabcc31.若有定义:int a23;,以下选项中对 a数组元素正确引用的是_。(分数:2.00)A.a2!1B.a23C.a03D.a12!132.有以下程序:main()char s=“159“,*P;P=s;printf(“%c“,*P+);printf(“%c“,*P+);程序运行后的输出结果是_。(分数:2.00)A.15B.16C.12D.5933.若要求从键盘读入含有空格字符的字符串,应使用函数_。(分数:2.00)A.getc()B.gets()C.getchar()D.scanf()34.程序中若有如下说明和
16、定义语句:char fun(chat*);main()char*s=“one“,a5=0,(*f1)()=fun,ch;以下选项中对函数 fun的正确调用语句是_。(分数:2.00)A.(*f1)(a);B.*f1(*s);C.fun(a);D.ch=*f1(s);35.下列叙述中错误的是_。(分数:2.00)A.在数据库系统中,数据的物理结构必须与逻辑结构一致B.数据库技术的根本目标是要解决数据的共享问题C.数据库设计是指在已有数据库管理系统的基础上建立数据库D.数据库系统需要操作系统的支持36.下列叙述中正确的是_。(分数:2.00)A.软件交付使用后还需要进行维护B.软件一旦交付使用就不
17、需要再进行维护C.软件交付使用后其生命周期就结束D.软件维护是指修复程序中被破坏的指令37.当变量 c的值不为 2、4、6 时,值也为“真”的表达式是_。(分数:2.00)A.(c=2)|(c=4)|(c=6)B.(c=2c=6)|(c!=3)|(c!=5)C.(c=2c=6)!(c%2)D.(c=2c=6)(c%2!=1)38.下列叙述中正确的是_。(分数:2.00)A.程序设计就是编制程序B.程序的测试必须由程序员自己去完成C.程序经调试改错后还应进行再测试D.程序经调试改错后不必进行再测试39.数字字符 0的 ASC值为 48,若有以下程序:main()char a=1,b=2;prin
18、tf(“%c,“,b+);printf(“%d/n“,b-(分数:2.00)A.;40.以下叙述中错误的是_。(分数:2.00)A.算法正确的程序最终一定会结束B.算法正确的程序可以有零个输出C.算法正确的程序可以有零个输入D.算法正确的程序对于相同的输入一定有相同的结果二、填空题(总题数:15,分数:30.00)41.深度为 5的满二叉树有 1 个叶子节点。(分数:2.00)填空项 1:_42.数据结构分为线性数据结构和非线性数据结构,带链的队列属于 1。(分数:2.00)填空项 1:_43.软件测试分为白箱(盒)测试和黑箱(盒)测试,等价类划分法属于 1 测试。(分数:2.00)填空项 1
19、:_44.数据管理技术发展过程经过人工管理、文件系统和数据库系统三个阶段,其中数据独立性最高的阶段是 1。(分数:2.00)填空项 1:_45.数据独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改,称为 1。(分数:2.00)填空项 1:_46.以下程序运行后的输出结果是_。main()int m=011,n=11;printf(“%d%d/ff“,+m,n+);(分数:2.00)填空项 1:_47.已定义 char ch=“$“;int i=1,j;执行 j=! chi+以后,i 的值为 1。(分数:2.00)填空项 1:_4
20、8.以下程序用于判断 a、b、c 能否构成三角形,若能,输出 YES,否则输出 NO。当给 a、b、c 输入三角形三条边长时,确定 a、b、c 能构成三角形的条件是需同时满足三个条件:a+bc,a+cb,b+ca。请填空。main()float a,b,c;scanf(“%f%f%f“,a,b,c);if(_)printf(“YES/n“);/*a、b、c 能构成三角形*/else printf(“NO/n“);/*a、b、c 不能构成三角形*/(分数:2.00)填空项 1:_49.以下程序的功能是:输出 100以内(不含 100)能被 3整除且个位数为 6的所有整数,请填空。main()(i
21、nt i,j;for(i=0;ii0;i+)j=i*10+6;if(_)continue;printf(“%d“,j);(分数:2.00)填空项 1:_50.已知字符 A的 ASC代码值为 65,以下程序运行时若从键盘输入:B33回车则输出结果是_。#includemain()char a,b;a=getchar();scanf(“%d“,b);a=a-A+0;b=b*2;printf(“%c%c/n“,a,b);(分数:2.00)填空项 1:_51.已有定义:double*P;,请写出完整的语句,利用 malloc函数使 p指向一个双精度型的动态存储单元 1。(分数:2.00)填空项 1:_
22、52.以下程序中,fun 函数的功能是求 3行 4列二维数组每行元素中的最大值,请填空:void fun(int,int,int(*)4,int*);main()int a34=12,41,36,28,19,33,15,27,3,27,19,1,b3,i;fun(3,4,a,b);for(i=0;i3;i+)printf(“%4d“,bi);printf(“/n“);void fun(int m,int n,int ar4,int*bar)int i,j,x;for(i=0;im;i+)X=ari0;for(j=0;jn;j+)if(xarij)x=arij;_=x:(分数:2.00)填空项
23、1:_53.以下程序运行后的输出结果是_。#includestring.hvoid fun(char*s,int p,int k)int i;for(i=P;ik-1;i+)si=si+2;main()char s=“abcdefg“;fun(s,3,strlen(s);puts(s);(分数:2.00)填空项 1:_54.以下程序运行后的输出结果是_。fun(int a)int b=0;static int c=3;b+;c+;return(a+b+c);main()int i,a=5;for(i=0;i3;i+)printf(“%d%d“,i,fun(a);printf(“/n“);(分数
24、:2.00)填空项 1:_55.设有定义:FILE*fw;,请将以下打开文件的语句补充完整,以便可以向文本文件 read metxt 的最后续写内容。fw=fopen(“readme.txt“,“_“)(分数:2.00)填空项 1:_二级 C语言笔试-124 答案解析(总分:110.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.有以下程序:void fun1(char*p)char*q;q=P;while(*q!=/0)(*q)+;q+;main()char a=“Program“),*p;p=a3;funl(p);printf(“%s/n“,(分数:2.00)A
25、.;程序执行后的输 解析:解析 函数 funl()实现的功能为将实参 p所指的字符串顺序按位加 1,而实参 p通过“p=a3;”指向字符串数组 a中的 gram,敞输出结果为 Prohsbn。2.有以下程序:main()int k=5,n=0;while(k0)switch(k)default:break;case 1:n+=k;case 2:case 3:n+=k;k-;printf(“%d/n“,n);程序运行后的输出结果是_。(分数:2.00)A.0B.4C.6D.7 解析:解析 在 switch语句中,若 case语句后没有 break语句,则执行完本层 case后会继续执行后面cas
26、e中的操作。k 的初值为 5,while 条件成立,进入 switch(5),执行 default语句,退出 switch,执行 k-后得 4,再进入 while循环,执行 switch(4),退出 switch,再执行 k-后得 3,继续 while循环,执行 switch(3),n=n+k=3,再执行 k-后得 2,进入 while循环,执行 case 2,再执行 n=n+k=5,然后执行 k-后得 1,最后一次进入 while循环,执行 case1,n=n+k=6,然后继续执行 case 2和 case 3后的语句,n=n+k=7,且执行 k-后得 0,此时 while条件不满足,退出循
27、环,输出 n的值为 7。3.当用户要求输入的字符串中含有空格时,应使用的输入函数是_。(分数:2.00)A.scanf()B.getchar()C.gets() D.getc()解析:解析 本题考查的重点是输入函数的异同。scanf()的作用是格式化输入,getchar()的作用是从键盘读字符,等待回车,getc()是从输入流中返同当前文件位置的下一个字符。而要求输入的字符串中含有空格时,应当使用 gets(),因此,选项 C是正确的。4.对于长度为 n的线性表,在最坏的情况下,下列各排序法所对应的比较次数中三确的是(分数:2.00)A.冒泡排序为 n/2B.冒泡排序为 nC.快速排序为 nD
28、.快速排序为 n(n-1)/2 解析:解析 冒泡排序法在最坏的情况下需要比较的次数为 n(n-1)/2,快速排序法在最坏的情况下需要比较的次数也为 n(n-1)/2。5.下列选项中不属于软件生命周期开发阶段任务的是_。(分数:2.00)A.软件测试B.概要设计 C.软件维护D.详细设计解析:解析 软件生命周期分为软件定义、软件开发及软件运行维护 3个阶段,其中详细设计、软件编码和软件测试都属于软件开发阶段。6.有以下程序段int j; float y; char name50;scanf(“%2d%f%s“,j,y,name);当执行上述程序段,从键盘上输入 55566 777abc后,y 的
29、值为_。(分数:2.00)A.55566.0B.566.0 C.7777.0D.566777.0解析:解析 本题考查的重点是 scanf函数的用法。程序中第一个格式化字符串“%2d”表示读入一个两位的整数,因此就将键盘输入的前两位数赋到第一个变量 j中,即 j的值为 55;后一个格式化字符串为“%f”,再将后续读入的数字赋给浮点变量 y,因此 y的值为 566.0,即到读到空格时结束。7.有以下程序:int fun(int x,int n)static int sum=0,I;for(i=0;in;i+)sum+=xi;return sum;main()int a=1,2,3,4,5,b=6,
30、7,8,9,s=0;s=fun(a,5)+fun(b,4);printf(“%d/n“,s);程序执行后的输出结果是_。(分数:2.00)A.45B.50C.60 D.55解析:解析 fun 函数中用 static声明的局部变量 sum的值在函数调用结束后不消失而保留原值,即占用的存储单元不释放,在下一次调用该函数时,该变量已有值,就是上一次函数调用结束时的值。8.有以下结构体说明和变量定义,如图所示,指针 p、q、r 分别指向此链表中的三个连续节点。struct nodeint data;struct node*next;*P,*q,*r;现要将 q所指节点从链表中删除,同时要保持链表的连续
31、,(分数:2.00)A.p-next=q-next;B.p-next=P-next-next;C.p-next=r;D.p=q-next; 解析:解析 本题的考点是链表的指针操作。要想将 q所指节点从链表中删除,同时要保持链表的连续,从图上看,应该将 p-next=r,由于 q-next、p-next-next 都指向 r,因此 p-next=q-next、p-next=p-next-next 同样可以实现指定的操作。因此选项 A、B、C 都能完成指定操作。而选项 D“p=q-next”只是将指针 p指向了 r,不能完成指定的操作。因此正确选项是 D。9.下列叙述中正确的是_。(分数:2.00
32、)A.一个算法的空间复杂度大,则其时间复杂度也必定大B.一个算法的空间复杂度大,则其时间复杂度必定小C.一个算法的时间复杂度大,则其空间复杂度必定小D.上述三种说法都不对 解析:解析 算法的复杂度主要包括算法的时间复杂度和算法的空间复杂度。所渭算法的时间复杂度是指执行算法所需要的计算工作量;算法的空间复杂度一般是指执行这个算法所需要的内存空间。算法的时间复杂度和空间复杂度没有直接关系。10.在 E-R图中,用来表示实体之间联系的图形是_。(分数:2.00)A.矩形B.椭圆形C.菱形 D.平行四边形解析:解析 E-R 模型的图示法:用矩形表示实体集;用椭圆形表示属性;用菱形表示联系。11.有以下
33、程序:void f(int b)int i;for(i=2;i6;i+)bi*=2;main()int a10=1,2,3,4,5,6,7,8,9,10,i;f((分数:2.00)A.;for(i=0;i10;i+)printf(“%d,“,ai);程序运行后的输出结果是_解析:解析 本题在调用函数时,实参是数组名也是把数组 a的首地址传递给形参,由条件 i=2且 i6得出函数将列以 a2开始的 4个元素(3、4、5、6)进行乘 2操作,结果分别是 a2=6、a3=8、a4=10、a5=12。a0、a1、a6、a7、a8、a9的值没有发生变化。12.以下叙述中正确的是_。(分数:2.00)A.
34、预处理命令行必须位于源文件的开头B.在源文件的一行上可以有多条预处理命令C.宏名必须用大写字母表示D.宏替换不占用程序的运行时间 解析:解析 本题的考点是 C语言的预处理。预处理命令行可以出现在源程序的任何位置上,因此选项A的说法是错误的。源程序的一行上只能出现一条预处理命令,因此选项 B的说法也是错误的。宏名只要是符合要求的标识符都可以,没有规定一定要大写,因此选项 C的说法也是错误的。宏替换在程序编译时,就由编译程序对出现的宏名进行了相应的宏替换,因此宏替换不占用程序的运行时间。选项 D的说法是正确的。13.有以下程序:struct Sint n;int a20;void f(int*a,
35、int n)int i;for(i=0;in-1;i+)ai+=i;mainf()int i;struct S s10,2,3,1,6,8,7,5,4,10,9;if(s.a,s.n);for(i=0;is.n;i+)printf(“%d“,s.ai);程序运行后的输出结果是_。(分数:2.00)A.2,4,3,9,12,12,11,11,18,9 B.3,4,2,7,9,8,6,5,11,10C.2,3,1,6,8,7,5,4,10,9D.1,2,3,6,8,7,5,4,10,9解析:解析 在主函数中定义了一个整型变量 i和一个结构体变量 s。在 f()函数中定义了一个结构体指针类型的指针
36、a,用它来引用数组中的元素;通过 for循环语句将数组中最后一个元素外的其他元素分别加上由 0开始的递增数据;最后输出。14.执行以下程序后,test.txt 文件的内容是(若文件能正常打开)_。#includestdio.hmain()FILE*fp;char*s1=“Fortran“,*s2=“Basic“;if(fp=fopen(“test.txt“,“wb“)=NULL)printf(“Cant open test.txt file/n“);exit(1);fwrite(s1,7,1,fp);/*把从地址 s1开始的 7个字符写到 fp所指文件中*/fseek(fp,0L,SEEK_S
37、ET);/*文件位置指针移到文件开头*/fwrite(s2,5,1,fp);fclose(fp);(分数:2.00)A.Basican B.BasicFortranC.BasicD.FortranBasic解析:解析 fseek 函数用来移动文件位置指针到指定位置,接着的读或写操作将从此位置开始,函数的调用形式为 fseek(pf,offset,origin),pf 为文件指针,offset 是以字节为单位的位移量,ongm 是起始点,SEEK_SET 表示文件开始。故第二次写操作 fwrite(s2,5,1,fp)将覆盖 fortra的前 5个字符。15.下列叙述中,不符合良好程序设计风格要
38、求的是_。(分数:2.00)A.程序的效率第一,清晰第二 B.程序的可读性好C.程序中要有必要的注释D.输入数据前要有提示信息解析:解析 程序设计的风格主要强调:清晰第一,效率第二。16.以下选项中,不能作为合法常量的是_。(分数:2.00)A.1.234e04B.1.234e0.4 C.1.234e+4D.1.234e0解析:解析 C 语言实数常数的科学表示法规定格式为:“实数 e整数”或“实数 E整数”,其中幂是整数,不能写成实数。选项 A、C、D 都是合法的常数。选项 B的实数常数中幂为 0.4,不是整数,因此是不合法的常数。17.有以下程序:void sum(int a)a0=a-1+
39、a1;main()int a10=1,2,3,4,5,6,7,8,9,10;sum(a2);printf(“%d/n“,a2);程序运行后的输出结果是_。(分数:2.00)A.6 B.7C.5D.8解析:解析 在主函数 main()中,语句“sum(a2);”把数组元素 a0的地址传递给了 sun函数的形参 a,使得 sum函数中的“(a+0)”为主函数中 a2的地址,所以 a-1的值为主函数中 a1的值;a1的值为主函数中 a3的伉,故函数 sum中 a0=2+4=6,由于此函数中的 a是指向主函数中的 a2,所以 a2的值为 6。18.以下不能正确计算代数式 (分数:2.00)A.1/3*
40、sin(1/2)*sin(1/2) B.sin(0.5)*sin(0.5)/3C.pow(sin(0.5),2)/3D.1/3.0*pow(sin(1.0/2),2)解析:解析 选项 A中,sin(1/2)*sin(1/2)表达不正确,1/2 被认为是整数相除,得到的商为 0,因而不能正确计算题中代数式的值,其他三个选项都能正确计算该代数式的值。19.对于一个正常运行的 C语言程序,以下叙述中正确的是_。(分数:2.00)A.程序的执行总是从 main函数开始,在 main函数结束 B.程序的执行总是从程序的第一个函数开始,在 main函数结束C.程序的执行总是从 main函数开始,在程序的最
41、后一个函数中结束D.程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束解析:解析 在 C语言中,所有函数的定义,包括主函数 main在内,都是平行的。也就是说,在一个函数的函数体内,不能再定义另一个函数,即不能嵌套定义。但是函数之间允许互相调用也允许嵌套调用,习惯上把调用者称为主函数。调用函数还可以调用自己,称为递归调用。main 函数是主函数,它可以调用其他函数,而不允许被其他函数调用。因此,C 程序的执行总是从 main函数开始完成对其他函数的调用后返回到 main函数,最后由 main函数结束整个程序。一个 C源程序必须有也只能有一个 main函数。20.数据库设计的根本目
42、标是要解决_。(分数:2.00)A.数据共享问题 B.数据安全问题C.大量数据存储问题D.简化数据维护解析:解析 数据库技术的根本目标是解决数据的共享问题。21.以下叙述中错误的是_。(分数:2.00)A.C语言程序中的#include 和#define 行均不是 C语句B.除逗号运算符外,赋值运算符的优先级最低C.C语言程序中,j+;是赋值语句D.C语言程序中,+、-、*、/、%号是算术运算符,可用于整型和实型数的运算 解析:解析 在 C程序中,以#开头的行都称为“编译预处理”行,它不是 C语言本身的组成成分,不能对它们进行直接编译;在运算符优先级表中,逗号运算符的优先级最低,赋值运算符其次
43、;自加运算表达式 j+等价于赋值语句 j=j+1;求余运算符%仅用于整型变量。故选项 D错误。22.有以下程序:main()int i=1,j=2,k=3;if(i+=l(+j=3|k+=3) printf(“%d%d%d/n“,i,j,k):程序运行后的输出结果是_。(分数:2.00)A.1 2 3B.2 3 4C.2 2 3D.2 3 3 解析:解析 本题的考点是关于 C语言的逻辑表达式的计算规则。对于逻辑表达式“i+=1(+j=3|k+=3)”,首先判断“i+=1”,由于 i初值为 1,“i+=1”为真,同时 i加1值为 2。由于第一项为真,对于“”运算符,结果取决于后一项“(+j=3|
44、k+=3)”。而逻辑表达式“(+j=3|k+=3)”计算时,首先判断“+j=3”,由于 j初值为 2,+j 后 j值为3,“+j=3”为真,对于“|”运算符不需要判断后一项表达式的结果就可以断定此逻辑表达式结果为真,因此“k+=3”并没有进行判断,k+也未执行,k 仍是初值 3,输出结果应该是 2 3 3。正确选项是D。23.以下不构成无限循环的语句或者语句组是_。(分数:2.00)A.n=0; B.n=0;do+n;while(n=0); while(1)n+C.n=10;D.for(n=0,i=1;i+)n+=i;while(n);n-;)解析:解析 本题主要考查各种循环语句的掌握情况。选
45、项 A中为 dowhile循环语句,首先执行 do后面的语句+n;得 n=1,while 条件表达式为假,退出循环。选项 B中,while 条件表达式的值始终为 1,条件为真,构成无限循环。选项 C中 while(n);语句循环体为空,n 的值在循环中一直保持不变,构成无限循环。选项 D中,i=1,for 语句中条件判断语句为空,永远为真,构成无限循环。24.以下与函数 fseek(fp,OL,SEEK_SET)有相同作用的是_。(分数:2.00)A.feof(fp)B.tell(fp)C.fgetc(fp)D.rewind(fp) 解析:解析 本题的考点是 C语言的文件操作。函数 fseek
46、(fp,0L,SEEK_SET)的作用是,将文件指针 fp移到相对于文件开始处(SEEK_SET)位移为 0L的地方,也就是文件的开头。选项 A的 feof(fp)是判断是否读到了文件尾,作用与函数 fseek不符。选项 B的 ftell(fp)是告知文件指针的当前位置,作用与函数fseek也不符。选项 C的 fgetc(fp)是从文件指针 fp中读入一个字符,作用与函数 fseek也不符。选项 D的 rewind(fp)是将文件指针回绕到文件开始处,作用与函数 fseek(fp,0L,SEEK_SET)相同。25.已定义以下函数:int fun(int*p)return*P;)fun函数返回值是_。(分数:2.00)A.不确定的值B.一个整数 C.形参 P中存放的值D.形参 P的地址值解析:解析 p 中存放的是地址值,但是*p 间接