2016-08-01 20 views
-1

這兩個代碼都可以編譯,但只有第二個代碼能完成我想要的功能。 第一個代碼:這兩個計算三角形數字的程序有什麼區別?

#include <stdio.h> 
#include <cs50.h> 
#include <math.h> 

int main() 

    { 
    int TriNumber = 0; 
    int n; 

     for(n = 5; n <= 50; n += 5) 
     TriNumber = ((n + 1) * n)/2; 

     printf("The trianglular number of %d is %d\n", n, TriNumber); 

    } 

,輸出:

55 trianglular數量爲1275

下面的程序做什麼,我希望它:它打印的三角形數量爲每第五個整數在5和50之間。

#include <stdio.h> 
#include <cs50.h> 
#include <math.h> 

int main() 

{ 
    int TriNumber = 0; 
    int n; 

    for(n = 5; n <= 50; n += 5) 

     printf("The trianglular number of %d is %d\n", n, TriNumber = (((n + 1) * n)/2)); 

} 

W HICH給我的期望的輸出:

5的trianglular數爲15
要求10所述的trianglular數爲55
要求15所述的trianglular數目是120
20的trianglular數目是210
的trianglular的25號是325
30的trianglular數目是465
35 trianglular數目是630
40的trianglular數目是820
的trianglular NU 45 MBER是1035
的50 trianglular數量爲1275

我不明白爲什麼把TriNumber = ((n + 1) * n)/2;在自己的行中第一碼和內printf功能的第二代碼都會有這樣的不同的結果。

+3

第一個片段計算'TriNumber'十次,然後打印一次。循環中'printf'不是**。 – user3386109

+0

'for'是循環的開始。只要滿足循環條件,就會重複下一個_statement_。您的第一個示例是在循環結束後發生打印。你的第二個例子,打印是循環的一部分。 –

+0

檢查課程筆記。在'for'循環語句之後直接執行的唯一語句是...... – usr2564301

回答

6

A for沒有花括號的循環(或任何其他控制結構,就此而言)僅在一個語句上操作。因此,第一個片段將循環計算TriNumber,但只有在循環完成後才調用printf。這相當於寫作

for(n = 5; n <= 50; n += 5) { 
    TriNumber = ((n + 1) * n)/2; 
} 
printf("The trianglular number of %d is %d\n", n, TriNumber); 

爲了得到它的工作如你預期,你可以添加花括號自己,這兩個語句周圍:

for(n = 5; n <= 50; n += 5) { 
    TriNumber = ((n + 1) * n)/2; 
    printf("The trianglular number of %d is %d\n", n, TriNumber); 
} 
+1

謝謝!不知何故,我在閱讀中錯過了這個! – Louis

0

在您最後一個循環後打印第一案迭代和作爲結果n得到額外的增量5,你會看到55。在第二種情況下,您從最後一次迭代中打印出來並且循環計數器沒有額外增加,並且您看到50

1

●在第一種情況下,則for循環計算TriNumber直到條件滿足,然後移動到下一個語句;一世。即,在printf

for(n = 5; n <= 50; n += 5) 
    TriNumber = ((n + 1) * n)/2; 

printf("The trianglular number of %d is %d\n", n, TriNumber); 

這類似於(爲了更好的理解)

for(n = 5; n <= 50; n += 5) 
{ 
    TriNumber = ((n + 1) * n)/2; 
} 
printf("The triangular number of %d is %d\n", n, TriNumber); 

這就是爲什麼你得到一個單一的語句輸出指出:

三角數55是1275

●在您的第二種情況中,for循環計算TriNumber,並在滿足環路條件的情況下每次打印它,因爲printf這是執行的for循環的下一個語句。

for(n = 5; n <= 50; n += 5) 

    printf("The trianglular number of %d is %d\n", n, TriNumber = (((n + 1) * n)/2)); 

其類似於下面的代碼即使沒有括號{}

for(n = 5; n <= 50; n += 5) 
{ 
    printf("The trianglular number of %d is %d\n", n, TriNumber = (((n + 1) * n)/2)); 
} 

這是有效的,不僅for循環,但像whileif所有其他控制結構,等等,關於操作非常接下來的陳述沒有{}大括號如Mureinik所述。