直接上代码,关键的地方给出了注释:【望楼主采纳】
#include<stdio.h>
int main()
{
int a[4]= {0},i,j;
printf("请输入四个数: ");
for (int i = 0; i < 4; i++)
{
scanf("%d",&a[i]);
}
for (int i = 0; i < 4 ; i++) //从0开始,因此是i < 4
{
for (int j = 0; j < 3-i; j++) //当n个数字排序时,内层循环是n-i-1,表示的是比较次数
{
if (a[j] > a[j + 1]) //交换a[j]与a[j+1]的值
{
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
printf("\n排序后的结果是: \n");
for (int i = 0; i < 4; i++)
{
printf("%d\n",a[i]);
}
return 0;
}
运行结果如下:
楼主的代码有三个大问题,第一,你定义的数组只有4个数,而for循环却循环了5次,第二,代码缩进混乱,可读性很低,第三,第5行的d是哪来的?总之还得多加练习,代码中的小细节还是要注意一下的。
以下是修改后的代码:
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int main(){
int ans[4]={0},i,j,temp;
for(i=0;i<4;i++){
scanf("%d",&ans[i]);
}
for(i=0;i<4;i++){
for(j=0;j<4-i;j++){
if(ans[j]>ans[j+1])
temp=ans[j],ans[j]=ans[j+1],ans[j+1]=temp;
}
}
for(i=0;i<4;i++){
printf("%d ",ans[i]);
}
printf("\n");
return 0;
}
数组只有4个元素,但循环确实循环了5次啊
将<=4改为<4
双循环改为
for(i=0;i<3;i++)
for(j=0;j<3-i;j++)
i<=4改成 i<4
for循环i<=4改为i<4
j<=4-i改为j<3-i
if判断条件改为:
d=aj,aj=aj+1,aj+1=d
i<4
应该是数组下标越界了
定义时把int a[4]换成int a[5]试试