main()
{ long s; int k,n; scanf(\ s=_____;
for(k=0; k<=n; k++) s=s+_____; printf(\}
答案:1L、s*i、0、f(k)
第八章 指针 一、 选择题
8.1 若有定义:int x,*pb; 则以下正确的赋值表达式是
A) pb=&x B) pb=x C) *pb=&x D) *pb=*x 答案: A 8.2 以下程序的输出结果是
A) 因变量无定义输出不定值 B) 0 C) -1 D) 1 #include
{ printf(\ } 答案: B 8.3 以下程序的输出结果是
A) 5,2,3 B) -5,-12,-7 C) -5,-12,-17 D) 5,-2,-7 void 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(\ }
答案: B 8.4 以下程序的输出结果是
A) 4 B) 6 C) 8 D) 10 main()
{ int k=2,m=4,n=6; int *pb=&k,*pm=&m,*p; *(p=&n)=*pk*(*pm); printf(\ }
答案: C
8.5 已知指针p的指向如图8.5所示,则执行语句*p++; 后,*p的值是
A) 20 B) 30 C) 21 D) 31
答案: B
8.6 已知指针p的指向如图8.5所示,则表达式*++p的值是
A) 20 B) 30 C) 21 D) 31 答案: B
8.7 已知指针p的指向如图8.5所示,则表达式++*p的值是
A) 20 B) 30 C) 21 D) 31
答案: C 8.8 以下程序的输出结果是
A) 23 B) 24 C) 25 D) 26
void prtv(int *x)
{ printf(\ } main()
{ int a=25; prtv(&a); }
答案: D 8.9 以下程序的输出结果是
A) 运行出错 B) 100 C) a的地址 main()
{ int **k, *a b=100; a=&b; k=&a; printf(\ }
答案: B 8.10 以下程序的输出结果是
A) 4,3 B) 2,3 C) 3,4 D) 3,2
void fun(float *a,float *b) { float w; *a=*a+*a; w=*a; *a=*b; *b=w; } main()
{ float x=2.0,y=3.0; float *px=&x,*py=&y; fun(px,py);
printf(\ }
答案: C 8.11 以下程序的输出结果是
A) 9.000000 B) 1.500000 C) 8.000000 D) b的地址 D) 10.500000
void sub(float x,float *y,float *z) { *y=*y-1.0; *z=*z+x; } main()
{ float a=2.5,b=9.0,*pa,*pb; pa=&a,pb=&b; sub(b-a,pa,pa); printf(\ }
答案: C 8.12 以下四个程序中不能对两个整形值进行交换的是 A) main() { int a=10,b=20; swap(&a,&b);
printf(\}
swap(int *p, int *q) { int *t,a; t=&a;
*t=*p; *p=*q; *q=*t; }
B) main() { int a=10,b=20; swap(&a,&b);
printf(\}
swap(int *p, int *q) { int t;
t=*p; *p=*q; *q=t; } C) main() { int *a,*b; *a=10,*b=20; swap(a,b);
printf(\}
swap(int *p, int *q) { int t;
t=*p; *p=*q; *q=t; }
D) main() { int a=10,b=20; int *x=&a,*y=&b; swap(x,y);
printf(\}
swap(int *p, int *q) { int t;
t=*p; *p=*q; *q=st; }
答案:C 二、 填空题
8.13 以下程序段的输出结果是_____。 int *var,ab;
ab=100; var=&ab; ab=*var+10; printf(\ 答案:
100 8.14 以下程序的输出结果是_____。
int ast(int x,int y,int *cp,int *dp) { *cp=x+y; *dp=x-y; } main()
{ int a,b,c,d; a=4; b=3; ast(a,b,&c,&d);
printf(\ } 答案:7 1 8.15 若有定义:char ch;
(1) 使指针p可以指向变量ch的定义语句是_____。 答案:char *p=&ch;
(2) 使指针p可以指向变量ch的赋值语句是_____。 答案:p=&ch;
(3) 通过指针p给变量ch读入字符scanf函数调用语句是_____。 答案:scanf(\;
(4) 通过指针p给变量ch的赋字符的语句是_____。 答案:ch=*p;
5) 通过指针p输出ch中字符的语句是_____。 答案: printf(\;
8.16 若有如图8.5所示五个连续的int类型的存储单元并赋值如图,且p和s的基类型皆为int,p已指向存储单元a[1]。
(1) 通过指针p,给s赋值,使其指向最后一个存储单元a[4]的语句是____。 答案: s=p+3;
(2) 用以移动指针s,使之指向中间的存储单元a[2]的表达式是____。 答案: s=s-2;
(3) 已知k=2,指针s已指向存储单元a[2],表达式*(s+k)的值是____。 答案: 50
(4) 指针s已指向存储单元a[2],不移动指针s,通过s引用存储单元a[3]的表达式是____。 答案: *(a+1)
5) 指针s已指向存储单元a[2],p指向存储单元a[0],表达式s-p的值是____。
答案: 2
6) 若p指向存储单元a[0],则以下语句的输出结果是____。 for(i=0; i<5;i++) printf(\ printf(\ 答案:10 20 30 40 50 第九章 数组
一、 选择题 9.1 若已定义:
int a[ ]={0,1,2,3,4,5,6,7,8,9},*p=a,i;
其中0≤i≤9,则对a数组元素的引用不正确的是 A)a[p-a] B)*(&a[i]) C)p[i] D)*(*(a+i)) 答案:D
9.2 以下程序段给数组所有元素输入数据,应在下划线处填入的是 A)a+(i++) B)&a(i+1) C)a+i D)&a[++i]
main() {
int a[10],i=0;
while(i<10)scanf(\ . . .
}
答案:D
9.3 以下程序的输出结果是
A)3 B)4 C)1 D)2
main() {
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; printf(\ }
答案:A
9.4、 以下程序的输出结果是
A)不确定的值 B)3 C)2 D)1
main() {
int n[2]={0},i,j,k=2; for(i=0;i for(j=0;j 答案: A 9.5 以下程序的输出结果是 A)17 B)18 C)19 D)20 main() { int a[ ]={2,4,6,8,10},y=1,x,*p; p=&a[1]; for(x=0;x<3;x++) y+=*(p+x); printf(\ } 答案: C 9.6 以下程序的输出结果是 A)6 B)8 C)4 D)2 main() {
《全国计算机等级考试二级教程——C语言程序设计》课后题及参考答案
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)