1

我无法在我的程序中获得正确的输出,以找到三个数字中的第二大数字。(我知道这真的很基础,但我才刚刚开始学习 C,所以任何帮助和提示将不胜感激!)在我的程序中,我得到了三个数字的最大值和最小值(没有问题),但我一直在得到第二大数字的答案是 204。(这是错误的!)这是我的代码,如果有任何可怕的错误,对不起,就像我说的,我是新手!太感谢了!:)

//include the libraries

#include <stdio.h>

#include <conio.h>

//include the main function

int main()
{

    //declare the variables
    long a,b,c,min,max,secmax;

    //read the variables
    printf("a=");scanf("%ld",&a);
    printf("b=");scanf("%ld",&b);
    printf("c=");scanf("%ld",&c);

    // Find the min of the 3 numbers.
    if( b>a && c>a)
    {
        min=a;
    }
    else
    {
        min==b || min==c;
    }

    if( a>b && c>b )
    {
        min=b;
    }
    else
    {
        min==a || min==c;
    }

    if( a>c && b>c)
    {
        min=c;
    }
    else
    {
        min==a || min==b;
    }

    // Find the max of the 3 numbers.

    if( b>a && b>c)
    {
        max=b;
    }
    else
    {
        max==a || max==c;
    }

    if( a>b && a>c )
    {
        max=a;
    }
    else
    {
        max==b || max==c;
    }

    if( c>a && c>a)
    {
        max=c;
    }
    else
    {
        max==a || max==b;
    }

    //Find the second largest number
    if(a!=max && a!=min)
    {
       a=secmax;
    }
    else
    {
        b==secmax || c==secmax;
    }

    if(b!=max && b!=min)
    {
       b=secmax;
    }
    else
    {
        a==secmax || c==secmax;
    }

    if(c!=max && c!=min)
    {
       c=secmax;
    }
    else
    {
        b==secmax || a==secmax;
    }

    //print the output
    printf("\nThe maximum is %d\n",max);
    printf("\nThe second largest number is %d\n",secmax); 
    printf("\nThe minimum is %d\n",min);

getch();

return 1;
}
4

3 回答 3

1

分配以这种方式工作:

...
secmax = a;
...

这行代码分配asecmax. 如果secmax不包含任何内容(在程序员行话中包含“垃圾”),则在执行此行后它将等于a. 这就是你想要的。


a = secmax;

这行代码不好 - 它与您想要的相反。这可能是一个错字。


您的代码还有其他问题,但这似乎是最重要的修复;您的代码在修复后有可能会起作用。

于 2013-10-30T21:43:04.653 回答
0

您需要做的第一件事是摆脱您当前拥有的所有其他检查。他们只是在评估 bool 结果,对它们什么也不做。

其次,当您找到第二大数字时,您将 secmax 分配给 a、b 和 c,但实际上它应该是这样的:

if(a!=max && a!=min)
{
   secmax = a;
}

if(b!=max && b!=min)
{
   secmax = b;
}

if(c!=max && c!=min)
{
   secmax = c;
}
于 2013-10-30T21:46:58.743 回答
0
// Find the min of the 3 numbers.
if (b>a && c>a)  
{  
  min = a;  
}  
else if(a>b && c>b)  
{  
  min = b;  
}  
else  
{  
  min = c;  
}

这将正确设置最小值。您可以使用类似的逻辑/控制流程来设置最大值,并根据最小值/最大值找出中间值。

于 2013-10-30T21:44:54.233 回答