2016-12-03 2 views
1
#include <stdio.h> 

main() 
{ 
int choice, no; 

printf("1. Show sum of odd/even number to N term\n"); 
printf("2. Smallest, largest and average of the supplied numbers\n"); 
printf("3. Terminate the programs\n\n"); 

printf("Enter your choice[1|2|3]: "); 
scanf("%d", &choice); 

if (choice == 1) 
{ 
    int i , no , sum = 0, j, sum2 = 0; 

    printf("\nEnter any number: "); 
    scanf("%d", &no); 

    for (i = 2; i <= no; i = i + 2) 
    { 
     sum = sum + i; 
    } 

    printf("\nSum of all even number between 1 to %d = %d\n", no, sum); 

    for (j = 1; j <= no; j = j + 2) 
    { 
     sum2 = sum2 + j; 
    } 
    printf("Sum of all odd number between 1 to %d = %d\n", no, sum2); 
} 
else if(choice == 2)  
{ 
    float max, min, avg, num,counter=0, sum = 1; 
    printf("\nPlease enter all the number you want![0 to end]: "); 
    scanf("%f", &num); 
    max = min = num; 
    while (num != 0) 
    { 
     printf("Please enter all the number you want![0 to end]: "); 
     scanf("%f", &num); 
     if (max < num && num > 0) 
      max = num; 
     else if (min > num && num > 0) 
      min = num; 
     sum = sum + num; 
     counter++; 
    } 
    printf("\nThe smallest and largest of entered numbers are %.2f and %.2f respectively.\n", min, max); 
    avg = sum/counter; 
    printf("The sum of entered number is %.2f\n", sum); 
    printf("The average of entered number is %.2f\n", avg); 
} 

} 

Моя проблема в том, когда я выбираю номер 2, он покажет наименьшее и наибольшее число, но сумма отображается неправильно, когда я ввожу большое количество, например 200! Но он отлично работает, когда я ввожу небольшую ценность !?Мои расчеты ошибочны при вводе большого количества?

small number Big number

изображение включено

+2

Почему 'sum' инициализируется 1, а не 0? И почему вы просматриваете второй номер перед обработкой первого? –

+0

изменена сумма = 0, но я не понимаю ... часть «почему вы сканируете второй номер перед обработкой первого?» ... Я не компьютерный студент ... но мне нужно взять c-классы. – Shaik

+1

Пожалуйста, не публикуйте фотографии с текстом. –

ответ

1

Ваша сумма никогда не сосчитать первый вход. С начальным значением sum = 1,

Для ваших маленьких чисел: ваша сумма = (1 + 1 + 1 + 2) оказывается правильной. Но для ваших больших чисел: ваша сумма = (1 + 100 + 100 + 200) = 400,1 (вы можете видеть, что пропустили первый вход 100);

Ваши ошибки:

  1. сумма должна быть инициализированы как 0;

  2. не считать первый вход (до цикла): не известково сумма ни счетчика ++

  3. когда пользователь наконец вход 0, вы не должны продолжать counter++, потому что «0» не является допустимым вход.

+0

благодарю вас за ответ! – Shaik

0

Ваша программа имеет несколько вопросов:

  • Вы инициализацию сумму до 1, а не 0, как это должно быть.
  • Вы обрабатываете первое значение и последующие значения по-разному. Это в основном нормально, но убедитесь, что лечение одинаковое в обоих случаях. В вашем коде вы правильно назначаете min и max для первого значения, но пропустите увеличение суммы и счетчика.
  • Ваш код не проверяет, введен ли действительный поплавок. Это означает, что он зависает, если пользователь вводит что-то, что не является поплавком. Ваша программа должна обрабатывать такой ввод, как если бы он был равен нулю.
  • В теории вы не должны делить на counter, когда он равен нулю. На практике этого не происходит, потому что вы также учитываете завершающий нуль в своем счетчике.

Возможно, было бы лучше обработать первое значение, как и все другие значения. Затем вы можете инициализировать min и max большими и малыми значениями (например, & plusmn; FLT_MAX от <float.h>), или вы можете проверить count == 0 внутри цикла, чтобы реализовать различное поведение для первого и следующих значений.

В этом случае вы могли бы break из бесконечного цикла, когда был указан недопустимый ввод или ноль. Это может показаться сложным, но приводит к более простому коду:

#include <stdio.h> 
#include <float.h> 

int main(void) 
{ 
    float max = -FLT_MAX;  // minimum possible float value 
    float min = FLT_MAX;  // maximum possible float value 
    float sum = 0.0f; 
    int count = 0; 

    for (;;) { 
     float num; 

     printf("Please enter all the number you want![0 to end]: "); 

     if (scanf("%f", &num) < 1 || num == 0) break;    

     if (max < num) max = num; 
     if (min > num) min = num; 
     sum += num; 
     count++; 
    } 

    if (count) { 
     float avg = sum/count; 

     printf("%d values\n", count); 
     printf("Smallest: %.2f\n", min); 
     printf("Largest: %.2f\n", max); 

     printf("Sum:  %.2f\n", sum); 
     printf("Average: %.2f\n", avg); 
    } 

    return 0; 
} 
+0

спасибо, что дайте мне много помощи! – Shaik

0
#include <stdio.h> 
main() 
{ 
    int choice = 0; 


    for (;choice != 3;) 
    { 
     printf("_____________________________________________________________\n\n"); 
     printf("1. Show sum of odd/even number to N term\n"); 
     printf("2. Smallest, largest and average of the supplied numbers\n"); 
     printf("3. Terminate the programs\n\n"); 
     printf("Enter your choice[1|2|3]: "); 
     scanf("%d", &choice); 
     printf("_____________________________________________________________\n\n"); 

     if (choice == 1) 
     { 
      int i, no, sumc1 = 0, j, sum2c1 = 0; 

      printf("\nEnter any number: "); 
      scanf("%d", &no); 

      for (i = 2; i <= no; i = i + 2) 
      { 
       sumc1 = sumc1 + i; 
      } 

      printf("\nSum of all even number between 1 to %d = %d\n", no, sumc1); 

      for (j = 1; j <= no; j = j + 2) 
      { 
       sum2c1 = sum2c1 + j; 
      } 
      printf("Sum of all odd number between 1 to %d = %d\n\n\n", no, sum2c1); 
     } 
     else if (choice == 2) 
     { 

      float counter, num, large, small, num2, sum = 0, avg; 
      printf("\nEnter first number[Enter 0 to stop]: "); 
      scanf("%f", &num); 
      num2 = num; 
      large = num; 
      small = num; 
      for (counter = 0; num != 0; counter++) 
      { 
       printf("Enter another number [Enter 0 to stop]: "); 
       scanf("%f", &num); 
       if (num > large && num > 0) 
        large = num; 
       if (num<small && num > 0) 
        small = num; 
       sum = sum + num; 
      } 
      sum = sum + num2; 
      avg = sum/counter; 
      printf("\nThe largest number is %.2f\n", large); 
      printf("The smallest number is %.2f\n", small); 
      printf("The sum of entered numbers are %.2f\n", sum); 
      printf("The average of entered number are %.2f\n\n\n", avg); 

     } 
    } 
} 

Я просто выяснял основные проблемы спасибо всем, хотя некоторые из ответов дали мне полный код, я должен использовать только простой код, потому что я только начал изучать основные. Благодарю.

Этот код может быть кому-то полезен.

//uniten.encik//

Смежные вопросы