首先,scanf里面赋值的参数要是地址而不是值,也就是你该写成&a[i]
然后就是数组下标是从0开始到元素个数减1,你定义的是20,下标就是0-19,不存在20这个下标,而你所有用的都是1-20,这是个基本概念
最后就是,冒泡排序比较次数是n-1,也就是说每一次都是那当前的数和下一数比,那么也就是到了倒数第二个和最后一个比就完成了比较,比较过程循环变量不应该出现最后一个下标,你的20个元素,应该最后是18和19比较,而你到20在比较,就溢出了
改后程序如下:
#include "stdio.h"
void main()
{ int i,j,a[20],tmp;
for (i=0;i<20;i++)
{ printf("请输入第%d个数字:",i);
scanf("%d",&a[i]);
}
for(i=0;i<20-1;i++)
{ for(j=0;j<20-1;j++)
{if(a[j]>=a[j+1])
{ tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
for(i=0;i<20;i++)
printf("%d",a[i]);}
◆◆
评论读取中....
请登录后再发表评论!
◆◆
修改失败,请稍后尝试