【C语言基础习题11】关于数组的习题解析

1. 不能把字符串:Hello!赋给数组 b 的语句是(  )。

A)char b[10]={'H','e','l','l','o','!'};

B)char b[10];b="Hello!";

C)char  b[10];strcpy(b,"Hello!");

D)char b[10]="Hello!";

答案:B;只能在定义的时候使用=来初始化, 不能单独赋值


2. 下面程序运行的结果是(              )。

main()
{ 
    char ch[7]={“65ab21”}; int i,s=0;
    for(i=0;ch[i]>='0' && ch[i]<='9';i+=2) 
        s=10*s+ch[i]-'0';
    printf("%d\n",s);
}

(A) 2ba56       (B) 6521     (C) 6       (D) 62

答案:C


3.     若有以下说明:

int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};

char c='a',d,g;

则数值为 4 的表达式是()。

(A)a[g-c]       (B)a[4]         (C)a['d'-'c']     (D)a['d'-c]

答案:D


4.  下列描述中不正确的是(             )。

(A) 字符型数组中可以存放字符串

(B) 可以对字符型数组进行整体输入、输出

(C) 可以对整型数组进行整体输入、输出

(D) 不能在赋值语句中通过赋值运算符"="对字符型数组进行整体赋值

答案:C;C语言规定只能逐个引用数组元素而不合下次引用整个数组。字符数组的输入、输出可以将整个字符串一次输入或输出。所以,选项C的说法是不正确的。


5. 有以下程序

main()

{

     char p[]={'a', 'b', 'c'}, q[]="abc";

     printf("%d %d\n", sizeof(p),sizeof(q));

};

程序运行后的输出结果是(       )。

(A)4 4            (B)3 3            (C)3 4              (D)4 3

答案:C;sizeof()是统计字节长度包含\0、0;而strlen()统计长度不包含\0、0


6.下列程序执行后的输出结果是 (              )。

main()
{ 
    char arr[2][4];
    strcpy(arr,"you"); 
    strcpy(arr[1],"me"); 
    arr[0][3]='&';
    printf("%s \n",arr);
}

(A)you&me   (B) you   (C) me     (D) err

答案:A


7. 当执行下面的程序时,如果输入 ABC,则输出结果是(        )。

#include "stdio.h"
#include "string.h" 
main()
{ 
    char ss[10]="1,2,3,4,5";
    gets(ss); 
    strcat(ss, "6789"); 
    printf("%s\n",ss);
}

(A) ABC6789   (B) ABC67   (C) 12345ABC6    (D) ABC456789

虽然你定义的SS数组有字符串,但是gets函数输入的ABC将原来的字符串覆盖了所以新的数组为SS[10]="ABC",接下来的stract是字符串连接函数即将字符串"6789"连接到ABC后面.所以输出的结果是ABC6789.


8.若有定义:int aa[8];,则以下表达式中不能代表数组元素 aa[1]的地址的是(       )。

(A) &aa[0]+1   (B) &aa[1]     (C) &aa[0]++   (D) aa+1

数组的地址和数组中的第一个元素的地址相同。数组中第一个元素地址的表示方法为&aa[0],与其等价的有 &aa[0]++,所以选项C不正确的;选项A为数组的第 1个元素的地址下移一位即是第二个元素aa[1]的地址;B也为数组的第二个元素的地址,选项D中aa表示数组的地址,加1表示数组首地址后移一位,即代表数组元素中的第二个元素aa[1]的地址。所以,4个选项中C为所选。


9. 有以下程序

#include "stdio.h" 
#include  
main()
{ 
    char a[]={'a','b','c','d','e','f','g','h','\0'};
    int i,j;
    i=sizeof(a); 
    j=strlen(a); 
    printf("%d,%d\n",i,j);
}

程序运行后的输出结果是(         )。

(A) 9,9  (B) 8,9  (C) 1,8    (D) 9,8

sizeof( )函数返回字符串所占字节数,strlen函数返回字符串的长度,其中'\0'是一个转义字符, 称为空值,它占用存储空间,但不计入串的长度。


10.有以下程序

main()
{ 
    char a[7]="a0\0a0\0"; 
    int i,j; 
    i=sizeof(a); 
    j=strlen(a); 
    printf("%d %d\n",i,j);
}

程序运行后的输出结果是(       )。

(A)2 2             (B)7 6          (C)7 2            (D)6 2

字符数组的元素数量在定义时已经确定,与其存储的内容无关,本题中语句char a[7]定义了由7个字符元素组成的字符数组,其sizeof(a)=7。字符数组常常存储字符串,但其存储的字符串长度与数组长度没有直接关联。C语言规定,字符串从首字符开始,以第一个值为ASCII码0的字符结尾,其中的非0字符数量就是字符串的长度。在本题中,a[0]='a',a[1]='0',a[2]=0,从首字符位置a[0]到第一个ASCII值为0的字符a[2],其中共有2个非0字符,因此strlen(a)=2。


11.以下叙述中错误的是(              )。

(A)对于 double 类型数组,不可以直接用数组名对数组进行整体输入或输出

(B)数组名代表的是数组所占存储区的首地址,其值不可改变

(C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信 息

(D)可以通过赋初值的方式确定数组元素的个数

[解析] 数组下标从0开始,当数组元素的下标超出了定义的范围时,系统不会出“下标越界”的信息,运行会出错,因此在编程时务必检查下标是否越界。


12. 以下叙述中正确的是(       )。

#include  
main()
{ 
    char p[]={'a', 'b', 'c'}, q[10]={'a', 'b', 'c'};
    printf("%d %d\n", strlen(p), strlen(q));
}

(A)在给 p 和 q 数组置初值时,系统会自动添加字符串结束符,故输出的长度都为 3

(B)由于 p 数组中没有字符串结束符,长度不能确定;但 q 数组中字符串长度为 3

(C)由于 q 数组中没有字符串结束符,长度不能确定;但 p 数组中字符串长度为 3

(D)由于 p 和 q 数组中都没有字符串结束符,故长度都不能确定

strlen 是计算以“\0”结束的字符串的长度的函数,函数的值为字符串中实际长度,不包括“\0”。 题中“q[10]={'a','b','c'}”虽然给出了数组大小,即数组实际分配的存储空间,但此字符串只占用前 3 个存 储单元,其余存储单元系统自动加上“\0”,故数组 q 的长度为 3;由于 p 数组中没有字符串结束符,故字 符串的长度不能确定


13. 以下能正确定义字符串的语句是(     )。

(A)char str[]={′064′};

(B)char str="kx43";

(C)char str=";    

(D)char str[]="\0";

char 声明字符变量 字符变量的规格:占用一个字节的内存空间(字符串根据它的长度来确定它在内存中占用的字节数,只有空字符串为1个字节。),一般以字符型或者整型数据处理。所以char str = "kx43"只能把字符 'k'


14.以下数组定义中错误的是(                )。

(A)int x[][3]={0};

(B)int x[2][3]={{l,2},{3,4},{5,6}};

(C)int x[][3]={{l,2,3},{4,5,6}};

(D)int x[2][3]={l,2,3,4,5,6};

[解析] 选项B)中行数定义为2,但实际需要存放3行元素,所以错误。


15.若要求从键盘读入含有空格字符的字符串,应使用函数(               )。

(A)getc()        (B)gets()        (C)getchar()   (D)scanf()

[解析] scanf()语句用“空格”区别不同的字符串;getc()与getchar()语句不能用于字符串的读入。


16. 输出结果是:

main()
{
    int a[3][3]={{1,2,9},{3,4,8},{5,6,7}},i,s=0;
    for(i=0;i<3;i++) 
        s+=a[i][i]+a[i][3-i-1]; 
    printf("%d\n",s);
}

17. 输出结果是

#include  
main()
{ 
    char ch[]="abc",x[3][4]; 
    int i;
    for(i=0;i<3;i++) 
        strcpy(x[i],ch);
    for(i=0;i<3;i++) 
        printf("%s",&x[i][i]); 
    printf("\n");
}

%s遇到0 \0就停止输出

你可能感兴趣的:(C语言基础习题)