当前位置:编程学习 > C/C++ >>

c语言中程序循环

#include "stdio.h"
#include "stdlib.h"
int main()
{
 int a[15],i,mid,top=0,number,flag=1,botte=14,t,m;
 char c=0;
 scanf("%d",&a[0]);
 for(i=1;i<15;i++)
 {
  scanf("%d",&a[i]);
  if(a[i]<=a[i-1])
  {i--;
   printf("input this number again:\n");
  }
 }
 printf("\n");
 for(i=0;i<15;i++)
 printf("%-4d",a[i]);
 printf("\n");
 while(flag)
 {
  t=0;
  m=1;
  printf("input the number you search:\n");
 scanf("%d",&number);
 if(number<a[0]||number>a[14])
 m=0;
 while(top<=botte&&t!=1)
 {
  mid=(top+botte)/2;
 if(a[mid]==number)
 {
  printf("has found %d,its position is %d\n",number,mid+1);
  t=1;
 }
 else if(a[mid]>number)
 botte=mid+1;
 else top=mid-1;
 }
 if(m==0||t!=1)
 printf("cant find %d\n",number);
 printf("是否继续查找y/n\n");
 scanf("%c",&c);
 if(c=='N'||c=='n') flag=0;
 }
 system("pause");
 return 0;
}
为什么不能执行它的循环搜索功能,错在哪里?
追问:来自手机问问我这个mid不能去啊,要实现分半法搜索的思想啊
答案:mid=(top+botte)/2;
你这句上有问题呀,你mid这个变量第一次进来的时候,按你上面给的初始值就等于个7了,所以只能从数组中第7位个开始,你把这个变量给成0应当就OK了,mid=(top+botte)/2;改成mid=0;

啊,还有就是写有太乱了呀,好多东西是没必要的

scanf("%d",&a[0]);a是数组名,赋值不需要&,直接写就行,后面的那几个也是,不需要这个符号。只有非数组和指针的变量才要这个符号。
你的数组循环是从1开始的啊!数组元素都是从0开始的。应该是for(i=0;i<15;i++)

上一个:菜鸟想学习C语言
下一个:C语言程序求改错

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,