C 语言实战:水果总价计算程序(结构体应用 + 细节优化)

C 语言实战:水果总价计算程序(结构体应用 + 细节优化)

这是一个典型的 C 语言结构体入门应用案例,通过定义结构体存储水果单价,接收用户输入的购买斤数,最终计算并输出总价。本文将先解析原代码的核心逻辑与结构体用法,再指出其中的潜在问题,最后提供优化后的可运行版本,让程序更严谨、用户体验更友好。

一、原代码核心逻辑解析

1. 结构体的定义与使用(核心亮点)

原代码通过struct fruit结构体封装了三种水果的单价,体现了模块化数据存储的思想,这是 C 语言中组织关联数据的常用方式。

c

运行

arduino 复制代码
// 定义结构体:封装三种水果的单价
struct fruit{
    int pingguo;   // 苹果单价(5元/斤)
    float putao;   // 葡萄单价(6.8元/斤)
    float xiangjiao;// 香蕉单价(5.2元/斤)
};

// 定义结构体变量并初始化,赋值对应水果单价
struct fruit data={5,6.8,5.2};
  • 核心价值:将三种水果的单价作为一个整体存储,相比单独定义三个变量(int apple=5; float grape=6.8;),结构体更便于数据的管理和扩展(后续新增水果只需在结构体中添加字段);
  • 初始化规则:结构体变量初始化时,值的顺序需与结构体字段定义顺序一致,一一对应赋值。

2. 输入与计算逻辑

c

运行

perl 复制代码
// 定义变量存储购买斤数
int a,b,c;
// 接收用户输入的三种水果购买斤数
scanf("%d%d%d",&a,&b,&c);
// 输出购买信息与总价(%.2f保证保留两位小数,符合金额格式)
printf("苹果%d斤,葡萄%d斤,香蕉%d斤",a,b,c);
printf("总价格为:%.2f",a*data.pingguo+b*data.putao+c*data.xiangjiao);
  • 输入方式:scanf("%d%d%d", &a, &b, &c)一次性接收三个整数,对应苹果、葡萄、香蕉的购买斤数;
  • 总价计算:通过 "斤数 × 对应单价" 累加得到总价,使用%.2f格式化输出,保证金额显示的规范性(保留角、分);
  • 核心逻辑:数据存储→用户输入→算术计算→结果输出,流程清晰,符合简单业务程序的开发思路。

二、原代码潜在问题与优化点

  1. 变量类型设计不合理 :葡萄、香蕉的购买斤数定义为int(整数),无法支持小数斤数(如 2.5 斤、3.8 斤),实际场景中消费者可能购买非整数斤数,限制了程序的实用性;
  2. 输入提示不清晰printf("请输入消费者买的对应水果的数量:\n")未明确告知用户输入顺序(哪个数字对应哪种水果),用户容易输入错误;
  3. 输出格式不美观 :两个printf连续输出,无换行、无分隔符,结果显示拥挤,可读性差;
  4. 缺少业务提示信息:程序运行前后无明确的功能提示,用户不清楚程序用途,交互体验不佳;
  5. 结构体字段命名可优化 :使用拼音命名(pingguoputao),可改为英文(applegrape),更符合编程的通用命名规范,提升代码可读性。

三、优化后的完整可运行代码

c

运行

arduino 复制代码
/******************************
*文件名称:1.Fruits_Buy.c
*作者:czy
*邮箱:caozhiyang_0613@163.com
*创建日期:2026/1/4
*修改日期:2026/01/11
*文件功能:水果营销商总价计算,支持小数斤数,优化交互体验
*优化点:1. 支持小数斤数;2. 清晰输入输出提示;3. 优化命名与格式;4. 提升交互体验
*****************************/
#include<stdio.h>

int main()
{
    // 定义结构体:封装三种水果的单价(优化命名为英文,更通用)
    struct fruit{
        float apple;    // 苹果单价:5.0元/斤
        float grape;    // 葡萄单价:6.8元/斤
        float banana;   // 香蕉单价:5.2元/斤
    };
    
    // 定义结构体变量并初始化(所有单价统一为float类型,保持一致性)
    struct fruit price = {5.0, 6.8, 5.2};
    
    // 定义变量存储购买斤数(改为float类型,支持小数斤数,符合实际场景)
    float apple_weight, grape_weight, banana_weight;
    float total_price; // 存储总价(float类型,保证精度)
    
    // 友好的程序功能提示
    printf("===== 水果总价计算系统 =====\n");
    printf("水果单价:苹果5.0元/斤 | 葡萄6.8元/斤 | 香蕉5.2元/斤\n");
    printf("============================\n");
    
    // 清晰的输入提示,明确输入顺序与格式
    printf("请输入购买的水果斤数(用空格分隔,支持小数,格式:苹果 葡萄 香蕉):\n");
    scanf("%f%f%f", &apple_weight, &grape_weight, &banana_weight);
    
    // 计算总价
    total_price = apple_weight * price.apple + 
                  grape_weight * price.grape + 
                  banana_weight * price.banana;
    
    // 优化输出格式,换行分隔,信息清晰,保留两位小数
    printf("\n===== 购买清单与总价 =====\n");
    printf("苹果:%.2f 斤\n", apple_weight);
    printf("葡萄:%.2f 斤\n", grape_weight);
    printf("香蕉:%.2f 斤\n", banana_weight);
    printf("============================\n");
    printf("本次购买总价格为:¥%.2f\n", total_price);
    
    return 0;
}

四、优化点详细说明

  1. 变量类型优化(核心实用化改进)
  • 将购买斤数从int改为float类型,支持小数输入(如 2.5 斤、3.8 斤),符合水果购买的实际场景;
  • 结构体中的苹果单价从int改为float(5→5.0),保持所有单价类型一致,避免算术计算中的隐式类型转换,提升计算精度。
  1. 输入输出体验优化
  • 增加程序功能提示、水果单价提示,让用户清楚了解程序用途和输入规范;
  • 输入提示明确告知输入顺序(苹果 葡萄 香蕉)和格式(支持小数),减少用户输入错误;
  • 输出结果添加换行、分隔符、人民币符号¥,格式整齐,可读性大幅提升,符合金额展示的常规习惯。
  1. 代码可读性优化
  • 结构体字段从拼音改为英文命名(pingguoapple),更符合编程通用规范,便于其他开发者理解;
  • 总价计算语句分行书写,逻辑清晰,便于后续调试和修改;
  • 增加详细注释,标注优化点和核心逻辑,提升代码的可维护性。
  1. 计算精度优化
  • 所有参与计算的变量均为float类型,避免隐式类型转换带来的精度损失;
  • 总价输出仍使用%.2f格式化,保证金额保留两位小数,符合货币展示的标准要求。

五、运行结果示例

示例 1:整数斤数输入

plaintext

markdown 复制代码
===== 水果总价计算系统 =====
水果单价:苹果5.0元/斤 | 葡萄6.8元/斤 | 香蕉5.2元/斤
============================
请输入购买的水果斤数(用空格分隔,支持小数,格式:苹果 葡萄 香蕉):
2 3 4

===== 购买清单与总价 =====
苹果:2.00 斤
葡萄:3.00 斤
香蕉:4.00 斤
============================
本次购买总价格为:¥51.20

示例 2:小数斤数输入(实际场景更常用)

plaintext

markdown 复制代码
===== 水果总价计算系统 =====
水果单价:苹果5.0元/斤 | 葡萄6.8元/斤 | 香蕉5.2元/斤
============================
请输入购买的水果斤数(用空格分隔,支持小数,格式:苹果 葡萄 香蕉):
1.5 2.8 3.2

===== 购买清单与总价 =====
苹果:1.50 斤
葡萄:2.80 斤
香蕉:3.20 斤
============================
本次购买总价格为:¥42.04

六、核心知识点总结

  1. 结构体的核心用法:结构体用于封装关联数据,将分散的变量组织为一个整体,便于数据管理和扩展,是 C 语言模块化编程的基础;
  2. 数据类型选择 :根据实际业务场景选择合适的变量类型(如金额、重量优先选择float/double,整数计数选择int);
  3. 输入输出格式化%f用于float类型的输入输出,%.2f可格式化保留两位小数,是金额展示的常用技巧;
  4. 程序交互优化:清晰的提示信息、整齐的输出格式,是提升程序实用性和用户体验的关键,也是工业级程序开发的基本要求。

七、功能扩展建议

  1. 支持更多水果:在结构体中添加更多水果字段(如橙子、西瓜),修改输入输出逻辑,扩展程序的适用范围;
  2. 单价可修改:增加用户输入水果单价的功能,不再固定单价,让程序更灵活;
  3. 优惠活动计算:添加满减、打折等优惠逻辑(如满 100 减 20),提升程序的业务复杂度和实用性;
  4. 输入合法性校验:添加对输入数据的合法性判断(如禁止输入负数斤数),避免非法数据导致的计算错误,提升程序的健壮性。

这份程序虽然简单,但涵盖了 C 语言结构体、基本输入输出、算术计算等核心知识点,优化后的版本更贴近实际开发场景。掌握这些基础知识点和优化思路,是后续开发复杂业务程序的坚实基础。

相关推荐
CoovallyAIHub2 小时前
2026 CES 如何用“视觉”改变生活?机器的“视觉大脑”被点亮
深度学习·算法·计算机视觉
用户948357016512 小时前
《自动化埋点:利用 AOP 统一记录接口入参、出参及执行耗时》
后端
undsky2 小时前
【RuoYi-SpringBoot3-Pro】:多租户功能上手指南
spring boot·后端·mybatis
明天有专业课2 小时前
松耦合的设计模式-观察者
后端
鱼跃鹰飞2 小时前
怎么排查线上CPU100%的问题
java·jvm·后端
2301_800256112 小时前
【人工智能引论期末复习】第4章 机器学习1-基础知识
人工智能·算法·机器学习
哈库纳2 小时前
dbVisitor 的双层适配架构
后端
seeksky2 小时前
分词与 BPE 实现(tiktoken)
算法
super杨某人2 小时前
算法十日谈:双指针
数据结构·算法