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

    C程序设计4(谭浩强)完整版-课后习题答案(64页).doc

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

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

    C程序设计4(谭浩强)完整版-课后习题答案(64页).doc

    -C程序设计4(谭浩强)完整版-课后习题答案-第 64 页C程序设计(第四版)(谭浩强)第一章课后习题答案P006 1.1 向屏幕输出文字.#include <stdio.h> /预编译. 代码均调试成功,若有失误大多不是代码问题.自已找找.int main()printf("Welcome to n"); return 0; /与int main对应,为了程序可移植性,建议全用int main + return 0;.P008 1.2 求两个数的和.#include <stdio.h>int main()int a,b,sum;a=5;b=4;sum=a+b;printf("The sum is %d .n",sum);return 0;P008 1.3 调用函数比较两个数的大小.#include <stdio.h>int main()int max(int x,int y); /被调用函数在主函数后面,用前先声明.int a,b,c;scanf("%d,%d",&a,&b); /输入时要按格式来,此处的逗号,用空格会发生错误.c=max(a,b); /a,b作为实参传入被调用函数中.printf("The max is %d .n",c);return 0;int max(int x,int y) /定义了两个形参.int z; /z属于局部变量,可与主函数中相同名字.if (x>y)z=x;elsez=y;return(z); /z作为整个程序的出口值,赋给主函数中的c.P015 0.6 三个数的大小.(数字0表示课后练习题)#include <stdio.h>int main()int a,b,c,d; /d是用于存储最大值的.int max(int x , int y , int z); /测试可知,在VS2008中,可以不预先声明.printf("Please input 3 numbers :n");scanf("%d %d %d",&a,&b,&c); d=max(a,b,c); /调用函数中有三个形参,这里需要传入三个实参,才可运算.printf("The max is :%d .n",d); / d可以换成max(a,b,c).int max(int x , int y , int z)int m;if (x>y && x>z) /求三者之大的一种方法.m=x;if (y>x && y>z)m=y;if (z>y && z>x)m=z;return (m); /返回值m给主函数中的d.C程序设计(第四版)(谭浩强)第2章课后习题答案算法程序的灵魂P017 2.1 计算机1-5相乘的积.#include <stdio.h>int main()int i,s=1; /在执行数值操作前一定要先有个初值.for(i=1;i<6;i+) /这里是到6.s=s*i; /相乘printf("The sum is %d .n",s);return 0;#include <stdio.h> /作出要求:换成1到11间奇数相乘.int main()int i,s=1; /在执行数值操作前一定要先有个初值.for(i=1;i<12;i+) /这里是到,但题目要求的是取单数.也可以是i=i+2if(i%2!=0) /i对取模,值为非为奇数;为则为偶数.s=s*i;elsecontinue; /跳过这个for循环的这一次,执行下一次.printf("The sum is %d .n",s);return 0;P019 2.2 按要求输出80分以上的学生信息.暂时没法做.P019 2.3 判断2000-2500年中的闰年,并输出.年的概念是地球围绕太阳一周的时间(所谓公转周期)称为一年,这个周期是相当稳定的,很长时间也不会变动1秒,但是真正的一年是365.2423天(目前)。所以,如果每年定义为365天的话,1年就会多出0.2423天,4年就会多出0.9692天,非常接近1天,这样闰年就出现了,也就是每4年要有1年设置为366天,来抵消这多出的1天。规则为:·1)如果年份能被4整除,则该年计为闰年;可是,假如不做调整的话,当400年的时候,累计才多出96.92天,接近于多出97天,闰年的设置却多出来100天,所以要在400年内,再撤销3个闰年。怎么撤销呢?就有了下面这个规则:·2)如果年份能被100整除,则不计为闰年;问题又来了,400年里有4个100年吧,去掉后四个100年后,又少了一个,所以再加一个规则就是:·3)如果年份能被400整除,则计为闰年。简单说来每400年里设置了97个闰年,也就是400里的前3个100年不设置闰年,误差被调整到400年仅有0.08天。#include <stdio.h>int main()int i;for(i=2000;i<=2200;i+)if(i%4=0 && i%100!=0)|i%400=0) /闰年的经典判断条件.printf("%d is a leap year !n",i);elseprintf("%d is not a leap year !n",i);P020 2.4 求(1)-(1/2)+(1/3)+(1/99)-(1/100)的值.#include <stdio.h>int main()float sign=1 , sum=0 , deno , term ; /关于有小数的计算应该用float.for (deno=1;deno<=100;deno+)term=sign*(1/deno); /term临时值,sing符号,deno为分母.sum=sum+term; /第一次总全存储.sign=(-1)*sign; /换号.printf("The sum of deno(指定值) is %f .n",sum); return 0; /若是到100的话,结果为0.68172P021 2.5 得到一个大于3的数,并判断是否为素数.#include <stdio.h>int main() int i , num ,n ; /像13,37,这样只能让和它本身除以外,没有其它除数的叫素数.printf("Please input a number :n"); /获取一个数值scanf("%d",&num);for(i=2;i<num;i+) /在到此数值间进行循环除,如果除得尽,就不满足素数要求.if(num%i=0) /除得尽,则不是.n=1;break; /设置跳出,才不会执行多次.n=0; /按程序走的话,这里会执行多次,不能用printf语句,会输出多次.if(n=0) /单出口问题,虽然n=0执行多次,但仍然是n=0,这样才会只输出一次.printf("It is do a prime number !"); /如果是100-200可以加个”%d”,nmu进去.elseprintf("It is not a prime number !");return 0;2.6-2.10要求用流程图表示上列算法.2.11-2.16要求用N-S图表示上列算法. 还要伪代码P036 0.1 调换二个参数的值.#include <stdio.h>int main() char a='a',b='b',c;c=a;a=b;b=c;printf("a now is %c , b now is %c !n",a,b);return 0;P036 0.2 输入10个数,并输出最大的那一个数.#include <stdio.h>int main() int i,a10,s=0 ;printf("Please input 10 numbers :n");for(i=0;i<=9;i+)scanf("%d",&ai);for(i=0;i<=9;i+)if (s<ai) s=ai;printf("%d is the biggest number !n",s);return 0;P036 0.3 按大小顺序输出一些数.#include <stdio.h>int main() int i , j , a4 , s=0 ;printf("Please input 5 numbers :n"); /此处要回车.for (i=0 ; i<=4 ; i+)scanf("%d",&ai); /这是取多个数的代码,可以用while控制取到n符为止.for (i=0 ; i<=3 ; i+) /双重循环,先一个外循,再轮所有小循,轮完后再下一个大循.for (j=i+1 ; j<=4 ; j+) /第一个循环是至n-1,第二个循环是到n.if (ai>aj) /如果成立,则对换,小于号表示降序排列,大于号表示升序排列.s=ai;ai=aj;aj=s;for (i=0 ; i<=4 ; i+) /重新定义循环输出数组中新排列的数.printf("%d-",ai);return 0;P036 0.4 求1至100的总合.#include <stdio.h>int main()int i , sum=0 ; /这是一个简单的程序.for (i=0 ; i<101 ; i+)sum=sum+i;printf("The sum of one to one hundred is %d !n",sum);return 0;P036 0.5 判断一个数能否同时被3和5整除.#include <stdio.h>int main()int n ;printf("Please input a number :n");scanf("%d",&n);if(n%3=0&&n%5=0) /关键句,用"并"的符号.printf ("Can be devide by 3 and 5 !n");elseprintf ("Can not be devide by 3 and 5 !n");return 0;P036 0.6 输出100-200间的素数./*第一种方法.#include<stdio.h> /网络版本,采用调用函数和求根取素.#include<math.h> /下面用到sqrt,所以需要包含数据函数.sqrt是求根,属数学函数.int main() /学会一个程序采用”主函数+被调用函数”的方式,会比较规范.int i;for (i=100; i<=200; i+) /为了书写规范,最好加上,以示清范围.if(prime_number(i) = 1) /i是实参.printf("%d ",i);return 0;int prime_number(double m) /m是形参.int j,k;k=(int)sqrt(m); /求根,(int)是强制转换,求根里要是浮点型.for(j=2;j<=k;j+) if(m%j=0)return 0; /此值返回给主函数中的实参.return 1;/*第二种方法.#include <stdio.h>#include <math.h>int main()int i;for(i=100;i<=200;i+) /指定至间.if(prime(i)=1) /这里i为实参,传入形参j中进行运算,然后再由形参j带出返回.printf ("%d is the prime number !n",i);return 0;int prime(int j) /j是形参,用于接收实参i给的值.int m, n;m=(int)sqrt(j);for (n=2;n<=m;n+)if(j%n=0)return 0; /返回值,0为不是素数,1是素数.return 1;/*第二种方法.请仿照2.5来写.P036 0.7 最大公约数和最小公倍数.#include <stdio.h> /最大公约数用累除法,除到无余数时的被除数是最大公约数.main ()int m, n, c, d;int gcd(); /这是最大公约数的缩写,此处调用函数,可以不写里面的实参.int lcm(); /这是最小公倍数的缩写,此处调用函数,可以不写里面的实参.printf("Please input two number :n");scanf("%d %d",&m,&n);c=gcd(m,n); /c获取最大公约数d=lcm(m,n); /d获取最小公倍数printf("The GCD of %d and %d is : %d !n", m, n, c);printf("The LCM of %d and %d is : %d !n", m, n, d); return 0;int gcd(int x, int y) /最大公约数Greatest Common Divisorint temp;while(x%y!=0) temp=y; /y在下一轮中作为除数,即是下一轮中的X,所以先闪一边去.y=x%y; /x,y的余数作为下一轮中的Y,由x%y来取得.x=temp; /刚才temp中存储了y的值,现在拿出来作为下一轮中的X使用.return y; /这是每一轮中的被除数,按原理来,这就是最大公约数,即累除法的原理.int lcm(int x, int y) /最小公倍数Lowest Common Multipleint i, temp;if(x<y) /保证二者大的数在X上,小的数在Y上.小于号降序,大于号升序. /以下为经典三行码,实现两个数的互换.temp=x;x=y;y=temp;for(i=1; i<=y; i+) /设定一个区间,从1至小的数之间的循环.if(!(x*i)%y) /除得尽为零,非零为真,则成立并返回. /如此往复,直到取模无余数,那么小的数X乘以区间当前的I值,就是最小公倍数. return x*i;最简单的C程序设计顺序程序设计P037 3.1 把华氏温度转化为摄氏表示法.#include <stdio.h>float F_to_C(float input_fah) /代表华转摄,input_fah是局部变量.float output_cen;/这里也是局部变量.output_cen=(5.0/9)*(input_fah-32); /函数的功能体.return output_cen; /返回值,注意,返回值的数据类型应该和函数一致.float C_to_F(float input_cen)float output_fah;output_fah=(9.0/5)*input_cen+32; /转换过程.return output_fah;int main()int choice;float input_fah,input_cen,output_fah,output_cen; /局部变量的调用及参数传递.printf("F_to_C press <1> and C_to_F press <2> !n");scanf("%d",&choice);if(choice=1)printf("Please input fahrenheit :");scanf("%f",&input_fah); /这个是主函数定义的变量,虽然和调用函数同名.output_cen=F_to_C(input_fah); printf("The 华氏 is %d , 摄氏 is %d .",(int)input_fah,(int)output_cen); if(choice=2)printf("Please input centigrade :");scanf("%f",&input_cen);output_fah=C_to_F(input_cen);printf("The Centigrade is %d , and the Fahrenheit is %d .",(int)input_cen,(int)output_fah);return 0;P038 3.2 计算存款利息(关于精度问题).#include <stdio.h>int main()float p0=1000,r1=0.0036,r2=0.0225,r3=0.0198,p1,p2,p3;p1=p0*(1+r1);p2=p0*(1+r2);p3=p0*(1+r3/2)*(1+r3/2);printf("p1=%fnp2=%fnp3=%fn",p1,p2,p3); return 0;P055 3.3 大写转换成小写#include <stdio.h>int main() /小写范围是97-122,大写范围是65-90,大写加上即得小写.26个字母.char c1, c2;c1='A'c2=c1+32;printf("%c %d",c2,c2);return 0;P059 3.4 给出三角形边长,算出面积.#include <stdio.h>#include <math.h>int main() double a=3.67, b=5.43, c=6.21, s, area;s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c);printf("area is %fn",area); /默认可以组成三角形.return 0;P065 3.5 求一无二次等式的根,默认两个不同根.#include <stdio.h>#include <math.h>int main() double a,b,c,disc,x1,x2,p,q;scanf("%lf %lf %lf",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf("x1=%7.2fnx2=%7.2f",x1,x2);return 0;P071 3.6 用%f输出实数,只能得到六位小数.#include <stdio.h>#include <math.h>int main() double a=1.0; /1是整型,1.0是浮点型,默认是double.可以是float.printf("%.9fn",a/3); return 0;P072 3.7 float型数据的有效位数.#include <stdio.h>#include <math.h>int main()float a; /输出的结果是.333252,float精度6位,所以第七位后不可信.a=10000/3.0;printf("%fn",a);return 0;P078 3.8 使用putchar函数输出.#include <stdio.h>#include <math.h>int main()char a='B',b='O',c='Y'putchar(a);putchar(b);putchar(c);putchar('n');putchar(101); /101是A的ASCII代码的缩写,因为此函数只能输出字符.putchar(66);return 0;P079 3.9 使用getchar得到字符.#include <stdio.h>#include <math.h>int main()char a,b,c;a=getchar();b=getchar();c=getchar();putchar(a);putchar(b);putchar(c); /这也是基本回显的C程序代码.putchar('n');return 0;P081 3.10 getchar得到大写,putchar输出小写.#include <stdio.h>#include <math.h>int main()char a,b;a=getchar();b=a+32;putchar(b); putchar('n');return 0;P082 0.1 国民生产总值10年后的增长倍数.#include <stdio.h>#include <math.h>int main()double p,r=0.09,n=10;p=pow(1+r),n); /这是数学函数, pow(x,y)计算x的y次方.printf("P is %lf when 10 years later .n",p);return 0; /结果是0.36倍.P082 0.2 求各种存款的利息数.#include <stdio.h>#include <math.h>int main()double p,r,n; /年份和当年利率均有给出.p=1000*(1+5*0.0585);printf("5 years is %lf !n",p); /1292.5,这是全五年期.lf输出的是double型.p=(1000*(1+2*0.0468);p=(p*(1+3*0.0540);printf("5 years is %lf !n",p); /1270.76,这是先二年,再三年的.p=(1000*(1+3*0.0540);p=(p*(1+2*0.0468);printf("5 years is %lf !n",p); /1270.76,这是先三年,再二年的.证明,是一样的.p=1000*pow(1+0.0414),5);printf("5 years is %lf !n",p); /1224.86,这难道说是,相对的存死期越久越值钱.p=1000*pow(1+0.072/4),4*5);printf("5 years is %lf !n",p); /1428.74.return 0; P083 0.3 求几个月要以还贷.#include <stdio.h>#include <math.h>int main()double m,r=0.01,d=300000,p=6000; m=(log10(p/(p-d*r)/(log10(1+r);printf("%.1lf",m); /按要求只留一个小数,所以要写%.1lf.return 0;P084 0.6 字母密码转换,调用函数及临界处理.#include <stdio.h>char printcode(char f)if(int)f>86&&(int)f<91)|(int)f>118&&(int)f<123)return(f-26+4); /因为putchar会自动返回,所以改成return,因为这是在函数中,调用需要返回值.elsereturn(f+4);int main()char a,b,c,d,e;printf("Please input :n");a=getchar(); b=getchar();c=getchar();d=getchar();e=getchar(); /临界问题.printf("%c%c%c%c%c",printcode(a),printcode(b),printcode(c),printcode(d),printcode(e); putchar(putcharcode(a);putchar(putcharcode(b);putchar(putcharcode(c);putchar(putcharcode(d);putchar(putcharcode(e);return 0; /注意理解自定义函数的定义,使用,及形参实参的流向./p84的是计算问题,自己看着办,最后要求小数点后两位,用的是%.2lf 来实现,因为没有要求实部,所以m.n格式中m不写./p84的是定义问题,第一问,两者都行,但是定义字母时,scanf要写%c来获取,而定义数值时则要用%d来获取./ 第二问,putchar貌似只能输出字符,所以用printf.putchar本身就是字符输出函数啦,字符,有木有!字符啊!尽管它的参数可以是putchar('101'),效果是输出字符A啊./ 第三问,出现"任何"及"无条件",那么答案明显是"否".可以转换,但要在某此条件下,例如输出和读入时,%c是字母,而%d是数值,看着办.选择结构程序设计P086 4.1 一无二次方程求根的二分支.#include <stdio.h>#include <math.h>int main() double a,b,c,disc,x1,x2,p,q;scanf("%lf %lf %lf",&a,&b,&c);disc=b*b-4*a*c;if(disc<0) /这是选择结构和其判断条件的示例.printf("This equation hasn't real rootsn");elsep=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf("x1=%7.2fnx2=%7.2f",x1,x2);return 0;P087 4.2 二个数按大小输出.#include <stdio.h>int main() /此程序代表按大小顺序输出.float a,b,t;scanf("%f %f",&a,&b); /出错时,注意检查这里是否按格式输入了.比如有个逗号.if(a>b)t=a;a=b;b=t;printf("%5.2f,%5.2fn",a,b);return 0;P088 4.3 三个数按大小输出.#include <stdio.h>int main() /此程序代表按大小顺序输出.float a,b,c,t;scanf("%f %f %f",&a,&b,&c); if(a>b) /此处执行后,a为小者.t=a;a=b;b=t;if(a>c) /此处执行后,a为小者.t=a;a=c;c=t;if(b>c) /上面已经搞定a是最小者,现在对比得出次小者,并且已经归到变量中.t=b;b=c;c=t;printf("%5.2f,%5.2f%5.2fn",a,b,c);return 0;P099 4.4 判断输入字符,并最终按小写输出.#include <stdio.h>int main()char ch;scanf("%c",&ch);ch=(ch>='A'&&ch<='Z')?(ch+32):ch; /条件运算符,真取前,假取后.printf("%cn",ch); return 0;P100 4.5 按要求输出相应的Y值.#include <stdio.h>int main()int x,y;scanf("%d",&x);if(x>=0) if(x>0) /这个范围要基于x>=0来判断.y=1;elsey=0;else /这个是x<0的范围.y=-1;printf("x=%d,y=%d",x,y);return 0;P102 4.6 switch的简单应用.#include <stdio.h>int main()char grade;scanf("%c",&grade);printf("Your score:");switch(grade)case'a':printf("85-100n");break; /当多分支结构过于多时,可以用switch来解决.case'b':printf("70-84n");break;case'c':printf("60-69n");break;case'd':printf("<60n");break;default:printf("Enter data error!n");return 0;P104 4.7 按输入执行操作,并且不分大小写.#include <stdio.h>void action1(int x,int y)printf("x+y=%dn",x+y);void action2(int x,int y)printf("x*y=%dn",x*y);int main()char ch;int a=15,b=23;ch=getchar();switch(ch)case'a':case'A':action1(a,b);break; /a,A共用一个执行语句.case'b':case'B':action2(a,b);break;default:putchar('a'); /'a'可以控制电脑发出蜂鸣声.return 0;P106 4.8 用if的分支来做闰年问题#include <stdio.h>int main()int year,leap; printf("Please input the year:n");scanf("%d",&year);if(year%4=0) /400年里,在100个可除尽4的年里计算,以下是在全范围内计算.if(year%100=0) /既是100个内的,又是可以除尽100的,算是且.if(year%400=0) /相当于且了两次,只余下唯一一个.leap=1;else /400年里只有1个除得尽,其它都不是.leap=0;else /这里的范围是(year%4=0)&&(year%100!=0)leap=1; /在合法的100内,又不是2100,2200一类的,当然属闰年.elseleap=0;if(leap)printf("%d is ",year);elseprintf("%d is not ",year);printf("a leap year !"); /不管上面如何判断,最后还是会输出这一句.return 0;P108 4.9 一元二次等式的全计算过程.#include <stdio.h>#include <math.h>int main()double a,b,c,disc,x1,x2,realpart,imagpart;scanf("%lf %lf %lf",&a,&b,&c);printf("The equation ");if(fabs(a)<=1e-6) /fabs是绝对值, le-6,即是的负六次方,接近或是等于零.printf("is not a quadratic !n"); printf("x1=x2=%lf",-c/b);elsedisc=b*b-4*a*c;if(fabs(disc)<=1e-6) /指数形式,数字1.printf("has two equal roots : %lfn",-b/(2*a);elseif(disc>1e-6)x1=(-b+sqrt(disc)/(

    注意事项

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

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




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

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

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

    收起
    展开