7-3 查询水果价格

分数 15

全屏浏览题目

切换布局

作者 C课程组

单位 浙江大学

给定四种水果,分别是苹果(apple)、梨(pear)、桔子(orange)、葡萄(grape),单价分别对应为3.00元/公斤、2.50元/公斤、4.10元/公斤、10.20元/公斤。

首先在屏幕上显示以下菜单:

[1] apple
[2] pear
[3] orange
[4] grape
[0] exit

用户可以输入编号1~4查询对应水果的单价。当连续查询次数超过5次时,程序应自动退出查询;不到5次而用户输入0即退出;输入其他编号,显示价格为0。

输入格式:

输入在一行中给出用户连续输入的若干个编号。

输出格式:

首先在屏幕上显示菜单。然后对应用户的每个输入,在一行中按格式“price = 价格”输出查询结果,其中价格保留两位小数。当用户连续查询次数超过5次、或主动输入0时,程序结束。

输入样例1:

3 -1 0 2

输出样例1:

[1] apple
[2] pear
[3] orange
[4] grape
[0] exit
price = 4.10
price = 0.00

输入样例2:

1 2 3 3 4 4 5 6 7 8

输出样例2:

[1] apple
[2] pear
[3] orange
[4] grape
[0] exit
price = 3.00
price = 2.50
price = 4.10
price = 4.10
price = 10.20

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

我的答案:

解题过程:

1. 分析问题:
首先,需要在屏幕上显示一个菜单。然后,根据用户的输入显示相应的水果价格。程序的两种退出方式:连续查询5次或用户输入0。

2. 确定解题步骤:

  • 显示菜单。
  • 创建一个数组或其他数据结构来存储水果和其价格。
  • 迭代最多5次或直到用户输入为0,进行以下操作:
    • 读取用户的输入。
    • 根据输入查询并显示价格。

3. 写代码:

C语言:

#include <stdio.h>

int main() {
    double prices[] = {0.0, 3.00, 2.50, 4.10, 10.20};
    int choice, count = 0;

    // Display menu
    printf("[1] apple\n");
    printf("[2] pear\n");
    printf("[3] orange\n");
    printf("[4] grape\n");
    printf("[0] exit\n");

    while (count < 5) {
        scanf("%d", &choice);
        
        if (choice == 0) {
            break;
        }

        if (choice >= 1 && choice <= 4) {
            printf("price = %.2f\n", prices[choice]);
        } else {
            printf("price = 0.00\n");
        }
        
        count++;
    }

    return 0;
}

C++:

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int choice, count = 0;

    // Display menu
    cout << "[1] apple" << endl;
    cout << "[2] pear" << endl;
    cout << "[3] orange" << endl;
    cout << "[4] grape" << endl;
    cout << "[0] exit" << endl;

    while (count < 5) {
        cin >> choice;

        if (choice == 0) {
            break;
        }

        cout << "price = " << fixed << setprecision(2);
        switch (choice) {
            case 1:
                cout << 3.00 << endl;
                break;
            case 2:
                cout << 2.50 << endl;
                break;
            case 3:
                cout << 4.10 << endl;
                break;
            case 4:
                cout << 10.20 << endl;
                break;
            default:
                cout << "0.00" << endl;
                break;
        }

        count++;
    }

    return 0;
}

总结:

学到了什么?

这道题目提供了多个学习和思考点:

1. **选择结构的应用**:通过使用`switch`语句,我们可以明白其如何根据不同的条件选择不同的执行路径。它是一个常用的结构,特别是当有多个条件需要判断时。

2. **循环控制**:这道题目要求在查询超过5次后自动退出,这介绍了循环的使用,并在循环内部通过条件判断进行中断。

3. **输入/输出格式的控制**:使用`fixed`和`setprecision`来控制输出格式,让我们知道如何以特定的格式显示数字。

4. **用户交互与界面**:通过提供一个简单的菜单,我们学习了如何创建基础的用户交互界面。

5. **边界条件的处理**:处理无效的输入是编程中的一个常见任务。这里,如果输入的选项不在预期的范围内,则输出为0.00,这教给我们总是要考虑和处理可能的非预期输入。

6. **程序的组织和结构**:虽然这是一个相对简单的程序,但它的结构(如何组织`switch`语句、如何控制循环等)为更复杂的程序提供了模板。

7. **问题分析与解决策略**:在实际编程任务中,首先要对问题进行分析,确定输入和输出,然后选择适当的策略来解决它。这道题目提供了一个很好的练习机会,因为它要求从问题描述中提取关键信息,并将这些信息转化为有效的代码。

总的来说,这道题目提供了一个很好的练习机会,通过它我们可以学习并加强对基本编程概念和策略的理解。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏驰和徐策

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值