章节
第二周
1变量-小测验
1.以下哪些是有效的变量名?
A.main B.4ever C.monkey-king D.__int
正确答案:A、D 错选为C、D
解析:
- 变量名的开头必须是字母或下划线,不能是数字。实际编程中最常用的是以字母开头,而以下划线开头的变量名是系统专用的;
- 变量名中的字母是区分大小写的;
- 变量名绝对不可以是C语言关键字;
- 变量名是字母、数字、下划线的组合。
2.给定:
int a,b;
scanf(“%d %d”, &a, &b);
则以下哪些输入方式是正确的?
A.1 2 B.1,2 C.1(回车)2 D.1、2
正确答案:A、C 错选为A
第三周
1判断-小测试
1.以下语句是否可以通过编译:
if ( 1<=n<=10 );
A.√ B.×
正确答案:A 错选为B
第六周
第一次单元测验
1.下列程序段输出结果为:
int x=1, y=012;
printf(“%d”, y*x++);
A.24 B.20 C.10 D.12
正确答案:C 错选为D
解析:
012是8进制数,而x++的结果是加1以前的值
2.对于以下代码:
unsigned short sht = 0;
sht --;
执行后,sht的值是?
A.32767 B.65535 C.-1 D.65536
正确答案:B 错选为A
解析:
A、short类型在各种平台都是16位,2的16次方为65536,所以unsigned short能表达的最大的数是65535
B、short类型在各种平台都是16位,2的16次方为65536,所以unsigned short能表达的最大的数是65535
C、unsigned 不能表达负数
D、short类型在各种平台都是16位,2的16次方为65536,所以unsigned short能表达的最大的数是65535
Note:
1.char类型 1个字节-8位
2.short类型(短整型)2个字节-16位,同上述题解
3.int类型(有符号类型)4个字节-32位;
在32位的机器下,int的范围是 - 2 ^ 31 ~2 ^ 31 - 1; 也就是:[-2147483648, 2147483647];(21亿)
在16位的机器下,int的范围为 -2 ^ 15 ~ 2 ^ 15-1。也就是 :[-32768,32767]
整型变量int的范围与计算机的字长有关,int 的长度是一个计算机字长。
4.long类型 (LLP64模型)4个字节-32位
3.以下哪个直接量是十进制的124?
A.0124 B.0x124 C.124d D.0x7C
正确答案:D 错选为C
解析:
A、这是8进制,相当于10进制的84
B、这是16进制,相当于10进制的292
C、C语言没有这种后缀
D、16进制
4.下列可用于C语言程序标识符的一组是(名字间以逗号分隔):
A. 2_a, xyz, b1_s
B.void,_2a, 2a
C.void, d, WORD
D._if, _123, file
正确答案:D 错选为A
解析:
A、不能以数字开头
B、不能以数字开头
C、void是保留字
D、下划线开头后面没有字母也是可以的
5.对于以下代码:
int i;
scanf(“%d”, &i);
i %= 4;
执行后,i会有几种可能性?
A.0 B.1 C.7 D.不好说
正确答案:C 错选为D
解析:
C、0,1,2,3,-1,-2,-3
6.以下代码段的结果是:
int i=10;
long long t = sizeof(i++);
printf(“%d”, i);
正确答案:10
解析:
sizeof()是静态运算符,即编译器只关注括号内数值的类型,而不会对括号里面的参数进行计算。
7.以下代码的输出是 :
int i,x,y;
i=x=y=0;
do {
++i;
if ( i%2 )
x+=i,
i++;
y +=i++;
} while ( i<=7 );
printf(“%d %d %d”, i, x, y);
正确答案:9 1 20
解析:
注意x+=i,是以逗号结尾的。
8.对于以下代码:
int i=6;
if ( i<= 6 )
printf(“hello\n”);;
else
printf(“bye-bye\n”);;
哪句话是对的?
A.打印出"bye-bye"
B.打印出"hello bye-bye"
C.打印出"hello"
D.无法编译
正确答案:D 错选为C
9.对于以下代码:
int i=6;
do {
printf(“%d”, i–);
} while (0);
哪句话是对的?
A.打印出5
B.打印不出东西
C.因为while(0),无法编译
D.打印出6
正确答案:D
解析:
A、i–的结果是i减以前的值
B、do循环至少会执行一次
C、while(0)是合乎语法的
D、do循环至少会执行一次
10.以下代码的输出是 _____.
int x=0, y=0, z=0;
z = (x==1) && (y=2);
printf("%d ", y);
正确答案:0
解析:&&运算符当计算出前一个值(此处为“x==1”)为0时即不再做后续运算,则“y=2”无法赋值运算。
11.以下代码片段的输出是:
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. ***#
正确答案:C
Note:关于for循环表达式执行顺序
for(表达式1;表达式2;表达式3){
表达式4
}
初次进入for循环:表达式1 —>表达式2 —?—>表达式4 —>表达式3
后续进入for循环:表达式2—?—>表达式4 —>表达式3
退出for循环:表达式2×—>退出循环
第八周
1.指针 - 小测验
1.对于:
int a[] = {5, 15, 34, 54, 14, 2, 52, 72};
int *p = &a[5];
则:
p[-2]的值是?
A.编译出错,因为数组下标越界了
B.运行出错,因为数组下标越界了
C.54
D.2
正确答案:C 错选为B
2.如果:
int a[] = {0};
int *p = a;
则以下哪些表达式的结果为真?
A. p == a[0]
B. p == &a[0]
C. *p == a[0]
D. p[0] == a[0]
正确答案:B、C、D
3.以下变量定义:
int* p,q;
中,p和q都是指针。
A. √
B. ×
正确答案:B