|

楼主 |
发表于 2014-3-27 14:36:34
|
显示全部楼层
- #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]之间的时候,程序直接跳到结尾处,而不执行后面的语句。
百思不得其解,等待解答中……谢谢。。。 |
|