C语言入门:编译学习进度程序并理解整数除法
从源码编译出可执行文件,用完成数量计算百分比,掌握 main、printf、格式说明符和显式类型转换的使用方法。
本节目标
从源码编译出可执行文件,用完成数量计算百分比,掌握 main、printf、格式说明符和显式类型转换的使用方法。
环境与运行方法
准备支持 C17 的 Clang 或 GCC。保存为 lesson.c,执行 cc -std=c17 -Wall -Wextra -Werror lesson.c -o lesson,编译后执行 ./lesson。命令适用于 macOS/Linux;Windows 需要相应的 C 工具链。
核心思路
完成量和总计划是整数,比例却需要保留小数。计算前验证分母大于零,再将一个操作数转换为 double。这样除法从一开始就是浮点运算,而不是先截断再尝试恢复精度。
完整示例
#include <stdio.h>
int main(void) {
int completed = 3, total = 8;
if (total <= 0) {
fputs("invalid total\n", stderr);
return 1;
}
double percent = (double)completed / total * 100.0;
printf("progress=%.1f%%\n", percent);
return 0;
}预期输出
progress=37.5%逐步理解
stdio.h 提供输出函数声明,main 返回零表示正常结束。%.1f 只控制显示一位小数,%% 输出百分号。重新保存代码后必须重新编译,旧可执行文件不会自动更新。
本例用小整数说明类型问题。真实输入还需判断完成量是否非负、是否允许超额,并根据业务规模选择合适类型。编译时开启警告可以发现部分格式错误,但不等于程序没有逻辑问题。
常见问题与边界
- 转换写在整个整数除法外面会太晚。
- printf 格式必须匹配参数类型。
- 浮点格式化不等于精确金额计算。
动手练习
把完成量改成 5,再把总量改成 0,观察结果与退出状态。
参考答案
5/8 显示 progress=62.5%。总量为零时错误写到标准错误流,退出状态为 1,除法不会执行。只看标准输出为空不能判断程序是否成功。
文章回复
0 条公开回复