C计算器帮助 - 无法获得最小值和最大值

时间:2014-04-02 02:13:39

标签: c if-statement

每次我运行它时,min和max都是相同的数字,有时是错误的,我完全迷失了为什么会这样。它是基于用户输入的基本计算器。我猜这是主要问题,但如果没有,我会用剩下的代码编辑它。

for (i = 1; i <= n; i = i + 1) {
  printf("Enter data item %d: ", i);
  scanf("%f", &data);

  sumx = sumx + data;
  sumx2 = sumx2 + (data*data);

}


mean = sumx / n;
var = 1.0/(n-1) * (sumx2 - (1.0/n)*sumx*sumx);
sd = sqrt(var);


if (data > max){
 max = data;
}
else if(data < min)
  min = data;
/* print the computed values */

printf("\n");
printf("mean = %f\n", mean);
printf(" variance = %f\n", var);
printf("std. dev. = %f\n\n", sd);
printf("The minimum number in the list is %d.\n", min);
printf("The maximum number in the list is %d.\n", max);


return 0;
}

2 个答案:

答案 0 :(得分:1)

您没有将min和max的初始设置显示为默认值。

float mymin = FLT_MAX;
float mymax = FLT_MIN;

你也不应该使用if else if以确保第一次启动循环时设置数据。

此外,由于您在发出测试之前运行循环并完成它,因此您只是在处理的最后测试值,这意味着您永远不会检查最小值或最大值。其他类型的更改也显示如下。

int myfunc(int n)
{
  float mymin = FLT_MAX;
  float mymax = FLT_MIN;
  float sumx = 0.0;
  float sumx2 = 0.0;
  float data;
  float mean;
  float var;
  float sd;
  int i;

  for (i = 1; i <= n; i++) {
    printf("Enter data item %d: ", i);
    scanf("%f", &data);
    if (data > mymax){
      mymax = data;
    }
    if(data < mymin) {
      mymin = data;
    }
    sumx += data;
    sumx2 += (data*data);

  }
  mean = sumx / n;
  var = 1.0/(n-1) * (sumx2 - (1.0/n)*sumx*sumx);
  sd = sqrt(var);

  /* print the computed values */

  printf("\n");
  printf("mean = %f\n", mean);
  printf(" variance = %f\n", var);
  printf("std. dev. = %f\n\n", sd);
  printf("The minimum number in the list is %f.\n", mymin);
  printf("The maximum number in the list is %f.\n", mymax);

  return 0;
}

答案 1 :(得分:0)

问题是

1)在阅读数据时,您需要将其存储在数组中,但是您每次都要将数据存储在同一个变量 data 中,您和#39;将其用作 data [i]

for (i = 1; i <= n; i = i + 1) {

  printf("Enter data item %d: ", i);
  scanf("%f", &data[i]);
  sumx = sumx + data[i];
  sumx2 = sumx2 + (data[i]*data[i]);

}

2)要查找最小值和最大值,请从参考值开始并与数组的整个元素进行比较,您只需将最小值和最大值与一个元素进行比较

int min,max;

max=data[1];
min=data[1];
for (i = 2; i <= n; i = i + 1) {
    if(data[i] > max)
        max=data[i];

    if(data[i] < min)
        min=data[i];
}

在此循环之后,您可以获得数组的最小值和最大值