1、国家二级 C语言机试( C语言程序设计)模拟试卷 4及答案与解析 一、选择题 1 以下叙述中正确的是 ( A)赋值语句是一种执行语句,必须放在函数的可执行部分 ( B) scanf和 printf是 C语言提供的输入和输出语句 ( C)由 printf输出的数据都隐含左对齐 ( D)由 printf输出的数据的实际精度是由格式控制中的域宽和小数的域宽来完全决定的 2 有如下程序段: intx=12; doubley=3 141593; printf( d 8 6t, x, y); 其输出结果是 ( A) 123 141593 ( B) 12, 3 141593 ( C) 123 1415930
2、 ( D) 123.142 3 有以下程序 main( ) chara, b, C, d; scanf( c c, a, b); c=getchar( ); d=getchar( ); printf( c c c cn, a, b, C, d); 当执行程序时,按下列方式输入数据 (从第 1列开始,代表回车,注意:回车也是一个字符 )1234则输出结果是 ( A) 12 ( B) 1234 ( C) 123 ( D) 1234 4 设变量均已正确定义,若要通过 scanff d c d c, a1, c1, a2,c2);语句为变量 a1和 a2赋数值 10和 20,为变量 c1和 c2赋字符
3、 x和 Y。以下所示的输入形式中正确的是 (注: 代表空格字符 ) ( A) 10x20Y ( B) 10x20Y ( C) 10x20Y ( D) 10x20Y 5 若有定义 inta; floatb; doublec;程序运行时输入: 345能把值 3输入给变量 a、4输入给变量 b、 5输入给变量 C的语句是 ( A) scanff d 1f 1f, a, b, c); ( B) scanff d f 1P, a, b, c); ( C) scanf( d PAf, a, b, c); ( D) scanff 1f 1f 1f, a, b, c); 6 以下叙述中正确的是 ( A)在 s
4、canf函数中的格式控制字符串是为了输入数据用的,不会输出到屏幕上 ( B)在使用 scanf函数输入整数或实数时,输入数据之间只能用空格来分隔 ( C)在 printf函数中,各个输出项只能是变量 ( D)使用 printf函数无法输出百分号 7 有以下程序 #include stdio h main( ) charcl, c2, c3, c4, c5, c6; scanf( c c c c, c1, c2, c3, c4); c5=getchar0; c6=getchar0; putchar(c1); putchar(c2); pfintf( c ckn, c5, c6); 程序运行后,若
5、从键盘输入 (从第 1列开始 )12345678则输出结果是 ( A) 1256 ( B) 1278 ( C) 1245 ( D) 1267 8 若 在定义语句: inta, b, c, *p= c;接着执行以下选项中的语句,则能正确执行的语句是 ( A) scanf( d d dtt, a, b, c); ( B) scanf( dt, a, b, c); ( C) scanf( d, p); ( D) scanf( d, p); 9 若变量已正确定义,在 if(W)printf( dn, k);中,以下不可替代 W的是 ( A) ch=getchar( ) ( B) a=-b+c ( C)
6、 a b+c ( D) a+ 10 if语句的基本形 式是: if(表达式 )语句,以下关于 表达式 值的叙述中正确的是 ( A)必须是整数值 ( B)必须是正数 ( C)可以是任意合法的数值 ( D)必须是逻辑值 11 有以下程序 #inc1udemain( )intx; scanf( d-, x); if(x =3);elseif(x!=10)printf( dn, x); 程序运行时,输入的值在哪个范围才会有输出结果 ( A)不等于 10的整数 ( B)大于 3或等于 10的整数 ( C)小于 3的整数 ( D)大于 3且不等 10的整数 12 若有以下程序 #include stdio
7、 h main( ) inta=1, b=2, c=3, d=4; if(a=2)ll(b=1)c=2; if(c=3) (d=-1)a=5; printf( d, d, d, dn, a, b, C, d); 则程序的输出结果是 ( A) 2, 1, 2, -1 ( B) 2, 2, 2, 4 ( C) 5, 1, 2, -1 ( D) 1, 2, 3, 4 13 若有以下程序 main( ) inta=1, b=2, c=3, d=4, r=0; if(a!=1); elser=1; if(b=2)r+=2; if(c!=3); r+=3; if(d=4)r+=4; printf( dn,
8、 r); ) 则程序的输出结果是 ( A) 7 ( B) 10 ( C) 6 ( D) 3 14 有以下程序 main( ) intx=1, y=0, a=0, b=0; switch(x) case1: switch(y) case0: a+: break; case1: b+; break; ) case2: a+; b+; break; case3: a+; b+; ) printf(a= d, b= dn, a, b); ) 程序的运行结果是 ( A) a=2, b=2 ( B) a=1, b=1 ( C) a=1, b=0 ( D) a=2, b=1 15 有以下程序 main( )
9、 intk=5, n=0; do switch(k) case1: case3: n+=1; k-; break; default: n=0; k-; case2: case4: n+=2; k-; break; printf( dn); while(k 0 n 5) 运行以后的输出结果是 ( A) 0235 ( B) 235 ( C) 02356 ( D) 2356 16 若以下选项中的变量 a, b, y均已正确定义并赋值,则语法正确的 switch语句是 ( A) switch(a*a+b*b)default: break; case3: y=a+b; break; case2: y=a
10、-b;break; ) ( B) switch(a+b)casel: case3: y=a+b; break; case0: case4: y=a-b; ) ( C) switch(a+9)casea: y=a-b; caseb: y=a+b; ( D) switcha*bcase10: y=a+b; default: y=a-b; ) 17 有以下程序 main( ) intk=5; while(-k) printf( d, k一 =3); printf(n); ) 执行后的输出结果是 ( A) 2 ( B) 4 ( C) 1 ( D)死循环 18 有以下程序 #include main(
11、) inta=7; while(a-); printf( dkn, a); 程序运行后的输出结果是 ( A) 0 ( B) 1 ( C) 1 ( D) 7 19 若有以下程序 main( ) inta=-2, b=0; while(a+) +b: printf( d, dn, a, b); ) 则程序的输出结果是 ( A) 0, 2 ( B) 1, 2 ( C) 1, 3 ( D) 2, 3 20 有以下程序 main( ) inti=5; do if(i 3=1) if(i 5=2) printf(* d, i); break; i+: while(i!=0); printf(n); 程序的
12、运行结果是 ( A) *3*5 ( B) *5 ( C) *7 ( D) *2*6 21 有以下程序 main( ) inta=3; do printf( d, , a-=2); while(!(-a); printf(n); 程序运行后的输出结果是 ( A) 1, ( B) 1, -2, ( C) 3, 0, ( D) 1, 0 22 有以下程序 #include stdio h main( ) inty=9; for(; y 0; y-) if(y 3=0)printf( d, -y); 程序的运行结果 是 ( A) 963 ( B) 852 ( C) 741 ( D) 875421 23
13、 有以下程序 #include stdio h main( ) inti, j; for(i=3; i =1; i-) for(j=1; j =2; j+)printf( d, i+j); printf(n); 程序的运行结果是 ( A) 43 ( B) 2325344345 ( C) 45 ( D) 2.33434e+009 24 有以下程序 main( )inta=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 2
14、5 若有以下程序 main( ) inta=6, b=0, c=0; for(; a (b=0); ) 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 26 有以下程序 #include stdio h main( ) inti, 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
15、27 有以下程序 main( ) inti, j, x=0; for(i=0; i 2; i+) x+; for(j=0 j =3 j+) ir(j 2)continue; x+; x+; printffx= dn, x); 程序执行后的输出结果是 ( A) x=4 ( B) x=6 ( C) x=12 ( D) x=8 28 以下叙述中正确的是 ( A) break语句不能用于提前结束 for语句的本层循环 ( B) continue语句使得整个循环终止 ( C)使用 break语句可以使流程跳出 switch语句体 ( D)在 for语句中, continue与 break的效果是一样的,
16、可以互换 国家二级 C语言机试( C语言程序设计)模拟试卷 4答案与解析 一、选择题 1 【正确答案】 A 【试题解析 】 C语言本身没有提供输入输出语句,但是可以通过调用标准库函数中提供的输入和输出函数来实现输入和输出,选项 B错误;采用 printf输出数据,输出数据都默认为右对齐,若要左对齐,可以存格式控制中的 ” ”和宽度之间加一个 ”-”号来实现,选项 C错误; printf的输出精度由变量的类型决定,与域宽无关,选项 D错误。 【知识模块】 C语言程序设计 2 【正确答案】 D 【试题解析】 本题考查 printf语句。 printf( )函数是格式化输出函数,一般用于向标准输出设
17、备按规定格式输出信息。在编写 程序时经常会用到此函数。 printf( )函数的调用格式为: print(格式化字符串 ,参量表 )。其中, ”格式化字符串 ”包括两部分内容:一部分是正常字符,这些字符将按原样输出:另一部分是格式化规定字符,以 ” ”开始,后跟一个或几个规定字符,用来确定输出内容格式。格式化字符串的格式是: 标志 输出最小宽度 精度 长度 格式字符 标志:标志字符为 -、 +、空格等,其意义如下所示: .-:结果左对齐,右边填空格; .+:输出符号 (正号或负号 ): .空格:输出值为正时冠以空格,为负时冠以负号。 输出最小宽度:用十进制整数来表示输出的最少位数 (包括小数点
18、在内至少要输出这么多位 )。 .若实际位数多于定义的宽度,则按实际位数输出; .若实际位数少于定义的宽度,则右对齐,左边留空; .有负号,左对齐,右边留空; .表示宽度的数字以 0开始,则右对齐,左边留空。 精度:精度格式符以 “ ”开头,后跟十进制整数。它的意义是:如果输出数字,则表示小数的位数,若实际位数大于所定义的精度数,则四舍五入,若不足则补 0;如果输出的是字符,则表示输出字符的个数,若实际位数火 于所定义的精度数,则截去超过的部分; 长度:长度格式符为 h和 1两种, h表示按短整型量输出, 1表示按长整型量输出。 【知识模块】 C语言程序设计 3 【正确答案】 C 【试题解析】
19、scanf和 getchar函数分别从键盘上读入一个字符,因此输入 12空格 34,则变量 a中存放的为 1, b中存放 2, c中存放空格, d中存放 3。 【知识模块】 C语言程序设计 4 【正确答案】 C 【试题解析】 存使用 scanf函数进行输入数据时,输入的数据之间必须用空格、回车符、制表符 (Tab键 )等 间隔符隔开,似是空格为合法的字符型数据的输入。而按照格式符 d c d c说明,数值型数据和宁符数据输入之间不要加入空格间隔,而字符型数据和数值型数据的输入却可以加入任意的空格,同车和跳格。 【知识模块】 C语言程序设计 5 【正确答案】 B 【试题解析】 scanf函数进行
20、输入的时候,默认的输入间隔为空格、跳格和回车,变量 a、 b和 c均为数值型数据,输入时间隔为空格,因此 scanf函数的第一个表示格式的参数之间不用加入分隔符,而要输入 double型数据,格式控制必须用 lf(或 1e)。否则,数据不能正确输入。 【知识模块】 C语言程序设计 6 【正确答案】 A 【试题解析】 scanf函数中的格式控制字符串是为了输入数据用的,无论其中有什么字符,也不会输出到屏幕上,因此若想在屏幕上输出提示信息,应该首先使用 Drintt函数输出,选项 A卫确;在使用 scanf函数输入整数或实数时,输入数据之间可以用空格、跳格、回车来分隔,选项 B错误; printf
21、输出项不但可以为变量,还可以表达式或者常量,选项 C错误;如果要输出 ” ”,可以在格式控制中用 ” ”表示,将输出一个 ” ”,选 项 D错误。 【知识模块】 C语言程序设计 7 【正确答案】 C 【试题解析】 当用 scanf的数从键盘输入数据时,每行数据的未尾按下回车键(Enter键 )之前,可以任意修改。但按下回车键 putchar(c1)(Enter键 )之后, scanf函数即接受了这一行数据,不能再回去修改。所以本题中,当输入 123 CR时,变量 c1、 c2、 c3的值分别为 1、 2、 3,当输入 45678 CR时,变量 c5、 c6的值 4和 5。所以用输出函数 put
22、char(c1)输出 1, putchar(c2)输出 2, printf(c cn,c5,c6)输出 45。 【知识模块】 C语言程序设计 8 【正确答案】 C 【试题解析】 程序语句 inta, b, c, *p= c;定义了三个整型变量 a, b, c,和一个整型指针变量 p,并且把变量 c的地址赋给 p。 scanf函数的一般形式为 ”scanf(“格式控制字符串 ”,地址列表 )”,其中的地址列表应当是存放输入数据变量的地址。 【知识模块】 C语言程序设计 9 【正确答案】 C 【试题解析】 在 iff)语句的括号是一个合法的 C语言表达式即可,如果表达式 的值为 0,则不执行 if
23、语句,否则执行 if语句,而在选项 C中,符号不是 C语言的合法运算符,如果要表达 a大于或小于 b+c可用 a!=b+c或 (a b+Cll(a b+C来表达,而不能使用 a b+c。所以它不是一个合法的 C语言表达式。 【知识模块】 C语言程序设计 10 【正确答案】 C 【试题解析】 在 if语句中,表达式可以是任意合法的数值。当其值为非零时,执行 if语句,为 0时执行 else语句。 【知识模块】 C语言程序设计 11 【正确答案】 D 【试题解析】 题目中,虽然 else和第二个 if不在同一行上,但等价于在同一行上,因此,程序的意思是当 x人于 3且不等于 10时打印出来。 【知
24、识模块】 C语言程序设计 12 【正确答案】 B 【试题解析】 代码中有两条并列的 if语句,第一条 if语句执行, (a=2)11(b=1)值为 1,由于逻辑或表达式,根据其短路运算规则, a=2, b=2,即 b值不变执行 if分支 c=2。并列的 if语句中表达式 (c=3) (d=-1)为逻辑与表达式, c=3不成立,不考虑 d=-1表达式, d为 5逻辑表达式值为 0,不执行相应 if分支。 【 知识模块】 C语言程序设计 13 【正确答案】 B 【试题解析】 程序代码中有四条并列的 if语句,第一条 if表达式 a!=1不成立,执行 else分支, r=1;第二条 if表达式 b=
25、2成立,执行 r+=2, r=3;第三条 if语句c! 3不成立,执行语句 r+=3, r=6;第四条 if分支 d一 4成立,执行该 if分支语句, r+=4, r=10。 【知识模块】 C语言程序设计 14 【正确答案】 D 【试题解析】 本题考查的是用 switch语句实现多分支选择结构,首先进入第一个 switch(x)判断, 进入 case1中进行嵌套判断,如果 switch(y)也成立, a自加 1,遇到 break,退出嵌套,接着执行 case2, a自加为 2, b自加为 1,遇到 break,结束循环,此时 a=2, b=1。 【知识模块】 C语言程序设计 15 【正确答案】
26、 B 【试题解析】 因为变量的初始值分别为 k=5,n=0,所以程序第 1次进入循环时,执行 default语句, n=0,k=4,没有 break语句,因此执行 case2分支语句, n为2, k为 3,程序进行第 2次循环,执行 case3: n 3, k=2,输出 n值为 3,程序进 行第 3次循环,执行 case3这个分支,结果是 n=5, k=1,打印出 5;这时因为n=5不满足 n 5的循环条件,因此退出循环,程序运行结束。 【知识模块】 C语言程序设计 16 【正确答案】 A 【试题解析】 使用 switch语句直接处理多个分支,其一般形式为: switch(表达式 )case常
27、量表达式 1:语句 1; break; case常量表达式 2:语句 2; break; case常量表达式 n:语句 n; break; default:语句 n+l; break; switch语句的执行流程是:首先计算 switch后面圆括号中表达式的值,然后用此值依次与各个 case的常量表达式比较,若圆括号中表达式的值与某个 case后面的常量表达式的值相等,就执行此 case后面的语句,执行后遇 break语句就退出 switch语句;若圆括号中表达式的值与所有 case后面的常量表达式都不等,则执行 default后面的语句n+1,然后退出 switch语句。对于选项 B, ca
28、se语句和常量之间没有空格,而选项C中的 case后面为变量,选项 D中 switch后面没给出圆括号。 【知识模块】 C语言程序设计 17 【正确答案】 C 【试题解析】 在程序语句中, k的初始值为 5,进行第 1次 while循环后, k自减1为 4,非 0,执行循环体里的 printf语句,输出 1,此时 k的值变为 1。程序执行第 2次循环时, k自减 1变为 0,为假,退出 while循环语句。所以程序的最后结果为 1。 【知识模块】 C语言程序设计 18 【正确答案】 C 【试题解析】 在 while语句中,先判断 while后面的表达式是否为 0,如果为 0,则退出循环,否则执
29、行循环体。在本题中,当变量 a的值经过几次循环后,其值等于 0时,退出 while循环语句,变量 a再 执行自减运算,所以其值等于 -1。 【知识模块】 C语言程序设计 19 【正确答案】 B 【试题解析】 循环体执行两次,第一次表达式 a+值为 2, a的值为 -1,执行循环体 +b, b值为 1,第二次表达式 a+值为 -1, a的值等于 0,执行 +b, b值为2,第三次判断条件 a+,表达式值为 0,不执行循环体,但是条件判断以后, a的值为 1。 【知识模块】 C语言程序设计 20 【正确答案】 C 【试题解析】 由于循环变量 i的初值等于 5,所以第一、二次进入 do , whil
30、e循环语句时,条 件语句 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语言程序设计 21 【正确答案】 B 【试题解析】 循环体执行两次。首先输出 a=1,然后判断表达式 !(一 a), a为 0,循环条件表达式值为 1,执仃第二次循环体,输出 a=-2。判断循环条件表达式值为 0,循环退出。 【 知识模块】 C语言程序设计 22 【正确答案】 B 【试题解析】
31、 y的值的初值为 9,所以在 for循环中,当 y的值为 9、 6或 3时,if语句的条什成立,执行输出语句,输出表达式一 y的值。因为自减符号在 y的前面,所以首先 y的自减 1,然后再输出 y的值,故输出结果为 852。 【知识模块】 C语言程序设计 23 【正确答案】 C 【试题解析】 本题中的外层行变量 i从 3逐次递减到 1,共输出 3行。内层列变量 i每次从 1递增到 2,每行输出 2个数字。所以当 i=3时,第一行输出i+1=4i+2=5,即 45:当 i=2时,第行输出 i+1=3和 i+2=4,即 34;当 i=1时,第一行输出 i+1=2和 i+2=3,即 23。 【知识模
32、块】 C语言程序设计 24 【正确答案】 B 【试题解析】 在这段程序中变量 a的初值等于 1,变量 b的初值等于 2。第 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语言程序设计 25 【正确答案】 C 【试题解析】 循环条件 a (b=0), a非零同时 b=0
33、则执行循环体,否则退出。循环体执行一次,此时 b=6, a=6, c=1。 【知识模块】 C语言程序设计 26 【正确答案】 B 【试题解析】 存程序中,内层循环判断条件为 ”i =i”而 i的初值为 3,故当外层循环变量 i的值为 1和 2时,内层循环体都不会被执行。只有当 i和 i都等于 3时循环才会执行一次。因为 m的值为 55对 3求余结果为 1。 【知识模块】 C语言程序设计 27 【正确答案】 D 【试题解析】 在第 1次外层 for循环中,首先 x+得到 x=1。进入到内层。 for循环,只有循环变量 j的值为奇数时,变量 x的值才自加 l,所以在内层 for循环执行过程中,变量
34、 x的值自加两次,当退出内层 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语言程序设计 28 【正确答案】 C 【试题解析】 用 break语句可以使程序流程跳出 switch语句体,也可用 break语句在循环结构中终止循环体,从而提前结束循环,而 continue语句的作用是结束本次循环,即跳过本次循环体中 continue语句后面的语句,立刻进行下一次的循环条件判断,可以理解为仅结束本次循环。 【知识模块】 C语言程序设计