冒泡数组输出有问题
#include <stdio.h>int main(){
int a,n,i,j,t;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a);
}
for(i=1;i<=n-1;i++){
for(j=1;j<=n-i;j++){
if(a<a){
t=a;
a=a;
a=t;
}
}
}
for(i=0;i<n;i++){
printf("%d",a);
}
return 0;
} 这段代码是一个冒泡排序算法的实现,但是在输出有些问题。我发现了两个错误:
1. 在内层循环中,数组下标应该从0开始,而不是1。
2. 在输出时,数组元素之间缺少空格。
我对代码进行了修正,现在它应该正常工作了:
#include <stdio.h>
int main(){
int a,n,i,j,t;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a);
}
for(i=0;i<n-1;i++){
for(j=0;j<n-i-1;j++){
if(a<a){
t=a;
a=a;
a=t;
}
}
}
for(i=0;i<n;i++){
printf("%d ",a);
}
printf("\n");
return 0;
}
现在,这个代码会根据用户输入的数字n,接收n个整数并以降序冒泡排序。排序后,输出数组元素,元素之间有空格,并且在所有元素输出完后换行。 isdkz 发表于 2023-4-21 12:57
这段代码是一个冒泡排序算法的实现,但是在输出有些问题。我发现了两个错误:
1. 在内层循环中,数组下 ...
第8行写成i=1;i<n–1;i++为什么不可以怎么写,不理解 啊这啧啧啧 发表于 2023-4-21 13:08
第8行写成i=1;i
你可以使用`i=1;i<n;i++`,但你需要相应地调整内层循环。如果你使用`i=1;i<n;i++`,那么内层循环的条件应该是`j=0;j<=n-i;j++`,这样的话,也能得到正确的结果。这是修改后的代码:
#include <stdio.h>
int main(){
int a,n,i,j,t;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a);
}
for(i=1;i<n;i++){
for(j=0;j<=n-i;j++){
if(a<a){
t=a;
a=a;
a=t;
}
}
}
for(i=0;i<n;i++){
printf("%d ",a);
}
printf("\n");
return 0;
}
使用`i=1;i<n;i++`是可以的,关键是要确保内外循环的边界条件正确,以便进行正确的比较和交换。在这种情况下,你需要确保内层循环的边界条件与外层循环同步。 isdkz 发表于 2023-4-21 13:13
你可以使用`i=1;i
j<=n-i,应该不行,j=9的时候越界了 remake111 发表于 2023-4-22 11:13
j<=n-i,应该不行,j=9的时候越界了
你先试了再说行不行{:10_334:}
页:
[1]