二维数组与指针.docx
《二维数组与指针.docx》由会员分享,可在线阅读,更多相关《二维数组与指针.docx(24页珍藏版)》请在冰点文库上搜索。
二维数组与指针
二维数组与指针
一、选择题
(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)012
B)123
C)234
D)345
(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)10
20
00
C)12
30
00
D)10
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
1112
16
则在程序下划线处应填入的是
A)i-1
B)i
C)i+1
D)4-i
(4)以下能正确定义二维数组的是
A)inta[][3];
B)inta[][3]={2*3};
C)inta[][3]={};
D)inta[2][3]={{1},{2},{3,4}};
(5)若有以下说明和语句,intc[4][5],(*p)[5];p=c;能正确引用c数组元素的是
A)p+1
B)*(p+3)
C)*(p+1)+3
D)*(p[0]+2))
(6)有以下定义和语句
inta[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)有以下程序
intf(intb[][4])
{inti,j,s=0;
for(j=0;j<4;j++)
{ i=j;
if(i>2) i=3-j;
s+=b[i][j];
}
returns;
}
main()
{inta[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)456
B)258
C)369
D)789
(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()
{ intaa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}};
inti,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
printf(“%d\n”,s);
}
该程序的输出结果是
A)18
B)19
C)20
D)21
(23)下列程序执行后的输出结果是
A)3
B)6
C)9
D)随机数
main()
{inta[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)52
B)51
C)53
D)97
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)若有以下定义和语句:
intw[2][3],(*pw)[3];
pw=w;
则对w数组元素非法引用是
A)*(w[0]+2)
B)*(pw+1)[2]
C)pw[0][0]
D)*(pw[1]+2)
(29)若有以下说明:
intw[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()
{intt[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)定义如下变题和数组:
inti;
intx[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句的输出结果是
for(i=0;i<3;i++)printf("%d",x[i][2-1]);
A)159
B)147
C)357
D)369
(32)设有以下定义:
inta[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
intaa[3][3]={{2},{4},{6}};
main()
{inti,*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()
{inta[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数组元素的正确引用
intc[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
voidrotate(int a[][N],int b[][N])
{int i,j;
for(i=0;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");
}
voidfun(int m,intn,intar[][4],int*br)
{
inti,j,x;
for(i=0;i { x=ar[i][0];
for(j=0;j if(x 【3】 =x;
}
(3)以下程序中,函数sumColumM的功能是:
求出M行N列二维数组每列元素中的最小值,并计算它们的和值。
和值通过形参传回主函数输出。
请填空。
#define M2
#define N4
voidSumColumMin(inta[M][N],int*sum)
{inti,j,k,s=0;
for(i=0;i {k=0;
for(j=1;j if(a[k][i]>a[j][i])k=j;
s+= 【4】 ;
}
【5】 =s;
}
main()
{intx[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(inta[][N])
{ inti,j,t;
for(i=0;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 { x[i][0]=【11】=1;
for(j=1;j
x[i][j]=【12】;
}
}
(8) fun函数的功能是:
首先对a所指的N行N列的矩阵,找出各行中的最大的数,再求这N个最大值中的最小的那个数作为函数值返回。
请填空。
#include
#define N 100
int fun(int(*a)[N])
{int row,col,max,min;
for(row=0;row{for(max=a[row][0],col=1;colif( [13] )max=a[row][col];
if(row==0)min=max;
elseif( [14] )min=max;
}
return min;
}
(9)以下程序中,select函数的功能是:
在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标。
请填空。
#defi