欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C语言程序设计_第三版_谭浩强主编第6—8章课后习题答案.doc

    • 资源ID:52757331       资源大小:118KB        全文页数:41页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言程序设计_第三版_谭浩强主编第6—8章课后习题答案.doc

    C语言第68章课后习题答案第六章 循环语句6.1输入两个正数,求最大公约数和最小公倍数. #include <stdio.h> void main() int a,b,num1,num2,temp; printf("请输入两个正整数:n"); scanf("%d,%d",&num1,&num2); if(num1<num2) temp=num1; num1=num2; num2=temp; a=num1,b=num2; while(b!=0) temp=a%b; a=b; b=temp; printf("它们的最大公约数为:%dn",a); printf("它们的最小公倍数为:%dn",num1*num2/a); 编译已通过6.2输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数.解: #include <stdio.h> void main() char c;int letters=0,space=0,degit=0,other=0;printf("请输入一行字符:n");while(c=getchar()!='n') if(c>='a'&&c<='z' | c>'A'&&c<='Z') letters+; else if(c=' ') space+; else if(c>='0'&&c<='9') digit+; else other+; printf("其中:字母数=%d 空格数=%d 数字数=%d 其它字符数=%dn",letters,space, digit,other); 6.3求s(n)=a+aa+aaa+aaa之值,其中a是一个数字,n表示a的位数。解: void main() int a,n,count=1,sn=0,tn=0; printf("请输入a和n的值:n"); scanf("%d,%d",&a,&n); printf("a=%d n=%d n",a,n); while(count<=n) tn=tn+a; sn=sn+tn; a=a*10; +count; printf("a+aa+aaa+=%dn",sn); 6.4 求 (即1+2!+3!+4!+20!)void main() float n,s=0,t=1; for(n=1;n<=20;n+) t=t*n; s=s+t; printf("1!+2!+20!=%en",s); 阶乘利用递归,再求和:#include<iostream>using namespace std;long Func(int n)if(1=n)return n;if(n>1)return n*Func(n-1);main()long s=0;int i=1;while (i<=6)s=s+Func(i);i+;cout<<s<<endl;6.5 求 。void main() int k,N1=100,N2=50,N3=10; float s1=0.0,s2=0.0,s3=0.0; for(k=1;k<=N1;k+)/*计算1到100的和*/ s1=s1+k; for(k=1;k<=N2;k+)/*计算1到50各数平方和*/ s2=s2+k*k; for(k=1;k<=N3;k+) /*计算1到10各数倒数之和*/ s3=s3+1.0/k; printf("总和=%8.2fn",s1+s2+s3); 已通过int main()int k=1,i=11,j=51;float s=0.0;while(k<=10)s=s+k+k*k+1.0/k;while(k=10 && i<=50)s=s+i+i*i;while(i=50 && j<=100)s=s+j;j+;i+;k+;6.6所谓“水仙开数”是指一个3位数,其个位数字立方和等于该数本身。 #include<stdio.h>void main() int i,j,k,n; printf(" 水仙花数是:n"); for(n=100;n<1000;n+) i=n/100; j=n/10-i*10; k=n%10; if(i*100+j*10+k=i*i*i+j*j*j+k*k*k) printf("%dn",n); printf("n"); 编译已通过153 370 371 4076.7一个数如果恰好等于它的因子之和,这个数就称为“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子。 #include <stdio.h>#define M 1000 /*定义寻找范围*/ void main() int k0,k1,k2,k3,k4,k5,k6,k7,k8,k9; int i,j,n,s; for(j=2;j<=M;j+) n=0; s=j; for(i=1;i<j;i+) if(j%i)= =0) n+; s=s-i; switch(n)/*将每个因子赋给k0,k1k9*/ case 1: k0=i; break; case 2: k1=i; break; case 3: k2=i; break; case 4: k3=i; break; case 5: k4=i; break; case 6: k5=i; break; case 7: k6=i; break; case 8: k7=i; break; case 9: k8=i; break; case 10: k9=i; break; if(s=0) printf("%d是一个完数,它的因子是",j); if(n>1) printf("%d,%d",k0,k1); if(n>2) printf(",%d",k2); if(n>3) printf(",%d",k3); if(n>4) printf(",%d",k4); if(n>5) printf(",%d",k5); if(n>6) printf(",%d",k6); if(n>7) printf(",%d",k7); if(n>8) printf(",%d",k8); if(n>9) printf(",%d",k9); printf("n"); 方法二:此题用数组方法更为简单. void main() int k10; int i,j,n,s; for(j=2;j<=1000;j+) n=-1; s=j; for(i=1;i<j;i+) if(j%i)=0) n+; s=s-i; kn=i;/*将每个因子赋给k0,k1.k9*/ if(s= =0) printf("%d是一个完数,它的因子是:",j); for(i=0;i<n;i+) printf("%d,",ki); printf("%dn",kn); 6.8 有一个分数序列:2/1,3/2,5/3,8/5,13/8,21/13,求出这个数列的前20项之和. 解: #include <stdio.h>void main() int n,t,number=20; float a=2,b=1,s=0; for(n=1;n<=number;n+) s=s+a/b; t=a,a=a+b,b=t; printf("总和=%9.6fn",s); 编译已通过=32.6.9球反弹问题 #include <stdio.h>void main() float sn=100.0,hn=sn/2; int n; for(n=2;n<=10;n+) sn=sn+2*hn;/*第n次落地时共经过的米数*/ hn=hn/2;/*第n次反跳高度*/ printf("第10次落地时共经过%f米 n",sn); printf("第10次反弹%f米.n",hn); 编译已通过经过299.m反弹0.m6.10猴子吃桃问题#include <stdio.h>void main() int day,x1,x2; day=9; x2=1; while(day>0) x1=(x2+1)*2; x2=x1; day-; printf("桃子总数=%dn",x1); 编译已通过=1534上面的程序是从最后一天计算,一直到第一天。当while第一次循环,既day=9的时候,X1此时计算的是第9天的桃子数。而X2既是X1前一天的桃子数。计算出第9天的桃子数后,把X1的值赋值给X2,那么X2此时X2就表示第9天的桃子数,再通过while的循环,可以逐步求出第7天,第6天.一直到第一天的桃子数. 这里X2=X1,就是一个赋值的过程,为的是求前一天的桃子数.6.11用迭代法求x= 。求平方根的迭代公式为: 要求前后两次求出的差的绝对值小于0.00001。#include <stdio.h>#include <math.h> void main() float x0,x1,a; scanf("%f",&a); x1=a/2; do x0=x1;x1=(x0+a/x0)/2;while(fabs(x0-x1)>=0.00001); printf("%.3fn",x1); 编译已通过6.12 用牛顿迭代法求方程在1.5附近的根。 #include <stdio.h>void main() double x,y;x=1.5; doy=2*x*x*x-4*x*x+3*x-6; x=x-y/(6*x*x-8*x+3);while(y!=0); printf("x=%.3fn",x); 编译已通过x=2.0006.13用二分法求方程在(-10,10)之间的根: #include <stdio.h>void main()double x1,x2,y1,y2;x1=-10;x2=10; doy1=2*x1*x1*x1-4*x1*x1+3*x1-6; x1=x1-y1/(6*x1*x1-8*x1+3);while(y1!=0); do y2=2*x2*x2*x2-4*x2*x2+3*x2-6; x2=x2-y2/(6*x2*x2-8*x2+3);while(y2!=0); printf("x1=%.3f,x2=%.3fn",x1,x2); 编译已通过x1=2.000,x2=2.0006.14打印图案 #include <stdio.h>void main() int i,j,k; for(i=0;i<=3;i+) for(j=0;j<=2-i;j+) printf(" "); for(k=0;k<=2*i;k+) printf("*"); printf("n"); for(i=0;i<=2;i+) for(j=0;j<=i;j+) printf(" "); for(k=0;k<=4-2*i;k+) printf("*"); printf("n"); 编译已通过6.15乒乓比赛 #include <stdio.h>void main() char i,j,k; /*i是a的对手;j是b的对手;k是c的对手*/for(i='x'i<='z'i+) for(j='x'j<='z'j+) if(i!=j) for(k='x'k<='z'k+) if(i!=k && j!=k) if(i!='x' && k!='x' && k!='z') printf("顺序为:na-%ctb-%ctc-%cn",i,j,k); 编译已通过7.1用筛选法求100之内的素数. /*用筛选法求100之内的素数*/ #include<math.h> #define N 101 void main() int i,j,line,aN; for(i=2;i<N;i+) ai=i; 6 for(i=2;i<sqrl(N);i+) for(j=i+1;j<N;j+) if(ai!=0 && aj!=0) if(aj%ai=0) aj=0; 11 printf("n"); for(i=2,line=0;i<N;i+) if(ai!=0) printf("%5d",ai); line+; if(line=10) printf("n"); line=0; 21 6,11,21没通过7.2用选择法对10个数排序. /*选择法排序.*/ #include<stdio.h> #define N 10 void main() int i,j,min,temp,aN; /*输入数据*/ printf("请输入十个数:n"); for (i=0;i<N;i+) printf("a%d=",i); scanf("%d",&ai); printf("n"); for(i=0;i<N;i+) printf("%5d",ai); printf("n"); /*排序*/ for (i=0;i<N-1;i+) min=i; for(j=i+1;j<N;j+) if(amin>aj) min=j; temp=ai; ai=amin; amin=temp; /*输出*/ printf("n排序结果如下:n"); for(i=0;i<N;i+) printf("%5d",ai); 编译已通过7.3对角线和: /*计算矩阵对角线元素之和*/ #include <stdio.h> #include <string> void main() int a33; int i,j;/i为行j为列 int sum=0; int sum1=0; /输入 for( i=0; i<=2; i+) for( j=0; j<=2; j+) printf (" 请输入第%d行第%d列的数:", i+1, j+1); scanf ("%d",&aij); printf("n"); /求和 for( i=0; i<=2; i+) for( j=0; j<=2; j+) if(i=j) sum = sum+aij; if(i+j=2) sum1= sum1+aij; 7.4插入数据到数组 /*插入数据到数组*/ #include <stdio.h>void main() int a11=1,3,6,9,13,15,19,27,30,80; int temp1,temp2,number,end,i,j; printf("初始数组如下:"); for (i=0;i<10;i+) printf("%5d",ai); printf("n"); printf("输入插入数据: "); scanf("%d",&number); end=a9; if(number>end) a10=number; else for(i=0;i<10;i+) if(ai>number) temp1=ai; ai=number; for(j=i+1;j<11;j+) temp2=aj; aj=temp1; temp1=temp2; break; for(i=0;i<11;i+) printf("%6d",ai);printf("n"); 编译已通过7.5将一个数组逆序存放。 /*数组逆序存放*/#include <stdio.h> #define N 5 void main() int aN=8,6,5,4,1,i,temp; printf("n 初始数组:n"); for(i=0;i<N;i+) printf("%4d",ai); for(i=0;i<N/2;i+) temp=ai; ai=aN-i-1; aN-i-1=temp; printf("n 交换后的数组:n"); for(i=0;i<N;i+) printf("%4d",ai); 无错误7.6杨辉三角 /*打印杨辉三角形*/#include <stdio.h> #define N 10 void main() int i,j,aNN; for(i=0;i<N;i+) aii=1; ai0=1; for(i=2;i<N;i+) for(j=1;j<=i-1;j+) aij=ai-1j-1+ai-1j; for(i=0;i<N;i+) for(j=0;j<=i;j+) printf("%6d",aij); printf("n"); printf("n"); 7.8鞍点 /*查找鞍点*/ #define N 10 #define M 10 main() int i,j,k,m,n,flag1,flag2,aNM,max,maxi,maxj; printf("n输入行数n:"); scanf("%d",&n); printf("n输入列数m:"); scanf("%d",&m); for(i=0;i<n;i+) printf("第%d行?n",i); for(j=0;j<m,j+); scanf("%d",&aij; for(i=0;i<n;i+) for(j=0;j<m;j+) printf("%5d",aij); pritf("n"); flag2=0; for(i=0;i<n;i+) max=ai0; for(j=0;j<m;j+) if(aij>max) max=aij; maxj=j; for (k=0,flag1=1;k<n && flag1;k+) if(max>akmax) flag1=0; if(flag1) printf("n第%d行,第%d列的%d是鞍点n",i,maxj,max); flag2=1; if(!flag2) printf("n 矩阵中无鞍点! n"); 7.9变量说明:top,bott:查找区间两端点的下标;loca:查找成功与否的开关变量. /*折半查找*/ #include<stdio.h> #define N 15 main() int i,j,number,top,bott,min,loca,aN,flag; char c; printf("输入15个数(ai>i-1)n); scanf("%d",&a0); i=1; while(i<N) scanf("%d",&ai); if(ai>=ai-1) i+; esle printf("请重输入ai"); printf("必须大于%dn",ai-1); printf("n"); for(i=0;i<N;i+) printf("%4d",ai); printf("n"); flag=1; while(flag) printf("请输入查找数据:"); scanf("%d",&number); loca=0; top=0; bott=N-1; if(number<a0)|(number>aN-1) loca=-1; while(loca=0)&&(top<=bott) min=(bott+top)/2; if(number=amin) loca=min; printf("%d位于表中第%d个数n",number,loca+1); else if(number<amin) bott=min-1; else top=min+1; if(loca=0|loca=-1) printf("%d不在表中n",number); printf("是否继续查找?Y/N!n"); c=getchar(); if(c='N'|c='n') flag=0; 7.10/*统计字符数*/ #include<stdio.h>void main() int i,j,uppn,lown,dign,span,othn; char text380; uppn=lown=dign=span=othn=0; for(i=0;i<3;i+) printf("n请输入第%d行:n",i); gets(texti); for(j=0;j<80 && textij!='0'j+) if(textij>='A' && textij<='Z') uppn+=1; else if(textij>='a' && textij<='z') lown+=1; else if(textij>='1' && textij<='9') dign+=1; else if(textij=' ') span+=1; else othn+=1; for(i=0;i<3;i+) printf("%s=n",texti); printf("大写字母数:%dn",uppn); printf("小写字母数:%dn",lown); printf("数字个数:%dn",dign); printf("空格个数:%dn",span); printf("其它字符:%dn",othn); 编译已通过7.11/*打印图案*/ #include<stdio.h>void main() static char a5='*','*','*','*','*' int i,j,k; char space=' ' for(i=0;i<=5;i+) printf("n"); for(j=1;j<=3*i;j+) printf("%lc",space); for(k=0;k<=5;k+) printf("%3c",ak); 7.12/*译电文*/ #include<stdio.h> void main() int i,n; char ch80,tran80; printf("请输入字符:"); gets(ch); printf("n密码是:%s",ch); i=0; while(chi!='0') if(chi>='A')&&(chi<='Z') trani=26+64-chi+1+64; else if(chi>='a')&&(chi<='z') trani=26+96-chi+1+96; else trani=chi; i+; n=i; printf("n原文是:"); for(i=0;i<n;i+) putchar(trani);printf("n"); 编译已通过7.13/*连接两个字符串(不用'stract')*/ #include <stdio.h>void main() char s180,s240; int i=0,j=0; printf("n请输入字符串1:"); scanf("%s",s1); printf("请输入字符串2:"); scanf("%s",s2); while(s1i!='0') i+; while(s2j!='0') s1i+=s2j+; s1i='0' printf("连接后字符串为:%sn",s1); 编译已通过7.14/*字符串比较*/ #include<stdio.h> void main() int i,resu; char s1100,s2100; printf("请输入字符串1:"); gets(s1); printf("请输入字符串2:"); gets(s2); i=0; while(s1i=s2i) && (s1i!='0')i+; if(s1i='0' && s2i='0')resu=0; else resu=s1i-s2i; printf("%s与%s比较结果是%dn",s1,s2,resu); 编译已通过7.15/*字符串复制*/ #include <stdio.h> #include <string.h>void main() char from80,to80; int i;printf("请输入字符串1:"); scanf("%s",to);printf("请输入字符串2:"); scanf("%s",from); for(i=0;i<=strlen(from);i+) toi=fromi; printf("复制字符串为:%sn",to); 第8章 函数参考答案 【知识要点】 C语言的基本组成单位函数。 C是由一个且仅有一个主函数( main)和若干个子函数组成.子函数可有可无。 一个C语言源程序执行,从主函数开始,以主函数结束。语言称为函数式语言,即用户可根据解决问题的算法编成一个相对独立的函数模块,然后采用调用的方法来使用函数。采用了函数模块式的结构的特点:程序的层次结构清晰,便于程序的编写、阅读和调试。语言提供了极为丰富的库函数,使用这些库函数时,在源程序的头部使用文件包含命令。如:数学函数 #include <math.h>字符函数 #include <ctype.h>字符串函数 #include <string.h>输入输出函数 #include <stdio.h>动态存储分配函数 #include <stdlib.h> #include <malloc.h>清屏函数 #include <conio.h>日期和时间函数 #include <time.h>函数可以嵌套调用,而不可嵌套定义。函数的值: 函数的值的数据类型由函数定义时所决定的。调用函数时可有返回值和无返回值两种。有返回值的函数在函数体内必有一条或多条 return 语句,无返回值的函数定义为void类型,且在函数体无return 语句。函数调用时参数的传递:主调函数和被调函数之间数据传递有两种,数值传递和地址传递。【习题参考答案】8.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。【解析】用碾转相除法求最大公约数。最小公倍数两个整数之积/最大公约数。#include <stdio.h>int gcf(int x,int y) /*求两整数的最大公约数*/int t,r; if (x<y) t=x;x=y;y=t; while (r=x%y)!=0) x=y; y=r; return y;int lcm(int x,int y,int h) /*求两整数的最小公倍数*/ return(x*y/h);void main ( ) int a,b,df,sc; /* df:所求的最大公约数,sc:所求的最小公倍数*/ printf("Input a,bn"); scanf(“%d%d”,&a,&b); df=gcf(a,b); printf(“G.C.F=%dn”,df); sc=lcm(a,b,df); printf(“L.C.M=%dn”,sc);8.2 求方程ax2+bx+c=0的根,用3个函数分别求当b2-4ac大于0,等于0和小于0时的根,并输出结果。从主函数输入a,b,c的值。# include <math.h>void real_root(float a,float b,float disc) /*求方程的两个不相同的实根*/float x1,x2; x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf("x1=%5.2ftx2=%5.2fn",x1,x2);void equal_root(float a,float b) /*求方程的两个相同的实根*/ float x1,x2; x1=x2=(-b)/(2*a); printf("x1=%5.2ftx2=%5.2fn",x1,x2);void imaginary_root(float a,float b,float disc) /*求方程的两个不相同的虚根*/ float p,q; p=-b/(2*a); q=sqrt(disc)/(2*a); printf("x1=%5.2f+%5.2fitx2=%5.2f-%5.2fin",p,q,p,q);void main ( ) float a,b,c,disc; printf("nInput a,b,c:n"); scanf("%f%f%f",&a,&b,&c); disc=b*b-4*a*c; if (disc>0) real_root(a,b,disc); else if (disc=0) equal_root(a,b); else imaginary_root(a,b,disc);8.3写一个判素数的函数,在主函数输入一个整数,输出是否素数的信息。【解析】:素数(质数):只能被1和该整数本身整除的数为素数。换句话说,只有两个正因数(1和自己)的自然数即为素数。#include <stdio.h>int prime(int n) int flag=1,i; /*flag:标识变量*/ for (i=2;i<=n/2 && flag=1;i+) if (n%i=0) flag=0; return flag ;void main ( ) int n; printf("nInput an integer:"); scanf("%d",&n); if (prime(n) printf("n %d is a prime.",n); else printf("n %d is not a prime.",n); 【扩展】求100以内的所有的素数。#include <stdio.h>int prime(int n) int flag=1,i; /*flag:标识变量*/ for (i=2;i<=n/2 && flag=1;i+)

    注意事项

    本文(C语言程序设计_第三版_谭浩强主编第6—8章课后习题答案.doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开