C语言错题本

错题集

1.变量a所占内存字节数是( )。
union U
{char st[4];
int i;
long l;
};
struct A
{int c;
union U u;
}a;
A: 4
B: 5
C: 6
D: 8
答案:D
解析:结构件变量所占内存长度是各成员占内存长度之和,而共用体变量所占的内存长度等于最长的成员的长度。

2.执行下列语句的结果是( )。
i=3;
printf("%d,",++i);
printf("%d",i++);
A: 3,3
B: 3,4
C: 4,3
D: 4,4
答案:D
解析:++i和i++执行后都是4,只是+1和取值的顺序不同而已。
3.下面for循环语句()
main()
{
int i,k;
for(i=0,k=-1;k=1;i++,k++)
printf("**");
}
A: 判断循环结束的条件非法
B: 是无限循环
C: 只循环一次
D: 一次也不循环
答案:B
解析:因为for循环条件k=1,所以一直循环。
4.以下程序的输出结果是( )。
#define f(x) x
x
main( )
{int a=6, b=2, c;
c=f(a)/f(b);
printf("%d
", c);
}
A: 9
B: 6
C: 36
D: 18
答案:C
解析:在C语言中,c=6 * 6 / 2 / 2的运算顺序是从右至左,所以答案为36。

5.执行以下程序片段的结果是( )。
int x=23;
do
{printf("%d", x–);}
while(!x);
A: 打印出321
B: 打印出23
C: 不打印任何内容
D: 陷入死循环
答案:B
解析:do…while循环的条件!x为0,所以未循环就跳出循环。
6. 当以参数w打开文件时,若指定路径下已有同名文件,则不覆盖原有文件。()
答案:N
解析:因为已有同名文件,所以会覆盖原文件。

7.如果两个指针的类型相同,且均指向同一数组的元素,那么它们之间就可以进行加法运算。
答案:N
解析:它们可以进行减法运算,但加法运算没有意义。
8.
可以把结构体数组元素作为一个整体输出。
答案:N
解析:结构体数组元素含很多元素,所以不可以作为一个整体输出。
9.
C语言中,在对全部数组元素赋初值时,必须指定数组的长度。
答案:N
解析:在对全部数组元素赋初值时,系统会自动分配长度。

10.若有说明语句int i=5,j=4,k=6;float f;则执行f=(i A: 4.0
B: 5.0
C: 6.0
D: 7.0
答案:A
解析:该题目考察三目运算符,因为(i

11.以下数组定义中不正确的是( )。
A: int a[2][3];
B: int b[][3]={0,1,2,3};
C: int c[100][100]={0};
D: int d[3][]={{1,2},{1,2,3},{1,2,3,4}};
答案:D
解析:二维数组的列不能省略。

12.若有定义,int a[10];,则对数组a元素的正确引用是( )。
A: a[10]
B: a[3.5]
C: a(5)
D: a[10-10]
答案:D
解析:D项的元素的类型相同,指向同一个数组,所以可以相减。

13.函数可以嵌套定义,也可以嵌套调用。
答案:N
解析:函数不可以嵌套定义。

14.共用体所有成员共用的内存单元的大小为各成员需要占用内存大小之和。
答案:N
解析:共用体结构的对齐准测是:先按数据类型自身进行对齐,然后再按照整个结构体进行对齐。

15.一个数组中所有的元素可以具有不相同的数据类型。
答案:N
解析:数组是一种常用的数据结构,它是一组有序数据的集合。数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和下标来唯一地确定数组中的元素。

16.下面能正确进行字符串赋值操作的是 ( )。
A: char s[5]={“ABCDE”};
B: char s[5]={ ′A′, ′B′, ′C′, ′D′, ′E′};
C: char *s;s=“ABCDE”;
D: char *s;char a; scanf("%s",&s);
答案:C
解析:A,B的数组长度为5,但括号里的长度为6,所以不对,D的s为指针,所以不用加&。

17.已定义以下函数:
int fun(int *p){return *p;}
fun函数返回值是 ( )
A: 一个整数
B: 形参p的地址值
C: 形参p中存放的值
D: 不确定的值
答案:C
解析:return *p 中 *p是指p[0]的值 。

18.若有定义语句:int year=2014,*p=&year;,以下不能使变量year中的值增至2015的语句是( )。
A: *p+=1
B: ( *p)++;
C: ++(*p);
D: *p++;
答案:D
解析:*p++ = *(p++)。
19.设char s[10],*p=s;,以下不正确的表达式是( )。
A: p=s+5;
B: s=p+s;
C: s[2]=p[4];
D: *p=s[0];
答案:B
解析:s是数组名称(其实也是指针),是不能对其进行赋值的,也就是其值是不能改变的。

20.下面说明不正确的是( )。
A: char a[10]=“china”;
B: char a[10],*p=a;p=“china”
C: char *a;a=“china”;
D: char a[10],*p;p=a=“china”
答案:D
解析:D项中错误的关键是对数组初始化时,可以在变量定义时整体赋初值,但不能在赋值语句中整体赋值。

21.若int (*p)[5];,其中,p是_______。
A: 5个指向整型变量的指针
B: 指向5个整型变量的函数指针
C: 一个指向具有5个整型元素的一维数组的指针
D: 具有5个指针元素的一维指针数组,每个元素都只能指向整型量
答案:C
解析: *p是第0行首地址 +2 呢就是第二个元素的地址,*取数据。

22.存放地址的变量同其他变量一样,可以存放任何类型的数据。
答案:N
解析:存放地址的变量,只能用来存放地址量。

22.int *p;定义了一个指针变量p,其值是整型的。
答案:N
解析:指针作为一种类型,在不同的系统中实现是不同的, 概念上就不是整形,只是在32位系统中指针是占2个字节(同int)。

23.语句y=*p++;和y=(*p)++;是等价的。
答案:N
解析:第一个y = *p;p++。++作用于p上,第二个 *p,++作用于p指向的内容上。
24.为了避免在嵌套的条件语句 if - else 中产生二义性,C语言规定:else子句总是与( )配对。
A: 缩排位置相同的if 
B: 其之前最近的if
C: 其之后最近的if
D: 同一行上的
答案:B
解析:C语言规定:else子句总是其之前最近的if与配对。
25.设int a=0,b=5;执行表达式++a||++b,a+b后,a,b和表达式的值分别是( )。
A: 1,5,7
B: 1,6,7
C: 1,5,6
D: 0,5,7
答案:C
解析:因为当++a 时,a的值为1已是非0,所以逻辑或后面的式子不再计算,直接执行逗号后的a+b,其值就为6。

你可能感兴趣的:(c语言)