C语言程序复习题及参考答案 下载本文

第七章 数组

一、主要内容

一维数组:

1. 一维数组的定义:数据类型 数组名[常量表达式]; (a)常量表达式表示数组元素个数,从0开始计算。

(b)不能用变量来表示元素的个数,可以是符号常量或常量表达式。 (c)数组名为地址常量

2. 一维数组元素的引用:数组名[下标]

(a)只能逐个引用数组元素,不能一次引用整个数组

3. 一维数组初始化:类型说明符 数组名[常量表达式]={值1,值2,…… ,}; (a)只给部分数组元素赋初值,当{}中值的个数少于元素个数时,只给前面部分元

素赋值,其余自动赋零。

(b)当全部数组元素赋初值时,可不指定数组长度

二维数组:

1. 二维数组的定义:数据类型 数组名[常量表达式] [常量表达式]; (a)数组元素的存放顺序:按行序优先

2. 二维数组元素的引用:数组名[行下标] [列下标] (a)只能逐个引用数组元素,不能一次引用整个数组 3. 二维数组初始化: (a)可以按行赋值,也可逐元素赋值。 (b)当全部数组元素赋初值时,可不指定数组长度

字符数组:

1. 字符数组的定义:char 数组名[常量表达式]; (a)数组元素的存放顺序:按行序优先

2.字符数组的输入输出:

(a)按字符输入输出 (getchar、putchar、printf+%c控制字符、scanf+%c) (b)字符串输入输出 (gets、puts、printf+%s控制字符、scanf+%s)(此方法的4

个函数格式要重点掌握)

3.字符串处理函数

(a)头文件 #include

(b) 常用函数:strlen strcat strcmp strcpy

二、练习题

一、选择题:

1. C 语言的注释定界符是: ( )

A) { } B) [ ] C) * * D) /* */ 2.在定义一个一维数组时,不能用来表示数组长度的是:( ) A) 常量 B)符号常量

C)常量表达式

D)已被赋值的变量

3. 若定义数组并初始化int a[10]={1,2,3,4},以下语句哪一个成立? ( )

A. 若引用a[10],编译时报错 B. 若引用a[10],连接时报错 C. 若引用a[10],运行时出错 D. 若引用a[10],系统不报错

第 39 页 共 88 页

4.对以下说明语句 int a[10]={6,7,8,9,10}; 的正确理解是:( )

A)将5个初值依次赋给a[1] 至a[5] B)将5个初值依次赋给a[0] 至a[4] C)将5个初值依次赋给a[6] 至a[10]

D)因为数组长度与初值的个数不相同, 所以此语句不正确 5.以下一维数组a的正确定义是:( )

A. int a(10); B. int n=10,a[n]; C. int n; D. #define N 10 scanf(“%d”,&n); int a[N]; int a[n]; 6.以下二维数组 a 的正确说明是:(

)

A) int a[1,1]; B) float a(3,4); C) double a[1][4]; D) float a(3)(4); 7.设已定义:int x[2][4]={1,2,3,4,5,6,7,8}; 则元素x[1][1]的正确初值是( )

A. 6 B. 5 C. 7

D. 1

8.若有说明:int a[3][4]; 则对a数组元素的非法引用是: ( )

(A)a[0][2*1] (B)a[1][3] (C)a[4-2][0] (D)a[0][4] 9.以下定义语句中,错误的是 ( )

A. int a[ ]={1,2} B. int a[ ][3]={1,2,3,4,5}; C. char s[10]=“test”; D. int n=5,a[n]; 10.若有说明:int a[3][4]; 则对a数组元素的正确引用是:( )

(A)a[2][4] (B)a[1, 3] (C)a[1+1][0] (D)a(2)(1)

11.以下对二维数组a 的正确说明是:( )

A. int a[3][] B. float a(3,4) C. double a[1][4] D. float a(3)(4) 12.以下不能正确定义二维数组的选项是 ( )

A)int a[2][2]={{1},{2}}; B)int a[][2]={1,2,3,4}; C)int a[2][2]={{1},2,3}; D)int a[2][]={{1,2},{3,4}}; 13. 若二维数组a有m列,则在a[i][j]前面的元素个数为: ( )

A. j*m+i B. i*m+j C. i*m+j-1 D. i*m+j+1

14.数组定义为:int a[4][5]; 引用“a[1]+3”表示的是。(以下记数均从自然数1开始) (A)a数组第2行第4列元素的地址

(B)a数组第2行第4列元素的值 (C)a数组第4行的首地址

(D)a数组第1行第3个元素的地址 ( )

15.C标准库函数中,字符串处理函数的原形在 头文件中。( ) A. stdio.h B. math.h C. string.h D. ctype.h 16.有以下程序 main()

{ int p[7]={11,13,14,15,16,17,18},i=0,k=0;

第 40 页 共 88 页

while(i<7&&p[i]%2){k=k+p[i]; i++;} printf(\}

执行后输出的结果是:( )

A) 58 B) 56 C) 45 D) 24

17.有数组定义:char array[]=”Computer”;则数组array所占的存储空间为 ( ) A)7个字节 B) 8个字节 C)9个字节 D)10个字节 18.以下程序的输出结果是。 ( ) main()

{ char ch[3][5]={\printf ( \}

A. AAAA B. BBB C. BBBCC D. CC 19.判断字符串s1是否大于字符串s2,应当使用的表达式是: (A)if(s1>s2) (B)if(a= =b)

(C)if(strcpy(s2,s1)>0) (D)if(stcmp(s1,s2)>0) 20.以下程序段的输出结果是: ( )

char s[]=\printf (\

(A) 5 (B) 6 (C) 8 (D) 9

21.下面是对s的初始化,其中不正确的是: ( )

(A)char s[5]={“abc”}; (B)char s[5]={‘a’, ‘b’, ‘c’}; (C)char s[5]= “ ”; (D)char s[5]=“abcdef”; 22.有两个字符数组a,b,则以下正确的输入格式是: ( )

(A)gets(a, b); (B)scanf(“%s%s”, a, b); (C)scanf(“%s%s”, &a, &b); (D)gets(“a”); gets(“a”);

23. 若有以下程序段:

int a[ ]={4,0,2,3,1},i,j,t; for(i=1;i<5;i++) { t=a[i]; j=i-1;

while(j>=0&&t>a[j]) {a[j+1]=a[j]; j--;} a[j+1]=t;}

则该程序段的功能是:( )

A)对数组a进行插入排序(升序) B)对数组a进行插入排序(降序) C)对数组a进行选择排序(升序) D)对数组a进行选择排序(降序) 24、在int a[ ][3]={{1},{3,2},{4,5,6},{0}}中a[1][1]的值是。 ( ) A、0 B、6 C、5 D、 2 25、若有定义int a[3][4];则能正确表示a数组元素地址的表达式是 (A) &a[3][2] (B) a[3][2] (C) &a[1][2] (D) a[2] 26 、若有定义:int b[3];则数组元素的不合法引用是。

(A) b[1] (B) b[0] (C)b[2] (D) b[3] ( )

第 41 页 共 88 页

二、 填空题:

1. 若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值是________ a[2][1]得到的初值是 ___________。

2. 在C语言中,二维数组元素的内存中的存放顺序是_______________。

3. C 语言对数组下标的引用一般从_____________开始。

4. 若有定义:double x[3][5];则数组中行下标的下限为______________,列下标的上限为 ______________。

5.若二维数组a有m列,则在a[i][j]前面的元素个数为_________________。 6.设有数组a[10],数组元素a[3]的地址可以写成_________________。 7.字符串 \在内存中占用的字节数为_________________。 8.strlen(\的值为: _________________。 9.下面程序段的运行结果是 。

char c[5]={‘a’, ‘b’, ‘\\0’, ‘c’, ‘\\0’}; printf(“%s”, c);

10、char str[12]={‘s’,’t’,’d’,’i’,’o’};

printf(“%d\\n”,strlen(str));则输出结果为 。

三、 看程序写结果:

1. 以下程序运行后的输出结果是 。

int main()

{ char c1[5]={‘A’,‘B’,‘C’,‘D’},c2[5]; int i;

for(i=0;i<4;i++)

c2[i]=(c1[i]-‘A’-3+26)&+‘A’; c2[4]= ‘\\0’ ; puts(c2); }

2.以下程序运行后的输出运行结果 main()

{

int y[2][3]={{9,8,7},{6,5,4}}; int m[2],k,j;

for(k=0;k<=1;k++) {m[k]=y[k][0];

第 42 页 共 88 页