鱼C论坛

 找回密码
 立即注册
查看: 2028|回复: 13

[已解决]关于case后面只能跟常量

[复制链接]
发表于 2023-10-13 18:48:13 | 显示全部楼层 |阅读模式
3鱼币
商品价格是按购买数量分层,200个以上,100个以上,50个以上,50个以下,想知道switch( )里面该怎么写表达式才能分出三个层次外加一个default
  1. #include <iostream>
  2. using namespace std;
  3. void main()
  4. {
  5.         int s;
  6.         double zj;
  7.         cout<<"请输入商品的购买数量:";
  8.         cin>>s;
  9.         switch (s)
  10.         {
  11.         case s>200:
  12.                 zj=s*10*0.85;
  13.                 break;
  14.         case s>100:
  15.                 zj=s*10*0.9;
  16.                 break;
  17.         case s>50:
  18.                 zj=s*10*0.95;
  19.                 break;
  20.         default:
  21.                 zj=s*10;
  22.         }
  23.         cout<<"总的货价为"<<zj;
  24.         system("pause");
  25. }
复制代码
最佳答案
2023-10-13 18:48:14
在C++中,switch语句的case后面只能跟常量表达式,不能跟变量或者复杂的条件表达式。但是,你可以通过一些技巧来实现你的需求。你可以先将购买数量s转换为一个层次值,然后在switch语句中使用这个层次值。以下是一个示例:

  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.     int s;
  6.     double zj;
  7.     int level;
  8.     cout << "请输入商品的购买数量:";
  9.     cin >> s;

  10.     if (s > 200) {
  11.         level = 3;
  12.     } else if (s > 100) {
  13.         level = 2;
  14.     } else if (s > 50) {
  15.         level = 1;
  16.     } else {
  17.         level = 0;
  18.     }

  19.     switch (level)
  20.     {
  21.     case 3:
  22.         zj = s * 10 * 0.85;
  23.         break;
  24.     case 2:
  25.         zj = s * 10 * 0.9;
  26.         break;
  27.     case 1:
  28.         zj = s * 10 * 0.95;
  29.         break;
  30.     default:
  31.         zj = s * 10;
  32.     }

  33.     cout << "总的货价为" << zj << endl;
  34.     system("pause");
  35.     return 0;
  36. }
复制代码

在这个示例中,我们首先根据s的值计算出一个层次值level,然后在switch语句中使用这个层次值。这样,我们就可以在switch语句中根据购买数量的不同层次来计算商品价格了。

最佳答案

查看完整内容

在C++中,switch语句的case后面只能跟常量表达式,不能跟变量或者复杂的条件表达式。但是,你可以通过一些技巧来实现你的需求。你可以先将购买数量s转换为一个层次值,然后在switch语句中使用这个层次值。以下是一个示例: 在这个示例中,我们首先根据s的值计算出一个层次值level,然后在switch语句中使用这个层次值。这样,我们就可以在switch语句中根据购买数量的不同层次来计算商品价格了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-13 18:48:14 | 显示全部楼层    本楼为最佳答案   
在C++中,switch语句的case后面只能跟常量表达式,不能跟变量或者复杂的条件表达式。但是,你可以通过一些技巧来实现你的需求。你可以先将购买数量s转换为一个层次值,然后在switch语句中使用这个层次值。以下是一个示例:

  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.     int s;
  6.     double zj;
  7.     int level;
  8.     cout << "请输入商品的购买数量:";
  9.     cin >> s;

  10.     if (s > 200) {
  11.         level = 3;
  12.     } else if (s > 100) {
  13.         level = 2;
  14.     } else if (s > 50) {
  15.         level = 1;
  16.     } else {
  17.         level = 0;
  18.     }

  19.     switch (level)
  20.     {
  21.     case 3:
  22.         zj = s * 10 * 0.85;
  23.         break;
  24.     case 2:
  25.         zj = s * 10 * 0.9;
  26.         break;
  27.     case 1:
  28.         zj = s * 10 * 0.95;
  29.         break;
  30.     default:
  31.         zj = s * 10;
  32.     }

  33.     cout << "总的货价为" << zj << endl;
  34.     system("pause");
  35.     return 0;
  36. }
复制代码

在这个示例中,我们首先根据s的值计算出一个层次值level,然后在switch语句中使用这个层次值。这样,我们就可以在switch语句中根据购买数量的不同层次来计算商品价格了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

可以按照以下方式实现:

  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.     int s;
  6.     double zj;
  7.     cout << "请输入商品的购买数量:";
  8.     cin >> s;
  9.     if (s > 200) {
  10.         zj = s * 10 * 0.85;
  11.     } else if (s > 100) {
  12.         zj = s * 10 * 0.9;
  13.     } else if (s > 50) {
  14.         zj = s * 10 * 0.95;
  15.     } else {
  16.         zj = s * 10;
  17.     }
  18.     cout << "总的货价为" << zj;
  19.     system("pause");
  20.     return 0;
  21. }
复制代码


这样,当输入购买数量时,程序会根据购买数量的大小来计算总的货价。如果购买数量大于200,打85折;如果购买数量大于100,打9折;如果购买数量大于50,打95折;否则不打折。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

可以按照以下方式 ...

要求用switch,不能用if
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-13 18:50:44 | 显示全部楼层
问题解答:C++中使用switch语句分层次计算商品价格

在C++的switch语句中,case后面只能跟常量表达式,无法直接使用布尔表达式。对于这种情况,可以考虑使用if-else语句来实现。下面是修改后的代码:
  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4.     int s;
  5.     double zj;
  6.     cout << "请输入商品的购买数量:";
  7.     cin >> s;
  8.    
  9.     if (s > 200) {
  10.         zj = s * 10 * 0.85;
  11.     } else if (s > 100) {
  12.         zj = s * 10 * 0.9;
  13.     } else if (s > 50) {
  14.         zj = s * 10 * 0.95;
  15.     } else {
  16.         zj = s * 10;
  17.     }
  18.    
  19.     cout << "总的货价为:" << zj << endl;
  20.    
  21.     system("pause");
  22.     return 0;
  23. }
复制代码

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

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

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-10-13 18:51:34 | 显示全部楼层
Mike_python小 发表于 2023-10-13 18:50
问题解答:C++中使用switch语句分层次计算商品价格

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

要求不能用if,要用switch
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-13 21:46:45 | 显示全部楼层
骨头坠羽毛 发表于 2023-10-13 18:50
要求用switch,不能用if

.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-14 22:40:36 | 显示全部楼层
本帖最后由 rt3 于 2023-10-18 00:15 编辑

  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4. int main()
  5. {
  6.         int s;
  7.         double zj;
  8.        cout<<"请输入商品的购买数量:";
  9.         cin>>s;
  10.         switch((int)(s-1)/50/2){
  11.         case 2:
  12.                 zj=s*10*0.85;
  13.                 break;
  14.         case 1:
  15.                 zj=s*10*0.9;
  16.                 break;
  17.         case 0:
  18.                 zj=(s>50)?s*10*0.95:s*10;
  19.                 break;
  20.          default:
  21.              cout<<endl;
  22.         }
  23.         cout<<"总的货价为"<<zj;
  24.       cout<<endl;
  25.         system("pause");
  26.         return 0;

  27. }
复制代码

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

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

评分

参与人数 1鱼币 +1 收起 理由
骨头坠羽毛 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-18 10:19:08 | 显示全部楼层
  1. s &= 0x000000FF;
  2. switch ((s-1) / 50) {
  3.     case 4: // s > 200
  4.         break;
  5.     case 2: case 3:  // 100 < s < 200
  6.         break;
  7.     case 1: // 50 < s < 100
  8.         break;
  9.     default: // s < 50
  10.         break;
  11. }
复制代码



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

评分

参与人数 1鱼币 +1 收起 理由
骨头坠羽毛 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-18 11:59:38 | 显示全部楼层
你看这样可以吗?

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

  4. enum PRICE_RANGE
  5. {
  6.     PRICE_50      = 0,
  7.     PRICE_50_100  = 1,
  8.     PRICE_100_200 = 2,
  9.     PRICE_200     = 3
  10. };

  11. int get_price_level(int quantity)
  12. {
  13.     if (quantity < 50)
  14.     {
  15.         return PRICE_50;
  16.     }
  17.     else if (quantity >= 50 && quantity < 100)
  18.     {
  19.         return PRICE_50_100;
  20.     }
  21.     else if (quantity >= 100 && quantity < 200)
  22.     {
  23.         return PRICE_100_200;
  24.     }
  25.     else if (quantity >= 200)
  26.     {
  27.         return PRICE_200;
  28.     }
  29. }

  30. void get_total_price(int quantity, double *total_price)
  31. {
  32.     int level = get_price_level(quantity);
  33.     switch (level)
  34.     {
  35.     case PRICE_50:
  36.         *total_price = quantity * 10;
  37.         break;
  38.     case PRICE_50_100:
  39.         *total_price = quantity * 10 * 0.95;
  40.         break;
  41.     case PRICE_100_200:
  42.         *total_price = quantity * 10 * 0.9;
  43.         break;
  44.     case PRICE_200:
  45.         *total_price = quantity * 10 * 0.85;
  46.         break;
  47.     default:
  48.         break;
  49.     }
  50. }

  51. int main (void)
  52. {   
  53.     int quantity = 0;
  54.     double total_price = 0;
  55.     cout << "请输入商品的购买数量:";
  56.     cin >> quantity;
  57.     if (quantity <= 0)
  58.     {
  59.         cout << "购买商品数量不能小于或等于0" << endl;
  60.         exit(EXIT_FAILURE);
  61.     }
  62.     get_total_price(quantity, &total_price);
  63.     cout << "购买商品数量是:,"<< quantity <<"商品总价是:" << total_price << endl;
  64.     exit (EXIT_SUCCESS);
  65. }
复制代码

评分

参与人数 1鱼币 +2 收起 理由
骨头坠羽毛 + 2

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-10-19 13:03:46 From FishC Mobile | 显示全部楼层
cjgank 发表于 2023-10-18 11:59
你看这样可以吗?

好高级的亚子
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-19 13:35:42 | 显示全部楼层
加油
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-19 15:59:50 | 显示全部楼层

就是用函数模块化了呀
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-10-22 21:08:45 | 显示全部楼层
cjgank 发表于 2023-10-19 15:59
就是用函数模块化了呀

还没学到嘞
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-9 16:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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