1、试题
程序设计入门—C 语言
期中测评less
试题下载地址:测试
http://nos.netease.com/edu-lesson-pdfsrc/217E194E46A6595A3F55438033749061-1519633077802?Signature=Anos05NiH%2B7uB0aMTm87OqfWlOz38TBUVYhQnBfoNtY%3D&Expires=1535260083&NOSAccessKeyId=7ba71f968e4340f1ab476ecb300190fa&download=%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%85%A5%E9%97%A8-C%E8%AF%AD%E8%A8%80-week4%E6%9C%9F%E4%B8%AD%E6%B5%8B%E8%AF%84.pdf
1 在代码:
while ( !e )
中,!e 等价于:
A.e ==0 B. e != 1 C. e!=0 D. e == 1
2. 如下代码片断的输出是:
int j=4;
for ( int i=j; i<=2*j; i++ ) {
switch ( i/j ) {
case 0:
case 1: printf(“*”); break;
case 2: printf(“#”);
}
}
A.****## B. ***# C. *# D. ****# E. ****
3. 下列可用于 C 语言程序标识符的一组是(名字间以逗号分隔):(多选)
A.For, _abc, IF B. _if, _123, file C. void, d, WORD
D. For, -abc, IF E. 2_a, xyz, b1_s
4. 对于如下代码:
int i,j=6;
如下哪句话是对的?
A.i 和 j 的初始值都是 6 B. i 被初始为 0,而 j 是 6
C. i 不会被初始化,而 j 是 6 D. 不能经过编译
5. 对于如下代码:
int i;
scanf("%d", &i);
i %= 4
执行后,i 会有几种可能性?
A.7 B. 4 C. 3 D. 2 E.1 F.0
6. 对于如下代码:
int i=6;
if ( i<= 6 )
printf("hello\n");;
else
printf("bye-bye\n");;
哪句话是对的?(多选)
A. 打印出"hello" B. 没法编译 C. 打印出"bye-bye"
D. 不能经过编译 E. 打印出"hello bye-bye"
7. 对于如下代码:
int i=6;
do {
printf("%d", i--);
} while (0);
哪句话是对的?
A. 打印出 5 B. 由于 while(0),没法编译
C. 打印出 6 D. 打印不出东西
8. 对于如下代码:
int i;
for ( i=0; i<10;i++)
printf("%d", i);
for 循环后,i 的值是多少?
A.11 B. 9 C. 10 D. 不肯定
9. 下列程序段输出结果为:
int x=1, y=12;
printf(“%d”,y*x++);
A.20 B. 10
C. 24 D. 12
10. 对
for(表达式 1;;表达式 3)
可理解为
A. for(表达式 1;表达式 1;表达式 3) B. for(表达式 1;1;表达式 3)
C. for(表达式 1; 表达式 3;表达式 3) D. for(表达式 1;0;表达式 3)
11. 如下表达式
x&&1
用在 if 的条件中时,和哪一个是等价的(多选)
A.x==0 B. x==1 C. x!=0 D. x!=1 E. x.net
2、分析及答案
程序设计入门—C 语言
期中测评
1 在代码:
while ( !e )
中,!e 等价于:
A.e ==0 B. e != 1 C. e!=0 D. e == 1
* 只有当e的逻辑为false时这个表达式才成立,!false=true
* 而对于整数e而言,任何非0的整数值都是逻辑的true,换句话说只有整数0才表明逻辑false,所以!e换一个写法既是e == 0
所以选 A
2. 如下代码片断的输出是:
int j=4;
for ( int i=j; i<=2*j; i++ ) {
switch ( i/j ) {
case 0:
case 1: printf(“*”); break;
case 2: printf(“#”);
}
}
A.****## B. ***# C. *# D. ****# E. ****
表格模拟:
j i 循环条件 i/j 输出
4 4 4<=8 1 *
4 5 5<=8 1 *
4 6 6<=8 1 *
4 7 7<=8 1 *
4 8 8<=8 2 #
4 9 9<=8 break break
****#
所以选D
3. 下列可用于 C 语言程序标识符的一组是(名字间以逗号分隔):(多选)
A.For, _abc, IF B. _if, _123, file C. void, d, WORD
D. For, -abc, IF E. 2_a, xyz, b1_s
知识点:
* c语言是大小写敏感的语言
* 标识符以字母或下划线开头,有数字字母下划线构成
* 不能使用c语言关键字(保留字)
A 符合
B 符合,file不是c语言的关键字
C 不能有关键词(保留字)void
D -abc "-"减号不能出如今标识符中
E 2_a 不能以数字开头
所以选 A B
4. 对于如下代码:
int i,j=6;
如下哪句话是对的?
A.i 和 j 的初始值都是 6 B. i 被初始为 0,而 j 是 6
C. i 不会被初始化,而 j 是 6 D. 不能经过编译
这个语句作了两件事情:
1. 声明了变量i,和j
2. 对j赋初始值6
所以选C
5. 对于如下代码:
int i;
scanf("%d", &i);
i %= 4
执行后,i 会有几种可能性?
A.7 B. 4 C. 3 D. 2 E.1 F.0
用户输入一个整数i,而后i对于4作取余运算。
这里i多是正整数0或负整数
对于取余4而言,取余的结果多是 0、一、二、三、-一、-二、-3
题目问的是有几种可能,那么一共是7种
所以选:A
6. 对于如下代码:
int i=6;
if ( i<= 6 )
printf("hello\n");;
else
printf("bye-bye\n");;
哪句话是对的?(多选)
A. 打印出"hello" B. 没法编译 C. 打印出"bye-bye"
D. 不能经过编译 E. 打印出"hello bye-bye"
* 在没有大括号的状况下这里if后面多出来的分号会致使if和else没法联接,多个分号表明一个空的语句,if在没有大括号的状况下只会和if后面第一条语句结合造成一个if判断分支,若是加赛一条语句,if就是一个独立的判断了,因此不能和后面的else联接上了。
* 咱们建议在全部的if分支的后面都加上大括号
所以选 B D
7. 对于如下代码:
int i=6;
do {
printf("%d", i--);
} while (0);
哪句话是对的?
A. 打印出 5 B. 由于 while(0),没法编译
C. 打印出 6 D. 打印不出东西
* do-while循环至少会执行一次
* i--是i减之前的值,先计算后减,而--i是i减之后的值,先减后运算。
* 0彻底等价于逻辑false,可是整数1只是逻辑true的一个子集,任何非零整数都为逻辑true
i的初始值为6,第一次打印为6,i--是减之前的值所以为6,printf执行完后i为5,while条件0始终为false所以循环体只会执行一次。
所以选 C
8. 对于如下代码:
int i;
for ( i=0; i<10;i++)
printf("%d", i);
for 循环后,i 的值是多少?
A.11 B. 9 C. 10 D. 不肯定
咱们知道当i < 10 不成立时循环才会终止,也就是说i>=10 那么步进1的状况下i的临界值就是10
所以选 C
9. 下列程序段输出结果为:
int x=1, y=12;
printf(“%d”,y*x++);
A.20 B. 10
C. 24 D. 12
咱们知道++、--的优先级要低于四则运算的,而且这是一个后置的自增,++i是加1之前的值,先参与运算在作自增。
1*12 输出12 ,而后x自增一,x=2,y不变,固然咱们并不推荐这样的写法,不利于阅读,正确的写法能够把x++拆分到下一个语句执行:
printf(“%d”,y*x);
x++;
所以选D
10. 对
for(表达式 1;;表达式 3)
可理解为
A. for(表达式 1;表达式 1;表达式 3) B. for(表达式 1;1;表达式 3)
C. for(表达式 1; 表达式 3;表达式 3) D. for(表达式 1;0;表达式 3)
这个循环的条件判断被省略掉了,只有初始化和步进的语句,所以也能够当作是一个终止条件始终为1的循环。
也能够用for改写为:for(表达式 1;1;表达式 3); 或 while改写 表达式 1; while(1){表达式 3}; 固然这个循环若是循环体内部没有break等跳出循环结构的语句的话就是一个死循环。若是有明确的终止条件,咱们仍是推荐将循环继续条件写在循环体规定的地方,便于阅读。
所以此题选B
11. 如下表达式
x&&1
用在 if 的条件中时,和哪一个是等价的(多选)
A.x==0 B. x==1 C. x!=0 D. x!=1 E. x
这里x&&1右边的1始终成立,所以能够当作 x
当x的值不为0逻辑则为true,所以等价于 x != 0 或者 x
x == 1 只是逻辑true x取值范围的一个子集,所以 x == 1 不等价于 x != 0 或者 x
所以选 C E
咱们来运行下面一段代码:
```c
#include <stdio.h>
void main(int argc, char *argv[])
{
if (-1)
{
printf("-1\n");
}
if (0)
{
printf("0\n");
}
if (1)
{
printf("1\n");
}
if (2)
{
printf("2\n");
}
}
```
测试样例:
```
-1
1
2
--------------------------------
```
咱们发如今逻辑表达式的判断中, 当x取非0的任意值时,x会被转换为逻辑true。固然咱们并不推荐这种作法,好比你要判断x是否大于0,能够用if(x)来作这件事,看起来很聪明,可是并很差理解,推荐的作法是 int isPositive = x > 0; if(isPositive)