2016-05-12 45 views
-1

的我想要的素數的1之間的平均來計算10,我已經寫了一個程序,該程序如下:平均素數程序

#include <stdio.h> 
int main() 
{ 
    int i, j, sum = 0, count = 0; 
    loop1: 
     for(i = 2; i <= 10; i++) 
     { 
      for(j = i - 1; j > 1; j--) 
      { 
       if(i % j == 0) 
       { 
        goto loop1; 
       } 
      } 
      sum = sum + i; 
      count++; 
     } 
     printf("The avg:%d", (sum/count)); 
     return 0; 
} 

請幫我的程序是否正確。

+0

您是否嘗試過運行它? – svarog

回答

0

請確保你不使用goto:語句的習慣。你的程序不正確。在這裏,當聲明

if(i % j == 0) 

返回true,則goto:聲明將控制父for循環的開始和循環會從開始再次運行。這樣,你永遠不會得到你想要的輸出。根據你的問題,你的解決方案是錯誤的。修改後的方法是

#include <stdio.h> 
int main() 
{ 
    int i, j, sum = 0, count = 0,flag; 
    for(i = 2; i <= 10; i++) 
    {  
     flag=0; 
     for(j = i - 1; j > 1; j--) 
     { 
      if(i % j == 0) 
      { 
       flag=1; 
       break; 
      } 
     } 
     if(flag==0) 
     { 
       sum = sum + i; 
       count++; 
     } 

    } 
    printf("The avg:%d", (sum/count)); 
    return 0; 
} 
0

「正確」是什麼意思?

如果對您正確,意味着它有效:那麼很容易驗證您自己。

如果正確的話意味着你正在達到最佳實踐,那麼,不好的是,你很想念他們。

goto:關於所有「最不容易使用」的標誌。

「更好」的方法是編寫一個函數來測試一個數是否爲素數。你

2

答案很簡單:

#include <stdio.h> 

int main() { 

    float sum = 0, count = 0, average; 
    for(int i=2; i<11; i++){ 
     for(int j=2; j<=i; j++){ 
      if(j==i){ 
       sum+=i; 
       count++; 
      }else if(i%j==0){ 
       break; 
      } 
     } 
    } 
    average=sum/count; 
    printf("Average = %.2f", average); 

    return 0; 
} 
+1

實際上,您可以通過一個嚴重的因素對其進行優化,因爲素數測試不需要測試大於被測數字一半的數字;同樣,除了2之外,現在還沒有素數(因爲它們可以除以2 ...)。 – swa66

+0

這是非常真實的,它只是作爲一個快速解決方案,同時拖延做我自己的作業。 –