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();

}


本文标签: 输入 输出 函数 提成