我希望你能提供帮助。我正在尝试编写一个程序,给出一个包含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]);
}
}
答案 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循环中分配abssmallest
(absmallest = 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];
}