936241151 发表于 2020-10-26 20:29:25

小白求助

#include <stdio.h>
int main()
{
int i;
doublebonus,bon1,bon2,bon4,bon6,bon10;
intbranch;
bon1=100000*0.1;
bon2=bon1+100000*0.075;
bon4=bon2+200000*0.05;
bon6=bon4+200000*0.03;
bon10=bon6+400000*0.015;
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("prize=%d\n",bonus);
   return 0;
}
试了好数,总是输出0

巴巴鲁 发表于 2020-10-26 20:34:55

bonus你定义的是double型
输出用%d?!

936241151 发表于 2020-10-26 20:52:48

double 改成int,然后我输入负数怎么让它输出0

乐乐学编程 发表于 2020-10-26 20:55:20

巴巴鲁 发表于 2020-10-26 20:34
bonus你定义的是double型
输出用%d?!

去做一下,我发的那个求助帖子吧,我记得你做过类似的小岛面积的题目

巴巴鲁 发表于 2020-10-26 21:19:26

936241151 发表于 2020-10-26 20:52
double 改成int,然后我输入负数怎么让它输出0

判断一下,如果是负数就输出0呗

乐乐学编程 发表于 2020-10-26 21:24:14

936241151 发表于 2020-10-26 20:52
double 改成int,然后我输入负数怎么让它输出0

我运行了一下你的程序,

你什么就是输入负数,又什么变量输出为0呢?

这样可以吗:

scanf("%lf",&i);
branch = i /1 00000;
if (branch > 10)
      branch = 10;
if (branch < 0)
      branch = 2;
switch(branch)
{
      case 0: bonus = i * 0.1;
      break;
      case 1: bonus = bon1 + (i - 100000) * 0.075;
      break;
      case 2: bonus = 0;
      break;

936241151 发表于 2020-10-26 21:37:55

乐乐学编程 发表于 2020-10-26 21:24
我运行了一下你的程序,

你什么就是输入负数,又什么变量输出为0呢?


pintia上的一题,就是我scanf输入,当输入负数的时候,比如我输入-10000,它输出-1000,预期结果应该是0

乐乐学编程 发表于 2020-10-26 21:43:48

936241151 发表于 2020-10-26 21:37
pintia上的一题,就是我scanf输入,当输入负数的时候,比如我输入-10000,它输出-1000,预期结果应该是0

将我红色字体语句加进去,保证只要你输入负数,输出肯定是0

936241151 发表于 2020-10-26 22:00:39

乐乐学编程 发表于 2020-10-26 21:43
将我红色字体语句加进去,保证只要你输入负数,输出肯定是0

不管输入什么,全是0了{:10_266:}

lixlovelim 发表于 2020-10-27 01:08:51

#include <stdio.h>
int main()
{
int i;
doublebonus,bon1,bon2,bon4,bon6,bon10;
intbranch;//这里为int
bon1=100000*0.1;
bon2=bon1+100000*0.075;
bon4=bon2+200000*0.05;
bon6=bon4+200000*0.03;
bon10=bon6+400000*0.015;
scanf("%d",&i);
branch=i/100000;//i也是int branch也是int 如果i的值小于100000,branch得到的值永远是等于0的值,int类型0.9也会把 .9舍弃,只保留0,所以后面的判断没有意义.branch的值会等于0,所以才会等于0;可以尝试把branch改成浮点型
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("prize=%d\n",bonus);
   return 0;
}

风过无痕1989 发表于 2020-10-27 10:39:06

936241151 发表于 2020-10-26 22:00
不管输入什么,全是0了

是谁告诉你,将他的红色部分加到程序里去,就不管输入什么,全是0了?

只有 i 为负数,branch 才小于 0,只有 branch 小于 0,branch 才等于 2,只有 branch 等于 2,只有 branch 等于 2 ,才会是 case 2: bonus = 0

乐乐学编程 发表于 2020-10-28 15:35:45

问题还没有解决?
页: [1]
查看完整版本: 小白求助