第四章 数组习题
一、选择题
1. 如果char型变量占两个字节的存储单元,则按照如下方式定义的数组x占用的字节数
是【 】。 char x[50]={2,4,6,8,10};
A) 50 B) 100 C) 10 D) 5 2. 下面关于数组的定义正确的是【 】。 A)
int n=10;
float a[n]={1.0,2.1,3.2}; B)
#define N 10 int a[N]={1,2,3}; C)
int n;
scanf(\ int a[n]; D)
#define N 10; int a[N]={1,2,3};
3. 若有说明 int a[5][4]; 则对其数组元素的正确引用是【 】。 A)a[3+1][2] B)a(2)(3) C)a[0,2] D)a[3][5]
4. 若定义了数组int k[][4]={{1},{1,2,3},{5,6}};则数组共有【 】元素。 A)6 B) 9 C) 10 D) 12
5. 要将20,30,40,50 存入数组b中, 下列正确的程序段是【 】。 A)
int i,b[4];
for(i=0; i<4; i++) b[i]=(i+2)*10; B)
int b[4];
b={20,30,40,50}; C)
int b[4];
b[1]=20,b[2]=30,b[3]=40,b[4]=50; D)
int b[4];
b[4]={20,30,40,50};
6. 下列二维数组初始化语句中正确且与语句float a[]={0,1,2,0,4,0}等价的是【 】。 A) float a[6]={0,1,2,0,4}; B) float a[]={0,1,2,0,4}; C) float a[7]={0,1,2,0,4,0}; D) float a[5]={0,1,2,0,4};
7. printf(\程序段的输出结果是【 】。
A) 11 B) 10 C) 9 D) 8
8. 如果有char s[10]和int i,那么下面能够把输入的字符串存入数组s的选项是【 】。 A) scanf(\ B) gets(s);
C) for(i=0;i<10;i++) scanf(\ D) for(i=1;i<10;i++) getc(s[i]);
9. 若有说明char s1[]=”good”,s2[]=”idea”, 则下列输出语句中正确的是【 】。 A) printf(\ B) printf(\ C) putc(s1);putc(s2); D) puts(s1,s2);
10. 若有定义char str[7]; 要将键盘输入的字符串\赋给str,应使用【 】。
A) gets(str); B) scanf(\C) str=\D) getchar(str); 11. 若有说明 char s1[5],s2[7];,要将字符串存储到s1和s2中,下列语句中正确的是【 】。 A) scanf(\B) gets(s1, s2); C) scanf(\ D) s1=getchar( ); s2=getchar( ); 12. 下面程序段运行后,输出结果是【 】。
main() {
char s[20]=\
printf(\}
A) 4,20 B) 5,20 C) 9,10 D) 10,10 13. 下列一维数组说明中,不正确的是【 】。
A) float a[5+6]; B) int n=10, a[n]; C) #define M 10 int a[M+5] ;
D) float a[10], b[9] ; 14. 定义如下变量和数组:
int i;
int x[3][3]={1,2,3,4,5,6,7,8,9}; 则下面语句输出结果是【 】。
for(i=0;i<3;i++) printf(\
A) 1 4 7 B) 3 5 7 C) 3 6 9 D) 1 5 9 15. 下面程序段的运行结果是【 】。
char c[5]={?a?,?b?,?\\0?,?c?,?\\0?}; printf(“%s”,c) ;
A) ?a? ?b? B) ab C) ab c D) ab 16. 运行下面程序段的输出结果是【 】。
int a[7]={1,3,5} ; printf(\A) 0 B)5 C) 3 D) 不确定数
17. 要将字符串str2连接到字符串str1后,应使用的函数是【 】。 A) strcpy(str1,str2);
B) strcat(str2,str1); C) strcat(str1,str2); D) strcmp(str2,str1);
18. 下列二维数组说明中,正确的是【 】。
A) int n=5; float a[n][5]; B) int a[][9];
C) #define L1 7 #define L2 8 float a[L1][L2];
D) int n, m; scanf (\
19. 若 int data[5][6];且数组的起始地址为100(十进制), 则元素data[3][2]的地址为【 】。
A) 120 B) 113 C) 140 D) 126
20. 若已有定义 char s[10]; int i;下列输入函数调用中错误的是【 】。
A) for (i=0; i<10; ++i) s[i]=getchar( ) ; B) for (i=0; i<10; i++) scanf(\C) scanf(\D) gets(s);
21. 设定义char a[20] ,要想使数组a得到字符串“how are you”应使用【 】
A) printf(\; B) gets(a); C) a=gets(); D) printf(\; 22. 若有说明char s1[]=\则下列输出语句中正确的是【 】。
A) printf(\); B) printf(\; C) puts(s1, s2); D) puts(s1); puts(s2);
23. 若有定义 char s[]=\;则数组的长度自动定义为【 】。
A) 6 B) 5 C) 8 D) 7
24. 在C语言中,引用数组元素时,其数组下标的数据类型允许是【 】。
A)整型常量 B)整型表达式
C)整型常量或整型表达式 D)任何类型的表达式
25. 若有说明int a[][3]={1,2,3,4,5,6,7}; 则a数组第一维的大小是【 】。
A) 2 B)3 C)4 D) 无确定值 26. 下面程序段的运行结果是【 】。
char st[5]={?a?,?b?,?\\0?,?c?,?\\0?}; puts(st);
A) ‘a’’b’ B) ab C) ab c D) ab 27. 下面程序段的运行结果是【 】。
int i;
char st[5]={?a?,?b?,?\\0?,?c?,?\\0?}; for(i=0;i<5;i++)
printf(“%c”,st[i]);
A) ‘a’’b’ B) ab C) ab c D) ab 28. 运行下面程序段的输出结果是【 】。
int a[10]={1,3,5} ; printf(\
A) 0 B) 5 C) 3 D) 不确定数
29. 要将字符串str2复制到字符串str1,应使用的函数是【 】。
A) strcpy(str1,str2); B) strcat(str2,str1); C)strcat(str1,str2); D) strcmp(str2,str1); 30. 若已定义
char s1[]=\s2[]=\
假设已经执行预编译命令
#include
则函数strcmp(s1,s2) 的值是【 】。
A) 0 B) -5 C) 5 D) 13
31. 若已经包含头文件
char s[]={?a?,?\\0?,?c?,?o?,?d?,?e?,?\\0?}; int i;
若要输出 “a code”,应使用【 】。 A) puts(s); B) for(i=0;i<6;i++) printf(\C) printf(\ D) for(i=0;i<6;i++) putchar(s[i]); 32. 有下列程序段,运行时会【 】。
char a[3],b[]=\a=b;
printf(“%s”,a);
A) 运行后将输出tianjin B) 运行后将输出ti C) 运行后将输出tian D) 编译出错
若已有定义char s[6]=\下列错误的是【 】。 A) for (i=0; i<6; i++) putchar(s[i]); B) for (i=0; i<6; i++) put(s[i]) ; C) printf(\ D) puts(s);
若有说明 double b[7][6]; 对元素的非法引用是【 】。
A) b[3][5] B)b[7][5] C) b[2*3][4] D) b[0][9-6] 若已包含标题文件
C) for(i=0;i<5;i++) s1[i]=s2[i];
D) s[0]=?a?,s[1]=?b?,s[2]=?c?,s[3]=?d?;s[4]=?\\0?; 运行下面程序段的输出结果是【 】。
33.
34. 35.
36.
char s1[6]={'d','o','\\0','i','t ','\\0'}; printf (\
A) 5 B) 2 C) 6 D) 7 37. 定义如下变量和数组:
int i;
int x[3][3]={1,2,3,4,5,6,7,8,9}; 则下面语句输出结果是【 】
for(i=0;i<3;i++) printf(\
A) 1 4 7 B) 3 5 7 C) 3 6 9 D) 1 5 9
38. 若有一维数组初始化语句int b[5]={1,2,3,4,5};且数组的起始地址为8050H(H表示十六
进制),则8058H是数组元素【 】的起始地址(假设一个int型变量在内存占2个字节存储空间)。
A) b[1] B) b[4] C) b[0] D) b[2]
39. 设 char str[4][5]; 所说明的数组在存储区的起始地址为50(十进制), 则数组元素
str[3][3]在存储区中的地址为【 】。 A) 62 B) 86 C) 63 D) 68 40. 下面程序段运行后,输出结果是【 】。 int i, j, x=0; int a[6]={1,2,3};
for (i=0,j=1; i<3 && j<4; ++i, j++ ) x+=a[i]+a[j]; printf(\
A) 8 B) 11 C) 10 D) 不确定值 41. 下列程序运行后,输出值为【 】。
main() {
int a[6]={1,3,5,7,9},b[]={2,4,6,7,3},c,d; c=a[1]*b[2]; d=a[5]/b[4];
printf(\) ; } A) 4,3 B) 4,0 C) 18,0 D) 18,不确定值 42. 下面的程序用来求方阵的主对角线元素之和,请将程序填完整。
#include
int i=0,x=0;
int a[][4]={0,2,0,3,0,3,4,0,4,5,6,7,6,5,0,0}; while (i<4) {
x+= 【 】; i++; }
printf(\ }
A) a[3-i][3-j] B) a[i][3-i] C) a[i][i] D) a[3-i][4] 43. 下面的程序用来求方阵的次对角线元素之和,请将程序填完整。
#include
int i=0,x=0;
int a[][4]={0,2,0,3,0,3,4,0,4,5,6,7,6,5,0,0}; while (i<4) {
x+=【 】;