程序设计基础(C语言)书后习题:第10章 指针_第1页
程序设计基础(C语言)书后习题:第10章 指针_第2页
程序设计基础(C语言)书后习题:第10章 指针_第3页
程序设计基础(C语言)书后习题:第10章 指针_第4页
程序设计基础(C语言)书后习题:第10章 指针_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、单项选择

1.设有定义doublea[10],*s=a;,以下能代表数组元素a[3]的是(B

A)(*s)[3]B)*(s+3)C)*s[3]D)*s+3

2.设有定义:intn1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2二nl;语句等价

的是(A)o

A)*p=*qB)p=qC)*p=&nl;D)p=*q

3.若有定义:intx=0,*p=&x;,则语句printf("%d\n",*p);的输出结果是(B3

A)随机值B)0C)x的地址D)p的地址

4.下述程序的输出结果是(B工

voidmain()

{inta[10]={1,2,3,4,5,67,8,9,10)产p=&a[3],*q=p+2;

printf("%d\nM,*p+*q);

)

A)16B)10C)8D)6

5.下面程序段的运行结果是(B)0

charstr[]="ABCM,*p=str;

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

A)67B)0C)随机值D)*0,

二、阅读程序写结果

1.

#include<stdio.h>

voidmain()

(

inta[]:{2,4,6,8,10};

inty=l,x,*p;

P=&a[l];

R)r(x=0;xv3;x十十)

y+=*(p+x);

printf("%d\nM,y);

)

答案:19

2.

#include<stdio.h>

voidmain()

{char*s="12rr;

intk=0,a=0,b=0;

do

{k++;

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

b=b+s[k]-'O';

a=a+s[k]-,O';

[while(s[k+l]);

printf("k=%da=%db=%d\n”,k,a,b);

}

答案:k=2a=4b=3

3.

#inckide<stdio.h>

intb=2;

intfunc(int*a)

{b+=*a;return(b);}

voidmain()

(

inta=2,res=2;

res+=func(&b);

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

)

答案:6

4.

#include<stdio.h>

intsub(int*s);

voidmain()

{inti,k;

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

{k=sub(&i);

printf("%2dn,k);

)

printf(H\nn);

)

intsub(int*s)

{staticintt=();

t=*s+t;

returnt;

)

答案:0136

三、程序填空

1.以下程序先输入数据给数组a赋值,然后按照从a[0]到a[4]的顺序输出

各元素的值,最后再按照从a[4]到aL0]的顺序输出各元素的值。请填空。

#include<stdio.h>

voidmain()

{inta[5];

inti,*p;

p=a;

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

scanf("%d”,p++);

for(i=0;i<5;i++,p++)

printf(',%d,,,*p);

printf("\nn);

for(i=4;i>=0;i—,p-)

printf(M%d",*p);

printf("\n");

)

答案:

(1)P=a;

(2)p=a+4;或p-

2.以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数。例

如,

输入的字符串为:556.则输出十进制数366。请填空。

#include"stdio.h"

voidmain()

{char*p,s[6];

intn;

gcts(p);

n=*p-'O';

whil或(2)!=、()')n=n*8+*p-'0';

printf(u%d\n';n);

)

答案:

(1)p=s;

⑵++p

3.以下程序调用findmax函数求数组中最大的元素在数组中的下标,请填空。

#include<stdio.h>

voidfindmax(int*s,intn,int*k)

{intp;

for(p=0,*k=p;p<n;p++)

if(s[p]>s[*k])

⑴;

1

voidmain()

{inta[10],i,k;

for(i=0;i〈10;i++)scanf("%cr',&a[i]);

⑵:

printf(H%d,%d\n",k,a[k]);

}

答案:

(1)*k=p

(2)findmax(a,10,&k)

4.下面程序的功能是将字符串b复制到字符串a中,请填空。

#include<stdio.h>

voids(char*s,char九)

(while(⑴)

⑵;

*s='\0';

)

voidmain()

{chara[20],bl10J;

scanf("%s",b);

s(⑶);

puts(a);

)

答案:

(1)*t!='\0域

(2)*(s++尸*(t++)或*s++=*t++

(3)a,b

5.下面程序是将p指向的常字符串中大写字母取出依次放到b数组中,小写字

母取出依次放在a数组中。请填空。

#include<stdio.h>

voidmain()

{chara|80|,b|80|,*p="IYoOvUe";

inti=0,j=0;

while((1))

{if(*p>='a,&&*p<=,z")

⑵;

elseb[j++l=*p;

p++;

)

(3);

puts(a);puts(b);

)

答案:

(1)*p!=\0'或*p

(2)a[i++]=*p

(3)a[i]=[(y;b[j尸。或a[i]=b[j]=,\O,

四、程序问答

1.

#include<stdio.h>

#include<string.h>

voidmain()

{charb1[8]="abcdefg",b2[8],*pb=b1+3;

while(—pb>=bl)strcpy(b2,pb);

printf("%d\nH,strlen(b2));

)

问题1:该程序运行结果如何?

问题2:当while循环结束时,pb指向了哪里?

答案:

(I)7

(2)首地址

2.

#include<sidio.h>

voidswap(int*ptl,int*pt2)

{inttemp;

tcmp=*pt1;

*ptl=*pt2;

*pt2=temp;

)

voidexchange(int*ql,int*q2,int*q3)

{if(*ql<*q2)swap(ql,q2);

if(*ql<*q3)swap(q1,q3);

if(*q2<*q3)swap(q2,q3);

)

voidmain()

{inta,b,c;

scanf("%d%d%d';&a,&b,&c);

exchange(&a,&b,&c);

printf("%d,%d,%d^",a,b,c);

)

问题1:程序运行时若输入了1296,会输出什么结果?

问题2:程序的功能是什么?

问题3:若把swap函数体中的所有*ptl改为ptl,*pt2改为pt2,结果会如何?

请分析原因。

答案:

(1)12,9,6

(2)从大到小排序(降序排列)

(3)结果仍是12,9,6,但此处输出结果不是排序后的结果,输出的是输入顺序

的数字。

3.

#include<stdio.h>

voidfun1(char*s,char*c)

(char*p,*q;

for(p=s;*p!='\()';p++)

if(*p==*c)

{for(q=p;*q!=,\0';q++)

*q=*(q+l);

P-;

)

)

voidmain()

{charslr[20]="attaciel',,c1='t';

funl(str,&cl);

puts(str);

)

问题1:程序运行结果?

问题2:函数funl的功能是什么?

问题3:如果将函数funl中的语句p-;去掉,程序结果又怎样?分析该语句

的作用。

答案:

(1)aace

(2)把字符数组中的t删除掉

(3)atace

五、程序改错

1.输入5个字符串,输出其中最大的字符串。

#include<stdio.h>

voidmain()

{inti;

charstr[80],max[80];

1**I«£*

不干不下不不不不下不t()iin([小不干不不不不不不下不不不

scanf(H%s",&str);

、“、以,

不召*1不**1*下*1*不不不不下不不不不不不不不苍不*£«7不*不1^不不

max二str;

for(i=l;i<5;i++)

{scanf(M%s",str);

**********fk)und*************

if(max<str)

***¥****:<*found*****不*******

max=str;

1

printf(Hmaxis%s\nH,max);

)

答案:

(1)scanf(u%su,str);

(2)strcpy(max,str);

(3)strcmp(max,str);

(4)strcpy(max,str);

2.下面程序将给定字符串循环左移1位,首字符移动到字符串的末尾。如输入

Habcde",输出结果为bcdea。

#include<stdio.h>

voidmove1(char*s)

{char*p,t;

p=s+l;

•I*•?*•!«•?*

个个个个个个个个个T-Z-VIin/]个*T**T*个个个*T*个

t=s;

vvhile(*p)

字字字*字字***found*半*字字**字字

{*p=*(p-l);

P++;}

不不不不不不不[(_[[]]](]fl不干不不下不*!•不不

*p=t;

)

voidmain()

{char*p,str[l()]="abcde";

move1(str);

printf("%s\n",str);

)

答案:

Ci)t=*s;

(2)*(p-l)=*p;

(3)*(p-l)=t;

3.以下程序用来删除字符串s中所有空格字符,如输入“thisisatest!”,输出结果

为:thisisatest!

#include<stdio.h>

voidmain()

(chars[8O],*p,*q;

•?«

个个个个个个个个个T-X-VI।n/)*r**»,个个个个个个个

scanf("%s",s);

for(p=q=s;*p!='\0,;p++)

if(*p!='')

不不不不不"不,不不不不in([不不不不不不不不下不

{q=p;

q++;

木木木/木木木木京Pound冰木*木木,卜*中木木,卜承

*(q-l)='\。';

puts(s);

答案:

(I)*p=*q;

(2)*q=f\0';

六、编程

以下程序均要求使用指针来实现。

1.编程判断输入的一串字符是否为“回文”,是则输出Yes,否则输出No。所谓

“回文”,是指正读和倒读都一样的字符串。如“ratar”就是回文。

#include<stdio.h>

#include<string.h>

voidmain()

charstr[100],*p,*q;

intflag=1;

scanf("%sM,str);

p=str;

q=str+(strlen(str)-1);

while(p<q)

if(*(p++)!=*(q-))

{flag=O;

break;

)

if(flag==l)printf("Yes\n");

elseprintf("No\n");

)

2.strcal函数用来连接两个字符串,如;

charsl[20]="holiday",s2[l()]="economy";

则streamsl,s2);可以将s2中的字符串连接到si字符串的后面。此时si中的

字符串变为”holidayeconomy"。请自行编写函数mystreat,完成上述功能。

#include<stdio.h>

#include<string.h>

voidmystrcat(char*p,char*q)

(

while(*p)p+十;

while(*q)

*p++=*q++;

*p='\0';

)

voidmain()

{

charsl[20],s2[20];

char*p=sl,*q=s2;

gets(sl);

gcts(s2);

mystrcat(p,q);

printf("%s\n”,sl);

)

2.有5个候选人参与选举,共100张选票,每张选票上只能推选一个人。编程

统计每个候选人的得票数,并输出结果。

#include<stdio.h>

#include<string.h>

voidmain()

{

char*name[5]={•'zhang'',',wang,',',lin,nzhao",,'liuM);

charnote[l()];

intj;

intcount1=0,count2=0,count3=0,count4=0,count5=0;

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

(scanf(M%s",note);

if(!strcmp(name[0],note))count1++;

if(!strcmp(name[1],note))count2++;

if(!strcmp(name[21,note))count3++;

if(!strcmp(name[3],note))count4++;

if(!strcmp(name[4],note))count5++;

)

printf("WuGeRenDeDeP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论