c++中switch语句的t提问

题二 电费收取
供电公司对每月电费在100度以下的普通客户每度电收0.5元;
超过100度低于300度超过部分每度收0.8元;
超过300度低于1000度超过部分每度收1.2元;
超过1000度超过部分每度收2元.
输入客户的用电度数,求应收电费的金额.

求用switch写出来,我头都想爆了。

因为从100到1000所以除以100,判断商1-10中的哪一个就行了

 #include<iostream>
using namespace std;
int main()
{
    int n;
    while(cin>>n)
    {
        int tmp = n/100;
        switch(tmp)
        {
            case 0://低于100
            cout<<n*0.3<<endl;
            break;
            case 1:
            case 2:
            case 3://低于300
            cout<<30+(n-100)*0.8<<endl;
            break;
            case 4:
            case 5:
            case 6:
            case 7:
            case 8:
            case 9:
            case 10://低于1000
            cout<<30+160+(n-300)*1.2<<endl;
            break;
            default://超过1000
            cout<<30+160+840+(n-1000)*2<<endl;
            break;
        } 
    } 
    return 0;
} 

明显是标准的if...else if...else语句的逻辑,为何用switch

因为情况太多,如果用if...else if...else的话需要四个,消耗太多内存,并且浪费运行时间。用switch时只需要比较一次就可以。
(个人见解,希望对你有帮助)

#include
#include

using namespace std;

int main()
{
cout << "请输入用电度数:\n";
double df, dushu; //df代表电费,dushu代表用电度数
cin >> dushu;

switch (int(dushu / 100))
{
    case 0:
        df = 0.5*dushu;
        break;
    case 1: case2:
        df = 0.5 * 100 + (dushu - 100)*0.8;
        break;
    case 3:case 4:case 5:case 6:case 7:case 8:case 9:
        df = 0.5 * 100 + (300 - 100)*0.8 + (dushu - 300)*1.2;
        break;
    default:
        df = 0.5 * 100 + (300 - 100)*0.8 + (1000 - 300)*1.2 + (dushu - 1000)*1.5;
        break;

}

cout << "电费收取为: " << df << endl;

system("pause");
return 0;

}

追求效率时代我也这样想过,尽量提高运行效率,实际上现在的电脑性能严重过剩,根本不用过多考虑效率问题了,关键把程序写规范,并利于以后的更新维护,太多的技巧其实并没有什么用。
试想,如果将来要把这个收费的分段点调整下,你不是又要重新写一段代码。