读完第四章,依然感觉迷茫,作者举的例子似乎很简单,但其中蕴含着深刻的编程原理,即程序验证——如何编写正确的程序。
作者在本章语重心长地强调了程序验证对于正确地编写程序的重要性。他说:“编写简单的代码通常是得到正确程序的关键。当我们编写程序的时候,经常会出现这样的情况,”困难“的部分第一次就可以正确运行,而那些”容易“的部分往往会出毛病。”我自己在编程过程中,也有这种感受,有时候一个程序debug半天,最后发现出错的地方竟是一个很不起眼的小错误。譬如:在if判断语句中,把“==”写成了“=”。若以,我觉得这是我们每一个程序员值得深思反省的问题。不要忽视简单的细节。
另外,看完本章后,试着将二分搜索的递归和非递归程序写了下,果然并非想象的那般轻而易举,一不小心就一步一个坑啊!
下面是自己写的代码:
#include <stdio.h>
int binarySearchNonRecursive(int a[], int n, int element){//non-recursive
int i, j;
int low, high, middle, temp;
low = 0;
high = n-1;
while(low < high){
middle = (high+low) / 2;
if(element == a[middle]){
return middle;
}
else if(element > a[middle]){
low = middle + 1;
}
else{
high = middle - 1;
}
}
return -1;
}
int binarySearchRecursive(int a[], int low, int high, int element){
if(low > high){
return -1;
}
else{
int middle = (low+high) / 2;
if(a[middle] == element){
return middle;
}
else if(a[middle] > element){
return binarySearchRecursive(a, low, middle-1, element);
}
else{
return binarySearchRecursive(a, middle+1, high, element);
}
}
}
int main(){
int a[] = { 3, 5, 8, 12, 34, 45, 56, 78, 100, 108 };
int p = binarySearchNonRecursive(a, 10, 45);
printf("%d\n", p);
p = binarySearchRecursive(a, 0, 9, 100);
printf("%d\n", p);
return 0;
}