C语言课后习题解

//1.6 编写一个程序,输入abc三个值,输出其中最大值.  

#include <stdio.h>

void main ()

{

int a,b,c,max;

printf ("Please input a,b,c:");

scanf ("%d,%d,%d",&a,&b,&c);

max=a;

if (b>max)

max=b;

if (c>max)

max=c;

printf ("%d\n",max);

}

/*

48设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积.

scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字.请编程序.  

*/

#include <stdio.h>

void main()

{

double r,h,Cy,Sy,Sq,Vq,Vz;

r=1.5;

h=3;

Cy=2*3.14*r;

Sy=3.14*r*r;

Sq=4*Sy;

    Vq=(4*3.14*r*r*r)/3;

Vz=Sq*h;

printf ("\nCy=%.2lf\nSy=%.2lf\nSq=%.2lf\nVq=%.2lf\nVz=%.2lf",Cy,Sy,Sq,Vq,Vz);

}

/*

49输入一个华氏温度,要求输出摄氏温度.公式为  

c=5(F-32)/9  

输出要求有文字说明,取位2小数.  

*/

#include <stdio.h>

void main ()

{

    double C,F;

printf("请输入华氏温度:");

scanf ("%lf",&F);

C=5*(F-32)/9;

printf ("输出摄氏温度:%.2lf",C);

}

/*

5.6 给一个百分制成绩,要求输出等级’A’、’B’、’C’、’D’、’E.90分以上为’A,80~90分为’B,

70~79分为’C,60分以下为’D.  

*/

#include <stdio.h>

void main ()

{

float score;

char grade;

printf("请输入一个分数:\n");

scanf("%f",&score);

if (score<=0||score>=100)

{

printf("请重新输入!");

      scanf ("%f",&score);

}

switch (int(score/10))

{

case 9: grade='A';break;

case 8: grade='B';break;

case 7: grade='C';break;

case 6: grade='D';break;

case 5: grade='E';break;

case 4:

case 3:

case 2:

case 1:

case 0: grade='E';break;

}

printf("成绩是%5.1f,相应的等级是%c.\n",score,grade);

}  

/*5.7 给定一个不多于5位的正整数,要求:① 求它是几位数;② 分别打印出每一位数字;③ 按逆序打印出各位数字.

例如原数为321,应输出123.  

*/

#include <stdio.h>

main ()

{

int indiv,ten,hundred,thousant,ten_thousant,place;

    long int i;

    printf("请输入一个数(0~9999)");

scanf("%ld",&i);

if (i>9999)  place=5;

    else if (i>999)  place=4;

    else if (i>99)   place=3;

    else if (i>9)    place=2;

else   place=1;

printf("place=%d\n",place);

ten_thousant=i/10000;

thousant=i/1000%10;

hundred=i/100%10;

    ten=i%100/10;

indiv=i%10;

switch (place)

{

case 5:

        printf("%d,%d,%d,%d,%d\n",ten_thousant,thousant,hundred,ten,indiv);

printf("反序列为:\n");

printf("%d,%d,%d,%d,%d\n",indiv,ten,hundred,thousant,ten_thousant);

break;

    case 4:

        printf("%d,%d,%d,%d\n",thousant,hundred,ten,indiv);

printf("反序列为:\n");

printf("%d,%d,%d,%d\n",indiv,ten,hundred,thousant);

break;

case 3:

        printf("%d,%d,%d\n",hundred,ten,indiv);

printf("反序列为:\n");

printf("%d,%d,%d\n",indiv,ten,hundred);

break;

    case 2:

        printf("%d,%d\n",ten,indiv);

printf("反序列为:\n");

printf("%d,%d\n",indiv,ten);

break;

    case 1:

        printf("%d\n",indiv);

printf("反序列为:\n");

printf("%d\n",indiv);

break;

}

}

/*

5.8 企业发放的奖金根据利润提成.利润I低于或等于10万元时,奖金可提成10% ;

利润高于10万元,低于20万元(100000<I200000)时,其中10万元按10%提成,高于10万元的部分,可提成7.5% ;

200000<I400000,其中20万元仍按上述办法提成(下同),高于20万元的部分按5%提成;

400000<I600000,高于40万元的部分按3%提成;600000I1000000,高于60万的部分按1.5%提成;

I>1000000,超过100万元的部分按1%提成.从键盘输入当月利润I,求应发放奖金总数.

要求:(1)if语句编程序;(2)switch语句编程序.  

*/

#include <stdio.h>

void main ()

{

long i;

double bonus,bon1,bon2,bon4,bon6,bon10;

    bon1=100000*0.1;              //利润为10万元时所发放的奖金

    bon2=bon1+100000*0.075;         //利润为20万元时所发放的奖金

    bon4=bon2+200000*0.05;       //利润为40万元时所发放的奖金

    bon6=bon4+200000*0.03;          //利润为60万元时所发放的奖金

    bon10=bon6+400000*0.015;       //利润为100万元时所发放的奖金

printf("请输入当月利润i");

scanf("%ld",&i);

if (i<=100000)

bonus=bon1*0.1;                    //利润在10万元以内按0.1提成奖金

    else if (i<=200000)

bonus=bon1+(i-100000)*0.75;         //利润在20万元以内按0.075提成奖金

else if (i<=400000)

bonus=bon2+(i-200000)*0.05;        //利润在40万元以内按0.05提成奖金

else if (i<=600000) 

bonus=bon4+(i-400000)*0.03;        //利润在60万元以内按0.03提成奖金

    else if (i<=1000000)

bonus=bon6+(i-600000)*0.015;       //利润在100万元以内按0.015提成奖金

else if(i>1000000)

bonus=bon10+(i-1000000)*0.01;     //利润在100万元以上按0.01提成奖金

printf("bonus=%10.2f",bonus);

getchar();

getchar();

}

方法2

#include <stdio.h>

void main ()

{

int branch;

long i;

double  bonus,bon1,bon2,bon4,bon6,bon10;

bon1=100000*0.1;

bon2=bon1+100000*0.075;

bon4=bon2+200000*0.05;

bon6=bon4+200000*0.03;

bon10=bon6+400000*0.015;

printf("输入当月利润i\n");

scanf("%ld",&i);

branch=(i/100000);

switch (branch)

case 0:

bonus=i*0.1;

break;                         //利润在10万元以内时的奖金

case 1:

bonus=bon1+(i-100000)*0.075; 

break;                         //利润在10万元到20万元之间时的奖金

case 2:

case 3:

bonus=bon2+(i-200000)*0.05; 

break;                         //利润在20万元到40万元之间时的奖金

case 4:

case 5:

bonus=bon4+(i-200000)*0.03; 

break;                         //利润在40万元到60万元之间时的奖金

case 6:

case 7:

case 8:

case 9:

bonus=bon6+(i-400000)*0.015; 

break;                         //利润在60万元到100万元之间时的奖金

case 10:

bonus=bon10+(i-1000000)*0.01;       

break;                       //利润在100万元以上时的奖金

default:

printf("-------------%d----------\n",branch);

}

printf("奖金为: %.2f",bonus);

getchar();

getchar();

}

/*

5.10  4个圆塔,圆心分别为(2,2)(-2,2)(2,-2)(-2,-2),圆半径为1.4个塔的高度分别为10m.

塔以外无建筑物.今输入任一点的坐标,求该点的建筑高度(塔外的高度为零). 

*/

#include <stdio.h>

void main ()

{

int h=10;

float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=2,y4=-2,x,y,d1,d2,d3,d4;

printf("请输入坐标(x,y:");

scanf("%f,%f",&x,&y);

    d1=(x-x1)*(x-x1)+(y-y1)*(y-y1);

d2=(x+x2)*(x+x2)+(y-y2)*(y-y2);

d3=(x+x3)*(x+x3)+(y+y3)*(y+y3);

d4=(x-x4)*(x-x4)+(y+y4)*(y+y4);

if (d1>1&&d2>1&&d3>1&&d4>1)   h=0;

else h=10;

printf("建筑物的高度为%d\n",h);

}

//6.1输入两个正整数mn,求其最大公约数和最小公倍数.  

#include <stdio.h>

void main ()

{

int m,n,m_cup,n_cup,rest;

printf("Please input two integer:\n");

scanf("%d,%d",&m,&n);

if (m>0&&n>0)

{

m_cup=m;

n_cup=n;

rest=m_cup%n_cup;

if (rest!=0)

{

m_cup=n_cup;

n_cup=rest;

rest=m_cup%n_cup;

}

printf ("Output greatest common divisor:%d\n",n_cup);

     printf ("Output lease common multiple:%d\n",m*n/n_cup);

}

else printf ("Error!\n");

// getchar();

// getchar();

// scanf("%d",&n);

}

//6.2输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数.  

#include <stdio.h>

void main ()

{

char c;

int letter=0,space=0,digit=0,others=0,s=0;

printf("请输入一行字符:");

scanf ("%c",&c);

while ((c=getchar())!='\n')

{

if (c>'a'&&c<'z'||c>'A'&&c<'Z')

letter++;

else if (c==' ')

space++;

else if (c>'0'&&c<'9')

digit++;

else 

        others++;

}

printf("letter=%d,space=%d,digit=%d,others=%d",letter,space,digit,others);

}

//6.4 求 ,(即求1!+2!+3!+4!+5!++20!) 

#include <stdio.h>

void main ()

{

int n,i=1;

long sum=0,s=1;  

printf ("Please input a integer:");

scanf("%d",&n);  

while(i<=n)

{

s=s*i;

sum=sum+s;

i++;

}  

printf("sum=%ld\n",sum);  

}  

//6.6打印出所有"水仙花数<

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值