C 如何将浮点变量中整数除法的分数相加?

C 如何将浮点变量中整数除法的分数相加?,c,C,我正在编写一个简单的C程序,它打印谐波级数的和,如: 1 + 1/2 + 1/3 + ...... + 1/n 我的计划是: #include<stdio.h> void main(){ int n,i; float num=0, tmp=0; scanf("%d", &n); for(i=1;i<=n;i++){ tmp = 1/i; num = num + tmp; } p

我正在编写一个简单的C程序,它打印谐波级数的和,如:

1 + 1/2 + 1/3 + ...... + 1/n
我的计划是:

#include<stdio.h>
void main(){
     int n,i;
     float num=0, tmp=0;
     scanf("%d", &n);
     for(i=1;i<=n;i++){
        tmp = 1/i;
        num = num + tmp;
     }
     printf("%f", num);
}
根据我的理解,如果n=4,则输出必须为:2.03333 但是输出为1.00000,因为整数除法规则,1/i不是浮点值,而是值为0或1的整数。 1/1的值为1,否则为0。将所有这些加起来,结果为1

这是一个浮点值:

1.0/i
把它们加起来应该会得到想要的结果

准确地说,我应该说1.0是双精度的。
为了实际使用与浮点变量匹配的浮点值,请使用1.0f。与整数值相比,两者都是浮点值。

因为1和i是整数,所以将这两个值除以将是整数,在这种情况下,i>1将得到0。您可以使用floati强制转换i,您将获得1/floati。

要挑剔,输出必须为2.083333;另外,它应该是int mainvoid{…}。我想诚恳地请投票人解释一下。我保证不会报复你的投票。事实上,我的回答有一个缺点,我甚至答应说谢谢;这通常不值得花那么多精力。一个猜测这只是一个猜测,有人觉得这个问题太老了,太频繁了,你根本不应该回答这个问题来奖励提问者。我不是这么说的;我有时也喜欢回答经常出现的问题。谢谢你的意见。如果有人发现这是重复的,请标记或结束投票。如果链接的Q/A让我信服,我甚至会添加我的。@Eric好吧,这是一个有效的观点。为了简化,我使用了浮点而不是浮点。但我会补充一些细节。谢谢你的意见。