#include<stdio.h> int main() { int i,n,m,a[10]={12,5,13,25,21,46,34,37,19,2},b[10],c[10]={0}; printf("Before sorting:\n"); for (i=0;i<10;i++) printf("%4d",*(a+i)); printf("\n"); for(n=0;n<10;i++){ for(i=0;i<10;i++) if(*(c+i)==0) break; m=i; for(i=0;i<10;i++) if(*(c+i)==0||*(a+m)<*(a+i)) m=i; *(b+m)=*(a+n); *(c+m)=1; } printf("After sorting:\n"); for(i=0;i<10;i++) printf("%4d",*(b+i)); printf("\n"); return 0; }这个代码哪里错了呀?
时间: 2023-06-21 13:21:25 浏览: 137
在这段代码中,有两个地方出现了错误:
1. 在第11行,for循环中的计数变量应该是n,而不是i。应该修改为:
```c
for(n=0;n<10;n++){
```
2. 在第16行,将i重新赋值为0之后,应该重新从0开始遍历查找最小值。应该修改为:
```c
for(i=0;i<10;i++)
if(*(c+i)==0){
m=i;
break;
}
for(i=m+1;i<10;i++)
if(*(c+i)==0&&*(a+m)>*(a+i))
m=i;
```
修改后的代码如下:
```c
#include<stdio.h>
int main() {
int i,n,m,a[10]={12,5,13,25,21,46,34,37,19,2},b[10],c[10]={0};
printf("Before sorting:\n");
for (i=0;i<10;i++)
printf("%4d",*(a+i));
printf("\n");
for(n=0;n<10;n++){
for(i=0;i<10;i++)
if(*(c+i)==0){
m=i;
break;
}
for(i=m+1;i<10;i++)
if(*(c+i)==0&&*(a+m)>*(a+i))
m=i;
*(b+m)=*(a+n);
*(c+m)=1;
}
printf("After sorting:\n");
for(i=0;i<10;i++)
printf("%4d",*(b+i));
printf("\n");
return 0;
}
```
修改后的程序可以正确地进行选择排序,并输出正确的结果。