《C语言程序设计》第二版谭浩强 47章课后习题答案 清华大学出版社.docx
- 文档编号:10304476
- 上传时间:2023-02-10
- 格式:DOCX
- 页数:45
- 大小:26.28KB
《C语言程序设计》第二版谭浩强 47章课后习题答案 清华大学出版社.docx
《《C语言程序设计》第二版谭浩强 47章课后习题答案 清华大学出版社.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》第二版谭浩强 47章课后习题答案 清华大学出版社.docx(45页珍藏版)》请在冰豆网上搜索。
《C语言程序设计》第二版谭浩强47章课后习题答案清华大学出版社
4-5
原题:
打印出下题的结果
main()
{
?
inta=5,b=7;
?
floatx=67.8564,y=-789.124;
?
charc='A';
?
longn=1234567;
?
unsignedu=65535;
?
printf("%d%d\n",a,b);
?
printf("%3d%3d\n",a,b);
?
printf("%f,%f\n",x,y);
?
printf("%-10f,%-10f\n",x,y);
?
printf("%8.2f,%8.2f,%4f,%4f,%3f,%3f\n",x,y,x,y,x,y);
?
printf("%e,%10.2e\n",x,y);
?
printf("%c,%d,%o,%x\n",c,c,c,c);
?
printf("%ld,%lo,%x\n",n,n,n);
?
printf("%u,%o,%x,%d\n",u,u,u,u);
?
printf("%s,%5.3s\n","COMPUTER","COMPUTER");
}
结果:
57
57
67.856400,-789.124023
67.856400,-789.124023
67.86,-789.12,67.856400,-789.124023,67.856400,-789.124023
6.78564e+01,-7.9e+02
A,65,101,41
1234567,4553207,d687
65535,177777,ffff,-1
COMPUTER,COM
4-6
原题:
用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1='A',c2='a'。
问在键盘上如何输入?
main()
{
inta,b;
floatx,y;
charc1,c2;
scanf("a=%d,_b=%d",&a,&b);
scanf("_%f_%e",&x,7y);
scanf("_%c_%c",&c1,&c2);
}
答案:
输入格式为:
a=3,b=78.571.82Aa
4-7
原题:
用下面的scanf函数输入数据使a=10,b=20,c1='A',c2='a',x=1.5,y=-3.75
z=67.8,请问在键盘上如何输入数据?
scanf("%5d%5d%c%c%f%f%*f,%f",&a,&b,&c1,&c2,&x,&y,&z);
答案:
输入格式为:
1020Aa1.5-3.780.0,67.8
友情提示:
10与20之间是3个空格,而那个0.0是随便一个浮点数即可。
4-8
原题:
设圆半径r=1.5,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积,用scanf输入数据,输出结果,输出时要求有文字说明,取小数点后2位数字,请编写程序。
答案:
#definePI3.1415926
main()
{
inth;
floatr;
floatcubage1,cubage2,per,area,facearea;
clrscr();
printf("pleaseinputthecircle'sradii\n");
scanf("%f",&r);
clrscr();
printf("pleaseinputthecylinder'sheight\n");
scanf("%d",&h);
per=2*PI*r;
area=PI*r*r;
facearea=4*PI*r*r;
cubage1=4/3*PI*r*r*r;
cubage2=area*h;
clrscr();
printf("\n\n\tThecircle'sperimeteris%.2f\n",per);
printf("\tThecircle'sareais%.2f\n",area);
printf("\tThesphere'sfaceareais%.2f\n",facearea);
printf("\tThesphere'scubageis%.2f\n",cubage1);
printf("\tThecylinder'scubageis%.2f\n",cubage2);
getch();
}_
4-9
原题:
输入一个华氏温度,要求输出摄氏温度。
公式为c=(F-32)*5/9.
答案:
main()
{
floattemper;
floatc;
clrscr();
printf("PleaseinputthetemperatureofFahrenheit\n");
scanf("%f",&temper);
c=(temper-32)*5/9;
printf("TheCelsiustemperatureis%.2f",c);
getch();
}_
4-10
原题:
编程序,用getchar()函数读入两个字符给c1,c2,然后用putchar()函数和printf函数输出这两个字符。
并思考以下问题:
(1)变量c1,c2应为字符型或整型?
抑或二者皆可?
(2)要求输出c1,c2值的ASCII码,应如何处理?
用putchar函数还是printf函数?
(3)整型变量与字符变量是否在任何情况下都可以互相代替?
如:
charc1,c2;
与intc1,c2;
是否可以无条件的等价?
答案:
main()
{
charc1,c2;
c1=getchar();
c2=getchar();
printf("\n");
putchar(c1);
putchar(c2);
printf("c1=%c,c2=%c",c1,c2);
}
(1)都可;
(2)用printf()函数;(3)不可以,必须是整形变量的值在256以内,否则则超过了ASCII的值。
5-4
/*===================programedescription===================*/
/*程序名称:
5_4.c*/
/*程序说明:
有三个整数a,b,c,由键盘输入,输出其中最大得数:
*/
/*writenbyDongHongtao*/
/*==========================================================*/
main()
{inta,b,c,d;
printf("pleaseinput3num,theformatis123\n");
scanf("%d%d%d",&a,&b,&c);
d=max(a,max(b,c));
printf("themaxnumberis%d\n",d);
getch();
}
/*------------------------------------------------------------*/
/*分函数,用来比较两个数的大小,并将较大数作为返回值*/
/*------------------------------------------------------------*/
intmax(intx,inty)
{intz;
z=(x>y)?
x:
y;
return(z);
}
5-5
/*============programedescription=================*/
/*程序名称:
5_5.c*/
/*程序说明:
以下面的方程为基础,写一程序,输入X值
输出Y值,方程如下:
当x<1时,y=x,当1<=x<10时,
y=2x-1,当x>=10时,y=3x-11*/
/*writenbyDongHongtao*/
/*=================================================*/
main()
{intx,y,a;
clrscr();/*文本清屏*/
printf("pleaseinputthevalueofx");/*输入X的值*/
scanf("%d",&x);
printf("thevalueofyis:
");/*分条件打印出y值*/
if(x<1)
{y=x;
printf("%d",y);
}
else
if(x>=1&&x<10)
{y=2*x-1;
printf("%d",y);
}
else
{y=3*x-11;
printf("%d",y);
}
getch();/*按任一键结束,用于看结果*/
}
5-6
/*============programedescription=================*/
/*程序名称:
5_6.c*/
/*程序说明:
给出一百分制成绩,要求输出成绩等级‘A’,
‘B’,‘C’,‘D’,‘E’,90分以上为A,80~90分为
B,70~79分为C,60~69分为D,60分以下为E*/
/*writenbyDongHongtao*/
/*=================================================*/
main()
{intnum;
clrscr();
loop:
printf("pleaseinputthescore:
\n");
scanf("%d",&num);
if(num<0||num>100)
{printf("thescoreiserror,pleaseinputanumberfrom0-100\n");
gotoloop;
}
else
if(num>=90)
num=65;
else
if(num>=80)
num=66;
else
if(num>=70)
num=67;
else
if(num>=60)
num=68;
else
num=69;
printf("thelevelis:
");
switch(num)
{case65:
printf("%c",num);break;
case66:
printf("%c",num);break;
case67:
printf("%c",num);break;
case68:
printf("%c",num);break;
case69:
printf("%c",num);break;
}
getch();
}
_
5-7
/*============programedescription=================*/
/*程序名称:
5_7.c*/
/*程序说明:
给一个不多于5位的正整数,要求:
(1)求出
它是几位数,
(2)分别打印出每一位数字(3)按顺序打印出
各位数字,例如原数时321,应输出123*/
/*writenbyDongHongtao*/
/*=================================================*/
main()
{longnum;
intk;
clrscr();
loop:
printf("pleaseinputanumform0-99999:
\n");
scanf("%ld",&num);
if(num<0||num>99999)
{clrscr();
printf("thenumberiserror");
gotoloop;/*利用GOTO语句来检查输入的数字是否位5位*/
}
printf("theansweroneis:
thelongofthenumberis:
");
if(num>=10000)
{k=5;
printf("%d",k);
}
else
if(num>=1000)
{k=4;
printf("%d",k);
}
else
if(num>=100)
{k=3;
printf("%d",k);
}
else
if(num>=10)
{k=2;
printf("%d",k);
}
else
{k=1;
printf("%d",k);
}
printf("\ntheanswertwois:
");
switch(k)
{case1:
printf("%5ld",num);break;
case2:
printf("%5ld%5ld",num/10,num%10);break;
case3:
printf("%5ld%5ld%5ld",num/100,num%100/10,num%10);break;
case4:
printf("%5ld%5ld%5ld%5ld",num/1000,num%1000/100,num%100/10,num%10);break;
case5:
printf("%5ld%5ld%5ld%5ld%5ld",num/10000,num%10000/1000,num%1000/100,num%100/10,num%10);break;
}
printf("\ntheanswerthreeis:
");
switch(k)
{case1:
printf("%ld",num);break;
case2:
printf("%ld%ld",num%10,num/10);break;
case3:
printf("%ld%ld%ld",num%10,num%100/10,num/100);break;
case4:
printf("%ld%ld%ld%ld",num%10,num%100/10,num%1000/100,num/1000);break;
case5:
printf("%ld%ld%ld%ld%ld",num%10,num%100/10,num%1000/100,num%10000/1000,num/10000);break;
}
getch();
}
5-8
原题:
企业发放的奖金根据利润提成。
利润低于或等于10万的,奖金可提成10%;利润高于10万,低于20万的,低于10万的部分按10%提成,高于10万的提成7.5%;高于20万低于40万时,低于20万的按上述方法提成(下同)。
高于20万的按5%提成。
高于40万低于60万的,高于40万的部分按3%提成。
高于60万低于100万的,高于60万的部分按1.5%提成,超过100万的部分按1%提成。
要求从键盘输入当月利润I,求应发奖金数。
答案:
main()
{
longi;
intbonus,bonus1,bonus2,bonus4,bonus6,bonus10;
printf("\n\nPleaseinputthebonusofthismonth:
\n");
scanf("%ld",&i);
clrscr();
printf("\n\nThismonthbonusis");
bonus1=100000*0.1;
bonus2=bonus1+100000*0.075;
bonus4=bonus2+200000*0.05;
bonus6=bonus4+200000*0.03;
bonus10=bonus6+400000*0.015;
if(i<=100000)
bonus=bonus1;
else
if(i<=200000)
bonus=bonus1+(i-100000)*0.075;
else
if(i<=400000)
bonus=bonus2+(i-200000)*0.05;
else
if(i<=600000)
bonus=bonus4+(i-400000)*0.03;
else
if(i<=1000000)
bonus=bonus6+(i-600000)*0.015;
else
bonus=bonus10+(i-1000000)*0.01;
printf("%d",bonus);
getch();
}_
5-9
/*============programedescription=================*/
/*程序名称:
5_9.c*/
/*程序说明:
输入4个整数,要求按由小到大的顺序输出*/
/*writenbyDongHongtao*/
/*=================================================*/
main()
{intmax();
intmin();
inta,b,c,d,m,n,q,p,w,z;
clrscr();
printf("pleaseinputfourintegernumbers,forexample:
1234\n");
scanf("%d%d%d%d",&a,&b,&c,&d);
n=min(min(a,b),min(c,d));
m=max(max(a,b),max(c,d));
q=max(min(a,b),min(c,d));
p=min(max(a,b),max(c,d));
w=max(q,p);
z=min(q,p);
printf("thenumberformsmallesttobiggestis:
\n%6d\n%6d\n%6d\n%6d\n",n,z,w,m);
getch();
}
/*---------------------------------------------------------*/
/*分函数,作用是比较两个数的大小,并返回较小的值*/
/*---------------------------------------------------------*/
min(intx,inty)
{intz;
z=(x>y)?
y:
x;
return(z);
}
/*---------------------------------------------------------*/
/*分函数,作用是比较两个数的大小,并返回较大的值*/
/*---------------------------------------------------------*/
max(intx,inty)
{intz;
z=(x>y)?
x:
y;
return(z);
}
5-10
/*============programedescription=================*/
/*程序名称:
5_10.c*/
/*程序说明:
有4个圆塔,圆心分别为(2,2),(-2,2),
(-2,-2),(2,-2),圆半径为1,这4个塔的高度为10m,塔外无
建筑物,今输入任何一点的坐标,求该点的建筑高度,(塔
外的高度为0)*/
/*writenbyDongHongtao*/
/*=================================================*/
#include
main()
{inth;
floatw,x,y,j,i,k;
clrscr();
printf("pleaseinputthezuobiao,forexample:
1,2\n");
scanf("%f,%f",&x,&y);
if(x>=3||x<=-3||y>=3||y<=-3)
h=0;
else
h=1;
switch(h)
{
case0:
printf("theheightis0");break;
case1:
{x=fabs(x);y=fabs(y);
w=sqrt((x-2)*(x-2)+(y-2)*(y-2));
printf("theheightis%f",10-w*10);}
}
getch();
}
6-1
/*====================programedescription=================*/
/*程序名称:
6_1.c*/
/*程序说明:
输入两个正整数m和n,求其最大公约数和最小公倍数*/
/*writenbyDongHongtao*/
/*=========================================================*/
/*========================算法说明=========================*/
/*假设m>n,如果m能被n整除,那么n就为他们的最小公约数,如果不
能整除,那么余数为c,然后令m=n,n=c,继续上面的步骤,直到m能
被n整除为止,那时的n就为他们的最小公约数,而最小公倍数则为m
和n的乘机在除以他们的最小公约数的值*/
/*=========================================================*/
main()
{intm,n,c,h,mm,nn;
clrscr();
printf("pleaseinputtwonumbers:
\n");
scanf("%d%d",&m,&n);
mm=m;nn=n;
if(m>n);
else
h=m;
m=n;
n=h;
c=m%n;
if(c==0)
printf("thegongyueshuis%d:
",n);
else
while(c!
=0)
{m=n;
n=c;
c=m%n;
printf("thegongyueshuis%d:
",n);
}
printf("thegongbeishuis%d:
",mm*nn/n);
getch();
}
6-2
/*========================programedescription===============================*/
/*程序名称:
6_2.c*/
/*程序说明:
输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数*/
/*writenbyDongHongtao*/
/*===========================================================================*/
#include
#include
main()
{chara='a';
inti,ch=0,num=0,space=0,other=0;
clrscr();
printf("pleaseinputalinestring:
\n");
for(i=0;a!
='\n';i++)
{
a=getchar();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 C语言程序设计第二版谭浩强 47章课后习题答案 清华大学出版社 语言程序设计 第二 版谭浩强 47 课后 习题 答案