习题3 参考答案
一、选择题
3.1  C 分析:本题考查程序和数组的基本概念。
3.2  A 分析:字符串比较大小是以第1个不相同字符的大小为标准的,跟长度没有关系,B选项不正确;字符串比较大小除了使用库函数strcn3()以外,就只能靠自己写代码来实现了,而不能通过关系运算符来比较大小。因为字符串在表达式中相当于const char*,即常字符指针,代表的是字符串的首地址,关系运算符会将两个字符串的首地址值比较大小,这是毫无意义的。C选项不正确。C语言中只有字符串常量而没有字符串变量,D选项描述不正确;空串的长度为0,而以空格打头的字符串的长度至少为1,因此A选项是正确。
3.3  A 分析:如果第一维的长度没有指定,则定义的同时需要完成初始化,否则不知道分配多大的内存空间给它,所以选项BC错误;二维数组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 ( )语句中用"空格"间隔不同的字符串,空格将被全部忽略掉,所以用sc
anf()函数不能输入空格;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)所示:
0
1
2
3
4
ss[0]
a
a
a
a
\0
ss[1]
b
b
b
b
\0
ss[2]
c
c
c
c
\0
表(1)
接着第一个do...while()循环分别对元素ss[0][1]、ss[1][2]、ss[2][3]赋值为0,由于'\0'的ASCII码为0,所以第一个循环结束后,ss如下表(2)所示:
0
1
2
字符串比较函数实现
3
4
ss[0]
a
\0
a
a
\0
ss[1]
b
b
\0
b
\0
ss[2]
c
c
c
\0
\0
表(2)
此时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的下标,当退出循环时,数组c的4个元素的值分别为4、3、3、2。因此B选项正确。
3.25  C 分析:strcpy:字符串拷贝函数;strlen:求字符串长度函数(注意:不包含字符串结束标记字符'\0');strcat:字符串连接函数。执行完语句strcat(p,r);后,p数组中存储的
元素为a,b,c,d,a,b,c,d,e ;执行语句strcpy(p+strlen(q), q); 得到的结果是将q所指向的字符串拷贝至p+strlen(q)开始的存储位置,因为strlen的值为3,即p+3开始存储q中的元素。所以执行完strcpy(p+strlen(q),q)语句后,字符数组p[20]的存储元素为a,b,c, a,b,c;所以strlen(p)的结果为6。因此C选项正确。
3.26  D 分析:首先对二维数组进行赋值操作,a[0][0]、a[0][1]、…、a[3][2]、a[3][3]的值为1、4、…、6、1。通过for语句和if语句,对二维数组各列元素进行由小到大的排序操作,程序最后通过for语句输出二维数组对角线上的元素。因此D选项正确。
3.27  B 分析:程序首先给字符数组s[ ]赋值为"012xy",for循环语句的功能是遍历字符串,通过if条件语句对字符串中的小写字母计数,在符串中小写字母为2个,即n=2。因此B选项正确。
3.28  C 分析:首先对二维数组进行赋值操作,a[0][0]、a[0][1]、…、a[3][2]、a[3][3]的值为1、4、…、6、1。通过for嵌套循环语句和if条件语句,对二维数组对角线元素进行由大到小的排序操作,程序最后通过for语句输出二维数组第1行的4个元素。因此C选项正确。
3.29  C 分析:字符数组a中包含两个'\0',遇到第一个'\0'时就表示字符串a结束。字符串处理函数strcat(字符数组a,字符数组b),功能是连接两个字符数组中的字符串,把字符串b连接到a的后面,结果放在字符数组a中。连接时将字符串a后的'\0'取消,只在新串最后保留一个'\0'。本题相当于将"ABCD"和"IJK"连接。因此C选项正确。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。