C语言数据类型与类型转换实战:用商品评分系统理解 int 与 double 运算规则
摘要在 C 语言中不同的数据类型在参与运算时会产生不同的结果。例如int类型在进行除法运算时只会保留整数部分而double类型则可以保存小数部分。如果不了解这一点在编写程序时就可能得到错误的结果。本文通过一个实际场景——计算商品评分平均值结合 C 语言中的int与double类型运算规则详细讲解数据类型赋值、类型转换以及整数与浮点数混合运算的特点并通过代码实例说明如何正确得到带小数的平均值。描述在很多真实的软件系统中都需要计算平均值。例如电商平台计算商品评分平均值学生成绩系统计算平均成绩传感器系统计算温度平均值数据统计系统计算平均数据假设现在有一个简单的电商评分系统。一个商品目前有两个用户评分用户A评分41用户B评分44系统需要计算两个评分的平均值。如果程序员直接用整数计算(41 44) / 2在数学上答案是42.5但在 C 语言中如果参与计算的变量都是int类型那么最终结果只会保留整数部分42小数部分.5会被丢弃。这在很多真实系统中都会造成错误。例如商品评分变低数据统计不准确财务计算出现误差因此我们必须使用浮点数类型double或者类型转换来得到正确的结果。题解答案我们设计一个简单程序功能输入两个整数评分计算它们的平均值使用浮点数显示平均结果让用户看到正确的小数结果核心思路使用int保存评分计算(a b) / 2.0或者(double)(a b) / 2使用%f输出浮点数题解代码分析完整代码如下#includestdio.hintmain(void){inta,b;puts(请输入两个整数评分。);printf(评分a: );scanf(%d,a);printf(评分b: );scanf(%d,b);doubleavg(ab)/2.0;printf(两个评分的平均值是%f\n,avg);return0;}下面我们一步一步分析代码。引入标准输入输出库#include stdio.h这是 C 语言最常用的库。里面包含printf()输出函数scanf()输入函数puts()字符串输出函数如果没有这个头文件程序将无法进行输入输出操作。定义整数变量int a, b;这里定义了两个int类型变量a用来保存第一个评分b用来保存第二个评分int是整数类型特点是不能保存小数运算结果如果是小数会被截断例如5 / 2 2而不是2.5提示用户输入数据puts(请输入两个整数评分。);puts用于输出一行文字。运行效果请输入两个整数评分。然后程序会继续执行后面的输入语句。读取第一个评分printf(评分a: ); scanf(%d, a);解释printf用于输出提示信息。评分a:scanf用于读取输入。%d表示读取整数。a表示把输入的数据存入变量a的地址。例如输入41变量a的值就变成a 41读取第二个评分printf(评分b: ); scanf(%d, b);同样的逻辑输入44变量值变成b 44计算平均值double avg (a b) / 2.0;这里是整个程序最关键的一步。首先计算a b如果a 41 b 44那么a b 85接下来85 / 2.0注意2.0是浮点数所以运算会自动转换成double / double计算结果42.5最终avg 42.5输出平均值printf(两个评分的平均值是%f\n, avg);%f是浮点数输出格式。输出结果两个评分的平均值是42.500000默认会显示 6 位小数。如果想更好看可以写成%.2f只显示两位小数。示例测试及结果程序运行请输入两个整数评分。 评分a: 41 评分b: 44 两个评分的平均值是42.500000如果使用%.2fprintf(平均值是%.2f\n, avg);结果平均值是42.50更符合现实场景。错误示例常见错误很多初学者会写成double avg (a b) / 2;这里2是整数。运算顺序85 / 2结果42然后再转换成double42.0最终输出42.000000小数部分已经丢失。时间复杂度该程序只进行了常数次输入常数次运算常数次输出没有循环或递归。因此时间复杂度为O(1)无论输入什么数据程序执行时间都基本相同。空间复杂度程序只使用了几个变量a b avg变量数量固定。因此空间复杂度为O(1)属于常量级空间。总结通过这个案例我们可以总结出几个非常重要的 C 语言知识点。第一int类型只能保存整数小数部分会被舍弃。第二当两个int类型进行除法运算时结果仍然是int类型。例如5 / 2 2而不是2.5。第三如果希望得到带小数的结果就必须使用浮点数运算。常见方法有两种方法一(a b) / 2.0方法二(double)(a b) / 2第四在真实的软件开发中很多数据计算都需要使用浮点数例如商品评分系统学生成绩系统温度统计系统财务数据计算如果忽略数据类型的影响就会得到错误的计算结果。因此理解数据类型与类型转换是学习 C 语言非常重要的一步也是写出正确程序的基础。

相关新闻

AI和大模型——Transformer

AI和大模型——Transformer

一、Transformer介绍 人类在理论语言时,并不会单纯的使用一个字或一个词去探究这段语言说了什么。而是需要把这个字或词放到一整个的上下文环境中进行理解。比如网上常见的“汉语等级”考试中的语句,往往都需要在语境内分析,同样的话&#xf…

2026/5/17 9:15:54 阅读更多 →
打开软件就弹出mfc110.dll如何修复? 附免费下载方法分享

打开软件就弹出mfc110.dll如何修复? 附免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

2026/5/17 9:15:54 阅读更多 →
【Day18】LeetCode:669. 修剪二叉搜索树,108. 将有序数组转换为二叉搜索树,538. 把二叉搜索树转换为累加树

【Day18】LeetCode:669. 修剪二叉搜索树,108. 将有序数组转换为二叉搜索树,538. 把二叉搜索树转换为累加树

文章目录LeetCode:669. 修剪二叉搜索树思路解答LeetCode:108. 将有序数组转换为二叉搜索树思路解答LeetCode:538. 把二叉搜索树转换为累加树思路解答LeetCode:669. 修剪二叉搜索树 https://leetcode.cn/problems/trim-a-binary-s…

2026/7/3 7:03:22 阅读更多 →

最新新闻

Kiran-Screensaver源代码架构分析:理解Qt屏保实现原理

Kiran-Screensaver源代码架构分析:理解Qt屏保实现原理

Kiran-Screensaver源代码架构分析:理解Qt屏保实现原理 【免费下载链接】kiran-screensaver This program provides screensaver backend. 项目地址: https://gitcode.com/openeuler/kiran-screensaver 前往项目官网免费下载:https://ar.openeuler…

2026/7/3 14:41:08 阅读更多 →
lboot单元测试实践:使用lboot-test-runner验证功能正确性

lboot单元测试实践:使用lboot-test-runner验证功能正确性

lboot单元测试实践:使用lboot-test-runner验证功能正确性 【免费下载链接】lboot a lightweight bootloader implemented by the Rust language 项目地址: https://gitcode.com/openeuler/lboot 前往项目官网免费下载:https://ar.openeuler.org/a…

2026/7/3 14:41:08 阅读更多 →
嵌入式开发笔记:CANopen相关移位运算与通信协议术语详解

嵌入式开发笔记:CANopen相关移位运算与通信协议术语详解

目录一、移位相关问题1.1 类型提升规则1.2 移位运算注意事项1.3 N位编码满量程值二、简称和符号含义2.1 通信协议相关**FDCAN****HSE****PLL****PCLK**2.2 CANopen 相关术语**PDO****SDO****PDO vs SDO 对比表****cob_id****CoE****BRS**2.3 数学符号三、交流与反馈欢迎大家有问…

2026/7/3 14:39:04 阅读更多 →
13DOF传感器与TM4C1299KCZAD的高精度定位系统设计

13DOF传感器与TM4C1299KCZAD的高精度定位系统设计

1. 项目背景与核心需求 在工业自动化、机器人导航和智能穿戴设备领域,精确的定位与运动追踪一直是技术难点。传统方案往往采用独立的惯性测量单元(IMU)与主控芯片分离的设计,导致系统延迟高、数据同步困难。这个项目创新性地将13自由度(13DOF)传感器与TM…

2026/7/3 14:39:04 阅读更多 →
openeuler/k8s-install安全加固指南:TLS加密配置与节点访问控制最佳实践

openeuler/k8s-install安全加固指南:TLS加密配置与节点访问控制最佳实践

openeuler/k8s-install安全加固指南:TLS加密配置与节点访问控制最佳实践 【免费下载链接】k8s-install Cloud native infrastructuer (base on Kubernetes) multiple baseline maintain/installation/configuratgion/security-update, online/offline package publi…

2026/7/3 14:37:03 阅读更多 →
openEuler/docs-website贡献指南:如何参与开源项目并提交优质PR

openEuler/docs-website贡献指南:如何参与开源项目并提交优质PR

openEuler/docs-website贡献指南:如何参与开源项目并提交优质PR 【免费下载链接】docs-website The repository of docs-website 项目地址: https://gitcode.com/openeuler/docs-website 前往项目官网免费下载:https://ar.openeuler.org/ar/ ope…

2026/7/3 14:37:03 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻