鱼C论坛

 找回密码
 立即注册
查看: 1042|回复: 11

[已解决]看看吧 这道题 switch 语句

[复制链接]
发表于 2020-10-26 20:26:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
企业发放的奖金根据利润提成。利润低于或等于 100000 元时,奖金可提 10%;利润高
于 100000 元,低于 200000 元时,低于 100000 元的部分按 10%提成,高于 100000 元的部
分,可提成 7.5%;200000 到 400000 之间时,高于 200000 元的部分,可提成 5%;400000
到 600000 之间时高于 400000 元的部分,可提成 3%;600000 到 1000000 之间时,高于 600000
元的部分,可提成 1.5%,高于 1000000 元时,超过 1000000 元的部分按 1%提成,从键盘输
入当月利润,求应发放奖金总数。请应用 switch 语句编写算法实现。


下面代码是我自己打的 还没完 不会写了
#include <stdio.h>
int main()
{
    int num,prize;
    scanf("%d",num);
    switch(num/100000)
    {
        case 0:prize=num*0.1;break;
        case 1:prize=100000*0.1+(num-100000)*0.075;break;
        case 2:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05;break;
        case 3:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05;break;
        case 4:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03;break;
        case 5:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03;break;
        case 6:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03+(num-600000)*0.015;break;
        case 7:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03+(num-600000)*0.015;break;
        case 8:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03+(num-600000)*0.015;break;
        case 9:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03+(num-600000)*0.015;break;
        case 10:prize=
        default:prize=
        
        }
   
    }
我不知道 负数还有超过1000000的怎么写了
最佳答案
2020-10-26 20:38:02
#include <stdio.h>
int main()
{
    int num,prize;
    scanf("%d",num);
    if(num <0)
    {
          printf("0");
          return 0;
    }
    switch(num/100000)
    {
        case 0:prize=num*0.1;break;
        case 1:prize=100000*0.1+(num-100000)*0.075;break;
        case 2:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05;break;
        case 3:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05;break;
        case 4:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03;break;
        case 5:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03;break;
        case 6:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03+(num-600000)*0.015;break;
        case 7:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03+(num-600000)*0.015;break;
        case 8:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03+(num-600000)*0.015;break;
        case 9:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03+(num-600000)*0.015;break;
        default:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03+(num-600000)*0.015+(num-1000000)*0.01;break;
    
        }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-26 20:30:44 | 显示全部楼层
#include <stdio.h>
int main()
{
    int num,prize;
    scanf("%d",num);
    switch(num/100000)
    {
        case 0:prize=num*0.1;break;
        case 1:prize=100000*0.1+(num-100000)*0.075;break;
        case 2:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05;break;
        case 3:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05;break;
        case 4:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03;break;
        case 5:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03;break;
        case 6:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03+(num-600000)*0.015;break;
        case 7:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03+(num-600000)*0.015;break;
        case 8:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03+(num-600000)*0.015;break;
        case 9:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03+(num-600000)*0.015;break;
        case 10:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03+(num-600000)*0.015+(num-1000000)*0.01;break;
        default:break;
    
        }
    
    }
应该是这样吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-26 20:33:29 | 显示全部楼层

不对吧 比如说两百万 除1000000就没有对应的case 题上示例负数输出是0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-26 20:35:34 | 显示全部楼层
癞蛤蟆丶ccc 发表于 2020-10-26 20:33
不对吧 比如说两百万 除1000000就没有对应的case 题上示例负数输出是0

我明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-26 20:38:02 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>
int main()
{
    int num,prize;
    scanf("%d",num);
    if(num <0)
    {
          printf("0");
          return 0;
    }
    switch(num/100000)
    {
        case 0:prize=num*0.1;break;
        case 1:prize=100000*0.1+(num-100000)*0.075;break;
        case 2:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05;break;
        case 3:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05;break;
        case 4:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03;break;
        case 5:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03;break;
        case 6:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03+(num-600000)*0.015;break;
        case 7:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03+(num-600000)*0.015;break;
        case 8:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03+(num-600000)*0.015;break;
        case 9:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03+(num-600000)*0.015;break;
        default:prize=100000*0.1+(num-100000)*0.075+(num-200000)*0.05+(num-400000)*0.03+(num-600000)*0.015+(num-1000000)*0.01;break;
    
        }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-26 20:40:53 | 显示全部楼层

好像对哦 我中间式子错了 我等会改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-26 20:42:54 | 显示全部楼层
癞蛤蟆丶ccc 发表于 2020-10-26 20:40
好像对哦 我中间式子错了 我等会改

如果问题解决,不要忘记最佳答案哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-26 20:45:12 | 显示全部楼层
小甲鱼的铁粉 发表于 2020-10-26 20:42
如果问题解决,不要忘记最佳答案哦

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-26 20:48:51 | 显示全部楼层
应该可以这样写
int main(int argc, char const *argv[])
{
    
    int num,prize;
    scanf("%d",num);
    prize = 0;
    switch(num/100000) {
        case 10:
            prize += (num - 1000000) * 0.01;  // 1%
            num = 1000000;
        case 9:
        case 8:
        case 7:
        case 6:
            prize += (num - 600000) * 0.015;  // 1.5%
            num = 600000;
        case 5:
        case 4:
            prize += (num - 400000) * 0.03;  // 3%
            num = 400000;
        case 3:
        case 2:
            prize += (num - 200000) * 0.05;  // 5%
            num = 200000;
        case 1:
            prize += (num - 100000) * 0.075;  // 7.5%
            num = 100000;
        default:
            prize += num * 0.1;      // 10%
            break;
    }

    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-26 21:51:36 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-27 09:11:23 | 显示全部楼层
小甲鱼的铁粉 发表于 2020-10-26 20:42
如果问题解决,不要忘记最佳答案哦

不对 .  if<0后 又去switch循环里面去了 default
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-27 09:13:14 | 显示全部楼层
小甲鱼的铁粉 发表于 2020-10-26 20:42
如果问题解决,不要忘记最佳答案哦

if写到下面就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 20:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表