1、国家二级 C语言机试( C语言程序设计)模拟试卷 5及答案与解析 一、选择题 1 有以下程序 main( ) inta=3: a+=a-=a*a: printf( dn, a); 程序的输出结果是 ( A) 9 ( B) 3 ( C) -12 ( D) 0 2 有以下程序 #include stdio h main( ) intb=10, a=-11; a =b =4; printf( d dn, a, b); ) 则程序的输出结果是 ( A) 12 ( B) -1-2 ( C) -12 ( D) 1.2 3 设有定义: inta; floatb;执行 scanf( 2d f, a, b);语
2、句时,若从键盘输入 876543 0则 a和 b的值分别是 ( A) 876和 543 0 ( B) 87和 6 0 ( C) 87和 543 0 ( D) 76和 543 0 4 设有定义: doublea, b, c;若要求通过输入分别给 a、 b、 c输入 1、 2、 3,输入形式如下 (注:此处 代表一个空格 )1 02 03 0则能进行正确输入的语句是 ( A) scanff 1PA1PAlf, b, c); ( B) scanf( f f f, a, b, c); ( C) scanff lf 1f 1f, a, b, c); ( D) scanf( 5 11f 5 11 5 11
3、f, a, b, c); 5 以下叙述中正确的是 ( A)在 scanf函数的格式串中,必须有与输入项一一对应的格式转换说明符 ( B)只能在 printf函数中指定输入数据的宽度,而不能在 scanf函数中指定输入数据占的宽度 ( C) scanf函数中的字符串,是提示程序员的,输入数据时不必管它 ( D)复合语句也被称为语句 块,它至少要包含两条语句 6 若有定义语句: doublex, y, *px, *PY;执行 px= x; py= y;正确的输入语句是 ( A) scanf( f f x, y); ( B) scanf( f f, x, y); ( C) scanf( 1f 1e,
4、 px, py); ( D) scanf( 1f 1f, x, y); 7 有以下程序段 intj; floaty; charname50; scanf( 2d f s, j, y, name); 当执行上述程序段,从键盘上输入 555667777abc后, y的值为 ( A) 55566 0 ( B) 7777 0 ( C) 566 0 ( D) 566777 8 有以下程序 main( ) inta=0, b=0, c=0, d=0; if(a=1)b=1; c=2: elsed=3: printf( d, d, d, dn, a, b, C, d); ) 程序输出 ( A) 0, 0,
5、0, 3 ( B) 1, 1, 2, 0 ( C)编译有错 ( D) 0, 1, 2, 0 9 有以下程序段 inta, b, c; a=10; b=50; c=30; if(a b)a=b, b=c; c=a; printf(a= db= dc= dn, a, b, c); 程序的输出结果是 ( A) a=10b=50c=30 ( B) a=10b=30c=10 ( C) a=10b=50c=10 ( D) a=50b=30c=50 10 有如下嵌套的 if语句 if(a b) if(a c)k=a; elsek=c; else if(b c)k=b; elsek=c; 以下选项中与上述 i
6、f语句等价的语句是 ( A) k=(a b)?(bc)?b: c); ( B) k=(a c)?b: c; ( C) k=(a c)?a: c; ( D) k=(a b)?(a c)?a: c): (b c)?b: c); 11 有以下程序 main( ) inta=1, b=2, c=3, d: 0; if(a: 1 b+=2) if(b!=21c-!=3) printf( d, d, d, n, a, b, c); elseprintff d, d, d, n, a, b, c); elseprintf( d, d, dn, a, b, c); 程序运行后的输出结果是 ( A) 1, 3,
7、 2 ( B) 1, 2, 3 ( C) 1, 3, 3 ( D) 3, 2, 1 12 若有以下程序 #include stdio h main( ) inta=1, b=2, c=3, d=4, r=0; if(a!=1); elser=1; if(b=2)r+=2; else; if(c!=3)r+=3; else; if(d=4)r+=4; printf( dn, r); ) 则程序的输出结果是 ( A) 10 ( B) 6 ( C) 7 ( D) 3 13 以下叙述中正确的是 ( A) if语句只能嵌套一层 ( B)不 能在 else子句中再嵌套 if语句 ( C) if子句和 el
8、se子句中可以是任意的合法的 C语句 ( D)改变 if-else语句的缩进格式,会改变程序的执行流程 14 若有定义: floatx=1 5; inta=1, b=3, c=2;则正确的 switch语句是 ( A) switch(a+b)case1: printf(*n); case2+1: printf(*n); ) ( B) switch(int)x); casel: printf(*n); case2: printf(*n); ) ( C) switch(x)case1 0: printf(*n); case2 0: printf(*n); ) ( D) switch(a+b)cas
9、e1: printf(*n); casec: printf(*n); ) 15 以下选项中与 if(a=1)a: b; elsea+;语句功能不同的 switch语句是 ( A) switch(a=1)case0: a=b; break; case1: a+; ( B) switch(a)case1: a=b; break; default: a+; ) ( C) switch(a)default: a+; break; case1: a=b; ( D) switch(a=1)case1: a=b; break; case0: a+; ) 16 关于 while(条件表达式 )循环体 ,以下叙
10、述正确的是 ( A)循环体的执行次数总是比条件表达式的执行次数多一次 ( B)条件表达式的执行次数与循环体的执行次数一样 ( C)条件表达式的执行次数总是比循环体的执行次数多一次 ( D)条件表达式的执行次数与循环体的执行次数无关 17 有以下程序 main( ) inty=10; while(y-); printf(y= dn, y); ) 程序执行后的输出结果是 ( A) y=0 ( B) y=1 ( C) y=-1 ( D) while构成无限循环 18 在以下给出的表达式中,与 while(E)?的 (E)不等价的表达式是 ( A) (E 0E 0) ( B) (!E=0) ( C)
11、(E!=0) ( D) (E=0) 19 由以下 while构成的循环,循环体执行的次数是 intk=0; while(k=1)k+; ( A)一次也不执行 ( B)执行一次 ( C)无限次 ( D)有语法错,不能执行 20 关于 do循环体 while(条件表达式 );以下叙述中正确的是 ( A)循环体的执行次数总是比条件表达式的执行次数多一次 ( B)条件表达式的执行次数总是比循环体的执行次数多一次 ( C)条件表达式的执行次数与循环体的执行次数无关 ( D)条件表达式的执行次数与循环体的执行次数一样 21 若变量已正确定义,有以下程序段 i=0: do printf( d, , i);
12、while(i+); printf( dn, i);其输 出结果是 ( A) 0, 0 ( B) 1, 1 ( C) 0, 1 ( D)程序进入无限循环 22 有以下程序 #include stdio h main( ) inti, j, m=1; for(i=1; i 3; i+) for(j: 3; j 0; j-) if(i*j 3)break; m*=j*j; printf(m= dn, m); 程序运行后的输出结果是 ( A) m=2 ( B) m=4 ( C) m=5 ( D) m=6 23 有以下程序 main( ) inti; for(i=1; i =40; i+) if(i+
13、 5=0) if(+i 8=0)printf( d, i); printf(n); 执行后的输出结果是 ( A) 24 ( B) 5 ( C) 32 ( D) 40 24 有以下程序段 inti, n; for(i=0; i 8; i+) n=rand0 5; switch(n) case1: case3: printf( dn, n); break; case2: case4: printf( dn, n); continue; case0: exit(0); printf( dn, n); ) ( A)当产生的随机数 n为 4时结束循环操作 ( B)当产生的随机数 n为 1和 2时不做任何
14、操作 ( C)当产生的随机数 n为 0时结束程序运行 ( D) for循环语句固定执行 8次 25 以下叙述中正确的是 ( A)对于 for(表达式 1;表达式 2;表达式 3)循环体 首先要计算表达式 2的值,以便决定是否开始循环 ( B)对于 for(表达式 1;表达式 2;表达式 3)循环体 ,只在个别情况下才能转换成 while语句 ( C)只要 适当地修改代码,就可以将 do while与 while相互转换 ( D)如果根据算法需要使用无限循环 (即通常所称的 死循环 ),则只能使用 while语句 26 以下程序段中的变量已正确定义 for(i=0; i 4; i+, i+) f
15、or(k=1; k 3; k+); printff*); 程序段的输出结果是 ( A) * ( B) * ( C) * ( D) * 27 以下叙述中正确的是 ( A)循环发生嵌套时,最多只能两层 ( B)三种循环 for, while, do while可以互相嵌套 ( C)循环嵌套时,如果不进行缩进形式书写代码,则会有编译错误 ( D) for语句的圆括号中的表达式不能都省略掉 28 有以下程序 #include stdio h main( ) intx=8: for(; x 0; x-) if(x 3)printf( d, , x一 ); continue; printf( d, , -
16、x); 程序的运行结果是 ( A) 8, 7, 5, 2, ( B) 9, 7, 6, 4, ( C) 7, 4, 2, ( D) 8, 5, 4, 2 29 以 下叙述中正确的是 ( A)当 break出现在循环体中的 switch语句体内时,其作用是跳出该 switch语句体,并中止循环体的执行 ( B)只能在循环体内和 switch语句体内使用 break语句 ( C) continue语句的作用是:在执行完本次循环体中剩余语句后,中止循环 ( D)在 while语句和 do while语句中无法使用 continue语句 国家二级 C语言机试( C语言程序设计)模拟试卷 5答案与解析
17、一、选择题 1 【正确答案】 C 【试题解析】 对于表达式 a+=a =a*a相当于 a=a-(a*a),然后计算 a=a+a, a的初值为 3,则表达式的值为 -12。 【知识模块】 C语言程序设计 2 【正确答案】 C 【试题解析】 对于表达式 a =b =4为复合的赋值运算,结合性自右至左,相当于先计算 b=b 4, a=a b;绌果的符号和第一个操作数的符号相同,因此 b为2, a的结果为 -1 【知识模块】 C语言程序设计 3 【正确答案】 B 【试题解析】 在输入函数 scanf的输入格式符 2d f中, 2d表示输入的数据的宽度为 2,所以当从键盘输入 876543 0 CR时,
18、这时把输入数字串的前两位87赋给变量 a,然后将紧接着将 6按照格式控制符 f的形式赋给变量 b,所以 b的值为 6 000000。 【知识模块】 C语言程序设计 4 【正确答案】 C 【试题解析】 输入格式 scanfi(格式控制,输入项 1,输入项 2 ),其中在scanf函数的格式字符前可以加入一个正整数指定输入数据所占的宽度,但不可以用实数指定小数位的宽度。输入 double型数据,格式控制必须用 1f(或 le)。否则,数据不能正确输入。由于输入是一个字符流, scanf函数从这个字符流中按照格式控制指定的格式解析出相应数据,送到指定地址的变量中。 【知识模块】 C语言程序设计 5
19、【正确答案】 A 【试题解析】 输入函数的调用格式: scanff格式控制,输入项 1,输入项 2 )格式控制的土要作用是指定输入时的数据转换格式,格式串中,必须含有与输入项一一对应的格式转换说明符选项 A正确,在 scanf函数的格式字符前可以加入一个正整数指定输入数据所占的宽度,但不可以用实数指定小数位的宽度 ,选项 B错误, scanf函数中的格式控制字符串是为了输入数据用的,无论其中有什么字符,也不会输出到屏幕上,因此若想在屏幕上输出提示信息,应该首先使用 printf函数输出,选项 C错误,复合语句还可以是空语句呢,并没有规定语句条数,选项 D错误。 【知识模块】 C语言程序设计 6
20、 【正确答案】 C 【试题解析】 本题考查 scanf语句。 scanf( )函数的一般格式为: scanf(“格式字符串 ”,输入项首地址表 ),对于 double类型数据,输入时候要加上 l修饰,否则会产生错误的输入信息,同时 输入项必须是地址,可以使保存变量地址的指针变量。 【知识模块】 C语言程序设计 7 【正确答案】 C 【试题解析】 因为在输入格式控制符中指定变量 j的输入格式控制符为 ” 2d”,即变量 i所占的宽度为 2,所以变量 j只接收输入数据的前两位,从第三位开始直到空格之间的输入整数都会被保存到变量 y中,因为 y为浮点型数据,所以输出结果为选项 C。 【知识模块】 C
21、语言程序设计 8 【正确答案】 C 【试题解析】 if语句的格式为: if(表达式 )语句 1else语句 2if和 else是 C语言的关 键字。 ”语句 1”称为 if子句, ”语句 2”称为 else子句,这些子句只允许为一条语句,若需要多条语句时,则应该使用复合语句。因此题目 if(a=1)b=1; c=2;elsed=3; if分支有两条语句,没构成复合语句。 【知识模块】 C语言程序设计 9 【正确答案】 C 【试题解析】 本题的程序段首先定义三个整型变量 a, b, c,并且其初始值分别等于 10, 50, 30,然后判断 a b是否成立,如果条件成立,则把 b的值赋给 a,把
22、c的值赋给 b。由 a和 b的初始值可知,此条件表达式不成立,所以 a和 b的值保持不 变。再执行下一条语句,把 a的值赋给 c,所以 c的当前值等于 10,最后由输出语句输出变量 a, b, c的当前值,分别为 10, 50 10。 【知识模块】 C语言程序设计 10 【正确答案】 D 【试题解析】 嵌套的 ifelse语句的禽义是,在变最 a的值小于变量 b的值,同时,变量 a的值小于变量 c的值时,把变量 a的值赋给变量 k。在变量 a的值小于变量 b的值,同时,变量 a的值大于等于变量 c的值时,把变量 c的值赋给变量k。在变量 a的值大于等于变量 b的值,同时,变量 b的值小于变量
23、c的值时,把变量 b的值赋给变量 k。 在变量 a的值人于等于变量 b的值,同时,变量 b的值大于等于变量 c的值时,把变量 c的值赋给变量 k。 【知识模块】 C语言程序设计 11 【正确答案】 C 【试题解析】 a, b, c, d初始值分别为 l, 2, 3, 0。嵌套的 if语句中,第一个if中,表达式 a=1 b+=2值为 1,执行嵌套的 if分支,此时 b=3, bI_2成立,由于运算符是 11,不管后面一个表达式的值是不是 1,其整个表达式的值总是 1,c-! 3表达式不执行,最后打印出 a b, c的值是 1, 3, 3。 【知识模块】 C语言程序设计 12 【正确答案】 C
24、【试题解析】 程序代码中有四条并列的 if语句,第一条 if表达式 a-!不成立,执行 else分支, r=1;第二条 if表达式 b=2成立,执行 r+=2, r=3:第三条 if语句c! 3不成立,执行 else分支,分支为空语句;第四条 if分支 d=4成立,执行该if分支语句, r+=4, r=7。 【知识模块】 C语言程序设计 13 【正确答案】 C 【试题解析】 含 else子句的 if语句的格式为 if(表达式 )语句 lelse语句 2其中 if和else是 C语言的关键字。 ”语句 1”称为 if子句, ”语句 2”称为 else子句,这些予句只允许为一条语句,若需要多条语句
25、时,则应该使用复合语句,对于 if和 else语句的嵌套原则是比较自由的。 【知识模块】 C语言程序设计 14 【正确答案】 A 【试题解析】 在 C语言中, switch( )后一对圆括号中的可以是整型表达式或字符表达式。 case语句后面的常量表达式的类型必须与 switch后圆括号中的表达式类型相同,各 case语句标号的值应该互不相同,选项 B中 switch后括号表达式出错,选项 C中 case后面的常量类型不正确,选项 D中 case后面出现了变量表达式,所以 D不正确。 【知识模块】 C语言程序设计 15 【正确答案】 A 【试题解析】 jfelse语句的含义是,如果变量 a的值
26、等于 1,则把变量 b的值赋给变量 a,否则,变量 a的值加 1。在本题的 4个选项中,与其含义不同的是选项A,表示如果变量 a的值等于 1,则把变量 a的值加 1,否则,把变量 b的值赋给变量 a。 【知识模块】 C语言程序设计 16 【正确答案】 C 【试题解析】 while语句中表达式是循环条件,语句为循环体。 while语句中当表达式计算的 值为真 (非 0)时,执行循环体语句。因此条件表达式执行的次数总是比循环体多一次。 【知识模块】 C语言程序设计 17 【正确答案】 C 【试题解析】 while循环语句的循环体为空语句,所以每一次循环程序什么都不做。当循环自变量 y=0时,退出循
27、环结束,变量 y执行自减运算,得 -1,所以打印输出变量 y的值为 -1。 【知识模块】 C语言程序设计 18 【正确答案】 A 【试题解析】 在 while(E)中,表达式 E可以是 C语言中任意合法的条件表达式,但不能为空,由它来控制循环体是否执行 。在选项 A中表达式 E 01IE 0是一个逻辑表达式。 【知识模块】 C语言程序设计 19 【正确答案】 C 【试题解析】 循环条件表达式为赋值表达式 k=-1,因此循环执行无限次。 【知识模块】 C语言程序设计 20 【正确答案】 D 【试题解析】 do-while语句先执行语句,后判断表达式的值。故 do while语句又称 ”直到型 ”
28、循环结构。由于是先执行后判断,因此 do-while语句的循环语句至少被执行一次,循环条件至少判断一次。 【知识模块】 C语言程序设计 21 【正确答案】 C 【试题解析】 dowhile 循环的执行过程如 F: 执行 do后面的循环体中的语句。 计算 while后一对圆括号中表达式的值。当值为非 0时,转去执行步骤 ;当值为 0时,执行步骤 。 退出 dowhile 循环。对于本题变量 i的初始值等于 ”0”,接着执行 do后面的循环体中的语句,输出变量 i的值 0。再判断 while后面括号中表达式 i+的值,其值为 0,所以循环结束。此时变量 i的值经过自加已经变为 1,所以再次输出 i
29、的值 ”l”。 【知识模块】 C语言程序设计 22 【正确答案】 D 【试题解析】 这道题考查了 for循环的嵌套应用。对于外层 for循环来说,变量 i从 l增到 2,循环执行 2次。当变量 i的值等于 1时,对于内层 for循环来说,变量 i从 3减到 1,求得变量 m的值等于 6。当变量 i的值等于 2时,第一遍执行内层 for循环,变量 j的值等于 3,那么州的值等于 6,其值大于 3,这时执行 break语句,退出内层 for循环的执行。所以程序输出变量 m的值为 6。 【知识模块】 C语言程序设计 23 【正确答案】 C 【试题解析】 在 for循环体中,首先判断自变量 i能否被
30、5整除,然后再 自加两次,最后判断 i能否被 8整除。当 for循环执行到第 30次时, i的值为 30能被 5整除,然后 i经过两次自加 1运算,值变为 32,能被 8整除,故执行 ”printf(dt, i); ”语句,即输出 32。 【知识模块】 C语言程序设计 24 【正确答案】 C 【试题解析】 rand( )函数功能为产生一个随机数, rand( ) 5,则产生 0 4之间的任意随机数,当产生的随机数 n为 0时,执行 case0: exit(0)这条语句,结束程序的运行。 【知识模块】 C语言程序设计 25 【正确答案】 C 【试题解析】 while和 dowhile 语句和 f
31、or语句很容易进行相互转换。对于 for循环的执行过程如 F: 计算表达式 1。 计算表达式 2。若其值为非 0,转步骤 ;若其值为 0,转步骤 。 执行一次 for循环体。 计算表达式 3,转向步骤 。 结束循环。任何循环都有可能成为死循环。 【知识模块】 C语言程序设计 26 【正确答案】 D 【试题解析】 本题考查循环语句,题中第二个 (内层 )for循环之后有一个分号,意思是每次循环中的操作为空,不执行任何操作。再循环结束 后执行 printf语句,即只打出一个 *。 【知识模块】 C语言程序设计 27 【正确答案】 B 【试题解析】 在一个循环体内又完整包含了另一个循环,称为循环嵌套
32、。循环的嵌套可以多层,但每一层循环在逻辑上必须是完整的。 for循环、 while循环、dowhile循环可以互相嵌套,但每层循环在逻辑上必须完整。而在 for语句中,for语句中的表达式可以部分或全部省略,但两个 ”: ”不可省略。 【知识模块】 C语言程序设计 28 【正确答案】 D 【试题解析】 ”x-”表示先执行程序, 再令 x的值减 1;而 ”-x”表示令 x的值减 1,再执行程序。 x=8时, x 3为非 0值,执行语句 printf( d, , x-);continue; ),输出 ”8, ”,此时经过 x-, x的值变为 7,跳出此次循环;执行 x-,x=6, x 3=0,后面
33、语句不执行,执行语句 printfi(“ d, ”, -x);,输出 ”5, ”:执行 for语句中的 x-得到 x=4,判断 x 3,输出 ”4, ”,执行两次 x-后, x=2,执行 printf(“ d, ”, x-); continue; 后,输出 ”2, “;然后执行两次 x-后, x=0,不符合 ”x 0”,循环全部结束。 【知识模块】 C语言程序设计 29 【正确答案】 B 【试题解析】 break语句可以使程序流程跳出 switch语句体,也可用 break语句在循环结构中终止循环体,从而提前结束循环,而当 break出现在循环体中的switch语句体内时,其作用只是跳出该 switch语句体,并不能中止循环体的执行。若想强行终止循环体的执行,可以在循环体中,但并不在 switch语句中设置break语句,满足某种条件则跳出循环体。 continue语句的作用是结束本次循环,在 while和 do while循环中, continue语句使得流程直接跳到循环控制条件的测试部分,然后决定循环是否继续进行。 【知识模块】 C语言程序设计