C程序设计(第四版)(谭浩强)完整版课后习题答案.pdf
《C程序设计(第四版)(谭浩强)完整版课后习题答案.pdf》由会员分享,可在线阅读,更多相关《C程序设计(第四版)(谭浩强)完整版课后习题答案.pdf(78页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、页眉内容 C程序设计(第四版)(谭浩强)第一章课后习题答案 P006 1.1 向屏幕输出文字.#include /预编译.代码均调试成功,若有失误大多不是代码问题.自已找找.int main()printf(Welcome to n);return 0;/与int main对应,为了程序可移植性,建议全用int main+return 0;.P008 1.2 求两个数的和.#include 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 调用函数比较两个数的大小.#includ
2、e 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(xy)z=x;else z=y;return(z);/z作为整个程序的出口值,赋给主函数中的c.P015 0.6 三个数的大小.(数字0表
3、示课后练习题)#include 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(xy&xz)/求三者之大的一种方法.m=x;if(
4、yx&yz)m=y;if(zy&zx)m=z;return(m);/返回值m给主函数中的d.C 程序设计(第四版)(谭浩强)第 2 章课后习题答案 算法程序的灵魂 P017 2.1 计算机1-5相乘的积.页眉内容#include int main()int i,s=1;/在执行数值操作前一定要先有个初值.for(i=1;i6;i+)/这里是到6.s=s*i;/相乘 printf(The sum is%d.n,s);return 0;#include /作出要求:换成1到11间奇数相乘.int main()int i,s=1;/在执行数值操作前一定要先有个初值.for(i=1;i12;i+)/这
5、里是到,但题目要求的是取单数.也可以是i=i+2 if(i%2!=0)/i对取模,值为非为奇数;为则为偶数.s=s*i;else continue;/跳过这个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年就会多
6、出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年不设置闰年,误
7、差被调整到 400年仅有0.08天。#include 页眉内容 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);else printf(%d is not a leap year!n,i);P020 2.4 求(1)-(1/2)+(1/3)+(1/99)-(1/100)的值.#include int main()float sign=1,sum=0,deno,term;/关于有小数的计算应该用float.for(deno=1;deno
8、=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.68172 P021 2.5 得到一个大于3的数,并判断是否为素数.#include int main()int i,num,n;/像13,37,这样只能让和它本身除以外,没有其它除数的叫素数.printf(Please input a number:n);/获取一个数值 scanf
9、(%d,&num);for(i=2;inum;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进去.else printf(It is not a prime number!);return 0;2.6-2.10要求
10、用流程图表示上列算法.2.11-2.16要求用N-S图表示上列算法.还要伪代码 P036 0.1 调换二个参数的值.#include 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 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(sai)s
11、=ai;printf(%d is the biggest number!n,s);return 0;P036 0.3 按大小顺序输出一些数.#include 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;jaj)/如果成立,则对换,小于号表示降序排列,大于号表示升序排列.s=ai;ai=aj;
12、aj=s;for(i=0;i=4;i+)/重新定义循环输出数组中新排列的数.printf(%d-,ai);return 0;P036 0.4 求1至100的总合.#include int main()int i,sum=0;/这是一个简单的程序.页眉内容 for(i=0;i101;i+)sum=sum+i;printf(The sum of one to one hundred is%d!n,sum);return 0;P036 0.5 判断一个数能否同时被3和5整除.#include int main()int n;printf(Please input a number:n);scanf(
13、%d,&n);if(n%3=0&n%5=0)/关键句,用并的符号.printf(Can be devide by 3 and 5!n);else printf(Can not be devide by 3 and 5!n);return 0;P036 0.6 输出100-200间的素数./*第一种方法.#include /网络版本,采用调用函数和求根取素.#include /下面用到sqrt,所以需要包含数据函数.sqrt是求根,属数学函数.int main()/学会一个程序采用”主函数+被调用函数”的方式,会比较规范.int i;for(i=100;i=200;i+)/为了书写规范,最好加上
14、,以示清范围.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#include int main()int i;for(i=100;i=200;i+)/指定至间.if(prime(i)=1)/这里i为实参,传入形参j中进行运算,然后再由
15、形参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 /最大公约数用累除法,除到无余数时的被除数是最大公约数.main()int m,n,c,d;int gcd();/这是最大公约数的缩写,此处调用函数,可以不写里面的实参.i
16、nt 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 Divisor int temp;while(x%y!=0)
17、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 Multiple int i,temp;if(xy)/保证二者大的数在X上,小的数在Y上.小于号降序,大于号升序./以下为经典三行码,实现两个数的互换.temp=x;x=y;y=temp;for(i=1;i=y;i+)/设定一
18、个区间,从1至小的数之间的循环.if(!(x*i)%y)/除得尽为零,非零为真,则成立并返回./如此往复,直到取模无余数,那么小的数X乘以区间当前的I值,就是最小公倍数.return x*i;最简单的 C 程序设计顺序程序设计 P037 3.1 把华氏温度转化为摄氏表示法.#include float F_to_C(float input_fah)/代表华转摄,input_fah是局部变量.float output_cen;/这里也是局部变量.output_cen=(5.0/9)*(input_fah-32);/函数的功能体.return output_cen;/返回值,注意,返回值的数据类型
19、应该和函数一致.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 and C_to_F press !n);scanf(%d,&choice);if(choice=1)printf(Please input fahrenheit:
20、);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,(in
21、t)output_fah);return 0;P038 3.2 计算存款利息(关于精度问题).#include 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 页眉内容 int main()/小写范围是97-122,大写范围是65-90,大写加上即得小写.26个字母.char c1
22、,c2;c1=A;c2=c1+32;printf(%c%d,c2,c2);return 0;P059 3.4 给出三角形边长,算出面积.#include#include 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#include int main()double a,b,c,disc,x1,x2,p,q;sc
23、anf(%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#include 页眉内容 int main()double a=1.0;/1是整型,1.0是浮点型,默认是double.可以是float.printf(%.9fn,a/3);return 0;P072 3.7 float型数据的有效位数.#include#include i
24、nt main()float a;/输出的结果是.333252,float精度6位,所以第七位后不可信.a=10000/3.0;printf(%fn,a);return 0;P078 3.8 使用putchar函数输出.#include#include 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#includ
25、e 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#include int main()char a,b;a=getchar();b=a+32;putchar(b);putchar(n);return 0;P082 0.1 国民生产总值10年后的增长倍数.#include#include int ma
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 第四 谭浩强 完整版 课后 习题 答案
限制150内