《C语言程序设计》第二版(谭浩强)-4-7章课后习题答案-清华大学出版社

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《C语言程序设计》第二版(谭浩强)-4-7章课后习题答案-
清华大学出版社
4-5
原题:打印出下题的结果
main()
{
int a=5,b=7;
float x=67.8564,y=-789.124;
char c='A';
long n=1234567;
unsigned u=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
5 7
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()
{
int a,b;
float x,y;
char c1,c2;
scanf("a=%d,_b=%d",&a,&b);
scanf("_%f_%e",&x,7y);
scanf("_%c_%c",&c1,&c2); }
答案:
输入格式为:
a=3,b=7 8.5 71.82 A a
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);
答案:
输入格式为:
10 20Aa1.5 -3.78 0.0,67.8
友情提示:10与20之间是3个空格,而那个0.0是随便一个浮点数即可。

4-8
原题:
设圆半径r=1.5,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积,用scanf输入数据,输出结果,输出时要求有文字说明,取小数点后2位数字,请编写程序。

答案:
#define PI 3.1415926
main()
{
int h;
float r;
float cubage1,cubage2,per,area,facearea;
clrscr();
printf("please input the circle's radii\n");
scanf("%f",&r);
clrscr();
printf("please input the cylinder's height\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\tThe circle's perimeter is %.2f\n",per); printf("\tThe circle's area is %.2f\n",area);
printf("\tThe sphere's facearea is %.2f\n",facearea); printf("\tThe sphere's cubage is %.2f\n",cubage1); printf("\tThe
cylinder's cubage is %.2f\n",cubage2); getch();
}
原题:
输入一个华氏温度,要求输出摄氏温度。

公式为 c=(F-32)*5/9.
答案:
main()
{
float temper;
float c;
clrscr();
printf("Please input the temperature of Fahrenheit\n");
scanf("%f",&temper);
c=(temper-32)*5/9;
printf("The Celsius temperature is %.2f",c);
getch();
}
4-10
原题:
编程序,用getchar()函数读入两个字符给c1,c2,然后用putchar()函数和printf函数输出这两个字符。

并思考以下问题:(1)变量c1,c2应为字符型或整型?抑或二者皆可?(2)要求输出c1,c2值的ASCII码,应如何处理?用putchar 函数还是printf函数?(3)整型变量与字符变量是否在任何情况下都可以互相代替?如:
char c1,c2;
与 int c1,c2;
是否可以无条件的等价?
答案:
main()
{
char c1,c2;
c1=getchar();
c2=getchar();
printf("\n");
putchar(c1);
putchar(c2);
printf("c1=%c,c2=%c",c1,c2);
}
(1)都可;(2)用printf()函数;(3)不可以,必须是整形变量的值在256以内,否则则超过了ASCII的值。

/*===================programe
description===================*/ /*程序名称 : 5_4.c */ /*程序说明: 有三个整数a,b,c,由键盘输入,输出其中最大得数:*/ /*writen by DongHongtao */
/*===================================== =====================*/ main()
{ int a,b,c,d;
printf("please input 3 num, the format is 1 2 3\n");
scanf("%d%d%d",&a,&b,&c);
d=max(a,max(b,c));
printf("the max number is %d\n ",d);
getch();
}
/*------------------------------------------------------------*/
/*分函数,用来比较两个数的大小,并将较大数作为返回值 */ /*------------------------------------------------------------*/
int max(int x,int y)
{ int z;
z=(x>y)?x:y;
return(z);
}
/*============programe
description=================*/
/*程序名称 : 5_5.c */
/*程序说明 : 以下面的方程为基础,写一程序,输入X值
输出Y值,方程如下:当 x<1 时,y=x,当1<=x<10时,
y=2x-1,当x>=10时,y=3x-11 */
/*writen by DongHongtao */
/*===================================== ============*/
main()
{ int x,y,a;
clrscr();/*文本清屏*/
printf("please input the value of x ");/*输入X的值*/
scanf("%d",&x);
printf("the value of y is: ");/*分条件打印出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();/*按任一键结束,用于看结果*/ }
/*============programe
description=================*/
/*程序名称 : 5_6.c */
/*程序说明 : 给出一百分制成绩,要求输出成绩等级‘A’,
‘B’,‘C’,‘D’,‘E’,90分以上为A,80~90分为
B,70~79分为C,60~69分为D,60分以下为E */
/*writen by DongHongtao */
/*===================================== ============*/
main()
{ int num ;
clrscr();
loop: printf("please input the score:\n ");
scanf("%d",&num);
if(num<0||num>100)
{ printf("the score is error,please input a number from 0-100\n "); goto loop;
}
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("the level is :");
switch(num)
{ case 65: printf("%c",num);break;
case 66: printf("%c",num);break;
case 67: printf("%c",num);break;
case 68: printf("%c",num);break;
case 69: printf("%c",num);break;
}
getch();
}
5-7
/*============programe
description=================*/
/*程序名称 : 5_7.c */
/*程序说明 : 给一个不多于5位的正整数,要求:(1)求出
它是几位数,(2)分别打印出每一位数字(3)按顺序打印出
各位数字,例如原数时321,应输出123 */
/*writen by DongHongtao */
/*===================================== ============*/ main()
{ long num;
int k;
clrscr();
loop: printf("please input a num form 0-99999:\n");
scanf("%ld",&num);
if(num<0||num>99999)
{ clrscr();
printf("the number is error ");
goto loop;/*利用GOTO语句来检查输入的数字是否位5位*/ }
printf(" the answer one is: the long of the number is: "); 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("\n the answer two is :");
switch(k)
{ case 1: printf("%5ld",num);break;
case 2: printf("%5ld %5ld",num/10,num%10);break;
case 3: printf("%5ld %5ld %5ld",num/100,num%100/10,num%10);break; case 4:
printf("%5ld %5ld %5ld %5ld",num/1000,num%1000/100,nu m%100/10,num%10) ;break;
case 5:
printf("%5ld %5ld %5ld %5ld %5ld",num/10000,num%1000 0/1000,num%1000/1 00,num%100/10,num%10);break;
}
printf("\nthe answer three is: ");
switch(k)
{ case 1: printf("%ld",num);break;
case 2: printf("%ld%ld",num%10,num/10);break;
case 3: printf("%ld%ld%ld",num%10,num%100/10,num/100);break;
case 4:
printf("%ld%ld%ld%ld",num%10,num%100/10,num%1000/ 100,num/1000);break; case 5:
printf("%ld%ld%ld%ld%ld",num%10,num%100/10,num%10 00/100,num%10000/100 0,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()
{
long i;
int bonus,bonus1,bonus2,bonus4,bonus6,bonus10;
printf("\n\nPlease input the bonus of this month:\n");
scanf("%ld",&i);
clrscr();
printf("\n\n This month bonus is "); 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
/*============programe
description=================*/
/*程序名称 : 5_9.c */
/*程序说明 : 输入4个整数,要求按由小到大的顺序输出 */
/*writen by DongHongtao */
/*===================================== ============*/
main()
{ int max();
int min();
int a,b,c,d,m,n,q,p,w,z;
clrscr();
printf("please input four integer numbers,for example: 1 2 3 4\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("the number form smallest to biggest
is:\n%6d\n%6d\n%6d\n%6d\n",n,z,w,m);
getch();
}
/*---------------------------------------------------------*/
/*分函数,作用是比较两个数的大小,并返回较小的值 */
/*---------------------------------------------------------*/
min(int x, int y)
{ int z;
z=(x>y)?y:x;
return(z);
}
/*---------------------------------------------------------*/
/*分函数,作用是比较两个数的大小,并返回较大的值 */
/*---------------------------------------------------------*/
max(int x, int y)
{ int z;
z=(x>y)?x:y;
return(z);
}
5-10
/*============programe
description=================*/
/*程序名称 : 5_10.c */
/*程序说明 : 有4个圆塔,圆心分别为(2,2),(-2,2),
(-2,-2),(2,-2),圆半径为1,这4个塔的高度为10m,塔外无
建筑物,今输入任何一点的坐标,求该点的建筑高度,(塔
外的高度为0) */
/*writen by DongHongtao */
/*===================================== ============*/
#include /*数学函数头文件,用来调用fabs()和sqrt()函数*/ main()
{ int h;
float w,x,y,j,i,k;
clrscr();
printf("please input the zuobiao,for example:1,2\n");
scanf("%f,%f",&x,&y);
if(x>=3||x<=-3||y>=3||y<=-3)
h=0;
else
h=1;
switch(h)
{
case 0 : printf("the height is 0");break;
case 1 : { x=fabs(x);y=fabs(y);
w=sqrt((x-2)*(x-2)+(y-2)*(y-2));
printf("the height is %f",10-w*10);}
}
getch();
}
6-1
/*====================programe
description=================*/
/*程序名称 : 6_1.c */
/*程序说明 : 输入两个正整数m和n,求其最大公约数和最小公倍数*/ /*writen by DongHongtao */
/*===================================== ====================*/
/*========================算法说明=========================*/
/*假设m>n,如果m能被n整除,那么n就为他们的最小公约数,如果不能整除,那么余数为c,然后令m=n,n=c,继续上面的步骤,直到m能
被n整除为止,那时的n就为他们的最小公约数,而最小公倍数
则为m
和n的乘机在除以他们的最小公约数的值 */
/*===================================== ====================*/ main()
{ int m,n,c,h,mm,nn;
clrscr();
printf("please input two numbers:\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("the gong yue shu is %d:",n);
else
while(c!=0)
{ m=n;
n=c;
c=m%n;
printf("the gong yue shu is %d:",n);
}
printf("the gong bei shu is %d:",mm*nn/n); getch();
}
/*========================programe
description=============================== */
/*程序名称 : 6_2.c */
/*程序说明 : 输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数*/
/*writen by DongHongtao */
/*===================================== ============================== ========*/ #include/*用来调用isalpha()和isdigit()函数*/
#include
main()
{ char a='a';
int i,ch=0,num=0,space=0,other=0;
clrscr();
printf("please input a line string: \n");
for(i=0;a!='\n';i++)
{
a=getchar();
if(a==' ')
space++;
else
if(isalpha(a))
ch++;
else
if(isdigit(a))
num++;
else
other++;
}
printf("\nthe char have %d",ch);
printf("\nthe number have %d",num);
printf("\nthe space have %d",space);
printf("\nthe other have %d",other-1); /* jian qu enter zhe ge
zi fu */ getch();
}
/*====================programe
description=================*/ /*程序名称 : 6_3.c */ /*程序说明: 求Sn=a+aa+aaa+……+aa……a之值,n由键盘输入 */ /*writen by DongHongtao */
/*===================================== ====================*/ #include
main()
{ long int a=1,s=0,b=0;
int n,j;
clrscr();
printf("please input a number:\n");
scanf("%d",&n);
for(j=0;j<=n-1;j++)
{
b=b+a*pow10(j);
s=s+b;
}
printf("%8ld",s);
getch();
}
/*====================programe
description=================*/ /*程序名称 : 6_4.c */ /*程序说明 : 求1!+2!+3!+...+20! */
/*writen by DongHongtao */
/*===================================== ====================*/ /*---------------------------------------------------------*/ /*分函数,用来求一个数的阶乘 */ /*---------------------------------------------------------*/
double tt(int n)
{ int j;
double k=1;
for(j=1;j<=n;j++)
{
k=k*j;
}
return(k);
}
main()
{ double s=0.;
int n=4,j;
clrscr();
for(j=1;j<=n;j++) { s=s+tt(j); } printf("%.0f",s); getch();
}。

相关文档
最新文档