PTA 6-2自动售货机,c语言答案,包含解析

这篇具有很好参考价值的文章主要介绍了PTA 6-2自动售货机,c语言答案,包含解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

坚持不住就问问自己真的甘心放弃吗?

前言

书接上回,今天学校发了几道题,而这道题罕见的在CSDN里找不到,同时题本身对刚学结构体的同学,也有一定难度所以想和大家分享一下我的一点心得。

自动售货机内有多种商品(最多不超过50种)供人购买,可以定义如下结构体类型来表示商品信息:

struct product {
    int id;          // 商品编号
    char name[20];   // 商品名称
    double price;    // 商品单价
};

本题要求编写2个函数,分别用于显示售货机内的商品、计算所购买商品的总价格。

函数接口定义:

void menu(struct product p[],int n);
void order(struct product p[],int n);

其中:

  • 函数menu()的功能是按[商品编号] 商品名称 商品单价形式显示菜单,分行输出各商品信息,包括商品编号、商品名称和商品单价。
  • 在函数order()中,先输入要购买的商品编号以及数量,接着按商品名称 * 数量 = 价格形式输出购买该商品的金额,允许购买多种商品,当输入0时表示所选商品结束,最后输出计算的总价格(保留2位小数)。

在主函数中:

  1. 首先读入该自动售货机的商品信息,先输入正整数n(n≤20),之后n行依次输入n个商品的编号、名称以及单价,例如输入样例中的前4行。

  2. 调用menu()函数,按[商品编号] 商品名称 商品单价形式输出主函数中数组p的各成员值,商品个数不同,菜单项数也会不同。

  3. 调用order()函数,分行输入所需购买商品的编号和数量,接着按商品名称 * 数量 = 价格形式输出购买该商品的金额,允许购买多种商品,当输入0时表示所选商品结束,最后按Total = 总价格形式输出计算的总价格(保留2位小数)。

裁判测试程序样例:

#include<stdio.h>

struct product {
    int id;
    char name[20];
    double price;
};

void menu(struct product p[],int n);
void order(struct product p[],int n);

int main()
{
    struct product p[20];   // 最多可有50个商品
    int n;
    scanf("%d",&n);        // 商品数量 
    for(int i=0; i<n; i++) {
        scanf("%d %s %lf",&p[i].id,p[i].name,&p[i].price);  // 输入各商品的编号、名称和单价
    }

    menu(p,n);     // 显示菜单
    order(p,n);    // 点单,输入所需商品,并按要求输出各商品的名称、数量及价格,以及最终的总价格

    return 0;
}

/* 请在这里填写答案 */

输入样例:

3
1001 Water 2.0
1002 OrangeJuice 3.5
1003 GreenTea 3.0
1001 2
1003 1
0

输出样例:

[1001] Water 2.0
[1002] OrangeJuice 3.5
[1003] GreenTea 3.0
Water * 2 = 4.0
GreenTea * 1 = 3.0
Total = 7.0

代码长度限制16 KB

时间限制400 ms

内存限制64 MB

答案解析:

第一个函数:

一个简单的循环就能结束战斗了,不过注意这里的“name”是字符串,所以不用取地址

void menu(struct product p[], int n)
{
    for (int i = 0; i < n; i++)
    {
        printf("[%d] %s %.1lf\n",p[i].id, p[i].name, p[i].price);
    }
}

第二个函数:

要点一;"0"的时候停止,我的方法是每次循环先取得每行第一个数字看是不是零,是的话循环结束,不是的话循环继续。

要点二:打印“商品名称 * 数量 = 价格形式输出购买该商品的金额”时可以直接在print函数里面写算式,当然在引入一个变量来接收计算“购买该商品的金额”的值也可以。

要点三:打印的格式问题,在上一篇博客我也提到了,最好是把样例复制粘贴过去然后把数值所在位置改为对应占位符即可,很多题也都最好这样,可以有效防止因为格式过不了。

 

void order(struct product p[], int n)
{
    int a, b = 0;
    double sum = 0;
    while (~scanf("%d", &a) && a != 0)//判断是不是0
    {
        int i=0;
        while (p[i++].id != a);
        scanf("%d", &b);
        sum += b * p[i - 1].price;
        printf("%s * %d = %.1lf\n", p[i - 1].name, b, b * p[i - 1].price);
    }
    printf("Total = %.1lf", sum);
}

上答案:

void menu(struct product p[], int n)
{
    for (int i = 0; i < n; i++)
    {
        printf("[%d] %s %.1lf\n",p[i].id, p[i].name, p[i].price);
    }
}
void order(struct product p[], int n)
{
    int a, b = 0;
    double sum = 0;
    while (~scanf("%d", &a) && a != 0)
    {
        int i=0;
        while (p[i++].id != a);
        scanf("%d", &b);
        sum += b * p[i - 1].price;
        printf("%s * %d = %.1lf\n", p[i - 1].name, b, b * p[i - 1].price);
    }
    printf("Total = %.1lf", sum);
}

总结

谢谢观看

觉得有用的话就点个免费的赞吧

自动售货机内有多种商品(最多不超过50种)供人购买,可以定义如下结构体类型来表示,pta,c语言,算法,c++文章来源地址https://www.toymoban.com/news/detail-761018.html

到了这里,关于PTA 6-2自动售货机,c语言答案,包含解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于FPGA的自动售货机

    目录 一、项目功能 二、设计思路 按键实现: 数码管 蜂鸣器 LED灯 三、流程图 四、代码实现 1、按键消抖  key_debounce.v  2、LED状态选择  led_drive.v 3、蜂鸣器模块   beep_drive.v 4、数码管位选信号选择  sel_drive.v 5、数码管段选信号选择     seg_drive.v 6、售货机按键选择处理

    2024年02月06日
    浏览(38)
  • 如何用Java设计自动售货机?

    如何用Java设计自动售货机?是大多在高级Java开发人员面试中经常被问到的好问题之一。在典型的编码面试中,你会得到一个问题描述来开发一个售货机,在有限的时间内,通常2到3小时内,你需要在Java中编写设计文档、工作代码和单元测试。这种Java面试的一个关键优势是可以一次

    2024年02月05日
    浏览(97)
  • 自动售货机销售数据分析与应用

    本书不仅适用于零基础的读者自学,还适用于教师教学,为了帮助读者更加高效地掌握本书的内容,本书提供了以下10项附加价值: (1)建模平台:提供一站式大数据挖掘建模平台,免配置,包含大量案例工程,边练边学,告别纸上谈兵 (2)视频讲解:提供不少于600分钟

    2024年02月08日
    浏览(45)
  • FPGA实现简易的自动售货机模型

    环境: 1、Quartus18.1 2、vscode 3、板子型号:EP4CE6F17C8N 要求: 自动售货机功能: 1.两个按键用于投币,1个1元,1个5角 2.一个按键用于商品选择,农夫山泉2块,干脆面1块5 3.找零 设计: 我们选择使用四个按键,分别用于投币一元、五角、商品选择、结算四个功能。用六位数码管

    2024年02月09日
    浏览(40)
  • 【FPGA】基于状态机实现自动售货机模拟

    此自动售货机模拟基于EP4CE6F17C8开发板实现,用按键,led灯,数码管表示各个输入输出 功能: 此自动售货机可以选择A(三元)与B(五元)商品且选择商品数量,一次可以投1块与5块钱。当投币数量满足商品价格时则能出货,且退款额外支付,在任意阶段皆可以取消支付并退

    2024年02月16日
    浏览(42)
  • Verilog设计实例(一):自动售货机设计实例

    本系列为FPGA设计实例,基于Verilog HDL,题目一般是我在网上看到的一些FPGA相关的实验题目,基本会是一个实际场景的系统实现,而不是简单单元的设计,这是为了能更全面的练习,这些实例一般是可以基于FPGA进行实现的,因为正好手里有一块zynq板子,所以想把这个东西用起

    2024年02月05日
    浏览(35)
  • 基于单片机的自动售货机系统设计

    欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式   本文设计基于单片机的自动售货机系统,分为硬件电路设计与软件设计。硬件电路设计,本系统由ST(意法半导体)公司设计和生产的STM32F103C8T6单片

    2024年02月03日
    浏览(54)
  • VIVADO自动售票机售货机verilog代码ego1开发板验证

    名称:VIVADO自动售票机售货机verilog代码ego1开发板验证 软件:VIVADO 语言:Verilog 代码功能: 自动售票机  1、自动售票机只出售1角、2角、5角和1元4种车票 2、只接收1角、5角和1元硬币,每次只能出售1张车  3、自动售票机具有累加销售额的功能 实验要求  出售车票用SW0~3分别

    2024年02月05日
    浏览(44)
  • 【Python】python自动售货机销售数据分析

    👉博__主👈:米码收割机 👉技__能👈:C++/Python语言 👉公众号👈:测试开发自动化【获取源码+商业合作】 👉荣__誉👈:阿里云博客专家博主、51CTO技术博主 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 近年来,随着我国经济技术的不断提升,

    2024年02月06日
    浏览(39)
  • 自动售货机控制系统的FPGA设计与实现

            采用VHDL语言设计一个自动售货机控制系统,要求能在MaxPlus Ⅱ软件平台进行仿真模拟,技术指标如下: 1)有2元、3元、8元商品;有1元、5元、10元钱币; 2)当投入的总币值大于顾客购买的商品单价时,机器提供商品并将余币退出,回到初始状态;若投入的总币值小

    2024年02月06日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包