我必须在给定的n个数字中找到第二大数字,但不使用数组。我决定使用循环,但问题是程序的控制不会进入else if
循环条件。我做了一个约束,如果我输入-1
,那么循环将终止,但在输入-1
后,程序完全终止。我只是想知道我的循环或条件有什么问题,或者我做错了吗?
#include <stdio.h>
int main()
{
int i, j, max1 = 0, max2 = 0;
for (j = 0; j <= 10; j++)
{
scanf("%d", &i);
if (i == -1)
{
break;
}
else if ((i) >= (max1))
{
max2 = max1;
max1 = i;
}
else if ((i) < (max1))
{
if ((i) > (max2))
{
max2 = i;
}
}
else
{
return 0;
}
}
}
答案 0 :(得分:2)
for循环中的else
部分不是必需的。如果查看第二个else if
,可以减少if语句的数量。 i
的定义小于max1
,因此您可以使用嵌套if子句的条件。
打印出max2
即可。
#include <stdio.h>
int main()
{
int i, j, max1 = 0, max2 = 0;
for(j = 0; j <= 10; j++)
{
scanf("%d",&i);
if(i == -1)
{
break;
}
else if(i >= max1)
{
max2 = max1;
max1 = i;
}
else if(i > max2)
{
max2 = i;
}
}
printf("%d\n", max2);
return 0;
}
答案 1 :(得分:0)
这段代码看起来像个可怕的男人,你为什么这么多地使用(),无论如何你的答案是:在你发现最大的一个之后你应该做的
if( i > max2) max2 = i;
答案 2 :(得分:0)
您的计划中使用的方法是错误的。例如,如果数字序列包含所有负数,那么max2将包含0,尽管序列中没有这样的值。
程序逻辑错误。该计划提前退出。
有效代码可以采用以下方式
#include <stdio.h>
int main(void)
{
const int N = 10;
int max1, max2;
int value;
int count;
int i;
count = 0;
for ( i = 0; i < N && scanf( "%d", &value ) > 0 && value != -1; i++, count++ )
{
if ( count == 0 || max1 < value )
{
if ( count != 0 ) max2 = max1;
max1 = value;
}
else if ( count == 1 || max2 < value )
{
max2 = value;
}
}
if ( count >= 2 ) printf( "The second maximum is equal to %d\n", max2 );
else printf( "You have to enter more than one number\n");
return 0;
}
例如序列
5 -3 1 0 -6 9 -9 8 -5
输出将是
The second maximum is equal to 8