admin 管理员组文章数量: 887021
2024年2月28日发(作者:html src)
《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%dn",a,b);
printf("%3d%3dn",a,b);
printf("%f,%fn",x,y);
printf("%-10f,%-10fn",x,y);
printf("%8.2f,%8.2f,%4f,%4f,%3f,%3fn",x,y,x,y,x,y);
printf("%e,%10.2en",x,y);
printf("%c,%d,%o,%xn",c,c,c,c);
printf("%ld,%lo,%xn",n,n,n);
printf("%u,%o,%x,%dn",u,u,u,u);
printf("%s,%5.3sn","COMPUTER","COMPUTER");
}
结果:
57
5 7
67.856400,-789.124023
67.856400 ,-789.124023
67.86,
789.124023
-789.12,67.856400,-789.124023,67.856400,-
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 radiin");
scanf("%f",&r);
clrscr();
printf("please input the cylinder's heightn");
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("nntThe
printf("tThe
circle's perimeter
is
is %.2fn",per);
printf("tThe circle's area is %.2fn",area);
sphere's facearea %.2fn",facearea);
printf("tThe sphere's cubage is %.2fn",cubage1); printf("tThe
cylinder's cubage is %.2fn",cubage2); getch();
}
原题:
输入一个华氏温度,要求输出摄氏温度。公式为 c=(F-32)*5/9.
答案:
main()
{
float temper;
float c;
clrscr();
printf("Please input the temperature of Fahrenheitn");
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 3n");
scanf("%d%d%d",&a,&b,&c);
d=max(a,max(b,c));
printf("the max number is %dn ",d);
getch();
}
/*------------------------------------------------------------*/
/*分函数,用来比较两个数的大小,并将较大数作为返回值 */
/*------------------------------------------------------------*/
int max(int x,int y)
{ int z;
z=(x>y)?x:y;
return(z);
}
5-5
/*============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();/*按任一键结束,用于看结果*/ }
5-6
/*============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-100n "); 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
case 4:
printf("%5ld %5ld %5ld %5ld",num/1000,num%1000/100,num%100/10,num%10) ;break;
case 5:
printf("%5ld %5ld %5ld %5ld %5ld",num/10000,num%10000/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
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%1000/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万低3:
3:
printf("%5ld %5ld %5ld",num/100,num%100/10,num%10);break;
于60万的,高于40万的部分按3%提成。高于60万低于100万的,高于60万的部分按1.5%提成,超过100万的部分按1%提成。要求从键盘输入当月利润I,求应发奖金数。
答案:
main()
{
long i;
int bonus,bonus1,bonus2,bonus4,bonus6,bonus10;
printf("nnPlease input the bonus of this month:n");
scanf("%ld",&i);
clrscr();
printf("nn 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
4n"); 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%6dn%6dn%6dn%6dn",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,2n");
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
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 */
input two numbers:n ");
scanf("%d %d",&m,&n);
/*程序说明 : 输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数*/
/*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();
}
版权声明:本文标题:《C语言程序设计》第二版(谭浩强)-4-7章课后习题答案-清华大学出版社 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1709134197h538627.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论