昆明理工大学C语言程序设计课后习题答案 下载本文

{ STU c={\ f(c);

printf(\A.Qian,f,95,92 B.Qian,m,85,90 C.Zhao,f,95,92 D.Zhao,m,85,90 第8章指针

二、习题

(一)、是非题

1.运算符“*”有时是单目运算符,有时又可能是双目运算符。

A.对 B.错

2. 取地址运算符“&”与指针运算符“*”的优先级相同,结合方向为自右向左。

A.对 B.错

3.指针变量的类型不是该变量本身的类型,而是它所指向的变量的类型。

A.对 B.错

4.指针变量不可以作为函数的参数。

A.对 B.错

5.&b指的是变量b的地址所存放的值。

A.对 B.错

6. 语句int *p;定义了一个指针变量p,其值是整型的。

A.对 B.错

7. 语句“int *p ;”中*p的含义为取值。 //定义指针变量

A.对 B.错

8. 一个变量的地址就称为该变量的“指针”。

A.对 B.错

9. 语句int i,*p=&i;是正确的C定义。

A.对 B.错

10. 变量的指针,其含义是指该变量的一个标志。

A.对 B.错

11. void 类型的指针不指向某种类型的数据,所以没有意义。

A.对 B.错

12. 表达式*p++的运算顺序为先自增后取值。

A.对 B.错

13. C语言中,执行表达式(*p)++后p的指向改变了。

A.对 B.错 14. 两个指针相加没有意义。

A.对 B.错

15. 若有定义:int *p1,*p2,m=3,n;,则p1=&m;p2=p1;是正确的赋值语句。

A.对 B.错

16.已知int a[4],*p;,则语句p=&a;是正确的。 // p=a;

A.对 B.错

17. char *name[5]定义了一个一维指针数组,它有5个元素,每个元素都是指向字符数据

的指针型数据。

A.对 B.错

18. *(&a[i]+j)与a[i][j]的含义相同。

A.对 B.错

19.若有定义:int (*p)[4];,则标示符p是一个指针,它指向一个含有四个整型元素的一维数组。

A.对 B.错 20.设有以下定义:char *c[2]={\,表示c数组的两个元素中分别存放了字符串\和\的首地址。

A.对 B.错 (二)、选择题

1.变量的指针,其含义是指该变量的______。

A.值 B.地址 C.名 D.一个标志 2.下面能正确进行字符串赋值操作的是______。

A.char s[5]={\ B.char s[5]={'A','B','C','D','E'}; C.char *s; s=\ D.char *s; scnaf(\3.以下语句或语句组中,能正确进行字符串赋值的是______。。

A.char *sp;*sp=\ B.char s[10];s=\C.char s[10];*s=\ D.char *sp=\

4.设有定义:char *c;,以下选项中能够使字符型指针c正确指向一个字符串的是______。

A.char str[]=\C.c=getchar();D.*c=\5.下列语句中,正确的是______。

A.char *s;s=\B.char s[7];s=\C.char *s;s={\

6.已有定义int k=2; int *p1,*p2; 且p1和p2均已指向变量k,下面不能正确执行的赋值

语句是______。 A.k=*p1+*p2; B.p2=k; C.p1=p2; D.k=*p1*(*p2);

7.若有定义:double a[10],*s=a;,以下能够代表数组元素a[3]的是______。

A.(*s)[3]B.*(s+3) C.*s[3]D.*s+3 8.若有定义int a[5],*p=a;,则对a数组元素的正确引用是______。

A.*&a[5] B.a+2 C.*(p+5) D.*(a+2)

9.若有定义语句: double a,*p=&a;以下叙述中错误的是______。

A.定义语句中*是一个间接访问运算符 B.定义语句中*号只是一个说明符

C.定义语句中p只能存放double类型变量的地址

D.定义语句中,*p=&a 把变量a的地址作为初始赋给指针变量p

10.若有程序段:char str[]=\则下列叙述正确的是______。

A.*p与str[0]相等

B.str数组长度和p所指向的字符串长度相等 C.str和p完全相同

D.数组str中的内容和指针变量p中的内容相等

11.若有语句int *point,a=4;和point=&a; 下面均代表地址的一组选项是______。

A.a,point,*&a B.&*a,&a,*point C.&point,*point,&a D.&a,&*point,point 12.以下选项中,对指针变量p的正确操作是______。

A.int a[5],*p; p=&a; B.int a[5],*p; p=a;

C.int a[5]; int *p=a=1000; D.int a[5]; int *p1,*p2=a; *p1=*p2; 13.设有定义语句:int m[]={2,4,6,8},*k=m;,以下选项中表达式的值为6的是______。

A.*(k+2) B.k+2 C.*k+2 D.*k+=2 14.若有定义:int *p,m=5,n; ,以下正确的程序段是______。

A.p=&n;scanf(\C.scanf(\D.p=&n;*p=m; 15.以下程序的运行结果是______。

#include\main()

{int m=1,n=2,*p=&m,*q=&n,*r; r=p;p=q;q=r;

printf(\

A.1,2,1,2 B.1,2,2,1 C.2,1,2,1 D.2,1,1,2 16.若有定义语句:int a[4][10],*p,*q[4];且0≤i<4,则错误的赋值是

A.p=a B.q[i]=a[i] C.p=a[i] D.p=&a[2][1]

17.以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是______。

#include\main()

{ int *p,q,a,b; p=&a; printf(\? } A.*p表示的是指针变量p的地址

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

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

18.程序段char *s=\的运行结果是______。

A.cde B.字符'c'

C.字符'c'的地址 D.无确定的输出结果 19.下面程序段的运行结果是______。

char str[]=\// *(p+3) 表示p的地址从开始处移动3

A.67 B.0 C.字符'C'的地址 D.字符'C' 20.下面程序段的运行结果是______。

char a[]=\

while(*p!='u') {printf(\

A.LANGUAGE B.language C.LANG D.langUAGE

21.若有定义char s[10]; ,则在下面表达式中不表示s[1]的地址的是______。

A.s+1 B.s++ C.&s[0]+1 D.&s[1] 22.以下程序的运行结果是______。

#include #include main()

{char str[][20]={\printf(\printf(\

A.9,One*WorldB.9,One*Dream!C.10,One*Dream! D.10,One*World 23.下列函数的功能是______。

fun(char *a,char *b)

{ while((*b=*a)!='\\0') {a++,b++;} } A.使a所指字符串赋给b所指空间 B.使指针b指向a所指字符串

C.将a所指字符串和b所指字符串进行比较 D.检查a和b所指字符串中是否有'\\0' 24.以下程序的运行结果是______。

#include main()

{char *s={\

do{printf(\A.abc B.789 C.7890 D.979899 25.以下程序的运行结果是______。

#include void fun(int *p)

{printf(\main()

{int a[10]={1,2,3,4,5,6,7,8,9,10}; fun(&a[3]);}

A.5 B.6 C.8 D.9 26.若有定义语句: char *s=\,以下选项中能够输出“OK”的语句是______。

A.if(strcmp(s1,s2)=0) puts(s1); B.if(strcmp(s1,s2)!=0) puts(s2);

C.if(strcmp(s1,s2)=1) puts(s1);D.if(strcmp(s1,s2)!=0) puts(s1); 27.以下程序的运行结果是______。

#include

void fun(char *c,int d) {*c=*c+1;d=d+1;

printf(\main()

{char b='a',a='A'; fun(&b,a);

printf(\

A.b,B,b,AB.b,B,B,A C.a,B,B,a D.a,B,a,B 28.有以下定义和语句:

structworkers

{int num;char name[20];char c;

struct{ int day;int month;int year;}s; }; struct workers w,*pw; pw=&w;

能给w中year成员赋1980的语句是______。

A.*pw.year=1980; B.w.year=1980C.pw—>year=1980;D.w.s.year=1980; 29.下面程序把数组元素中的最大值放入a[0]中,则在if 语句中的条件表达式应该是______。

main()

{ int a[10]={6,7,2,9,1,10,5,8,4,3},*p=a,i;

for(i=o;i<10;i++,p++) if(________) *a=*p; printf(\ A.p>a B.*p>a[0] C.*p>*a[0] D.*p[0]>*a[0] 30.以下程序的运行结果是______。

#include main()

{int a[]={10,20,30,40},*p=a,i; for(i=0;i<=3;i++) {a[i]=*p;p++;} printf(\

A.30 B.40 C.10 D.10 31.以下程序的输出结果是______。

#include main()

{char *s=\int k=0,a=0;

while(s[k+1]!='\\0') {k++;

if(k%2==0) {a=a+(s[k]-'0'+1);continue;} a=a+(s[k]-'0');}

printf(\

A.k=6 a=11 B.k=3 a=14C.k=4 a=12D.k=5 a=15 32. 以下程序的输出结果是______。

#include main()

{char a[5][10]={\int i,j;char t; for(i=0;i<4;i++) for(j=i+1;j<5;j++)

if(a[i][0]>a[j][0]){t=a[i][0];a[i][0]=a[j][0];a[j][0]=t;} puts(a[1]);}

A.fwo B.fix C.two D.owo 33.下面程序对两个整型变量的值进行交换。以下正确的说法是______。

main()

{ int a=10,b=20;printf(\swap(&a,&b); printf(\swap(int p,int q)

{ int t; t=p; p=q; q=t; } A.该程序完全正确

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