快速閱讀裘宗燕《從問題到程式》1 6章問題總結

2022-08-09 06:18:11 字數 2495 閱讀 5782

1.提出問題

電腦程式的編寫從問題機器語言發展到組合語言,再突破到各式各樣的高階語言,逐步切合人類的理解力,極大簡化了程式設計。由於英文程式設計起步早以及方便性,至今基本全部還是在使用英文程式設計,為什麼使用漢字實現程式設計普及如此困難?(在使用vs程式設計時,發現軟體編碼使用的是utf編碼,解碼後在視窗顯示時所使用的解碼是gbk,所以視窗上漢字的顯示出現了亂碼,因此引發思考)
2.問題解答
由於我們所使用的鍵盤都是輸入字母,如果要用中文來寫,首先還要通過輸入法把那些字母轉換成漢字,但是對於英文就不需要這層轉化。於是,如果用中文,不得不說別說更容易理解,反而增加了麻煩,降低了效率。也就是說,誰方便快捷就選擇誰,科技的發展跟國界和地域都沒有太直接的關係,如果中文更好,自然有很多人使用中文。

然而,中文程式設計雖然很早就出現過,為何卻沒有流行起來呢。首先,這與我國的計算機的技術有關,中國計算機技術發展相對於美國來說晚了一些。因此我國的程式設計套路早就形成了,也就是說,早就習慣於使用英文編寫。即使能夠開發一套中文程式設計,不僅需要很大的成本,想要拓展也是有一定難度的。而且,程式設計所需的技術要求也是很高的,我國現有的技術未必能開發出比英文程式設計更加實用的中文程式設計。也正因為如此,中文程式設計在某種程度上制約了我國發展。因為電腦不是中國發明的,程式設計也同樣不是。

1.提出問題
由於自動轉換型別,sin(整型引數表示式)時,int型會先自動轉成double型,然後再呼叫sin函式計算,試分析程式執行過程中,在哪些地方發生型別轉換?(此問題是看書時文章中發現的,做個小筆記)
2.問題解答
雖然引數表示式計算出來的int值能轉換成double值後送給sin函式,但引數表示式是在整數型別中計算
1.提出問題
for迴圈與while迴圈的適用場合?這兩者誰的執行效率高?(看到for語句與while語句的原理時,雖說內容比較基礎,但是我突然想到在軟體開發過程中一般會使用更高效、更優質的語句,來提高整個軟體的執行效率,由於這兩個語句功能相似,所以我想拿出來做個比較)
2.問題解答
for迴圈更適用於迴圈的開始和結束已知,迴圈次數固定的;while迴圈更適合於條件不確定的場合。兩者的執行效率暫沒有明確說法,依具體應用場景而定。
1.提出問題
用enum關鍵字說明常量有什麼好處?(此處屬於在我看了書中介紹的enum之後,對enum這個概念仍然不理解,因此借助提問學習一下)
2.問題解答
(1)用enum關鍵字說明的常量由編譯程式自動生成,程式設計師不需要用手工對常量一一賦值。

(2)用enum關鍵字說明常量使程式更清晰易讀,因為在定義enum常量的同時也定義了乙個列舉型別識別符號

(3)在除錯程式時通常可以檢查列舉常量,這一點是非常有用的,尤其在不得不手工檢查標頭檔案中的常量值時。

注:用enum關鍵字說明常量比用#define指令說明常量要占用更多的記憶體,因為前者需要分配記憶體來儲存常量。

1.提出問題
(1)函式原型的作用?(5.3.5中介紹了函式原型的形式、應用場景等,引發我想要探索函式原型的底層工作原理的好奇)

(2)在getchar()函式的輸入下同時輸入多個字元會怎麼樣?(在5.8.2 加密與解密的例子中,我發現利用getchar()輸入多個字元後,經過簡單加密處理後的字元,可以依次全部輸出出來,跟我想象中的不一樣,故引發思考)

(3)c語言中使用eof執行後,怎麼結束輸入?(書中程式中用到eof,但我不知道其作用,故做此問題筆記)

2.問題解答
(1)首先,我們都知道原型的作用是給編譯器用的,讓編譯器來檢查各種東西,比如返回型別,引數列表、型別等,然後在呼叫時就會看我們的呼叫是否符合原型宣告。那要用原型來解決的到底是什麼問題呢?這裡我來說一下和函式呼叫相關的內容。函式怎麼返回值。通常,函式會通過將返回值複製到乙個暫存器或者記憶體單元中來將其返回。隨後,呼叫函式會檢視該暫存器或記憶體單元。返回函式和呼叫函式必須就該記憶體單元中儲存的資料的型別達成一致,這樣呼叫函式才知道要去取多少位元組並如何解釋這些取回來的資料。而函式原型就說明了被呼叫函式的返回值型別,然後編譯器會檢查接收返回值的呼叫函式是否用同樣的型別進行了接收,如果不同就會報錯。

(2)getchar()的返回值是使用者輸入字元的ascii碼。在輸入多個字元後按兩次回車,字元便會被存放至緩衝區中,直至在此按回車,字串流會依次字元流中每次讀取乙個字元。

(3)按ctrl+z,回車即可退出。

1.提出問題
6.4.5中提到了sizeof()運算子。從函式外傳進來的引數陣列,當我在函式裡用到sizeof()時,能否利用sizeof運算子,由形式引數出發計算出實際引數陣列的大小呢?(在閱讀書中例子時發現)
2.問題解答
在書中找到一些解答,如下:函式裡對陣列形參使用sizeof,求出的是這個形參(這是乙個區域性變數)的大小,而不會是某次呼叫的實際引數陣列的大小。sizeof是編譯時處理的運算子,編譯後「sizeof 變數名」被實際求出的乙個整數值取代。對陣列形參的sizeof求出的是乙個指標的大小,與實參陣列無關。 

對於這個解答後半部分還不理解,後面學完後再回過來看!

(學習日記)裘宗燕 C C 語言中的表示式求值

在c primer第四版 5.10.3節求值順序也講解的很清楚。另外,列出我遇到的乙個可以作為例項的問題,也曾經發帖求問過,帖子在上面貼出的文章可以解答下面問題。primer上有個題,編碼如下 vector iterator iter spvec.begin while iter spvec.end...

如何快速閱讀

如何快速閱讀 究竟怎樣才能快速讀懂一篇文章或者一本書?這其實並不難,只需養成下面的8個習。步驟1.形成默讀習慣。經常閱讀的朋友都知道,有聲朗讀和默讀的差別是十分明顯的。各用作用不同,如老師上課,主持人播音和演員表演就必須出聲表達 但對自己看書和學習而言,就必須克服落後聲讀習慣,加快閱讀速度。實驗表明...

怎樣快速閱讀

1.形成默讀習慣。經常閱讀的朋友都知道,有聲朗讀和默讀的差別是十分明顯的。各用作用不同,如老師上課,主持人播音和演員表演就必須出聲表達 但對自己看書和學習而言,就必須克服落後聲讀習慣,加快閱讀速度。實驗表明,朗讀每分鐘最快約200字,而默讀每分鐘最快可達到800字左右,甚至還會更多。這是因為,默讀時...