C语言循环计算:为什么输入5结果是1?详解整数除法陷阱
C语言循环计算:为什么输入5结果是1?详解整数除法陷阱
你是否遇到过这段C语言代码,当输入为5时,结果却是1的情况?
#include <stdio.h>
int main()
{
int n, i;
float num;
num = 0;
scanf_s('%d', &n);
for (i = 1; i <= n; i++)
{
num = num + 1 / i;
}
printf('%f', num);
}
问题根源:整数除法
出现这种情况的原因在于代码中的 num = num + 1 / i 使用了整数除法。在C语言中,当两个整数进行除法运算时,结果会被截断为整数,只保留整数部分,舍弃小数部分。
在本例中,循环变量 i 是整数,1 也是整数,所以 1 / i 会进行整数除法运算。当 i 从1递增到5时,1/i 的结果始终为整数:
- 1 / 1 = 1
- 1 / 2 = 0
- 1 / 3 = 0
- 1 / 4 = 0
- 1 / 5 = 0
因此,循环累加的结果最终为1。
解决方案:使用浮点数除法
要解决这个问题,我们需要使用浮点数除法。只需将表达式中的 1 改为 1.0,即可强制进行浮点数除法:
num = num + 1.0 / i;
这样,1.0 / i 的结果将会保留小数部分,循环累加的结果也会是预期的浮点数。
修改后的代码:
#include <stdio.h>
int main()
{
int n, i;
float num;
num = 0;
scanf_s('%d', &n);
for (i = 1; i <= n; i++)
{
num = num + 1.0 / i;
}
printf('%f', num);
}
现在,当输入为5时,输出结果将会是 1.717857,符合预期。
总结
在C语言中进行除法运算时,务必注意操作数的类型,区分整数除法和浮点数除法。如果需要保留小数部分,请确保使用浮点数进行运算。 希望这篇文章能够帮助你理解并避免C语言中常见的整数除法陷阱!
原文地址: https://www.cveoy.top/t/topic/N2S 著作权归作者所有。请勿转载和采集!