PTA练习题6-2 自动售货机 答案参考 武汉理工大学

6-2 自动售货机  分数 10  作者 XXX-LM  单位 武汉理工大学

自动售货机内有多种商品(最多不超过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时表示所选商品结束,最后输出计算的总价格(保留1位小数)。

在主函数中:

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

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

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

裁判测试程序样例:

#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

答案

void menu(struct product p[],int n){  //函数一很简单 
	int i;
	for(i=0;i<n;i++){
		printf("[%d] %s %.1f\n",p[i].id,p[i].name,p[i].price);
	}
}

void order(struct product *p,int n){  
 //定义两个数组 id[]用于存放输入的编号,qua[]存放输入的数量 
	int id[100],qua[100],i,j,count=0;	  
	double sum=0,total=0;
	while(1){
		scanf("%d",&id[count]);
		if(id[count]!=0) {   //判断是否为0,为0结束,非0则继续输入数量 
			scanf("%d",&qua[count]);
			count++;
		}
		else break;
	}

	for(j=0;j<count;j++){    //将id[]数组中的值与结构体数组中的值一一比较 
		for(i=0;i<n;i++){
			if(p[i].id==id[j]){
				sum=p[i].price*(1.0*qua[j]);
				total+=sum;
				printf("%s * %d = %.1f\n",p[i].name,qua[j],sum);
			}
		}
	}
	printf("Total = %.1f",total);
}

 水平有限,代码很浅显,如有不当之处,真心希望大佬们指出错误~ ~谢谢阅读!

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值