2016-12-03 85 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

你和从来没有指望第一个输入。初始值总和= 1,

对于你的小数字:你的总和=(1 + 1 + 1 + 2)碰巧是正确的。 但是对于你的大数字:你的总和=(1 + 100 + 100 + 200)= 400.1(你可以看到你错过了第一个输入100);

你的错误:

  1. 总和应该被初始化为0;

  2. 你没算(循环之前)的第一个输入:没有计算的总和也不计数器++

  3. 当用户最终输入0,你不应该继续counter++因为“0”是无效的输入。

+0

感谢您的回复! – Shaik

0

你的程序有几个问题:

  • 您初始化的总和为1,而不是0,因为它应该是。
  • 您以不同方式处理第一个值和后续值。这基本上没问题,但要确保在这两种情况下治疗是一样的。在你的代码中,你正确地分配了第一个值的最小值和最大值,但错过了递增和和计数器。
  • 您的代码不检查是否输入了有效的浮点数。这意味着如果用户输入的不是浮动内容,它会挂起。你的程序应该处理这样的输入,就像它是零。
  • 从理论上讲,当它为零时,不应该除以counter。在实践中,这种情况不会发生,因为您还计入了柜台中的终止零。

也许最好像所有其他值一样对待第一个值。然后,您可以将最小值和最大值初始化为大值和小值(例如,从<float.h>开始的FLT_MAX),或者您可以在循环内检查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//