数组练习

1、选择题

1.1、若有定语句inta[3][6];,按在内存中的存放顺序a数组的10个元素是 D

A)a[0][4]B)a[1][3]C)a[0][3]D)a[1][4]

1.2、有数组 int a[5] = {1020304050}, 以下表达式编译错误是_____B______

A) a ++ ;

B) a[5] = 20 ;

C) a + 20 ;

D) (a-3a[3]) ;

1.3、以下误的定义语句是_B_____

Aintx[][3]={{0},{1},{1,2,3}};

Bintx[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};

Cintx[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};

Dintx[][3]={1,2,3,4};

1.4设int i,x[3][3]={1,2,3,4,5,6,7,8,9};则下面语句

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

printf(″%d, ″,x[i][2-i]);

的输出结果是 D

A)1, 4, 7 B)1, 5, 9 C)3, 6, 9 D)3, 5, 7

1.5表达式“sizeof(int [1][2])/sizeof(int)”的值为_C___。

A) 2 B) 3 C) 4 D) 5

1.6有以下程序

#include main()

{ char s[]=”012xy\07s34f4w2″;

int i,n=0;

for(i=0;s[i]!=0;i++)

if(s[i]>=’0’&&s[i]<='9')

n++;

printf(“%d\n”,n);

}

程序运行后的输出结果是___B_ ________

A)0 B)3 C)7 D)8

1.7、有以下程序

#include

main()

{chars[]=wstuv; printf(%c\n,*s+2);

}

程序运行后的输出结果是

AtB) tuvCy D)出错

1.8 数组 int a[5] = {1020304050}, 有以下语句,其输出__C_____

printf(“%d\n”*&a +1) );

A) 20 B) 30 C) 随机值 D)编译报错

1.9 有以程序

# include

int main()

{ints[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0,0,0,0,0},i ;

for(i=0;i<12;i++)c[s[i]]++;

for(i=1;i<5;i++)printf(%d,”,c[i]); printf(\n);

}C

A)4332B)2344

C)1234D)4423

1.10 有数组 int a[3][4] = {10,20,30,40,50,60,70,80,90,100,110,120},执行以下语句输出的是_________D______

printf(“%d\n”*(*a+2) + 3 );

A) 语句有错 B) 120 C) 30 D) 33

2、填空题

2.1、有以下程序

#include

main()

{inti,n[]={0,0,0,0,0};

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

{n[i]=n[i1]*3+1;

printf(%d,n[i]);}

}

程序运行后输出结果是___1 4 13_______

2.2、执行以程序的输出结果_3 7 .

#include

int main()

{inti,n[4]={1000};

for(i=1;i<=3;i++)

{n[i]=n[i1]*2+1;printf(“%d”,n[i]);}

}

2.3、下面程序运行的结果为___3 5______

main()

{

int x[5]i

x[0] = 1x[1] = 2

fori = 2i<5i++x[i] = x[i-1] + x[i-2];

fori = 2i<5i++printf“%d”x[i]);

}

2.4有以下程序

#include<sthio.h>

int main()

{

intarr[]={1,3,5,7,2,4,6,8},i,start;

scanf(%d”,&start);

for(i=0,i<7,i+=2)

printf(%d,arr[(start+i)%5]);

}

若在程序运行时输整数10<>,则输出结果为____1___

2.5下面程序运行的结果为__4 5 8 2 0_______

#include “stdio.h”

main()

{ int i,j,a[]={0,2,8,4,5};

printf(“\n”);

for(i=1;i<=5;i++)

{ j=5-i;

printf(“%2d”,a[j]);

}

}

2.6有以下程序

#include

int main()

{intn[2],i,j;

for(i=0;i<2;i++)n[i]=0; for(i=0;i<2;i++)

for(j=0;j<2;j++)n[j]=n[i]+1;

printf(%d\n,n[1]);

}

程序运行后的输出结果是13

3、编程题

3.1、 一个班10个学生的成绩,存放在一个一维数组中,要求找出其中成绩最高的学生的成绩和该生的序号。试编程。(试着用下标法和地址法两种方法表示数组)

#include int main(){int a[] = {55,88,76,54,88,99,46,35,66,78};int max = a[0];int maxi = 0;for(int i=1;i<10;i++){if(max < a[i]){max = a[i];maxi = i;}}printf("成绩最高为:%d,序号为:%d",max,maxi);return 0;}
#include int main(){int a[] = {55,88,76,54,88,99,46,35,66,78};int max = *a;int maxi = 0;for(int i=1;i<10;i++){if(max < (*(a+i))){max = *(a+i);maxi = i;}}printf("成绩最高为:%d,序号为:%d",max,maxi);return 0;}

3.2、有5个学生上4门课程,要求输入全部学生的各门课程成绩,然后输出各门课程的平均成绩,并按照各个学生的平均成绩排序(成绩最高的学生排在数组最前面,最低学生排在数组最后面的行) (试着用下标法和地址法两种方法表示数组)

#include int main(){int a[5][4],sum=0,sum1=0; for(int i=0;i<5;i++) {for(int j=0;j<4;j++) {scanf("%d",&a[i][j]); } } for(int j=0;j<4;j++) {for(int i=0;i<5;i++) {sum+=a[i][j]; } } printf("%d\n",sum); for(int i=0;i<5;i++) {sum1=0; for(int j=0;j<4;j++) {sum1+=a[i][j]; } printf("%d\n",sum1); } for(int i=0;i<5;i++) {for(int j=0;j<4;j++) {scanf("%d",&(*(*(a+i)+j))); } } for(int j=0;j<4;j++) {for(int i=0;i<5;i++) {sum+=*(*(a+i)+j); } } printf("%d\n",sum); for(int i=0;i<5;i++) {sum1=0; for(int j=0;j<4;j++) {sum1+=*(*(a+i)+j); } printf("%d\n",sum1); }return 0; }