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

两个问题:

(1)

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

超出了 if 语句的index = i范围 - 因此它每次迭代都会发生,并且不取决于您的条件的结果。

(2)
absmallest = array[0];也应该是 with 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在每个循环中更新您的。


编辑:正如@a​​mit 所说,您还需要存储绝对值,而不是真实值。换句话说

absmallest = array[i];

应该

absmallest = abs( array[i] );

同样的初始化absmallest

absmallest = abs( array[0] );
于 2012-08-07T13:56:10.350 回答
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 回答
0

在这个循环中:

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

index 您每次都设置变量。这意味着当循环结束时index将是最后一个元素的索引。

此外,您可能应该初始化absmallestabs(array[0])

于 2012-08-07T13:57:17.053 回答