1、国家二级 C语言( C语言程序设计)机试模拟试卷 13及答案与解析 一、选择题 1 关于 do 循环体 while (条件表达式 ); 以下叙述中正确的是 ( A)循环体的执行次数总是比条件表达式的执行次数多一次 ( B)条件表达式的执行次数总是比循环体的执行次数多一次 ( C)条件表达式的执行次数与循环体的执行次数无关 ( D)条件表达式的执行次数与循环体的执行次数一样 2 以下不构成无限循环的语句或语句组是 ( A) n=0; do +n; while (n =0); ( B) n=0; while (1) n+; ( C) n=10; while (n); n-; ( D) for(n=
2、0,i=1; ; i+) n+=i; 3 有以下程序 main() int i=5; do if (i%3=1) if (i%5=2) printf(“*%d“, i); break; i+; while(i!=0); printf(“n“); 程序的运行结果是 ( A) *3*5 ( B) *5 ( C) *7 ( D) *2*6 4 若变量已正确定义,有以下程序段 i=0; do printf(“%d,“,i); while( i+ ); printf(“%dn“,i); 其输出结果是 ( A) 0,0 ( B) 1,1 ( C) 0,1 ( D)程序进入无限循环 5 若有以下程序 mai
3、n() int a=-2, b=0; do +b ; while(a+); printf(“%d,%dn“, a, b); 则程序的输出结果是 ( A) 0,2 ( B) 1,2 ( C) 1,3 ( D) 2,3 6 有以下程序 main() int a = 3; do printf(“%d,“, a-=2 ); while( ! (-a) ); printf(“n“); 程序运行后的输出结果是 ( A) 1, ( B) 1, -2, ( C) 3,0, ( D) 1,0 7 有以下程序段 int i,n; for(i=0;i 8;i+) n=rand()%5; switch(n) case
4、 1: case 3:printf(“%dn“,n);break; case 2: case 4:printf(“%dn“,n);continue; case 0:exit(0); printf(“%dn“,n); 以下关于程序段执行情况的叙述,正确的是 ( A)当产生的随机数 n为 4时结束循环操作 ( B)当产生的随机数 n为 1和 2时不做任何操作 ( C)当产生的随机数 n为 0时结束程序运行 ( D) for循环语句固定执行 8次 8 有以下程序 #include stdio.h main( ) int y=9; for(;y 0;y-) if(y%3= =0) printf(“%d
5、“,-y); 程序的运行结果是 ( A) 963 ( B) 852 ( C) 741 ( D) 875421 9 有以下程序 #include stdio.h main() int i,j,m=1; for(i=1;i 3;i+) for(j=3;j 0;j-) if(i*j 3)break; m*=i*j; printf(“m=%dn“,m); 程序运行后的输出结果是 ( A) m=2 ( B) m=4 ( C) m=5 ( D) m=6 10 有以下程序 #include stdio.h void main() int c=0,k; for(k=1;k 3;k+) switch(k) de
6、fault:c+=k; case 2:c+;break; case 4:c+=2;break; printf(“%dn“,c); ( A) 9 ( B) 7 ( C) 5 ( D) 3 11 有以下程序 #include stdio.h main() int i, j; for(i=3; i =l; i-) for(j=1; j =2; j+) printf(“%d“, i+j); printf(“n“); 程序的运行结果是 ( A) 4 3 2 5 4 3 ( B) 2 3 3 4 4 5 ( C) 4 5 3 4 2 3 ( D) 2 3 3 4 2 3 12 有以下程序 main( )
7、int i; for(i=1;i =40;i+ +) if(i+ +%5= =0) if(+ +i%8= =0) printf(“%d“,i); printf(“n“); 执行后的输出结果是 ( A) 24 ( B) 5 ( C) 32 ( D) 40 13 有以下程序 #include stdio.h void main() char b,c;int i; b=a;c=A; for(i=0;i 6;i+) if(i%2)putchar(i+b); else putchar(i+c); printf(“n“); 程序运行后的输出结果是 ( A) ABCDEF ( B) aBcDeF ( C)
8、abcdef ( D) AbCdEf 14 有以下程序 main() int a=1, b=2; for( ;a 8;a+) b+=a; a+=2; printf(“%d,%dn“,a,b); 程序运行后的输出结果是 ( A) 8,11 ( B) 10,14 ( C) 7,11 ( D) 9,18 15 有以下程序段 int i,n; for(i=0;i 8;i+) n=rand()%5; switch(n) case 1: case 3:printf(“%dn“,n);break; case 2: case 4:printf(“%dn“,n);continue; case 0:exit(0)
9、; printf(“%dn“,n); ( A)当产生的随机数 n为 4时结束循环操作 ( B)当产生的随机数 n为 1和 2时不做任何操作 ( C)当产生的随机数 n为 0时结束程序运行 ( D) for循环语句固定执行 8次 16 若有以下程序 main() int a=6, b=0, c=0; for ( ;a; ) b += a; a -= +c; printf(“%d,%d,%dn“, a,b,c); 则程序的输出结果是 ( A) 1,14,3 ( B) 0,18,3 ( C) 0,14,3 ( D) 0,14,6 17 若有以下程序 main() int a=6, b=0, c=0;
10、 for ( ;a ) b += a; a -= c+; printf(“%d,%d,%dn“, a,b,c); 则程序的输出结果是 ( A) 6,0,0 ( B) 5,6,0 ( C) 6,6,1 ( D) 5,6,1 18 以下叙述中正确的是 ( A)对于 “for(表达式 1;表达式 2;表达式 3) 循环体 ”首先要计算表达式 2的值,以便决定是否开始循环 ( B)对于 “for(表达式 1;表达式 2;表达式 3) 循环体 ”,只在个别情况下才能转换成 while语句 ( C)只要适当地修改代码,就可以将 do-while与 while相互转 换 ( D)如果根据算法需要使用无限循环
11、(即通常所称的 “死循环 ”) ,则只能使用while语句 19 若有以下程序 #include char *a=“you“; char b =“Welcome you to China!“; main() int i, j=0; char *p; for ( i=0; bi !=0; i+ ) if (*a = bi) p=a; for (j=i; *p!=0; j+) if (*p != bj) break; p+; if (*p=0) break; printf(“%s“, 则程序的输出结果是 ( A) you to China! ( B) to China! ( C) me you t
12、o China! ( D) China! 20 以下程序段中的变量已正确定义 for( i=0; i 4; i+, i+) for(k=l; k 3; k+); printf(“*“); 程序段的输出结果是 ( A) * ( B) * ( C) * ( D) * 21 有以下程序 main( ) int i,j; for(i=1;i 4;i+ +) for(j=i;j 4;j+ +) printf(“%d*%d=%d “,i,j,i*j); printf(“n“); ( A) 1*1=1 1*2=2 1*3=3 2*1=2 2*2=4 3*1=3 ( B) 1*1=1 1*2=2 2*2=4
13、1*3=3 2*3=6 3*3=9 ( C) 1*1=1 1*2=2 1*3=3 2*2=4 2*3=6 3*3=9 ( D) 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 22 有以下程序 #include stdio.h main( ) int i,j,m=55; for(i=1;i =3;i+ +) for(j=3;j =i;j+ +) m=m%j; printf(“%dn“,m); 程序的运行结果是 ( A) 0 ( B) 1 ( C) 2 ( D) 3 23 以下叙述中正确的是 ( A)循环发生嵌套时,最多只能两层 ( B)三种循环 for,while,do
14、-while可以互相嵌套 ( C)循环嵌套时 ,如果不进行缩进形式书写代码,则会有编译错误 ( D) for语句的圆括号中的表达式不能都省略掉 24 有以下程序 main( ) int i,j,x=0; for(i=0;i 2;i+ +) x+ +; for(j=0;j =3;j+ +) if(j%2) continue; x+ +; x+ +; printf(“x=%dn“,x); 程序执行后的输出结果是 ( A) x=4 ( B) x=6 ( C) x=12 ( D) x=8 25 有以下程序 #include stdio.h main() int x=8; for( ;x 0;x-) i
15、f(x%3)printf(“%d,“,x-);continue; printf(“%d,“,-x); 程序的运行结果是 ( A) 8,7,5,2, ( B) 9,7,6,4, ( C) 7,4,2, ( D) 8,5,4,2, 26 以下叙述中正确的是 ( A) continue语句的作用是:使程序的执行流程跳出包含它的所有循环 ( B) break语句 只能用在循环体内和 switch语句体内 ( C)在循环体内使用 break语句和 continue语句的作用相同 ( D) break语句只能用于 switch语句体中 27 以下叙述中正确的是 ( A) break语句不能用于提前结束 f
16、or语句的本层循环 ( B) continue语句使得整个循环终止 ( C)使用 break语句可以使流程跳出 switch语句体 ( D)在 for语句中, continue与 break的效果是一样的,可以互换 28 以下叙述中正确的是 ( A)当 break出现在循环体中的 switch语句体内时,其作用是跳出该 switch语句体,并中止循环体的执行 ( B)只能在循环体内和 switch语句体内使用 break语句 ( C) continue语句的作用是:在执行完本次循环体中剩余语句后,中止循环 ( D)在 while语句和 do-while语句中无法使用 continue语句 国家
17、二级 C语言( C语言程序设计)机试模拟试卷 13答案与解析 一、选择题 1 【正确答案】 D 【试题解析】 do-while语句先执行语句,后判断表达式的值。故 do-while语句又称 “直到型 ”循环结构。由于是先执行后判断,因此 do-while语句的循环语句至少被执行一次,循环条件至少判断一次。 【知识模块】 C语言程序设计 2 【正确答案】 A 【试题解析】 选项 B中 while(1)永远为真所以进入死循环,选项 C中 while(n=10)同理,选项 D中 for循环没有循环限定条件也将进入无限循环,只有选项 A中while(n =0)循环判定成立,循环将不进入无限循环。 【知
18、识模 块】 C语言程序设计 3 【正确答案】 C 【试题解析】 由于循环变量 i的初值等于 5,所以第一、二次进入 do.while 循环语句时,条件语句 if(i%3=1), if(i%5=2)printf(“*%d”,i);break;不执行,只执行 i+语句。当 i=7时,满足条件语句 if(i%3=1),if(i%5=2) printf(“*%d“,i);break;,所以输出 *7,结束循环。 【知识模块】 C语言程序设计 4 【正确答案】 C 【试题解析】 dowhile 循环的执行过程如下: 执行 do后面的循环体中的语句。 计算 while后一对圆括号中表达式的值。当值为非 0
19、时,转去执行步骤 ;当值为 0时,执行步骤 。 退出 dowhile 循环。对于本题变量 i的初始值等于“0”,接着执行 do后面的循环体中的语句,输出变量 i的值 0。再判断 while后面括号中表达式 i+的值,其值为 0,所以循环结束。此时变量 i的值经过自加已经变为 1,所以再次输出 i的值 “1”。 【知识模块】 C语言程序设计 5 【正确答案】 C 【试题解析】 由于 a的初始值等于 -2,所以 while循环语言执行三次结束,第一次 a=-2, b=1,然后判断循环条件 a+非零,执行第二次循环体 a=-1, b=2,判断循环条件非零,执行循环体 a=0, b=3,判断循环条件为
20、 0,此时变量 a的值等于1。 【知识模块】 C语言程序设计 6 【正确答案】 B 【试题解析】 循环体执行两次。首先输出 a=1,然后判断表达式 !(-a), a为 0,循环条件表达式值为 1,执行第二次循环体,输出 a=-2。判断循环条件表达式值为 0,循环退出。 【知识模块】 C语言程序设计 7 【正确答案】 B 【试题解 析】 rand()函数功能为产生一个随机数, rand()%5,则产生 04之间的任意随机数,当产生的随机数 n为 0时,执行 “case 0:exit(0)”这条语句,结束程序的运行。 【知识模块】 C语言程序设计 8 【正确答案】 B 【试题解析】 y的值的初值为
21、 9,所以在 for循环中,当 y的值为 9、 6或 3时,if语句的条件成立,执行输出语句,输出表达式 -y的值。因为自减符号在 y的前面,所以首先 y的自减 1,然后再输出 y的值,故输出结果为 8 5 2。 【知识模块】 C语言程序设计 9 【正确答案】 D 【试题解析】 这道题考查了 for循环的嵌套应用。对于外层 for循环来说,变量 i从 1增到 2,循环执行 2次。当变量 i的值等于 1时,对于内层 for循环来说,变量 j从 3减到 1,求得变量 m的值等于 6。当变量 i的值等于 2时,第一遍执行内层 for循环,变量 j的值等于 3,那么 i*j的值等于 6,其值大于 3,
22、这时执行break语句,退出内层 for循环的执行。所以程序输出变量 m的值为 6。 【知识模块】 C语言程序设计 10 【正确答案】 D 【试题解析】 在这段程序中,整型变量 c的初始值赋 为 0,在第一次执行 for循环语句时,因为此时变量 k的值等于 1,所以在 switch语句中首先执行 default语句,给变量 c的值加 1,因为在 default语句后面没有 break语句,所以就会接着执行 case 2这条语句,再给变量 c的值加 1,其值变为 2,这时退出 switch语句块,进入第二次 for循环,此时 k的值等于 2,就会执行 switch语句块中的 case2这条语句,
23、再给变量 c的值加 1,这时变量 c的值就是 3,此时退出 switch语句块,循环变量 k的值加 1,成为 3,此时已不再满足循环条件,执行程序中的最后一条语 句,把变量 c的值在屏幕上输出。 【知识模块】 C语言程序设计 11 【正确答案】 C 【试题解析】 本题中的外层行变量 i从 3逐次递减到 1,共输出 3行。内层列变量 j每次从 1递增到 2,每行输出 2个数字。所以当 i=3时,第一行输出 i+1=4 i+2=5,即 4 5;当 i=2时,第一行输出 i+1=3和 i+2=4,即 3 4;当 i=1时,第一行输出 i+1=2和 i+2=3,即 2 3。 【知识模块】 C语言程序设
24、计 12 【正确答案】 C 【试题解析】 在 for循环体中,首先判断自变量 i能否 被 5整除,然后再自加两次,最后判断 i能否被 8整除。当 for循环执行到第 30次时, i的值为 30能被 5整除,然后 i经过两次自加 1运算,值变为 32,能被 8整除,故执行“printf(“%d“,i);”语句,即输出 32。 【知识模块】 C语言程序设计 13 【正确答案】 D 【试题解析】 循环变量 i从 0依次递增到 5,依次输出字母 A,b,C,d,E,f。 【知识模块】 C语言程序设计 14 【正确答案】 B 【试题解析】 在这段程序中变量 a的初值等于 1,变量 b的初值等于 2。第
25、1次执行 for循环语句后,变量 a的值等于 3,变量 b的值等于 3。第 2次执行 for循环后,变量 a等于 6,变量 b的值等于 7。第 3次执行 for循环后,变量 a等于9,变量 b的值等于 14。第 4次执行 for循环后,变量 a等于 10,这时退出 for循环,此时变量 b的值等于 14。因而程序输出变量 a,b的值分别为 10,14。 【知识模块】 C语言程序设计 15 【正确答案】 C 【试题解析】 rand()函数功能为产生一个随机数, rand()%5,则产生 04之间的任意随机数,当产生的随机数 n为 0时,执行 case 0: exit(0)这条语句,结束程序的运行
26、。 【知识模块】 C语言程序设计 16 【正确答案】 C 【试题解析】 循环体执行三次, a初值 6,第一次执行循环体, b=6, a=5。继续执行循环体, b=11, a=3,第三次执行循环体, b=14, a=0,循环退出。 【知识模块】 C语言程序设计 17 【正确答案】 C 【试题解析】 循环条件 a”不可省略。 【知识模块】 C语言程序设计 24 【正确答案】 B 【试题解析】 在第 1次外层 for 循环中 ,首先 x+得到 x=1。进入到内层 for 循环,只有循环变量 j的值为奇数时,变量 x的值才自加 1,所以在内层 for 循环执行过程中,变量 x的值自加两次,当退出内层
27、for 循环时, x=3,然后执行 x+,得到 x=4。在进入执行第 2次外层 for 循环中,首先 x+得到 x=5。进入到内层 for 循环,只有循环变量 j的值为奇数时,变量 x的值才自加 1,所以在内层 for 循环执行过程中,变量 x的值自加 1两次,当退出内层 for 循环时, x=7,然后执行x+,得到 x=8,所以打印输出变量 x的值为 8。 【知识模块】 C语言程序设计 25 【正确答案】 D 【试题解析】 “x-”表示先执行程序,再令 x的值减 1;而 “-x”表示令 x的值减1,再执行程序。 x=8时, x%3为非 0值,执行语句 printf(“%d,“, x-); c
28、ontinue;,输出 “8, ”,此时经过 x-, x的值变为 7,跳出此次循环;执行 x-,x=6, x%3=0,后面语句不执行,执行语句 printf(“%d,“,-x);,输出 “5, ”;执行for语句中的 x-,得到 x=4,判断 x%3,输出 “4, ”,执行两次 x-后, x=2,执行 printf(“%d,“, x-); continue; 后,输出 “2, ”;然后执行两次 x-后, x=0, 不符合 “x 0”,循环全部结束。 【知识模块】 C语言程序设计 26 【正确答案】 B 【试题解析】 只能在循环体内和 switch语句体内使用 break 语句。 continu
29、e语句的作用是结束本次循环,即跳过本次循环体中 continue语句后面的语句,立刻进行下一次的循环条件判断,可以理解为仅结束本次循环。而 break语句可以使程序流程跳出 switch语句体,也可用 break语句在循环结构中终止循环体。 【知识模块】 C语言程序设计 27 【正确答案】 C 【试题解析】 用 break语句可以使程序流程跳出 switch语句体,也可用 break语句在循环结构中终止循环体,从而提前结束循环,而 continue语句的作用是结束本次循环,即跳过本次循环体中 continue语句后面的语句,立刻进行下一次的循环条件判断,可以理解为仅结束本次循环。 【知识模块】
30、 C语言程序设计 28 【正确答案】 B 【试题解析】 break语句可以使程序流程跳出 switch语句体,也可用 break语句在循环结构中终止循环体,从而提前结束循环,而当 break出现在循环体中的switch语句体内 时,其作用只是跳出该 switch语句体,并不能中止循环体的执行。若想强行终止循环体的执行,可以在循环体中,但并不在 switch语句中设置break语句,满足某种条件则跳出循环体。 continue语句的作用是结束本次循环,在 while和 do-while循环中, continue语句使得流程直接跳到循环控制条件的测试部分,然后决定循环是否继续进行。 【知识模块】 C语言程序设计