1

お役に立てば幸いです。'10個の整数のリスト(配列)を指定して、絶対値が最小のプログラムを見つけ、その位置を最後のリストと交換して、新しいリストを出力するプログラムを作成しようとしています。

これが私がコーディングしたものですが、スワッピングではありません。

#include stdio.h
#include math.h

int main() {

    int array[10];
    int arraynew[10];
    int absmallest = 0;
    int index = 0;
    int i;
    for (i = 0; i < 10; i++) {
        scanf("%d", &array[i]);
    }
    absmallest = array[0];

    for (i = 0; i < 10; i++) {
        if (abs(array[i]) < absmallest)
            absmallest = array[i];
        index = i;
    }

    int temp;
    temp = array[9];
    array[9] = array[index];
    array[index] = temp;

    for (i = 0; i < 10; i++) {
        printf("%d", array[i]);
    }
}
4

5 に答える 5

3

2つの問題:

(1)

    if (abs(array[i]) < absmallest)
        absmallest = array[i];
    index = i;

これindex = iはifステートメントの範囲外です。したがって、反復ごとに発生し、条件の結果に依存しません。

(2)
absmallest = array[0];も一緒にいる必要がありabs()ます(もしもarray[0] = -5)?abssmallestforループでの割り当てについても同じことが言えます(absmallest = array[i];である必要がありますabsmallest = abs(array[i]);

于 2012-08-07T13:57:46.333 に答える
2

index-ステートメント内を更新する必要がありますif

if (abs(array[i]) < absmallest)
    absmallest = array[i];
index = i;

する必要があります

if (abs(array[i]) < absmallest)
{
    absmallest = array[i];
    index = i;
}

indexそれ以外の場合は、ループごとに更新します。


編集: @amitが指摘したように、実際の値ではなく、絶対値も保存する必要があります。言い換えると

absmallest = array[i];

する必要があります

absmallest = abs( array[i] );

そして、の初期化についても同じですabsmallest

absmallest = abs( array[0] );
于 2012-08-07T13:56:10.350 に答える
0

このループでは:

for (i = 0; i < 10; i++) {
    if (abs(array[i]) < absmallest)
        absmallest = array[i];
    index = i;
}

index 毎回変数を設定します。つまり、ループが終了するindexと、最後の要素へのインデックスになります。

また、おそらく代わりに初期化absmallestする必要がありますabs(array[0])

于 2012-08-07T13:57:17.053 に答える
0
if (abs(array[i]) < absmallest)
    absmallest = array[i];
index = i;

になる必要があります

if (abs(array[i]) < absmallest) {
    absmallest = array[i];
    index = i;
}
于 2012-08-07T14:00:04.090 に答える
0
for (i = 0; i < 10; i++) {
     if (abs(array[i]) < absmallest)
         absmallest = array[index = i];
}
于 2012-08-07T14:03:59.480 に答える