C程序设计(第四版)(谭浩强)第一章课后习题答案P0061.1向屏幕输出文字.#includestdio.h//预编译.代码均调试成功,若有失误大多不是代码问题.自已找找.intmain(){printf(Welcometomybbing.com\n);return0;//与intmain对应,为了程序可移植性,建议全用intmain+return0;.}P0081.2求两个数的和.#includestdio.hintmain(){inta,b,sum;a=5;b=4;sum=a+b;printf(Thesumis%d.\n,sum);return0;}P0081.3调用函数比较两个数的大小.#includestdio.hintmain(){intmax(intx,inty);//被调用函数在主函数后面,用前先声明.inta,b,c;scanf(%d,%d,&a,&b);//输入时要按格式来,此处的逗号,用空格会发生错误.c=max(a,b);//a,b作为实参传入被调用函数中.printf(Themaxis%d.\n,c);return0;}intmax(intx,inty)//定义了两个形参.{intz;//z属于局部变量,可与主函数中相同名字.if(xy)z=x;elsez=y;return(z);//z作为整个程序的出口值,赋给主函数中的c.}P0150.6三个数的大小.(数字0表示课后练习题)#includestdio.hintmain(){inta,b,c,d;//d是用于存储最大值的.intmax(intx,inty,intz);//测试可知,在VS2008中,可以不预先声明.printf(Pleaseinput3numbers:\n);scanf(%d%d%d,&a,&b,&c);d=max(a,b,c);//调用函数中有三个形参,这里需要传入三个实参,才可运算.printf(Themaxis:%d.\n,d);//d可以换成max(a,b,c).}intmax(intx,inty,intz){intm;if(xy&&xz)//求三者之大的一种方法.m=x;if(yx&&yz)m=y;if(zy&&zx)m=z;return(m);//返回值m给主函数中的d.}C程序设计(第四版)(谭浩强)第2章课后习题答案算法——程序的灵魂P0172.1计算机1-5相乘的积.#includestdio.hintmain(){inti,s=1;//在执行数值操作前一定要先有个初值.for(i=1;i6;i++)//这里是到6.{s=s*i;//相乘}printf(Thesumis%d.\n,s);return0;}#includestdio.h//作出要求:换成1到11间奇数相乘.intmain(){inti,s=1;//在执行数值操作前一定要先有个初值.for(i=1;i12;i++)//这里是到,但题目要求的是取单数.也可以是i=i+2{if(i%2!=0)//i对取模,值为非为奇数;为则为偶数.s=s*i;elsecontinue;//跳过这个for循环的这一次,执行下一次.}printf(Thesumis%d.\n,s);return0;}P0192.2按要求输出80分以上的学生信息.暂时没法做.P0192.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天。#includestdio.hintmain(){inti;for(i=2000;i=2200;i++){if((i%4==0&&i%100!=0)||i%400==0)//闰年的经典判断条件.printf(%disaleapyear!\n,i);elseprintf(%disnotaleapyear!\n,i);}}P0202.4求(1)-(1/2)+(1/3)……+(1/99)-(1/100)的值.#includestdio.hintmain(){floatsign=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(Thesumofdeno(指定值)is%f.\n,sum);return0;//若是到100的话,结果为0.68172}P0212.5得到一个大于3的数,并判断是否为素数.#includestdio.hintmain(){inti,num,n;//像13,37,这样只能让和它本身除以外,没有其它除数的叫素数.printf(Pleaseinputanumber:\n);//获取一个数值scanf(%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(Itisdoaprimenumber!);//如果是100-200可以加个”%d”,nmu进去.}else{printf(Itisnotaprimenumber!);}return0;}2.6-2.10要求用流程图表示上列算法.2.11-2.16要求用N-S图表示上列算法.…………还要伪代码P0360.1调换二个参数的值.#includestdio.hintmain(){chara='a',b='b',c;c=a;a=b;b=c;printf(anowis%c,bnowis%c!\n,a,b);return0;}P0360.2输入10个数,并输出最大的那一个数.#includestdio.hintmain(){inti,a[10],s=0;printf(Pleaseinput10numbers:\n);for(i=0;i=9;i++){scanf(%d,&a[i]);}for(i=0;i=9;i++){if(sa[i])s=a[i];}printf(%disthebiggestnumber!\n,s);return0;}P0360.3按大小顺序输出一些数.#includestdio.hintmain(){inti,j,a[4],s=0;printf(Pleaseinput5numbers:\n);//此处要回车.for(i=0;i=4;i++){scanf(%d,&a[i]);//这是取多个数的代码,可以用while控制取到\n符为止.}for(i=0;i=3;i++)//双重循环,先一个外循,再轮所有小循,轮完后再下一个大循.{for(j=i+1;j=4;j++)//第一个循环是至n-1,第二个循环是到n.{if(a[i]a[j])//如果成立,则对换,小于号表示降序排列,大于号表示升序排列.{s=a[i];a[i]=a[j];a[j]=s;}}}for(i=0;i=4;i++)//重新定义循环输出数组中新排列的数.printf(%d-,a[i]);return0;}P0360.4求1至100的总合.#includestdio.hintmain(){inti,sum=0;//这是一个简单的程序.for(i=0;i101;i++)sum=sum+i;printf(Thesumofonetoonehundredis%d!\n,sum);return0;}P0360.5判断一个数能否同时被3和5整除.#includestdio.hintmain(){intn;printf(Pleaseinputanumber:\n);scanf(%d,&n);if(n%3==0&&n%5==0)//关键句,用并的符号.printf(Canbedevideby3and5!\n);elseprintf(Cannotbedevideby3and5!\n);return0;}P0360.6输出100-200间的素数.//********************第一种方法.#includestdio.h//网络版本,采用调用函数和求根取素.#includemath.h//下面用到sqrt,所以需要包含数据函数.sqrt是求根,属数学函数.intmain()//学会一个程序采用”主函数+被调用函数”的方式,会比较规范.{inti;for(i=100;i=200;i++)//为了书写规范,最好加上{},以示清范围.if(prime_number(i)==1)//i是实参.printf(%d,i);return0;}intprime_number(doublem)//m是形参.{intj,k;k=(int)sqrt(m);//求根,(int)是强制转换,求根里要是浮点型.for(j=2;j=k;j++){if(m%j==0)return0;//此值返回给主函数中的实参.}return1;}//********************第二种方法.#includestdio.h#includemath.hintmain(){inti;for(i=100;i=200;i++)//指定至间.{if(prime(i)==1)//这里i为实参,传入形参j中进行运算,然后再由形参j带出返回.printf(%distheprimenumber!\n,i);}return0;}intprime(intj)//j是形参,用于接收实参i给的值.{intm,n;m=(int)sqrt(j);for(n=2;n=m;n++){if(j%n==0)return0;//返回值,0为不是素数,1是素数.}return1;}//********************第二种方法.请仿照2.5来写.P0360.7最大公约数和最小公倍数.#includestdio.h//最大公约数用累除法,除到无余数时的被除数是最大公约数.main(){intm,n,c,d;intgcd();//这是最大公约数的缩写,此处调用函数,可以不写里面的实参.intlcm();//这是最小公倍数的缩写,此处调用函数,可以不写里面的实参.printf(Pleaseinputtwonumber:\n);scanf(%d%d,&m,&n);c=gcd(m,n);//c获取最大公约数d=lcm(m,n);//d获取最小公倍数printf(TheGCDof%dand%dis:%d!\n,m,n,c);printf(TheLCMof%dand%dis:%d!\n,m,n,d);return0;}intgcd(intx,inty)//最大公约数G