关于C语言冒泡排序,结果不正确,怀疑是数组输入的问题,求原因!


#include "stdio.h"
#include "stdlib.h"
#define N 100
int main() 
{
    int a;
    scanf("%d",&a);

    int n[N] = { };
    int i, j, temp;
    for(i = 0; i < N; i++)
    scanf ("%d", &n[i]);

    for (i = 1; i <= a - 1; i++)
        for (j = i + 1; j <= a - 1; j++)
            if (n[j] > n[j + 1])
            {
                temp = n[j];
                n[j] = n[j + 1];
                n[j + 1] = temp;
            }
    
    for (i = 0; i < 10; i++)
    printf("%-4d", n[i]);

    return 0;
}

img

educoder第一关:相邻两数找最大


#include <stdio.h>
#include<stdlib.h>
#define N 100
 
int main ()
{ 
    /********** Begin **********/ 
    int a[N],n,i,j,t=0,flag;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d ",&a[i]);
    }
    for(i=0;i<n-1;i++)
    {
        flag=0;
        for(j=0;j<n-i-1;j++)
            if(a[i]>a[i+1])
            {
                t=a[i];
                a[i]=a[i+1];
                a[i+1]=t;
                flag=1;
            }
            else if(a[i]<a[i+1])
            {
                a[i]=a[i];
                a[i+1]=a[i+1];
            }
 
    }
    if(flag==1)
    {
        for(j=0;j<n;j++)
        printf("%d ",a[j]);
    }
    if(flag==0)
    {
        for(j=0;j<n-1;j++)
        printf("%d ",a[j-1]);
        printf("%d",a[j+1]);
    }
    /********** End **********/
    return 0;
}
 

第二关:冒泡排序


#include <stdio.h>
#include<stdlib.h>
#define N 100
int main ()
{
    /********** Begin **********/ 
    int a[N],n,i,j,k,t=0;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d ",&a[i]);
    }
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-1-i;j++)
        {
            if(a[j]>a[j+1])
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
            
        }
        for(k=0;k<n;k++)
            printf("%d ",a[k]);
        printf("\n");
        
    }   
    
 
 
    /********** End **********/    
    return 0;
}



12行应该是a,
for(i = 0; i < a; i++)

可以先把输入的数组打印出来看看。
两个for循环的下标应该从0开始,不然第1个数不参与比较了。

程序中错误的地方太多了,我给你重新修改了程序,调整了格式,如下所示:如有疑问,私信聊吧~

#include "stdio.h"
#include "stdlib.h"
//#define N 100
int main() 
{
    int N;
    scanf("%d",&N);
 
    int a[N];
    int i, j, temp;
    for(i = 0; i < N; i++)
        scanf ("%d", &a[i]);
 
    for (i = 0; i <= N - 1; i++)
    {
        for (j = i + 1; j <= N - 1; j++)
        {
            if (a[i] > a[j])
            {
                temp = a[j];
                a[j] = a[i];
                a[i] = temp;
            }
        }
    }
    for (i = 0; i < 10; i++)
        printf("%-4d", a[i]);
 
    return 0;
}

这段代码中有一个问题。在第14行的循环中,j 的值最大为 a-1,但是在第15行中,你试图访问 n[j+1],这可能会导致数组越界。你可以尝试将第14行的循环条件改为 j < a - 1。修改后:

#include "stdio.h"
#include "stdlib.h"
#define N 100
int main() {
    int a;
    scanf("%d",&a);
    int n[N] = { };
    int i, j, temp;
    for(i = 0; i < N; i++)
        scanf ("%d", &n[i]);
    for (i = 1; i <= a - 1; i++)
        for (j = i + 1; j < a - 1; j++)
            if (n[j] > n[j + 1]) {
                temp = n[j];
                n[j] = n[j + 1];
                n[j + 1] = temp;
            }
    for (i = 0; i < 10; i++)
        printf("%-4d", n[i]);
    return 0;
}