1、选择题
1.1、若有定义语句:int a[3][6]; ,按在内存中的存放顺序,a 数组的第10个元素是 D

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

1.2、有数组 inta[5] = {10,20,30,40,50}, 以下表达式编译错误是_____ B______。

A)a ++ ;

B)a[5] = 20 ;

C) a + 20 ;

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

1.3、以下错误的定义语句是 __B____

A)int x[][3] = {{0},{1},{1,2,3}};

B)int x[4][3] = {{1,2,3},{1,2,3},{1,2,3},{1,2,3}};

C)int x[4][] = {{1,2,3},{1,2,3},{1,2,3},{1,2,3}};

D)int x[][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, 9C)3, 6, 9D)3, 5, 7

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

A) 2B) 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)0B)3 C)7 D)8

1.7、有以下程序

#include

main( )

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

}

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

A)t B) tuv C)y D)出错

1.8 数组 int a[5] = {10, 20, 30, 40,50}, 有以下语句,其输出___C____

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

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

1.9 有以下程序

# include

int main()

{ int s[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) 4 ,3, 3, 2 B) 2 ,3, 4, 4

C) 1, 2, 3 ,4 D ) 4, 4, 2 ,3

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( )

{ int i,n[ ]={0,0,0,0,0};

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

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

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

}

程序运行后输出结果是 __1 4 13______

2.2、执行以下程序的输出结果是37_ .

#include

int main()

{ int i,n[4]={1,0,0,0};

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

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

}

2.3、下面程序运行的结果为__3 5____。

main()

{

int x[5],i;

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

for(i = 2;i<5;i++) x[i] = x[i-1] + x[i-2];

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

}

2.4、有以下程序

#include

int main()

{

int arr[] = {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()

{ int n[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 i,a[10],max=0,num;for(i=0;imax){max=a[i];num=i;}}printf("%d %d\n",num,max);for(i=0;imax){max=*(a+i);num=i;}}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;}