您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C语言 >> 模拟题 >> 正文    
  全国计算机等级考试二级C语言之二维数组与指针2 【注册男护士专用博客】          

全国计算机等级考试二级C语言之二维数组与指针2

www.nanhushi.com     佚名   不详 

一、选择题
(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分

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目