我在试着做一个计算器,输入一个数字n它能自动输出1/2+2/2 + 1/3 +2/3+3/3 +...+1/n+2/n+...+n/n的和对于每个分母,打印结果一次。计算器会在输出最后结果1/2+2/2 + 1/3 +2/3+3/3 +...+1/n+2/n+...+n/n后重新启动并要求输入。当用户决定停止程序时,输入0。
对于输入=3,输出为sum =1、sum=2,但我期望它为sum=3/2、sum=7/2
这是程序
#include <stdio.h>
int main(){
printf("Please enter the max denominator:\n");
int i,j,n;
int sum=0;
do{
scanf("%d",&n);
for (j=2;j<=n;j++){
for(i=1;i<=j;i++){
sum+= i/j;
if (i==j){
printf("sum=%d\n",sum);
break;
}
}
}
} while (n!=0);
return 0;
}
EDIT:因建议而修订的零件
int i,j,n;
double sum=0.0;
do{
scanf("%d",&n);
sum=0.0;
for (j=2;j<=n;j++){
for(i=1;i<=j;i++)
sum+=(double)i/j;
printf("sum=%lf\n",sum);
}
} while (n!=0);
return 0;
}
1条答案
按热度按时间qxsslcnc1#
您的程序正在使用整数。
i
、j
、n
和sum
都是整数。这意味着它们不能对3/2或7/2之类的数字进行编码。那么,当你把两个整数相除,比如
1/2
,会发生什么呢?答案是结果向下舍入到最接近的整数。因为1/2
是0.5,低于它的最接近的整数是0,所以结果是0。您需要使用
float
,它使用浮点运算,浮点运算有自己的fun rounding issues集合(您可能会惊讶地发现“0.2”不能用浮点数精确表示)。一个更准确的替代方法是编写自己的函数,将有理数作为一对整数--一个分子和一个分母--来处理。这将需要额外的算法(如最大公约数算法),但它可以准确地描述这类问题。