#include <stdio.h>
int main(){
int i = 0;
int j = 0;
int k = 0;
int a[10]={1,2,3,4,5,6,7,8,9,0};
for(i = 1;i <=10; i++)
{
if(a[i] < a[i-1])
{
k = a[i];
}
for(j = i - 1;j >= 0; j--)
{
if(a[j] > k)
a[j+1] = a[j];
else break;
}
a[j+1] = k;
}
for(i = 0;i<10;i++)
printf("%d ",a[i]);
return 0;
}
运行结果及报错内容
-2 0 0 0 0 0 0 0 0 0 请按任意键继续. . .
我想要达到的结果
0 1 2 3 4 5 6 7 8 9
第一
for(i = 1;i <=10; i++) 这里i <=10下标越界了,数组下标是从0开始的。定义数组长度为10,数组下标只能是0到9
改成
for(i = 1;i < 10; i++)
第二
for(j = i - 1;j >= 0; j--) 这个for和a[j+1] = k;都要放在if里面
你题目的解答代码如下:
#include <stdio.h>
int main(){
int i = 0;
int j = 0;
int k = 0;
int a[10]={1,2,3,4,5,6,7,8,9,0};
// for(i = 1;i <=10; i++)
for(i = 1;i < 10; i++)
{
if(a[i] < a[i-1])
{
k = a[i];
for(j = i - 1;j >= 0; j--) //这个for要放在if里面
{
if(a[j] > k)
a[j+1] = a[j];
else break;
}
a[j+1] = k;
} //if的}放这里
}
for(i = 0;i<10;i++)
printf("%d ",a[i]);
return 0;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
循环条件i<=10会越界
for(i = 1;i <=10; i++)
改为:
for(i = 1;i <10; i++)
没细看,一个明显的错误就是,第10行的<应该改成<=,否则会越界。
如图框中内容:数组越界了,a[10],数组大小为10,数组访问只能到a[9],因为数组索引是从0开始的。