#include<stdio.h>
void main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10},l=0,m=5,h=9,i,j,t,n,f;
int c[11];
for(i=0;i<10;i++)
{
printf("Input a[%d]:",i);
while(scanf("%d",&a[i])!=1)
{
printf("error! please Input a[%d] angin:",i);
getchar();
} //whlie循环,用以抵抗非法输入;
}
printf("\nthe array a[10] is :\n");
for(i=0;i<10;i++)
{
printf("%5d",a[i]);
}
for(i=0;i<10;i++)
{
for(j=0;j<9-i;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
} //两个for循环,用来对输入的数据进行排序;
printf("\npai xu hou:\n");
for(i=0;i<10;i++)
{
printf("%5d",a[i]);
c[i] = a[i];
}
putchar('\n');
printf("Input n:");
while(scanf("%d",&n)!=1)
{
printf("error! please input angin:");
getchar();
}
c[10] = n;
if(n<a[0]||n>a[9])
{
f=0;
goto loop;
}
while(l<h)
{
if(n==a[m])
{
f=1;
break;
}
if(n>a[m])
{
l=m+1;
m=(l+h)/2;
}
if(n<a[m])
{
h=m-1;
m=(l+h)/2;
}
}
loop:if(0==f)
{
printf("there is no %d\n",n);
for(i=0;i<11;i++)
{
for(j=0;j<10-i;j++)
{
if(c[j]>c[j+1])
{
t=c[j];
c[j]=c[j+1];
c[j+1]=t;
}
}
} //到这里为止。此段代码用于将不在数组中的数据插入数组,并重新排序。
printf("数组插入%d之后,排列为:\n",n);
for(i=0;i<11;i++)
{
printf("%5d",c[i]);
}
}
if(1==f)
{
printf("%d is a[%d]\n",n,m);
}
}
我自己又查了一下,改了几个错误,但还是不行。。。
单步调试的结果,当输入值n在a[0]和a[9]之间的时候,程序直接跳到结尾处,而不执行后面的语句。
百思不得其解,等待解答中……谢谢。。。 |