1、国家二级(C 语言)机试模拟试卷 153及答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.算法的空间复杂度是指( )。(分数:2.00)A.算法在执行过程中所需要的计算机存储空间B.算法所处理的数据量C.算法程序中的语句或指令条数D.算法在执行过程中所需要的临时工作单元数2.对于循环队列,下列叙述中正确的是( )。(分数:2.00)A.队头指针是固定不变的B.队头指针一定大于队尾指针C.队头指针一定小于队尾指针D.队头指针可以大于队尾指针,也可以小于队尾指针3.下列数据结构中,能够按照“先进后出”原则存取数据的是( )。(分数:2.00)A.循
2、环队列B.栈C.队列D.二叉树4.下列选项中不属于结构化程序设计原则的是( )。(分数:2.00)A.可封装B.自顶向下C.模块化D.逐步求精5.面向对象方法中,继承是指( )。(分数:2.00)A.一组对象所具有的相似性质B.一个对象具有另一个对象的性质C.各对象之间的共同性质D.类之间共享属性和操作的机制6.以下叙述中正确的是( )。(分数:2.00)A.程序设计的任务就是编写程序代码并上机调试B.程序设计的任务就是确定所用数据结构C.程序设计的任务就是确定所用算法D.以上三种说法都不完整7.在软件开发中,需求分析阶段产生的主要文档是( )。(分数:2.00)A.可行性分析报告B.软件需求
3、规格说明书C.概要设计说明书D.集成测试计划8.软件详细设计产生的图如下: (分数:2.00)A.N-S图B.PAD图C.程序流程图D.E-R图9.在黑盒测试方法中,设计测试用例的主要依据是( )。(分数:2.00)A.程序内部逻辑B.程序外部功能C.程序数据结构D.程序程序流程10.有三个关系 R,S 和 T如下: (分数:2.00)A.选择B.投影C.交D.并11.下面是有关 C语言字符数组的描述,其中错误的是( )。(分数:2.00)A.不可以用赋值语句给字符数组名赋字符串B.可以用输入语句把字符串整体输入给字符数组C.字符数组中的内容不一定是字符串D.字符数组只能存放字符串12.计算机
4、能直接执行的程序是( )。(分数:2.00)A.源程序B.目标程序C.汇编程序D.可执行程序13.以下选项中,能用作用户标识符的是( )。(分数:2.00)A.voidB.8_8C._0_D.unsigned14.若有以下程序段: int r=8; printf(“dn“,r1); 输出结果是( )。(分数:2.00)A.16B.8C.4D.215.有以下定义语句,编译时会出现编译错误的是( )。(分数:2.00)A.char a=aB.char a=n;C.char a=aa;D.char a=x2d16.有以下程序: #includestdioh main() char c1,c2; c1
5、=A+8一4; c2=A+8一5; printf(“c dn“,c1,c2); 已知字母 A的 ASCII码为 65,程序运行后的输出结果是( )。(分数:2.00)A.E 68B.D 69C.E DD.输出无定值17.有如下语句: k=ab?(bc?1:0):0;, 以下程序段中,与上述语句功能相同的是( )。(分数:2.00)A.if(ab)&(bc)k=1; else k=0;B.if(ab)(bc),k=1; else k=0;C.if(a=b)k=0; else if(b=c)k=1;D.if(ab)k=1; else if(bc)k=1; else k=0;18.设有定义:int
6、a=1,b=2,c=3;,以下语句中执行效果与其他三个不同的是( )。(分数:2.00)A.if(ab)c=a,a=b,b=c;B.if(ab)c=a,a=b,b=cC.if(ab)c=a;a=b;b=c;D.if(ab)c=a;a=b;b=c19.有以下程序: #includestdioh main() int n=2,k=0; while(k+&n+2); printf(“d dn“,k,n); 程序运行后的输出结果是( )。(分数:2.00)A.0 2B.1 3C.5 7D.1 220.以下函数中,findmax 拟实现在数组中查找最大值并作为函数值返回,但程序中有错导致不能实现预定功能
7、。 #define MIN 一 2147483647 int findmax(int x,int n) int i,max; for(i=0;in;i+) max=MIN; if(maxxi)max=xi; return max; 造成错误的原因是( )。(分数:2.00)A.定义语句 int i,max;中 max未赋初值B.赋值语句 max=MIN;中,不应给 max赋 MIN值C.语句 if(maxxi)max=xi;中判断条件设置错误D.赋值语句 max=MIN;放错了位置21.有以下程序: #includestdioh main() int a=2,3,5,4),i; for(i=0
8、;i4;i+) switch(i2) case 0:switch(ai2) case 0:ai+;break; case 1:ai一一; break; case 1:ai=0; for(i=0;i4;i+) printf(“d“,ai); printf(“n“); 程序运行后的输出结果是( )。(分数:2.00)A.3344B.2050C.3040D.030422.下列函数的功能是( )。 fun(char *a,char *b) while(*b= *a)!=0 a+;b+; (分数:2.00)A.将 a所指字符串赋给 b所指空间B.使指针 b指向 a所指字符串C.将 a所指字符串和 b所指
9、字符串进行比较D.检查 a和 b所指字符串中是否有023.有以下程序: #includestdioh main() int case;float printF; printf(“请输入 2个数:“); scanf(“d f“,&case,&printF); printf(“d fn“,case,printF); 该程序编译时产生错误,其出错原因是( )。(分数:2.00)A.定义语句出错,case 是关键字,不能用作用户自定义标识符B.定义语句出错,printF 不能用作用户自定义标识符C.定义语句无错,scanf 不能作为输入函数使用D.定义语句无错,printf 不能输出 case的值24
10、.有以下程序: #includestdioh main() int c=0,k; for(k=1;k3;k+) switch(k) default:c+=k; case 2:c+;break; case 4:c+=2;break; printf(“dn“,c); 程序运行后的输出结果是( )。(分数:2.00)A.3B.5C.7D.925.设有定义:char *c;,以下选项中能够使字符型指针 c正确指向一个字符串的是( )。(分数:2.00)A.char str=“string“;c=str;B.scanf(“s“,c);C.c=getchar():D.*c=“string“;26.有以下程
11、序: #includestdioh #includestringh main() char a10=“abcd“; printf(“d,dn“,strlen(a),sizeof(a); 程序运行后的输出结果是( )。(分数:2.00)A.7,4B.4,10C.8,8D.10,1027.有以下程序: #includestdioh main() char s=“012xy“;int i,n=0; for(i=0;si!=0;i+) if(si=a&si=z) n+; printf(“dn“,n); 程序运行后的输出结果是( )。(分数:2.00)A.0B.2C.3D.528.若有定义语句:int
12、a410,*p,*q4;且 0i4,则错误的赋值是( )。(分数:2.00)A.p=aB.qi=aiC.p=aiD.p=a2129.有以下程序: #includestdioh #includestringh main() char str20=“One *World“,“One*Dream!“),*p=str1; printf(“d,“,strlen(p); printf(“sn“,p); 程序运行后的输出结果是( )。(分数:2.00)A.9,One*WorldB.9,One*Dream!C.10,One*Dream!D.10,One*World30.有以下程序:#includestdioh
13、void fun(int p) int d=2; p=d+; printf(“d“,p);main() int a=1: fun(a); printf(“dn“,a);程序运行后的输出结果是( )。(分数:2.00)A.32B.12C.21D.2231.有以下程序:#includestdiohint f(int n) static int a=1: n+=a+; return n;main() int a=3,s; s=f(a);s=s+f(a); printf(“dn“,s); 程序运行以后的输出结果是( )。(分数:2.00)A.7B.8C.9D.1032.设有定义:double a10,
14、*s=a;,以下能够代表数组元素 a3的是( )。(分数:2.00)A.(*s)3B.*(s+3)C.*s3D.*s+333.下列关于 return语句的叙述中,正确的是( )。(分数:2.00)A.一个自定义函数中必须有一条 return语句B.一个自定义函数中可以根据不同情况设置多条 return语句C.定义成 void类型的函数中可以有带返回值的 return语句D.没有 return语句的自定义函数在执行结束时不能返回到调用处34.在源程序的开始处加上“#includestdioh”进行文件引用的原因,以下叙述正确的是( )。(分数:2.00)A.stdio文件中包含标准输入输出函数的
15、函数说明,通过引用此文件以便能正确使用 printf、scanf 等函数B.将 stdioh 中标准输入输出函数链接到编译生成的可执行文件中,以便能正确运行C.将 stdioh 中标准输入输出函数的源程序插入到引用处,以便进行编译链接D.将 stdioh 中标准输入输出函数的二进制代码插入到引用处,以便进行编译链接35.设有以下函数: void fun(int n,char*s) 则下面对函数指针的定义和赋值均是正确的是( )。(分数:2.00)A.void(*pf)();pf=fun;B.void *pf();pf=fun;C.void *pf();*pf=fun;D.void(*pf)(i
16、nt char);pf=&fun;36.有以下程序: #includestdioh main() int m=1,n=2,*p=&m,*q=&n,*r; r=p;p=q;q=r; printf(“d,d,d,dn“,m,n,*p,*q); 程序运行后的输出结果是( )。(分数:2.00)A.1,2,1,2B.1,2,2,1C.2,1,2,1D.2,1,1,237.有以下程序: #includestdioh #define f(x)x*x*x main() int a=3,s,t; s=f(a+1); t=f(a+1); printf(“d,dn“,s,t); 程序运行后的输出结果是( )。(分
17、数:2.00)A.10,64B.10,10C.64,10D.64,6438.下面结构体的定义语句中,错误的是( )。(分数:2.00)A.struct ordint x;int y;int z;structord a;B.struct ordint x;int y;int z;structord a;C.struct ordint x;int y;int z;a;D.structint x;int y;int z;a;39.有以下程序: #includestdioh #includestringh struct A int a;char b10;double c; ;struct A f(st
18、ruct A t); main() struct A a=1001,“ZhangDa“,10980; a=f(a); printf(“d,s,61fn“,aa,ab,ac); struct A f(struct A t) ta=1002; strcpy(tb,“ChangRong“); tc=12020; return t; 程序运行后的输出结果是( )。(分数:2.00)A.1001,ZhangDa,10980B.1002,ZhangDa,12020C.1001,ChangRong,10980D.1002,ChangRong,1202040.以下叙述中正确的是( )。(分数:2.00)A.当
19、对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失B.打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖C.在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第 1个数据D.C语言中的文件是流式文件,因此只能顺序存取数据二、程序填空题(总题数:1,分数:2.00)41.下列给定程序中已建立了一个带头结点的单向链表,链表中的各结点按数据域递增有序链接。函数fun的功能是:删除链表中数据域值相同的结点,使之只保留一个。 请在下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构! 试题程序: #
20、includestdioh #includestdlibh #define N 8 typedef struct list int data; struct list*next; SLIST; void fun(SLIST *h) SLIST *p,*q; p=h 一next; if(p!=NULL) q=p一next; while(q!=NULL) if(p 一data=q 一data) p 一next=q 一next; *found* free(【1】); *found* q=p 一【2】; else p=q; *found* q=q 一【3】; SLIST *creatlist(int
21、*a) SLIST *h,*p,*q;int i; h=p=(SLIST *)malloc(sizeof(SLIST); for(i=0;iN;i+) q=(SLIST *)malloc(sizeof(SLIST); q 一data=ai;p 一next=q;p=q; p 一next=0; return h; void outlist(SLIST *h) SLIST *p; p=h 一next; if(p=NULL) printf(“The list is NULL!n“);else printf(“nHead“); do printf(“一d“,p 一data); p=p 一next; wh
22、ile(p!=NULL);printf(“一Endn“); main() SLIST *head; int aN=1,2,2,3,4,4,4,5; head=creatlist(a); printf(“The list before deleting:n“); outlist(head); fun(head); printf(“The list after deleting:n“); outlist(head); (分数:2.00)_三、程序修改题(总题数:1,分数:2.00)42.下列给定程序中,函数 fun的功能是:求两个非零正整数的最大公约数,并作为函数值返回。 例如,若 num1和 n
23、um2分别为 49和 21,则输出的最大公约数为 7;若 num1和 num2分别为 27和 81,则输出的最大公约数为 27。 请改正函数 fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdioh int fun(int aint b) int r,t; if(ab) *found* t=a;b=a;a=t; r=ab; while(r!=0) a=b;b=r;r=ab; *found* return(a); main() int num1,num2,a; printf(“Input num
24、1 num2:“); scanf(“dd“,num1,num2); printf(“num1=d num2=dn“,num1,num2); a=fun(num1,num2); printf(“The maximun common divisor isdn“,a); (分数:2.00)_四、程序设计题(总题数:1,分数:2.00)43.请编写函数 fun,其功能是:计算并输出给定数组(长度为 9)中每相邻两个元素的平均值的平方根之和。例如,若给定数组中的 9个元素依次为120、340、40、230、340、450、180、30,110,则输出应为 S=35951014。 注意:请勿改主动函数 m
25、ain和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。 #includestdioh #includemathh double fun(double x9) main() double s,a9=120,340,40,230,340,450,180,30,110; int i; FILE *out; printf(“nThe original data is:“); for(i=0;i9;i+) printf(“61f“,ai); printf(“n“); s=fun(a): printf(“s=fn“,s); * out=fopen(“outdat“,“w“); fp
26、rintf(out,“f“,s); fclose(out); * (分数:2.00)_国家二级(C 语言)机试模拟试卷 153答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.算法的空间复杂度是指( )。(分数:2.00)A.算法在执行过程中所需要的计算机存储空间 B.算法所处理的数据量C.算法程序中的语句或指令条数D.算法在执行过程中所需要的临时工作单元数解析:解析:算法的空间复杂度是指算法在执行过程中所需要的计算机存储空间。通常用 o()来表示。2.对于循环队列,下列叙述中正确的是( )。(分数:2.00)A.队头指针是固定不变的B.队头指针
27、一定大于队尾指针C.队头指针一定小于队尾指针D.队头指针可以大于队尾指针,也可以小于队尾指针 解析:解析:在循环队列中,用队尾指针(rear)指向队列中的队尾元素,用队头指针(front)指向队头元素的前一个位置。在循环队列中,一般情况下 rearfront,当存储空间的最后一个位置被使用,而新元素要入队时,如果存储空间的第一个位置空闲,便可将元素插入到第一个位置,此时存储空间的第一个位置作为队尾,便有 frontrear。3.下列数据结构中,能够按照“先进后出”原则存取数据的是( )。(分数:2.00)A.循环队列B.栈 C.队列D.二叉树解析:解析:栈是按照“先进后出”原则在表特定的一端进
28、行插入和删除运算操作的线性表。4.下列选项中不属于结构化程序设计原则的是( )。(分数:2.00)A.可封装 B.自顶向下C.模块化D.逐步求精解析:解析:结构化程序设计的基本原则包括:模块化设计;自顶向下原则;逐步求精原则;限制使用 goto语句。可封装是面向对象的设计思想。5.面向对象方法中,继承是指( )。(分数:2.00)A.一组对象所具有的相似性质B.一个对象具有另一个对象的性质C.各对象之间的共同性质D.类之间共享属性和操作的机制 解析:解析:继承是面向对象方法的一个主要特征,是使用已有的类的定义作为基础建立新类的定义技术。在广义上来说,继承是指能够直接获得已有的性质和特征,而不必
29、重复定义它们,因而说继承是指类之间共享属性和操作的机制。6.以下叙述中正确的是( )。(分数:2.00)A.程序设计的任务就是编写程序代码并上机调试B.程序设计的任务就是确定所用数据结构C.程序设计的任务就是确定所用算法D.以上三种说法都不完整 解析:解析:程序设计是指设计、编程、调试程序的方法和过程,通常分为 4个阶段:问题建模;算法设计;编写代码;编译调试。其工作内容涉及有关的基本概念、工具及方法,是目标明确的智力活动。7.在软件开发中,需求分析阶段产生的主要文档是( )。(分数:2.00)A.可行性分析报告B.软件需求规格说明书 C.概要设计说明书D.集成测试计划解析:解析:可行性分析报
30、告是在可行性分析阶段产生的,A 选项错误;概要设计说明书是总体设计阶段产生的文档,C 选项错误;集成测试阶段是在概要设计阶段编写的文挡,D 选项错误。需求规格说明书是后续工作如设计、编码等需要的重要参考文档。8.软件详细设计产生的图如下: (分数:2.00)A.N-S图B.PAD图C.程序流程图 D.E-R图解析:解析:程序流程图基本图符有 3种:控制流(用箭头表示)、加工步骤(用方框表示)、逻辑条件(用菱形表示)。控制结构有 5种:顺序结构;选择结构;多分支选择结构;后判断重复型结构;先判断重复型结构。题目中是选择结构的程序流程图。9.在黑盒测试方法中,设计测试用例的主要依据是( )。(分数
31、:2.00)A.程序内部逻辑B.程序外部功能 C.程序数据结构D.程序程序流程解析:解析:黑盒测试是对软件已经实现的功能是否满足需求进行测试和验证。黑盒测试完全不考虑程序内部的逻辑结构和内部特性,只根据程序的需求和功能规格说明,检查程序的功能是否符合它的功能说明。故 B选项正确。10.有三个关系 R,S 和 T如下: (分数:2.00)A.选择B.投影C.交D.并 解析:解析:选择和投影操作对单个关系进行操作,选择运算是对行的操作,投影运算是对列的操作,运算结果是一个关系。交和并运算要求参与运算的表具有相同的属性,交运算的结果是两个表的公共部分,并运算的结果包含两个表的所有元素。11.下面是有
32、关 C语言字符数组的描述,其中错误的是( )。(分数:2.00)A.不可以用赋值语句给字符数组名赋字符串B.可以用输入语句把字符串整体输入给字符数组C.字符数组中的内容不一定是字符串D.字符数组只能存放字符串 解析:解析:字符数组可以用来存放单个的字符或者字符串。12.计算机能直接执行的程序是( )。(分数:2.00)A.源程序B.目标程序C.汇编程序D.可执行程序 解析:解析:由高级语言编写的程序称为“源程序”,由二进制代码表示的程序称为“目标程序”。由汇编语言编写的程序称为“汇编程序”。对于计算机本身来说,它只能接收和处理由 0和 1的代码构成的二进制指令和数据。所以计算机能识别的程序是“
33、目标程序”,而计算机可以直接执行的程序是可执行程序,即扩展名为exe 的程序。13.以下选项中,能用作用户标识符的是( )。(分数:2.00)A.voidB.8_8C._0_ D.unsigned解析:解析:标识符是由若干个字符组成的字符序列,用来命名程序的一些实体。C 语言定义标识符应遵循以下六种规则:标识符由字母、数字或下画线组成;第一个字符必须是字母或下画线;标识符最多由 274个字符组成;在标识符中严格区分大小写字母;关键字不能作为自定义的标识符在程序中使用。14.若有以下程序段: int r=8; printf(“dn“,r1); 输出结果是( )。(分数:2.00)A.16B.8C
34、.4 D.2解析:解析:C 语言中“”是对二进制的右移运算符,右移相当于将原数做除二操作,它将原数右移相应位数,并将移出的位信息舍去,在高位补 0,将所得的结果再赋值给变量。本题中 8的二进制为00001000,右移一位得到 00000100,所以是 4。15.有以下定义语句,编译时会出现编译错误的是( )。(分数:2.00)A.char a=aB.char a=n;C.char a=aa; D.char a=x2d解析:解析:本题中 a为一个字符型变量,只能为其赋值一个字符常量。C 项中aa不是字符常量,所以会编译错误。BD 两项为转义字符,编译可以通过。16.有以下程序: #include
35、stdioh main() char c1,c2; c1=A+8一4; c2=A+8一5; printf(“c dn“,c1,c2); 已知字母 A的 ASCII码为 65,程序运行后的输出结果是( )。(分数:2.00)A.E 68 B.D 69C.E DD.输出无定值解析:解析:C 语言中每个字符都对应一个 ASCII码值,该值可以用来运算。本题中 main函数将字符 A经过加 4和加 3运算后分别赋值给 c1、c2,然后将 c1按字符格式输出,c2 按整型格式输出。17.有如下语句: k=ab?(bc?1:0):0;, 以下程序段中,与上述语句功能相同的是( )。(分数:2.00)A.i
36、f(ab)&(bc)k=1; else k=0; B.if(ab)(bc),k=1; else k=0;C.if(a=b)k=0; else if(b=c)k=1;D.if(ab)k=1; else if(bc)k=1; else k=0;解析:解析:三元运算符表达式的形式为:表达式 1?表达式 2:表达式 3,当表达式 1的值为真时,结果为表达式 2的值;当表达式 1的值为假时,结果为表达式 3的值。首先判断 a、b 的关系:如果 ab,那么就执行“:”前面的语句(bc?1:0);判断 b、c 的关系,如果 bc,k=1,否则 k=0;如果a=b,则 k=0。综上所述:当 ab 且 bc 时
37、,k=1,否则 k=0,与 A项语句功能相同。18.设有定义:int a=1,b=2,c=3;,以下语句中执行效果与其他三个不同的是( )。(分数:2.00)A.if(ab)c=a,a=b,b=c;B.if(ab)c=a,a=b,b=cC.if(ab)c=a;a=b;b=c; D.if(ab)c=a;a=b;b=c解析:解析:C 语言中 if语句后面只跟一条语句时,可以省略大括号。即 if语句仅作用于紧随其后的那条语句或者是复合语句的内容,所以 A项执行三条语句组成的复合语句;BD 两项执行大括号中的三条语句;而 C项只执行 c=a;。19.有以下程序: #includestdioh main
38、() int n=2,k=0; while(k+&n+2); printf(“d dn“,k,n); 程序运行后的输出结果是( )。(分数:2.00)A.0 2B.1 3C.5 7D.1 2 解析:解析:(表达式 1)&(表达式 2)中,如果表达式 1为假或 0,那么表达式 2就不会被执行。本题中首先进入 while的判断语句,执行 k+和 n+。k+为零,不满足循环条件,所以 n+不会被执行,while循环结束后,k 经过运算自增为 1,n 没有进行运算,仍为 2。20.以下函数中,findmax 拟实现在数组中查找最大值并作为函数值返回,但程序中有错导致不能实现预定功能。 #define
39、MIN 一 2147483647 int findmax(int x,int n) int i,max; for(i=0;in;i+) max=MIN; if(maxxi)max=xi; return max; 造成错误的原因是( )。(分数:2.00)A.定义语句 int i,max;中 max未赋初值B.赋值语句 max=MIN;中,不应给 max赋 MIN值C.语句 if(maxxi)max=xi;中判断条件设置错误D.赋值语句 max=MIN;放错了位置 解析:解析:本题中 for循环中首先将 MIN值赋值给 max,然后用 xi与 max的值比较。每次都是将 MIN值与 xi值进行比
40、较,所以无论 xi的值是什么,都不会影响 if的判断语句,max=i始终执行。所以函数返回的是数组中最后一个元素的值。本题的错误在于 max=MIN的位置,for 循环之前应先执行max=MIN。21.有以下程序: #includestdioh main() int a=2,3,5,4),i; for(i=0;i4;i+) switch(i2) case 0:switch(ai2) case 0:ai+;break; case 1:ai一一; break; case 1:ai=0; for(i=0;i4;i+) printf(“d“,ai); printf(“n“); 程序运行后的输出结果是(
41、 )。(分数:2.00)A.3344B.2050C.3040 D.0304解析:解析:main 函数的主体是一个 for循环语句,for 循环中包含一个 switch语句,如果判断条件为0则进入第二个 switch语句,如果判断语句为 1则执行“ai=0”,最后将数组顺序输出。所以程序的功能是将数组的偶数项设为 0,奇数项如果为奇数则减 1,为偶数就加 1,最后得到结果。22.下列函数的功能是( )。 fun(char *a,char *b) while(*b= *a)!=0 a+;b+; (分数:2.00)A.将 a所指字符串赋给 b所指空间 B.使指针 b指向 a所指字符串C.将 a所指字
42、符串和 b所指字符串进行比较D.检查 a和 b所指字符串中是否有0解析:解析:题中 a和 b是两个字符型指针,在 while语句的表达式中将指针 a所指向的字符赋给指针 b所指向的内存单元,再判断指针 b所指向的字符是不是字符串中的结尾符。若不是,则字符指针 a和 b的值分别自增,再执行循环语句,直至 b所指向的字符为字符串中的结尾符。23.有以下程序: #includestdioh main() int case;float printF; printf(“请输入 2个数:“); scanf(“d f“,&case,&printF); printf(“d fn“,case,printF);
43、该程序编译时产生错误,其出错原因是( )。(分数:2.00)A.定义语句出错,case 是关键字,不能用作用户自定义标识符 B.定义语句出错,printF 不能用作用户自定义标识符C.定义语句无错,scanf 不能作为输入函数使用D.定义语句无错,printf 不能输出 case的值解析:解析:C 语言中,关键字又称保留字,它是系统预先定义的、具有特定含义的标识符,不能用作用户自定义的标识符在程序中使用。24.有以下程序: #includestdioh main() int c=0,k; for(k=1;k3;k+) switch(k) default:c+=k; case 2:c+;brea
44、k; case 4:c+=2;break; printf(“dn“,c); 程序运行后的输出结果是( )。(分数:2.00)A.3 B.5C.7D.9解析:解析:本题中 for语句的主体为一个 switch语句,switch 语句的判断条件 k=2时执行“case 2”,然后终止本层 switch;否则执行“default”语句,然后再执行“case 2”语句,并终止本层switch语句。所以当 k=1时:c=012;当 k=2时:c=23;当 k=3时 for循环结束。结果为 3。25.设有定义:char *c;,以下选项中能够使字符型指针 c正确指向一个字符串的是( )。(分数:2.00)
45、A.char str=“string“;c=str; B.scanf(“s“,c);C.c=getchar():D.*c=“string“;解析:解析:B 选项中 scanf()函数是将 c定义为一个字符数组的数组名,C 选项中是将 c定义为一个字符型变量,D 项是在指针定义时为它赋值,否则是不合法的,所以 BCD三项都不正确。A 选项定义字符数组 str,再将字符数组 str的首地址赋给字符型指针 c,正确。26.有以下程序: #includestdioh #includestringh main() char a10=“abcd“; printf(“d,dn“,strlen(a),size
46、of(a); 程序运行后的输出结果是( )。(分数:2.00)A.7,4B.4,10 C.8,8D.10,10解析:解析:在 C语言中,strlen()用来统计字符串中字符的个数,sizeof()是求分配给数组的存储空间大小。题目中字符串 a中字符个数为 4,但由于数组 a定义含有 10个字符,所以所占空间大小为 10。27.有以下程序: #includestdioh main() char s=“012xy“;int i,n=0; for(i=0;si!=0;i+) if(si=a&si=z) n+; printf(“dn“,n); 程序运行后的输出结果是( )。(分数:2.00)A.0B.2 C.3D.5解析:解析:本题