C语言冒泡排序,报错如何修改


//使用冒泡排序的方法,对输入的n个数进行从小到大排序


#include <stdio.h>  
int main()
{
    int n, i,
    scanf("%d", &n);
    int a[n];
    for (i=0; i<n; i++)
        scanf("%d", &a[i]);
    int j, k, swap;
    for (j=0; j<n-1; j++)
    {
        for (k=0; k<n-1-i; k++)  //判断是否交换的次数随轮次的增加而减少(因为上一轮已经把大的排后面了)
        {
            if (a[k]>a[k+1])
            {
                swap=a[k];
                a[k]=a[k+1];
                a[k+1]=swap;
            }
        }
    }
    for(i=0; i<n; i++)
        printf("%d ", a[i]);
    
    return 0;
}

/*报错:
c:5:11: error: expected declaration specifiers or '...' before string constant
     scanf("%d", &n);
           ^~~~
c:5:17: error: expected declaration specifiers or '...' before '&' token
     scanf("%d", &n);
                 ^
*/

请问以上报错是什么意思,怎么修改代码


int a[n];//不能这样动态定义的
//使用函数调用方案,参考

#include<stdio.h>
void bubble_sort(int arr[],int sz)//参数类型解释②
{
    for (int i = 0; i < sz-1; i++)
    {
        for (int j = 0; j <sz-1-i; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}
int main()
{
    int arr[] = { 9,8,7,4,5,6,1,2,3,0 };
    int sz = sizeof(arr) / sizeof(arr[0]);//变量sz位置及计算注意事项①
    bubble_sort(arr,sz);//参数类型解释②
    for (int i = 0; i < 10; i++)//输出交换后的数组
    {
        printf("%d  ", arr[i]);
    }
    return 0;
}

用的什么编辑器?数组长度不能用变量,当然有些编辑器用变量也行,建议给足够长度,第一行int n,i;后面是分号,不是逗号。有帮助的话采纳一下哦!

#include <stdio.h>
int main()
{
    int n;
    printf("请输入数组里值的个数(1~100):"); //先输入要排序的数字的个数
    scanf("%d",&n);
    int i;
    int arr[100] = {0};
    printf("请输入数组:");       //输入要排序的任意值
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);  //向数组输入值
    }
    for ( i = 0; i < n - 1; i++)  //进行n-1次排序
    {
        for (int j = 0; j < n - 1 - i; j++)  //相邻的数两两进行比较,每排序一次,最后一个数固定
        {
            if (arr[j] > arr[j + 1])//j为下标,前一个数大于后一个,则交换这两个数
            {
                int t = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = t;
            }
 
        }
    }
    printf("排序后为:");
    for (int i = 0; i < n; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

在这个编译器里 数组常数不能以变量n来指定,必须得是常量数字才能表示数组长度