K R學習筆記 第三章

2021-06-16 16:07:18 字數 1264 閱讀 9037

這一章講控制流,基本就是if-else、while、do-while、switch-case之類的。基本的東西大家都懂。需要強調的是在預設狀態下,if-else語句中的else是與之前最近的if匹配的,所以如果這不是你的本意,那麼最好加上大括號括起來。其實我幾乎不會犯這個錯誤,因為我寫程式時,習慣於即便if後面只有一條語句,我也會打上括號(這個習慣好像是看c++primer上養成的)。

書中給出了乙個shell排序演算法的程式

void shellsort(int v, int n)

}

恕我愚鈍,我至今還沒有完全弄明白它是怎麼搞的。一般人的shell排序演算法寫不了這麼簡潔。

這個程式也讓我感想頗多,大牛有時候是不一定會考慮小白們的感受的,就好比有時候數學書上的一句「顯然……」,就可能難倒一大片學生。不光是中國人喜歡簡潔、漂亮的東西(比如同濟的《高等數學》,其實那本書寫的很不錯),國外的人也一樣。但是國外的入門書籍一般都會煞費苦心的蘿莉囉嗦的講很多東西,國內的很多書可沒有這個耐心。

書裡面有個習題很有意思,就是將數字轉化為對應的字串:

void itoa(int n, char s)

while ((n /= 10) > 0); /* delete it */

if (sign < 0)

s[i++] = '-';

s[i] = '\0';

reverse(s);

}

但是在習題中,告訴你這個程式是不能轉化最小的負數的:即-2^(n-1),這是因為通過程式,可以看出,這段**先提取正負號,然後把剩下的數字轉化為對應的字元。但是當遇到最小的負數時,因為n位能表達的最大的數字是2^(n-1)-1(有一位用作符號位了),所以不能簡單地採用對於負數,先求出他的相反數,然後利用這個相反數化成字串,最後在前面補上負號來實現。對於這種特殊的情況,可以採用對於每次求模運算時計算絕對值,最後補上負號來繞過這個問題:

#define abs(x) ((x)<0 ? -(x):(x))

void reverse(char s)

}void itoa(int n, char s)

while((n /= 10) != 0);

if(sign < 0)

s[i++] = '-';

s[i] = '\0';

reverse(s);

}

這個例子也提醒我們,寫程式時,有時候還是需要注意體層和一些邊界值情況,否則有可能出錯的。

第三章學習筆記

執行執行緒,簡稱執行緒,是在程序中活動的物件。核心排程的物件是執行緒,而不是程序。程序描述符中包含的資料能完整地描述乙個正在執行的程式 各種狀態之間存在轉換的條件,若滿足則進行轉換,跟模擬電路中所學的狀態機是乙個道理。通過st task state task,state 函式來設定當前程序狀態 fo...

第三章筆記

第三章預習筆記 一 高階語言和機器指令中的運算 1,按位運算 符號 按位or運算 符號 按位and運算 符號 表示按位not運算 符號 按位xor運算。實現掩碼操作 通過與給定的乙個位模式進行按位與,可以提取所需要的位,對這些位進行 置1 清0 等。2,符號 按位or運算 符號 表示and運算 符號...

Asp學習筆記第三章

2006 07 20 20 03 07 asp學習筆記第三章 一 收集客戶端資料到伺服器語句request 1.表單頁面 這句一定要放到表單標籤的第一行 2.處理表單頁面 dim id,pwd id request.form id1 pwd request.form pwd1 if isempty ...