当梦拓了,想 push 我的 xdx 们学 C 语言,遂有此文(不过大家好像也没好好学 QAQ )
C语言quiz(一)
by 西门蒸馍
考点
- hello world
- 变量命名
- 赋值运算
- 整数、浮点数
- 输入输出
- 五则运算
- 自增自减运算
- 判断
- 分支语句
- 循环
题目
想要实现打印
hello world
并换行,以下C语言程序中有几处错误( )
1
2
3
4
5
6
7include <stdio。h>
int mian()
{
print("hello word/n");
return o
}A. 10处
B. 9处
C. 8处
D. 7处
答案&解析
B【解析】
include
前没有#
stdio
的文件后缀是中文句号。
- 是
main
不是mian
- 是
printf
不是print
- 是
\n
不是/n
world
错写为word
printf
结尾的分号是中文分号return
后面的是字母o
return
结尾没有加分号
以下哪些可以作为C语言的变量名 [多选]
( )
A. Beihang University
B. LinShiE
C. 237324Class
D. _BUFFER&LEN_
E. i_love_buaa
F. int
G. include
H. _
答案&解析
BEGH【解析】
- A:变量名不能有空格
- C:变量名不能以数字开头
- D:变量名里除了字母、数字、下划线意外不能有其他字符
- F、G:
int
是 C 语言的关键字,但include
不是(include
是编译预处理指令)
以下程序的运行结果是什么
( )
1
2
3
4
5
6
7
8
9
10
int main()
{
int a,b,c;
b = 237324;
a = 2023;
b = ( a = c );
printf("%d",b);
}
A. 237324
B. 2023
C. 无法确定
D. 0
答案&解析
C【解析】
- 赋值语句
a=c
本身是有值的,它的值等于c
- 但是
c
并没有初始化,编译器会依据c
在内存中的位置(学名叫“地址”)的情况赋给它一个值,这个值我们并不清楚,不一定是0
- 要记住变量在使用前一定要初始化
以下说法中正确的有[多选]
( )
A.
double
用来定义双精度浮点数,float
用来定义单精度浮点数B. 浮点数与整数共同参与加减乘除运算时,整数会被自动视为浮点数参与运算
C.
printf("%f",1.0/0.0);
可以正常运行D.
double a = 0.0;
和double a = 0;
都可以正常运行
答案&解析
ABCD【解析】
- B、D:整数在与浮点数运算时、赋值给浮点类型的变量时,都会发生强制类型转化
- C:由于浮点数表示不精确,所以进行浮点运算除以
0.0
时,会得到一个很大的浮点数,但是这并不影响它正常运行
以下输入输出的语句中符合规定的序号是
( )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19// --------------------------
(1) int a;
scanf("%d", &a);
// ---------------------------
(2) float a;
scanf("%f", a);
// ---------------------------
(3) double a;
scanf("%f", &a);
// ---------------------------
(4) int a = 0;
printf("%d", a);
// ---------------------------
(5) double a = 0.0;
printf("%lf", a);
// ---------------------------
(6) double a = 0.0;
printf("%f", a);
// ---------------------------A. (1)(4)(5)(6)
B. (1)(2)(3)(4)(5)
C. (1)(4)(5)
D. (1)(2)(3)(4)(5)(6)
答案&解析
A【解析】
- 记住使用
scanf
输入数据时要加&
,这个很重要(因为编译器不会报错) - 记住使用
printf
输出数据时不要加&
(除非你真的知道加&
后会发生什么) double
类型的数输入时是%lf
,输出时是%lf
或%f
C语言中下面各式的计算结果为
1
或者浮点结果为1.0
的是( )
A.
3 * 2 % 6
B.
3 / 2 * 4 / 6
C.
3.0/2 * 4 / 6
D.
3.0/2 * 4 % 5
答案&解析
C【解析】
A:不要下意识以为
6%6
等于1
B:整数除法会自动向下取整
D:浮点数不能进行取模运算
在
int a = 0;
的前提下,以下说法正确的是( )
A.
a = a++
可以实现让a
的值增加 1 的效果B.
a++ = a
可以实现让a
的值增加 1 的效果C.
a = --a
可以实现让a
的值减小 1 的效果D.
a = ++1
可以实现让a
的值变成 2 的效果
答案&解析
C【解析】
a++
和++a
的效果都是让a
加1
,但是a++
这个式子本身的值是a
,++a
这个式子的值是a
加完1
之后的值;a--
和--a
同理a++
实际上等效于a = a+1
(但是会快一丢丢),所以a++
这样的式子相当于一个赋值语句,不能充当左值 (左值就是赋值号左边的值),所以 选项B 会报错;同理,因为数字1
不能当左值,所以1++
会报错,D选项 主要是想让大家理解 “变量” 和 “值”
【提前了解】
C语言中可用字母e
表示浮点数的科学计数法。例如,
1e-6
表示 $1.0 \times 10^{-6}$ ;2.2e8
表示$2.2 \times 10^8$
下列说法中错误的为
( )
A.
printf("%d", ( 1==1 ));
的执行结果为 1B. 代码中出现
if( a = 1 )
的语句会报错C. 若
int a,b,c
三个变量分别代表三角形的三条边,则(a+b>c)+(a+c>b)+(b+c>a)
的值一定为 3D. 判断浮点数
a
是否等于0.0
,在代码中应写为if( fabs(a) < eps )
(解释: (1)
fabs(a)
表示a
的绝对值 (2)eps
一般被定义为一个很小的浮点数,通常为1e-6
或1e-7
)
答案&解析
B【解析】
- 这个题没什么要说的,就是提醒一下大家尽量不要犯把
==
写成=
的错误(但也难免),不过为了防止出现上面的错误而半天 de 不出来 bug ,大家可以这样写if( 1 == a )
。因为这样写如果不小心少打了个=
编译器会报错(具体原因参考上一题),不过这样会降低代码的可读性(别人看着别扭),希望大家在熟练了以后改成正常的判断写法。 - 要记住本题告诉大家的 _判断浮点数是否等于某个值_ 的方法
下列程序的运行结果为____[填空题]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int main()
{
int a = -1, b = 0, c = 1;
if( ++a != b );
printf("1");
if( b = 0 )
printf("2");
c++;
switch (c)
{
case 1:
printf("3");
break;
case 2:
printf("4");
default:
printf("5");
break;
}
return 0;
}
答案&解析
145【解析】
- 没啥要说的,重要的是看代码第
6
行的if
判断后有分号,所以第7
行一定会执行 - 还有就是记住
if
后面没有{}
的话就只能管辖到下一个分号为止(排版没排好 ,其实为了给大家挖坑,printf("1");
和c++;
是想放到和第9
行printf("2");
同一列的,就像现在这样) - 记得
break
一定要写
- 没啥要说的,重要的是看代码第
为了实现 “求出某正整数有多少位” 的程序,
while
的循环条件应该为( )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
int a;
int n = 0;
scanf("%d",&a);
while( __?__ ){
n++;
a /= 10;
}
printf("该正整数一共有%d位",n);
return 0;
}A.
a == 1
B.
a == 0
C.
a != 1
D.
a != 0
答案&解析
D【解析】
- 这个没啥,主要是想让大家练一练分析代码的能力(当然就这强度还远远不够)
大家根据自己的做题的实际情况为目前的预习做好自我评价,这些题目应当是大家不使用电脑敲代码就完全可以做出来的。不过,不管你对了几道题,都不要 气馁 or 骄傲,C 语言的学习之路才刚刚开始,查缺补漏是最关键的。现在对自己要求高一点也是为了让自己大一乃至以后的学习更加轻松。如果你看了答案解析还有不清楚的题目,欢迎来问我喵~