当前位置:首页 >> 军事/政治 >>

二维数组与指针


一、选择题 (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++) 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)以下程序中,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++) 【2】 = a[N-1][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 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++) 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}}; 则 A’=3 7 11 15 4 8 12 16

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( [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 06) C 11) D 16) B 21) D 26) C 31) C 36) C 02)B 07) D 12) C 17) D 22) A 27) A 32) D 03) B 08) D 13) A 18) A 23) B 28) B 33) A 04) B 09) B 14) B 19) C 24) C 29) D 34) A 05) D 10) B 15) C 20) A 25) C 30) C 35) D

二、填空题: (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 分


赞助商链接
相关文章:
用指针处理二维数组
用指针处理二维数组_IT/计算机_专业资料。用指针处理二维数组对行的处理 //处理二维数组的行 #include<stdio.h> int main() { int a[3][4]={{1,2,3,4...
对二维数组行指针和列指针理解
二维数组的指针和列指针是任何 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...
C语言 静态二维数组、动态二维数组、二重指针
在这里 * 总结一下 静态二维数组、动态二维数组指针引用、下标引用 之间的关系。如下: * **概述 * * 在 C 语言中,对于静态数组,数组维数再多,它也是一维...
对二维数组行指针和列指针理解
二维数组的指针和列指针是任何 c 语言初学者头疼的事情,为了方便理解, 特总结出四点 规律: 1、 对于任意二维数组 int a[ROW][COLUMN]来说,a+i 表示行...
二维数组与二级指针
#include <stdio.h> int main(){ int a[2][3]; int **p = a; return 0; } 这是数组与指针的问题 首先要搞清楚数组和指针的概念, , 这是问题出现...
指向二维数组的指针
指向二维数组的指针_小学作文_小学教育_教育专区。指向二维数组的指针 一. 二维数组元素的地址 为了说明问题, 我们定义以下二维数组: int a[3][4]={{0,1,2,...
更多相关标签: