2016-05-12 3 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) 

возвращает истину, то 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

Это очень верно, это было сделано как быстрое решение, откладывая от моей домашней работы. –