谭浩强第五版第四章习题代码

题目:

1. 有3个整数a,b,c,由键盘输入,输出其中最大的数。

5.从键盘输入一个小于1000的正数,要求输出它的平方根(如平方根不是整数,则取整数部分)。要求在输入数据后先对其进行检查是否为小于1000的正数。若不是要求重新输入。

解:(1)提醒一次

(2)提醒多次

6.有一个函数

            X    (x<1)

  Y=        2x-1    (1<=x<10)

            3x-11   (x>=100)

写程序,输出x的值,输出y对应的值。

7.分析以下程序

       -1 (x<0)

y=    0  (x=0)

         1  (x>0)

8.给出一百分制成绩,要求分出‘A’、‘B’、‘C’、‘D’、‘E’。90以上为‘A’,80~89为‘B’,70~79为’C’,60~69为‘D’,60以下为‘E’。

9.给一个不多于5位的正整数,要求:

①求出它是几位数;

②分别输出每一位数字;

③按逆序输出各位数字,例如原数为321,应输出123.

10.企业发放的奖金根据利润提成。利润 I低于或等于 100 000 元的,奖金可提成 10%;利润高于 100 000 元,低于 200 000 元(100 000<1≤200 000)时,低于 100 000 元的部分按10%

提成,高于 100 000 元的部分,可提成7.5%;200 000<1≤400 000 时,低于 200 000 元的部分仍按上述办法提成(下同)。高于 200 000 元的部分按 5%提成;400 000<1≤600 000 元时,高于400 000 元的部分按 3%提成;600 000<1≤1 000 000 时,高于 600 000 元的部分按 1.5%提成;

I>1 000 000 时,超过 1 000 000 元的部分按 1%提成。从键盘输人当月利润 I,求应发奖金总数。

要求:

(1)用if 语句编程序。

(2)用 switch 语句编程序。

11.输入4个整数,要求有小到大的顺序输出。

12.有4个塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆的半径为1,这四个塔的高度为10米,塔外无建筑物。今输入一点的坐标,求该点的建筑物高度(塔外的高度为零)

代码:

1. 方法一:

#include <stdio.h>

int main()

{int a,b,c;

 printf("请输入3个整数:");

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

 if(a<b)

    if(b<c)

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

    else

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

    else if(a<c)

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

    else

      printf("max=%d",a);

    return 0;

}

方法二:

#include <stdio.h>

int main()

{int a,b,c,temp,max;

 printf("请输入3个整数:");

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

 temp=(a>b)? a:b;   //将a,b中的大者存入temp中

 max=(temp>c)? temp:c;  //将a和b中的大者与c比较,取最大者

  printf("三个整数的最大数是%d",max);

    return 0;

}

5. 解:

(1)提醒一次

#include <stdio.h>

#include <math.h>

#define M 1000

int main()

{int   i,k;

printf("请输入一个小于%d的整数 i:",M);

 scanf("%d",&i);

 if (i>M)

 {printf("输入的数据不符合要求,请重新输入一个小于%d的整数i:",M);

  scanf("%d",&i);

 }

 k=sqrt(i);

 printf("%d的平方根的整数部分是%d\n",i,k);

    return 0;

}

(2)多次提醒

#include <stdio.h>

#include <math.h>

#define M 1000

int main()

{int   i,k;

printf("请输入一个小于%d的整数 i:",M);

 scanf("%d",&i);

 while (i>M)

 {printf("输入的数据不符合要求,请重新输入一个小于%d的整数i:",M);

  scanf("%d",&i);

 }

 k=sqrt(i);

 printf("%d的平方根的整数部分是%d\n",i,k);

    return 0;

}

6.

#include <stdio.h>

int main()

{int  x,y;

printf("输入x:");

scanf("%d",&x);

if (x<1)   //x<1

{

 y=x;

 printf("x=%d,y=x=%d\n",x,y);

}

else if(x<10)     //1=<x<10

{y=2*x-1;

 printf("x=%d,y=2*x-1=%d\n",x,y);

}

else   //x>=10

{ y=3*x-11;

printf("x=%d,y=3*x-11=%d\n",x,y);

}

 return 0;

}

X=-1;

X=20;

7.分析以下程序

       -1 (x<0)

y=    0  (x=0)

         1  (x>0)

(1)

#include <stdio.h>

int main()

{

   int x,y;

   printf("enter x:");

   scanf("%d",&x);

   y=-1;

   if(x!=0)

     if(x>0)

        y=1;

     else

        y=0;

     printf("x=%d,y=%d\n",x,y);

     return 0;

}

上面程序不能实现题目要求。如果x<0,则输出y=0.而题目要求x<0,y=-1。Else与if配对关系中第9行if语句配对,而不与第8行语句配对。

(2)

#include <stdio.h>

int main()

{

   int x,y;

   printf("enter x:");

   scanf("%d",&x);

   y=0;

   if(x>=0)

     if(x>0)

        y=1;

     else

        y=-1;

     printf("x=%d,y=%d\n",x,y);

     return 0;

}

上面程序不能实现题目要求。如果x<0,则y=0。Else语句和第9行内嵌的if语句配对,而不是第8行的if语句配对。

8.

#include <stdio.h>

int main()

{float score;

    char  grade;

  printf("请输入学生成绩:");

   scanf("%f",&score);

while (score>100||score<0)

   {printf("\n  输入有误,请重输");

   scanf("%f",&score);

   }

   switch((int)(score/10))

     {case 10:

   case  9:grade='A';break;

   case 8:grade='B';break;

   case 7:grade='C';break;

   case 6:grade='D';break;

   case 5:

   case 4:

   case 3:

   case 2:

   case 1:

   case 0:grade='E';break;

   }

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

    return 0;

}

9.

#include <stdio.h>

#include <math.h>

int main()

{

   int  num,indiv,ten,hundred,thousand,ten_thousand,place;

                                                           //分别代表个位、十位、百位、千位、万位和位数

   printf("请输入一个整数(0~99999):");

   scanf("%d",&num);

   if (num>9999)

     place=5;

   else if (num>999)

     place=4;

   else if (num>99)

     place=3;

   else if (num>9)

     place=2;

   else

     place=1;

   printf("位数:%d\n",place);

   printf("每位数字是:");

   ten_thousand=num/10000;

   thousand=(int)(num-ten_thousand*10000)/1000;

    hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;

   ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;

   indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);

   switch(place)

   {case 5:printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv);

           printf("\n反序数字为:");

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

        break;

   case 4:printf("%d,%d,%d,%d",thousand,hundred,ten,indiv);

             printf("\n反序数字为:");

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

        break;

   case 3:printf("%d,%d,%d",hundred,ten,indiv);

             printf("\n反序数字为:");

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

        break;

   case 2:printf("%d,%d",ten,indiv);

             printf("\n反序数字为:");

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

        break;

   case 1:printf("%d",indiv);

             printf("\n反序数字为:");

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

        break;

}

    return 0;

}

10. (1)解:

#include <stdio.h>

int main()

{

   int i;

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

   bon1=100000*0.1;

   bon2=bon1+100000*0.075;

   bon4=bon2+100000*0.05;

   bon6=bon4+100000*0.03;

   bon10=bon6+400000*0.015;

   printf("请输入利润i:");

   scanf("%d",&i);

   if (i<=100000)

     bonus=i*0.1;

   else if(i<=200000)

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

   else if(i<=400000)

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

   else if(i<=600000)

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

   else if(i<=1000000)

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

   else

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

   printf("奖金是:%10.2f\n",bonus);

   return 0;

}

②用if语句

#include <stdio.h>

int main()

{

   int i;

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

   int branch;

   bon1=100000*0.1;

   bon2=bon1+100000*0.075;

   bon4=bon2+100000*0.05;

   bon6=bon4+100000*0.03;

   bon10=bon6+400000*0.015;

   printf("请输入利润i:");

   scanf("%d",&i);

   branch=i/100000;

   if (branch>10) branch=10;

     switch(branch)

     {case 0:bonus=i*0.1;break;

     case 1:bonus=bon1+(i-100000)*0.075;break;

     case 2:

     case 3:bonus=bon2+(i-200000)*0.05;break;

     case 4:

     case 5:bonus=bon4+(i-400000)*0.03;break;

     case 6:

     case 7:

     case 8:

     case 9:bonus=bon6+(i-600000)*0.015;break;

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

     }

     printf("奖金是%10.2f\n",bonus);

   return 0;

}

11.输入4个整数,要求有小到大的顺序输出。

解:

#include <stdio.h>

int main()

{

   int t,a,b,c,d;

   printf("请输入4个数:");

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

   printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);

   if(a>b)

   {t=a;a=b;b=t;}

   if(a>c)

   {t=a;a=c;c=t;}

   if(a>d)

   {t=a;a=d;d=t;}

   if(b>c)

   {t=b;b=c;c=t;}

   if(b>d)

   {t=b;b=d;c=t;}

   if(c>d)

   {t=c;d=c;c=t;}

   printf("排列结果如下: \n");

   printf("%d %d %d %d  \n"    ,a,b,c,d);

   return 0;

}

12.

#include <stdio.h>

int main()

{

   int h;

   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-x4)*(x-x4)+(y-y4)*(y-y4);    //求该点到各中心点距离

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

    d3=(x-x2)*(x-x4)+(y-y4)*(y-y4);

   d4=(x-x3)*(x-x3)+(y-y3)*(y-y3);

   if(d1>1 && d2>1 && d3>1 && d4>1) h=0;   //判断该点是否在塔外

   printf("该点的高度为%d\n",h);

   return 0;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王某i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值