C语言 排序数组为什么运行出来只有第一个数字,怎么改(非计算机专业学生狗哭死了)

img

直接上代码,关键的地方给出了注释:【望楼主采纳】

#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;
}

运行结果如下:

img

楼主的代码有三个大问题,第一,你定义的数组只有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

img

应该是数组下标越界了
定义时把int a[4]换成int a[5]试试