2024-2025-1 20241311 《計算機基礎與程式設計》第5周學習總結

20241311廖江泽發表於2024-10-26

學期 2024-2025-1 學號 20241311 《計算機基礎與程式設計》第5周學習總結

作業資訊

這個作業屬於哪個課程 <班級的連結>2024-2025-1-計算機基礎與程式設計
這個作業要求在哪裡 <作業要求的連結>(2024-2025-1計算機基礎與程式設計第五週作業)
這個作業的目標 <寫上具體方面>
作業正文 ... 本部落格連結

教材學習內容總結

"C語言程式設計第五版"第四章學習內容總結

算術運算、關係運算和邏輯運算

算術運算是數學中最基礎的加減乘除求餘等操作;關係運算是求兩個或多個變數或表示式之間的關係;邏輯運算是將多個變數或表示式連結起來的邏輯關係。在C語言中,將數值為1作為真,為0作為假,系統將值為非0的變數或表示式作為真,否則假。

條件語句

條件語句是C語言中用於實現分支結構的關鍵字,主要包括ifelse ifelse。透過這些關鍵字,可以根據不同的條件執行不同的程式碼塊。例如,if (a == b)表示如果a等於b,則執行if後面的程式碼塊。

迴圈語句

迴圈語句是C語言中用於實現迴圈結構的關鍵字,主要包括whiledo-whilefor。透過這些關鍵字,可以重複執行一段程式碼,直到滿足特定的條件為止。例如,while (a < b)表示只要a小於b,就重複執行while後面的程式碼塊。

陣列

陣列是一種儲存相同型別資料元素的集合。在C語言中,陣列的宣告方式為type arrayName[arraySize];,其中type是陣列元素的資料型別,arrayName是陣列的名稱,arraySize是陣列的大小。例如,int numbers[5];宣告瞭一個包含5個整數的陣列。

函式

函式是一段具有特定功能的程式碼塊,可以在程式的任何地方呼叫。在C語言中,函式的宣告方式為returnType functionName(parameters);,其中returnType是函式返回值的資料型別,functionName是函式的名稱,parameters是函式的引數列表。例如,int add(int a, int b);宣告瞭一個返回整數型別的函式add,它接受兩個整數引數。

結論

第四章的內容主要圍繞著C語言的基本語法和控制結構展開,包括算術運算、關係運算、邏輯運算、條件語句、迴圈語句、陣列和函式等。掌握這些基礎知識對於理解和編寫C語言程式至關重要。
電腦科學概論第七版第四章學習總結

在《電腦科學概論第七版》的第四章中,主要圍繞“門和電路”這一核心主題展開,深入探討了計算機底層如何透過控制電流來實現邏輯運算和資料處理。以下是對該章節學習內容的詳細總結:

一、門的概念與型別

  • 定義:門是對電訊號執行基本運算的裝置,它接受一個或多個輸入訊號,並生成一個輸出訊號。這些門是構成數位電路的基本單元。
  • 型別:章節中詳細介紹了六種基本型別的門,包括非門(NOT)、與門(AND)、或門(OR)、異或門(XOR)、與非門(NAND)、或非門(NOR)。每種門都有其特定的邏輯運算規則,這些規則是理解電路邏輯功能的基礎。

二、布林代數與邏輯運算

  • 布林代數:表示二值邏輯函式的數學表示法,是理解和設計數位電路的重要工具。它定義了基本的邏輯運算子(如AND、OR、NOT)以及它們之間的運算規則。
  • 邏輯運算:透過布林代數,可以描述閘電路中的邏輯運算。例如,與門實現邏輯與運算,或門實現邏輯或運算,非門實現邏輯非運算。這些邏輯運算規則是電路設計和分析的基礎。

三、電路與邏輯框圖

  • 電路:由互相關聯的門組合而成,用於實現特定的邏輯函式。電路可以分為組合電路和時序電路兩種型別。組合電路的輸出僅由當前輸入決定,而時序電路的輸出則與輸入和電路當前狀態都有關。
  • 邏輯框圖:電路的圖形化表示方法,每種型別的門在邏輯框圖中都有其專用的符號。透過邏輯框圖,可以直觀地瞭解電路的結構和邏輯功能。

四、真值表與電路等價

  • 真值表:列出了所有可能的輸入值和對應的輸出值的表。真值表是理解和驗證電路邏輯功能的重要工具。透過真值表,可以直觀地看到不同輸入組合下電路的輸出結果。
  • 電路等價:如果兩個電路對於所有可能的輸入值組合都產生完全相同的輸出,則稱這兩個電路等價。電路等價現象證明了布林代數的一個重要屬性——分配律。

五、加法器與多路複用器

  • 加法器:對二進位制值執行加法運算的電路。章節中介紹了半加器和全加器的概念及其工作原理。半加器用於計算兩個一位數的和及進位,而全加器則考慮了進位輸入,用於計算兩個多位數的和。
  • 多路複用器:使用輸入控制訊號決定用哪條輸入資料線傳送輸出訊號的電路。多路複用器在資料傳輸和訊號處理中具有廣泛應用。

六、積體電路與CPU

  • 積體電路:又稱晶片,是嵌入了多個門的矽片。積體電路的發展極大地提高了電路的整合度和效能。CPU(中央處理器)就是一種高度整合的電路,它由算術/邏輯單元、控制單元和暫存器等多個部件組成,是計算機的核心部件。

七、學習心得與體會

透過學習本章內容,我深刻理解了計算機底層如何透過控制電流來實現邏輯運算和資料處理。閘電路和布林代數作為數位電路的基礎,對於理解計算機的工作原理至關重要。同時,我也掌握了電路分析的基本方法,包括邏輯框圖、真值表和電路等價等概念。這些知識不僅有助於我深入理解電腦科學的基礎理論,也為我將來從事相關領域的研究和工作打下了堅實的基礎。

教材學習中的問題和解決過程(先問 AI)

(一個模板:我看了這一段文字 (引用文字),有這個問題 (提出問題)。 我查了資料,有這些說法(引用說法),根據我的實踐,我得到這些經驗(描述自己的經驗)。 但是我還是不太懂,我的困惑是(說明困惑)。【或者】我反對作者的觀點(提出作者的觀點,自己的觀點,以及理由)。 )

  • 問題1:算術運算、關係運算和邏輯運算在C語言中的優先順序是如何定義的?
  • 問題1解決方案:在C語言中,算術運算、關係運算和邏輯運算的優先順序是根據C語言標準嚴格定義的,這些優先順序決定了在一個複合表示式中不同運算子的計算順序。優先順序高的運算子會先於優先順序低的運算子進行計算。以下是對這三種運算優先順序的具體說明:
  1. 算術運算:

    • 算術運算子包括加法(+)、減法(-)、乘法(*)、除法(/)和取模(%)等。
    • 在C語言中,乘法、除法和取模運算子的優先順序高於加法和減法運算子。這意味著在表示式中,先進行乘除運算,再進行加減運算。
    • 同一優先順序的算術運算子按照從左到右的順序進行計算(除非使用括號改變運算順序)。
  2. 關係運算:

    • 關係運算子用於比較兩個表示式的值,包括等於(==)、不等於(!=)、大於(>)、小於(<)、大於等於(>=)和小於等於(<=)等。
    • 關係運算子的優先順序低於算術運算子但高於邏輯運算子。這意味著在表示式中,先進行算術運算,再進行關係比較。
    • 關係運算的結果是一個布林值(在C語言中通常表示為0或1,其中0表示假,非0表示真)。
  3. 邏輯運算:

    • 邏輯運算子包括邏輯非(!)、邏輯與(&&)和邏輯或(||)。
    • 邏輯非運算子的優先順序高於邏輯與和邏輯或運算子。這意味著在表示式中,先進行邏輯非運算,再進行邏輯與或邏輯或運算。
    • 邏輯與運算子的優先順序高於邏輯或運算子。這意味著在表示式中,先進行邏輯與運算,再進行邏輯或運算。
    • 邏輯運算的結果同樣是一個布林值。

總結來說,C語言中算術運算的優先順序最高,關係運算次之,邏輯運算最低。這種優先順序順序確保了表示式按照預期的數學和邏輯規則進行計算。需要注意的是,當表示式中包含多個運算子時,可以使用括號來顯式指定運算順序,這有助於編寫更清晰、更易於理解的程式碼。

此外,還有一些特殊的運算子(如賦值運算子、逗號運算子等)具有不同的優先順序和結合性,這些運算子的優先順序和結合性也遵循C語言標準的規定。在實際程式設計中,瞭解和掌握運算子的優先順序和結合性是非常重要的,它有助於編寫出正確且高效的程式碼。

  • 問題2:在C語言中,如何使用if語句和else語句來構建選擇結構?
  • 問題2解決方案:在C語言中,if語句和else語句被用於構建選擇結構,這種結構允許程式根據條件的真假來執行不同的程式碼塊。以下是使用ifelse語句構建選擇結構的基本方法和示例:

基本語法

  1. if語句:

    if (condition) { 
        // 當condition為真(非零)時執行的程式碼 
    } 
    
  2. if-else語句:

    if (condition) { 
        // 當condition為真時執行的程式碼 
    } else { 
        // 當condition為假(零)時執行的程式碼 
    } 
    
  3. if-else if-else語句:

    if (condition1) {
        // 當condition1為真時執行的程式碼
    } else if (condition2) {
        // 當condition2為真,且condition1為假時執行的程式碼
    } else { 
        // 當condition1和condition2都為假時執行的程式碼
    } 
    

示例

以下是一個簡單的示例,展示瞭如何使用if-else語句來根據一個整數的值執行不同的程式碼塊:

#include <stdio.h>
 
int main() { 
    int number; 
 
    printf("請輸入一個整數:"); 
    scanf("%d", &number); 
 
    if (number > 0) {
        printf("您輸入的數字是正數。\n"); 
    } else if (number < 0) {
        printf("您輸入的數字是負數。\n");
    } else { 
        printf("您輸入的數字是零。\n");
    } 
 
    return 0;
}

在這個示例中,程式首先提示使用者輸入一個整數,並使用scanf函式讀取使用者的輸入。然後,程式使用if-else if-else結構來判斷輸入的數字是正數、負數還是零,並根據判斷結果輸出相應的訊息。

注意事項

  • ifelse語句中,條件表示式(如condition)可以是任何能夠計算為布林值的表示式。在C語言中,布林值通常表示為整數,其中0表示假,非0表示真。
  • elseelse if子句是可選的。如果只需要在條件為真時執行程式碼,可以只使用if語句;如果需要在條件為假時執行不同的程式碼,可以新增else語句;如果需要處理多個條件,可以使用else if語句來擴充套件選擇結構。
  • 使用花括號{}來包圍ifelse ifelse子句中的程式碼塊是良好的程式設計習慣,即使程式碼塊中只有一條語句也是如此。這有助於保持程式碼的清晰性和可讀性,並防止在新增新程式碼時出錯。
  • ...

基於AI的學習

我正在學習c語言程式設計中函式printf()的一般格式知識點請你以蘇格拉底的方式對我進行提問一次一個問題·

Kimi(moonshot-v1-8k)
很好,讓我們開始這個探索之旅。我的第一個問題是:

你能否告訴我,printf()函式在C語言中的主要目的是什麼?

輸出字元

Kimi(moonshot-v1-8k)
接近了,但printf()函式的能力比僅僅輸出字元要廣泛一些。它確實可以輸出字元,但它的主要目的其實是格式化輸出。那麼,我的下一個問題:

你能描述一下printf()函式的一般格式是什麼樣的嗎?

printf(格式控制字串,輸出值參數列)

Kimi(moonshot-v1-8k)
非常好,你已經抓住了printf()函式的基本結構。格式控制字串和輸出值參數列共同工作來決定輸出的格式和內容。

現在,讓我們更深入一些。我的下一個問題:

格式控制字串中的格式說明符是如何指定輸出的型別和格式的?你能給出一個具體的例子嗎?

格式轉化說明由%開始,並以轉換字元結束,用於指定各輸出值引數的輸出格式

Kimi(moonshot-v1-8k)
正是如此,你已經很好地理解了格式說明符的基本構成。格式說明符以%開始,後跟一個或多個指定輸出格式的字元,最後以一個轉換字元結束,這個轉換字元確定了引數的型別。

我的下一個問題:

在格式控制字串中,除了格式說明符之外,還有哪些內容可以包含在其中?

一些其他想輸出的字元

Kimi(moonshot-v1-8k)
正確,格式控制字串中除了格式說明符之外,還可以包含其他你希望輸出的字元,比如文字、空格、標點符號等。這些字元會按照原樣輸出,而格式說明符則會被替換為相應的變數值。

我的下一個問題:

如果格式控制字串中既包含普通字元,也包含格式說明符,那麼這些內容是如何協同工作的?

分別被識別顯示

Kimi(moonshot-v1-8k)
是的,printf函式會識別格式控制字串中的普通字元和格式說明符。普通字元會被直接輸出,而格式說明符會指示printf函式按照指定的格式輸出相應的引數值。

我的下一個問題:

當格式控制字串包含多個格式說明符時,printf函式是如何匹配這些說明符與提供的引數的?

從左到右一一對應

Kimi(moonshot-v1-8k)
完全正確。在printf()函式中,格式說明符會從左到右與引數列表中的引數一一對應。第一個格式說明符對應第一個引數,第二個格式說明符對應第二個引數,以此類推。

我的下一個問題:

如果格式控制字串中只有一個格式說明符,而引數列表中有多個引數,那麼printf()函式會如何處理?

只輸出一個引數

Kimi(moonshot-v1-8k)
實際上,如果格式控制字串中只有一個格式說明符,printf()函式只會使用引數列表中的第一個引數,並忽略其餘的引數。這是因為格式說明符指定了要輸出的資料型別和格式,而printf()函式會按照這個說明符來處理相應的引數。

我的下一個問題:

如果格式控制字串中有多個格式說明符,但引數列表中的引數不足以匹配這些說明符,會發生什麼情況?

報錯無法執行

Kimi(moonshot-v1-8k)
不完全是這樣。在C語言中,如果格式控制字串中有多個格式說明符,但提供的引數不足以匹配這些說明符,printf()函式不會報錯或無法執行。相反,它會忽略那些沒有匹配的格式說明符,並繼續執行程式。

但是,這種情況下,未匹配的格式說明符會導致未定義行為(undefined behavior),因為它們沒有對應的引數來填充。這可能會導致輸出結果不正確或程式的其他部分出現問題。

程式碼除錯中的問題和解決過程

  • 問題1:給字元型變數賦值的時候出現錯誤
  • 問題1解決方案:賦值時在變數後加[]
  • 問題2:按位運算在c語言中的表示
  • 問題2解決方案:按位或|按位與&按位異或^
  • ...

程式碼託管

上週考試錯題總結

其他(感悟、思考等,可選)

勤學苦練,多寫多練

學習進度條

程式碼行數(新增/累積) 部落格量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 200/200 2/2 20/20
第二週 300/500 2/4 18/38
第三週 1000/1000 3/7 22/60
第四周 1300/1300 2/9 30/90
第五週 1300/1300 2/9 30/90

嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進自己的計劃能力。這個工作學習中很重要,也很有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。

參考:軟體工程軟體的估計為什麼這麼難軟體工程 估計方法

  • 計劃學習時間:30小時

  • 實際學習時間:30小時

  • 改進情況:

(有空多看看現代軟體工程 課件
軟體工程師能力自我評價表
)

參考資料

  • 《電腦科學概論(第七版)》
  • ...

相關文章