我无法在程序中获得正确的输出,以便找到三个数字中的第二大数字。 (我知道它非常基本,但我刚刚开始学习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;
}
答案 0 :(得分:1)
作业以这种方式运作:
...
secmax = a;
...
此行代码将a
分配给secmax
。如果secmax
不包含任何内容(在程序员术语中包含“垃圾”),则在执行此行后它将等于a
。这就是你想要的。
a = secmax;
这行代码并不好 - 它与您想要的相反。这可能是一个错字。
您的代码还有其他问题,但这个问题似乎是最重要的问题;修复后你的代码有可能正常工作。
答案 1 :(得分: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;
}
这将正确设置分钟。您可以使用类似的逻辑/控制流来设置最大值,并根据最小值/最大值计算出中间值。
答案 2 :(得分:0)
您需要做的第一件事就是摆脱目前所有的 else 检查。他们只是在评估bool结果并且不做任何事情。
其次,当您找到第二大数字时,您将secmax分配到a,b&amp; c但实际上它应该是这样的:
if(a!=max && a!=min)
{
secmax = a;
}
if(b!=max && b!=min)
{
secmax = b;
}
if(c!=max && c!=min)
{
secmax = c;
}