|
|
一、 单项选择题 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. float *i=NULL; B. float a,*f=&a; 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.void 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="\017";语句不正确 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. 有以下程序: #include <stdio.h> int *f(int *x,int *y) { if(*x<*y) return x; else return y; } void main() { int a=7,b=8,*p,*q,r; p=&a; q=&b; r=*f(p,q); printf("%d ,%d,%d\n ",a,b,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;
二、填空题 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); } 执行后输出的结果是______ 。
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的值为______ ,b的值为______ 。
4. 下列程序的输出结果是 ______ 。 void fun(int *n) { while( (*n)--); printf(“%d”,++(*n)); } main() { int a=100; fun(&A); }
5. 以下函数用来求出两整数之和,并通过形参将结果传回,试完整程序。 void func(int x,int y, ______ z) { *z=x+y; }
6. 函数 void fun(float *sn, int n)的功能是:根据公式s=1-1/3+1/5-...1/(2n+1)计算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=______* f; w=f/(2*i+1); s+=w; } ______=s; }
7. 以下函数的功能是,把两个整数指针所指的存储单元中的内容进行交换,试完整程序。 exchange(int *x, int *y) { int t; t=*y; *y= ______ ; *x= ______ ; }
8. 下面函数要求用来求出两个整数之和,并通过形参传回两数相加之和值,试完整程序。 int add(int x,int y, ______ z) { ______ =x+y;}
三、程序设计题 1. 编写一个函数,将数组中n个数按反序存放。 2. 用地址法输入输出二维数组各元素。 3. 用指针法输入输出二维数组各元素。 |
|
答案: |
1.单项选择题 1) A 2)B 3)C 4)C 5)A 6)D 7)A 8)D 9)A 10)C 11)B 12)C 13)D 14)A 15)B 16)D 17)D 18)A 19)D 20) B 2.填空题 (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
3.程序设计题 (1) 编写一个函数,将数组中n个数按反序存放。 void inv(int *x,int n) { int *p,m,t,*i,*j; m=(n-1)/2; i=x; j=x+n-1; p=x+m; for(;i<=p;i++,j--) { t=*i; *i=*j; *j=t ;} return; } main() { int i,arr[10],*p=arr; printf("The original array : \n"); for(i=0;i<10;i++,p++) scanf("%d",p); printf("\n"); p=arr; /* pay attention to reassigning for p */ inv(p,10); printf(" The array has been inverted :\n"); for(p=arr;p<arr+10;p++) printf("%d",*p); printf("\n"); }
(2) 用地址法输入输出二维数组各元素。 #include <stdio.h> main( ) { int a[3][4]; int i,j; for(i = 0; i<3; i++) for(j = 0; j<4; j++) scanf("%d",a[i]+j); / *地址法* / for(i = 0; i<3; i++) { for(j = 0; j<4; j++) printf("%4d",*(a[i]+j)); /* *(a[i]+j) 是地址法所表示的数组元素* / printf(" "); } } 运行程序: 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12
(3) 用指针法输入输出二维数组各元素。 #include<stdio.h> main( ) { int a[3][4],*ptr; int i,j; ptr = a[0]; for(i = 0; i<3; i++) for(j = 0; j< 4; j++) scanf("%d", ptr++); / *指针的表示方法* / ptr = a[0]; for(i = 0; i<3; i++) { for(j = 0; j<4; j++) printf("%4d", *ptr++); printf(" "); } } 运行程序: 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 |
|