《全国计算机等级考试二级教程——C 语言程序设计》课后题及参考
答案
(教育部考试中心)高等教育出版社出版
(第一章、第二章、第三章)
第一章程序设计基本概念
1.3 结构化程序由_____、_____、_____三种基本结构组成。
答案:顺序、选择、循环
二、填空题
2.16 函数体由符号____开始,用符号____结束。函数体的前面是____部分,其后是____部分。
答案:{、}、定义、执行
第三章、顺序结构
一、选择题
3.1
3.2 以下选项中不是C 语句的是
A) {int i; i++; printf("%d\\n", i); }
B) ; C) a=5,c=10 D) { ; }
答案:C
分析:
语句必须以分号结尾。
选项A是一个复合语句,复合语句是用{}括号多条语句。
选项B是一个空语句,只有一个分号。
选项C不是语句,因为没有以分号结尾。
3.6 若变量已正确说明为float 类型,要通过以下赋值语句给a 赋予10、b 赋予22、c 赋予33,以下不正确
的输入形式是
A) 10 22 33 B) 10.0,22.0,33.0 C) 10.0 22.0 33.0 D) 10 22 33
scanf("%f %f %f", &a, &b, &c);
答案:B
分析:
使用scanf输入整数,输入的每个整数中间以空格、回车、tab作分隔,输入整数时要看scanf的格式控制符,如果格式控制符中除空格以外有其它字符要原样输入。
选项B格式不正确,因为scanf的格式控制符为"%f %f %f"并没有逗号,而输入10.0,22.0,33.0是不对的。
3.7 若变量以正确定义,要将a 和b 中的数进行交换,下面不正确的语句组是
A) a=a+b,b=a-b,a=a-b; B) t=a,a=b,b=t;
C) a=t; t=b; b=a; D) t=b; b=a; a=t;
答案:C
分析:
可以假设a和b的值分别为3、5
通过执行A、B、D中的语句发现都可以实现a和b的值交换。
选项C不能实现a、b值交换。
3.8
3.9
3.10
3.11 当运行以下程序时,在键盘上从第一列开始输入9876543210(此处代表Enter),则程序的输
出结果是
A) a=98,b=765,c=4321 B) a=10,b=432,c=8765
C) a=98,b=765.000000,c=4321.000000 D) a=98,b=765,c=4321.0
main()
{
int a; float b,c;
scanf("%2d%3f%4f",&a,&b,&c);
printf("\\na=%d,b=%f,c=%f\\n",a,b,c);
}
答案:C
分析:该题目考察对scanf格式控制符宽度的掌握。
在scanf函数格式控制符中间加一个整数用来表示匹配数据的宽度。
scanf("%2d%3f%4f",&a,&b,&c);匹配输入数据2位赋值给a,匹配输入数据3位赋值给b, 匹配输入数据4位赋值给c,本题目输入9876543210然后回车,即将98赋值给a,765赋值给b,4321赋值给c,使用
printf("\\na=%d,b=%f,c=%f\\n",a,b,c);输出a、b、c的值,a以整型输出,b和c以小数形式输出,即输出:98,765.000000,4321.000000
选项C正确。
scanf在输入多个数据是以回车、空格、tab作为分隔符,而当在格式控制符中间使用宽度时会依次配置输入数据的宽度,如果从输入数据中能够匹配到指定宽度的数据则scanf就对变量进行赋值,但是如果匹配不到则还是停留在输入状态让用户输入,例如:
输入:123回车
这时scanf先匹配两位数据12赋值给a,现在只剩下一位3赋值给b
这时再输入4 回车,将4赋值给c
例如:
输入:123456回车
将12赋值给a
将345赋值给b
将6赋值给c
大家多多练习体会一下格式控制符宽度的使用。
3.12 以下程序的输出结果是
A) a=%2,b=%5 B) a=2,b=5 C) a=%%d,b=%%d D) a=%d,b=%d
main()
{ int a=2,b=5;
printf("a=%%d,b=%%d\\n",a,b);
}
答案:D
分析:本题目考察输出%的问题。
格式控制符以%开头,如果要输出%符号则必须使用两个%号。
printf("a=%%d,b=%%d\\n",a,b);该语句输出:a=%d,b=%d,并没有输出a和b的值,可见当两个%符号一起使用时则输出%,而格式控制符不起作用。
3.13
3.14 以下程序段的输出是
A) *496 * B) * 49