当前位置: 代码迷 >> C语言 >> 到底错在那里????
  详细解决方案

到底错在那里????

热度:123   发布时间:2006-05-21 14:33:00.0
到底错在那里????

这是一个一维数组的问题:已有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。
#include<stdio.h>
#include<conio.h>

int main(void)
{
int a[9]={-98,-45,-36,0,12,23,85,98};
int i,j,k;
scanf("%d",&i);
for(j=0;j<8;j++)
if(i<a[j])
break;
k=j;
a[k]=i;
for(j=8;j>=k;j--)
a[j+1]=a[j];
for(k=0;k<9;k++)
printf("%d ",i);
getch();
}
当输入了一个数之后,能把它排出顺序,但是它会把一下也盖掉的!!
如:输入一个数学为“5”,则输出的排序为:-98,-45,-36,0,5,5,23,85,98
请高手指教,其中错在那里!!!


----------------解决方案--------------------------------------------------------

写一串数字自己模拟下,看看问题


----------------解决方案--------------------------------------------------------
for(j=8;j>=k;j--)
a[j+1]=a[j];


8在那里
----------------解决方案--------------------------------------------------------

小弟不明,8不是可以临时赋值勤的吗?
还有写一串字符串去模拟一下,又应该怎么样去做,还是不明!!


----------------解决方案--------------------------------------------------------
以下是引用caizhihong在2006-5-21 15:48:00的发言:

小弟不明,8不是可以临时赋值勤的吗?
还有写一串字符串去模拟一下,又应该怎么样去做,还是不明!!

8出现了,9怎么办,自己好好想想
----------------解决方案--------------------------------------------------------

#include<stdio.h>
#include<conio.h>

int main(void)
{
int a[9] = {-98,-45,-36,0,12,23,85,98}, value, j, k;

scanf("%d", &value);

for (j = 0; j < 8; j++)
{
if ( value < a[j])
{
break;
}
}

k = j;

for(j = 7; j >= k; j--)
{
a[j + 1] = a[j];
}
a[k] = value;

for(k = 0; k < 9; k++)
printf("%d ",a[k]);
printf("\n");

getch();
return 0;
}



----------------解决方案--------------------------------------------------------
#include<stdio.h>
#include<conio.h>

int main(void)
{
int a[9]={-98,-45,-36,0,12,23,85,98};
int i,j,k;
scanf("%d",&i);
for(j=0;j<8;j++)
if(i<a[j])
break;
k=j;
a[k]=i; /*原始的a[k]未保存就被你给删了*/
for(j=8;j>=k;j--)
a[j+1]=a[j];
for(k=0;k<9;k++)
printf("%d ",i);
getch();
}

----------------解决方案--------------------------------------------------------

六楼,真好!!
谢谢了,今天真使我矛塞顿开!!


----------------解决方案--------------------------------------------------------
  相关解决方案