1、国家二级 C语言机试(C 语言程序设计)模拟试卷 29及答案解析(总分:52.00,做题时间:90 分钟)一、选择题(总题数:26,分数:52.00)1.若以下选项中变量全部为整型变量,且已正确定义并赋值,则语法正确的 switch语句是(分数:2.00)A.switch(a+b) case 1:case 3:y=a+b;break; case 0:case 4:y=a-b: B.switch(a*a+b*b) default:break; case 3:y=a+b;break; case 2:y=a-b;break;)C.switch(a+9) case c1:y=a-b; case c2:
2、y=a+b; D.switch a*b case 10:x=a+b; default:y=a-b; 2.有以下程序 main()int x=1,y=0,a=0,b=0; switch(x) case 1:switch(y) case 0:a+;break; case 1:b+;break; case 2:a+;b+;break; case 3:a+;b+;) printf(“a=d,b=dn“,a,b); 程序的运行结果是(分数:2.00)A.a=2,b=2B.a=1,b=1C.a=1,b=0D.a=2,b=13.若有定义: float x=15;int a=1,b=3,c=2;则正确的 sw
3、itch语句是(分数:2.00)A.switch(a+b)case 1:printf(“*n“); case 2+1:printf(“*n“);)B.switch(int)x);case 1:printf(“*n“);case 2:printf(“*n“);)C.switch(x)case 10:printf(“*n“);case 20:printf(“*n“);)D.switch(a+b)case 1:printf(“*n“);case c:printf(“*n“);)4.下列叙述中正确的是(分数:2.00)A.在 switch语句中必须使用 defaultB.break语句必须与 swit
4、ch语句中的 case配对使用C.在 switch语句中,不一定使用 break语句D.break语句只能用于 switch语句5.有以下程序 main()int k=5,n=0; doswitch(k) case 1:case 3:n+=1;k-;break; default:n=0;k-; case 2:case 4:n+=2;k-;break; printf(“d“,n);) while(k0&nA.0235B.235C.02356D.23566.以下选项中与 if(a=1)a=b;else a+;语句功能不同的 switch语句是(分数:2.00)A.switch(a=1)case 0
5、:a=b;break;case 1:a+;B.switch(a)case 1:a=b;break;default:a+;C.switch(a)default:a+;break;case 1:a=b;D.switch(a=1)case 1:a=b;break;case 0:a+;7.有以下程序 #include main()int x=1,y=0,a=0,b=0; switch(x)case 1:switch(y) ease 0:a+;break; case 1:b+;break; case 2:a+;b+;break; printf(“a=d,b=dn“,a,b); 程序运行后的输出结果是(分
6、数:2.00)A.a=1,b=lB.a=1,b=0C.a=2,b=1D.a=2,b=28.若以下选项中的变量 a,b,y 均已正确定义并赋值,则语法正确的 switch语句是(分数:2.00)A.switch(a*a+b*b)default:break;case 3:y=a+b;break;case 2:y=a-b:break:B.switch(a+b)ease1:case3:y=a+b;break;case0:case4:y=a-b;C.switch(a+9)case a:y=a-b;case b:y=a+b;D.switch a*bcase 10:y=a+b:default:y=a-b:9
7、.在嵌套使用 if语句时,C 语言规定 else总是(分数:2.00)A.和之前与其具有相同缩进位置的 if配对B.和之前与其最近的 if配对C.和之前与其最近的且不带 else的 if配对D.和之前的第一个 if配对10.以下程序段中,与语句: 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:D.if(ab)k=1;else if(bc)k=1:else k=0:11.关于“while(条件表达式)循环体”,以下叙述正确的是(分数:2.00)A.循环体的执行次数总是比条件表达式
8、的执行次数多一次B.条件表达式的执行次数与循环体的执行次数一样C.条件表达式的执行次数总是比循环体的执行次数多一次D.条件表达式的执行次数与循环体的执行次数无关12.有以下程序 #include main()int y=10; while(y=); printf(“y=dn“,y); 程序执行后的输出结果是(分数:2.00)A.y=0B.y=-1C.y=1D.while构成无限循环13.有以下程序 main()int k=5; while(-k) printf(“d“,k-=3); printf(“n“); 执行后的输出结果是(分数:2.00)A.2B.4C.1D.死循环14.有以下程序 ma
9、in()int y=10; while(y-); printf(“y=dn“,y); 程序执行后的输出结果是(分数:2.00)A.y=0B.y=1C.y=-1D.while构成无限循环15.有以下程序 #include void main() int s; scanf(“d“,&s); while(s0) switch(s) case 1:printf(“d“,s+5); case 2:printf(“d”,s+4);break; case 3:printf(“d”,s+3); default:printf(“d”,s+1);break; scanf(“d”,&s); 运行时,若输入 1 2
10、3 4 5 0,则输出结果是(分数:2.00)A.66656B.6566456C.66666D.666665616.有以下程序 #include main()int a=7; while(a-); printf(“dn”,a); 程序运行后的输出结果是(分数:2.00)A.0B.1C.-1D.717.在以下给出的表达式中,与 while(E)中的(E)不等价的表达式是(分数:2.00)A.(E0E0&nA.0235B.235 C.02356D.2356解析:解析:因为变量的初始值分别为 k=5,n=0,所以程序第 1次进入循环时,执行 default语句,“n=0,k=4”,没有 break语
11、句,因此执行 case 2分支语句,n 为 2,k 为 3,程序进行第 2次循环,执行“case 3:n=3,k=2”,输出 n值为 3,程序进行第 3次循环,执行 case 3这个分支,结果是“n=5,k=1”,打印出 5;这时因为 n=5不满足。nb?(bc?1:0):0;功能相同的是(分数:2.00)A.if(ab)(bc)k=1;else k=0:B.if(ab)&(bc)k=1;else k=0: D.if(ab)k=1;else if(bc)k=1:else k=0:解析:解析:题干中的表达式的功能是当 ab并且 bc时,变量 k的值等于 1,其余情况下,变量 k的值都是等于 0。
12、11.关于“while(条件表达式)循环体”,以下叙述正确的是(分数:2.00)A.循环体的执行次数总是比条件表达式的执行次数多一次B.条件表达式的执行次数与循环体的执行次数一样C.条件表达式的执行次数总是比循环体的执行次数多一次 D.条件表达式的执行次数与循环体的执行次数无关解析:解析:while 语句中表达式是循环条件,语句为循环体。while 语句中当表达式计算的值为真(非 0)时,执行循环体语句。因此条件表达式执行的次数总是比循环体多一次。12.有以下程序 #include main()int y=10; while(y=); printf(“y=dn“,y); 程序执行后的输出结果是
13、(分数:2.00)A.y=0B.y=-1 C.y=1D.while构成无限循环解析:解析:在 while循环中每次变量 y的值减 1,直到其值等于 0时退出循环,这时 y的再减 1变为一1。13.有以下程序 main()int k=5; while(-k) printf(“d“,k-=3); printf(“n“); 执行后的输出结果是(分数:2.00)A.2B.4C.1 D.死循环解析:解析:在程序语句中,k 的初始值为 5,进行第 1次 while循环后,k 自减 1为 4,非 0,执行循环体里的 printf语句,输出 1,此时 k的值变为 1。程序执行第 2次循环时,k 自减 l变为
14、0,为假,退出while循环语句。所以程序的最后结果为 1。14.有以下程序 main()int y=10; while(y-); printf(“y=dn“,y); 程序执行后的输出结果是(分数:2.00)A.y=0B.y=1C.y=-1 D.while构成无限循环解析:解析:while 循环语句的循环体为空语句,所以每一次循环程序什么都不做。当循环自变量 y=0时,退出循环结束,变量 y执行自减运算,得-1,所以打印输出变量 y的值为-1。15.有以下程序 #include void main() int s; scanf(“d“,&s); while(s0) switch(s) case
15、 1:printf(“d“,s+5); case 2:printf(“d”,s+4);break; case 3:printf(“d”,s+3); default:printf(“d”,s+1);break; scanf(“d”,&s); 运行时,若输入 1 2 3 4 5 0,则输出结果是(分数:2.00)A.66656B.6566456 C.66666D.6666656解析:解析:这道试题主要考查了 switch和 break语句,当变量 s的值为 1时,执行 case1、case 2 两条语句,输出 65;当变量 s的值为 2时,执行 case 2语句,输出 6;变量 s的值为 3时,执
16、行case3、default 两条语句,输出 64;变量 s的值为 4时,执行 default语句,输入 5;变量 s的值为 5时,执行 default语句,输出 6:变量 s的值为 0时,程序运行结束。16.有以下程序 #include main()int a=7; while(a-); printf(“dn”,a); 程序运行后的输出结果是(分数:2.00)A.0B.1C.-1 D.7解析:解析:在 while语句中,先判断 while后面的表达式是否为 0,如果为 0,则退出循环,否则执行循环体。在本题中,当变量 a的值经过几次循环后,其值等于 0时,退出 while循环语句,变量 a再
17、执行自减运算,所以其值等于-1。17.在以下给出的表达式中,与 while(E)中的(E)不等价的表达式是(分数:2.00)A.(E0E0IlE0是一个逻辑表达式。18.要求通过 while循环不断读入字符,当读入字母 N时结束循环。若变量已正确定义,以下正确的程序段是(分数:2.00)A.while(ch=getchar0=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);解
18、析:解析:while 循环的执行过程如下: 计算 while后面圆括号中表达式的值,当值为非 0时,执行步骤;当值为 0时,执行步骤: 执行循环体一次; 转去执行步骤; 退出循环。 在选项C中,表达式(ch=getchar()!=N表示输入的字符不等于 N,如果这个条件表达式成立,则执行循环体,打印输出输入的字符。如果这个条件表达式不成立,即输入的字符等于 N,则退出循环。19.若有以下程序 main()int a=-2,b=0; while(a+) +b: printf(“d,dn“,a,b); 则程序的输出结果是(分数:2.00)A.0,2B.1,2 C.1,3D.2,3解析:解析:循环体
19、执行两次,第一次表达式 a+值为-2,a 的值为-1,执行循环体+b,b 值为 1,第二次表达式 a+值为-1,a 的值等于 0,执行+b,b 值为 2,第三次判断条件 a+,表达式值为 0,不执行循环体,但是条件判断以后,a 的值为 1。20.由以下 while构成的循环,循环体执行的次数是 int k=0;while(k=1)k+;(分数:2.00)A.一次也不执行B.执行一次C.无限次 D.有语法错,不能执行解析:解析:循环条件表达式为赋值表达式 k=1,因此循环执行无限次。21.有以下程序 main()int a=-2,b=0; while(a+&+b); printf(“d,dn“,
20、a,b); 程序运行后输出结果是(分数:2.00)A.0,3B.1,2 C.1,3D.0,2解析:解析:循环体为空,共执行 2次。第一次变量 a初值为-2,b 初值为 0,表达式 a+&+b值为 1,同时 a的值为-1,b 的值为 1,第二次循环条件判断以后,a 的值为 0,b 的值 2,执行循环体空,第三次判断条件表达式值为 0,不执行循环体,而 a的值为 1,但是表达式卅的值为 0,因此不计算表达式+b 的值,b 的值仍为 2。22.关于 do循环体 while(条件表达式);以下叙述中正确的是(分数:2.00)A.循环体的执行次数总是比条件表达式的执行次数多一次B.条件表达式的执行次数总
21、是比循环体的执行次数多一次C.条件表达式的执行次数与循环体的执行次数无关D.条件表达式的执行次数与循环体的执行次数一样 解析:解析:dowhile 语句先执行语句,后判断表达式的值。故 doVwhile语句又称“直到型”循环结构。由于是先执行后判断,因此 dowhile语句的循环语句至少被执行一次,循环条件至少判断一次。23.以下不构成无限循环的语句或语句组是(分数:2.00)A.n=0;do+n;)while(n=0); B.n=0;while(1)n+;C.n=10;while(n);n-;D.for(n=0,i=1;i+)n+=i;解析:解析:选项 B中 while(1)永远为真所以进入
22、死循环,选项 C中 while(n=10)同理,选项 D中 for循环没有循环限定条件也将进入无限循环,只有选项 A中 while(n=0)循环判定成立,循环将不进入无限循环。24.有以下程序 main() int i=5; do if(i3=1) if(i5=2)printf(“*d“,i); break; i+: while(i!=0); printf(“n“); 程序的运行结果是(分数:2.00)A.*3*5B.*5C.*7 D.*2*6解析:解析:由于循环变量 i的初值等于 5,所以第一、二次进入 dowhile循环语句时,条件语句if(i3=1),if(i5=2)printf(“*d
23、”,i);break;不执行,只执行 i+语句。当 i=7时,满足条件语句 if(i3=1),if(i5=2)printf(“*d“,i);break;,所以输出*7,结束循环。25.若变量已正确定义,有以下程序段 i=0; do printf(“d,“,i); while(i+); printf(“dn“,i);其输出结果是(分数:2.00)A.0,0B.1,1C.0,1 D.程序进入无限循环解析:解析:dowhile 循环的执行过程如下:执行 do后面的循环体中的语句。计算 while后一对圆括号中表达式的值。当值为非 0时,转去执行步骤;当值为 0时,执行步骤。退出 dowhile循环。
24、对于本题变量 i的初始值等于“0”,接着执行 do后面的循环体中的语句,输出变量 i的值 0。再判断 while后面括号中表达式 i+的值,其值为 0,所以循环结束。此时变量 i的值经过自加已经变为 1,所以再次输出 i的值“1”。26.若有以下程序 main()int a=-2,b=0; do+b;while(a+); printf(“d,dn“,a,b); 则程序的输出结果是(分数:2.00)A.0,2B.1,2C.1,3 D.2,3解析:解析:由于 a的初始值等于-2,所以 while循环语言执行三次结束,第一次 a=-2,b=1,然后判断循环条件 a+非零,执行第二次循环体 a=-1,b=2,判断循环条件非零,执行循环体 a=0,b=3,判断循环条件为 0,此时变量 a的值等于 1。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1