错题集
一、判断题
1.数组定义中,数组名后是用方括号括起来的常量表达式,不能用圆括号。
T F
评测结果:答案错误
正确答案:T
2.对于已正确定义的二维数组a, *(a[i]+j)与a[i][j]的含义相同。
T F
评测结果:答案错误
正确答案:T
【解析】两种不同的写法,本质都是取那个地址存在的值
3.在C语言中能逐个地使用下标变量,也能一次引用整个数组。
T F
评测结果:答案错误
正确答案:F
4.假设有定义如下: int array[10]; 则该语句定义了一个数组array。其中array的类型是整型指针(即: int *)。
T F
评测结果:答案错误
正确答案:F
5.一维数组定义的一般形式如下,其中的类型名指定数组变量的类型。
类型名 数组名[数组长度];
T F
评测结果:答案错误
正确答案:F
【解析】类型说明符 数组名 [常量表达式];
6.对于定义int a[5];可以通过语句scanf("%d",a);输入全部元素的值。
T F
评测结果:答案错误
正确答案:F
7.指针可以加上或减去一个int型数,也可以加上一个指针。
标准答案:N 我的答案:Y
8.两个指针在任何情况下相减都是有意义的。
标准答案:Y 您的答案:N
9.C语言的基本组成单位是语句 ( )
标准答案:N 您的答案:Y
C语言的基本组成单位是函数
10.C 语言中的变量名不区分大小写。 ( )
标准答案:N 您的答案:Y
11.C语言中,在进行混合运算时,数据类型由高级向低级转换。
标准答案:N 您的答案:Y
【分析】应该是低级向高级转化
char --> short --> int --> long --> unsigned long --> float --> double
系统这样处理会避免数据精度的丢失
12.C 语言中在字符型变量可以存放一个字符串。 ( )
标准答案:N 您的答案:Y
【分析】char类型在内存中占一个字节,只能存放一个字符,如果要存放多个,就要用字符数组或字符串。
13.C语言中,关键字及编译预处理命令用小写字母书写。
标准答案:Y 您的答案:N
14.int (*p)[4]它表示p是一个指针数组,它包含4个指针变量元素。 (1分)
T F
正确答案:F
【分析】int (*p)[4]这儿的p是一个指针变量,它指向的是含4个元素的一维数组
15.结构体成员的类型必须是基本数据类型。 (1分)
T F
正确答案:F
【分析】不是必须,也可以是自定义类型
二、选择题
1。对于定义 char str[] = “abc\000def\n”(注:其中0为数字零),求字符串str的长度len和数组str的大小size,len和size分别是:
A. 12 ,13
B. 3 ,11
C. 3 ,9
D. 3 ,4
评测结果:答案错误
正确答案:C
【解析】字符串长度是指字符串所含的字符个数,但不包括最后的’\0’,’\n’是转义字符,要包括在其中。
2.若有定义char str[]={“Python”, “SQL”, “JAVA”, “PHP”, “C++”}; 则表达式str[1] > *str[3]比较的是:
A. 字符P和字符J
B. 字符串SQL和字符串PHP
C. 字符串Python和字符串JAVA
D. 字符S和字符P
评测结果:答案错误
正确答案:D
【分析】str[1]和str[3]比较的是这两个字符串的第一个字符
3.如果变量定义如下,则正确的语句是( )。
int i, j, tab[3][4];
A. tab[0][ ] = 0;
B. tab[ ][3] = 3;
C. tab = 100;
**D.
for(i = 1; i <= 3; i++){
for(j = 1; i <= 4; j++){
scanf(“%d ”, &a[i][j];
}
}**
E.
for(i = 0; i < 3; i++){
for(j = 0; j < 4; j++){
printf("%4d", tab[i][j]);
}
printf("\n");
}
评测结果:答案错误
正确答案:E
3.若有条件表达式 (exp)?a++:b–,则以下表达式中能完全等价于表达式(exp)的是( )。
A: (exp0)
B: (exp!=0)
C: (exp1)
D: (exp!=1)
标准答案:B 我的答案:C
【分析】exp 是一个变量。这个条件表达式的意思是,如果(exp)为真,则执行a++,否则执行b–。而只要变量exp的值不为0(也就是false),(exp)都为真(true)。比如exp2或者exp-1,(exp)都为真。所以(exp)等价于(exp!=0),也就是使用 (exp!=0)?a++:b-- 程序也能达到同样的效果。所以选B。
4.请阅读以下程序:
main()
{
int a=5,b=0,c=0;
if(a=b+c) printf(“***\n”);
else printf(“$$$\n”);
}
以上程序( )。
A: 有语法错不能通过编译
B: 可以通过编译但不能通过连接
C: 输出***
D: 输出$$$
标准答案:D 我的答案:A
【解析】解答本题时,先判断if语句,因为 a=b+c不成立,则执行else语句。
5.在下面的条件语句中(其中S1和S2标识C语言语句)一个功能上与其他三个语句不等价的是()
A: if(a)S1;else S2
B: if(a0)S2;else S1
C: if(a!=0)S1;else S2
D: if(a==0)S1;else S2
标准答案:D 我的答案:C
6.设:int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>d)后n的值为( )
A: 1
B: 2
C: 3
D: 4
标准答案:B 我的答案:A
【分析】因为是&&运算,所以先看前段.m=a>b,=的优
先级小于>,a>b不成立,m=0;在&&运算中,如果
出现一边为假的情况下,结果直接为假,后面的
语句不会去运算了.
7.以下程序的输出结果是( )。
main()
{
int x