二维数组与指针.docx

上传人:b****1 文档编号:1853164 上传时间:2023-05-01 格式:DOCX 页数:24 大小:21.02KB
下载 相关 举报
二维数组与指针.docx_第1页
第1页 / 共24页
二维数组与指针.docx_第2页
第2页 / 共24页
二维数组与指针.docx_第3页
第3页 / 共24页
二维数组与指针.docx_第4页
第4页 / 共24页
二维数组与指针.docx_第5页
第5页 / 共24页
二维数组与指针.docx_第6页
第6页 / 共24页
二维数组与指针.docx_第7页
第7页 / 共24页
二维数组与指针.docx_第8页
第8页 / 共24页
二维数组与指针.docx_第9页
第9页 / 共24页
二维数组与指针.docx_第10页
第10页 / 共24页
二维数组与指针.docx_第11页
第11页 / 共24页
二维数组与指针.docx_第12页
第12页 / 共24页
二维数组与指针.docx_第13页
第13页 / 共24页
二维数组与指针.docx_第14页
第14页 / 共24页
二维数组与指针.docx_第15页
第15页 / 共24页
二维数组与指针.docx_第16页
第16页 / 共24页
二维数组与指针.docx_第17页
第17页 / 共24页
二维数组与指针.docx_第18页
第18页 / 共24页
二维数组与指针.docx_第19页
第19页 / 共24页
二维数组与指针.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

二维数组与指针.docx

《二维数组与指针.docx》由会员分享,可在线阅读,更多相关《二维数组与指针.docx(24页珍藏版)》请在冰点文库上搜索。

二维数组与指针.docx

二维数组与指针

二维数组与指针

一、选择题

(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;col

if(   [13]   )max=a[row][col];

   if(row==0)min=max;

   elseif(   [14]   )min=max; 

 }

return min;

}

(9)以下程序中,select函数的功能是:

在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标。

请填空。

#defi

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2