回覆列表
-
1 # 使用者5753778326384
-
2 # 使用者1844319796352
#include
#define N 80
int input(int *arr)
{
int *pnew=arr;
int count=0;
printf("請輸入整型資料(按q/Q退出:)\n");
while(1==scanf("%d",pnew)&&pnew
#include
#define N 80
int input(int *arr)
{
int *pnew=arr;
int count=0;
printf("請輸入整型資料(按q/Q退出:)\n");
while(1==scanf("%d",pnew)&&pnew
親,這程式碼格式和命名規則看起令人好心累。
在 func 函式中
本地變數 p,代表當前下標,被初始化為 0。
指標引數 k,指向內容代表——陣列中索引 <= p 的數(集合 {s[i]} i <=p)中的最大數的下標,被初始化為 0。
那麼初始化的正確性就是,p = 0 並且 s[0] 必然是 {s[0]} 中的最大數,所以 *k = 0
在 for 迴圈中,隨著 p 的向前推進,每次都判斷 s[p] 是否大於 s[0..p - 1] 的 最大值(也就是 s[*k])。如果大於,則 s[0..p] 的最大值是 s[p],且 *k = p。如果不是,則 s[0..p] 的最大值仍然是 s[*k],k 保持不變。
迴圈不變式證明演算法(邊界)正確性,在這裡也比較類似數學歸納法。
建議,在網上找個 C 程式碼規範學習下。然後掌握基本的迴圈不變式的含義。