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

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: C语言--每日五道选择题--Day9

第一题

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

1. char c[5]={'a', 'b', '\0', 'c', '\0'};
2. 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:

1. #define size 10
2. 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值表:

第五题

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]......



de064d14c8a04c4b89e334de17e60e1a.png


所以我们来看选项:


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]

相关文章
|
6月前
|
编译器 C语言 C++
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题(下)
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题
52 2
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题(下)
|
6月前
|
算法 C语言 C++
从C语言到C++_14(vector的常用函数+相关选择题和OJ题)(中)
从C语言到C++_14(vector的常用函数+相关选择题和OJ题)
154 1
|
6月前
|
算法 编译器 C语言
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题(上)
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题
44 3
|
6月前
|
编译器 C语言 C++
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题(中)
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题
42 1
|
6月前
|
存储 编译器 C语言
从C语言到C++_22(继承)多继承与菱形继承+笔试选择题(下)
从C语言到C++_22(继承)多继承与菱形继承+笔试选择题
46 0
|
6月前
|
Java 编译器 定位技术
从C语言到C++_22(继承)多继承与菱形继承+笔试选择题(中)
从C语言到C++_22(继承)多继承与菱形继承+笔试选择题
45 0
|
6月前
|
安全 程序员 C语言
从C语言到C++_22(继承)多继承与菱形继承+笔试选择题(上)
从C语言到C++_22(继承)多继承与菱形继承+笔试选择题
48 0
|
6月前
|
存储 算法 C语言
从C语言到C++_14(vector的常用函数+相关选择题和OJ题)(下)
从C语言到C++_14(vector的常用函数+相关选择题和OJ题)
42 0
|
6月前
|
存储 C语言 C++
从C语言到C++_14(vector的常用函数+相关选择题和OJ题)(上)
从C语言到C++_14(vector的常用函数+相关选择题和OJ题)
35 0
|
6月前
|
C语言 C++
从C语言到C++⑧(第二章_类和对象_下篇_续)笔试选择题和OJ题
从C语言到C++⑧(第二章_类和对象_下篇_续)笔试选择题和OJ题
37 0