全国计算机等级考试二级C语言之指针测试

全国计算机等级考试二级C语言之指针测试
www.educity.cn 作者: 不详 来源:网络 2006年7月26日  

全国计算机等级考试二级C历年试题合集含答案(CHM文件下载)>>

第八部分:指针


一、选择题
(1)设有定义:int  n1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是
  A)*p=*q;  
  B)p=q;   
  C)*p=&n1;   
  D)p=*q;

(2)若有定义:int  x=0, *p=&x;,则语句printf("%d\n",*p);的输出结果是
  A)随机值  
  B)0   
  C)x的地址   
  D)p的地址

(3) 以下定义语句中正确的是
  A) char a='A'b='B';     B) float a=b=10.0;
  C) int a=10,*b=&a;     D) float *a,b=&a;

(4) 有以下程序 
main()
{ int a=7,b=8,*p,*q,*r;
  p=&a;q=&b;
  r=p; p=q;q=r;
  printf("%d,%d,%d,%d\n",*p,*q,a,b);
}
程序运行后的输出结果是
  A) 8,7,8,7   
  B) 7,8,7,8   
  C) 8,7,7,8   
  D) 7,8,8,7

(5) 设有定义:int a,*pa=&a;以下scanf语句中能正确为变量a读入数据的是
  A) scanf(“%d”,pA) ;    
  B) scanf(“%d”,A) ;
  C) scanf(“%d”,&pA) ;    
  D) scanf(“%d”,*pA) ;

(6) 设有定义:int n=0,*p=&n,**q=&p;则以下选项中,正确的赋值语句是
  A) p=1;    
  B) *q=2;    
  C) q=p;    
  D) *p=5;

(7) 有以下程序
void  fun(char  *a,  char  *b)
{  a=b;    (*a)++;  }
main ()
{ char   c1="A", c2="a", *p1, *p2;
p1=&c1;  p2=&c2;   fun(p1,p2);
printf(“&c&c\n”,c1,c2);
}
程序运行后的输出结果是
  A) Ab        
  B) aa        
  C) Aa          
  D) Bb

(8) 若程序中已包含头文件stdio.h,  以下选项中,正确运用指针变量的程序段是
  A) t  *i=NULL;                  B) float  *f=NULL;
   scanf("&d",f);                  *f=10.5;
  C) char  t="m", *c=&t;        D) long   *L;
   *c=&t;                             L=‘\0’;

(9) 有以下程序
#inc1ude   <stdio.h>
main()
{  printf("%d\n", NULL);  }
程序运行后的输出结果是
  A) 0          
  B) 1            
  C) -1          
  D) NULL没定义,出错

(10) 已定义以下函数
fun (int   *p)
{  return   *p:  }
该函数的返回值是
  A) 不确定的值                  
  B) 形参p中存放的值
  C) 形参p所指存储单元中的值    
  D) 形参p的地址值

(11) 下列函数定义中,会出现编译错误的是
  A) max(int  x, int  y,int  *z)     B) int  max(int   x,y)
   { *z=x>y  ? x:y;  }                 int  z ;
                       z=x>y  ? x:y;
                       return  z ;
   }
   C) max (int  x,int  y)            D) int  max(int  x,int  y)
   {  int   z;                         {   return(x>y?x:y) ; }
    z=x>y?x:y;  return(z);
   }

(12) 有以下程序段
main()
{ int  a=5,  *b,   **c;
c=&b;   b=&a;
……
}
程序在执行了c=&b:b=&a;语句后,表达式:**c的值是
  A) 变量a的地址  
  B) 变量b中的值
  C) 变量a中的值 
  D) 变量b的地址

(13) 有以下程序
main()
{ char a,b,c,*d;
 a=’\’;  b=‘\xbc’;
 c=‘\0xab’;  d="\017";
 print("%c%c%c\n",a,b,c,*d);
}
编译时出现错误,以下叙述中正确的是
  A) 程序中只有a=’\’;语句不正确 
  B) b=‘\xbc’;语句不正确
  C) d="\0127";语句不正确    
  D) a=’\’;和c=‘\0xab’;语句都不正确

(14) 若有以下定义和语句
#include    <stdio.h>
int a=4,b=3,*p,*q,*w;
p=&a;  q=&b;  w=q;  q=NULL;
则以下选项中错误的语句是
  A) *q=0;   
  B) w=p;   
  C) *p=a;  
  D) *p=*w;

(15) 有以下程序
int *f(int *x,int *y)
{ if(*x<*y)
  return x;
 else
  return y;
}
main()
{ int a=7,b=8,*p,*q,*r};
}
执行后输出结果是
  A) 7,8,8    
  B) 7,8,7   
  C) 8,7,7   
  D) 8,7,8

(16) 若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是
  A) p=q;   
  B) *p=*q;  
  C) n=*q;  
  D) p=n;

(17) 有以下程序
void fun(char *c,int d)
{   *c=*c+1;d=d+1;
printf(“%c,%c,”,*c,d);
}
main()
{  char a=’A’,b=’a’;
fun(&b,a);  printf(“%c,%c\n”,a,b);
}
程序运行后的输出结果是
  A)B,a,B,a      
  B) a,B,a,B     
  C) A,b,A,b     
  D) b,B,A,b

(18) 若有说明语句:int  a,b,c,*d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是
  A) scanf("%d%d%d",&a,&b,d);   
  B) scanf("%d%d%d",&a,&b,&d);
  C) scanf("%d%d%d",a,b,d);     
  D) scanf("%d%d%d",a,b,*d);

(19) 若定义:int a=511,*b=&a;, 则printf("%d\n",*b);的输出结果为
  A) 无确定值     
  B) a的地址     
  C) 512       
  D) 511

(20) 若有说明:int  i, j=2,*p=&i;,则能完成i=j赋值功能的语句是
  A) i=*p;    
  B)  p*=*&j;  
  C) i=&j;   
  D) i=**p;

(21) 下列程序段的输出结果是
  A) 2 1 4 3         
  B) 1 2 1 2         
  C) 1 2 3 4          
  D) 2 1 1 2
void fun(int  *x, int  *y)
{   printf(“%d  %d”, *x, *y); *x=3; *y=4;}
main()
{  int  x=1,y=2;
   fun(&y,&x);
   printf(“%d %d”,x, y);
}

(22) 下列程序的运行结果是
  A) 6  3            
  B) 3   6          
  C) 编译出错        
  D) 0  0
void fun(int  *a, int  *b)
{  int  *k;
   k=a; a=b; b=k;
}
main()
{  int  a=3, b=6,  *x=&a, *y=&b;
   fun(x,y);
   printf(“%d  %d”, a, b);
}

(23) 有如下程序段
int  *p,a=10,b=1
p=&a;  a=*p+b;
执行该程序段后,a的值为
  A) 12             
  B) 11             
  C) 10            
  D) 编译出错

(24) 有以下函数
char  fun(char *p)
{  return  p;  }
该函数的返回值是
  A) 无确切的值                       
  B) 形参p中存放的地址值 
  B) 一个临时存储单元的地址           
  D) 形参p自身的地址值

(25) 请选出正确的程序段
  A) int  *p;                      B) int  *s, k;
         scanf("%d",p);                *s=100;
          …                                …
  C) int  *s, k;                   D) int  *s, k;
         char *p, c;                      char *p, e;
         s=&k;                             s=&k;
         p=&c;                             p=&c;
         *p='a';                           s=p;
         …                                *s=1;
                                            …

(26) 若有以下定义和语句:
       double  r=99, *p=&r;
       *p=r;
    则以下正确的叙述是
  A) 以下两处的*p含义相同,都说明给指针变量p赋值
  B) 在"double  r=99, *p=&r;"中,把r的地址赋值给了p所指的存储单元
  C) 语句"*p=r;"把变量r的值赋给指针变量p
  D) 语句"*p=r;"取变量r的值放回r中

(27) 以下程序运行后,a的值是
  A) 4             B) 1              C) 0              D) 运行时出错,a无定值
       main()
      {  int   a,k=4,m=6,*p1=&k,*p2=&m;
         a=p1==&m;
         printf("%d\n",a);
      }

(28) 有以下程序
int fun(int  x,int  y,int   *cp,int  *dp)
{  *cp=x+y;    *dp=x-y;  }
main()
{  int a, b, c, d;
a=30;  b=50;
fun(a,b,&c,&d);
    printf("%d,%d\n", c, d);
}
输出结果是
  A) 50,30          
  B) 30,J50          
  C) 80,-20          
  D) 80,20

(29) 若有定义和语句:
int **pp,*p,a=10,b=20;
pp=&p;p=&a;p=&b;printf("%d\n",*p,**pp);
则输出结果是:
  A)10,20       
  B)10,10       
  C)20,10           
  D)20,20

(30) 以下程序的输出结果是
#include
subl(char  a,char b)    {char c; c=a;a=b;b=c;}
sub2(char* a,char b)    {char c; c=*a;*a=b;b=c;}
sub3(char* a,char*b)    {char c; c=*a;*a=*b;*b=c;}       { char a,b;
  a='A';b='B';sub3(&a,&b);putchar(a);putchar(b);
  a='A';b='B';sub2(&a,b);putchar(a);prtchar(b);
  a='A';b='B';sub1(a,b);putchar(a);putchar(b);
}
  A) BABBAB        
  B) ABBBBA   
  C) BABABA          
  D) BAABBA

(31) 若有说明:int i,j=7, *p=&i;,则与i=j;等价的语句是
  A) I= *P;        
  B) *P=*&J;      
  C) i=&j;             
  D) i=* *p;

(32) 要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。能正确招待此功能的函数是
  A)funa(int *x,int *y)            B) funb(int x,int y)
    {int *p;                              {int t;
    *p=*x;*x=*y;*y=*p;}               t=x;x=y;y=t;}
  C) func(int *x,int *y)             D) fund(int x,int y)
    {*x=*y;*y=*x;}                      {*x=*x+*y; *y=*x-*y; *x=*x-*y; }

二、填空题:
(1) 有以下程序
void f( int y,int *x)
{y=y+*x;  *x=*x+y;}
main( )
{  int x=2,y=4;
   f(y,&x);
   printf(“%d   %d\n”,x,y);
}
执行后输出的结果是【1】 。

(2) 下面程序的运行结果是:   [2]   。
void swap(int *a,int *b)
{  int  *t;
t=a;   a=b;  b=t;
}
main()
{  int  x=3,y=5,*p=&x,*q=&y;
swap(p,q);
printf(“%d%d\n”,*p,*q);


(3) 设有以下程序:
main()
{   int   a, b, k=4, m=6, *p1=&k, *p2=&m;
a=pl==&m;
b=(*p1)/(*p2)+7;
printf(“a=%d\n”,a);
printf(“b=%d\n”,b);
}
执行该程序后,a的值为【3】 ,b的值为【4】 。  

 (4) 下列程序的输出结果是 【5】 。
void fun(int *n)
{  while( (*n)--);
     printf(“%d”,++(*n));
}
main()
{  int  a=100;
   fun(&a);
}

(5) 以下函数用来求出两整数之和,并通过形参将结果传回,请填空。
void func(int x,int y, [6] z) 
{   *z=x+y;   }

(6) 函数 void fun(float  *sn, int n)的功能是:根据以下公式计算S,计算结果通过形参指针sn传回;n通过形参传入,n的值大于等于0。请填空。  
  
         void  fun( float *sn, int n)
         {  float  s=0.0, w, f=-1.0;
            int i=0;
            for(i=0; i<=n; i++)
            { f= [7]  * f;
              w=f/(2*i+1);
              s+=w;
            }
             [8] =s;
         }

(7) 以下函数的功能是,把两个整数指针所指的存储单元中的内容进行交换。请填空。 
     exchange(int  *x,  int  *y)
     {  int t;
        t=*y;   *y= 【9】  ;    *x=  【10】 ;
     }

(8) 下面函数要求用来求出两个整数之和,并通过形参传回两数相加之和值,请填空。  
   int add(int x,int y,  【11】  z)
{  【12】  =x+y;}

答案:
一、选择题
01) A   02) B   03) C   04) C   05) A 

06) D   07) A   08) D   09) A   10) C

11) B   12) C   13) D   14) A   15) B 

16) D   17) D   18) A   19) D   20) B

21) A   22) B   23) B   24) B   25) C 

26) D   27) C   28) C   29) D   30) A

31) B   32) D 

二、填空题

(1) 8   4

(2) 3  5

(3) 0

(4) 7

(5) 0

(6) int *

(7) –1

(8) *sn

(9) *x

(10) t

(11) int *

(12) *z

你可能感兴趣的:(全国计算机等级考试二级C语言之指针测试)