#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中编译运行时总出现
当a等于10时,x越界了!
数组大小为9,for循环的a是1到10;明显越界了,而且x[0]访问不到。
第一个循环对数组x[9]赋值
for(a=0;a<10;a++)
题主的赋值直接从a[1]开始,最后一个a[10]越界
当a等于10时,那个x越界了
赋值直接从a[1]开始,最后一个a[10]越界
你数一下for (a = 0; a < 10; a++)
a从[0,10)是几个元素,而 int x[9]定义了几个元素~
一般循环写作[0,a)左闭右开的形式~这样写的原因是:a是要计数的次数,很明显。这里a应赋值整形数组元素个数9~
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]);
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]);
}
数组超过范围了a[10]
数组超过范围了a[10]
#include
main()
{
int a[10];
int i,j,t;
for(i=0;i scanf("%d",&a[i]);
printf("\n");
for(j=0;j 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<10;i++)
printf("%d\t",a[i]);
}
这是最简单的冒泡排序,升序和降序只是条件判断语句中符号的改变,记得数组下标数字从0开始,一般在for循环中不取等号
越界,出现这个对话框一般都是内存问题引起的系统中断。
for (b = 1; b<=100; b++) 这一句 b的值范围取错了, 10就行了
改了下你的代码 参考下 排成升序数组
for(b = 9; b; b--)
{
a = 0;
for(c = 0; c < b; c++)
{
if(x[c] > x[c+1])
{
d = x[c];
x[c] = x[c + 1];
x[c + 1] = d;
a = 1;
}
}
if(0 == a)
{
break;
}
}