简单程序不会编译
Simple program does not compile
我正在使用Dev-C++。它没有显示任何代码错误,但无法工作。
当我尝试10或20 这样的小数字时,它会起作用
我正在处理这个问题:
Fibonacci序列中的每个新项都是通过将前两届。从1和2开始,前10项将be:
1、2、3、5、8、13、21、34、55、89。。。
通过考虑Fibonacci序列中值不超过四百万,求出偶数项的总和。
#include<stdio.h>
#include<stdlib.h>
int main()
{
const int N=100;
int a=1,b=2,i,t[N],S=0,c,j;
t[0]=1;
t[1]=2;
for(i=2;i<N;i++){
t[i]=t[i-2]+t[i-1];
if(t[i]>4000000)
{
for(j=1;j<=i-1;j++){
c=t[j]%2;
if(c==0){
S=S+t[j];
}
else {
continue;
}}
break;
}
}
printf("%dn",S);
system("pause");
}
不能定义可变大小的数组(T[N])。若你们把N设为常量,那个么问题就应该得到解决。
const int N = 3999998;
int T(N);
此外,main应该有一个返回类型。是否更改为"int main()"?
您不需要一个数组来存储所有这些数字,您可以存储序列中的最后两项,因为这就是计算下一项所需的全部内容。
由于堆栈是一个相对有限的资源,因此试图在堆栈上分配这么多空间会带来麻烦。
事实上,当我试图运行它时,在Linux盒子上输入gcc
的确切代码会导致分段冲突,正是因为这个原因。
最重要的是,你的代码是而不是获得偶数项,它是获得每个项的,你得到的是前400万个值,而不是指定的低于400万的值。
你想要的代码类型如下:
#include <stdio.h>
int main (void) {
// Accumulator and terms (acc is zero because first two terms are odd).
int acc = 0, t1 = 1, t2 = 1, t3;
// Continue until next term is 4mil or more.
while ((t3 = t1 + t2) < 4000000) {
// printf ("DEBUG: %d %d %d %sn", t1, t2, t3,
// ((t3 % 2) == 0) ? "<<" : "");
// Accumulate only even terms.
if ((t3 % 2) == 0) acc += t3;
// Cycle through terms.
t1 = t2; t2 = t3;
}
// Print the accumulated value.
printf ("%dn", acc);
return 0;
}
输出:
4613732
如果你通过取消对调试语句的注释来测试该程序,你会看到:
DEBUG: 1 1 2 <<
DEBUG: 1 2 3
DEBUG: 2 3 5
DEBUG: 3 5 8 <<
DEBUG: 5 8 13
DEBUG: 8 13 21
DEBUG: 13 21 34 <<
DEBUG: 21 34 55
DEBUG: 34 55 89
DEBUG: 55 89 144 <<
DEBUG: 89 144 233
DEBUG: 144 233 377
DEBUG: 233 377 610 <<
DEBUG: 377 610 987
DEBUG: 610 987 1597
DEBUG: 987 1597 2584 <<
DEBUG: 1597 2584 4181
DEBUG: 2584 4181 6765
DEBUG: 4181 6765 10946 <<
DEBUG: 6765 10946 17711
DEBUG: 10946 17711 28657
DEBUG: 17711 28657 46368 <<
DEBUG: 28657 46368 75025
DEBUG: 46368 75025 121393
DEBUG: 75025 121393 196418 <<
DEBUG: 121393 196418 317811
DEBUG: 196418 317811 514229
DEBUG: 317811 514229 832040 <<
DEBUG: 514229 832040 1346269
DEBUG: 832040 1346269 2178309
DEBUG: 1346269 2178309 3524578 <<
4613732
如果你把DEBUG
行末尾的所有偶数加起来,你确实得到了给定的值。
我注意到的两件事是main
没有返回类型(请尝试int main()
),N
用作数组大小,但不是常量。
这是一个非常常见的编程错误,称为"堆栈溢出"。事实上,它是如此普遍,以至于它命名了一个非常受欢迎的问答网站,"堆栈溢出",也许你听说过它?
(自从我加入"堆栈溢出"以来,我一直在等待能够给出这个答案!!)
相关文章:
- 如何从测试脚本中运行WAF编译C++程序?
- 如何使用命令提示符、记事本和 MinGW 使用主文件、头文件和实现文件编译C++程序?
- 在Yocto上本地构建和编译C / C++程序
- 我无法在代码块中编译c ++程序。它给了我错误
- 在 turbo c++ 中使用 TCC 从 cmd 编译C++程序
- 如何在Linux中编译C 程序以生成Windows可执行文件
- 在Python中编译C 程序时,请尝试捕获OS错误
- 在Windows命令提示符中使用G 编译C 程序
- 如何使用HDF5源代码编译c程序
- 如何在Mac终端中编译C ++程序
- 设置 VS 代码以编译C++程序
- 无法在 Ubuntu 上编译 c++ 程序
- 无法使用 libcurl 库编译 c++ 程序
- 编译C 程序,该程序将SFML与MINGW一起到端口,从Linux到Windows
- 编译C 程序时具有逻辑错误,该程序应将任意大的数字表示为字符串
- 如何在 Windows 命令提示符下使用 Dev C++ 编译器编译 c++ 程序
- 在cygwin中使用mingw编译器编译c ++程序时缺少dll。
- 无法在Windows上编写的Linux上编译C程序
- 架构的未定义符号x86_64惠姆使用G 编译C 程序
- 指定netbeans用来编译C++程序的完整编译命令