这是一个C程序,迭代Fibonacci使用clock()来计算获得第n个Fibonacci数所需的时间。程序循环不停。我知道方程是正确的,因为我能够在没有时钟功能的情况下正确运行程序。任何帮助表示赞赏!
#include<time.h>
#include<sys/file.h>
#include<stdio.h>
int main ( )
{
int j=1, fib, n, i=1, k=0;
int choice;
float x,y,z;
x = clock(); //start clock
printf("input the fib number you want: ");
scanf("$d", &n);
while (k <=n)
{
fib = i + j;
i = j;
j = fib;
++k;
printf( "The fib number is %d\n ", fib);
}
y =clock(); // end clock
z = (y - x) / CLOCKS_PER_SEC;
printf("\n\nThe execution time was: %.15f", z);
return 0;
}
答案 0 :(得分:5)
scanf("$d", &n);
需要scanf("%d", &n);
。很可能,当你的程序启动时,n
获得的任何随机值都会使你的循环条件失败。
正如@dasblinkenlight在评论中所提到的,如果你想要一个有用的测量,你应该在>>用户输入后启动时钟。
此外,虽然大多数书籍似乎都没有涵盖它,但检查scanf()
的返回值是一个好主意,因为它可以像上面那样捕获错别字(感谢@WilliamPursell)。以下内容可行:
if( scanf( "whatever random and incorrect format string", &n ) != 1 ) {
/* exit with error message */
}
成功时,该函数返回参数的项数 列表已成功填写。此计数可以匹配预期的数量 由于匹配失败,读数,项目或更少(甚至为零) 错误,或文件结尾的范围。
如果发生读取错误或达到文件结尾 阅读时,设置了正确的指标( feof 或 ferror )。而且,如果有的话 在成功读取任何数据之前发生,返回
EOF
。如果解释宽字符时发生编码错误,则 函数将错误设置为
EILSEQ
。