C语言第九章指针习题 下载本文

内容发布更新时间 : 2024/6/26 23:38:31星期一 下面是文章的全部内容请认真阅读。

第九章 指针 9.1 选择题

[题9.1] 以下程序的运行结果是____。 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(”%4d,%4d,%4d\n”,a,b,c); }

A) 5,2,3 B)-5,-12,-7 C)-5,-12,-17 D)5,-2,-7

[题9.2] 执行以下程序后,a的值为[1l,b的值为[2]。 main()

{int a,b,k=4,m=6,*p1=&k,*p2=&m; a=p1==&m;

b=(-*p1)/(*p2)十7; print{(”a=%d\n”,a); printf(”b=%d\n”,b); }

[1l A)一1 B)1 C)0 D)4 [2] A)5 B)6 C)7 D)10

[题9.3]下面程序应能对两个整型变量的值进行交换。以下正确的说法是____ main()

{inta=10,b=20;

printf(”(1)a=%d,b=%d\\n”,a,b); swap(%d,%b);

printf(”(2)a=%d,b=%d\n”,a,b) }

Swap(int p,int q) {int t;

t=p;p=q;q=t;} A)该程序完全正确

B)该程序有错,只要将语句swap(&d,&b);中的参数改为a,b即可

C)该程序有错,只要将swap()函数中的形参p和q以及t均定义为指针(执 行语句不变)即可 D)以上说法都不正确

[题9.4]有四组对指针变量进行操作的语句,以下判断正确的选项是____ (1)int *p,*q; q=p; int a,*p,*q; p=q=&a; (2)int a,*p,*q; q=&a;p=*q; int a=20,*p; *p=a;

(3)int a=b=0,*p; p=&a; b=*p; int a=20,*p,*q=&a;*p=*q; (4)int a=20,*p,*q=&a; p=q; int p,*q; q=&p;

A)正确:(1); 不正确:(2),(3),(4) B)正确:(1),(4); 不正确:(2),(3)

C)正确:(3); 不正确:(1),(2),(4) D)以上结论都不正确

[题9.5]以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是____。 main()

{ int *p,*q,a,b; P=&a;

printf(\:”); scanf(\%d”,*p);

A)*p表示的是指针变量p的地址

B)*p表示的是变量a的值,而不是变量a的地址 C)*p表示的是指针变量p的值

D)*p只能用来说明p是一个指针变量

[题9.6]以下程序有错,错误原因是____ main()

{int *p,i; char *q,ch; P=&i; q=&ch; *p=40; *p=*q; . . . }

A)p和q的类型不一致,不能执行*p=*q;语句

B)*p中存放的是地址值,因此不能执行*p=40;语句 C)q没有指向具体的存储单元,所以*q没有实际意义

D)q虽然指向了具体的存储单元,但该单元中没有确定的值,所以不能执行 *p=*q;语句

[题9.8]已有定义 int k=2;int *ptrl,*ptr2;且ptrl和ptr2均已指向变量k,下面不能正确执行的赋值语句是____。

A) k=*ptr1+*ptr2; B)ptr2=k;

C) ptr1=ptr2; D)k=*ptrl*(*ptr2); 一O

[题9.9]变量的指针,其含义是指该变量的____. A)值 B)地址 C)名 D)一个标志

[题9.10]若已定义inta=5;下面对(1),(2)两个语句的正确解释是____ (1)int *p=&a; (2)*p=a;

A)语句(1)和(2)中的*p含义相同,都表示给指针变量p赋值

B)(1)和(2)语句的执行结果,都是把变量a的地址值赋给指针变量p C)(1)在对p进行说明的同时进行初始化,使p指向a (2)将变量a的值赋给指针变量p

D)(1)在对p进行说明的同时进行初始化,使p指向a (2)将变量a的值赋于*p

[题9.11] 若有语句int*point,a=4;和point=&a; 下面均代表地址的一组选项是____. A)a,point,*&a B)&*a,&a,*point C)*&point,*point,&a D)&a,&*point,point

[题9.13]若有说明:int *p,m=5,n; 以下正确的程序段是____ A) p=&n;

scanf(”%d”,&p); B) p=&n;

scanf(”%d”,*p); C) scanf(”%d”,&n); *p=n; D)p=&n; *p=m;

[题9.14] 若有说明: int *pl,*p2,m=5,n;以下均是正确赋值语句的选项是____ A)p1=&m;p2=&p1;

B)p1=&m;p2=&n;*p1=*p2; C)p1=&m;p2=p1; D)p1=&m;*p2=*p1;

[题9.15]已有变量定义和函数调用语句:int a=25; print_value(&a);下面函数的 正确输出结果是____。

void print_value(int * x) {printf(”%d\n”,++*x);} A)23 B)24 C)25 D)26