2013年计算机二级考试C语言第八章课后题及参考答案
第八章 指针
一、选择题
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 <stdio.h>
main()
{ printf("%d\\n",NULL); }
答案: 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("%d,%d,%d\\n",a,b,c);
}
答案: 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("%d\\n",n);
}
答案: 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
计算机二级C语言章节练习在线测试 | ||
第8章 | 地址和指针 |
8.8 以下程序的输出结果是
A) 23
B) 24
C) 25
D) 26
void prtv(int *x)
{ printf("%d\\n",++*x); }
main()
{ int a=25;
prtv(&a);
}
答案: D
8.9 以下程序的输出结果是
A) 运行出错
B) 100
C) a的地址
D) b的地址
main()
{ int **k, *a b=100;
a=&b; k=&a;
printf("%d\\n",**k);
}
答案: 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("%2.0f,%2.0f\\n",x,y);
}
答案: C
8.11 以下程序的输出结果是
A) 9.000000
B) 1.500000
C) 8.000000
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("%f\\n",a);
}
答案: C
8.12 以下四个程序中不能对两个整形值进行交换的是
A) main()
{ int a=10,b=20;
swap(&a,&b);
printf("%d%d\\n",a,b);
}
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("%d%d\\n",a,b);
}
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("%d%d\\n",*a,*b);
}
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("%d%d\\n",a,b);
}
swap(int *p, int *q)
{ int t;
t=*p; *p=*q; *q=st;
}
答案:C
计算机二级C语言章节练习在线测试 | ||
第8章 | 地址和指针 |
二、填空题
8.13 以下程序段的输出结果是_____。
int *var,ab;
ab=100; var=&ab; ab=*var+10;
printf("%d\\n",*var);
答案: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("%d %d\\n",c,d);
}
答案:7 1
8.15 若有定义:char ch;
(1) 使指针p可以指向变量ch的定义语句是_____。
答案:char *p=&ch;
(2) 使指针p可以指向变量ch的赋值语句是_____。
答案:p=&ch;
(3) 通过指针p给变量ch读入字符scanf函数调用语句是_____。
答案:scanf("%c",*p);
(4) 通过指针p给变量ch的赋字符的语句是_____。
答案:ch=*p;
5) 通过指针p输出ch中字符的语句是_____。
答案: printf("%c",*p);
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("%d ",*(p+i));
printf("\\n");
答案:10 20 30 40 50
计算机二级C语言章节练习在线测试 | ||
第8章 | 地址和指针 |