当前位置:首页 >> 化学 >>

二维数组与指针


一、选择题 (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 20 00 C)1 2 30 00 D)1 0 20 30

(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++) for(j= printf("%c",' ');

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] k; pt[k]=&t[k][0];

int t[3][3], *pt([3], for (k=0;k<3;k++)

(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 int a[2][3]={ {1,2,3},{4,5,6} }; 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 5 6 7 当 A= 9 10 8 11 12 1 5 9 13 2 6 10 14 则 A’=3 7 11 15 4 8 12 16

13 14 15 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++) for(i=0;i<3;i++) { for(j=0;j<3;j++) printf("&d ", a[i][j]); a[j][i]=0;

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 11 121 1331 14641

其构成规律是: 第 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( } return min; } [14] )min=max;

(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=a; 则 *(*(p+2)+1)值为【21】 。 (*p)[2];

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


赞助商链接
相关文章:
对二维数组行指针和列指针理解
二维数组的行指针和列指针是任何 c 语言初学者头疼的事情,为了方便理解, 特总结出四点 规律: 1、 对于任意二维数组 int a[ROW][COLUMN]来说,a+i 表示行...
C语言中对二维数组的指针化表示和对二维数组元素的表示
C语言中对二维数组指针化表示和对二维数组元素的表示_计算机软件及应用_IT/计算机_专业资料。c语言数组指针化C 语言中对二维数组指针化表示和对二维 数组元素的...
二重指针与二维数组
二重指针与二维数组_数学_自然科学_专业资料 暂无评价|0人阅读|0次下载|举报文档 二重指针与二维数组_数学_自然科学_专业资料。c语言中二维指针与二维数组间的相关...
二维数组与指针
二维数组与指针 - 一、选择题 (1)有以下程序 main() { int a[3][3],*p,i; p=&a[0][0]; for(i=0;i<9;i++) p[i]=i; for(i=0;...
CC++中二维数组与指针的关系详解(原创)
CC++中二维数组与指针的关系详解(原创)_工学_高等教育_教育专区。C和C++中二维数组与指针的关系详解(原创) 从一道题目说起。 #include <iostream> using name...
关于二维数组地址和指针之间的赋值
关于二维数组地址和指针之间的赋值_数学_自然科学_专业资料。在开发工业以太网项目的时候经常遇到一些小细节问题, 在建立数据报进行传输的过程 中传递 txbuf 缓冲区...
C语言 静态二维数组、动态二维数组、二重指针
/* * 2014-10-14 19:52:51 * * 关于 C 语言的二维数组与指针的关系的问题,是一个很复杂并且深刻的问题。在这里 * 总结一下 静态二维数组、动态二维数组...
对二维数组行指针和列指针理解
二维数组的行指针和列指针是任何 c 语言初学者头疼的事情,为了方便理解, 特总结出四点 规律: 1、 对于任意二维数组 int a[ROW][COLUMN]来说,a+i 表示行...
二维数组与二级指针
#include <stdio.h> int main(){ int a[2][3]; int **p = a; return 0; } 这是数组与指针的问题 首先要搞清楚数组和指针的概念, , 这是问题出现...
C_lab6-3_指针与二维数组_answer
实验6-3 指针与二维数组【实验目的】 实验目的】 1. 2. 3. 4. 掌握二维数组的三种访问方式 掌握利用数组名访问二维数组 能够用指向二维数组元素的指针(元素指针...
更多相关标签: