-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]iprintf[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 に答える