指针 c语言 f(x amp n),全国计算机等级考试二级C语言之指针测试

第八部分:指针

一、选择题

(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  

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   

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值