C语言课后答案.doc
苏小红等编著,电子工业出版社感谢龙三少同学的支持.第一章:1.1硬件:光盘驱动器,硬盘驱动器,网络卡,声音卡,CPU,主板,内存,游戏杆,键盘,鼠标.软件:QQ,迅雷,千千静听,暴风影音,超星阅读器,X-scan.1.2五个部分:控制器,运算器,存储器,输入设备,输出设备.1.3/*功能:本程序修改课本上例1.4,计算123+456 作者:漏网之鱼 创建日期:20070729 版本:无 修改:无 */#include<stdio.h>main() printf("%dn",123+456); /*只修改这儿即可*/ 1.4BASIC,C,C+,C#,Java,VB;PHP,JavaScript,VBScript,ASP,PYTHON,Ruby On Rails.1.5学习:在上搜索资料.生活:在QQ上泡MM.第二章:2.1第五个和第六个是合法的.2.2CBABDDDCB2.3(1).sqr(a*a+b*b)/(2*c)(2).fabs(a+b)*(c+d)+2)(3).(log(x)+sin(y)/2(4).2*PI*r /*其中PI是宏常量,即 #define PI 3.141592653*/(5).1/(1+1/x)(6).(sin(3.141592653/6)+2*exp(x)/(2*y+pow(y,x)第三章: 3.1:C语言语句分为四个类型:控制语句;表达语句;复合语句;空语句.3.2:CD /*本小题答案感谢观海听涛的东东同学的提醒*/3.3:(1)地址前没有&scanf("%d,%d",&a,&b);(2)类型不匹配printf("%f",f);(3)类型不匹配scanf("%lf%d",&var,&a);(4)地址前没有&scanf("%d,%dn",&a,&b);(5)scanf不能限制精度scanf("%5f",&f);(6)scanf中不能有=scanf("%d,%d",&a,&b);3.4:(1)aabbccabc(2)0 1 1(3)68(4)3.500000(5)12 9 13 9(6)12 9 13 93.5:/*功能:本程序从键盘接收三个参数,分别为三角形的三条边 输出三角形的面积 作者:漏网之鱼 日期:20070731 修改:版本:无*/#include<stdio.h>#include<math.h>int main() float a,b,c,s,area; printf("input a,b and c:n");reput: /*提示输入三条边长度*/ scanf("%f%f%f",&a,&b,&c); if (a+b<c&&a-b<c) printf("error! reput please:n"); /*如果不能组成三角形,则重新输入*/ goto reput; s=1.0/2*(a+b+c); area=sqrt(s*(s-a)*(s-b)*(s-c); /*根据公式计算面积*/ printf("the area is %fn",area); return (0); 第四章:4.1:(1)见课本69页.(2)见课本138页.(3)见课本138页139页.4.2:(1)D(2)B(3)D(4)D /*第二小题改正感谢观海听涛的东东同学的提醒, 同学们做题要用眼镜,否则容易做错题,当然,这是我为自己找的一个借口*/4.3:(1)over!(2)right/*出题者希望答案是这个,不过,课本上这个程序不可能通过编译,因为没有包含头文件conio.h.即课本上的程序中并没有#include<conio.h>"居然用了getchar,用个毛!"(冰雪封情语)*/(3)答案同上,问题同上.(4)这个我不说你也猜得到吧.(5)abcdefg$abcdefg abcdefg/*老实说,我对他们把conio.h这个头文件忘了非常气愤,建议读者看一下K&R C.*/(6)* * * *(7)*#*#*#$4.4:(1)(year%4=0&&year%100!=0)|(year%400=0) flag(2)(ch>=65&&ch<=90)|(ch>=95&&ch<=124)ch>48&&ch<58ch=32(3)fahrcelsius=5.0/9.0*(fahr-32) fahr+=step/*我又不得不多说几句了,这个程序很经典,我相信大伙以后还会看到的.只是课本上第十二行少了一个%,它是这么写的pirntf("4.0ft%6.1fn",fahr,celsius);上面一个还漏了<conio.h>,你用getchar,用个毛!*/ 4.5:/*功能:该程序判断输入的数字的奇偶性以及正负.作者:漏网之鱼日期:20070804修改:版本:无*/ #include<math.h> #include<stdio.h> int main(void) int s;printf("please input the number:n"); scanf("%d",&s);if (s>0) printf("it's a positive numbern "); /*判断这个数字是不是大于零*/ else if (s=0) printf("it's zero!n"); /*为零*/ else printf("it's a negetive numbern"); /*负数*/ if(int)fabs(s)%2) /*用这个数的绝对值取模,如为1,则为奇数,否则为偶数*/ printf("it's a odd numbern"); else printf("it's a even numbern"); getch();return (0);4.6:/*功能:一个分段函数,根据X的值输出Y.作者:漏网之鱼日期:20070805修改:版本:无*/ #include<stdio.h> #include<math.h> int main(void) int x; float y; printf("enter x please!n"); scanf("%d",&x); if(x) /*非零的X*/ if (x>0) y=exp(-x); printf("y is %fn",y); else y=-(exp(x); /*老实说,优先级我也搞不懂,还是加个括号比较保险*/ printf("y is %fn",y); else y=1; printf("y is %fn",y); return(0);4.7:/*功能:判断输入的三条边能否组成三角形,并判断三角形的类型作者:漏网之鱼日期:20070805版本:修改:无*/ #include<stdio.h> int main(void) int a,b,c; printf("enter a,b,c please:n"); scanf("%d%d%d",&a,&b,&c); if(a-b<c)&&(a+b>c) if(a=b|b=c|c=a) printf("it's aisoceles trianglen"); else if (a*a+b*b=c*c|a*a+c*c=b*b|c*c+b*b=a*a) printf("it's a right-angled trianglen"); else printf("it's a normal trianglen"); else printf("they cann't make up of a trianglen");return(0); 4.8:/*功能:根据输入显示一句话作者:漏网之鱼日期:20070805修改:版本:无*/ #include<stdio.h> int main(void) int c;printf("*Time*n1 morningn2 afternoonn3 nightnplease enter");printf("your choice:n"); /*这两句比较变态,建议不用*/ scanf("%d",&c);switch (c) case 1: printf("Good morningn"); break; case 2: printf("Good afternoonn"); break; case 3: printf("Good nightn"); break; default : printf("Selection error!n"); break; return(0);4.9:/*功能:得到一个年份和一个月份,输出这个月有多少天作者:漏网之鱼日期:20070805修改:版本:无*/ #include<stdio.h> int main(void) int year,month,flag; printf("enter the year and monthn"); scanf("%d%d",&year,&month); if(year%4=0&&year%100!=0)|(year%400=0) flag=1; else flag=0; printf("the month of the year have ");switch (month) case 1: printf("31"); break;case 2: printf("%d",flag+28); break;case 3: printf("31"); break;case 4: printf("30"); break;case 5: printf("31"); break; /*这儿这么多,显然是麻烦了,你可以试试用几个for循环*/case 6: printf("30"); break;case 7: printf("31"); break;case 8: printf("31"); break;case 9: printf("30"); break;case 10: printf("31"); break;case 11: printf("30"); break;case 12: printf("31"); break; printf(" daysn"); return(0);4.10:/*功能:计算从1加到101,其中每次加二作者:漏网之鱼日期:20070805版本:修改:无*/#include<stdio.h>int main(void) int i=101,sum=0; while(i+1) sum+=i; /*这个题蛮有意思*/ i-=2; printf("the sum is %d",sum); return(0);4.11:/*功能:计算从1到99的和,其中第一项是该数字和它后面两个数字的乘积作者:漏网之鱼日期:20070805修改:版本:无*/ #include<stdio.h> int main(void) int i=99,sum=0; while(i+1) sum+=i*(i+1)*(i+2); /*和上一题一样,没有什么可说的*/ i-=2; printf("the sum is %d",sum); return(0);4.12:/*功能:计算从1到10的阶乘的和作者:漏网之鱼日期:20070805修改:版本:无*/ #include<stdio.h> #include<math.h> int fac(int x); /*不好意思,这儿用了个函数(chapter5)*/ int main(void) int i=4,sum=0; while(i) sum+=fac(i); i-; printf("the sum is %d",sum); return(0);int fac(int i) int fac=1; while(i) fac*=i; /*函数功能:计算输入参数的阶乘*/ i-; return (fac);4.13:/*功能:不好说,假设N=2,A=3,它就会计算33+3,N=4,A=3,它会算3333+333+33+3作者:漏网之鱼日期:20070805修改:版本:无*/ #include<stdio.h> #include<math.h> int main(void) int a,n,sum=0,i=0; printf("enter a and n please:n"); scanf("%d%d",&a,&n); while(n) sum+=a*n*pow(10,i); /*这句有些乱.*/ n-=1; i+=1; printf("the sum is %d",sum); return(0);4.14:/*功能:计算PI的值作者:漏网之鱼日期:20070805版本:修改:无*/ #include<stdio.h> int main(void) float n=50, pi,sum=1; /*可以将这一百个数分为50组,规律就出来了*/ while(n) sum*=(2*n)*(2*n)/(2*n-1)*(2*n+1); n-=1; pi=sum+sum; printf("pi is %f",pi); return(0);4.15:/*功能:计算共加了多少项才可以让最后一项小于0.00001作者:漏网之鱼日期:20070805版本:修改:无*/ #include<math.h> #include<stdio.h> #define mix 0.00001 int fac(int x); int main(void) int n=1; while(float)1/fac(n)>mix) n=n+=1; printf("we add it %d timesn",n+2);/*当它小于0.00001时,WHILE结束*/ return(0); /*此时应多加1,第一项为1,故加2*/ int fac(int i) int fac=1; while(i) fac*=i; i-; return (fac);4.16:/*功能:相加直到加数的绝对值小于0.0001作者:漏网之鱼日期:20070806修改:版本:无*/ #include<math.h> #include<stdio.h> #define mix 0.0001 int main(void) int sign=1,n=1; float sum=0,term=1; while(fabs(term)>mix) n+; sign=-sign; sum+=term; term=(float)sign/n; printf("the sum is %f",sum); return(0);4.17:/*功能:相加直到加数的绝对值小于0.00001作者:漏网之鱼日期:20070806修改:版本:无*/ #include<math.h> #include<stdio.h> #define mix 0.00001 int main(void) float x,term,sum=0; int n=1; printf("enter x please:n"); scanf("%f",&x); term=x; printf("term is %fn",term);while(fabs(term)>mix) sum+=term; term=-term*x*x/(n+1)*(n+2); n+=2; printf("the sum is %f",sum); return(0);4.18:/*功能:打印所有水仙花数作者:漏网之鱼日期:20070807修改:版本:无*/ #include<stdio.h> int main(void) int high,mid,low,n;for(n=100;n<1000;n+) low=n%10; mid=(n/10)%10; /*除以10并以10取模,得十位数*/ high=n/100; /*整数除,得百位数*/ if(n=low*low*low+high*high*high+mid*mid*mid) printf("the flower number is %dn",n); return(0);4.19:/*功能:计算一个数字的各位之和作者:漏网之鱼日期:20070807修改:版本:无*/ #include<math.h> #include<stdio.h> int main(void) int num,sum; printf("enter the number please:n"); scanf("%d",&num); num=fabs(num); /*这儿破坏了原始数据*/ sum=num%10+(num/10)%10+(num/100)%10+num/1000; printf("the sum is %d",sum); return(0);4.20:/*功能:找出符合的最小数作者:漏网之鱼日期:20070807版本:修改:无*/ #include<stdio.h> int main(void) int x; for(x=1;x+) if(x%5=1&&x%6=5&&x%7=4&&x%11=10) break; printf("the number is %d",x); return(0);4.21:/*功能:计算符合题目的台阶数作者:漏网之鱼日期:20070807修改:版本:无*/ #include<stdio.h> int main(void) int x; for(x=1;x<10000;x+)/*也许你已经猜出来了,这个题目并不只有一个答案,我的*/ /*意见,可以看一下世界最高楼,然后计算一下该楼的台阶*/ if(x%2=1&&x%3=2&&x%5=4&&x%6=5&&x%7=0)/*数,然后说,"故台阶可能*/ printf("the number is %dn",x);/*是X,Y或Z个"当然,注明是在一定时间*/ /*内成立的,过了就又有更高的楼了.*/ return(0);4.22:/*功能:计算符合题目的数目作者:漏网之鱼日期:20070807修改:版本:无*/ #include<stdio.h> int main(void)int whi,red,bla; for(whi=0;whi<4;whi+) for(red=0;red<4;red+) for(bla=0;bla<5;bla+) if(whi+red+bla=8) printf("the white is %d,the red is",whi);/*没什么,就是*/ printf(" %d,the black is %dn",red,bla);/*一行写不下了*/ return(0);4.23:/*功能:算出符合题目的鸡和兔的数目作者:漏网之鱼日期:20070807修改:版本:无*/ #include<stdio.h> int main(void) int chi,rab;for(chi=0;chi<98;chi+) rab=98-chi; if(chi+chi+rab+rab+rab+rab=386)/*你要知道,计算机算加法快一些.*/ printf("%d chickens and %d rabbits has 386 legsn",chi,rab); return(0);4.24:/*功能:计算<算经>中的数学问题作者:漏网之鱼日期:20070807修改:版本:无*/ #include<stdio.h> int main(void)int male,fema,chick;for(male=0;male<20;male+) for(fema=0;fema<33;fema+) chick=100-male-fema; if(male*5+fema*3+chick/3=100)/*加法快一些,但太长了.*/ printf("it can buy %d males,",male); printf("%d famales,%d chicksn",fema,chick); return(0);4.25:/*功能:计算1.5元可以兑换的分币作者:漏网之鱼日期:20070807修改:版本:无*/ #include<stdio.h> int main(void)int nfive,ntwo,none; for(nfive=1;nfive<29;nfive+) for(ntwo=1;ntwo<74;ntwo+) none=100-nfive-ntwo; if(nfive*5+ntwo*2+none=150) printf("%d five cents,%d ",nfive,ntwo); printf("two cents,%d one centsn",none); return(0);4.26:/*功能:打印九九乘数表作者:漏网之鱼日期:20070807修改:版本:无*/ #include<stdio.h> int main(void) int i,j; for(i=1;i<10;i+) printf("%dt",i); printf("n"); /*这句不在for中*/ for(i=1;i<10;i+) printf("-t"); printf("n"); /*这句也是*/ for(i=1;i<10;i+) for(j=1;j<10;j+) if(j<i) printf(" t"); else printf("%dt",i*j); printf("n"); /*这句并不在内部的for中*/ getch();4.27:(1):/*功能:打印一个图案作者:漏网之鱼日期:20070807修改:版本:无*/ #include<stdio.h> int main(void) int i,j; for(i=0;i<4;i+) for(j=i;j<3;j+) printf(" "); /*先打空格*/ for(j=1;j<7;j+) printf("*"); /*再打星号*/ printf("n") ; return(0);(2):/*功能:打印一个图案作者:漏网之鱼日期:20070807修改:版本:无*/ #include<stdio.h> int main(void) int i,j; for(i=1;i<9;i+=2) for(j=1;j<=i;j+) printf("*"); printf("n"); return(0);(3):/*功能:打印一个图案作者:漏网之鱼日期:20070807修改:版本:无*/ #include<stdio.h> int main(void) int i,j; for(i=0;i<=3;i+) /*星号个数从0到3*/ for(j=0;j<i+4;j+)/*每行打印的数目递增,比i多4*/ if (j<3-i) /*先多后少*/ printf(" "); else printf("*"); printf("n"); return(0);4.28:/*功能:打印九九乘根表作者:漏网之鱼日期:20070807修改:版本:无*/ #include<stdio.h> #include<math.h> int main(void) int i,j; printf(" "); /*这儿是四个空格*/for(i=0;i<=9;i+) printf("%d",i); printf(" ");/*而这儿是七个*/ /*解释一下,本来我不想用这么多变态的空格*/printf("n"); /*然而,我如何用"t"也整不出书上的效果*/for(i=0;i<10;i+) /*本程序环境为windows xp sp2+win-tc1.9.00*/ printf("%d ",i); for(j=0;j<=9;j+) printf("%4.3f",sqrt(i*10+j); printf(" ");/*这儿是三个*/ printf("n"); return(0);第五章:5.1:ACD BCD5.2:因为在Delay函数中没有返回值5.3:2,6,42,35.4:int isprime(int i) int isprime=1,n=2; if(i!=1) while(i%n) n+; /*本函数判断一个数是不是素数*/ if (n>=i) /*是,则返回1,否则为0*/ break; /*即查看一下,该数不为1时,可整除的数是否只*/ /*有它本身,如是,则是素数*/ if (n!=i) isprime=0; return(isprime); 5.5:/*功能:本程序计算几个数的阶乘,其中阶乘的各数须大于0作者:漏网之鱼日期:20070807修改:版本:无*/ #include<stdio.h> int fac(int i) int num=1; if(i!=1) num=i*fac(i-1); return(num); int main(void) float p; int k,m; printf("enter k and m please(positive&&m>k):n"); scanf("%d%d",&k,&m); if(k<1|m<1|(m-k)<1) printf("some srror!"); else p=fac(k)/fac(m-k); printf("p is %f",p); return(0);5.6: int maxcommonfactor(int a,int b) int factor; if (a=b) factor=a; else if(a>b) factor=maxcommonfactor(a-b,b); else factor=maxcommonfactor(b-a,a); return(factor); 5.7:/*功能:重复参数的调用,从大到小依次输出参数的公约数,如果为1,则输出-1.作者:漏网之鱼日期:20070810修改:版本:无*/int commonfactors(int a,int b) int cfac; static i=0; /*每次用