被注释的地方如果给定义任何一个无关变量并赋值,程序的运算结果就不一样了,这是为什么?
#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,会不出现可以执行但结果出错的问题;