-2
#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 以下的值。为什么这会发生吗?提前致谢。

4

3 回答 3

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]);
}

编辑:修改打印循环

于 2013-03-10T17:49:03.133 回答
1

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

您看到打印 3 以下数字的原因是因为您printf在进行交换的循环之后:当内部循环完成时,一个小于a[i]可能插入到i第 -th 位置的数字。如果您printf在循环之前移动,则打印的数字将全部来自该[3..8]范围,包括两端。

于 2013-03-10T17:43:51.393 回答
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;
    }
}
于 2013-03-10T17:49:04.083 回答