该程序产生了意外的结果。我认为将数组返回到main()中存在问题。
#include <stdio.h>
int *isort(int array[], int size)
{
int i, j, key;
for (j = 1; j < size; j++) {
array[j] = key;
i = j - 1;
while (i > 0 && array[i] > key) {
array[i + 1] = array[i];
i--;
}
array[i + 1] = key;
}
return array;
}
main()
{
int array[100], size, i, *result;
printf("\nSIZE: ");
scanf("%d", &size);
printf("\nARRAY: ");
for (i=0; i<size ; i++)
scanf("%d\t", &array[i]);
result = isort(array, size);
for (i=0; i<size; i++)
printf("%d\n", array[i]);
}
作业中的一个错误很严重!更正为:
array[j] = key; // it is undefined to assign with an uninitialized variable
应该:
key = array[j];
编辑:另一个逻辑错误是您不在0
内部循环中对index处的值进行排序:
while (i > 0 && array[i] > key)
应该:
while (i >= 0 && array[i] > key) // note you are using a[i + 1] = a[1]
// ^^ // but not i - 1
此外,
您可以删除扫描数组值时\t
的格式字符串scanf
。只需使用scanf("%d", &array[i]);
。如果您使用\t
的scanf
格式字符串,它会消耗任何数量的空格的,直到你不输入非空白字符。
scanf的手册说,
一系列空格字符(空格,制表符,换行符等;请参见
isspace(3)
)。此伪指令匹配输入中任何数量的空格,包括无空格。
还有一件事是,您不需要从排序函数返回数组地址,因为您正在传递地址,因此排序函数所做的更改将反映在中main
。虽然这不是一个错误。关键是您array[i]
改为通过来打印数组result[i]
。
如果您纠正了上述错误,则您的代码应该可以正常运行:在此处@键盘检查(我更改main()
为int main()并返回,0
但这是另一回事)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句