C语言中printf输出folgenglied函数结果始终为0的问题排查
问题原因及解决办法
你的问题出在整数除法上:
- 在C语言中,两个整数做除法时,结果会自动舍弃小数部分取整。你的
folgenglied函数里,1和n+2都是整数类型,只要n+2 > 1,1/(n+2)的结果就会被截断为0,比如1/3得0、1/2也得0。
解决步骤
要得到正确的浮点计算结果,需要做以下修改:
- 调整函数返回值与变量类型
把folgenglied的返回类型从int改为double(或float),同时将函数内的变量x也改为浮点类型。 - 触发浮点除法运算
把常量1改成1.0,让编译器识别为浮点常量,这样除法会按浮点规则计算,保留小数部分。 - 匹配主函数的变量与输出格式
主函数里的m要对应改为double类型,printf的格式符从%d(整数格式)换成%lf(对应double类型)。
修改后的完整代码
#include <stdio.h> double folgenglied(int); int main(){ int n; double m; printf("Type a number in\n"); scanf("%d", &n); m = folgenglied(n); printf("%lf ist the Folgenglied", m); } double folgenglied(int n) { double x; x = 1.0 / (n + 2); return x; }
注:原代码中printf("Type a number in\n");的换行符位置错误,已在修改后的代码中修正。
内容的提问来源于stack exchange,提问作者kilston
相关产品推荐
相关产品推荐

