一、选择题 (1)有以下程序 main() { int a[3][3],*p,i; p=&a[0][0]; for(i=0;i<9;i++) p[i]=i; for(i=0;i<3;i++) printf("%d ",a[1][i]); } 程序运行后的输出结果是 A)0 1 2 B)1 2 3 C)2 3 4 D)3 4 5
(2)有以下程序 main() { int a[3][2]={0},(*ptr)[2],i,j; for(i=0;i<2;i++) { ptr=a+i; scanf("%d",ptr); ptr++; } for(i=0;i<3;i++) { for(j=0;j<2;j++) printf("%2d",a[i][j]); printf("\n"); } } 若运行时输入:1 2 3<回车>,则输出结果为 A)产生错误信息 B)1 0 2 0 0 0 C)1 2 3 0 0 0 D)1 0 2 0 3 0
(3)有以下程序 main() { int num[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},i,j; for(i=0;i<4;i++) { for(j=1;j<=i;j++) printf("%c",’ ’); for(j= j<4;j++) printf("%4d",num[i][j]); printf("\n"); } } 若要按以下形式输出数组右上半三角 1 2 3 4 6 7 8 11 12 16 则在程序下划线处应填入的是 A) i-1 B) i C) i+1 D) 4-i
(4) 以下能正确定义二维数组的是 A) int a[][3]; B) int a[][3]= {2*3}; C) int a[][3]={}; D) int a[2][3]={{1},{2},{3,4}};
(5) 若有以下说明和语句,int c[4][5],(*p)[5];p=c;能正确引用c数组元素的是 A) p+1 B) *(p+3) C) *(p+1)+3 D) *(p[0]+2))
(6) 有以下定义和语句 int a[3][2]={1,2,3,4,5,6,},*p[3]; p[0]=a[1]; 则*p[0]+1)所代表的数组元素是 A) a[0][1] B) a[1][0] C) a[1][1] D) a[1][2]
(7) 有以下程序 int f(int b[][4]) { int i,j,s=0; for(j=0;j<4;j++) { i=j; if(i>2) i=3-j; s+=b[i][j]; } return s; } main( ) { int a[4][4]={{1,2,3,4},{0,2,4,5},{3,6,9,12},{3,2,1,0}}; printf(“%d\n”,f(A) ); } 执行后的输出结果是 A) 12 B) 11 C) 18 D) 16
(8) 以下不能正确定义二维数组的选项是 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}};
(9) 若有定义:int *p[3];, 则以下叙述中正确的是 A) 定义了一个基类型为int的指针变量p,该变量具有三个指针 B) 定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针 C) 定义了一个名为*p的整型数组,该数组含有三个int类型元素 D) 定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素
(10) 有以下程序 main() { int a[3][3], *p, i; p=&a [0][0] ; for ( i=0 ; i<9 ; i++) p[i]=i+1; printf("%d\n",a[1][2]); } 程序运行后的输出结果是 A) 3 B) 6 C) 9 D) 2
(11) 以下能正确定义数组并正确赋初值的语句是 A) int N=5,b[N][N]; B) int a[1][2]={{1},{3}}; C) int c[2][]={{1,2},{3,4}}; D) int d[3][2]={{1,2},{34}};
(12) 有以下程序 main() { int m[][3]={1,4,7,2,5,8,3,6,9}; int i,j,k=2; for(i=0;i<3;i++) { printf("%d",m[k][i]); } } 执行后输出结果是 A) 4 5 6 B) 2 5 8 C) 3 6 9 D) 7 8 9
(13) 有以下程序 main() { int a[][3]={{1,2,3},{4,5,0}},(*pa)[3],i; pa=a; for(i=0;i<3;i++) if(i<2) pa[1][i]=pa[1][i]-1; else pa[1][i]=1; printf("%d\n",a[0][1]+a[1][1]+a[1][2]); } 执行后输出结果是 A) 7 B) 6 C) 8 D) 无确定值
(14) 有以下程序 main() { int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}}; int i,s=0 for(i=0;i<4;i++) s+=aa[i][1]; printf(“%d\n”,s); } 程序运行后的输出结果是 A) 11 B) 19 C) 13 D) 20
(15) 若有以下定义和语句: int s[4][5],(*ps)[5]; ps=s; 则对s数组元素的正确引用形式是 A) ps+1 B) *(ps+3) C) ps[0][2] D) *(ps+1)+3
(16) 以下程序的输出结果是 main() { int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1; for(i=0;i<3;i++) for(j=i;j<=i;j++) t=t+b[i][b[j][j]]; printf("%d\n",t); } A) 3 B) 4 C) 1 D) 9
(17) 以下数组定义中不正确的是 A) int a[2][3]; B) int b[][3]={0,1,2,3}; C) int c[100][100]={0}; D) int d[3][]={{1,2},{1,2,3},{1,2,3,4}};
(18) 以下程序的输出结果是 main() { int a[4][4]={{1,3,5},{2,4,6},{3,5,7}}; printf(“%d%d%d%d\n”,a[0][3],a[1][2],a[2][1],a[3][0]); } A) 0650 B) 1470 C) 5430 D) 输出值不定
(19) 以下程序的输出结果是 A) 1,5,9 B) 1,4,7 C) 3,5,7 D)3,6,9 main() { 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]); }
(20) 以下程序的输出结果是 A) 18 B) 19 C) 20 D)21 main() { int a[3][3]={ {1,2},{3,4},{5,6} },i,j,s=0; for(i=1;i<3;i++) for(j=0;j<=i;j++)s+=a[i][j]; printf(“%dn”,s); }
(21) 若有以下的定义:int t[3][2];能正确表示t数组元素地址的表达式是 A) &t[3][2] B) t[3] C) t[1] D) t[2]
(22) 有如下程序 main0 { int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0; for(i=1;i<3;i++) for(j=0;j<i;j++) s+=a[i][j] printf(“%d\n”,s); } 该程序的输出结果是 A) 18 B) 19 C) 20 D) 21
(23) 下列程序执行后的输出结果是 A) 3 B) 6 C) 9 D) 随机数 main() { int a[3][3], *p,i; p=&a[0][0]; for(i=p; i<9; i++) p[i]=i+1; printf("%d \n",a[1][2]); }
(24) 以下程序的输出结果是 A) 5 2 B) 5 1 C) 5 3 D) 9 7 main( ) { int i,x[3][3]={9,8,7,6,5,4,3,2,1},*p=&x[1][1]; for(i=0;i<4;i+=2)printf("%d ",p[i]); }
(25) 若有以下的说明和语句,则在执行for语句后,*(*(pt+l)+2)表示的数组元素是 A) t[2][0] B) t[2][2] C) t[l][2] D) t[2][l] int t[3][3], *pt([3], k; for (k=0;k<3;k++) pt[k]=&t[k][0];
(26) 以下程序的输出结果是 A)14 B)0 C)6 D)值不确定 main() { int n[3][3] , i, j; for ( i=0; i<3; i++ ) for ( j=0; j<3; j++ ) n[i][j]=i+j; for ( i=0; i<2; i++ ) for ( j=0; j<2; j++ ) n[i+1][j+1]+= n[i][j]; printf(“%d\n”,n[i][j]); }
(27) 执行以下程序段后,m的值为 int a[2][3]={ {1,2,3},{4,5,6} }; int m,*p; p=&a[0][0]; m=(*p)*(*(p+2))*(*(p+4)); A) 15 B) 14 C) 13 D) 12
(28) 若有以下定义和语句: int w[2][3],(*pw)[3]; pw=w; 则对w数组元素非法引用是 A)*(w[0]+2) B)*(pw+1)[2] C)pw[0][0] D)*(pw[1]+2)
(29) 若有以下说明: int w[3][4]o={{0,1},{2,4},{5,8}}; int(*p)[4]=w; 则数值为4的表达式是 A) *w[1]+1 B) p++,*(p+1) C) w[2][2] D) p[1][1]
(30) 若有以下的说明和语句: main() {int t[3][2], *pt[3],k; fpr(k=o; k<3;k++)pt[k]=t[k]; } 则以一选项中能正确表示t数组元素地址的表达式是 A) &t[3][2] B) *pt[0] C) *(pt+1) D) &pt[2] (31) 定义如下变题和数组: int i; int x[3][3]={1,2,3,4,5,6,7,8,9}; 则下面语句的输出结果是 for(i=0;i<3;i++) printf("%d",x[i][2-1]); A) 1 5 9 B) 1 4 7 C) 3 5 7 D) 3 6 9
(32) 设有以下定义: int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}; int (*prt)[3]=a,*p=a[0]; 则下列能够正确表示数组元素a[1][2]的表达式是 A) *((*prt+1) [2]) B) *(*(p+5)) C) (*prt+1)+2 D) *(*(a+1)+2)
(33) 下面程序的输出是 A) 23 B) 26 C) 33 D) 36 int aa[3][3]={{2},{4},{6}}; main() { int i, * p=&aa[0][0]; for(i=0; i<2;i++) { if(i==0) aa[i][i+1]=*p+1; else ++p; printf("%d",*p);} }
(34) 下面程序的输出是 A) 60 B) 68 C) 99 D) 108 main() { int a[3][4]={ 1,3,5,7,9,11,13,15,17,19,21,23}; int ( *p)[4]=a,i,j,k=0; for(i=0; i<3; i++) for(j=0; j<2; j++) k=k+*( *(p+i)+j); printf("%d\n",k);}
(35) 若有以下说明和语句,请选出哪个是对c数组元素的正确引用 int c[4][5], (*cp)[5]; cp=c; A) cp+1 B) *(cp+3) C) *(cp+1)+3 D) *(*cp+2)
(36) 设有说明int(*ptr)[m];其中的标识符ptr是 【36】 。 A)M个指向整型变量的指针 B)指向M个整型变量的函数指针 C)一个指向具有M个整型元素的一维数组的指针 D)具有M个指针元素的一维指针数组,每个元素都只能指向整型量
二、填空题:
(1)以下函数rotate的功能是:将a所指N行N列的二维数组中的最后一行放到b所指二维数组的第0列中,把a所指二维数组中的第0行放到b所指二维数组的最后一列中,b所指二维数组中其他数据不变。 # define N 4 void rotate(int a[][N], int b[][N]) { int i, j; for (i=0; i<N; i++) { b[i][N-1] = 【1】 ; 【2】 = a[N-1][i]; } }
(2)以下程序中,fun函数的功能是求3行4列二维数组每行元素中的最大值.请填空. void fun(int, int, int (*)[4],int *) main() { int a[3][4]={{12,41,36,28},{19,33,15,27},{3,27,19,1}},b[3],i; fun(3,4,a,b); for(i=0;i<3;i++) printf("%4d",b[i]); printf("\n"); } void fun(int m,int n,int ar[][4],int *br) { int i,j,x; for(i=0;i<m;i++) { x=ar[i][0]; for(j=0;j<n;j++) if(x<ar[i][j]) x=ar[i][j]; 【3】 =x; }
(3) 以下程序中,函数 sumColumM的功能是:求出M行N列二维数组每列元素中的最小值,并计算它们的和值。和值通过形参传回主函数输出。请填空。 #define M 2 #define N 4 void SumColumMin(int a[M][N],int *sum) { int i,j,k,s=0; for(i=0;i<N;i++) { k=0; for(j=1;j<M;j++) if(a[k][i]>a[j][i])k=j; s+= 【4】 ; } 【5】 =s; } main() { int x[M][N]={3,2,5,1,4,1,8,3},s; SumColumMin( 【6】 ); printf("%d\n",s); }
(4) 下面rotate函数的功能是:将n行n列的矩阵A转置为A’,例如: 1 2 3 4 1 5 9 13 5 6 7 8 2 6 10 14 当 A= 9 10 11 12 则 A’=3 7 11 15 13 14 15 16 4 8 12 16 请填空 #define N 4 void rotate(int a[][N]) { int i,j,t; for(i=0;i<N;i++) for(j=0;【7】;j++) { t=a[i][j]; 【8】 ; a[j][i]=t; } }
(5) 以下程序运行后的输出结果是 【9】 main() { int i,j,a[][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) for(j=i+1;j<3;j++) a[j][i]=0; for(i=0;i<3;i++) { for(j=0;j<3;j++) printf("&d ", a[i][j]); printf("\n"); } }
(6) 若有以下程序 main() { int a[4][4]={{1,2,-3,-4},{0,-12,-13,14},{-21,23,0,-24},{-31,32,-33,0}}; int i,j,s=0; for(i=0;i<4;i++) { for(j=0;j<4;j++) { if(a[i][j]<0)continue; if(a[i][j]==0)break; s+=a[i][j]; } } printf("%d\n",s); } 执行后输出的结果是 【10】 。
(7) 函数YangHui的功能是把杨辉三角形的数据赋给二维数组的下半三角,形式如下 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 其构成规律是: 第0列元素和主对角线无素均为1 其余元素为其左上方和正上方元素之和 数据的个数每行递增1 请将程序补充完整。 #defint N 6 void YangHui(int *[N][N]) { int i,j; x[0][0]=1 for(i=1;i<N;i++) { x[i][0]= 【11】 =1; for(j=1;j<i;j++) x[i][j]= 【12】 ; } }
(8) fun函数的功能是:首先对a所指的N行N列的矩阵,找出各行中的最大的数,再求这N个最大值中的最小的那个数作为函数值返回。请填空。 #include <stdio.h> #define N 100 int fun(int(*a)[N]) { int row,col,max,min; for(row=0;row<N;row++) { for(max=a[row][0],col=1;col<N;col++) if( [13] )max=a[row][col]; if( row==0)min=max; else if( [14] )min=max; } return min; }
(9) 以下程序中,select 函数的功能是:在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标。请填空。 #define N 3 #define M 3 select(int a[N][M],int *n) { int i,j,row=1,colum=1; for(i=0;i<N;i++) for(j=0;j<M;j++) if(a[i][j]>a[row][colum]){row=i;colum=j;} *n= 【15】; return 【16】; } main() {int a[N][M]={9,11,23,6,1,15,9,17,20},max,n; max=select(a,&n); printf("max=%d,line=%d\n",max,n); }
(10) 以下程序中,主函数调用了LineMax函数,实现在N行M列的二维数组中,找出每一行上的最大值。请填空。 #define N 3 #define M 4 void LineMax(int x[N][M]) { int i,j,p; for(i=0; i<N;i++) { p=0; for(j=1; j<M;j++) if(x[i][p]<x[i][j]) 【17】 ; printf(“The max value in line %d is %d\n”, i, 【18】 ); } } main() { int x[N][M]={1,5,7,4,2,6,4,3,8,2,3,1}; 【19】 }
(11) 设在主函数中有以下定义和函数调用语句,且fun函数为void类型;请写出fun函数的首部[20] 。要求形参名为b。 main() { double s[10][22]; int n; ┆ ┆ fun(s); ┆ }
(12) 设有以下定义的语句: int a[3][2]={10,20,30,40,50,60}, (*p)[2]; p=a; 则 *(*(p+2)+1)值为【21】 。
(13) 阅读下列程序: #include<stdio.h> main() { int i, j, row, column,m; static int array[3][3]={{100,200,300}, {28,72,-30}, {-850,2,6} }; m=array[0][0]; for (i=0; i<3; i++) for (j=0; j<3; i++) if (array[i][j]<m) { m=array[i][j]; row=i; column=j;} printf("%d,%d,%d\n",m,row,column); } 上述程序的输出结果是 【22】 。
答案: 一、选择题:
01) D 02)B 03) B 04) B 05) D 06) C 07) D 08) D 09) B 10) B
11) D 12) C 13) A 14) B 15) C 16) B 17) D 18) A 19) C 20) A
21) D 22) A 23) B 24) C 25) C 26) C 27) A 28) B 29) D 30) C
31) C 32) D 33) A 34) A 35) D 36) C 二、填空题:
(1) A[0][i]
(2) b[i][0]
(3) br[i]
(4) a[k][i]
(5) *sum
(6) x,&s
(7) j<=i
(8) a[i][j]=a[j][i]
(9) 1 2 3 0 5 6 0 0 9
(10) 58
(11) x[i][i]
(12) x[i-1][j-1]+x[i-1][j] 或 [i-1][j]+x[i-1][j-1]
(13) a[row][col]>max 或 a[row][col]>=max 或 max<=a[row][col]
(14) Max<min 或 min>max 或 max<=min 或 min>=max
(15) row
(16) a[row][colum]
(17) sp=j
(18) cx[i][p]
(19) LineMax(x)
(20) void fun(double b[][22]) 或 void fun(double b[0][22]) 或 void fun(double (*b)[22])
(21) 60
(22) -850,2,0若遗漏逗号扣1分
|