骨头坠羽毛 发表于 2023-10-13 18:48:13

关于case后面只能跟常量

商品价格是按购买数量分层,200个以上,100个以上,50个以上,50个以下,想知道switch( )里面该怎么写表达式才能分出三个层次外加一个default
#include <iostream>
using namespace std;
void main()
{
        int s;
        double zj;
        cout<<"请输入商品的购买数量:";
        cin>>s;
        switch (s)
        {
        case s>200:
                zj=s*10*0.85;
                break;
        case s>100:
                zj=s*10*0.9;
                break;
        case s>50:
                zj=s*10*0.95;
                break;
        default:
                zj=s*10;
        }
        cout<<"总的货价为"<<zj;
        system("pause");
}

陶远航 发表于 2023-10-13 18:48:14

在C++中,switch语句的case后面只能跟常量表达式,不能跟变量或者复杂的条件表达式。但是,你可以通过一些技巧来实现你的需求。你可以先将购买数量s转换为一个层次值,然后在switch语句中使用这个层次值。以下是一个示例:

#include <iostream>
using namespace std;

int main()
{
    int s;
    double zj;
    int level;
    cout << "请输入商品的购买数量:";
    cin >> s;

    if (s > 200) {
      level = 3;
    } else if (s > 100) {
      level = 2;
    } else if (s > 50) {
      level = 1;
    } else {
      level = 0;
    }

    switch (level)
    {
    case 3:
      zj = s * 10 * 0.85;
      break;
    case 2:
      zj = s * 10 * 0.9;
      break;
    case 1:
      zj = s * 10 * 0.95;
      break;
    default:
      zj = s * 10;
    }

    cout << "总的货价为" << zj << endl;
    system("pause");
    return 0;
}
在这个示例中,我们首先根据s的值计算出一个层次值level,然后在switch语句中使用这个层次值。这样,我们就可以在switch语句中根据购买数量的不同层次来计算商品价格了。

isdkz 发表于 2023-10-13 18:48:43

switch语句中case后面只能跟常量,不能跟表达式。因此,需要使用if语句来实现该逻辑。

可以按照以下方式实现:

#include <iostream>
using namespace std;

int main()
{
    int s;
    double zj;
    cout << "请输入商品的购买数量:";
    cin >> s;
    if (s > 200) {
      zj = s * 10 * 0.85;
    } else if (s > 100) {
      zj = s * 10 * 0.9;
    } else if (s > 50) {
      zj = s * 10 * 0.95;
    } else {
      zj = s * 10;
    }
    cout << "总的货价为" << zj;
    system("pause");
    return 0;
}


这样,当输入购买数量时,程序会根据购买数量的大小来计算总的货价。如果购买数量大于200,打85折;如果购买数量大于100,打9折;如果购买数量大于50,打95折;否则不打折。

骨头坠羽毛 发表于 2023-10-13 18:50:05

isdkz 发表于 2023-10-13 18:48
switch语句中case后面只能跟常量,不能跟表达式。因此,需要使用if语句来实现该逻辑。

可以按照以下方式 ...

要求用switch,不能用if

Mike_python小 发表于 2023-10-13 18:50:44

问题解答:C++中使用switch语句分层次计算商品价格

在C++的switch语句中,case后面只能跟常量表达式,无法直接使用布尔表达式。对于这种情况,可以考虑使用if-else语句来实现。下面是修改后的代码:


#include <iostream>
using namespace std;

int main() {
    int s;
    double zj;
    cout << "请输入商品的购买数量:";
    cin >> s;
   
    if (s > 200) {
      zj = s * 10 * 0.85;
    } else if (s > 100) {
      zj = s * 10 * 0.9;
    } else if (s > 50) {
      zj = s * 10 * 0.95;
    } else {
      zj = s * 10;
    }
   
    cout << "总的货价为:" << zj << endl;
   
    system("pause");
    return 0;
}


上述代码使用if-else语句替代了原本的switch语句。根据购买数量的不同,按照要求计算商品的价格,并输出结果。

希望能解答到你的问题!如果还有其他疑问,请继续提问。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

骨头坠羽毛 发表于 2023-10-13 18:51:34

Mike_python小 发表于 2023-10-13 18:50
问题解答:C++中使用switch语句分层次计算商品价格

在C++的switch语句中,case后面只能跟常量表达式,无法 ...

要求不能用if,要用switch{:10_266:}

pytao 发表于 2023-10-13 21:46:45

骨头坠羽毛 发表于 2023-10-13 18:50
要求用switch,不能用if

.

rt3 发表于 2023-10-14 22:40:36

本帖最后由 rt3 于 2023-10-18 00:15 编辑


#include <iostream>
#include <cmath>
using namespace std;
int main()
{
      int s;
      double zj;
       cout<<"请输入商品的购买数量:";
      cin>>s;
      switch((int)(s-1)/50/2){
      case 2:
                zj=s*10*0.85;
                break;
      case 1:
                zj=s*10*0.9;
                break;
      case 0:
                zj=(s>50)?s*10*0.95:s*10;
                break;
         default:
             cout<<endl;
      }
      cout<<"总的货价为"<<zj;
      cout<<endl;
      system("pause");
      return 0;

}

这个代码没有考虑数量>300的情况。但看题意应该不用考虑这个。
硬是凑了一个default段上去,虽然看上去有些多余,但也想不出更好的办法了。

还有一种办法是一个swich语句里分200个以上,100个以上2个case,外加一个default段,在这个default段里处理50个以上和50个以下2种情况,但那就是4个case了

驭剑的秘密 发表于 2023-10-18 10:19:08

s &= 0x000000FF;
switch ((s-1) / 50) {
    case 4: // s > 200
      break;
    case 2: case 3:// 100 < s < 200
      break;
    case 1: // 50 < s < 100
      break;
    default: // s < 50
      break;
}



三个层次,没说只能三个case,嘿嘿

cjgank 发表于 2023-10-18 11:59:38

你看这样可以吗?

#include <iostream>
#include <stdlib.h>
using namespace std;

enum PRICE_RANGE
{
    PRICE_50      = 0,
    PRICE_50_100= 1,
    PRICE_100_200 = 2,
    PRICE_200   = 3
};

int get_price_level(int quantity)
{
    if (quantity < 50)
    {
      return PRICE_50;
    }
    else if (quantity >= 50 && quantity < 100)
    {
      return PRICE_50_100;
    }
    else if (quantity >= 100 && quantity < 200)
    {
      return PRICE_100_200;
    }
    else if (quantity >= 200)
    {
      return PRICE_200;
    }
}

void get_total_price(int quantity, double *total_price)
{
    int level = get_price_level(quantity);
    switch (level)
    {
    case PRICE_50:
      *total_price = quantity * 10;
      break;
    case PRICE_50_100:
      *total_price = quantity * 10 * 0.95;
      break;
    case PRICE_100_200:
      *total_price = quantity * 10 * 0.9;
      break;
    case PRICE_200:
      *total_price = quantity * 10 * 0.85;
      break;
    default:
      break;
    }
}

int main (void)
{   
    int quantity = 0;
    double total_price = 0;
    cout << "请输入商品的购买数量:";
    cin >> quantity;
    if (quantity <= 0)
    {
      cout << "购买商品数量不能小于或等于0" << endl;
      exit(EXIT_FAILURE);
    }
    get_total_price(quantity, &total_price);
    cout << "购买商品数量是:,"<< quantity <<"商品总价是:" << total_price << endl;
    exit (EXIT_SUCCESS);
}

骨头坠羽毛 发表于 2023-10-19 13:03:46

cjgank 发表于 2023-10-18 11:59
你看这样可以吗?

好高级的亚子

yeel 发表于 2023-10-19 13:35:42

加油

cjgank 发表于 2023-10-19 15:59:50

骨头坠羽毛 发表于 2023-10-19 13:03
好高级的亚子

就是用函数模块化了呀{:5_109:}

骨头坠羽毛 发表于 2023-10-22 21:08:45

cjgank 发表于 2023-10-19 15:59
就是用函数模块化了呀

还没学到嘞
页: [1]
查看完整版本: 关于case后面只能跟常量