1、国家二级 C语言机试(循环结构程序设计)模拟试卷 1及答案与解析 一、选择题 1 以下程序段中的变量已正确定义 for( i=0; i main() int y=9; for( ; y0; y-) if(y%3=0) printf(“%d“, -y); 程序的运行结果是( )。 ( A) 852 ( B) 963 ( C) 741 ( D) 875421 10 有以下程序 #include main() int i,j,m=1; for(i=1;i0;j- ) if(i*j3) break; m*=i*j; printf(“m=%dn“,m); 程序运行后的输出结果是( )。 ( A) m=6
2、 ( B) m=2 ( C) m=4 ( D) m=5 11 下列叙述中正确的是( )。 ( A)在 switch语句中,不一定使用 break语句 ( B)在 switch语句中必须使用 default ( C) break语句必须与 switch语句中的 case配对使用 ( D) break语句只能用于 switch语句 12 以下不构成无限循环的语句或语句组是( )。 ( A) n=0; do +n; while (n main() int c=0,k; for (k=1;k main() int y=10; while(y-); printf(“y=%dn“, y); 程序执行后的输
3、出结果是( )。 ( A) y=-1 ( B) y=0 ( C) y=1 ( D) while构成无限循环 15 有以下程序 #include main() int i,j; for(i=1; i main() int i=5; do if (i%3=1) if (i%5=2) printf(“*%d“, i); break; i+; while(i!=0); printf(“n“); 程序的运行结果是( )。 ( A) *7 ( B) *3*5 ( C) *5 ( D) *2*6 17 有以下程序 #include main() int k=5; while(-k) printf(“%d“,
4、k -= 3); printf(“n“); 执行后的输出结果是( )。 ( A) 1 ( B) 2 ( C) 4 ( D)死循环 18 有以下程序 #include main() int i,j; for(i=3; i=1; i-) for(j=1; j main() int k=5,n=0; do switch(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 while(y-); printf(“y=%dn“,y);
5、程序执行后的输出结果是( )。 ( A) y=-1 ( B) y=0 ( C) y=1 ( D) while构成无限循环 21 有以下程序 #include main() int i; for(i=1; i main() int s; scanf(“%d“, 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“, 运行时,若输入 1 2 3
6、 4 5 0,则输出结果是( )。 ( A) 6566456 ( B) 66656 ( C) 66666 ( D) 6666656 23 有以下程序 #include main() int a = 7; while ( a- ) ; printf (“%dn“, a); 程序运行后的输出结果是( )。 ( A) -1 ( B) 0 ( C) 1 ( D) 7 24 有以下程序 #include main() char b,c; int i; b= a; c = A; for (i=0; i main() int i, j, x=0; for(i=0; i0|E main() int a=1,
7、b=2; for( ;a main() int i,j, m=55; for(i=1;i main() int x=8; for( ; x0; x- ) if(x%3) printf(“%d,“, x-); continue ; printf(“%d,“, -x); 程序的运行结果是( )。 ( A) 8,5,4,2, ( B) 8,7,5,2, ( C) 9,7,6,4, ( D) 7,4,2, 30 若变量已正确定义,有以下程序段 i=0; do printf(“%d,“,i); while( i+ ); printf(“%dn“,i); 其输出结果是( )。 ( A) 0,1 ( B)
8、0,0 ( C) 1,1 ( D)程序进入无限循环 31 有以下程序段 int i, n; for( i=0; i main() int s=0, n; for (n=0; n main() int a=-2, b=0; while(a+) +b ; printf(“%d,%dn“, a, b); 则程序的输出结果是( )。 ( A) 1,2 ( B) 0,2 ( C) 1,3 ( D) 2,3 36 若有以下程序 #include main() int a=6, b=0, c=0; for ( ;a; ) b += a; a -= +c; printf(“%d,%d,%dn“, a,b,c)
9、; 则程序的输出结果是( )。 ( A) 0,14,3 ( B) 1,14,3 ( C) 0,18,3 ( D) 0,14,6 37 若有以下程序 #include main() int s=0, n; for (n=0; n 即 4 5 ,以此类推,答案选 A。 【知识模块】 循环结构程序设计 19 【正确答案】 A 【试题解析】 该程序的执行流程是:当 k值大于 0并且 n值小于 5时,进入循环的 switch语句。判定 k的值,若 k的值为 1或者 3,执行 “n+=1; k-; break;“跳出switch语句后输出 n的值;若 k的值为 2或者 4,执行语句 “n+=2; k-;
10、break;“跳出 switch语句后输出 n的值;若 k的值不为 1、 2、 3、 4,则执行语句 “n=0; k-;“后继续执行 “case 2: case 4: n+=2; k-; break;“ 跳出 switch语句后输出 n的值;由此,共执行 3次循环,循环开始 k的值分别为 5、 3、 2,对应输出的 n值为 2、3、 5,答案选 A。 【知识模块】 循环结构程序设计 20 【正确答案】 A 【试题解析】 考查 while循环语句。 while(y-); 的循环条件是若 y值不为 0,则循环,每次判定循环条件的时候是选用 y进行判定,然后 y自减 1,再执行循环体的空语句 “;“
11、,当 y=0的时候,循环条件不满足,不再进行循环, y-后, y的值为 -1,答案选 A。 【知识模块】 循环结构程序设计 21 【正确答案】 A 【试题解析】 自增自减运算符前置时( +i), i自增 1后再参与其他运算。自增自减运算符 后置时( i+), i是先参与运算后再自增 1。由此,这个程序是寻找 1-40之间,能被 5整除,自加 2后能被 8整除的数,然后输出这个数自加 2后的数值,输出结果也就是 32,答案选 A。 【知识模块】 循环结构程序设计 22 【正确答案】 A 【试题解析】 程序的循环条件是 s0,也就是不断读入数据并存放到 s中直到输入的数据为非正,循环体的 swit
12、ch语句会判定 s的值,然后选定一个 case作为执行入口,不断向下执行直到遇到 break;,易知 s为 1时,输出 s+5和 s+4的值; s为 2时,只输出 s+4的值; s为 3时输出 s+3和 s+1的值;其他情况输出 s+1的值,答案选 A。 【知识模块】 循环结构程序设计 23 【正确答案】 A 【试题解析】 考查 while循环语句。 while(a-); 的循环条件是若 a值不为 0,则循环,每次判定循环条件的时候是选用 a进行判定,然后 a自减 1,再执行循环体的空语句 “;“,当 a=0的时候,循环条件不满足,不再进行循环, a-后, a的值为 -1,答案选 A。 【知识
13、模块】 循环结构程序设计 24 【正确答案】 A 【试题解析】 字符常量与其 ASCII码值一 一对应,计算时一般用字符常量对应的 ASCII码参与运算,输出时会依据输出函数的不同决定输出是字符或者对应的ASCII码值。该程序的运算逻辑是, i从 0循环到 5,若 i为奇数则输出 a+i对应的字符即小写字符,若 i为偶数则输出 A+i对应的字符即大写字符。答案选 A。 【知识模块】 循环结构程序设计 25 【正确答案】 A 【试题解析】 continue语句是跳过当前循环层余下未执行的语句,继续执行下一次循环。外层循环 i从 0到 1,内层循环 j从 0到 3,外层循环 2次,内层循环 2*4
14、为 8次。每次内层循 环若 j值为偶数则 x自加 1,每次外层循环 x自加两次,所以x的自加次数为 2*2+2*(4-2)=8,所以答案选 A。 【知识模块】 循环结构程序设计 26 【正确答案】 A 【试题解析】 若 while语句的循环条件为真,则 E不为 0,则四个选项中只有选项 A)的逻辑表达式的值为假;若 while语句循环条件为假,则 E为 0,则四个选项中也只有选项 A)的逻辑表达式的值为真,所以答案选 A)。 【知识模块】 循环结构程序设计 27 【正确答案】 A 【试题解析】 for语句的一般形式为 “for(表达式 1; 表达式 2; 表达式 3 ) 循环体语句 “,其执行
15、流程是先计算表达式 1,之后计算表达式 2,根据表达式 2的值来判定是否进行循环,若为真,则执行循环体,循环体执行完毕之后再计算表达式 3的值。由此,程序的每次循环,先判定 a值是否满足循环条件,然后执行语句“b+=a; a+=2; a+;“,程序共循环 3次,每次循环前 a的值分别为 1、 4、 7,循环后 a的值分别为 4、 7、 10,所以最终计算出 b值为 14, a值为 10,答案选 A。 【知识模块】 循环结构程序设计 28 【正确答案】 A 【试题解析 】 内层循环只有在 i=3时可执行,即此时 m=m%3, 55%3=1。 【知识模块】 循环结构程序设计 29 【正确答案】 A
16、 【试题解析】 该程序的逻辑是: x从 8循环到 1,,循环条件是 x0,若 x的值不能能被 3整除,则输出 x的之后 x再自减;若 x的值能被 3整除,则输出自减后的x的值,循环体执行完毕之后,再执行 for语句的表达式 3“x-“。每次循环 x总共自减 2,所以程序循环共 4次,输出的结果为选项 【知识模块】 循环结构程序设计 30 【正确答案】 A 【试题解析】 do-while循环先执行循环体再判定循环条件,而该程序的 do-while只执行一次,输出 i的值为 0,循环结束后输出 i的值为 i自加后的值即 1,所以答案选 A。 【知识模块】 循环结构程序设计 31 【正确答案】 A
17、【试题解析】 break只能跳出 switch语句或者当前层循环, continue表示跳过下面的程序段进入下一次的循环, “exit(0)“语句表示正常退出,而只有当 n值为 0时,才能执行 “exit(0)“语句,答案选 A。 【知识模块】 循环结构程序设计 32 【正确答案】 A 【试 题解析】 循环逻辑是 “输入的字符不为字母 N,则循环,若是,则结束循环“。易判定,答案选 A。 【知识模块】 循环结构程序设计 33 【正确答案】 A 【试题解析】 break语句只能用在循环体和 switch语句体内,作用是跳出当前的switch语句或当前层循环, continue语句是跳过当前循环层
18、余下未执行的语句,继续执行下一次循环。答案选 A。 【知识模块】 循环结构程序设计 34 【正确答案】 A 【试题解析】 在 switch语句中, default语句块最后执行, case或者 default只是作为一个入口,如果执行完某一个 case或者 default语句块之后没有遇到 break,则继续往下执行。所以循环的 4次, s分别自增 10、 6、 5、 3,所以 s的最终值为24,答案选 A。 【知识模块】 循环结构程序设计 35 【正确答案】 A 【试题解析】 自增自减运算符后置时( a+), a是先参与运算后再自增 1。while循环结束条件是表达式 “a+“为 0,此时
19、a=0,从 -2到 0, b一共自增了 2次,所以 b=2。表达式 “a+“计算完毕后 a=1,所以答案选 A。 【知识模块】 循环结构程序设计 36 【正确答案】 A 【试题解析】 循环条件是 a不为 0,每次循环中, b累加 a的值, c自增 1, a每次自减 “+c“。第 1次循环后, b=6, c=1, a=5;第 2次循环后, b=11, c=2,a=3;第 3次循环后, b=14, c=3, a=0;第 4次循环条件不满足,结束循环,此时a=0, b=14, c=3,答案选 A。 【知识模块】 循环结构程序设计 37 【正确答案】 A 【试题解析】 在 switch语句中, default语句块最后执行, case或者 default只是作为一个 入口,如果执行完某一个 case或者 default语句块之后没有遇到 break,则继续往下执行。所以循环的 4次, s分别自增 5、 1、 2、 3, s的最终值为 11,答案选 A。 【知识模块】 循环结构程序设计