下面程序的功能是将n个无序整数从小到大排序。判断下面程序的正误,如果有错误请改正过来。 #include <stdio.h> int main() { int a[100], i, j, p, t, n = 20; for ( j = 0; j < n; j++ ) scanf( "%d", &a[j] ); for ( j = 0; j < n - 1; j++ ) { p = j; for ( i = j + 1; i < n - 1; i++ ) if ( a[p] > a[i] ) t = i; if ( p != j ) { t = a[j]; a[j] = a[p]; a[p] = t; } } for ( j = 0; j < n; j++ ) printf( "%d ", a[j] ); return(0); }
时间: 2024-01-19 11:02:41 浏览: 70
下面的程序有错误。
```c
#include <stdio.h>
int main() {
int a[100], i, j, p, t, n = 20;
for ( j = 0; j < n; j++ )
scanf( "%d", &a[j] );
for ( j = 0; j < n - 1; j++ )
{
p = j;
for ( i = j + 1; i < n - 1; i++ )
if ( a[p] > a[i] )
t = i;
if ( p != j )
{
t = a[j]; a[j] = a[p]; a[p] = t;
}
}
for ( j = 0; j < n; j++ )
printf( "%d ", a[j] );
return(0);
}
```
错误:
1. 在第二个for循环中,内部的for循环应该遍历到n-1而不是n-2,否则最后一个数不会被排序。
2. 在内部的for循环中,应该将较小的数的下标赋值给变量p,而不是将较大的数的下标赋值给变量t,否则排序会出错。
3. 在内部的for循环中,如果a[p] > a[i],应该将i的值赋给变量p,否则p的值不会改变。
4. 在if语句中,应该交换a[j]和a[p]的值,而不是a[j]和t的值的值,否则排序会出错。
修改后的程序:
```c
#include <stdio.h>
int main() {
int a[100], i, j, p, n = 20;
for ( j = 0; j < n; j++ )
scanf( "%d", &a[j] );
for ( j = 0; j < n - 1; j++ )
{
p = j;
for ( i = j + 1; i < n; i++ )
if ( a[p] > a[i] )
p = i;
if ( p != j )
{
int temp = a[j]; a[j] = a[p]; a[p] = temp;
}
}
for ( j = 0; j < n; j++ )
printf( "%d ", a[j] );
return(0);
}
```
修改后的程序将输入n个整数,存放到数组a中,并将它们从小到大排序,最后输出排序后的结果。
阅读全文