在编程方面,我还是一个新手。简单地说,我必须通过不同的数据集运行代码。对于所有负数,我的max不正确。对于所有正数,我的最小值是错误的。我知道这是因为自该项目设置为1以来,它们最初已设置为1,但我不知道如何解决此问题。这一切都在C btw中。
#include <stdio.h>
#include <conio.h>
#define BUFSIZE 1024
int main()
{
int itemsread;
double item = 1;
//initial value so loop starts
int howmany = 0;
//the count
double max = item;
double min = item;
char line[BUFSIZE];
double mean;
double sum;
while (item != 0 && fgets(line, BUFSIZE, stdin) != NULL) {
itemsread = sscanf(line, "%lf", &item);
if (itemsread == 1 && item != 0) {
howmany++;
sum += item;
mean = sum / howmany;
if (item > max) {
max = item;
}
if (item < min) {
min = item;
}
} else {
printf("bad input\n");
}
}
printf("# items: %d\n", howmany);
if (howmany != 0) {
printf("sum: %f\n", sum);
printf("Maximum: %f\n", max);
printf("Minimum: %f\n", min);
printf("Mean: %f\n", mean);
}
return 0;
}
答案 0 :(得分:1)
您的分钟检查已关闭:
if (item < min) {
max = item;
}
更改为
if (item < min) {
min = item;
}
您还应该将最小值和最大值分配给从输入中收到的第一个条目。否则,除非值<1,否则永远不会设置最小值;除非> 1,否则您就不会设置最大值。
您可以使用您的howmany
值进行检查。如果在第一次递增之前为0,则在该点将min和max设置为item
。
此外,由于您的sum
是一个运行值,因此您需要将其分配给0
double sum = 0;
通常,未在创建时初始化值会在稍后的代码中引起“乐趣”。基本上,养成在创建时将所有变量初始化为值的习惯。参见RAII-https://en.wikipedia.org/wiki/Resource_acquisition_is_initialization