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=20,*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=t; }
二、 填空题
[8.13] 以下程序段的输出结果是_____.
int *var,b;
ab=100; var =&ab; ab=*var+10; printf (\
[8.14] 以下程序的输出结果是_____.
int ast(int x, int y, int *cp,int *dp) {*cp=c+y; *dp=x-y; }
main()
{int a,b,c,d; a=4;b=3;
ast(a,b,&c,&d);
printf(\}
[8.15] 若有定义:char ch;
(1)使指针p可以指向变量ch的定义语句是_____. (2)使指针p可以指向变量ch的赋值语句是_____.
(3)通过指针p给变量ch读入字符的scanf函数调用语句是_____. (4)通过指针p给变量ch赋字符的语句是______. (5)通过指针p输出ch中字符的语句是_____.
[8.16] 若有图8.5所示五个连续的int类型 的 存储单元并赋值如图,且 p和s的基本类型皆为int,p已指向存储单元a[1].
(1)通过指针p,给s赋值,使其指向最后一个存储单元a[4]的语句是____. (2)用以移动指针s,使之指向中间的存储单元 a[2]的表达式是_____. (3)已知k=2,指针s已指向存储单元a[2],表达式*(S+k)的值是_____. (4)指针s已指向存储单元a[2],不移动指针s,通过s引用存储单元a[3]的 表达式是____.
(5)指针s指向存储单元a[2],p指向存储单元a[0],表达式s-p的值是____. (6)若p指向存储单元a[0],则以下语句的输出结果是_____.
for(i=0;i<5;i++)printf(\ printf(\
三、 编程题
[8.17] 请编写函数,其功能是对传送过来的两个浮点数求出和值与差值,
并通过形参传送回调用函数.
[8.18] 请编写函数,对传送过来的三个数选出最大和最小数,
并通过形参传回调用函数.
第九章 数组
一、选择题
[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))
[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(\_); . . }
[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(\
[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;i [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(\} [9.6] 以下程序的输出结果是 A) 6 B) 8 C) 4 D) 2 main() { int a[]={2,4,6,8},*p=a,i; for(i=0;ia,4;i++) a[i]=*p++; printf(\} [9.7] 以下程序的输出结果是 A) 720 B) 120 C) 24 D) 6 f(int b[],int n) { int i,r=1; for(i=0;i<=n;i++) r=r*b[i]; return r; } main() { int x,a[]={2,3,4,5,6,7,8,9}; x=f(a,3); printf(\} [9.8] 以下程序中若第一个printf语句输出的是194,则第二个printf语句的输出结果是 A) 212 B) 204 C) 1a4 D) 1a6 main() { int a[]={1,2,3,4,5,6,7,8,9,0},*p; p=a; printf(\ printf(\} [9.9] 以下程序的输出结果是 A) 0987654321 B) 4321098765 C) 5678901234 D) 0987651234 fun(int *s,int n1,int n2) { int i,j,t; i=n1; j=n2; while(i { t=*(s+i); *(s+i)=*(s+j); *(s+j)=t; i++; j--; } } main() { int a[10]={1,2,3,4,5,6,7,8,9,0},i,*p=a; fun(p,0,3); fun(p,4,9); fun(p,0,9); for(i=0;i<10;i++) printf(\} [9.10] 以下程序的输出结果是 A) 4 4 B) 2 2 C) 2 4 D) 4 6 main() { int a[5]={2,4,6,8,10},*p,**k; p=a; k=&p; printf(\ printf(\ } [9.11] 当运行以下程序时输入三行,每行都是在第一列上开始,<CR>代表Enter键; a b A)abcdef B)a C)a D)a b b b c cd cdef d e f #include \#define N 6 main() { char c[N]; int i=0; for(i=0;i [9.12] 若有定义和语句: int c[4][5],(*cp)[5]; cp=c; 则对C数组元素的引用正确的是 A) cp+1 B) *(cp+3) C) *(cp+1)+3 D) *(*cp+2) [9.13] 若已定义: int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},(*prt)[3]=a,*p=a[0]; 则能够正确表示数组元素a[1][2]的表达式是 A) *((*prt+1)[2]) B) *(*(p+5)) C) (*prt+1)+2 D) *(*(a+1)+2) [9.14] 若有定义和语句: int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},(*prt)[3]=a,*p[4],i; for(i=0;i<4;i++) p[i]=a[i]; 则下能够正确表示a数组元素的表达式是 A) a[4][3] B) p[0][0] C) prt[2][2] D)(*(p+1))[1] [9.15] 以下程序的输出结果是 A) 23 B) 26 C) 33 D) 36 main() { int aa[3][3]={{2},{4},{6}},i,*p=&aa[0][0]; for(i=0;i<2;i++) { if(i==0) aa[i][i+1]=*P+1; else ++p;