75日目 K&R3.3と格闘中

なんか基本をおざなりにしたまま進んでしまった感がある…
とりあえずbinsearch()を使える形にしてみた。
array[]の要素とsを、自分で入力した値でできるように修正しないといけないね。

// from K&R p.58 (Japansese p.70)


#include <stdio.h>

int binsearch(int x, int v[], int n);

int main()
{
	int s, array[6] = {12, 25, 33, 46, 58}, i, num;
	s = 22;
	i = 0;

	printf("s = %d\n", s);		// print s

	printf("array[] = ");		// print array for sure
	for(i = 0; i < 5; i++)
		printf("%d ", array[i]);
	printf("\n\n");

	num = binsearch(s, array, i);

	if (num != -1)				//check if s is found or not
		printf("s is found at %d", num + 1);
	else 
		printf("s is not found in array[]");

	return 0;
}

/* binsearch: find x in v[0] <= v[1] <= ... <v[n-1] */

int binsearch(int x, int v[], int n)
{
	int low, high, mid;

	low = 0;
	high = n - 1;
	while (low <= high) {
		mid = (low + high) / 2;
		if (x < v[mid])				// focuses on the lower half
			high = mid -1;
		else if (x > v[mid])		// on the upper half
			low = mid+1;
		else					// found match
			return mid;
	}
	return -1;					// no match
}

実行結果

s = 25
array[] = 12 25 33 46 58

s is found at 2

このsの値をいじくるのをファイル書き換え→再コンパイルってやってるのが恥ずかしいな。
getchar云々がいまだに頭に染み付いてないので本見ないとできない

s = 22
array[] = 12 25 33 46 58

s is not found

今回やりたいことは、課題(Excercise)の3.1なのでそこまでどうにかたどり着けるようがんばる。