C语言错题集锦(包括解析)(暂时共26题)

C语言数组错题集锦(包括解析)

填空题:

第1题1-5
对于已正确定义的二维数组a, *(a[i]+j)与a[i][j]的含义相同。 (2分)

答案:T

解析:对于二维数组a来说,a[i]相当与i行0列的地址,即a[i]=&a[i][0],所以a[i]+j=&a[i][j],即*&a[i][j]=a[i][j]。

第2题1-7
数组名就是一个指针常量,指向数组的首元素(或者说代表了数组的首地址)。 (2分)

答案:F

解析:数组名不是一个指针常量。

指针常量——指针类型的常量(int *const p):本质上一个常量,指针用来说明常量的类型,表示该常量是一个指针类型的常量。在指针常量中,指针自身的值是一个常量,不可改变,始终指向同一个地址。在定义的同时必须初始化。

扩展:常量指针——指向“常量”的指针(const int *p, int const *p):常量指针本质上是一个指针,常量表示指针指向的内容,说明该指针指向一个“常量”。在常量指针中,指针指向的内容是不可改变的,指针看起来好像指向了一个常量。

第3题1-10
假设有定义如下: int array[10]; 则该语句定义了一个数组array。其中array的类型是整型指针(即: int *)。 (2分)

答案: F

解析:array的类型不是指针而是数组名。

第4题1-12
一维数组定义的一般形式如下,其中的类型名指定数组变量的类型。

类型名 数组名[数组长度];

答案:F

解析:暂时不知道。

选择题:

第5题2-7
假设scanf语句执行时输入ABCDE<回车>,能使puts(s)语句正确输出ABCDE字符串的程序段是__。

A.char s[5]={“ABCDE”}; puts(s);
B.char s[5]={‘A’, ‘B’, ‘C’, ‘D’, ‘E’}; puts(s);
C.char *s; scanf("%s", s); puts(s);
D.char *s; s=“ABCDE”; puts(s);

答案:D

解析:
gets是字符串输出函数,只能输出字符串,所以排除B选项。
A:字符串s定义内存不足,出现乱码,正确的定义为:char s[6]={“ABCDE”};。
C:scanf函数不能用于指针变量的赋值,故C选项错误。
D:D选项为字符串,且符合题意,故选D。

第6题2-14
*二维数组(1-1)
下面的程序段将输出 ▁▁▁▁▁ 。
double a[4][5];
printf("%d\n", sizeof(a));

A.12
B.20
C.96
D.160

答案:D

解析:458=160,4*5为a数组所占空间,而double类型为8个字节,所以a数组所用字节为160字节,故选D选项。

第7题2-17
假定char类型变量占用1个字节,且数组定义如下,则数组tab_str在内存中所占字节数是( )。 (1分)
char tab_str [10][81];

A.810
B.10
C.81
D.0

答案:A

解析:同2-14。

多选题:

第8题3-2
在以下描述中,( )是正确的。 (1分)

A.int a[5] = {1, 2, 3, 4, 5};
定义了数组a,并对数组元素赋初值。此时,a[0]为1,a[1]为2,a[2]为3,a[3]为4,a[4]为5。

B.static int b[10];
定义了静态数组b,且10个数组元素的初值都为0。

C.int fib[45] = {1, 1};
定义了数组fib,并对数组 fib 的前2个元素赋初值,其余元素的值都为0。

D.static int week[7] = {1, 2, 3};
定义了静态数组week,并对数组 week 的前3个元素week[0]~week[2]赋初值,week[3]~week[6]值都是不确定的。

答案:AB

解析:
A:略
B:用static定义,如果不赋初值,系统会自动赋初值为0。
C:定义了数组fib,并对数组 fib 的前2个元素赋初值为1&#x

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值