C程序设计(第四版)-----习题答案参考希望这些代码,可以帮到可以帮助到的同学。在这里,我要说:大家不要去COPY,而是要弄清每行代码的意思,否则我们的辛苦是白费了.感谢,和我一起写代码的几位同学:潘敬、张巍、贺鹏程、刘恒松、李云宽.虽然,这些代码,我们都调试过,辛苦了半个月..但是,也避免不了会有些错误,请同学们见谅.--雷玄2012年3月第三章顺序程序设计李云宽DO第三四章整理时间2012/3/15QQ:1101111111011111101000第1题:假如国民生产年增长率为百分之9%,计算10年后我过国民生产总值与现在相比增长多少百分比#includestdio.hintmain(void){floata,b,sum;b=0.09;sum=(1+b)*(1+b)*(1+b)*(1+b)*(1+b)*(1+b)*(1+b)*(1+b)*(1+b)*(1+b);printf(%f\n,sum);//.乘以10次`.或者用循环`return0;}//或者用POW函数,例:把2的3次方赋给c;c=pow(2,3);第二题:#includestdio.h//存款利息的计算..有1000元,想存5年,可按以下的5钟方法存://(1)一次存5年//(2)先存2年,在将本息存3年//(3)先存3.在`2//(4)先存1年.到期后将本息在存1年.连续5次//(5)存活期存款.活期利息再存1年期,连续存5次//1年定期利息4.14%,2年4.68%;3年5.4;5年5.85%;//活期一季度结算一次0.72%;intmain(void){//(1)doublep,i;p=1000*(1+5*0.0585);//printf(`一次存5年=%lf\n,p);//(2)p=(1000*(1+2*0.0468));i=p*(1+3*0.054);printf(先存2年在存3年=%lf\n,i);//(3)p=(1000*(1+3*0.054));i=p*(1+2*0.0468);printf(先存3年在存2年=%lf\n,i);//(4)p=1000*(1+0.0414);//1i=p*(1+0.0414);//2p=i*(1+0.0414);//3i=p*(1+0.0414);//4p=i*(1+0.0414);//5printf(本息在存1年.连续5次=%lf\n,p);//(5)p=1000*(1+0.0072/4);printf(一个季度=%lf\n,p);for(i=0;i20;i++){p=p*(1+0.0072/4);}printf(5年活期`..季度=%lf\n,p);return0;}第三题:#includestdio.h//购房`从银行`贷款..300000准备`每个月还款`...利率intmain(void){doublei,j,f,k;j=1+0.01;//利率k=300000;//贷款printf(测试.%lf\n,j);f=6000;//每月还款for(i=0;k0;i++){k=k*j;printf(%lf%lf%lf%lf\n,k,j,f,i);k=k-f;printf(%lf%lf\n\n,k,i);}printf(%lf月还清\n,i);return0;}第四题:/*4.用scanf下面的函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=ˊAˊ,c2=ˊaˊ,问在键盘上如何输入?*/#includestdio.hintmain(void){inta,b;floatx,y;charc1,c2;scanf(a=%d_b=%d\n,&a,&b);scanf(_x=%f_y=%f\n,&x,&y);scanf(_c1=%c_c2=%c\n,&c1,&c2);return0;}/*************************a=3_b=7_x=8.5_y=71.82_c1=A_c2=a**************************/第五题:/*6要将China译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母.例如,字母A后面第4个字母是E.E代替A。因此,China应译为Glmre。请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。*/#includestdio.h//方法1:/*intmain(void)//可以直接用循环{charc1='C',c2='h',c3='i',c4='n',c5='a';c1=c1+4;c2=c2+4;c3=c3+4;c4=c4+4;c5=c5+4;printf(密码是=%c%c%c%c%c\n\n,c1,c2,c3,c4,c5);return0;/*!!!!还有这题没有考虑字符是wxyz的情况呢?也就是说还有一种方法,后面有介绍*/}*///方法2:intmain()//用循环加密{charch[]=China;//首先定义数组,每一个字符对应一个数组,例如:ch[1]='C'for(inti=0;i5;i++)//因为有5个字符,循环5次{ch[i]=ch[i]+4;//每次加上4printf(%c,ch[i]);//循环的时候输出}putchar(10);//换行return0;//返回为0,程序正常}/*运行结果:******************密码是Glmre******************/第七题:/*7.设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。*/#includestdio.hvoidmain(void){floatr,h,C1,Sa,Sb,Va,Vb;scanf(%f,%f,&r,&h);C1=2*3.14*r;Sa=3.14*r*r;Sb=4*Sa;Va=4*3.14*r*r*r/3;Vb=Sa*h;printf(C1=%.2f\n,C1);printf(Sa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n,Sa,Sb,Va,Vb);}第八题:(这题要思考,如果有不懂,可不必花时间在此处纠结,通过学习后面的知识,就好理解了)#includestdio.h/*10编程序,用getchar函数读入两个字符给c1、c2,然后分别用函数和函数输出这两个字符。并思考以下问题:(1)变量c1、c2应定义为字符型或整形?抑二者皆可?(2)要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?(3)整形变量与字符变量是否在任何情况下都可以互相代替?如:*/voidmain(void){intc1;charc2;printf(输入第两字符:);c1=getchar();c2=getchar();putchar(c1);putchar(c2);printf(\n%c\n%c,c1,c2);}/****************两者皆可.输出的是字符就行了*****************1/*/voidmain(void){intc1;charc2;printf(输入第两字符:);c1=getchar();c2=getchar();putchar(c1);putchar(c2);printf(\n%c\n%c\n,c1,c2);}/********************************(1)两者皆可.输出的是字符就行了%c*********************************(2)putchar函数是用来输出单个字符的无法输出ASCII码所以想输出ASCII还是用printf+%d吧***************************************#includestdio.hvoidmain(void){charc1,c2;c1=getchar();c2=getchar();printf(c1=%dc2=%d\n,c1,c2);printf(c1=%cc2=%c\n,c1,c2);}****************************************2/(3)int和char不是在任何情况下都可以互相代替,因为int在32位系统下一般分配有4个字节的空间,而char只有一个字节。当存储的数据大于一个字节时,从int转到char型时会损失数据。第四章选择结构程序设计第一题:(呵呵,内事不懂问百度,外事不知问谷歌)/*什么是算术运算?什么是关系运算?什么是逻辑运算?百度的.书上有的.1.算术运算:用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。2.关系运算:用于比较运算。包括大于()、小于()、等于(==)、大于等于(=)、小于等于(=)和不等于(!=)六种。3.逻辑运算:用于逻辑运算。包括与(&&)、或(||)、非(!)三种。4.位操作运算:参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移()、右移()六种。5.赋值运算:用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,=,=)三类共十一种。6.条件运算:这是一个三目运算符,用于条件求值(?:)。7.逗号运算:用于把若干表达式组合成一个表达式(,)。8.指针运算:用于取内容(*)和取地址(&)二种运算。9.求字节数运算:用于计算数据类型所占的字节数(sizeof)。10.特殊运算:有括号(),下标[],成员(→,.)等几种+、-、*、/等数学运算是算术运算==、!=、、、=、=运算是关系运算||、&&、!是逻辑运算*/第二题:/*C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?***0就是假非0就是真***解设有一个逻辑表达式,若其结果为“真”,则以1表示;若其结果为“假”,则以0表示。但是判断一个逻辑量的值时,以0代表“真”,以非0代表“假”。例如3&&5的值为“真”,系统给出3&&5的值为1。第三题:/*4.3写出下面各逻辑表达式的值。设a=3,b=4,c=5。(1)a+bc&&b==ca+b=7c=1b==c0(1)0&&0=0(2)a||b+c&&b-cb+c=9b-c=-1-1不算09&&-1=1(2)a||1=1(3)!(ab)&&!c||134=0!(0)=1!c=01&0=0(3)0||1=1(4)!(x=a)&&(y=b)&&0!(x=a)=0(y=b)=10&&1=0(4)0||0=0(5)!(a+b)+c-1&&b+c/2a+b=7!(7)=0c/2=20+5-1=4b+2=6(5)4&&6=1!算术运算符关系运算符&&||赋值运算符*/第四题:#includestdio.h/*4.4有3个整数a、b、c,由键盘输入,输出其中最大的数。*//*voidmain(void)//方法1:{inta,b,c,d;a=b=c=0;printf(Input:);scanf(%d%d%d,&a,&b,&c);if(ab)//建议写if语句的时候都用{}以便区分{if(bc){printf(max=%d\n,c);}else{printf(max=%d\n,b);}}else{if(ac){printf(max=%d\n,c);}else{printf(max=%d\n,a);}}}*/intmax(intx,inty)//定义自定义函数{intmax;//定义返回值if(xy)//如果x大于y{max=x;//赋给max}else//否则{max=y;//y赋给max}returnmax