C 识别最小值、中间值和最大值

C 识别最小值、中间值和最大值,c,C,我正在学习编程,你能帮我告诉我怎么了吗? 程序应识别最小值、中间值和最大值,并按此顺序将其分配给d1、d2、d3 void three_function(double * pnt_d1, double * pnt_d2, double * pnt_d3){ double smallest, middle, largest; largest = *pnt_d1; smallest = *pnt_d2; middle = *pnt_d3; if (*pnt

我正在学习编程,你能帮我告诉我怎么了吗? 程序应识别最小值、中间值和最大值,并按此顺序将其分配给d1、d2、d3

void three_function(double * pnt_d1, double * pnt_d2, double * pnt_d3){

    double smallest, middle, largest;
    largest = *pnt_d1;
    smallest = *pnt_d2;
    middle = *pnt_d3;

    if (*pnt_d2 > largest)
        largest = *pnt_d2;

    else if (*pnt_d3 > largest)
        largest = *pnt_d3;

    else if (*pnt_d1 < smallest)
        smallest = *pnt_d1;

    else if (*pnt_d3 < smallest)
        smallest = *pnt_d3;

    else if ((*pnt_d1 > smallest) && (*pnt_d1 < largest))
        middle = *pnt_d1;

    else if((*pnt_d2 > smallest) && (*pnt_d2 < largest))
        middle = *pnt_d2;

    *pnt_d1 = smallest;
    *pnt_d2 = middle;
    *pnt_d3 = largest;

}
(启动时) 现在d1=1.000000,d2=2.000000,d3=3.000000

(三个_功能后) 现在d1=2.000000,d2=3.000000,d3=2.000000

if (*pnt_d2 > largest) // 2 > 1
    largest = *pnt_d2; // largest = 2
else if...
由于
else,如果
代码跳到那里:

*pnt_d1 = smallest; // not changed and equal to 2
*pnt_d2 = middle;   // not changed and equal to 3
*pnt_d3 = largest;  // updated by 'if' and equal to 2 

基本上,如果以下
if
成功,则不会执行任何其他语句,因为它们位于
else if
中。因此,您要删除所有
else
,只需检查
if(条件)
6次。大概是

if (*pnt_d2 > largest)
    largest = *pnt_d2;

if (*pnt_d3 > largest)
    largest = *pnt_d3;

 ....

为什么您没有在if中使用多个语句使用
&&
,这将使代码和调试更容易使用&&在识别出最大值和最小值后找到中间值。如果有更有效的方法,请描述它,我将不胜感激。我更喜欢这种方法,适合你自己,让你感到舒服:)@misiek777这个假设在函数的末尾,在我识别出最小、中间和最大的值后,我使用它来获得这个顺序(最小-d1、中间-d2、最大-d3)。我还是不明白:(谢谢,愚蠢的错误。有更好的方法来识别这些值吗?对我来说,这是初学者最可读的代码。它可以简洁,但不会可读-编译器也足够聪明,可以优化这些东西,所以当我学习的时候,我会集中精力读而不是简洁。让我仍然思考如果有一些条件的话可以避免这种情况。
if (*pnt_d2 > largest)
    largest = *pnt_d2;

if (*pnt_d3 > largest)
    largest = *pnt_d3;

 ....