C语言课本习题答案.docx
- 文档编号:25931836
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:52
- 大小:46.03KB
C语言课本习题答案.docx
《C语言课本习题答案.docx》由会员分享,可在线阅读,更多相关《C语言课本习题答案.docx(52页珍藏版)》请在冰豆网上搜索。
C语言课本习题答案
C语言程序设计课后练习参考程序
说明:
1、所有程序由宋飞(1,3,4,7,9章)和张斌(5,6,8章)编写完成。
2、列出的所有程序均在DevC++4.9上编译成功,没有语法错误。
3、程序设计的思路和算法并不唯一,所列出的程序仅供参考。
4、限于我们水平有限,如果有什么缺点和不恰当处,敬请批评指正。
第一章概述
习题1.5
编写一个C语言程序,要求输出以下信息:
***************
Howareyou!
***************
#include
intmain()
{
printf(“***************\n”);
printf(“Howareyou!
\n”);
printf(“***************\n”);
return0;
}
习题1.6
编写一个C语言程序,从键盘输入x,y,z三个变量,并输出其中的最小值。
#include
intmain()
{
/*定义整型变量*/
intx,y,z,min;
/*输入*/
printf(“请输入x,y,x:
”);
scanf(“%d,%d,%d”,&x,&y,&z);
/*判断最小值*/
min=x;if(y if(z /*输出*/ printf(“最小的数: %d\n”,min); return0; } 第三章算法和基本程序设计 习题3.4 编写程序,输入三角形的3个边长a,b,c,求三角形的面积area。 其中,S=(a+b+c)/2。 #include #include intmain() { floata,b,c,area,s; printf("请输入a,b,c: "); scanf("%f,%f,%f",&a,&b,&c); s=(a+b+c)/2.0; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("面积: %f\n",area); return0; } 习题3.5 编写程序,输入四个数,并求出它们的平均值。 #include intmain() { inta,b,c,d; floataverage; printf(“请输入a,b,c,d: ”); scanf(“%d,%d,%d,%d”,&a,&b,&c,&d); average=(a+b+c+d)/4.0; printf(“平均值: %f\n”,average); return0; } 习题3.6 从键盘上输入一个整数,分别输出它的个位数,十位数和百位数。 #include intmain() { intx,y,z,num; printf("请输入一个数: "); scanf("%d",&num); /*分离个位,十位,百位的方法*/ x=num%10; y=(num/10)%10; z=(num/100)%10; printf("个: %d\n十: %d\n百: %d\n",x,y,z); return0; } 习题3.7 从键盘上输入一个大写字母,并将其转换成小写字母并输出。 #include intmain() { charc; printf("请输入一个字母: "); scanf("%c",&c); printf("转换后: %c\n",c+32); return0; } 第四章选择分支结构程序设计 习题4.2 输入四个数a、b、c、d,把这四个置由小到大输出。 #include intmain() { inta,b,c,d; intt;/*临时变量*/ printf(“请输入a,b,c,d: ”); scanf(“%d,%d,%d,%d”,&a,&b,&c,&d); if(a>b){t=a;a=b;b=t;}/*数据交换方法*/ if(a>c){t=a;a=c;c=t;} if(a>d){t=a;a=d;d=t;} if(b>c){t=b;b=c;c=t;} if(b>d){t=b;b=d;d=t;} if(c>d){t=c;c=d;d=t;} printf(“结果: %d,%d,%d,%d\n”,a,b,c,d); return0; } 习题4.3 编程序按下式计算y的值,x的值由键盘输入。 #include intmain() { doublex,y; printf("请输入x: "); scanf("%lf",&x); /*多个if…else嵌套*/ if(x>=0&&x<20) y=5*x+11; else if(x<40) y=sin(x)+cos(x); else if(x<60) exp(x)-1; else if(x<80) y=log(x+1); elsey=0; printf("y=%lf\n",y); return0; } 习题4.4 用条件表达式的嵌套来完成此题: 学习成绩≥90分的同学用A表示,70~89分之间的用B表示,60~69分之间用C表示,60分以下的用D表示。 #include intmain() { intmark; charres; printf(“请输入成绩: ”); scanf(“%d”,&mark); if(mark>=90)res=’A’; elseif(mark>=70)res=’B’; elseif(mark>=60)res=’C’; elseres=’D’; printf(“结果: %c\n”,res); return0; } 习题4.5 计算器程序。 用户输入运算数和四则运算符,输出运算结果。 #include intmain() { inta,b; floatres; chart; printf(“请输入运算符(+-*/): ”); scanf(“%c”,&t); printf(“请输入a,b: ”); scanf(“%d,%d”,&a,&b); switch(t) { case‘+’: res=a+b;break; case‘-‘: res=a-b;break; case‘*’: res=a*b;break; case‘/’: res=(float)a/b;break; } printf(“结果: %f”,res); return0; } 习题4.6 企业发放的奖金根据利润提成。 利润(I)低于或等于10万元时,奖金可提成10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万的部分,可提成5%;40万到60万之间时,高于40万的部分,可提成3%;60万到100万之间时,高于60万的部分可提成1.5%,高于100万时,超过100万的部分按1%提成。 从键盘输入当月的利润,求应发放的奖金总数。 #include intmain() { longi,sum; printf("请输入利润I: "); scanf("%ld",&i); if(i<100000) sum=i*0.1; elseif(i<200000) sum=10000+(i-100000)*0.075; elseif(i<400000) sum=17500+(i-200000)*0.05; elseif(i<600000) sum=27500+(i-400000)*0.03; elseif(i<1000000) sum=33500+(i-600000)*0.015; elsesum=39500+(i-1000000)*0.01; printf("奖金总数: %ld\n",sum); return0; } 第五章循环结构程序设计 习题5.1 编写一个程序,计算-32768~+32768之间的任意整数(由键盘输入)中个位奇数的平方和。 #include intmain() { intn,ge,shi,bai,qian,wan,sum=0; printf("请输入一个数: \n"); scanf("%d",&n); ge=n%10;/*分离各位数*/ shi=n/10%10; bai=n/100%10; qian=n/1000%10; wan=n/1000; if(ge%2==1)sum+=ge*ge; if(shi%2==1)sum+=shi*shi; if(bai%2==1)sum+=bai*bai; if(qian%2==1)sum+=qian*qian; if(wan%2==1)sum+=wan*wan; printf("总合是%d\n",sum); return0; } 习题5.2 编写程序,判断从键盘输入的整数X的正负性和奇偶性。 #include intmain() { intn,data; printf("请输入一个数: \n"); scanf("%d",&n); if(n>=0)printf("X是正数\n"); elseprintf("X是负数\n"); if(n%2==1)printf("X是奇数\n"); elseprintf("X是偶数\n"); return0; } 习题5.3 鸡兔问题: 鸡兔共30只,脚共有90个。 编写一个程序,求鸡、兔各有多少只。 #include intmain() { inti,j; /*枚举法(穷举法)*/ for(i=0;i<=30;i++) { j=30-i; if(2*i+4*i==90) printf("鸡: %d\n兔: %d\n",i,j); } return0; } 习题5.4 编写一个程序,求 s=1+(1+2)+(1+2+3)+……+(1+2+3+4+……+n) 的值。 #include intmain() { intn,i,j,s=0; printf("请输入n: \n"); scanf("%d",&n); for(i=1;i<=n;i++) for(j=1;j<=i;j++) s+=j; printf("s=%d\n",s); return0; } 习题5.5 编写一个程序,求 的值。 #include intmain() { inti,s=1; floatn=1.0,t=1,sum=0; for(i=1;i<=100;i++) { sum+=t; n++; s=-s; t=s/n; } printf("结果: %f",sum); return0; } 习题5.7 编写一个程序,求e的近似值,当通项小于10-7时停止计算。 #include #include intmain() { intn=1; floate=1,t=1,s=1.0; while(fabs(t)>=1e-6) { e+=t; n++; s*=n; t=1/s; } printf("e=%10.6f\n",e); return0; } 习题5.8 编写程序,打印以下图形(行n由键盘输入)。 ******* ****** ***** **** *** ** * #include intmain() { inti,j,n; printf("请输入n: "); scanf("%d",&n); for(i=0;i { for(j=1;j printf(""); for(j=1;j printf("*"); printf("\n"); } return0; } 习题5.9 编写一个程序,打印乘法“九九表”,即 第一行为1x1=1,1x2=2,……,1x9=9 第二行为2x1=2,2x2=4,……,2x9=9 …… 第九行为9x1=9;9x2=18,……,9x9=81 #include intmain() { inti,j,sum; for(i=1;i<10;i++) { for(j=1;j<10;j++) { sum=i*j; printf("%d*%d=%2d\t",i,j,sum); } printf("\n\n"); } return0; } 习题5.10 从键盘输入若干个学生某门课的成绩,计算出平均成绩,并输出低于60分的学生成绩,当输入负数时结束输入。 #include intmain() { inti=0; floatn,sum=0; printf("请输入成绩(负数结束): \n"); scanf("%f",&n); if(n>=0&&n<60) printf("此学生考试不及格,分数%f\n",n); while(n>=0) { sum+=n; i++; scanf("%f",&n); if(n>=0&&n<60) printf("不及格,分数%f\n",n); } sum=sum/i; printf("Theaverageis: %f\n",sum); return0; } 习题5.11 编写一个程序,输出3~100间的全部素数,每行10个。 #include #include intmain() { intm,k,i,n=0; printf("3to100: \n"); for(m=3;m<=100;m+=2) { k=sqrt(m); for(i=2;i<=k;i++) if(m%i==0)break; if(i>=k+1) { printf("%3d",m); n++; if((n%10)==0) printf("\n"); } } return0; } 习题5.13 编写一个程序,小学生可以用这个程序进行两个数的四则运算自我检测。 要求: 测验者可以选择难度(如取加减乘除或位数为不同难度),可以选择每次做的题数n,电脑会对结果进行正确或者错误的评判。 题目中的运算数据应随即产生。 #include #include #include #defineN3/*测验的题数*/ intmain() { inti,m,n,t,p,sum,k,j,cnt=0; /*初始化随机数*/ srand((unsigned)time(NULL)); /*简易菜单*/ printf("\n-------速算-------\n\n"); printf("1.加\n2.减\n3.乘\n4.除\n"); printf("请选择: \n"); scanf("%d",&t); for(i=1;i<=N;i++) { k=rand()%100;/*产生0~99的随即数*/ j=rand()%100; switch(t) { case1: sum=k+j; printf("%d+%d=? \n",k,j); break; case2: sum=k-j; printf("%d-%d=? \n",k,j); break; case3: sum=k*j; printf("%d*%d=? \n",k,j); break; case4: sum=k; printf("%d/%d=? \n",k*j,j); break; } printf("和=: \n"); scanf("%d",&p); if(sum==p) { cnt++;/*作对的题数加一*/ printf("正确! \n"); } elseprintf("错误! \n"); }/*for*/ printf("你已经作对了%d个题! \n",cnt); return0; } 第六章函数 习题6.3 编写一个程序,已知一个圆筒的半径、和高,计算该圆筒的体积。 #definePI3.14159 #include /*定义一个函数*/ floatv(floatr,floath) { returnPI*r*r*h; } intmain() { floatrs,hs; printf(“请输入r,h: ”); scanf(“%f,%f”,&rs,&hs);; /*函数调用*/ printf(“体积v=%f”,v(rs,hs)); return0; } 习题6.4 编写一个求水仙花数的函数,求100到999之间的全部水仙花数。 所谓水仙花数,是指一个三位数,其各位数字的立方和等于该数。 例如: 153是一个水仙花数: 153=13+53+33 #include intshuixianhua(intnum) { intdata,ten,hun; data=num%10; ten=num/10%10; hun=num/100%10; if(num==data*data*data+ten *ten*ten+hun*hun*hun)return1; elsereturn0; } intmain() { inti; printf("水仙花数: "); for(i=100;i<1000;i++) if(shuixianhua(i))printf("%5d",i); return0; } 习题6.5 编写一个函数,输出整数m的全部素数因子。 例如: n=120,因子为2,2,2,3,5 #include intfun(intn) { inti; for(i=2;i<=n;) { if(n%i==0) { n=n/i; printf("%d",i); } elsei++; } } intmain() { intm; printf("请输入一个数: "); scanf("%d",&m); fun(m); } 习题6.6 编写一函数,求10000以内所有的完数。 所谓完数是指一个数正好是它所有约数之和。 例如: 6就是一个完数,因为6的因子有1,2,3,并且6=1+2+3。 #include #defineN10000 /*函数声明*/ inttest(intn); intmain() { inti,j; for(i=1;i { j=test(i); if(i==j) printf("%6d",i); } return0; } /*函数定义*/ inttest(intn) { inti,sum=0; for(i=1;i<=n/2;i++) if(n%i==0)sum+=i; returnsum; } 习题6.7 如果有两个数,每一个数的所有约数(除它本身以外)的和正好等于对方,则称这两个数互为满数。 求出10000以内所有的互满数,并显示输出,并求一个数和它所有约数(除它本身)的和用函数实现。 #include #defineN10000 inttest(intn); intmain() { inti,m,n; for(i=1;i { m=test(i); n=test(m); if(i==n&&i printf("%6d%6d\n",m,n); } } inttest(intn)/*计算第一个数字*/ { inti,sum=0; for(i=1;i<=n/2;i++) if(n%i==0) sum+=i; returnsum; } 习题6.8 编写一个计算幂级数的递归函数。 #include intfun(inti,intj); intmain(void) { intx,n; printf("Inputtwonumbers(xandn): \n"); scanf("%d%d",&x,&n); printf("Theresultis: %d",fun(x,n)); getch(); } intfun(inti,intj) { intt; if(j==0)return1; t=fun(i,j-1)*i; returnt; } 习题6.9 用递归函数求 #include longfun(longn) { if(n==0)return0; returnfun(n-1)+n; } intmain() { intn; longsum; printf("输入n: "); scanf("%d",&n); sum=fun(n); printf("结果: %d\n",sum); return0; } 习题6.10 已知某数列前两项为2和3,其后继项根据当前的前两项的乘积按下列规则生成: (1)若乘积是一位数,则该乘积就是数列的后继项; (2)若成绩为两位数,则成绩的十位和个位依次作为数列的后继项。 例如,当n=10,求出该数列的前10项是: 2361886424 编程实现当n=10时的数列。 #include intfun(intf1,intf2,intn); intmain() { intf1=2,f2=3,n; printf("请输入一个数: "); scanf("%d",&n); fun(f1,f2,n); getch(); } intfun(intf1,intf2,intn) { inti,f; printf("%3d",f1); printf("%3d",f2); for(i=3;i<=n;) { if(f1*f2/10==0) {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课本 习题 答案