2024-2025 20241308《計算機基礎與程式設計》第五週總結

babythbreath發表於2024-10-27

|這個作業屬於哪個課程|<2024-2025-1-計算機基礎與程式設計(https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP)>|
|這個作業要求在哪裡|<2024-2025-1計算機基礎與程式設計第一週作業](https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/homework/13276)>|
|這個作業的目標|Pep/9虛擬機器 機器語言與組合語言 演算法與虛擬碼 測試:黑盒,白盒|
|作業正文|
教材學習內容總結
在《C語言程式設計》第4章中,我學到了資料的格式化螢幕輸出、資料的格式化鍵盤輸入、單個字元的輸入輸出、用getchar()輸入資料存在的問題、用%c輸入字元時存在的問題。學完《電腦科學概論》第6章,我能夠區分機器語言和組合語言,描述虛擬機器Pep/9的重要特性,區分立即定址模式和直接定址模式,編寫一個簡單的機器語言程式,描述建立和執行組合語言程式的步驟,編寫一個簡單的組合語言程式,區分給彙編器的指令和要翻譯的指令,區分執行一個演算法和開發一個演算法,描述表達演算法時使用的虛擬碼結構,使用虛擬碼來描述演算法,描述兩種測試方式,為簡單的組合語言程式設計和實現測試方案。
教材學習中的問題和解決過程
螢幕輸出:
在C語言程式設計中,螢幕輸出主要透過以下幾種常見方式實現:

一、使用printf函式(最常用)

  • 它是stdio.h標頭檔案裡提供的標準輸出函式。
  • 基本語法:printf("輸出內容格式字串", 要輸出的變數列表);
  • 例如:

include <stdio.h>

int main() {
int num = 10;
printf("輸出一個整數:%d\n", num);
return 0;
}
二、使用putchar函式

  • 也是stdio.h裡的函式。
  • 它用於輸出單個字元。
  • 比如:

include <stdio.h>

int main() {
char ch = 'A';
putchar(ch);
putchar('\n');
return 0;
}
這裡先輸出字元'A',然後透過putchar('\n')輸出換行符實現換行效果。

單個字元的輸入輸出:
在C語言中,單個字元的輸入輸出主要透過以下函式來實現:

輸入單個字元

  • getchar函式:
  • 所在標頭檔案:stdio.h。
  • 功能:從標準輸入裝置(通常是鍵盤)讀取一個字元。
  • 示例用法:

include <stdio.h>

int main() {
char ch;
ch = getchar();
printf("你輸入的字元是:%c\n", ch);
return 0;
}
在上述示例中,透過getchar函式從鍵盤讀取一個字元並儲存到變數ch中,然後再用printf函式輸出該字元。

輸出單個字元

  • putchar函式:
  • 所在標頭檔案:stdio.h。
  • 功能:將一個字元輸出到標準輸出裝置(通常是螢幕)。
  • 示例用法:

include <stdio.h>

int main() {
char ch = 'A';
putchar(ch);
putchar('\n');
return 0;
}
這裡先定義了字元變數ch並賦值為'A',然後透過putchar函式將該字元輸出到螢幕上,最後再透過putchar輸出換行符'\n'使輸出換行。

透過這兩個函式,就可以方便地實現單個字元在C語言程式中的輸入和輸出
機器語言與組合語言:
一、機器語言

  • 定義:機器語言是計算機能夠直接識別和執行的二進位制指令程式碼,由0和1組成的序列。每一種計算機都有其特定的機器語言指令集,這些指令直接控制計算機硬體的操作,比如控制CPU進行資料運算、記憶體讀寫、I/O裝置的操作等。
  • 特點:
  • 執行效率極高,因為計算機硬體可以直接執行,無需任何轉換過程。
  • 編寫難度極大,全是二進位制程式碼,對於人類來說非常難以理解、記憶和編寫,很容易出錯,且開發效率極低。
  • 可移植性極差,不同型號的計算機,其機器語言指令集往往不同,所以針對一種計算機編寫的機器語言程式,通常無法直接在另一種計算機上執行。

二、組合語言

  • 定義:組合語言是一種面向機器的程式設計語言,它用助記符來代替機器語言中的二進位制指令程式碼,使得程式設計師能夠相對更容易地編寫程式來控制計算機硬體的操作。例如,用“MOV”代表資料傳送指令等。這些助記符指令與特定的機器語言指令有一一對應的關係。
  • 特點:
  • 相比機器語言,組合語言的可理解性有所提高,程式設計師透過助記符能大概瞭解程式的功能,編寫程式時出錯的機率相對降低一些,開發效率也稍高一點。
  • 執行效率依然很高,因為組合語言編寫的程式經過彙編程式的翻譯後,能很高效地轉換為機器語言並被計算機執行。
  • 可移植性也較差,雖然比機器語言稍好一點,但由於不同計算機的硬體結構不同,其對應的組合語言指令集也存在差異,所以在一臺計算機上編寫的彙編程式,一般不能直接在另一臺計算機上執行,通常需要針對不同計算機進行一定的修改。

機器語言是計算機硬體能直接執行的最底層語言,而組合語言則是在其基礎上透過助記符進行了一定的“人性化”改造,但兩者都與具體的計算機硬體緊密相關,在可移植性等方面存在明顯侷限。

基於AI的學習
我學習了電腦科學概論第 6 章的內容,請你以蘇格拉底的方式問我問題,一次一個問題。
那很不錯呀,不過我尚不知曉這第6章具體所講內容呢。姑且先問你這麼一個問題吧:在你所學的這章內容裡,你可明晰其中最為關鍵之點,足以讓你向旁人清晰闡述其核心要義的所在之處呀?
機器語言與組合語言。
啊,那你既已學過相關內容,我且來問你哦。你且說說,機器語言全是由那0和1組成的指令程式碼,這般晦澀難懂,那組合語言又是如何在這之上做了改變,讓程式設計師能稍許輕鬆去編寫控制計算機硬體之程式的呀?
用助記符吧。
哈哈,不錯呀,確實是用助記符來做了改進呢。那我再問啦,雖說組合語言用助記符代替了機器語言的二進位制指令,可不同計算機的硬體結構各有差異呀,那這組合語言在不同計算機上使用時,是不是也會遇到諸多不便之處呀?
是的
嗯,甚是有理呀。那既知曉會有諸多不便,我便再問啦,那在面對這些因計算機不同而產生的不便時,有沒有何種法子或者說思路,可以嘗試去緩解或者克服這些問題呢?
不知道
無妨無妨呀。那且再聽我一問哦,既然組合語言相較機器語言已用助記符使其更易理解些,那你覺得在何種具體情境之下,人們還是會更傾向於直接使用機器語言而非組合語言呢?
你能舉一些例子嗎?
那我來說幾個不同程式語言的例子呀。

Python語言

比如要計算1到100的整數之和,用Python就可以這樣寫:
sum_num = 0
for i in range(1, 101):
sum_num += i
print(sum_num)
Java語言

同樣計算1到100的整數之和,Java程式碼示例如下:
public class Main {
public static void main(String[] args) {
int sum_num = 0;
for (int i = 1; i <= 100; i++) {
sum_num += i;
}
System.out.println(sum_num);
}
}
C語言

以下是C語言實現計算1到100整數之和的程式碼:

include <stdio.h>

int main() {
int sum_num = 0;
int i;
for (i = 1; i <= 100; i++) {
sum_num += i;
}
printf("%d\n", sum_num);
return 0;
}
這幾種程式語言在語法、格式等方面都各有特點,處理同樣的任務卻有著不同的實現方式呢。

相關文章