2017-04-06 94 views
1

我似乎无法弄清楚为什么我没有得到大小的正确值。 我应该找到给定的n个数字的范围,我必须在循环之前设置大和小的值吗?C程序将不计算最小和最大(大和小)

这里是我的代码:

#include <stdio.h> 

int main() 
{ 
    //Declaring Variables 
    int i, number, sum = 0, value, large, small; 
    double avg; 

      //User Input 
      printf("Enter the number of elements you want to compute.\n"); 
      scanf("%d", &number); 
      printf("Enter %d values.\n", number); 

      //Loop to grab values 
      for(i=0;i<number;i++) 
      { 
        scanf("%d", &value); 
        large = value; 
        small = value; 
        if(value > large) 
          large = value; 
        if(value < small) 
          small = value; 
        //Sum Calculation 
        sum = sum + value; 
        //Average Calculation 
        avg = (((double)sum)/number); 
      } 

      printf("The sum of the %d numbers is: %d\n", number,sum); 
      printf("The avg of the %d numbers is: %.2f\n", number, avg); 
      printf("The largest number is: %d\n", large); 
      printf("The smallest number is: %d\n", small); 

    return 0; 
} 
+0

您需要首先启动大小适当的值,例如,设置为-10000(小于可能的最小输入值)和小于10000(大于最大可能输入值)。你只需要在for循环之后计算一次avg。 – Shiping

+0

或者,从读取的第一个值中设置最大值和最小值。之后,您将比较新的值与当前的最大值和最小值。 –

回答

1
   large = value; 
       small = value; 
       // point A 
       if(value > large) 
         large = value; 
       if(value < small) 
         small = value; 

在上面,largesmall点A和value现在包含相同的值。随后的if语句将不会生效。你可能只想在i == 0的前两行。

+0

对不起,我仍然不明白如何解决它。我现在看到if语句没有被读取。 –

+0

后来在另一个答案中提出,只有在给定条件下,您才可以使用'if'语句来执行这两行代码 – guest

0

让我为你提供2种可能的方法来解决你的代码:

选项1.Initialize大大小小的外循环: 由于大大小小的是整数,你可以初始化它们的“外部”的for循环如下:

int large = INT_MIN; 
int small = INT_MAX; 

,并删除了声明:

large = value; 
small = value; 

for循环。由于你的目标是分别计算最大值和最小值,你可以初始化大到最小可能的整数,并初始化小到最大可能的整数。

常量INT_MIN和INT_MAX在“limits.h”头文件中定义。

选项2.Change在循环代码:

我们需要了解的是,变量大大小小的需要只是“曾经”被初始化时开始循环(即当我== 0)。 如果每次运行循环时都一直设置它们,那么它们将不断被覆盖,并且最小/最大值将不一致。

所以你的代码更改为以下:

if (i == 0) { 
    large = value; 
    small = value; 
} 

边注:计算整个和“之后”计算环路外的平均水平。