十一-

发布时间:   来源:文档文库   
字号:
一、单项选择题
1. 分析下面函数,以下说法正确的是 swap(int *p1,int *p2 { int *p; *p=*p1; *p1=*p2; *p2=*p; } A. 交换*p1*p2的值 B. 正确,但无法改变*p1*p2的值 C. 交换*p1*p2的地址 D. 可能造成系统故障,因为使用了空指针 2. int x *pb ,则正确的赋值表达式是 A. pb=&x B. pb=x C. *pb=&x D. *pb=*x 3. 有如下程序段 int *p a=10 b=1 p=&a a=*p+b 执行该程序段后,a 的值为 A. 12 B. 11 C. 10 D. 编译出错 4. 若有以下定义和语句: 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
5. 若有说明:long *p a;则不能通过scanf 语句正确给输入项读入数据的程序段 A. *p=&a scanf"%ld"p; B. p=long *malloc8; scanf"%ld"p; C. scanf"%ld"p=&a; D. scanf"%ld"&a; 6. 若有说明:int i, j=2*p=&i;,则能完成i=j 赋值功能的语句是 A. i=*p; B. *p=*&j; C. i=&j; D. i=**p; 7. 请选出正确的程序段( )。
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, c; s=&k; s=&k; p=&c; p=&c; *p='a'; s=p; *s=1;

8. 若有说明语句:int a,b,c,*d=&c;,则能正确从键盘读入三个整数分别赋给变量abc的语句是( )。

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;
9. 若定义:int a=511,*b=&a;, printf("%d\n",*b;的输出结果为( )。
A 无确定值 B a的地址 C 512 D 511
10. 若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是( )。
A p=q; B *p=*q; C n=*q; D p=n; 11. 若有以下定义和语句
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; 12. 变量的指针,其含义是指该变量的______. a b地址 c d一个标志 13. 若有语句int *point,a=4;point=&a;下面均代表地址的一组选项是__ __. aa,point,*&a b&*a,&a,*point c*&point,*point,&a d&a,&*point ,point 14. 若程序中已包含头文件stdio.h,以下选项中,正确运用指针变量的程序段是( )。
Aint *i=NULL; B float *f=NULL; scanf("%d",i; *f=10.5; Cchar t='m', *c=&t; D long *L; *c=&t; L='\0'; 15. 有以下程序
#include"stdio.h" main(
{ printf("%d\n",NULL; } 程序运行后的输出结果是( )。
A0 B1 C-1 DNULL没定义,出错
16. 设有定义:int a,*pa=&a;以下scanf语句中能正确为变量a读入数据的是( )。
A scanf(%d,pa; B scanf(“%d”,a ; C scanf(%d,&pa; D scanf(“%d”,*pa ; 17. 设有定义:int n1=0,n2,*p=&n2,*q=&n1;以下赋值语句中与n2=n1;语句等价的是
A*p=*q; Bp=q; C*p=&n1; Dp=*q;
18. 若有定义:int x=0, *p=&x;,则语句printf("%d\n",*p;的输出结果是( )。
A)随机值 B0 Cx的地址 Dp的地址
19. 若有说明语句:double *p,a;则能通过scanf语句正确给输入项读入数据的程序段是 (

A*p=&a; scanf(“%lf”,p; B*p=&a; scanf(“%f”,p; Cp=&a; scanf(“%lf”,*p; Dp=&a; scanf(“%lf”,p;

20. 设已有定义:float x;则以下对指针变量p进行定义且赋初值的语句中正确的是(
Afloat *p=1024; Bint *p=float x; Cfloat p=&x; Dfloat *p=&x; 21. int n,*p 则以下语句正确的是(
Aint *q=NULL; B*p=&n; Cscanf“%d”,&p Dprintf“%d\n”,p;

22. 有以下函数

char * fun(char *p { return p; }
该函数的返回值是 )。
A 无确切的值 B 形参p中存放的地址值 C 一个临时存储单元的地址 D 形参p自身的地址值 23. 下列函数定义中,会出现编译错误的是( )。
Amax(int x,int y,int *z Bint max(int x,y { *z=x>y ? x:y; } { int z; z=x>y ? x:y; return z;
} Cmax(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} 24. 已定义以下函数
fun(int *p { return *p; } 该函数的返回值是( )。
A)不确定的值 B)形参p中存放的值
C)形参p所指存储单元中的值 D)形参p的地址值 25. 有以下程序段
main( { int a=5,*b,**c; c=&b; b=&a; „„
} 程序在执行了c=&b;b=&a;语句后,表达式:**c的值是 A)变量a的地址 B)变量b中的值 C)变量a中的值 D)变量b的地址
26. 设有定义:int n=0,*p=&n,**q=&p;则以下选项中,正确的赋值语句是( )。
A p=1; B *q=2; C q=p; D *p=5; 27. 已定义以下函数

int fun(int *p {return *p;}
fun 函数返回值是(

A不确定的值 B)一个整数

C)形参p中存放的值 D)形参p的地址值 28. 要求函数的功能是交换x y 中的值,且通过正确调用返回交换结果.能正确执行

此功能的函数是
A. funa int *xint *y { int *p *p=*x *x=*y*y=*p } B. fund int xint y { int t t=xx=yy=t }


C. func int *xint *y { *x=*y*y=*x} D. fund int *xint *y { *x=*x+*y*y=*x-*y*x=*x-*y } 29、设有如下定义:


int *ptr)( );
则以下叙述中正确的是 A. ptr 是指向一维组数的指针变量 B. ptr 是指向int 型数据的指针变量
C. ptr 是指向函数的指针 ;该函数返回一个int 型数据 D. ptr 是一个函数名 ;该函数的返回值是指向int 型数据的指针
30、若有函数maxa b),并且已使函数指针变量p 指向函数max ,当调用该函数时,

正确的调用方法是
A. *pmax(a ,b B. *pmax(a bC. *p(a b D. *pa b);
31已有函数maxab为了让函数指针变量p 指向函数max正确的赋值方法是

A. p=max B. *p=max C. p=maxab); D. *p=maxab);
32、已有定义 int *p)();指针p 可以

A. 代表函数的返回值 B. 指向函数的入口地址 C. 表示函数的类型 D. 表示函数返回值的类型
若有以下说明和定义 funint *c{ } void main()
{ int *a)()=fun*b(),w[10]c
} 33



在必要的赋值之后,对fun 函数的正确调用语句是
A. a=aw); B.*a)(&c); C. b=*bw); D. funb);
有如下程序 #define N
2 #define M
N+1 #define NUM 2*M+1 main()
{ int i; fori=1;i<=NUM;i++printf"%dn",i; 34
} 该程序中的for循环执行的次数是
A5 B6 C7 D8 35 有以下程序

#define FX,Y)(X*Y

main()
{ int a=3, b=4;
printf"%dn", Fa++, b++));
}
程序运行后的输出结果是

A12 B15 C16 D20 36 有以下程序
#define P 3 int F(int x{ return (P*x*x;} main( { print ("%d\n",F(3+5; } 程序运行后的输出结果是____
A192 B29 C25

二、读程序题,写出程序运行的结果。 1. #include void main( { int *p1,*p2,*p; int a=5,b=8; p1=&a; p2=&b; if(a printf("%d,%d\n",*p1,*p2; printf("%d,%d\n",a,b;
} 2. #include 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;
} 3.
#include
main(
{ int a=1,b=3,c=5; int *p1=&a,*p2=&b,*p=&c; *p=*p1*(*p2; printf("%d\n",c; }

4.
#include
int b=2;
int func(int *a { b += *a; return(b;} main( D、编译出错
{ int a=2, res=2; res += func(&a; printf("%d \n",res; } 5. #include 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; }
5. #include 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; } 6. #include void ast(int x,int y,int *cp,int *dp { *cp=x+y; *dp=x-y; } void main( { int a,b,c,d; a=4; b=3; ast(a,b,&c,&d; printf("%d,%d\n",c,d;
} 8. #include
void prtv(int * x { printf("%d\n",++*x;
}
void main( { int a=25 ;prtv(&a;
} 9. #include
void fun(int *a, int *b, int *c
1


{ int *temp; temp=a; a=b; b=temp; *temp=*b, *b=*c; *c=*temp; } void main( { int a,b,c,*p1,*p2,*p3; a=5; b=7; c=3; p1=&a; p2=&b; p3=&c; fun(p1,p2,p3; printf("%d,%d,%d\n",a,b,c; } 10.
#include funa(int a,int b { return a+b;} funb(int a,int b { return a-b;} sub( int (*t(int,int ,int x,int y
{ return ((*t(x,y;}
void main( { int x ,(*p(int,int ; p=funa; x=sub(p,9,3; x+=sub(funb,8,3; printf("%d\n",x;
} 11. #include

sub1(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 ;} void main( { char a ,b ; a='A' ;b='B' ;sub3(&a ,&b ; putchar(a ;putchar(b ; a='A' ;b='B' ;sub2(&a ,b ; putchar(a ;putchar(b ; a='A' ;b='B' ;sub1(a ,b ; putchar(a ;putchar(b ;
} 12. #include

sub(int x ,int y ,int *z { *z=y-x ; } main( { int a , b , c ; sub(10 ,5 ,&a ; sub(7 ,a ,&b ; sub(a ,b ,&c ; printf("%d ,%d ,%d\n" ,a ,b ,c ; } 以下程序的输出结果是 【】
13
#define MAX(x,y(x>(y?(x:(y #include"stdio.h" main( { int a=5,b=2,c=3,d=3,t; t=MAX(a+b,c+d*10; printf("%d\n",t; } 14 下面程序的运行结果是 【】
#define N 10 #define sx x*x #define fx x*x main()
{ int i1,i2; i1=1000/sN; i2=1000/fN; printf"%d %dn",i1,i2; }

三、填空题
以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出。请填空。 #include "stdio.h"
main( {int *a,*b,*c,num,x,y,z; a=&x;b=&y;c=&z; printf("输入3个整数:";
scanf("%d%d%d",a,b,c; printf("%d,%d,%d\n",*a,*b,*c; num=*a; if(*a>*b__ __; if(num>*c___ _ __; printf("输出最小整数:%d\n",num; } 四、编程题 三、编程
1、编写函数,求级数S=1+2+3+...n,并在主函数中求:
y(123(1234(12345(123456(1234567
#include int f(int; void main( { float s; s=(float(f(3+f(4+f(5/(f(5+f(6+f(7; printf("SUM=%f\n",s; } int f( { } /* SUM=0.484375*/ 2.利用循环语句求 11111(直到第100项的和)。 3572n13.输入一个06的整数,转换成星期输出。例如:输入整数0,则输出“Sunday”。


本文来源:https://www.2haoxitong.net/k/doc/ab4a42e1d1f34693daef3ef5.html

《十一-.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式