2014-04-02 65 views
0

每次我运行它时,min和max都是相同的数字,有时是错误的,我完全失去了原因。这是一个基于用户输入的基本计算器。我猜这是主要问题,但如果没有,我会用其余的代码编辑它。C计算器帮助 - 无法获取最小值和最大值

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

您只将最小值和最大值与输入的最后一个数据项进行比较 - 您应该将数据与for循环内的最小/最大值进行比较。 – ganz

+1

'data'值显然是'float',而'min'和'max'显然是int。他们应该都可以是相同的类型。 – user3386109

回答

1

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

float mymin = FLT_MAX; 
float mymax = FLT_MIN; 

你也不应该使用if 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; 
} 
0

1),而读你已经将其存储在阵列中的数据的,但你存储相同的变量数据数据读取每一次,你的问题使用它作为数据[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)为了找到最小和最大值,开始与refernce值,并与阵列的整个elemnts,其中你只是比较分钟比较一个元素次最大值仅

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]; 
} 

这个循环之后,你的最小和阵列

相关问题