kevinde2022 发表于 2022-10-17 17:22:32

小白求教

很简单的一道题,两个代码差不多,就是case 7 那块语句不太一样,输入 比如 740000, 代码一运行case 5,代码二运行case 7,执行语句不一样为啥输出结果一样
#include <stdio.h>
代码一
int main(void) {
    int i,p;
    double bonus,bonus1,bonus2,bonus4,bonus6,bonus10;
    bonus1 = 100000 * 0.1;
    bonus2 =100000*0.075 + bonus1;
    bonus4 = 200000*0.05 + bonus2;
    bonus6 = 400000*0.03 + bonus4;
    bonus10 = 600000*0.015 + bonus6;
    scanf("%d",&i);
    p = i/100000;
    if (p > 10) p = 10 ;
    switch(p)
    {case 0 : bonus = i*0.1;
    case 1: bonus = (i - 100000)*0.075 + bonus1 ;break;
    case 2:
    case 3: bonus = (i - 200000)*0.05 + bonus2;break;
    case 4:
    case 5: bonus= (i - 400000)*0.03 + bonus4 ; break;
    case 6:
    case 7:
    case 8:
    case 9:bonus = (i - 600000)*0.015 + bonus6;break;
    case 10:bonus = (i - 1000000)*0.01 + bonus10;break; }
    printf("%10.2f",bonus);
        return 0;
}




代码二
#include <stdio.h>

int main(void) {
    int i,p;
    double bonus,bonus1,bonus2,bonus4,bonus6,bonus10;
    bonus1 = 100000 * 0.1;
    bonus2 =100000*0.075 + bonus1;
    bonus4 = 200000*0.05 + bonus2;
    bonus6 = 400000*0.03 + bonus4;
    bonus10 = 600000*0.015 + bonus6;
    scanf("%d",&i);
    p = i/100000;
    if (p > 10) p = 11 ;
    switch(p)
    {case 0 : bonus = i*0.1;
    case 1: bonus = (i - 100000)*0.075 + bonus1 ;break;
    case 2:
    case 3: bonus = (i - 200000)*0.05 + bonus2;break;
    case 4:
    case 5: bonus= (i - 400000)*0.03 + bonus4 ; break;
    case 6:
    case 7:bonus = (i - 600000)*0.015 + bonus6;break;
    case 8:
    case 9:
    case 10:
    case 11:bonus = (i - 1000000)*0.01 + bonus10;break; }
    printf("%10.2f",bonus);
    return 0;
}

jackz007 发表于 2022-10-17 18:00:47

本帖最后由 jackz007 于 2022-10-17 18:01 编辑

       两个代码几乎完全一样,不同之处在于,代码 1,在 i > 100000 时 p = 10,而代码 2 是 p = 11,p 在这里只是起 switch ... case 分支器变量的作用,只要看看两个代码在 p = 10 和 p = 11 分别执行了什么就可以找到原因了
代码 1:
case 10:bonus = (i - 1000000)*0.01 + bonus10;break; }
代码 2:
case 11:bonus = (i - 1000000)*0.01 + bonus10;break; }
      除了 case 的值不同以外,从算式本身能看出区别吗?
      所以,二者的计算结果必须一样!

kevinde2022 发表于 2022-10-17 18:04:50

找到问题了谢谢
页: [1]
查看完整版本: 小白求教