被注释的地方如果给定义任何一个无关变量并赋值,程序的运算结果就不一样了,这是为什么?求赐教

被注释的地方如果给定义任何一个无关变量并赋值,程序的运算结果就不一样了,这是为什么?

#include

main()//冒泡排序
{

int a[5],i,t;
printf("请输入五个数:\n");
for(i=0;i<5;i++)
scanf("%d",&a[i]);

for(int j=5;j>1;j--)
{

// int m=1;
for(i=0;i {
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}
for(i=0;i<5;i++)
printf(" %d",a[i]);
}
图片说明图片说明

准确来说你在这里写这个int m=1;的写法就是错误的
C语言的语法比较严格,一般来说变量的定义要放在所有执行语句之前
源文件保存为.c格式的话变量只能定义在最前,否则会报错,若保存为.cpp格式的话,变量定义可以不用在最前面
我的猜测是这里虽然错误的写法程序通过了,应该是程序底端或者编译器把它识别成了别的东西,所以导致出现数据错误
学习C语言的话,最好还是按照C语言语法规范要求写
把变量的定义要放在所有执行语句之前
如果帮到你了还望采纳一下

冒泡算法写错啦~

首先贴上来的代码在冒泡排序的部分有问题,其次根据我的理解我把它写成了这个样子

int main(void) //冒泡排序
{

    int a[5], i, t;
    printf("请输入五个数:\n");
    for (i = 0; i < 5; i++)
        scanf("%d", &a[i]);

    for (int j = 5; j > 1; j--)
    {
        int m = 1;
        for (i = 0; i < j; i++)
        {
            if (a[i] > a[i + 1])
            {
                t = a[i];
                a[i] = a[i + 1];
                a[i + 1] = t;
            }
        }
    }
    for (i = 0; i < 5; i++)
        printf(" %d", a[i]);
}

这样的确会出问题,而且跟你上面给出的结果一模一样

原因来自于 第二个for循环中你的j变量最大为5,于是你的i+1最大值为5,但是**数组长度为5,下标最大为4**这样才是合理的.

改正前:for (i = 0; i < j ; i++)

改正后: for (i = 0; i < (j - 1); i++)

小伙子编写要细心哦~

【关于变量定义】

楼上有说C语言只支持在函数开头定义变量,这个在C89标准前的确是这样的,但是从 C99 标准推行开始后,C语言也可以使用

 for(int i = 0;i<99;i++){}

这类随处定义的变量,但是为了迎合一个好的编程习惯,建议还是一个花括号里面在最前面定义所有变量,更加容易排错和代码review奥~
C89 标准 上面的写法会直接报错的,不跟你多bb,会不出现可以执行但结果出错的问题;