有序数组二分法查找数值
#include <stdio.h> #define M 11 /** * 有序数组二分法查找数值 * low 最小值 * mid 中间值 * high 最大值 * val 输入值 * fount 判断值 1 找到 0 未找到 */ void main() { int low, mid, high, val, fount; static int arr[M] = {-12,-4,-1,0,11,22,44,67,89,90,111}; printf ("请输入一个数字:"); low = 0; high = M - 1; /* 对输入的内容合法性进行判断 */ while ( scanf("%d", &val) != 1 ) { printf("请入的是非法字符!!\n请重新输入\n"); getchar(); } while ( low <= high ) { mid = ( low + high ) / 2; if ( val == arr[mid] ) { fount = 1; break; } if ( val < arr[mid] ) { --high; } else { ++low; } } if ( fount == 1 ) { printf ("该数值存在,值%d是%d个\n", val, mid); } else { printf ("%d的值不存在\n", val); } }
修改了一下程序,加了对非法字符的检测,vc6.0 下测试通过