每次我运行它时,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;
}
答案 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];
}
在此循环之后,您可以获得数组的最小值和最大值