此任务的要求如下:
在EOF,输出:
全部精确到小数点后两位。 输出值必须用单个空格字符分隔,后跟换行符。
示例:
输入:
7
5.6
6
输出:
5.60 7.00 6.20
输入:
11
输出:
11.00 11.00 11.00
在输入7,5.6和6的代码中,我的输出为5.60 7.00 5.77。 我知道问题在哪里,但不知道如何解决它。我的总变量表示它在EOF的值是17.322826,这绝对不正确。
#include <stdio.h>
int main() {
int i = 0;
float big = 0;
float small = 1000000;
float total;
float div = 0;
while (i == 0) {
float a = 0;
float flag = scanf("%f", &a);
if (flag == EOF) {
printf("%.2f %.2f %.2f %f %f\n", small, big, total / div, total, div);
break;
}
if (a > big) {
big = a;
}
if (a < small) {
small = a;
}
div++;
total = total + a;
}
return 0;
}
答案 0 :(得分:2)
您忘了将total
初始化为0
。
补充说明:
for (;;) { ... }
。flag
应定义为int
flag != 1
而不是flag == EOF
时停止循环。无效的输入将导致程序无休止地循环。您实际上可以完全删除此变量。big
初始化为0
而将small
初始化为1000000
是不正确的:如果所有值均为负数会怎样?如果他们都非常大会怎么样?以下是更正后的版本:
#include <stdio.h>
int main(void) {
float a, big, small, total;
int div;
if (scanf("%f", &a) != 1)
return 1;
big = small = total = a;
div = 1;
while (scanf("%f", &a) == 1) {
if (big < a) {
big = a;
}
if (small > a) {
small = a;
}
div++;
total += a;
}
printf("%.2f %.2f %.2f\n", small, big, total / div);
return 0;
}