c程序设计第四版(谭浩强)第八章答案.docx_第1页
c程序设计第四版(谭浩强)第八章答案.docx_第2页
c程序设计第四版(谭浩强)第八章答案.docx_第3页
c程序设计第四版(谭浩强)第八章答案.docx_第4页
c程序设计第四版(谭浩强)第八章答案.docx_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

精品文档#include#include#include#include/*int main()int *p1,*p2,*p3,*t,a,b,c;printf(enter three number:);scanf(%d %d %d,&a,&b,&c);p1=&a;p2=&b;p3=&c;if(ab)t=p1;p1=p2;p2=t;if(ac)t=p1;p1=p3;p3=t;if(bc)t=p2;p2=p3;p3=t;printf(sort number:%d %d %dn,*p1,*p2,*p3);*/*#define N 20int main()char *p1,*p2,*p3,*t,aN,bN,cN;printf(enter three strings:);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)t=p2;p2=p3;p3=t;printf(sort string:%s %s %sn,p1,p2,p3);*/*void input(int *p)int i;printf(enter 10 number:);for(i=0;i10;i+)scanf(%d,p+i);void output(int *p)int i;printf(new 10 number:);for(i=0;i10;i+)printf(%-2d,*(p+i);void sort(int *p,int n)int i,t;for(i=0;i*(p+i+1)t=*(p+i);*(p+i)=*(p+i+1);*(p+i+1)=t;for(i=n-2;i0;i-)if(*(p+i-1)*(p+i)t=*(p+i);*(p+i)=*(p+i-1);*(p+i-1)=t;int main()int a10,*p=a;input(p);sort(p,10);output(p);putchar(n);*/*#define N 10void houyi(int *p,int m)int i,bN=0;for(i=0;iN-m;i+)bi+m=*(p+i);for(;iN;i+)bi-N+m=*(p+i);for(i=0;iN;i+)printf(%3d,bi);int main()int aN,i,m,*p=a;printf(enter number:);for(i=0;iN;i+)scanf(%d,&ai);printf(enter m:);scanf(%d,&m);printf(new number:);houyi(p,m);putchar(n);*/*int main()int count(int *p,int n);int n,*p,i;printf(enter number:);scanf(%d,&n);p=(int *)calloc(n,sizeof(int);for(i=0;in;i+)*(p+i)=0;printf(the last number is %dn,count(p,n)+1);free(p);int count(int *p,int n)int i,j=1,k=0;for(i=0;in;i+)if(*(p+i)!=3)*(p+i)=j;if(*(p+i)=3)j=1; /数到3时将下一个重置为1else j+=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; else continue;for(i=0;i=a&*p=A&*p=0&*p=9)s+=1;else if(*p= )k+=1;else o+=1;p+;printf(大写字母:%dn小写字母:%dn空格:%dn数字:%dn其他:%dn,d,x,k,s,o);int main()char aN,*p=a;printf(enter string:);gets(a);count(p);*/*void zhuangzhi(int (*p)3)int i,j,t;for(i=0;i3;i+)for(j=0;j3;j+)if(ij)t=*(*(p+i)+j); /*(*(p+i)+j)代表aij*(*(p+i)+j)=*(*(p+j)+i);*(*(p+j)+i)=t;int main()int (*p)3,a33,i,j;p=a;printf(enter array:n);for(i=0;i3;i+)for(j=0;j3;j+)scanf(%d,&aij);zhuangzhi(p);printf(new array:n);for(i=0;i3;i+)for(j=0;j3;j+)printf(%-2d,aij);if(j=2)putchar(n);*/*void central(int (*p)5) int i,j,l=0,r=0,t; /r代表行,l代表列for(i=0;i5;i+)for(j=0;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;i5;i+) /四个角放最小元素,每次从第二个元素开始对比 for(j=1;j5;j+)if(*(*(p+i)+j)*(*(p+r)+l)r=i;l=j; /找出最小元素t=*(*p);*(*p)=*(*(p+r)+l);*(*(p+r)+l)=t; /将最小元素与左上角元素交换,下同l=4;r=0; /换完重置r和l,下同for(i=0;i5;i+)for(j=1;j*(*(p+i)+j)r=i;l=j;t=*(*p+4);*(*p+4)=*(*(p+r)+l);*(*(p+r)+l)=t;r=4;l=0;for(i=0;i5;i+)for(j=1;j*(*(p+i)+j)r=i;l=j;t=*(*(p+4);*(*(p+4)=*(*(p+r)+l);*(*(p+r)+l)=t;r=4;l=4;for(i=0;i5;i+)for(j=1;j*(*(p+i)+j)r=i;l=j;t=*(*(p+4)+4);*(*(p+4)+4)=*(*(p+r)+l);*(*(p+r)+l)=t;int main()int a55,(*p)5=a,i,j;printf(enter array:n);for(i=0;i5;i+)for(j=0;j5;j+)scanf(%d,*(p+i)+j);central(p);printf(new array:n);for(i=0;i5;i+)for(j=0;j5;j+)printf(%-3d,*(*(p+i)+j);putchar(n);*/*void sort(char *p,int n) /指针数组处理int i,j;char *k;for(i=1;in;i+)for(j=i;j0)k=pi-1;pi-1=pj;pj=k;int main()char *p10=gutsy,glory,gonad,girth,gaudy,gypsy,gusto,guppy,group,grope; /测试数据gutsy glory gonad girth gaudy gypsy gusto guppy group gropeint i;printf(enter strings:);for(i=0;i10;i+)printf(%s ,pi);sort(p,10);printf(nnew strings:);for(i=0;i10;i+)printf(%s ,pi);putchar(n);*/*#define N 20void sort(char *p,int n) /指针处理int i,j;char kN;for(i=1;in;i+)for(j=i;j0) /不能写为p+i-1,否则出错strcpy(k,p+20*(i-1);strcpy(p+20*(i-1),p+20*j);strcpy(p+20*j,k);int main()char a10N;char *p=a0; /不能写为*p=a,这等价于是把行向量赋值给列向量int i;printf(enter strings:n);for(i=0;i10;i+)scanf(%s,&ai); /可写为gets(ai),这样写的话,每次输入字符串后按enter,或写为scanf(%s,&ai),每输一个字符后按空格即可;sort(p,10);printf(new strings:n);for(i=0;i10;i+)printf(%s ,ai);putchar(n);*/*#define n 1000 /矩形法求定积分,n为区间分割数目double ding(double a,double b,double (*fun)(double) double s=0;int i;for(i=1;in;i+)s+=(*fun)(i*(b-a)/n);return s*=(b-a)/n;int main()double a,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)从%f到%f的积分为%fn,a,b,s1);printf(cos(x)从%f到%f的积分为%fn,a,b,s2);printf(exp(x)从%f到%f的积分为%fn,a,b,s3);*/*#define N 10void nixu(int *p)int i,m=N/2,t;for(i=0;im;i+)t=*(p+i);*(p+i)=*(p+N-1-i);*(p+N-1-i)=t;int main()int aN,*p=a,i;printf(enter %d numbers:n,N);for(i=0;iN;i+)scanf(%d,&ai);nixu(p);printf(new numbers:n);for(i=0;iN;i+)printf(%d ,ai);putchar(n);*/*void average1(float (*p)6,int n)int i;float ave=0;for(i=0;in;i+)ave+=*(*(p+i)+1)/4;printf(第一门课程的平均分为:%4.2fn,ave);float average(float (*p)6)int i;float ave=0;for(i=1;i6;i+)ave+=*(*p+i)/5;return ave;void out(float (*p)6,int n)int i,j,k,l,s=0;printf(两门课以上不及格的学生:n);for(i=0;in;i+)k=0;for(j=1;j6;j+)if(*(*(p+i)+j)=2)s=1;printf(%4.0f,*(*(p+i);for(l=1;l6;l+)printf(%4.0f,*(*(p+i)+l);printf( 平均分为:%4.2fn,average(p+i);if(s=0) /没有符合条件的学生时输出“无”printf(无!n);void in(float (*p)6,int n)int i,j,l;for(i=0;in;i+)for(j=0;j=90)printf(平均分在90分以上的学生:%4.0f,*(*(p+i);for(l=1;l=85)continue;elsebreak;if(j=6)printf(全部课程成绩在85分以上的学生:%4.0f,*(*(p+i);for(l=1;l6;l+)printf(%4.0f,*(*(p+i)+l);putchar(n);int main()int i,j;float a46=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;i4;i+)for(j=0;j6;j+) printf(%4.0f ,aij);putchar(n);average1(p,4);out(p,4);in(p,4);*/*#define N 10 /方法一int num1(char *p) /将数字字符串转为整形数字的函数 int n=strlen(p),i,a=0;for(i=0;in;i+)a+=(int)(*(p+i)-48)*pow(10,n-1-i);return a;void number(char *p)int i,num=0,j=1,k=-1,n=strlen(p); /j用于计算数字长度,k用于计算数字个数int aN; /最多容纳N个整数for(i=0;i=n;i+)if(*p9)if(num=1)*p=0;ak=num1(p-j);num=0;else if(num=0)num=1;j=1; /找到新数字时重置jk+=1;else j+=1;p+;for(i=0;ik+1;i+)printf(%d ,ai);putchar(n);*/*#define N 10void number(char *p) /方法二int i,num=0,j=1,k=-1,n=strlen(p); /j用于计算数字长度,k用于计算数字个数char aN10; /最多容纳N个整数,每个整数最多十位数for(i=0;i=n;i+)if(*p9)if(num=1)*p=0;strcpy(ak,p-j);num=0;else if(num=0)num=1;j=1; /找到新数字时重置jk+=1;else j+=1;p+;for(i=0;ik+1;i+)printf(%s ,ai);putchar(n);int main()char a100,*p=a; /最多可输入100个字符printf(enter strings:n);gets(p);number(p);*/*#define N 20 /字符串比较函数int str_cmp(char *p1,char *p2)int i,n=strlen(p1);for(i=0;i*(p2+i)return *(p1+i)-*(p2+i);break;else return *(p1+i)-*(p2+i);break;if(i=n+1)return 0; int main()char aN,bN,*p1=a,*p2=b;printf(enter string1:);gets(p1);printf(enter string2:);gets(p2);printf(%dn,str_cmp(p1,p2);*/*void month(int *p)char *a12=January,February,March,April,May,June,July,August,September,October,Novenber,December;int i;for(i=0;i12;i+)if(*p=i+1)printf(英文:%sn,ai);else continue;int main()int a,*p=&a;printf(enter month:);scanf(%d,p);month(p);*/*#define SIZE 1000 char newbufSIZE; /定义字符数组newbuf char *newp=newbuf; /定义指针变量newp,指向可存区的始端 char *mynew(int n) /定义开辟存区的函数new,开辟存储区后返回指针if(newp+n=newbuf&pnewbuf+SIZE) newp=p; / newp指向存储区的开始位置int main()char *p=mynew(6);strcpy(p,hello);printf(%sn,p);free(p);*/*#

温馨提示

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

评论

0/150

提交评论