admin 管理员组

文章数量: 1086019


2024年4月21日发(作者:spring cloud nacos配置中心)

习题3 参考答案

一、选择题

3.1 C 分析:本题考查程序和数组的基本概念。

3.2 A 分析:字符串比较大小是以第1个不相同字符的大小为标准的,跟长度没有关系,B选项不正确;

字符串比较大小除了使用库函数strcn3()以外,就只能靠自己写代码来实现了,而不能通过关系运算符来比

较大小。因为字符串在表达式中相当于const char*,即常字符指针,代表的是字符串的首地址,关系运算符

会将两个字符串的首地址值比较大小,这是毫无意义的。C选项不正确。C语言中只有字符串常量而没有字

符串变量,D选项描述不正确;空串的长度为0,而以空格打头的字符串的长度至少为1,因此A选项是正确。

3.3 A 分析:如果第一维的长度没有指定,则定义的同时需要完成初始化,否则不知道分配多大的内

存空间给它,所以选项B、C错误;二维数组a[2][3]中只有两个元素,都是一维数组,一维下标最大只能是

a[1],所以选项D错误;若完成初始化的二维数组,第一维的长度没有指定,则第一维的大小按如下规则确

定:若初值个数能被第二维大小整除,所得的商就是第一维的大小,若不能整除,则所得的商加1作为第一

维的大小,所以选项A相当于:

double a[1][3] = {6};其中a[0][0]=6,其他元素赋值0,选项A正确,答案为A。

3.4 D 分析:本题考察的知识点是:字符串常量。在C语言中,字符串常量是以双引号括起来的字符

序列。因此B选项和C选项不正确。字符序列中可包含一些转义字符,转义字符都是以""开头的。A选项中

包含了三个"",前两个()代表了一个""字符,后面一个和"""一起(")被看作一个""",所以该字符串缺少一

个结束的""",因此不正确。D选项的两个"""之间没有任何字符,代表的是一个空串,是合法的字符串常量,

因此D选项正确。

3.5 D 分析:在C语言中要对两个字符串的大小进行比较,就需要调用字符串比较函数strcmp,如果

这个函数的返回值等于0,说明两个字符串相等。因此D选项正确。

3.6 A 分析:两个字符串进行比较时,按照字符串中相同位置的字符ASCII码顺序进行比较,选项B

错误;字符串需要包含串尾的结束标志,但是计算字符串长度时,不包含串尾的结束标志,选项C错误;

要将字符串s2连接到s1后面,串s1所在存储空间必须可以存储字符串s1、字符串s2连接后构成新串的字符,

选项D错误。答案选A.

3.7 C 分析:scanf ( )语句中用"空格"间隔不同的字符串,空格将被全部忽略掉,所以用scanf()函数

不能输入空格;getchar()函数用于输入字符,其调用格式为:ch=getchar(),getchar()函数从终端读入一

个字符作为函数值,把读入的字符赋给变量ch。在输入时,空格、回车符都将作为字符读入,而且只有在

用户敲入回车键时,读入才开始执行。gets()函数的调用形式为:gets(str_adr),其中str_adr是存放输入字符

串的起始地址,可以是字符数组名、字符数组元素的地址或字符指针变量。gets函数用来从终端键盘读入字

符串(包括空格符),直到读入一个换行符为止。getc()函数的调用形式为:ch=getc(pf)其中pf是文件指针,

函数的功能是从pf指定的文件中读入一个字符,并把它作为函数值返回。因此C选项正确。

3.8 D 分析:本题考查字符数组与字符串常量的区别。

3.9 D 分析:本题考查二维数组的定义及其数组元素下标范围。下标1和下标2取值范围分别在0到

行长度减1和0到列长度减1之间。

3.10 C 分析:本题考查二维数组定义及其初始化。要赋值的个数行与列都只可以少,不能多。

3.11 A 分析:数组说明的一般形式为:类型说明符 数组名 [常量表达式]。B)中N是变量,不能用

变量定义数组长度。C)选项中数组长度是非法的一串数字。定义数组时必须为其指明长度,D)选项中数组

长度为空,所以非法。

3.12 A 分析:考查strlen()函数,字符串的长度是指字符串中有效字符的个数,不包含字符串结束符

'0'。当一个字符数组中包含多个'0'时,strlen的值为第一个'0'前的字符个数。

3.13 C 分析:scanf("%s",s);字符串不能整体输入,字符串数组一般采取循环输入,因此选择C错误。

getchar()每一次读入一个字符,gets()一次读入多个字符,因此A,B,D正确。答案为C选项。

3.14 C 分析:考查sizeof与strlen的区别。sizeof(s)是测试系统为数组s分配的字节数,当在定义数

组时给出的数组长度就已经决定了系统为其分配的内存大小(20)。而strlen的值为字符串的实际字符个数

(10)。

3.15 C 分析:考查sizeof与strlen的区别。

3.16 B 分析:C语言中,字符串是用一对双引号括起来的字符序列,并用字符型数组来存放,故C选

项和D选项不属于字符串,A选项定义的是一个字符变量str,却用来存放字符串,显然也不正确,因此B选

项正确。

3.17 B 分析:一维数组的定义方式为:类型说明符 数组名 [常量表达式];注意定义数组时,元素个

数不能是变量。因此应该选B选项。

3.18 B 分析:分析程序可以发现,内层for循环每次只执行一次:即当j = i时。所以可以使用i替换j,

去掉for循环,对应外层for循环的i,执行t+=b[i][b[i][i]],所以当i取值0、1、2时,t的值累加b[0][b[0][0]]、

b[1][b[1][1]]、b[2][b[2][2]],即b[0][0]、b[1][1]、b[2][2],对应的值为:0、1、2,t取值为4(t初始值为1)。

答案选B。

3.19 A 分析:本题程序需要输出二维数组a中第二行的各个元素值,即a[1]这个一维数组的元素值。

分析程序可知只有在两种情况下才会对a[1]中的元素赋值:1、外层for循环中i=0时,内层第二个for循环的k

取值为1,此时a[k][i]=a[1][0]=1,a[k][N-i-1]=a[1][3]=1;2、外层for循环中i=1时,内层第一个for循环的j取

值为1、2,a[i][j]=a[1][j]=2,即a[1][1]=2,a[1][2]=2;除了这两种情况,其他情况不会修改a[1]中的值,所

以最终a[1]各个元素的值为:1、2、2、1;答案选A。

3.20 A 分析:首先main函数初始化一个字符数组a,a的内容为字符串"How are you!"(包括结尾的'0'),

所以for循环开始于字符串的首个字符,结束于空字符'0',换句话说,for循环遍历字符数组a,将字符数组a

的每个非空格字符重新赋值给自身,并在循环结束时加上空字符'0',所以整个程序是将字符数组a中的空格

字符去除,输出结果为:"Howareyou!",答案为A。

3.21 A 分析:程序首先初始化二维字符数组ss,包含三个字符串,如下表(1)所示:

ss[0]

ss[1]

ss[2]

0

a

b

c

1

a

b

c

2

a

b

c

表(1)

接着第一个do...while()循环分别对元素ss[0][1]、ss[1][2]、ss[2][3]赋值为0,由于'0'的ASCII码为0,所

以第一个循环结束后,ss如下表(2)所示:

ss[0]

ss[1]

ss[2]

0

a

b

c

1

0

b

c

此时i的值为3,最后第二个do...while()循环将ss元素按下标i从2到0使用puts函数输出,输出为:ccc、bb、

a,答案为A。

3.22 A 分析:for循环的作用就是每次遇到空格,将空格后面的移动到数组的最前面。因此数组最后

的状态时Beijing!0g!0ng!neijing!0;但是printf("%s")打印遇到0自动结束。因此,打印Beijing!。故答案为A

选项

3.23 A 分析:该题中t[][3]={9,8,7,6,5,4,3,2,1};实际上就是t[3][3]= {{9,8,7},{6,5,4},{3,2,1}};,通过for

循环语句,确定需要输出t[2][0],t[1][1]和t[0][2],即输出3、5、7。 因此A选项正确。

3.24 B 分析:在for(i=0;i<12;i++) c[s[i]]++中,数组元素s[i]的值作为数组c的下标,当退出循环

2

a

0

c

表(2)

3

a

b

0

4

0

0

0

3

a

b

c

4

0

0

0


本文标签: 字符 字符串 数组 选项 循环