数组if语句的元素

时间:2013-03-10 17:39:56

标签: c arrays if-statement

#include <stdio.h>

main()
{
    int i,l,t=1,m,a[15]={0};
    for(i=0;i<15;i++)
    {  
        scanf("%d",&a[i]);
    }

    for(i=0;i<15;i++)
    {
        if(a[i]>=3 && a[i]<=8)
        {
            for(l=i+1;l<15;l++)
            {
                if(a[i]>a[l])
                {
                    m=a[i];
                    a[i]=a[l];
                    a[l]=m;
                }
            }
            printf(" No%d \t %d \n",t++,a[i]);
        }
    }
    system("pause");
}

在ci中的这段代码中,想要以升序打印数组的元素,但元素的值必须是3和8之间的结果。我得到的结果排除了超过8的值,但它们包含的值低于3为什么会这样?提前谢谢。

3 个答案:

答案 0 :(得分:3)

我建议你单独进行排序,然后只打印3到8之间的元素,然后按照你想要的顺序得到它。

// sort the array
for(i=0;i<15;i++)
{
    for(l=i+1;l<15;l++)
    {
        if(a[i]>a[l])
        {
            m=a[i];
            a[i]=a[l];
            a[l]=m;
        }
    }
}

for (i = 0; i < 15; i++)
{
    if (a[i] < 3)
        continue;

    if (a[i] > 8)
        break;

    printf(" No%d \t %d \n",t++,a[i]);
}

编辑:修改后的打印循环

答案 1 :(得分:1)

看起来你正在运行某种排序算法,但是你跳过3到8之间的所有元素。

您看到打印数量低于3的原因是因为您的printf位于交换循环之后:到内循环结束时,可以插入小于a[i]的数字。 i - 位置。如果您在循环之前移动printf,则打印的数字将全部来自[3..8]范围,包括两端。

答案 2 :(得分:0)

您的外部循环从您的排序中排除了3和8:

for(i=0;i<15;i++)
{
    if(a[i]>=3 && a[i]<=8) /* <--- exclusion here */
    {
        /* code nested in outer loop and exclusion */
    }
}

但是,你的内部循环没有这样的排除:

for(l=i+1;l<15;l++)
{
    if(a[i]>a[l]) /* <--- no exclusion! */
    {
        m=a[i];
        a[i]=a[l];
        a[l]=m;
    }
}

我建议修改内部循环以从搜索中排除低于3的值:

for(l=i+1;l<15;l++)
{
    if(a[l]>=3 && a[i]>a[l])
    {
        m=a[i];
        a[i]=a[l];
        a[l]=m;
    }
}