capitran 发表于 2020-10-15 16:22:55

函数求最大值最小值输出问题

#include<stdio.h>
double max, min;
void hanshu(double b);
void main()
{
        double a = { 96, 95.5, 85, 76, 91, 86, 82, 79, 68, 88 };
        hanshu(a);
        printf("\n");
}
void hanshu(double b)
{
        int i;
        double max = b;
        double min = b;
        double average;
        double k = 0;
        for (i = 0; i < 10; i++)
        {
                k = k + b;
                max = max>b ? max : b;
                min = min < b ? min : b;
        }
        average = k / 10;
        printf("%lf\n%lf\n%lf\n", average, max, min);
}

求数组的平均值、最大值、最小值。最小值min的输出答案一直不正确,请问到底怎么回事,

xieglt 发表于 2020-10-15 16:28:59

min 的初值赋小了。给min 一个足够大的数比如说
double min = 9.5e100;

sunrise085 发表于 2020-10-15 16:32:43

max = max>b ? max : b;
min = min < b ? min : b;
这两行中,数组b的下标写错了,把 i+1 改为 i 就可以了
若写成 i+1,当i为9的时候,就溢出了,那么就有可能导致max或者min出错

乐乐学编程 发表于 2020-10-15 19:33:21

因为你这两句 double max = b; 和 double min = b; 已经保存了数组的第一个元素,循环语句就没有必要从 0 开始了,直接从 1 开始 for (i = 1; i < 10; i++),这样,不仅下面的两个语句看起来简单,还不容易出错,max = max > b[ i ] ? max : b[ i ];min = min < b[ i ] ? min : b[ i ];

乐乐学编程 发表于 2020-10-15 19:36:05

sunrise085 发表于 2020-10-15 16:32
这两行中,数组b的下标写错了,把 i+1 改为 i 就可以了
若写成 i+1,当i为9的时候,就溢出了,那么就 ...

不好意思,大师,我回答时没有看到你已经回答了这个意思,撞衫了{:5_94:}

capitran 发表于 2020-10-22 21:10:41

xieglt 发表于 2020-10-15 16:28
min 的初值赋小了。给min 一个足够大的数比如说
double min = 9.5e100;

感谢

capitran 发表于 2020-10-22 21:11:16

sunrise085 发表于 2020-10-15 16:32
这两行中,数组b的下标写错了,把 i+1 改为 i 就可以了
若写成 i+1,当i为9的时候,就溢出了,那么就 ...

十分感谢

capitran 发表于 2020-10-22 21:12:14

乐乐学编程 发表于 2020-10-15 19:33
因为你这两句 double max = b; 和 double min = b; 已经保存了数组的第一个元素,循环语句就没有必要 ...

感谢

乐乐学编程 发表于 2020-10-22 23:15:42

capitran 发表于 2020-10-22 21:12
感谢

不用客气
页: [1]
查看完整版本: 函数求最大值最小值输出问题