求解答C语言编程改错题

来源:百度知道 编辑:UC知道 时间:2024/06/19 02:52:00
题目如下:
实现输入5个从小到大的有序整数,再输入一个整数x,把x插入到这组数据中,使该组数据依然有序。(不得删行或者增行,也不得改变程序的结构)

#include <stdio.h>
int main()
{int i,j,x,a[6];
printf("输入5个整数:");
for(i=0;i<5;i++)
scanf("%d",&a[i]);
printf("输入要插入的整数:");
scanf("%d",x);
for(i=0;i<5;i++){
if(x<a[i]) continue;
j=j-1;
while(j>=i){
a[j]=a[j+1];
j++;
}
a[i]=x;
break;
}
if(j==5) a[j]=x;
for(i=0;i<6;i++)
printf("%d",a[i]);
putchar('\n');
return 0;
}

不知道你要干什么啊。
先说说我看的时候发现的问题。
scanf("%d",x); //应该是scanf("%d",&x);
for(i=0;i<5;i++){
if(x<a[i]) continue;
j=j-1;//j都没有初始值。j-1值不确定
while(j>=i){
a[j]=a[j+1];
j++; //这个while循环你想做什么??是想插入后重新排序吗?
}
我按我的理解帮你修改了下,且帮你稍微解释下
#include <stdio.h>
int main()
{
int i,j,x,a[6];
printf("输入5个整数:");
for(i=0;i<5;i++)
scanf("%d",&a[i]);
printf("输入要插入的整数:");
scanf("%d",&x);
for(i=0;i<5;i++){
if(x<a[i])
break; //查找需要插入的位置,找到后直接打破循环
}

j=5;
while(j>i){
a[j]=a[j-1];
j--;
} //对插入后面的数后移需要从最后一个开始。原因可以自己用数字试下。
a[i]=x;
//break;
// }
//if(j==5)
//a[j]=x;//这段可以去掉的原因是因为上面的a[i] = x;多此if判断没有必要。因为当你要插入的数x大于所有已存数a[0]到a[4]时i已经是5,j为5不会大于i不走while循环,a[i]=x相当于a[5]=x;
for(i=0;i<6;i++)
printf("%d",a[i]);
p