C语言--每日五道选择题--Day9

第一题

1、如下程序的运行结果是( )

char c[5]={'a', 'b', '\0', 'c', '\0'};
printf("%s", c);

A: 'a' 'b' 

B: ab\0c\0 

C: ab c 

D: ab

答案及解析 D

        首先这是一个字符数组,我们要知道无论是字符串还是字符数组,它们遇到ASCII值为0就会停止打印,而‘\0’的ASCII值为0。

        然后我们以%s的格式打印这个字符数组,首先是依次输出这个字符数组的内容的,其次就是不会将里面的内容分开,最后遇到\0停止打印,故选D。

第二题

2、若有定义: int a[2][3]; ,以下选项中对 a 数组元素正确引用的是( )

A: a[2][0] 

B: a[2][3] 

C: a[0][3] 

D: a[1>2][1]

答案及解析 D

我们要明确,引用数组和定义数组的' [ ] '的这个符号的意义是不一样的;

在定义一个数组的时候,a[n] 这里是表示a数组有n个元素;

而在引用数组的时候a[1] 的1是表示数组的下标,并且数组下标从0开始,数组最后一个元素的下标是n-1;

我们知道这些之后就看选项吧!

A,B,C明显的数组越界,因为下标是2,还有3了

D :数组下标可以用表达式的,a[1 > 2] [1] 可以看作 a[0] [1] 。1 > 2是假为0;

第三题

3、在下面的字符数组定义中,哪一个有语法错误( )

A: char a[20]="abcdefg"; 

B: char a[]="x+y=5."; 

C: char a[15]; 

D: char a[10]='5';

答案及解析 D

本题考查的是数组的定义和初始化;

A:正确,字符数组可以这样定义,这是字符串的写法,“abcdefg”末尾默认有个\0,作为字符串的终点;

B:正确,虽然字符数组没有指定元素个数,但是后面初始化了,所以元素个数就是初始化的字符串的元素个数;

C:正确,定义一个未初始化的字符数组;

D:错误,字符数组的初始化,不可以是单个字符;

第四题

4、下列定义数组的语句中正确的是( )【多选】

A:

#define size 10
char str1[size], str2[size+2];

B: char str[]; 

C: int num['10']; 

D: int n=5; int a[n][n+2];

答案及解析 A C

本题仍然考察数组的定义;

A:正确,可以使用宏来作为数组的个数,也可以使用表达式;

B:错误,不初始化数组,必须定义数组个数;

C:正确,定义一个整型数组,数组个数为‘10’,我们要记住,每个字符都有对应的ASCII值,所以也可以使用单个字符来定义数组个数

D:在C99中支持了用变量来定义数组个数,但是在这里不做参考,你知道可以就行

ASCII值表:

C语言--每日五道选择题--Day9_第1张图片

第五题

5、已知 i,j 都是整型变量,下列表达式中,与下标引用 X[ i ] [ j ] 不等效的是【多选】

A: *(X[ i ]+j) 

B: *(X+i)[ j ] 

C: *(X+i+j) 

D: *(*(X+i)+j)

答案及解析 B C

这里考察的是指针的解引用和数组之间的关系

先知道这一个概念:

我们的二维数组,其实是一维数组的数组,有如下图解:

当我们真正弄懂这个概念,我们做这类题目才会快;

我们来看,一个二维数组,有三行三列,其实就是三个包含了三个元素的一维数组的数组

arr[0]是一个一维数组,我们要访问arr[0]的数组元素的时候,不就是在访问arr这个二维数组第一行的元素吗?

访问arr[0]的第一个元素,就是在访问arr这个数组的第一行第一列的元素: arr[0][0];

那我们把思维放在arr[0]是一维数组的身上,访问这个数组的第一个元素就是:arr[0][0]

我们就可以发现,arr[0]其实就相当于一维数组的数组名,要访问第一行的元素就是在数组名后面加下标引用操作符;a[0][0];a[1][0]......

C语言--每日五道选择题--Day9_第2张图片

所以我们来看选项:

A:*(x[i] + j),这里的x[i]相当于的是二维数组第i行的地址+j就相当于找第i行的第j个元素的地址,再解引用就找到了x[i][j]

B:这里要注意的是操作符优先级的问题,下标引用操作符是的优先级是高于解引用的,相当于的是**((X + i) + j),数组名相当于第一行的地址,➕了i+j个,跳过了i+j行,越界了;

C:在二维数组中,数组的元素名代表的是数组第一行的地址,所以对数组的首元素相加减,跳的位置是一个行的距离,很明显,这里是X+i+j,跳过了i+j行,越界了;

D:先找到i行,解引用,再找到j个元素,解引用;得到了x[i][j]

你可能感兴趣的:(C语言选择题,c语言,java,算法)