【发布时间】:2019-02-20 05:42:14
【问题描述】:
我自己完成了一本关于 C 的书。这不是要上交的作业。我正在编写一个 C 程序来确定我的机器可以产生的最大斐波那契数。并指示使用非递归方法。
我的代码:
#include<stdio.h>
double fibo(int n);
int main(void)
{
int n = 0; // The number input by the user
double value; // Value of the series for the number input
while (n >= 0)
{
// Call fibo function
value = fibo(n);
// Output the value
printf("For %d the value of the fibonacci series = %.0f\n", n,
value);
n++;
}
return 0;
}
double fibo(int n)
{
int i; // For loop control variable
double one = 0; // First term
double two = 1; // Second term
double sum = 0; // placeholder
if (n == 0)
return 0;
else if (n == 1)
return 1;
else
{
for (i = 2; i <= n; i++)
{
sum = one + two;
one = two;
two = sum;
}
}
return sum;
代码工作正常,但是当输出给我第一个实例时我想中断:
For 17127 the value of the fibonacci series = inf
有没有办法给我们一个 if 语句,例如:
if (value == inf)
break;
【问题讨论】:
-
main函数中的那个循环,它应该什么时候结束?如果要添加break循环的特殊条件,为什么还要有条件循环呢?尤其是可能导致有符号整数算术溢出(这是未定义的行为)。 -
不是。故意将其保留为无限,以查看数字有多大。我希望我能在出现特定值时让它停止
-
理论上只是无限的。实际上,计算机上的所有整数值都是有限的。如前所述,C 中带符号整数的算术溢出(当您越过
int的限制时,n++会发生这种情况)会导致未定义的行为。 -
你可能至少应该检查一下 man(3) isinf() 和 fpclassify(),inf 不打算在你的代码中使用。
-
很容易输入数字并使其停止。会做。谢谢
标签: c floating-point break