c程序设计第四版谭浩强第八章答案.docx
- 文档编号:28366334
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:28
- 大小:19.32KB
c程序设计第四版谭浩强第八章答案.docx
《c程序设计第四版谭浩强第八章答案.docx》由会员分享,可在线阅读,更多相关《c程序设计第四版谭浩强第八章答案.docx(28页珍藏版)》请在冰豆网上搜索。
c程序设计第四版谭浩强第八章答案
#include
#include
#include
#include
/*
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>c)
{t=p2;p2=p3;p3=t;}
printf("sortnumber:
%d%d%d\n",*p1,*p2,*p3);
}
*/
/*
#defineN20
intmain()
{
char*p1,*p2,*p3,*t,a[N],b[N],c[N];
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)
{t=p2;p2=p3;p3=t;}
printf("sortstring:
%s%s%s\n",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;
for(i=0;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() { inta[10],*p=a; input(p); sort(p,10); output(p); putchar('\n'); } */ /* #defineN10 voidhouyi(int*p,intm) { inti,b[N]={0}; for(i=0;i b[i+m]=*(p+i); for(;i b[i-N+m]=*(p+i); for(i=0;i printf("%3d",b[i]); } intmain() { inta[N],i,m,*p=a; printf("enternumber: "); for(i=0;i scanf("%d",&a[i]); printf("enterm: "); scanf("%d",&m); printf("newnumber: "); houyi(p,m); putchar('\n'); } */ /* intmain() { intcount(int*p,intn); intn,*p,i; printf("enternumber: "); scanf("%d",&n); p=(int*)calloc(n,sizeof(int)); for(i=0;i *(p+i)=0; printf("thelastnumberis%d\n",count(p,n)+1); free(p); } intcount(int*p,intn) { inti,j=1,k=0; for(i=0;i { if(*(p+i)! =3) { *(p+i)=j; if(*(p+i)==3) j=1;//数到3时将下一个重置为1 else j+=1; if(i==(n-1)) i=-1;//轮到到最后一个人报数时,将i重置为-1,执行完for语句后自动加一变为0,从头开始 k+=1;//报完一个数后加一 } else { if(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 if(*(p+i)==3) continue; elsereturni; } */ /* #defineN20 intlength(char*p) { intn=0; while(*p! =0) { p++; n+=1; } returnn; } intmain() { chara[N],*p=a; printf("enterstring: "); gets(a); printf("字符串长度为: %d\n",length(p)); } */ /* #defineN10 intmain() { voidcopyn(char*p,intm); char*p="abcdefghij"; intm; printf("%s\nenterm: ",p); scanf("%d",&m); copyn(p,m); } voidcopyn(char*p,intm) { charb[N],i; for(i=m-1;*(p+i);i++) b[i-m+1]=*(p+i); b[i-m+1]='\0'; printf("%s\n",b); } */ /* #defineN50 voidcount(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'&&*p<='Z') d+=1; elseif(*p>='0'&&*p<='9') s+=1; elseif(*p=='') k+=1; elseo+=1; p++; } printf("大写字母: %d\n小写字母: %d\n空格: %d\n数字: %d\n其他: %d\n",d,x,k,s,o); } intmain() { chara[N],*p=a; printf("enterstring: "); gets(a); count(p); } */ /* voidzhuangzhi(int(*p)[3]) { inti,j,t; for(i=0;i<3;i++) for(j=0;j<3;j++) if(i { t=*(*(p+i)+j);//*(*(p+i)+j)代表a[i][j] *(*(p+i)+j)=*(*(p+j)+i); *(*(p+j)+i)=t; } } intmain() { int(*p)[3],a[3][3],i,j; p=a; printf("enterarray: \n"); for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]); zhuangzhi(p); printf("newarray: \n"); for(i=0;i<3;i++) for(j=0;j<3;j++) { printf("%-2d",a[i][j]); if(j==2) putchar('\n'); } }*/ /* voidcentral(int(*p)[5]) { inti,j,l=0,r=0,t;//r代表行,l代表列 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++)//四个角放最小元素,每次从第二个元素开始对比 for(j=1;j<5;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;i<5;i++) for(j=1;j<5;j++) if(*(*(p+r)+l)>*(*(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;i<5;i++) for(j=1;j<5;j++) if(i==0&&j==4)//遇到右上角,跳过对比 continue; elseif(*(*(p+r)+l)>*(*(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;i<5;i++) for(j=1;j<5;j++) if(i==0&&j==4||i==4&&j==0)//遇到右上角和左下角,跳过对比 continue; elseif(*(*(p+r)+l)>*(*(p+i)+j)) { r=i;l=j; } t=*(*(p+4)+4);*(*(p+4)+4)=*(*(p+r)+l);*(*(p+r)+l)=t; } intmain() { inta[5][5],(*p)[5]=a,i,j; 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'); } } */ /* voidsort(char*p[],intn)//指针数组处理 { inti,j; char*k; for(i=1;i for(j=i;j if(strcmp(p[i-1],p[j])>0) { k=p[i-1];p[i-1]=p[j];p[j]=k; } } intmain() { char*p[10]={"gutsy","glory","gonad","girth","gaudy","gypsy","gusto","guppy","group","grope"};//测试数据gutsyglorygonadgirthgaudygypsygustoguppygroupgrope inti; printf("enterstrings: "); for(i=0;i<10;i++) printf("%s",p[i]); sort(p,10); printf("\nnewstrings: "); for(i=0;i<10;i++) printf("%s",p[i]); putchar('\n'); } */ /* #defineN20 voidsort(char*p,intn)//指针处理 { inti,j; chark[N]; for(i=1;i for(j=i;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() { chara[10][N]; char*p=a[0];//不能写为*p=a,这等价于是把行向量赋值给列向量 inti; printf("enterstrings: \n"); for(i=0;i<10;i++) scanf("%s",&a[i]);//可写为gets(a[i]),这样写的话,每次输入字符串后按enter,或写为scanf("%s",&a[i]),每输一个字符后按空格即可; sort(p,10); printf("newstrings: \n"); for(i=0;i<10;i++) printf("%s",a[i]); putchar('\n'); } */ /* #definen1000//矩形法求定积分,n为区间分割数目 doubleding(doublea,doubleb,double(*fun)(double)) { doubles=0; inti; for(i=1;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)从%f到%f的积分为%f\n",a,b,s1); printf("cos(x)从%f到%f的积分为%f\n",a,b,s2); printf("exp(x)从%f到%f的积分为%f\n",a,b,s3); } */ /* #defineN10 voidnixu(int*p) { inti,m=N/2,t; for(i=0;i { t=*(p+i); *(p+i)=*(p+N-1-i); *(p+N-1-i)=t; } } intmain() { inta[N],*p=a,i; printf("enter%dnumbers: \n",N); for(i=0;i scanf("%d",&a[i]); nixu(p); printf("newnumbers: \n"); for(i=0;i printf("%d",a[i]); putchar('\n'); } */ /* voidaverage1(float(*p)[6],intn) { inti; floatave=0; for(i=0;i ave+=*(*(p+i)+1)/4; printf("第一门课程的平均分为: %4.2f\n",ave); } floataverage(float(*p)[6]) { inti; floatave=0; for(i=1;i<6;i++) ave+=*(*p+i)/5; returnave; } voidout(float(*p)[6],intn) { inti,j,k,l,s=0; printf("两门课以上不及格的学生: \n"); for(i=0;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.2f\n",average(p+i)); } } if(s==0)//没有符合条件的学生时输出“无” printf("无! \n"); } voidin(float(*p)[6],intn) { inti,j,l; for(i=0;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)>=85) continue; else break; } 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; floata[4][6]={{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++) { for(j=0;j<6;j++) printf("%4.0f",a[i][j]); putchar('\n'); } average1(p,4); out(p,4); in(p,4); } */ /* #defineN10//方法一 intnum1(char*p)//将数字字符串转为整形数字的函数 { intn=strlen(p),i,a=0; for(i=0;i a+=(int)((*(p+i)-48)*pow(10,n-1-i)); returna; } voidnumber(char*p) { inti,num=0,j=1,k=-1,n=strlen(p);//j用于计算数字长度,k用于计算数字个数 inta[N];//最多容纳N个整数 for(i=0;i<=n;i++) { if(*p<'0'||*p>'9') { if(num==1) { *p='\0'; a[k]=num1(p-j); } num=0; } elseif(num==0) { num=1; j=1;//找到新数字时重置j k+=1; } else j+=1; p++; } for(i=0;i printf("%d",a[i]); putchar('\n'); } */ /* #defineN10 voidnumber(char*p)//方法二 { inti,num=0,j=1,k=-1,n=strlen(p);//j用于计算数字长度,k用于计算数字个数 chara[N][10];//最多容纳N个整数,每个整数最多十位数 for(i=0;i<=n;i++) { if(*p<'0'||*p>'9') { if(num==1) { *p='\0'; strcpy(a[k],p-j); } num=0; } elseif(num==0) { num=1; j=1;//找到新数字时重置j k+=1; } else j+=1; p++; } for(i=0;i printf("%s",a[i]); putchar('\n'); } intmain() { chara[100],*p=a;//最多可输入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; } else { return*(p1+i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 第四 版谭浩强 第八 答案