c程序设计第四版(谭浩强)第八章答案演示教学_第1页
c程序设计第四版(谭浩强)第八章答案演示教学_第2页
c程序设计第四版(谭浩强)第八章答案演示教学_第3页
c程序设计第四版(谭浩强)第八章答案演示教学_第4页
c程序设计第四版(谭浩强)第八章答案演示教学_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>/*intmain()int*p1,*p2,*p3,*t,a,b,c;printf("enterthreenumber:");scanf("%d%d%d",&a,&b,&c);p1=&a;p2=&b;p3=&c;if(a>b)t=p1;p1=p2;p2=t;if(a>c)t=p1;p1=p3;p3=t;if(b&

2、gt;c)t=p2;p2=p3;p3=t;printf("sortnumber:%d%d%dn",*p1,*p2,*p3);*/*#defineN20intmain()char*p1,*p2,*p3,*t,aN,bN,cN;printf("enterthreestrings:");scanf("%s%s%s",a,b,c);p1=a;p2=b;p3=c;if(strcmp(a,b)>0)t=p1;p1=p2;p2=t;if(strcmp(a,c)>0)t=p1;p1=p3;p3=t;if(strcmp(b,c)>0)

3、t=p2;p2=p3;p3=t;printf("sortstring:%s%s%sn",p1,p2,p3);*/*voidinput(int*p)inti;printf("enter10number:");for(i=0;i<10;i+)scanf("%d",p+i);voidoutput(int*p)inti;printf("new10number:");for(i=0;i<10;i+)printf("%-2d",*(p+i);voidsort(int*p,intn)inti,t;

4、for(i=0;i<n-1;i+)if(*(p+i)>*(p+i+1)t=*(p+i);*(p+i)=*(p+i+1);*(p+i+1)=t;for(i=n-2;i>0;i-)if(*(p+i-1)>*(p+i)t=*(p+i);*(p+i)=*(p+i-1);*(p+i-1)=t;intmain()inta10,*p=a;input(p);sort(p,10);output(p);putchar('n');*/*#defineN10voidhouyi(int*p,intm)inti,bN=0;for(i=0;i<N-m;i+)bi+m=*(p+i

5、);for(;i<N;i+)bi-N+m=*(p+i);for(i=0;i<N;i+)printf("%3d",bi);intmain()intaN,i,m,*p=a;printf("enternumber:");for(i=0;i<N;i+)scanf("%d",&ai);printf("enterm:");scanf("%d",&m);printf("newnumber:");houyi(p,m);putchar('n')

6、;*/*intmain()intcount(int*p,intn);intn,*p,i;printf("enternumber:");scanf("%d",&n);p=(int*)calloc(n,sizeof(int);for(i=0;i<n;i+)*(p+i)=0;printf("thelastnumberis%dn",count(p,n)+1);free(p);intcount(int*p,intn)inti,j=1,k=0;for(i=0;i<n;i+)if(*(p+i)!=3)*(p+i)=j;if(*(

7、p+i)=3)j=1;/数到3时将下一个重置为1elsej+=1;if(i=(n-1)i=-1;/轮到到最后一个人报数时,将i重置为-1,执行完for语句后自动加一变为0,从头开始k+=1;/报完一个数后加一elseif(i=(n-1)i=-1;/检查到最后一个人是3时,将i重置为-1,执行完for语句后自动加一变为0,从头开始continue;/检查到这个人是3时,跳过报数if(k=3*(n-1)/报数的总个数达到3*(n-1)时,就只剩一个人了break;elsecontinue;for(i=0;i<n;i+)if(*(p+i)=3)continue;elsereturni;*/*#

8、defineN20intlength(char*p)intn=0;while(*p!=0)p+;n+=1;returnn;intmain()charaN,*p=a;printf("enterstring:");gets(a);printf("字符串长度为:%dn",length(p);*/*#defineN10intmain()voidcopyn(char*p,intm);char*p="abcdefghij"intm;printf("%snenterm:",p);scanf("%d",&

9、;m);copyn(p,m);voidcopyn(char*p,intm)charbN,i;for(i=m-1;*(p+i);i+)bi-m+1=*(p+i);bi-m+1='0'printf("%sn",b);*/*#defineN50voidcount(char*p)intd=0,x=0,k=0,s=0,o=0;while(*p)/不能写*(p+),否则计算出错,无法计算第一个字符if(*p>='a'&&*p<='z')x+=1;elseif(*p>='A'&&am

10、p;*p<='Z')d+=1;elseif(*p>='0'&&*p<='9')s+=1;elseif(*p='')k+=1;elseo+=1;p+;printf("大写字母:%dn小写字母:%dn空格:%dn数字:%dn其他:%dn",d,x,k,s,o);intmain()charaN,*p=a;printf("enterstring:");gets(a);count(p);*/*voidzhuangzhi(int(*p)3)inti,j,t;for(i=

11、0;i<3;i+)forO=0;j<3;j+)if(i<j)(t=*(*(P+i)+j);*(*(P+i)+j)代表aij*(*(P+i)+j)=*(*(P+j)+i);*(*(p+j)+i)寸)intmain()(int(*p)3,a33,ij;P=a;printf("enterarray:n");for(i=0;i<3;i+)forO=0;j<3;j+)scanf("%d",&aij);zhuangzhi(p);printf("newarray:n");for(i=0;i<3;i+)fo

12、rO=0;j<3;j+)(printf("%-2d",aij);if(j=2)putchar('n');)*/*voidcentral(int(*p)5)(intij,l=O,r=O,t;代表行,I代表列for(i=0;i<5;i+)for(j=0;j<5;j+)if(*(*(P+i)+j)>*(*(P+r)+l)(r=i;l=j;)t=*(*(p+2)+2);*(*(p+2)+2)=*(*(p+r)+l);*(*(p+r)+l)=t;/最大元素放在中心l=0;r=0;for(i=0;i<5;i+)/四个角放最小元素,每次从第二

13、个元素开始对比for(j=1;j<5;j+)if(*(*(P+i)+j)<*(*(P+r)+l)r=i;l=j;/找出最小元素)t=*(*p);*(*p)=*(*(p+ij+l);*(*(p+r)+l)=t;同l=4;r=0;for(i=0;i<5;i+)for(j=1;j<5;j+)if(*(*(P+r)+l)>*(*(P+i)+D)(r=i;l=j;)t=*(*p+4);*(*p+4)=*(*(p+ij+l);*(*(p+ij+l)=t;r=4;l=0;for(i=0;i<5;i+)for(j=1;j<5;j+)if(i=0&&j=

14、4)continue;elseif(*(*(p+ij+l)>*(*(p+i)+j)(r=i;l=j;)t=*(*(p+4);*(*(p+4)=*(*(p+r)+|);*(*(p+r)+l)=t;r=4;l=4;for(i=0;i<5;i+)for(j=1;j<5;j+)if(i=O&&j=4|i=4&&j=O)continue;elseif(*(*(p+r)+l)>*(*(p+i)+j)(r=i;l=j;将最小元素与左上角元素交换,下/换完重置r和I,下同遇到右上角,跳过对比遇到右上角和左下角,跳过对比)t=*(*(p+4)+4);*(*

15、(p+4)+4)=*(*(p+r)+l);*(*(p+ij+l)=t;)intmain()(inta55,(*p)5=a,ij;printf("enterarray:n");for(i=0;i<5;i+)for(j=0;j<5;j+)scanf("%d",*(p+i)+j);central(p);printf("newarray:n");for(i=0;i<5;i+)for(j=0;j<5;j+)printf("%-3d",*(*(p+i)+j);putchar('n');*

16、/*voidsort(char*p,intn)/指针数组处理inti,j;char*k;for(i=1;i<n;i+)for(j=i;j<n;j+)if(strcmp(pi-1,pj)>0)k=pi-1;pi-1=pj;pj=k;intmain()char*p10="gutsy","glory","gonad","girth","gaudy","gypsy","gusto","guppy","group&qu

17、ot;,"grope"/测试数据gutsyglorygonadgirthgaudygypsygustoguppygroupgropeinti;printf("enterstrings:");for(i=0;i<10;i+)printf("%s",pi);sort(p,10);printf("nnewstrings:");for(i=0;i<10;i+)printf("%s",pi);putchar('n');*/*#defineN20voidsort(char*p,i

18、ntn)/指针处理inti,j;charkN;for(i=1;i<n;i+)for(j=i;j<n;j+)if(strcmp(p+20*(i-1),p+20*j)>0)/不能写为p+i-1,否则出错strcpy(k,p+20*(i-1);strcpy(p+20*(i-1),p+20*j);strcpy(p+20*j,k);intmain()chara10N;char*p=a0;/不能写为*p=a,这等价于是把行向量赋值给列向量inti;printf("enterstrings:n");for(i=0;i<10;i+)scanf("%s&qu

19、ot;,&ai);可写为gets(ai),这样写的话,每次输入字符串后按enter,或写为scanf("%s",&ai),每输一个字符后按空格即可;sort(p,10);printf("newstrings:n");for(i=0;i<10;i+)printf("%s",ai);putchar('n');*/*#definen1000/矩形法求定积分,n为区间分割数目doubleding(doublea,doubleb,double(*fun)(double)doubles=0;inti;for(

20、i=1;i<n;i+)s+=(*fun)(i*(b-a)/n);returns*=(b-a)/n;intmain()doublea,b,s1,s2,s3;/定义积分下限,上限,用double精度较高printf("输入积分下限,上限,分割区间数目:");scanf("%lf%lf",&a,&b);s1=ding(a,b,sin);s2=ding(a,b,cos);s3=ding(a,b,exp);printf("sin(x)从£到£的积分为%fn",a,b,s1);printf("c

21、os(x)从£到£的积分为fn",a,b,s2);printf("exp(x)从£至1%£的积分为fn",a,b,s3);*/*#defineN10voidnixu(int*p)inti,m=N/2,t;for(i=0;i<m;i+)t=*(p+i);*(p+i)=*(p+N-1-i);*(p+N-1-i)=t;intmain()intaN,*p=a,i;printf("enter%dnumbers:n",N);for(i=0;i<N;i+)scanf("%d",&

22、ai);nixu(p);printf("newnumbers:n");for(i=0;i<N;i+)printf("%d",ai);putchar('n');*/*voidaverage1(float(*p)6,intn)inti;floatave=0;for(i=0;i<n;i+)ave+=*(*(p+i)+1)/4;printf("第一门课程的平均分为:%4.2fn",ave);floataverage(float(*p)6)inti;floatave=0;for(i=1;i<6;i+)ave+=

23、*(*p+i)/5;returnave;voidout(float(*p)6,intn)inti,j,k,l,s=0;printf("两门课以上不及格的学生:n");for(i=0;i<n;i+)k=0;for(j=1;j<6;j+)if(*(*(p+i)+j)<60)k+=1;elsecontinue;if(k>=2)s=1;printf("%4.0f",*(*(p+i);for(l=1;l<6;l+)printf("%4.0f",*(*(p+i)+l);printf("平均分为:%4.2fn

24、",average(p+i);if(s=0)/没有符合条件的学生时输出“无”printf("无!n");voidin(float(*p)6,intn)inti,j,l;for(i=0;i<n;i+)for(j=0;j<6;j+)if(average(p+i)>=90)printf("平均分在90分以上的学生:%4.0f",*(*(p+i);for(l=1;l<6;l+)printf("%4.0f",*(*(p+i)+l);putchar('n');break;if(*(*(p+i)+j

25、)>=85)continue;elsebreak;if(j=6)printf("全部课程成绩在85分以上的学生:%4.0f",*(*(p+i);for(l=1;l<6;l+)printf("%4.0f",*(*(p+i)+l);putchar('n');intmain()inti,j;floata46=1001,65,67,55,60,45,1002,80,87,90,81,85,1003,90,99,100,98,95,1004,86,89,90,91,85;float(*p)6=a;for(i=0;i<4;i+)fo

26、r(j=0;j<6;j+)printf("%4.0f",aij);putchar('n');average1(p,4);out(p,4);in(p,4);*/*/ 方法一/ 将数字字符串转为整形数字的函数/j 用于计算数字长度, k 用于计算数字个数/ 最多容纳 N 个整数#defineN10intnum1(char*p)intn=strlen(p),i,a=0;for(i=0;i<n;i+)a+=(int)(*(p+i)-48)*pow(10,n-1-i);returna;voidnumber(char*p)inti,num=0,j=1,k=-

27、1,n=strlen(p);intaN;for(i=0;i<=n;i+)if(*p<'0'|*p>'9')if(num=1)*p='0'ak=num1(p-j);num=0;elseif(num=0)num=1;j=1;/找到新数字时重置jk+=1;elsej+=1;p+;for(i=0;i<k+1;i+)printf("%d",ai);putchar('n');*/*#defineN10voidnumber(char*p)/方法二inti,num=0,j=1,k=-1,n=strlen

28、(p);/j用于计算数字长度,k用于计算数字个数charaN10;/最多容纳N个整数,每个整数最多十位数for(i=0;i<=n;i+)if(*p<'0'|*p>'9')if(num=1)*p='0'strcpy(ak,p-j);num=0;elseif(num=0)num=1;j=1;/找到新数字时重置jk+=1;elsej+=1;p+;for(i=0;i<k+1;i+)printf("%s",ai);putchar('n');intmain()chara100,*p=a;/最多可输入

29、100个字符printf("enterstrings:n");gets(p);number(p);*/*#defineN20/字符串比较函数intstr_cmp(char*p1,char*p2)inti,n=strlen(p1);for(i=0;i<=n;i+)if(*(p1+i)=*(p2+i)continue;elseif(*(p1+i)>*(p2+i)return*(p1+i)-*(p2+i);break;elsereturn*(p1+i)-*(p2+i);break;if(i=n+1)return0;intmain()charaN,bN,*p1=a,*p

30、2=b;printf("enterstring1:");gets(p1);printf("enterstring2:");gets(p2);printf("%dn",str_cmp(p1,p2);*/*voidmonth(int*p)char*a12="January","February","March","April","May","June","July","August"

31、;,"September","October","Novenber","December"inti;for(i=0;i<12;i+)if(*p=i+1)printf("英文:%sn",ai);elsecontinue;intmain()inta,*p=&a;printf("entermonth:");scanf("%d",p);month(p);*/*#defineSIZE1000charnewbufSIZE;char*newp=newbuf;char*mynew(intn)回指针if(newp+n<=newbuf+SIZE)newp+=n;return(newp-n);elsereturn(NULL);voidfree(char*p)if(p>=newbuf&&p<newbuf+SIZE)newp=p;/定义字符数组newbuf/定义指针变量newp,指向可存区的始端/定义开辟存区的函数new,开辟存储区后

温馨提示

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

评论

0/150

提交评论