第 六 章 数组
一、选择题:
1. 在c语言中,一维数组的定义方式为:类型说明符 数组名( )。
A.常量表达式 B.整型表达式 C.整型常量或整型表达式 D.整型常量 2. 以下对一维整型数组a的正确说明是 。
A. int a(10); B. int n=10,a[n]; C. int n; D. #define SIZE 10 scanf(“%d”,&n); int a[SIZE]; int a[n]; 3. 在C语言中,引用数组元素时,其数组下标的数据类型允许是( ). A.整型常量或整型表达式 B.整型常量
C.整型表达式 D.任何类型的表达式 4. 若有说明:int a[10];则对a数组元素的正确引用是 。
A. a[10] B. a[3.5] C. a(5) D. a[10-10] 5. 以下能对一维数组a进行不正确初始化的语句是( )
A.int a[]={0}; B.int a[10]={0,0,0,0}; C.int a[10]={}; D.int a[10]={10*1}; 6. 对以下说明语句的正确理解是 。 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. 因为数组长度与初值的个数不相同,所以此语句不正确 7. 下面程序 (每行程序前面的数字表示行号)。 1 main() 2 { 3 float a[10]={0.0}; 4 int i; 5 for(i=0;i<3;i++) scanf(“%d”,&a[i]); 6 for(i=1;i<10;i++) a[0]=a[0]+a[i]; 7 printf(“%f\\n”,a[0]); 8 }
A. 没有错误 B. 第3行有错误 C. 第5行有错误 D. 第7行有错误 8. 下面程序中有错误的行是 (每行程序前面的数字表示行号)。 1 main() 2 { 3 float a[3]={1}; 4 int i; 5 scanf(“%d”,&a) ; 6 for(i=1;i<3;i++) a[0]=a[0]+a[i]; 7 printf(“a[0]=%d\\n”,a[0]); 8 }
A. 3 B. 6 C. 7 D. 5 9. 定义如下变量和数组: int k; int a[3][3]={1,2,3,4,5,6,7,8,9}; 则下面语句的输出结果是 。 for(k=0;k<3;k++) printf(“%d”,a[k][2-k]);
A. 3 5 7 B. 3 6 9 C. 1 5 9 D. 1 4 7 10. 下面程序的运行结果是 。
1
main() {
int a[6],i;
for(i=1;i<6;i++) {
a[i]=9*(i-2+4*(i>3))%5; printf(“-”,a[i]); } }
A. -4 0 4 0 4 B. -4 0 4 0 3 C. -4 0 4 4 3 D. -4 0 4 4 0 11. 以下对二维数组a的正确说明是( )。
A. double a[1][4]; B.int a[3][]; C.float a(3,4); D.float a(3)(4); 12. 若说明:int a[3][4];则对a数组元素的正确引用是( )
A.a[1+1][0] B.a[2][4] C.a[1,3] D.a(2)(1) 13. 若有说明:int a[3][4];则对a数组元素的非法引用是( )
A.a[0][4] B.a[0][2*1] C.a[1][3] D.a[4-2][0] 14. 若有说明:int a[3][4];则下面正确的叙述是( )。
A.数组a中每个元素均得到处置0 B.只有元素a[0][0]可得到初值0
C.此说明语句不正确 D.数组a中各元素都可得到初值,但其值不一定为0 15.若有说明:int a[3][4];则数组a中的元素( )
A.可在程序的编译阶段得到初值0 B.可在程序的运行阶段得到初值0
C.不能得到确定的初值 D.可在程序的编译或运行阶段得到初值0 16. 若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为( )。(假设a[0][0]位于数组的第一个位置上。)
A.i*m+j+1 B.i*m+j C.j*m+I D.i*m+j-1 17. 以下能对二维数组a进行正确初始化的语句是 。
A. int a[2][]={{1,0,1},{5,2,3}}; B. int a[][3]={{1,2,3},{4,5,6}}; C. int a[2][4]={{1,2,3},{4,5},{6}}; D. int a[][3]={{1,0,1},{},{1,1}}; 18. 以下不能对二维数组a进行不正确初始化的语句是 。
A. int a[2][3]={0}; B. int a[][3]={{1,2},{0}}; C. int a[2][3]={{1,2},{3,4},{5,6}}; D. int a[][3]={1,2,3,4,5,6}; 19. 若有说明:int a[3][4]={0};则下面正确的叙述是 。
A. 只有元素a[0][0]可得到初值0 B. 此说明语句不正确
C. 数组a中各元素都可得到初值,但其值不一定为0 D. 数组a中每个元素均可得到初值0 20.若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是 。
A. 2 B. 3 C. 4 D. 无确定值
二、填空题:
1.在C语言中,二维数组的定义方式为:类型说明符 数组名[【1】][【2】]; 2.在c语言中,二维数组元素在内存中的存放顺序是( )。 3.若有定义:double x[3][5];则x数组中行下标的下限为【1】,列下标的上限为【2】。 4.若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为:( )。(假设a[0][0]位于数组的第一个位置上。)
5.若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值是【1】,a[2][1]得到的初值是【2】
三、阅读程序写结果
1. 下面程序的运行结果是 。
main()
2
{ int i=1,n=3,j,k=3; int a[5]={1,4,5};
while(i<=n&&k>a[i]) i++; for(j=n-1;j>=i;j--)
a[j+1]=a[j];
a[i]=k;
for(i=0;i<=n;i++)
printf(“=”,a[i]);
}
2. 下面程序的运行结果是 。
main()
{ int a[10]={1,2,2,3,4,3,4,5,1,5};
int n=0,i,j,c,k; for(i=0;i<10-n;i++) { c=a[i]; for(j=i+1;j<10-n;j++) if(a[j]==c) { for(k=j;k<10-n;k++) a[k]=a[k+1]; n++; } } for(i=0;i<(10-n);i++) printf(“%d”,a[i]); printf(“\\n”);
}
3. 当从键盘输入18时,下面程序的运行结果是 。
main()
{ int x,y,i,a[8],j,u,v;
scanf(“%d”,&x); y=x; i=0; do { u=y/2; a[i]=y%2; i++; y=u; } while(y>=1); for(j=i-1;j>=0;j--) printf(“%d”,a[j]);
}
4. 以下程序的功能是 。 main() { int num[10]={10,1,-20,-203,-21,2,-2,-2,11,-21}; int sum=0,i; for(i=0;i<10;i++) { if(num[i]>0) sum=num[i]+sum; } printf(“sum=m”,sum);
3
}
5. 下面程序的运行结果是 。 main() { int a[10]={1,2,3,4,5,6,7,8,9,10}; int k,s,i; float ave; for(k=s=i=0;i<10;i++) { if(a[i]%2==0) continue; s+=a[i]; k++; } if(k!=0) { ave=(float)s/k; printf(“The number is:%d. The average is:%f\\n”,k,ave); } }
6. 下面程序的运行结果是( )。 main( )
{ int i,f[10]; f[0]=f[1]=1;
for(i=2;i<10;i++)
f[i]=f[i-2]+f[i-1]; for(i=0;i<10;i++)
{ if(i%4= =0) printf(“\\n”); printf(“=”,f[i]; ) } }
7. 下面程序的运行结果是( )。 main( )
{ int i=1,n=3,j,k=3; int a[5]={1,4,5};
while (i
for(i=0;i<=n;i++)
printf(“=”,a[i]);
}
8. 下面程序的运行结果是 。
main()
{ int a[9]={0,6,12,18,42,44,52,67,94};
int x=52,i,n=9,m; i=n/2+1; m=n/2; while(m!=0) { if(xa[i])
4
{ i=i+m/2+1; m=m/2; } else break; } printf(“The index is:%d”,i); }
9. 下面程序的运行结果是 。 main() { int a[6][6],i,j; for(i=1;i<6;i++) for(j=1;j<6;j++) a[i][j]=(i/j)*(j/i); for(i=1;i<6;i++) { for(j=1;j<6;j++) printf(“-”,a[i][j]); printf(“\\n”); } }
10. 下面程序的运行结果是 。 main() { int a[5][5],i,j,n=1; for(i=0;i<5;i++) for(i=0;i<5;i++) a[i][j]=n++; printf(“The result is:\\n”); for(i=0;i<5;i++) { for(j=0;j<=i;j++) printf(“M”,a[i][j]); printf(“\\n”); } }
11. 下面程序的运行结果是 。
main()
{ int i,j,a[2][3]={{2,4,6},{8,10,12}}; printf(“The original array is:\\n”); for(i=0;i<2;i++) { for(j=0;j<3;j++) printf(“M”,a[i][j]); printf(“\\n”); } printf(“\\nthe result is:\\n”); for(i=0;i<3;i++) { for(j=0;j<2;j++) printf(“M”,a[j][i]); printf(“\\n”); } }
5