输入十个整数把他们从小到大排列 之后在输入一个数插入数列 插入后的数列仍然按从小到大排列 问题无法正确排列插入数字后的数列 刚入门的学生编的

//2100201111 高许淇
#include<stdio.h>
main()
{
int i,j,a[10],e;
int k,num,t,d;
printf("Please enter your ten num:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(j=1;j<i;j++)
t=a[j-1];
if(a[j-1]>a[j])
{
a[j]=t;
a[j-1]=a[j];
}
else
{
printf("%d",a[j]);
}
printf("\n after moving:\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
scanf("%d",&k);
for(e=0;e<i+1;e++)
if(k>a[e])
{
a[e]=k;
a[e+1]=a[e];
}
for(i=0;i<11;i++)
printf("%2d",a[i]);
printf("\n");
}

img

首先,你要知道for循环你不加括号的话,只执行他下面的第一句,剩下的都没有进入循环,然后就是你的交换两个数写的也有问题,我们假设 a[0] = 2; a[1] = 1; 那你这里先让 t = 2,然后判断 2>1之后,你让 a[1] = 2;
然后又让 a[0] = a[1]; 这个时候你就把这两位全部变成 2了,这里你得交换两行的顺序(如果要交换的话),你这么写

t = a[j - 1];
a[j - 1] = a[j];
a[j] = t;  //这个你可以在纸上画画,想一下这个流程,我在记忆的时候,感觉他们像是成语接龙一样,希望可以帮到你

然后你的数组长度也不够,你看你分配的是10,你现在又要插入一个数据,11个数据怎么放到10个空间的数组里呢,对不,所以你分配的时候分配长一点,要保证你输入的数据能够放进去

在一个就是有时候不用创建那么多变量,变量的创建应该以简洁明了为标准,比方说我申请了一个叫num的int类型的变量,那一眼看过去就知道这就代表的是一个数字,你不会想到他是一个字母呀啥的,当然现在这个程序不用这么复杂,只要你知道 i,j 代表的是啥就行,数据多了肯定给他们起个名字好一点,至于为什么要少申请几个就是因为,当你在大程序的时候没有那么多空间给你分配,你申请的变量又有重复功能,所以就会造成资源浪费,虽然现在电脑内存足够大,但是我觉得一下开辟这么多变量总归不是个好习惯,就像你的排序循环,第一个用的是 i,j 第二个有用了e,其实都可以用 i,j
这样在阅读代码的时候,你就可以告诉自己,i 就是这个外层循环,负责遍历整个数组,j 就是内层循环,负责排序好的数组的遍历,这样就会少记一个e的功能,对于大程序的可读性我觉得是有帮助的

代码给你改好了,如下

#include<stdio.h>
int main()
{
    int i,j,a[20] = {0},e;
    int k,num,t,d;
    printf("Please enter your ten num:\n");
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
        for(j=0;j<i;j++)
        {
            if(a[j]>a[i])
            {
                t=a[j];
                a[j]=a[i];
                a[i]=t;
            }
        }
    }
    printf("\n after moving:\n");
    for(i=0;i<10;i++)
        printf("%d ",a[i]);
    printf("\n");
    scanf("%d",&k);
    for(j = 0;j<i;j++)
        if(a[j]>k)
        {
            t=a[j];
            a[j]=k;
            k=t;
        }
    a[j] = k;
    for(i=0;i<11;i++)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}

选用的是插入排序,当然你也可以用别的排序方法再试试,如果有问题可以私信我

main()
{
int i,j,a[10],e;//最好声明成a[11].或者a[]
int k,num,t,d;
printf("Please enter your ten num:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
/* 这段是干啥呢,迷幻操作。
for(j=1;j<i;j++)
t=a[j-1]; //for只循环了这一条。
if(a[j-1]>a[j])
{
a[j]=t;
a[j-1]=a[j];
}
else
{
printf("%d",a[j]);
}
printf("\n after moving:\n");
*/
for(i=0;i<10;i++)
printf("%d",a[i]);
scanf("%d",&k);

for(e=0;e<10;e++)。
{
/*K把比它小的都覆盖了
if(k>a[e])
{
a[e]=k;
a[e+1]=a[e];
}
*/
if(k<a[e])
{
d=a[e];
a[e]=k;
k=d;
}
}
a[10]=k;
for(i=0;i<11;i++)
printf("%2d",a[i]);
printf("\n");
}