1、国家二级 C语言机试(选择题)模拟试卷 15及答案与解析 一、选择题 1 有以下程序 #include main() char c1=A, c2=Y; printf( “%d, %dn“, c1,c2 ); 程序的输出结果是( )。 ( A) 65,89 ( B)输出格式不合法,输出出错信息 ( C) 65,90 ( D) A,Y 2 C语言中 char类型数据占字节数为( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 3 下列关系表达式中,结果为 “假 “的是 ( )。 ( A) (3 != 4) 2 ( B) (3 6 ( D) 3 main() int a=0,b=0,c
2、=0,d=0; (a+ printf(“%d,%d,%d,%dn“, a,b,c,d); 程序的运行结果是( )。 ( A) 1,0,0,1 ( B) 1,1,0,1 ( C) 1,0,1,0 ( D) 1,1,1,0 6 以下选项中非法的 C语言字符常量是( )。 ( A) 128 ( B) 127 ( C) x01 ( D) x08 7 有以下程序 #include main() int a=0,b=0,c=0,d=0; (+a | +b) ? +c : +d; printf(“%d,%d,%d,%dn“, a,b,c,d); 程序的运行结果是( )。 ( A) 1,0,1,0 ( B)
3、1,1,0,1 ( C) 1,0,0,1 ( D) 1,1,1,0 8 有以下程序 (字母 A的 ASCII代码为 65) #include main() char c1 = A, c2 = Y; printf(“%d, %dn“, c1, c2 ); 程序运行后的输出结果是( )。 ( A) 65, 89 ( B) A, Y ( C) 65, 90 ( D)输出格式不合法 ,输出出错信息 9 若有说明语句: char c = 72 ; 则变量 c中存放的是( )。 ( A) 1个字符 ( B) 2个字符 ( C) 3个字符 ( D)说明语句不合法 10 有以下程序 #include main
4、() int a, b, c=241; a = c/100 % 9; b = ( -1 ) printf(“%d, %dn“, a, b ); 程序运行后的输出结果是( )。 ( A) 2,1 ( B) 6,1 ( C) 6,0 ( D) 2,0 11 已知 a=5,b=6,c=7,d=8,m=2,n=2,执行 (m=ab) while( ( c=getchar() )!= n ) switch( c-2 ) case 0 : case 1 : putchar( c+4 ); case 2 : putchar( c+4 ); break; case 3 : putchar( c+3 ); de
5、fault : putchar( c+2 ); break; printf( “n“ ); 程序运行后从第一列开始输入以下数据 2473 程序的输出结果是( )。 ( A) 668977 ( B) 4444 ( C) 6677877 ( D) 68766 13 有如下程序 #include main() if (0 = 0) putchar(X); if (0 = 0) putchar(Y); if (a b) putchar(Z); printf(“n“); 程序运行后的输出结果是( )。 ( A) X ( B) XYZ ( C) YZ ( D) Y 14 有以下程序 #include ma
6、in() printf(“%dn“, NULL ); 程序运行后的输出结果是( )。 ( A) 0 ( B)变量无定义,输出不确定 ( C) -1 ( D) 1 15 以下选项中,值为 1的表达式是( )。 ( A) 1 - 0 ( B) 1 0 ( C) 1 -0 ( D) 0 - 0 16 设有定义: double x=2.12;,以下不能完整输出变量 x值的语句是( )。 ( A) printf(“x=%5.0fn“,x); ( B) printf(“x=%fn“,x); ( C) printf(“x=%lfn“,x); ( D) printf(“x=%0.5fn“,x); 17 设有定
7、义: int a,b; float x,y; ,则以下选项中对语句所作的注释叙述错误的是( )。 ( A) scanf(“%d%d%f“, /* 多余的格式符 %f完全不起作用 */ ( B) scanf(“%d%d“, /* 多余的输入项不能获得输入数据 */ ( C) scanf(“%d%f%d“, /* 输入项与格式符类型不匹配,变量 b和 x得不到正确的输入数据 */ ( D) scanf(“Input:%d%d“, /* 格式串中允许加入格式符以外的字符串 */ 18 有以下程序 #include main() char a,b,c,d; scanf(“%c%c“, c=getcha
8、r(); d=getchar(); printf(“%c%c%c%cn“,a,b,c,d); 当执行程序时,按下列方式输入数据(从第 1列开始, 代表回车,注意:回车也是一个字符) 12 34 则输出结果是( )。 ( A) 12 3 ( B) 12 ( C) 1234 ( D) 12 34 19 有以下程序 #include main() int a=1,b=0; printf(“%d,“,b=a+b); printf(“%dn“,a=2*b); 程序运行后的输出结果是( )。 ( A) 1,2 ( B) 1,0 ( C) 3,2 ( D) 0,0 20 若变量已正确定义为 int型,要通过
9、语句 scanf(“%d,%d,%d“, 给 a赋值 1、给 b赋值 2、给 c赋值 3,以下输入形式中错误的是(注: 代表一个空格符 )( )。 ( A) 123 ( B) 1,2,3 ( C) 1,2,3 ( D) 1,2,3 21 设变量均已正确定义,若要通过 scanf(“%d%c%d%c“, 语句为变量 a1和 a2赋数值 10和 20,为变量 c1和 c2赋字符 X和 Y。以下所示的输入形式中正确的是(注: 代表空格字符)( )。 ( A) 10X 20Y ( B) 10X20Y ( C) 10X 20Y ( D) 10X20Y 22 设有定义: int a; float b; 执
10、行 scanf(“%2d%f“, 语句时,若从键盘输入 876 543.0 则 a和 b的值分别是( )。 ( A) 87和 6.0 ( B) 876和 543.0 ( C) 87和 543.0 ( D) 76和 543.0 23 有如下程序段: int x=12; double y=3.141593; printf(“%d%8.6f“, x, y); 其输出结果是( )。 ( A) 123.141593 ( B) 12 3.141593 ( C) 12, 3.141593 ( D) 123.1415930 24 若有定义: int a,b; 通过语句 scanf(“%d;%d“, 能 把整数
11、 3赋给变量 a, 5赋给变量 b的输入数据是( )。 ( A) 3;5 ( B) 3,5 ( C) 3 5 ( D) 35 25 若有定义 int a; float b; double c; 程序运行时输入: 3 4 5 能把值 3输入给变量 a、 4输入给变量 b、 5输入给变量 c的语句是( )。 ( A) scanf(“%d%f%lf“, ( B) scanf(“%d%lf%lf“, ( C) scanf(“%d%f%f“, ( D) scanf(“%lf%lf%lf“, 26 设有定义: double a,b,c; 若要求通过输入分别给 a、 b、 c输入 1、 2、 3,输入形式如
12、下(注:此处 代表一个空格 ) 1.02.03.0 则能进行正确输入的语句是( )。 ( A) scanf(“%lf%lf%lf“, ( B) scanf(“%lf%lf%lf“,a,b,c); ( C) scanf(“%f%f%f“, ( D) scanf(“%5.1lf%5.1lf%5.1lf“, 27 以下叙述中正确的是( )。 ( A)赋值语句是一种执行语句,必须放在函数的可执行部分 ( B) scanf和 printf是 C语言提供的输入和输出语句 ( C)由 printf输出的数据都隐含左对齐 ( D)由 printf输出的数据的实际精度是由格式控制中的域宽和小数的域宽来完全决定的
13、 28 以下叙述中正确的是( )。 ( A)当用 scanf从键盘输入数据时,每行数据在没按下回车键( Enter键 ) 前,可以任意修改 ( B)花括号对 只能用来表示函数的开头和结尾,不能用于其他目的 ( C)空语句就是指程序中的空行 ( D)复合语句在语法上包含多条语句,其中不能定义局部变量 29 以下叙述中正确的是( )。 ( A)在 scanf函数中的格式控制字符串是为了输入数据用的,不会输出到屏幕上 ( B)在使用 scanf函数输入整数或实数时,输入数据之间只能用空格来分隔 ( C)在 printf函数中,各个输出项只能是变量 ( D)使用 printf函数无法输出百分号 % 3
14、0 以下叙述中正确的是( )。 ( A)在 scanf函数的格式串中,必须有与输入项一一对应的格式转换说明符 ( B)只能在 printf函数中指定输入数据的宽度,而不能在 scanf函数中指定输入数据占的宽度 ( C) scanf函数中的字符串,是提示程序员的,输入数据时不必管它 ( D)复合语句也被称为语句块,它至少要包含两条语句 31 有以下程序 #include main() int a=2, c=5; printf( “a=%d,b=%dn“, a,c ); 程序的输出结果是( )。 ( A) a=%d,b=%d ( B) a=%2,b=%5 ( C) a=2,b=5 ( D) a=
15、%d,b=%d 32 若有定义和语句: int a, b; scanf(“%d,%d,“, 以下选项中的输入数据,不能把值 3赋给变量 a、 5赋给变量 b的是( )。 ( A) 3 ,5 ( B) 3,5 ( C) 3,5, ( D) 3,5,4 33 有以下程序 #include main() int k=33; printf(“%d,%o,%xn“, k, k, k); 程序的运行结果是( )。 ( A) 33,41,21 ( B) 33,33,33 ( C) 41,33,21 ( D) 33,21,41 34 若有定义: char c; int d; ,程序运行时输入: 1,2 ,能把
16、值 1输入给变量c、值 2输入给变量 d的输入语句是( )。 ( A) scanf(“%c,%d“, ( B) scanf(“%c%d“, ( C) scanf(“%d,%f“, ( D) scanf(“%d%d“, 35 有以下程序 #include main() int k=-17; printf(“%d,%o,%xn“, k, 1-k, 1-k); 程序的运行结果是( )。 ( A) -17,22,12 ( B) -17,12,22 ( C) -17,-22,-12 ( D) 17,22,12 36 若有定义: int a; float b; double c; ,程序运行时输入: a=
17、1,b=2,c=3 ,能把值 1输入给变量 a、值 2输入给变量 b、值 3输入给变量 c的输入语句是( )。 ( A) scanf(“a=%d,b=%f,c=%lf“, ( B) scanf(“%d%f%lf“, ( C) scanf(“a=%d,b=%lf,c=%lf“, ( D) scanf(“a=%d,b=%f,c=%f“, 37 有以下程序 #include main() int a=2, c=5; printf(“a=%d,b=%dn“, a, c ); 程序运行后的输出结果是( )。 ( A) a=%d,b=%d ( B) a=%2,b=%5 ( C) a=%d,b=%d ( D
18、) a=2,b=5 38 有以下程序 #include main() int a1,a2; char c1,c2; scanf(“%d%c%d%c“, printf(“%d,%c,%d,%c“,a1,c1,a2,c2); 若想通过键盘输入,使得 a1的值为 12, a2的值为 34, c1的值为字符 a, c2的值为字符 b,程序输出结果是: 12,a,34,b 则正确的输入格式是 (以下 代表空格,代表回车 )( )。 ( A) 12a34b ( B) 12a34b ( C) 12,a,34,b ( D) 12a34b 39 以下不能输出字符 A的语句是(注:字符 A的 ASCII码值为 6
19、5,字符 a的ASCII码值为 97)( )。 ( A) printf (“%d n“, A); ( B) printf (“%c n“, a-32); ( C) printf (“%c n“, 65); ( D) printf (“%c n“, B-1); 40 有以下程序 #include main() char c1,c2,c3,c4,c5,c6; scanf(“%c%c%c%c“, c5=getchar(); c6=getchar(); putchar(c1); putchar(c2); printf(“%c%cn“,c5,c6); 程序运行后,若从键盘输入(从第 1列开始 ) 123
20、 45678 则输出结果是( )。 ( A) 1245 ( B) 1256 ( C) 1278 ( D) 1267 国家二级 C语言机试(选择题)模拟试卷 15答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 考查字符型数据。字符常量与其 ASCII码值一一对应,在计算的时候,一般是字符数据对应的 ASCII码参与运算,输出时会根据格式控制符输出对应的字符或者 ASCII码。答案选 A。 【知识模块】 数据类型、运算符与表达式 2 【正确答案】 A 【试题解析】 C语言中 char类型数据占字节数为 1个字节,这个值可以用sizeof(char)求得。答案选 A。 【知识模块】 数据
21、类型、运算符与表达式 3 【正确答案】 A 【试题解析】 关系表达式和 逻辑表达式计算出的值只能为 0或者 1,很明显选项A)中逻辑表达式 “(3 != 4)“的值不可能大于 2,结果为 “假 “,答案选 A)。 【知识模块】 数据类型、运算符与表达式 4 【正确答案】 A 【试题解析】 用两个连续的双引号引起来的为空字符串,选项 A)正确;字符常量是由两个单引号引起来的 ASCII码表中的字符,没有空的字符常量,选项 B)错误; C语言中要对字符串比较时需要用到专门的字符串处理函数,不能直接用关系运算符,选项 C)错误;系统会为字符串的最后自动添加结束标志 “0“,所以空字符串占用内 存空间
22、大小为 1个字节,选项 D)错误;答案选 A)。 【知识模块】 数据类型、运算符与表达式 5 【正确答案】 A 【试题解析】 条件表达式的形式为: 表达式 1:表达式 2 : 表达式 3 ,计算 “表达式 1“的值,若为 “真 “,取 “表达式 2“的值作为整个条件表达式的值;若为 “假“,取 “表达式 3“的值作为整个条件表达式的值。根据逻辑与表达式的 “短路 “现象,表达式 “a+若要控制输出精度,则需以 “. “开头,后跟十进制整数,如 “%.2f“或 “%0.2f“,选项 D)正确 ; 控制输出宽度则是用整数表示,如“%5f“。选项 A)中 “%5.0f“表示输出宽度为 5,右对齐,小
23、数点后保留位数为0,所以结果输出为 2,不能完整输出 x,答案选 A)。 【知识模块】 顺序结构程序设计 17 【正确答案】 A 【试题解析】 考查 scanf函数的格式输入, “格式控制串 “中允 许有非格式字符,只不过输入时也要输入该非格式字符,选项 D)正确。输入的数据与输出类型不一致时,编译依然能通过,只不过输出结果有可能不正确,选项 C)正确。输入多个数据时,系统等待接收的数据个数与 “格式控制串 “中的格式控制符的个数一致,然后把接收的数据依次赋值给后面的变量,若变量个数多余格式控制符个数,则多余的变量不获取数据,若少于,系统会在接收完额定数目的数据之后报错,答案选 A)。 【知识
24、模块】 顺序结构程序设计 18 【正确答案】 A 【试题解析】 考查字符数据的输入输出。 getchar()函数只能接受单个字符,数字和回车也会按照字符处理,输入多于一个字符时,只接受第一个字符。本程序输入结束之后, a=1, b=2, c= , d=3。则输出的结果为 A)。 【知识模块】 顺序结构程序设计 19 【正确答案】 A 【试题解析】 考查数据的输入, printf(“%d, “,b=a+b);先计算 b=a+b,得出b=1,再输出 b值。 语句 printf(“%dn“,a=2*b);先计算 a=2*b,得出 a=2,再输出a值。所以输出结果为 A)。 【知识模块】 顺序结构程
25、序设计 20 【正确答案】 A 【试题解析】 考查 scanf的格式输出。如果 scanf的引号内有普通字符,则程序调试的时候必须原样输入,只有选项 A)在输入的数据之间没有逗号,答案选A)。 【知识模块】 顺序结构程序设计 21 【正确答案】 A 【试题解析】 考查 scanf函数。格式控制符为 “%c“的情况下,空格和回车也能作为一个字符被接收,要保证输入结果的正确性, a1和 c1数据之间以及 a2和 c2数据之间在输入时不能带有其他字符(空格或者回车),由此答案选 A。 【知识模块】 顺 序结构程序设计 22 【正确答案】 A 【试题解析】 考查 scanf函数的格式输入, “%2d“
26、表示控制输入语句的宽度为2,程序中输入为 876时,只把 87赋予变量 a,而把 6赋予变量 b,所以答案选A。 【知识模块】 顺序结构程序设计 23 【正确答案】 A 【试题解析】 考查 printf函数的格式输出。除了格式控制符外,其余均按照双引号内原样输出。变量 x、 y输出时中间没有其他字符,所以选项 C)错误;“%8.6f“表示控制输出宽度为 8(包括小数点),右对齐,小数点后保留位数为6,所以输出 结果为选项 A)。 【知识模块】 顺序结构程序设计 24 【正确答案】 A 【试题解析】 考查 scanf的格式输入,如果 “内有普通字符时,在程序调试时就必须原样输入,所以答案选 A。
27、 【知识模块】 顺序结构程序设计 25 【正确答案】 A 【试题解析】 考查 scanf的格式输入。 scanf函数的一般形式为 scanf(“格式控制字符串 “,输入项 1,输入项 2,) ,其中, “格式控制字符串 “用于指定输入的格式,“%d“表示按照十进制整型输入, “%f“表示按照浮点型输入, “%lf“表 示按照长精度浮点型输入,所以答案选 A。 【知识模块】 顺序结构程序设计 26 【正确答案】 A 【试题解析】 考查 scanf的格式输入。 scanf函数的一般形式为 scanf(“格式控制字符串 “,输入项 1,输入项 2,) ,其中, “格式控制字符串 “用于指定输入的格式
28、,“%d“表示按照十进制整型输入, “%f“表示按照浮点型输入, “%lf“表示按照长精度浮点型输入,选项 C)错误; scanf的输入项由地址运算符 “&“后跟变量名组成,地址符 “&“不可省,选项 B)错误; scanf函数没有精度控制,scanf(“%5.1lf“,&a)是非法的,选项 D)错;答案选 A)。 【知识模块】 顺序结构程序设计 27 【正确答案】 A 【试题解析】 scanf和 printf为 C语言提供的关键字,选项 B)错误; printf输出的数据默认右对齐,选项 C)错误; printf函数的输出精度由小数的域宽来决定,选项 D)错误;选项 A)表述正确,答案选 A
29、)。 【知识模块】 顺序结构程序设计 28 【正确答案】 A 【试题解析】 花括号对可以将一条或者多条语句括起来形成一个语句组,在语法上被当做一个整体 对待,相当于一条语句,而不仅仅是用于区分函数的开头和结尾,选项 B)错误;空语句指的是只有分号的语句,选项 C)错误;复合语句中可以定义局部变量,只是该局部变量的生存域为该复合语句,选项 D)错误;回车键( Enter键)表示一行输入的结束,在没按下回车键前,可以对当前行输入的数据进行修改,所以答案选 A)。 【知识模块】 顺序结构程序设计 29 【正确答案】 A 【试题解析】 scanf函数输入数据时,其间隔是按照 scanf中指定的非格式符
30、作为间隔符,如: scanf(“%d,%d“,&a,&b)中, 是以 “,“作为间隔符的,选项 B)错误;printf函数是将各输出项的值按照 “中对应的格式控制符输出,输出项可以为一个变量或者表达式,也可以为一常量,选项 B)错误;百分号 “%“主要用于指定输出格式,如果要作为普通字符输出,则需要用 “%“的形式,选项 D)错误;答案选 A)。 【知识模块】 顺序结构程序设计 30 【正确答案】 A 【试题解析】 printf和 scanf函数都可以控制输入输出数据的宽度,只不过 scanf函数不能控制输入数据的精度,选项 B)错误; scanf函数中的字符串内如果有普通 字符,那么在调试的
31、时候就必须原样输入,选项 C)错误;复合语句是指用花括号对 将一条或者多条语句括起来形成一个语句组,选项 D)错误;选项 A)表述正确,答案选 A)。 【知识模块】 顺序结构程序设计 31 【正确答案】 A 【试题解析】 百分号 “%“主要用于指定输出格式,如果格式字符串中两个百分号连续即为 “%“的形式,则表示输出一个普通字符 “%“。所以答案选 A。 【知识模块】 顺序结构程序设计 32 【正确答案】 A 【试题解析】 考查 scanf的格式输入。如果 scanf的 “内有普通字符,则程序调试的时候必须原样输入,选项 A)在输入的数据之间多了一个空格,所以答案选A)。 【知识模块】 顺序结
32、构程序设计 33 【正确答案】 A 【试题解析】 printf中的 “引起来的为格式控制字符串,若格式控制字符为 “d“表示以十进制形式输出带符号整数;若为 “O“或者 “o“表示以八进制形式输出无符号整数;若为 “X“或者 “x“表示以十六进制形式输出无符号整数,所以答案选 A。 【知识模块】 顺序结构程序设计 34 【正确答案】 A 【试题解析】 考查 scanf的格 式输入。如果程序调试的时候有普通的字符,那么若要程序调试通则需要在 scanf的 “内原样带有相同的字符,变量 c和 d的数据类型分别为 char型和 int型,对应的格式控制符为 %c和 %d,所以答案选 A。 【知识模块
33、】 顺序结构程序设计 35 【正确答案】 A 【试题解析】 printf中的 “引起来的为格式控制字符串,若格式控制字符为 “d“表示以十进制形式输出带符号整数;若为 “O“或者 “o“表示以八进制形式输出无符号整数;若为 “X“或者 “x“表示以十六进制形式输出无符号整数, 1-k的十进制值为 18,转化成八进制为 22,转化成十六进制为 12,所以答案选 A。 【知识模块】 顺序结构程序设计 36 【正确答案】 A 【试题解析】 考查 scanf的格式输入。如果程序调试的时候有普通的字符,那么若要程序调试通则需要在 scanf的 “内原样带有相同的字符,变量 a、 b、 c的数据类型分别为
34、 int、 float、 double,对应的格式控制符分别为 %d、 %f和 %lf,答案选 A。 【知识模块】 顺序结构程序设计 37 【正确答案】 A 【试题解析】 百分号 “%“主要用于指定输出格式,如果格 式字符串中两个百分号连续即为 “%“的形式,则表示输出一个普通字符 “%“。所以答案选 A。 【知识模块】 顺序结构程序设计 38 【正确答案】 A 【试题解析】 考查 scanf的格式输入。如果 scanf的 “内有普通字符,则程序调试的时候必须原样输入,如果没有普通字符,那么在调试的时候就不能乱加普通字符,答案选 A。 【知识模块】 顺序结构程序设计 39 【正确答案】 A 【试题解析】 :printf函数中的格式控制符若为 “%d“则表示按照十进制整数输出,选项 A)输出的是字符 A的 ASCII值,而不是字符 A,答案选 A)。 【知识模块】 顺序结构程序设计 40 【正确答案】 A 【试题解析】 对于字符型数据的输入而言,从键盘上输入的字符,不管是否可以打印,都会被读入字符型变量中;因此, c1=1, c2=2, c3=3, c4=,c5=4, c6=5,输出 c1, c2, c5, c6的结果为 1245,答案选 A。 【知识模块】 顺序结构程序设计