一,概述
主要講解如何保證程式設計的正確性。在程式中加入斷言(assert(斷言內容) //如果錯誤,則終止程式。否則正常執行)。
typdef //宣告自定義型別
typedef int size; //宣告int 型整數的別名
size array[4];
typedef struct tagnode
*pnode;
測試結構題大小的程式
#include "stdio.h"
typedef struct tagnode
*pnode;
int main()
二,習題
5)測試、斷言優化過程
for (i = 0; i < n - 1; ++i)
assert(a[i] < a[i+1]);
如何利用二分的性質來進行處理還是乙個問題。
一種辦法是:
int bs(int *a, int b, int e, int v)
return -1;
}
但是這個方法需要多次使用才能檢測出來,也就是可能在查詢某兩個數的時候不會報錯,可能在查詢別的幾個數的時候就報錯了。很多時候,這不是一種好選擇。
根據第五題的題意,可以寫如下**來減少每次檢測的量。
int bs(int *a, int b, int e, int v)
while (begin < end)
return -1;
}
加乙個static變數來記錄這個陣列是否經過檢測,來決定以後的檢測還需要進行。
當然對於多個陣列的檢測,可以利用hash來處理,因為一般來說,陣列的下標位址都是不一樣的。
[html]view plain
copy
for(i=
0;i<
n-1;++i)
assert(a[i]<
a[i+1]);
如何利用二分的性質來進行處理還是乙個問題。
一種辦法是:
[cpp]view plain
copy
intbs(
int*a,
intb,
inte,
intv)
return
-1; }
但是這個方法需要多次使用才能檢測出來,也就是可能在查詢某兩個數的時候不會報錯,可能在查詢別的幾個數的時候就報錯了。很多時候,這不是一種好選擇。
根據第五題的題意,可以寫如下**來減少每次檢測的量。
[cpp]view plain
copy
intbs(
int*a,
intb,
inte,
intv)
while
(begin
return
-1; }
加乙個static變數來記錄這個陣列是否經過檢測,來決定以後的檢測還需要進行。
當然對於多個陣列的檢測,可以利用hash來處理,因為一般來說,陣列的下標位址都是不一樣的。
9,,serch.c 源程式
#include #include #include #define maxn 1000000
typedef int datatype;
datatype x[maxn];
int n;
/* scaffolding */
int i = -999999;
#define assert(v)
/* alg 1: from programming pearls, column 4: raw transliteration */
int binarysearch1(datatype t)
}/* alg 2: make binarysearch1 more c-ish */
int binarysearch2(datatype t)
return -1;
}/* alg 3: from pp, col 8 */
int binarysearch3(datatype t)
if (u >= n || x[u] != t)
return -1;
return u;
}/* alg 4: from pp, col 9 */
int binarysearch4(datatype t)
/* alg 9: buggy, from programming pearls, column 5 */
int sorted()
int binarysearch9(datatype t)
} /* assert(x[l] > t && x[u] < t); */
return -1;
}/* alg 21: ****** sequential search */
int seqsearch1(datatype t)
/* alg 22: faster sequential search: sentinel */
int seqsearch2(datatype t)
/* alg 23: faster sequential search: loop unrolling */
int seqsearch3(datatype t)
if (x[i+1] == t)
if (x[i+2] == t)
if (x[i+3] == t)
if (x[i+4] == t)
if (x[i+5] == t)
if (x[i+6] == t)
if (x[i+7] == t)
} x[n] = hold;
if (i == n)
return -1;
else
return i;
}/* scaffolding to probe one algorithm */
void probe1()
}/* torture test one algorithm */
#define s seqsearch3
void test(int maxn)
assert(s(10*n - 5) == -1);
assert(s(10*n) == -1);
/* equal elements */
for (i = 0; i < n; i++)
x[i] = 10;
if (n == 0) else
assert(s(5) == -1);
assert(s(15) == -1); }}
/* timing */
int p[maxn];
void scramble(int n)
}void timedriver()
}} clicks = clock() - start;
printf("%d\t%d\t%d\t%d\t%g\n",
algnum, n, numtests, clicks,
1e9*clicks/((float) clocks_per_sec*n*numtests)); }}
/* main */
int main()
程式設計珠璣 第五章 程式設計小事
一,概述 主要講解如何保證程式設計的正確性。在程式中加入斷言 assert 斷言內容 如果錯誤,則終止程式。否則正常執行 typdef 宣告自定義型別 typedef int size 宣告int 型整數的別名 size array 4 測試結構題大小的程式 二,習題 5 測試 斷言優化過程 如何利...
程式設計珠璣第五章
直接來習題吧 1 第一題可以看一下林銳的高質量c c 程式設計 2 3 4 5 第五題很明顯不應該每次都用 for i 0 i n 1 i assert a i a i 1 如何利用二分的性質來進行處理還是乙個問題。一種辦法是 int bs int a,int b,int e,int v retur...
C程式設計第五章
include 10.前20項和 int main printf 12.10f sum return 0 11.小球10次 int main printf 十次高度 10.6f t經過距離 10.6f n h,s return 0 12.猴子吃桃 誰家的猴子家裡能放下一千多個桃 int main p...