2012-01-10 194 views
-4

我正在使用Dev-C++。它不顯示任何代碼錯誤,但無法工作。簡單的程序不能編譯

它的工作原理,當我試圖像10或20

小的數字,我的工作對這個問題:

在Fibonacci序列中的每個新名詞是通過添加 前兩個方面產生。通過用1和2開始,第一10個術語將 是:

1,2,3,5,8,13,21,34,55,89,...

通過考慮術語在斐波納契數列中值不爲 超過400萬的情況下,找到偶數項的和。

#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("%d\n",S); 
system("pause"); 
} 
+5

請幫自己一個忙,提高變量的壓痕和使用空白和命名。你也不要使用''中聲明的任何東西,所以#include只是垃圾郵件。 – pmg 2012-01-10 13:25:08

+0

輸出是什麼?你在期待什麼? – eduffy 2012-01-10 13:25:51

+4

請勿使用Dev-C++!這是一個很長時間以來死去的項目,並附帶一個古老的編譯器。 – ThiefMaster 2012-01-10 13:26:39

回答

1

您不需要一個數組來存儲所有這些數字,您可以避開將最後兩個詞存儲在序列中,因爲這就是計算下一個詞所需要的全部內容。

嘗試在堆棧上分配太多空間是因爲堆棧是相對有限的資源而要求麻煩。

實際上,在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 %s\n", 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 ("%d\n", 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行的末尾加上所有偶數,你確實得到了給定的價值。

0

兩件事情,我注意到是main沒有返回類型(嘗試int main())和N作爲數組的大小,但不是恆定的。

2

您無法定義可變大小數組(T [N])。如果你使N爲const,那麼問題應該解決。

const int N = 3999998; 
int T(N); 

此外,主要應該有一個返回類型。更改爲「int main()」?

+0

不在C中,但顯然OP正在嘗試寫一個多-language源文件:) – pmg 2012-01-10 13:32:31

+0

錯誤,c99允許沒有const表達式的VLA。 – paxdiablo 2012-01-10 13:59:25

+0

@paxdiablo:是的,你是對的!我認爲Lindydancer是對的。 – nijoakim 2015-01-19 13:25:37

0

這是一個非常常見的編程錯誤,稱爲「堆棧溢出」。事實上,它很常見,它已經命名了一個非常受歡迎的問答網站「堆棧溢出」,也許你聽說過它?

(我一直在等待能夠給這個答案,自從我加入了「堆棧溢出」!)

+0

注意:此答案是作爲對問題早期版本的迴應給出的,其中提供的代碼分配了一個3999998'int':的數組。 – Lindydancer 2012-01-11 09:38:51