交换c中的数组元素

时间:2012-08-07 13:54:18

标签: c

我希望你能提供帮助。我正在尝试编写一个程序,给出一个包含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]);
    }
}

5 个答案:

答案 0 :(得分:3)

两个问题:

<强>(1)

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

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

<强>(2)
absmallest = array[0];也应与abs()一起使用(如果array[0] = -5会发生什么情况)? 同样适用于在for循环中分配abssmallestabsmallest = array[i];应为absmallest = abs(array[i]);

答案 1 :(得分: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] );

答案 2 :(得分:0)

在这个循环中:

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

您每时间设置变量index 。这意味着,如果超过index的循环将成为最后一个元素的索引。

此外,您可能应该将absmallest初始化为abs(array[0])

答案 3 :(得分:0)

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

应该成为

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

答案 4 :(得分:0)

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