1、国家二级 C语言( C语言程序设计)机试模拟试卷 11及答案与解析 一、选择题 1 以下叙述中正确的是 ( A)赋值语句是一种执行语句,必须放在函数的可执行部分 ( B) scanf和 printf是 C语言提供的输入和输出语句 ( C)由 printf输出的数据都隐含左对齐 ( D)由 printf输出的数据的实际精度是由格式控制中的域宽和小数的域宽来完全决定的 2 有以下程序 main() int a=3; a+=a-=a*a; printf( “%dn“, a ); 程序的输出结果是 ( A) 9 ( B) 3 ( C) -12 ( D) 0 3 有如下程序段: int x=12; do
2、uble y=3.141593; printf(“%d%8.6f“, x, y); 其输出结果是 ( A) 12 3.141593 ( B) 12, 3.141593 ( C) 123.1415930 ( D) 123.141593 4 若有以下程序 #include stdio.h main() int b=10, a=-11; a %= b %= 4; printf(“%d %dn“, a, b); 则程序 的输出结果是 ( A) 1 2 ( B) -1 -2 ( C) -1 2 ( D) 1 -2 5 有以下程序 main() int a=2, c=5; printf( “a=%d,b=
3、%dn“, a,c ); 程序的输出结果是 ( A) a=%2,b=%5 ( B) a=%d,b=%d ( C) a=2,b=5 ( D) a=%d,b=%d 6 有以下程序 main() char a,b,c,d; scanf(“%c%c“, c=getchar(); d=getchar(); printf(“%c%c%c%cn“,a,b,c,d); 当执行程序时,按下列方式输入数据(从第 1列开始,代表回车,注意:回车也是一个字符) 12 34 则输出结果是 ( A) 12 ( B) 1234 ( C) 12 3 ( D) 12 34 7 若变量已正确定义为 int型,要通过语句 scan
4、f(“%d,%d,%d“, 给 a赋值1、给 b赋值 2、给 c赋值 3,以下输入形式中错误的是(注: 代表一个空格符 ) ( A) 1,2,3 ( B) 1,2,3 ( C) 1,2,3 ( D) 123 8 设变量均已正确定义,若要通过 scanf(“%d%c%d%c“, 语句为变量 a1和 a2赋数值 10和 20,为变量 c1和 c2赋字符 X和 Y。以下所示的输入形式中正确的是(注: 代表空格字符) ( A) 10X20Y ( B) 10X 20Y ( C) 10X 20Y ( D) 10X20Y 9 设有定义: int a; float b; 执行 scanf(“%2d%f“, 语
5、句时,若从键盘输入 876 543.0 则 a和 b的 值分别是 ( A) 876和 543.0 ( B) 87和 6.0 ( C) 87和 543.0 ( D) 76和 543.0 10 若有定义: int a,b; 通过语句 scanf(“%d;%d“, 能把整数 3赋给变量 a, 5赋给变量 b的输入数据是 ( A) 3,5 ( B) 3 5 ( C) 3;5 ( D) 35 11 若有定义 int a; float b; double c; 程序运行时输入: 3 4 5 能把值 3输入给变量a、 4输入给变量 b、 5输入给变量 c的语句是 ( A) scanf(“%d%lf%lf“,
6、 ( B) scanf(“%d%f%lf“, ( C) scanf(“%d%f%f“, ( D) scanf(“%lf%lf%lf“, 12 设有定义: double a,b,c; 若要求通过输入分别给 a、 b、 c输入 1、 2、 3,输入形式如下(注:此处 代表一个空格 ) 1.02.03.0 则能进行正确输入的语句是 ( A) scanf(“%lf%lf%lf“,a,b,c); ( B) scanf(“%f%f%f“, ( C) scanf(“%lf%lf%lf“, ( D) scanf(“%5.1lf%5.1lf%5.1lf“, 13 以下叙述中正确的是 ( A)当用 scanf从键
7、盘输入数据时,每行数据在没按下回车键( Enter键 ) 前,可以任意修改 ( B)花括号对 只能用来表示函数的开头和结尾,不能用于其他目的 ( C)空语句就是指程序中的空行 ( D)复合语句在语法上包含多条语句,其中不能定义局部变量 14 以下叙述中正确的是 ( A)在 scanf函数中的格式控制字符串是为了输入数据用的,不会输出到屏幕上 ( B)在使用 scanf函数输入整数或实数时,输入数据之间只能用空格来分隔 ( C)在 printf函数中,各个输出项只能是变量 ( D)使用 printf函数无法输出百分号 % 15 以下叙述中正确的是 ( A)在 scanf函数的格式串中,必须有与输
8、入项一一对应的格式转换说明符 ( B)只能在 printf函数中指定输入数据的宽度,而不能在 scanf函数中指定输入数据占的宽度 ( C) scanf函数中的字符串,是提示程序员的,输入数据时不必管 它 ( D)复合语句也被称为语句块,它至少要包含两条语句 16 有以下程序 #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
9、,b 则正确的输入格式是 (以下 代表空格,代表回车 ) ( A) 12a34b ( B) 12,a,34,b ( C) 12a34b ( D) 12a34b 17 有以下程序 #include stdio.h 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 45678 则输出结果是 ( A) 1256 ( B) 1278 ( C) 124
10、5 ( D) 1267 18 若有定义语句: double x, y,*px,*py; 执行 px= py= 正确的输入语句是 ( A) scanf(“%f %f“ ( B) scanf(“%f %f“, x, y); ( C) scanf(“%lf %le“, px, py); ( D) scanf(“%lf %lf“,x, y); 19 以下程序段完全正确的是 ( A) int k, *p= scanf(“%d“, p); ( B) int *p; scanf(“%d“, p); ( C) int *p; scanf(“%d“, ( D) int k, *p; *p= scanf(“%d“
11、, p); 20 若在定义语句: int a,b,c,*p= 接着执行以下选项中的语句,则能正确执行的语句是 ( A) scanf(“%d%d%d“,a,b,c); ( B) scanf(“%d“,a,b,c); ( C) scanf(“%d“,p); ( D) scanf(“%d“, 21 有以下程序段 int j; float y; char name50; scanf(“%2d%f%s“, 当执行上述程序段,从键盘上输入 55566 7777abc 后, y的值为 ( A) 55566.0 ( B) 7777.0 ( C) 566.0 ( D) 566777.0 22 有以下程序段 ch
12、ar name20; int num; scanf(“name=%s num=%d“,name, 当执行上述程序段,并从键盘输入: name=Lili num=1001后, name的值为 ( A) name=Lili ( B) Lili num= ( C) name=Lili num=1001 ( D) Lili 23 有以下程序 main() int a=0,b=0,c=0,d=0; if(a=1) b=1; c=2; else d=3; printf(“%d,%d,%d,%dn“,a,b,c,d); 程序输出 ( A) 0,0,0,3 ( B) 1,1,2,0 ( C)编译有错 ( D)
13、 0,1,2,0 24 有以下程序 main() int x=1, y=0; if (!x) y+; else if (x=0) if (x) y+=2; else y+=3; printf(“%dn“, y); 程序运行后的输出结果是 ( A) 2 ( B) 0 ( C) 1 ( D) 3 25 若变量已正确定义,在 if (W) printf(“%dn“ ,k ); 中,以下不可替代 W的是 ( A) ch=getchar() ( B) a=b+c ( C) a b+c ( D) a+ 26 有以下程序段 int a, b, c; a=10; b=50; c=30; if (a b) a=
14、b, b=c; c=a; printf(“a=%d b=%d c=%dn“, a, b, c); 程序的输出结果是 ( A) a=10 b=50 c=30 ( B) a=10 b=30 c=10 ( C) a=10 b=50 c=10 ( D) a=50 b=30 c=50 27 设有定义: int a=1,b=2,c=3; 以下语句中执行效果与其它三个不同的是 ( A) if(a b) c=a;a=b;b=c; ( B) if(a b) c=a,a=b,b=c; ( C) if(a b) c=a,a=b,b=c; ( D) if(a b) c=a;a=b;b=c; 28 if语句的基本形式是
15、: if (表达式 ) 语句,以下关于 “表达式 ”值的叙述中正确的是 ( A)必须是整数值 ( B)必须是正数 ( C)可以是任意合法的数值 ( D)必须是逻辑值 29 有如下嵌套的 if语句 if(a b) if(a c)k=a; else k=c; else if(b c)k=b; else k=c; 以下选项中与上述 if语句等价的语句是 ( 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); 国家二级 C语言( C语言程序设计)机试模拟试卷 11答案
16、与解析 一、选择题 1 【正确答案】 C 【试题解析】 C语言本身没有提供输入输出语句,但是可以通过调用标准库函数中提供的输入和输出函数来实现输入和输出,选项 B错误;采用 printf输出数据,输出数据都默认为右对齐,若要左对齐,可以在格式 控制中的 “%”和宽度之间加一个 “-”号来实现,选项 C错误; printf的输出精度由变量的类型决定,与域宽无关,选项 D错误。 【知识模块】 C语言程序设计 2 【正确答案】 C 【试题解析】 对于表达式 a+=a-=a*a相当于 a=a-( a*a),然后计算 a=a+a, a的初值为 3,则表达式的值为 -12。 【知识模块】 C语言程序设计
17、3 【正确答案】 C 【试题解析】 本题考查 printf语句。 printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。 printf()函数的调用格式为: printf(“格式化字符串 “, 参量表 )。 其中, “格式化字符串 ”包括两部分内容:一部分是正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以 “%”开始,后跟一个或几个规定字符,用来确定输出内容格式。 格式化字符串的格式是: %标志 输出最小宽度 .精度 长度 格式字符 标志:标志字符为 -、 +、空 格等,其意义如下 【知识模块】 C语言程序设计 4 【正确答案
18、】 C 【试题解析】 对于表达式 a %= b %= 4为复合的赋值运算,结合性自右至左,相当于先计算 b=b%4,a=a%b;结果的符号和第一个操作数的符号相同,因此 b为2, a的结果为 -1. 【知识模块】 C语言程序设计 5 【正确答案】 B 【试题解析】 输出 “%”,可以在格式控制中用 “%”表示,将输出一个 “%”,而没有 %表示格式符的开始, %d不能表示格式符,因此仅输出: a=%d,b=%d。 【知识模块】 C语言程序设计 6 【正确答案】 C 【试题解析】 scanf和 getchar函数分别从键盘上读入一个字符,因此输入 12空格 34,则变量 a中存放的为 1, b中
19、存放 2, c中存放空格, d中存放 3。 【知识模块】 C语言程序设计 7 【正确答案】 C 【试题解析】 本题主要考查 scanf函数的输入格式问题。 scanf函数的一般形式为: scanf(格式控制字符串 ,地址 1,地址 2,); 格式控制字符串是由双撇号括起来的字符串,它主要由两种类型的字符组成: 格式说明符由 “%”和格式字符组 成,如 %c, %d, %s, %f等。其作用是将输入的数据转换为指定的格式,赋给 scanf的二个参量(是地址 1)所指定的内存单元(可能一次使用多个)中。格式说明以 “%”字符为标志。 普通字符,是需要用户在输入时原样输入的字符。 在本题中格式控制字
20、符串为 “%d, %d, %d”,表示按十进制输 【知识模块】 C语言程序设计 8 【正确答案】 C 【知识模块】 C语言程序设计 9 【正确答案】 B 【试题解析】 在输入函数 scanf的输入格式符 %2d%f中, 2d表示输入的数据的宽度为 2,所以当 从键盘输入 876543.0 CR时,这时把输入数字串的前两位 87赋给变量 a,然后将紧接着将 6按照格式控制符 %f的形式赋给变量 b,所以 b的值为 6.000000。 【知识模块】 C语言程序设计 10 【正确答案】 C 【试题解析】 在采用 scanf这个函数输入数据时,要严格遵守其输入的规则定义。本题此函数定义的规则是,在两个
21、整数之间加分号输入。 【知识模块】 C语言程序设计 11 【正确答案】 B 【试题解析】 scanf函数进行输入的时候,默认的输入间隔为空格、跳格和回车,变 量 a、 b和 c均为数值型数据,输入时间隔为空格,因此 scanf函数的第一个表示格式的参数之间不用加入分隔符,而要输入 double型数据,格式控制必须用 %lf(或 %le)。否则,数据不能正确输入。 【知识模块】 C语言程序设计 12 【正确答案】 C 【试题解析】 输入格式 scanf(格式控制 ,输入项 1,输入项 2,) ,其中在 scanf函数的格式字符前可以加入一个正整数指定输入数据所占的宽度,但不可以用实数指定小数位的
22、宽度。输入 double型数据,格式控制必须用 %lf(或 %le)。否则,数据不能 正确输入。由于输入是一个字符流, scanf函数从这个字符流中按照格式控制指定的格式解析出相应数据,送到指定地址的变量中。 【知识模块】 C语言程序设计 13 【正确答案】 A 【试题解析】 当使用 scanf函数从键盘输入数据时,每行数据在未按下回车键之前,可以任意修改。但按下回车键后, scanf函数即接受了这一行数据,不能再修改。选项 A正确,对于选项 B, 还可以表明复合语句的开头结尾,或者循环体的开头结尾等,选项 B错误,而空语句为 ;,不是空行,选项 C错误,在复合语句中可以定义变量为局部变 量,
23、选项 D错误。 【知识模块】 C语言程序设计 14 【正确答案】 A 【试题解析】 scanf函数中的格式控制字符串是为了输入数据用的,无论其中有什么字符,也不会输出到屏幕上,因此若想在屏幕上输出提示信息,应该首先使用 printf函数输出,选项 A正确;在使用 scanf函数输入整数或实数时,输入数据之间可以用空格、跳格、回车来分隔,选项 B错误; printf输出项不但可以为变量,还可以表达式或者常量,选项 C错误;如果要输出 “%”,可以在格式控制中用 “%”表示,将输出一个 “%”,选项 D错误。 【知识模块】 C语言程序设计 15 【正确答案】 A 【试题解析】 输入函数的调用格式:
24、 scanf(格式控制 ,输入项 1,输入项 2,) 格式控制的主要作用是指定输入时的数据转换格式,格式串中,必须含有与输入项一一对应的格式转换说明符选项 A正确,在 scanf函数的格式字符前可以加入一个正整数指定输入数据所占的宽度,但不可以用实数指定小数位的宽度,选项B)错误, scanf函数中的格式控制字符串是为了输入数据用的,无论其中有什么字符,也不会输出到屏幕上,因此若想在屏幕上输出提示信息,应该首先使用printf函数输出,选项 C错误,复合语句还可以是空语句呢,并没有规定语句条数,选 【知识模块】 C语言程序设计 16 【正确答案】 C 【试题解析】 本题考查 scanf语句。
25、scanf()函数是格式化输入函数 , 它从标准输入设备(键盘)读取输入的信息。 其调用格式为: scanf(“格式化字符串 “, 地址表 ) 格式化字符串包括以下 3类不同的字符 ; 格式化说明符:格式化说明符与前面用的 printf()函数中的格式说明符基本相同。 空白字符:空白字符会使 scanf()函数在读操作中略 去输入中的一个或多个空白字符。 非空白字符:一个非空白字符会使 scanf()函数在读入时剔除掉与这个非空白字符相同的字符。 由于在 scanf函数中,几个变量之间没有 【知识模块】 C语言程序设计 17 【正确答案】 C 【试题解析】 当用 scanf函数从键盘输入数据时
26、,每行数据的未尾按下回车键( Enter键)之前,可以任意修改。但按下回车键 putchar(c1) ( Enter键)之后,scanf函数即接受了这一行数据,不能再回去修改。所以本题中,当输入 123 CR时,变量 c1、 c2、 c3的值分别为 1、 2、 3,当输入 45678 CR时,变量 c5、c6的值 4和 5。所以用输出函数 putchar(c1)输出 1, putchar(c2)输出 2,printf(“%c%cn“,c5,c6)输出 45。 【知识模块】 C语言程序设计 18 【正确答案】 C 【试题解析】 本题考查 scanf语句。 scanf()函数的一般格式为: sca
27、nf(“格式字符串 “,输入项首地址表 ),对于 double类型数据,输入时候要加上 l修饰,否则会产生错误的输入信息,同时输入项必须是地址,可以使保存变量地址的指 针变量。 【知识模块】 C语言程序设计 19 【正确答案】 A 【试题解析】 选项 B没有对指针进行初始化,无效指针。选项 C错在没有对指针进行初始化,无效指针,并且在 scanf(“%d“, 的左端 *p是指针所指内存空间的值, 定义了三个整型变量 a,b,c,和一个整型指针变量 p,并且把变量 c的地址 赋给 p。 scanf 函数的一般形式为 “scanf( “格式控制字符串 ”,地址列表) ”,其中的地址列表应当是存放输
28、入数据变量的地址。 【知识模块】 C语言程序设计 21 【正确答案】 C 【试题解析】 因为在输入格式控制符中指定变量 j的输入格式控制符为 “%2d”,即变量 j所占的宽度为 2,所以变量 j只接收输入数据的前两位,从第三位开始直到空格之间的输入整数都会被保存到变量 y中,因为 y为浮点型数据,所以输出结果为选项 C。 【知识模块】 C语言程序设计 22 【正确答案】 D 【试题解 析】 在题目中以字符串的形式给字符数组赋值,所以字符数组 name的值为 Lili。 【知识模块】 C语言程序设计 23 【正确答案】 D 【试题解析】 if语句的格式为: if(表达式 ) 语句 1 else
29、语句 2 if 和 else是 C语言的关键字。 “语句 1“称为 if子句, “语句 2“称为 else子句,这些子句只允许为一条语句,若需要多条语句时,则应该使用复合语句。因此题目if(a=1) b=1;c=2; else d=3;if分支有两条语句,没构成复合语句。 【知识模块】 C语言程序设计 24 【正确答案】 B 【试题解析】 x=1, if和 else if的条件都不满足,故 y值不改变输出。 【知识模块】 C语言程序设计 25 【正确答案】 C 【试题解析】 在 if()语句的括号是一个合法的 C语言表达式即可,如果表达式的值为 0,则不执行 if语句,否则执行 if语句,而在
30、选项 C中,符号不是 C语言的合法运算符,如果要表达 a大于或小于 b+c可用 a! =b+c或 (a b+c)|(a b+c)来表达,而不能使用 a b+c。所以它不是一个合法的 C语言表达式。 【知识模块】 C语言程序设计 26 【正确答案】 C 【试题解析】 本题的程序段首先定义三个整型变量 a,b,c,并且其初始值分别等于 10,50,30,然后判断 a b是否成立,如果条件成立,则把 b的值赋给 a,把 c的值赋给 b。由 a和 b的初始值可知,此条件表达式不成立,所以 a和 b的值保持不变。再执行下一条语句,把 a的值赋给 c,所以 c的当前值等于 10,最后由输出语句输出变量 a
31、,b,c的当前值,分别为 10,50,10。 【知识模块】 C语言程序设计 27 【正确答案】 A 【试题解析】 在 C语言中,用分号表示一条语句的结束,用 把几条语句放在一块表示一个语句块,其整体表示一个功能。因而在题目给出的四个选项中,选项B、 C、 D表示的功能相同,而选项 A表示的是一条 if语句,两条赋值语句。 【知识模块】 C语言程序设计 28 【正确答案】 C 【试题解析】 在 if语句中,表达式可以是任意合法的数值。当其值为非零时,执行 if语句,为 0时执行 else 语句。 【知识模块】 C语言程序设计 29 【正确答案】 D 【试题解析】 嵌套的 if else 语句的含义是,在变量 a的值小于变量 b的值,同时,变量 a的值小于变量 c的值时,把变量 a的值赋给变量 k。在变量 a的值小于变量 b的值,同时,变量 a的值大于等于变量 c的值时,把变量 c的值赋给变量k。在变量 a的值大于等于变量 b的值,同时,变量 b的值小于变量 c的值时,把变量 b的值赋给变量 k。在变量 a的值大于等于变量 b的值,同时,变量 b的值大于等于变量 c的值时,把变量 c的值赋给变量 k。 【知识模块】 C语言程序设计