C语言指针习题附答案.docx

上传人:b****2 文档编号:1969412 上传时间:2023-05-02 格式:DOCX 页数:18 大小:21.02KB
下载 相关 举报
C语言指针习题附答案.docx_第1页
第1页 / 共18页
C语言指针习题附答案.docx_第2页
第2页 / 共18页
C语言指针习题附答案.docx_第3页
第3页 / 共18页
C语言指针习题附答案.docx_第4页
第4页 / 共18页
C语言指针习题附答案.docx_第5页
第5页 / 共18页
C语言指针习题附答案.docx_第6页
第6页 / 共18页
C语言指针习题附答案.docx_第7页
第7页 / 共18页
C语言指针习题附答案.docx_第8页
第8页 / 共18页
C语言指针习题附答案.docx_第9页
第9页 / 共18页
C语言指针习题附答案.docx_第10页
第10页 / 共18页
C语言指针习题附答案.docx_第11页
第11页 / 共18页
C语言指针习题附答案.docx_第12页
第12页 / 共18页
C语言指针习题附答案.docx_第13页
第13页 / 共18页
C语言指针习题附答案.docx_第14页
第14页 / 共18页
C语言指针习题附答案.docx_第15页
第15页 / 共18页
C语言指针习题附答案.docx_第16页
第16页 / 共18页
C语言指针习题附答案.docx_第17页
第17页 / 共18页
C语言指针习题附答案.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C语言指针习题附答案.docx

《C语言指针习题附答案.docx》由会员分享,可在线阅读,更多相关《C语言指针习题附答案.docx(18页珍藏版)》请在冰点文库上搜索。

C语言指针习题附答案.docx

C语言指针习题附答案

一、选择题

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

a)值b)地址

c)名d)一个标志

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

a)a,point,*&ab)&*a,&a,*point

c)*&point,*point,&ad)&a,&*point,point

3.若有说明;int*p,m=5,n;以下正确的程序段的是__d______.

a)p=&n;b)p=&n;

scanf("%d",&p);scanf("%d",*p);

c)scanf("%d",&n);d)p=&n;

*p=n;*p=m;

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

main()

{

int*p,*q,a,b;

p=&a;

printf(“inputa:

”);

scanf(“%d”,*p);

……

}

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

b)*p表示的是变量a的值,而不是变量a的地址

c)*p表示的是指针变量p的值

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

5.已有变量定义和函数调用语句:

inta=25;print_value(&a);下面函数的正确输出结果是____d____.

voidprint_value(int*x)

{printf(“%d\n”,++*x);}

a)23b)24c)25d)26

6.若有说明:

long*p,a;则不能通过scanf语句正确给输入项读入数据的程序段是

A)*p=&a;scanf("%ld",p);

B)p=(long*)malloc(8);scanf("%ld",p);

C)scanf("%ld",p=&a);

D)scanf("%ld",&a);

7.有以下程序

#include

main()

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

r=p;p=q;q=r;

printf("%d,%d,%d,%d\n",m,n,*p,*q);

}

程序运行后的输出结果是

A)1,2,1,2B)1,2,2,1

C)2,1,2,1D)2,1,1,2

8.有以下程序

main()

{inta=1,b=3,c=5;

int*p1=&a,*p2=&b,*p=&c;

*p=*p1*(*p2);

printf("%d\n",c);

}

执行后的输出结果是

A)1B)2C)3D)4

9.有以下程序

main()

{inta,k=4,m=4,*p1=&k,*p2=&m;

a=p1==&m;

printf("%d\n",a);

}

程序运行后的输出结果是()

A)4B)1C)0D)运行时出错,无定值

10.在16位编译系统上,若有定义inta[]={10,20,30},*p=&a;,当执行p++;后,下列说法错误的是()

A)p向高地址移了一个字节B)p向高地址移了一个存储单元

C)p向高地址移了两个字节D)p与a+1等价

11.有以下程序段

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

b=p[5];

b中的值是()

A)5B)6C)8D)9

12.若有以下定义,则对a数组元素的正确引用是_________.

inta[5],*p=a;

a)*&a[5]b)a+2c)*(p+5)d)*(a+2)

13.若有以下定义,则p+5表示_______.

inta[10],*p=a;

a)元素a[5]的地址b)元素a[5]的值

c)元素a[6]的地址d)元素a[6]的值

14.设已有定义:

inta[10]={15,12,7,31,47,20,16,28,13,19},*p;下列语句中正确的是()

A)for(p=a;a<(p+10);a++);

B)for(p=a;p<(a+10);p++);

C)for(p=a,a=a+10;p

D)for(p=a;a

15.有以下程序段

#include

intmain()

{intx[]={10,20,30};

int*px=x;

printf("%d,",++*px);printf("%d,",*px);

px=x;

printf("%d,",(*px)++);printf("%d,",*px);

px=x;

printf("%d,",*px++);printf("%d,",*px);

px=x;

printf("%d,",*++px);printf("%d\n",*px);

return0;

}

程序运行后的输出结果是()

A)11,11,11,12,12,20,20,20B)20,10,11,10,11,10,11,10

C)11,11,11,12,12,13,20,20D)20,10,11,20,11,12,20,20

16.设有如下定义:

intarr[]={6,7,8,9,10};

int*ptr;

ptr=arr;

*(ptr+2)+=2;

printf("%d,%d\n",*ptr,*(ptr+2));

则程序段的输出结果为 

A)8,10B)6,8C)7,9D)6,10

17.若有定义:

inta[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是______.*(a+5)的值是_________.

18.若有以下说明和语句,int c[4][5],(*p)[5];p=c;能正确引用c数组元素的是______.

A) p+1     B) *(p+3)     C) *(p+1)+3  D) *(p[0]+2))

19.若有定义:

inta[2][3],则对a数组的第i行j列元素地址的正确引用为______.

a)*(a[i]+j)b)(a+i)c)*(a+j)d)a[i]+j

20.若有以下定义:

inta[2][3]={2,4,6,8,10,12};则a[1][0]的值是_____.*(*(a+1)+0)的值是________.

21.有以下定义

chara[10],*b=a;

不能给数组a输入字符串的语句是()

A)gets(a)B)gets(a[0])C)gets(&a[0]);D)gets(b);

22.下面程序段的运行结果是_________.

char*s="abcde";

s+=2;printf("%d",s);

a)cdeb)字符'c'c)字符'c'的地址d)无确定的输出结果

23.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()

A)chars[10]="abcdefg";B)chart[]="abcdefg",*s=t;

C)chars[10];s="abcdefg";D)chars[10];strcpy(s,"abcdefg");

24.设已有定义:

char*st="howareyou";下列程序段中正确的是()

A)chara[11],*p;strcpy(p=a+1,&st[4]);

B)chara[11];strcpy(++a,st);

C)chara[11];strcpy(a,st);

D)chara[],*p;strcpy(p=&a[1],st+2);

25.有以下程序 

main()

{

chara[]="programming",b[]="language";

char*p1,*p2;

inti;

p1=a;p2=b;

for(i=0;i<7;i++)

if(*(p1+i)==*(p2+i))

printf("%c",*(p1+i));

}

输出结果是() 

A)gmB)rgC)orD)ga

26.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是________.

a)c=*p1+*p2;b)p2=cc)p1=p2d)c=*p1*(*p2);

27.以下正确的程序段是_________.

a)charstr[20];b)char*p;

scanf("%s",&str);scanf("%s",p);

c)charstr[20];d)charstr[20],*p=str;

scanf("%s",&str[2]);scanf("%s",p[2]);

28.若有说明语句

chara[]="Itismine";

char*p="Itismine";

则以下不正确的叙述是________.

a)a+1表示的是字符t的地址

b)p指向另外的字符串时,字符串的长度不受限制

c)p变量中存放的地址值可以改变

d)a中只能存放10个字符

29.下面程序的运行结果是_______.

#include

#include

main()

{char*s1="AbDeG";

char*s2="AbdEg";

s1+=2;s2+=2;

printf("%d\n",strcmp(s1,s2));

}

a)正数b)负数c)零d)不确定的值

30.有以下程序

voidf(int*x,int*y)

{

intt;

t=*x;*x=*y;*y=t;

}

main()

{

inta[8]={1,2,3,4,5,6,7,8},i,*p,*q;

p=a;q=&a[7];

while(*p!

=*q){f(p,q);p++;q--;}

for(i=0;i<8;i++)printf("%d,",a[i]);

}

程序运行后的输出结果是______。

A)8,2,3,4,5,6,7,1,B)5,6,7,8,1,2,3,4,

C)1,2,3,4,5,6,7,8,D)8,7,6,5,4,3,2,1,

31.已定义以下函数

   fun(int *p)

   { return  *p;}

   该函数的返回值是

  A)不确定的值                     B)形参p中存放的值

  C)形参p所指存储单元中的值       D)形参p的地址值

32. 有以下程序

intf(intb[][4])

{inti,j,s=0;

for(j=0;j<4;j++)

{i=j;

if(i>2)i=3-j;

s+=b[i][j];

}

returns;

}

main()

{inta[4][4]={{1,2,3,4},{0,2,4,5},{3,6,9,12},{3,2,1,0}};

printf("%d\n",f(a));

}

执行后的输出结果是

A) 12       B) 11     C) 18      D) 16

33.若有以下函数首部

intfun(doublex[10],int*n)

则下面针对此函数的函数声明语句中正确的是

A)intfun(doublex,int*n);B)intfun(double,int);

C)intfun(double*x,intn);D)intfun(double*,int*);

34.有以下程序

voidsum(int*a)

{a[0]=a[1];}

main()

{intaa[10]={1,2,3,4,5,6,7,8,9,10},i;

for(i=2;i>=0;i--)sum(&aa[i]);

printf("%d\n",aa[0]);

}

执行后的输出结果是()

A)4B)3C)2D)1

35.下段代码的运行结果是:

intmain()

{

chara;

char*str=&a;

strcpy(str,"hello");

printf(str);

return0;

}

A)helloB)nullC)hD)发生异常

36.下段程序的运行结果是:

voidmain()

{

char*p,*q;

charstr[]="Hello,World\n";

q=p=str;

p++;

print(q);

print(p);

}

voidprint(char*s)

{

printf(“%s”,s);

}

A)He

B)Hello,Worldello,World

C)Hello,WorldHello,World

D)ello,Worldell,World

37.有以下程序

voidfun(char*c,intd)

{

*c=*c+1;

d=d+1;

printf("%c,%c,",*c,d);

}

voidmain()

{

chara='A',b='a';

fun(&b,a);

printf("%c,%c\n",a,b);

}

程序运行后的输出结果是______。

A)B,a,B,a  B)a,B,a,B  C)A,b,A,b  D)b,B,A,b

38、下面选项属于函数指针的是:

A、(int*)p(int,int)B、int*p(int,int)C、两者都是D、两者都不是

39、若有函数max(a,b),并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是_______.

A)(*p)max(a,b);B)*pmax(a,b);

C)(*p)(a,b);D)*p(a,b);

40、下面几个选项中的代码能通过编译的是:

A)int*fun()

{

ints[3]={1,3,4};;

returns;

}

intmain()

{

int*result;

result=fun();

for(inti=0;i<3;i++)

printf("%d\n",result[i]);

return0;

}

B)int&fun()

{

ints[3]={1,3,4};;

returns;

}

intmain()

{

int*result;

result=fun();

for(inti=0;i<3;i++)

printf("%d\n",result[i]);

return0;

}

C)int*fun()

{

ints[3]={1,3,4};;

return&s;

}

intmain()

{

int*result;

result=fun();

for(inti=0;i<3;i++)

printf("%d\n",result[i]);

return0;

}

D)int&fun()

{

ints[3]={1,3,4};;

return&s;

}

intmain()

{

int*result;

result=fun();

for(inti=0;i<3;i++)

printf("%d\n",result[i]);

return0;

}

41、下列选项中声明了一个指针数组的是:

A)int*p[2];B)int(*p)[2];

C)typedefint*intPtr;intPtrp[2];

D)A和B

E)A和C

F)B和C

42、下面代码能通过编译的是:

a

A)intmain()

{

inta[3]={1,2,3};

int*b[3]={&a[1],&a[2],&a[3]};

int**p=b;

return0;

}

B)intmain()

{

inta[3]={1,2,3};

int*b[3]={a[1],a[2],a[3]};

int**p=b;

return0;

}

C)intmain()

{

inta[3]={1,2,3};

int*b[3]={&a[1],&a[2],&a[3]};

int*p=b;

return0;

}

D)intmain()

{

inta[3]={1,2,3};

int*b[3]={&a[1],&a[2],&a[3]};

int*p=&b;

return0;

}

43、对于语句int*pa[5];下列描述中正确的是_______.

A)pa是一个指向数组的指针,所指向的数组是5个int型元素

B)pa是一个指向某数组中第5个元素的指针,该元素是int型变量

C)pa[5]表示某个元素的第5个元素的值

D)pa是一个具有5个元素的指针数组,每个元素是一个int型指针

44、若有以下定义,且0≤i<4,则不正确的赋值语句是_______.

intb[4][6],*p,*q[4];

A)q[i]=b[i];B)p=b;

C)p=b[i]D)q[i]=&b[0][0];

45、若要对a进行++运算,则a应具有下面说明_______.

A)inta[3][2];B)char*a[]={“12”,”ab”};

C)char(*a)[3];D)intb[10],*a=b;

46、若有以下说明语句:

char*language[]={“FORTRAN”,”BASIC”,’’PASCAL”,’’JAVA”,”C”};

char**q;

q=language+2;

则语句printf(“%o\n”,*q)输出的是____c___.

A)language[2]元素的地址;

B)字符串PASCAL

C)language[2]元素的值,它是字符串PASCAL的首地址

D)格式说明不正确,无法得到确定的输出

47、若有以下程序:

voidmain()

{

char*a[3]={"I","love","China"};

char**ptr=a;

printf("%c%s",*(*(a+1)+1),*(ptr+1));

}

这段程序的输出是(c)

A)Il

B)oo

C)olove

D)Ilove

二、程序题

1、计算字符串中子串出现的次数。

要求:

用一个子函数subString()实现,参数为指向字符串和要查找的子串的指针,返回次数。

2、加密程序:

由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。

算法:

明文中的字母转换成其后的第4个字母,例如,A变成E(a变成e),Z变成D,非字母字符不变;同时将密文每两个字符之间插入一个空格。

例如,China转换成密文为Glmre。

要求:

在函数change中完成字母转换,在函数insert中完成增加空格,用指针传递参数。

3、字符替换。

要求用函数replace将用户输入的字符串中的字符t(T)都替换为e(E),并返回替换字符的个数。

4、编写一个程序,输入星期,输出该星期的英文名。

用指针数组处理。

5、有5个字符串,首先将它们按照字符串中的字符个数由小到大排列,再分别取出每个字符串的第三个字母合并成一个新的字符串输出(若少于三个字符的输出空格)。

要求:

利用字符串指针和指针数组实现。

6、定义一个动态数组,长度为变量n,用随机数给数组各元素赋值,然后对数组各单元排序,定义swap函数交换数据单元,要求参数使用指针传递。

7、实现模拟彩票的程序设计:

随机产生6个数字,与用户输入的数字进行比较,输它们相同的数字个数(使用动态内存分配)。

 

题号

答案

1.

B

2.

D

3.

D

4.

B

5.

D

6.

A

7.

B

8.

C

9.

C

10.

A

11.

D

12.

D

13.

A

14.

B

15.

A

16.

D

17.

4,12

18.

D

19.

D

20.

8,8

21.

B

22.

C

23.

C

24.

A

25.

D

26.

B

27.

C

28.

D

29.

B

30.

C

31.

C

32.

D

33.

D

34.

A

35.

D

36.

B

37.

D

38.

D

39.

C

40.

A

41.

E

42.

A

43.

D

44.

B

45.

D

46.

C

47.

C

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2