在嵌套的if-else条件下,C程序的控制不再进一步

时间:2014-09-17 07:51:03

标签: c loops if-statement

我必须在给定的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;
        }
    }
}

3 个答案:

答案 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