2 misskally misskally 于 2015.06.06 21:02 提问

关于C语言排序起泡算法的问题

#include
void main()
{
int a, b, c, d; int x[9];
for (a = 1; a<=10;a++)
{
scanf_s("%d", &x[a]);
}
for (b = 1; b<=100; b++)
{
for (c = 0; c < 10-a; c++)
{
if (x[c+1] < x[c])
{
d = x[c];
x[c] = x[c+1];
x[c+1] = d;
}
}
}
for (a = 0; a < 10; a++)printf("%d\n", x[a]);
}
请问这段程序有什么问题;
在VS2013中编译运行时总出现![图片说明](http://img.ask.csdn.net/upload/201506/06/1433595764_329334.png)图片说明

14个回答

91program
91program   Ds   Rxr 2015.06.06 21:10

当a等于10时,x越界了!

91program
91program 等于9时也一样
2 年多之前 回复
a1193561652
a1193561652   Rxr 2015.06.06 21:16

数组大小为9,for循环的a是1到10;明显越界了,而且x[0]访问不到。

Xing20150602
Xing20150602   2015.06.06 21:37

第一个循环对数组x[9]赋值
for(a=0;a<10;a++)
题主的赋值直接从a[1]开始,最后一个a[10]越界

baidu_28802459
baidu_28802459   2015.06.06 21:44

当a等于10时,那个x越界了

intheyoung
intheyoung   2015.06.06 21:46

赋值直接从a[1]开始,最后一个a[10]越界

yunfenglw
yunfenglw   2015.06.06 22:11

你数一下for (a = 0; a < 10; a++)
a从[0,10)是几个元素,而 int x[9]定义了几个元素~
一般循环写作[0,a)左闭右开的形式~这样写的原因是:a是要计数的次数,很明显。这里a应赋值整形数组元素个数9~

lyl00ling
lyl00ling   2015.06.06 23:08

int x[9];
for (a = 1; a<=10;a++)//此处有10个数,而你x数组只定义了9个,数组越界。
scanf_s("%d", &x[a]);

for (a = 0; a < 10; a++)//看你的意思是要全部输出,此处的输出时要保持和输入一样,不然会出错
printf("%d\n", x[a]);

qq_26168717
qq_26168717   2015.06.07 00:08

int arr[10]=[1,34,56,6,78,8,9,0,8,78];
int a;
for (int i = 0; i {
for (int j = 0; j {
//假如是升序
if (arr[j]>arr[j+1])
{
a = arr[j];
arr[j] = arr[j+1];
arr[j+1] = a;
}
}

}

for (int i = 0 ; i<10; i++)
{
printf("%d",arr[i]);
}

u011988082
u011988082   2015.06.07 08:56

数组超过范围了a[10]

u011988082
u011988082   2015.06.07 08:56

数组超过范围了a[10]

共14条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片