为什么一个 for 循环按预期工作而另一个没有迭代?
Why is one for-loop working as wished but the other not iterating?
这里有两个相似的问题(1.-n 之前的奇数之和;2.-1/n 系列的和)使用 for 循环解决。
我选择了显示的策略,而对于第一个问题,我的循环按预期工作,对于第二个问题,它没有迭代。
我看不出有什么不同,无法理解最后一种情况出了什么问题。
----1----- :
int main()
{
// Example: Input=5, Output=1+3+5=9
int i, lastNum ,sumUneven;
printf("Until what n should the uneven numbers be added: ");
scanf("%d", &lastNum);
sumUneven=0;
for (i=1; 2*i-1<=lastNum; i++) {
sumUneven=sumUneven + (2*i-1);
}
printf("Sum of uneven numbers until %d: %d", lastNum, sumUneven);
}
----2------------:
int main()
{
//My goal: Input=n; Output= 1+ 1/2 + 1/3....+1/n.
int i, n, sum;
printf("Until what n should this series be calculated: ");
scanf("%d", &n);
sum=0;
for (i=1; i<=n; i++) {
sum = sum + 1/i;
}
printf("Sum of the series until 1/%d: %d", n, sum);
}
表达式 1/i
执行整数除法(截断任何小数部分),因为两个操作数的类型都是 int
。因此,如果 i
大于 1,则除法结果为 0。变量 sum
也是类型 int
,因此它不能保存小数。
按1.0/i
执行除法,这是浮点除法,因为一个参数的类型为double
,并将sum
的类型更改为double
。还使用 %f
打印 sum
.
int main()
{
//My goal: Input=n; Output= 1+ 1/2 + 1/3....+1/n.
int i, n;
double sum;
printf("Until what n should this series be calculated: ");
scanf("%d", &n);
sum=0;
for (i=1; i<=n; i++)
{
sum = sum + 1.0/i;
}
printf("Sum of the series until 1/%d: %f", n, sum);
}
您正在使用 int 来跟踪浮点数,这将不起作用。
1/n 将是一个浮点数,一个简单的修复是
int main()
{
//My goal: Input=n; Output= 1+ 1/2 + 1/3....+1/n.
int i, n;
float sum;
printf("Until what n should this series be calculated: ");
scanf("%d", &n);
sum=0;
for (i=1; i<=n; i++) {
sum = sum + 1/i;
}
printf("Sum of the series until 1/%d: %f", n, sum);
}
你也可以使用双重声明
希望这对您有所帮助
这里有两个相似的问题(1.-n 之前的奇数之和;2.-1/n 系列的和)使用 for 循环解决。 我选择了显示的策略,而对于第一个问题,我的循环按预期工作,对于第二个问题,它没有迭代。 我看不出有什么不同,无法理解最后一种情况出了什么问题。
----1----- :
int main()
{
// Example: Input=5, Output=1+3+5=9
int i, lastNum ,sumUneven;
printf("Until what n should the uneven numbers be added: ");
scanf("%d", &lastNum);
sumUneven=0;
for (i=1; 2*i-1<=lastNum; i++) {
sumUneven=sumUneven + (2*i-1);
}
printf("Sum of uneven numbers until %d: %d", lastNum, sumUneven);
}
----2------------:
int main()
{
//My goal: Input=n; Output= 1+ 1/2 + 1/3....+1/n.
int i, n, sum;
printf("Until what n should this series be calculated: ");
scanf("%d", &n);
sum=0;
for (i=1; i<=n; i++) {
sum = sum + 1/i;
}
printf("Sum of the series until 1/%d: %d", n, sum);
}
表达式 1/i
执行整数除法(截断任何小数部分),因为两个操作数的类型都是 int
。因此,如果 i
大于 1,则除法结果为 0。变量 sum
也是类型 int
,因此它不能保存小数。
按1.0/i
执行除法,这是浮点除法,因为一个参数的类型为double
,并将sum
的类型更改为double
。还使用 %f
打印 sum
.
int main()
{
//My goal: Input=n; Output= 1+ 1/2 + 1/3....+1/n.
int i, n;
double sum;
printf("Until what n should this series be calculated: ");
scanf("%d", &n);
sum=0;
for (i=1; i<=n; i++)
{
sum = sum + 1.0/i;
}
printf("Sum of the series until 1/%d: %f", n, sum);
}
您正在使用 int 来跟踪浮点数,这将不起作用。
1/n 将是一个浮点数,一个简单的修复是
int main()
{
//My goal: Input=n; Output= 1+ 1/2 + 1/3....+1/n.
int i, n;
float sum;
printf("Until what n should this series be calculated: ");
scanf("%d", &n);
sum=0;
for (i=1; i<=n; i++) {
sum = sum + 1/i;
}
printf("Sum of the series until 1/%d: %f", n, sum);
}
你也可以使用双重声明
希望这对您有所帮助