开五谷杂粮店利润分析:c哪里错了

来源:百度文库 编辑:高校问答 时间:2024/04/29 00:54:09
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
读入1 个正整数 n(n<=100),计算并输出1+1/2+1/3+……+1/n (保留3位小数)。
#include <stdio.h>
int main( )
{
int ri, repeat;
int i, n;
float sum;

scanf("%d", &repeat);
for(ri=1; ri<=repeat; ri++){
scanf("%d", &n);
/*---------*/
sum=0;
for(i=1;i<=n;i++)
sum=sum+1/i;
printf("%.3f\n", sum);
}
}

同意1楼的意见,i应该是float类型的
如果i是整型,1/i也是整型,也就是说当i=1时结果是1,i>=2时都是0,所以最后sum的结果也都是1。

float i;

我重新写一下:

#include <stdio.h>

int main(){
int repeat,a,b,n;
float sum=0;
scanf("%i", &repeat);
for(a=0; a<repeat; a++){
if(repeat>=10 || repeat <=0) return 0;//错误
printf("请输入一个数字:");
scanf("%i", &n);
if(n<1 || n>100) return 0;//错误
for(b=1; b<=n; b++){
sum+=1/(float)b;
}
}
}

补充一下,如果i为float型的那么 for 循环不成立(会出错)