緋紅之拳戰團傳奇人物-傑弗羅斯 想要回去保衛母星,但被審判官拒絕 戰錘40k
第1章 程式設計與C語言
1.1 計算機與程式、程式設計語言
- 計算機的機器語言:一個型號機器語言的指令的集合。它緊密依賴於計算機硬體,稱為低階語言。
- 用機器語言寫程式難學、難記,難寫,難修改、難維護,而且在不同計算機之間互不通用,給計算機的推廣應用造成很大困難。
- 高階語言:比較接近與人們習慣使用的自然語言(英文)和數學語言,直觀易學,易理解,易修改,易維護,通用性強(不同型號計算機之間通用)。從1954年出現第一個高階語言FORTRAN 以來,全世界先後出現了幾千種高階語言,每種高階語言都有其特定的使用領域。其中應用比較廣泛的有100多種,影響較大的有FORTRAN(適合數值計算)、BASIC(適合初學者的小型會話語言)、COBOL(適合商業管理)、Pascal(適合教學的結構程式設計語言)、LISP和PROLOG(人工智慧語言)、 Visual Basic(支援面向物件程式設計的語言)、C(系統描述語言)、C+(支援面向物件程式設計的大型語言)、Java(適於網路使用的語言)以及近幾年使用較多的C# 、Python,R語言等。
- 編譯系統:用高階語言編寫的程式,計算機是不能直接識別和執行的(計算機只能直接識別二進位制的指令),必須事先把用高階語言編寫的程式翻譯成機器語言程式,這個“翻譯”工作是由稱為“編譯系統”的軟體來實現的。
1.2 C語言的出現和發展過程
- C語言是國際上廣泛流行的計算機高階語言。最初的C語言只是為編寫UNIX作業系統提供一種工作語言而設計的。
- 1973年,Ken Thompson和 Dennis M.Ritchie合作把UNIX的90%以上用C語言改寫(原來的UNIX作業系統是用匯編語言編寫的)。
- 後來,C語言做了多次改進,但主要還是在貝爾實驗室內部使用。隨著UNIX的日益廣泛使用,C語言也迅速得到推廣。C語言和UNIX可以說是一對孿生兄弟,在發展過程中相輔相成。
- 1978年以後,C語言先後移植到大、中、小,微型計算機上。C語言便很快風靡全世界,成為世界上應用最廣泛的程式設計高階語言。
- 以1978年釋出的UNIX第7版中的C語言編譯程式為基礎, Brian W.Kernighan和Dennis M.Ritchie(合稱K&.R)合著了影響深遠的名著The C Programming Language ,這本書中介紹的C語言成為後來廣泛使用的C語言版本的基礎,它被稱為標準的C語言。
- 1983年,美國國家標準化協會(ANSI)根據C語言問世以來各種版本對C語言的發展和擴充,制定了新的標準草案,即 83 ANSI C。ANSI C比原來的標準C有了很大的發展。
- 1989年,ANSI 又公佈了一個新的C語言標準--—ANSI X3.159—1989(簡稱C89)。1990年,國際標準化組織(International Standard Organization,ISO)接受C89,作為國際標準ISO/IEC9899:1990,通常簡稱為C90。ISO 的C90和ANSI的C89基本上是相同的。
- 1995年,ISO對C90做了一些修訂,稱為C95。1999 年,ISO 又對C語言標準進行修訂,在基本保留原來的C語言特徵的基礎上,增加了一些面向物件的特徵,命名為ISO/IEC9899;1999,簡稱為C99。但前一時期有的軟體公司提供的C語言編譯系統並未完全實現C99建議的功能,而是以C89為基礎進行開發的。不同的軟體公司提供的C編譯系統所實現的語言功能和語法規則又略有差別。
- C語言功能強大、使用靈活,既可用於編寫應用軟體,又能用於編寫系統軟體。因此C語言問世以後得到迅速推廣。
1.3 簡單的C語言程式
1 #include <stdio.h> //編譯預處理指令 2 3 int main() { //定義主函式 4 printf("This is a C program.\n"); 5 return 0; //函式執行完時返回0 6 }例1.1 要求在螢幕上顯示出以下一行資訊:
1 //求兩個整數之和 2 #include <stdio.h> //編譯預處理指令 3 4 int main() { //定義主函式 5 int a, b, sum; 6 a = 123; 7 b = 456; 8 sum = a + b; 9 printf("sum is %d\n", sum); 10 return 0; 11 }例1.2 求兩個整數之和
1 #include <stdio.h> 2 3 int main() { //主函式 4 int max(int x, int y); //對被呼叫的max函式進行宣告 5 int a, b, c; //定義整型變數a,b、c 6 scanf("%d,%d", &a, &b); // 從鍵盤輸入變數a和b的值 7 c = max(a, b); //呼叫max函式,將得到的值賦給整型變數c 8 printf("max= %d\n", c);//輸出c的值 9 return 0; 10 } 11 12 int max(int x, int y) //定義max函式,函式值為整型,形式引數x、y為整型 13 { 14 int z; // max函式中的宣告部分, 定義本函式中用到的變數z為整型 15 16 if (x > y) z = x; //如果x> y,則將x的值賦給變數z 17 18 else z = y; //否則,將y的值賦給變數z 19 20 return (z); //將z的值返回到主函式中呼叫函式的位置 21 22 }例1.3 求兩個整數中的大者。
1.4 C語言IDE
本章小結
- (1)計算機是由程式控制的,要使計算機按照人們的意圖工.作,必須用計算機語言編寫程式。
- (2)機器語言和組合語言依賴於具體計算機,屬於低階語言,難學難用,無通用性。高階語言接近人類自然語言和數學語言,容易學習和推廣,不依賴於具體計算機,通用性強。
- (3)C語言是目前在世界上使用最廣泛的一種計算機語言,語言簡潔緊湊,使用方便靈活,功能很強,既有高階語言的優點,又具有低階語言的功能;既可用於編寫系統軟體,又可用於編寫應用軟體。掌握C語言程式設計是程式設計人員的一項基本功。
- (4)一個C語言程式是由一個或多個函式構成的,必須有一個main函式。程式由main函式開始執行。在函式體內可以包括若干個語句,語句以分號結束。一行內可以寫多個語句,一個語句可以分寫為多行。
- (5)上機執行一個C程式必須經過4個步驟:編輯、編譯、連線和執行。要熟練掌握上機技巧。
- (6)用C語言寫好程式後,可以用不同的C編譯系統對它進行編譯。目前所用的編譯系統多采用整合環境:把編輯、編譯、連線和執行等步驟在一個整合環境中完成。
- (7)目前所用的C++整合環境功能強,使用方便。由於C++和C相容,可以用C++整合環境對C程式進行編譯、連線和執行。
習題
1 #include <stdio.h> 2 int main(){ 3 printf("********************************\n\n"); 4 printf(" Very good!\n\n"); 5 printf("********************************\n\n"); 6 return 0; 7 }1.1
1 #include <stdio.h> 2 3 int main() { 4 int a, b, c, max; 5 printf("please input a,b,c:\n"); 6 scanf("%d,%d,%d,", &a, &b, &c); 7 max = a; 8 if (max < b)max = b; 9 if (max < c)max = c; 10 printf("The largest number is %d\n", max); 11 return 0; 12 }1.2
第2章 資料的儲存與計算
2.1.1 資料在計算機中是以二進位制形式儲存的
眾所周知,計算機的工作是基於二進位制原理的,計算機內部的資訊都是用二進位制來表示的。計算機的儲存器是由半導體積體電路構成的,它包括幾億個小的脈衝電路單元(二極體元件)。每一個二極體元件如同一個開關,有兩種穩定的工作狀態:“導通”與“截止”,即電脈衝的“有”與“無”,用1和0表示。如果有相鄰的8個二極體元件中第1、3、5、7個元件處於“導通”狀態,第2、4、6、8個元件處於“截止”狀態(見圖2.1(a)),這種狀態用10101010表示(見圖2.1(b)或圖2.1(c))。當用戶向計算機輸入資料(例如輸入整數5)時,計算機先把資料轉換為二進位制形式(整數5的二進位制形式為101),根據其每一位是0或1,使相應的電子元件設定為“截止”或“導通”狀態。至於怎樣具體實現,使用者可不必過慮,是由計算機自動完成的。
一個十進位制怎樣表示為二進位制形式呢?二進位制數的特點是“逢二進一”。每一位的值只有0和1兩種可能。
表2.1表示最簡單的十進位制數與二進位制數的對應關係。
十進位制數10,用二進位制表示是1010。它的含義是:
每一個二進位代表不同的冪,最右邊一位代表2的0次方,最右邊第二位代表2的1次方,以此類推。顯然一個很大的整數可能需要幾十個“二進位制位”來代表。
2.1.2 位、位元組和地址
在談論資料儲存時常用到以下一些名詞:
- 位,又稱為“位元”(bit)。每一個二極體元件稱為一個“二進位制位”,是儲存資訊的最小單位。它的值是1或0。
- 位元組,又稱為“拜特”(byte)。一個儲存器包含許許多多個“二進位制位”,如果直接用“位”來表示和管理,很不方便。一般將8個“二進位制位”組織成一組,稱為“位元組”。這是人們最常用的儲存單位,例如平常說的“佔記憶體125K”,就是指125KB,即約12.5萬字節。“記憶體為256M”,就是指256兆位元組,一兆是10°,即 100萬。“硬碟容量為40G”,就是指40吉位元組,一吉是10”,40GB就是400億位元組。
- 地址。計算機的儲存器包含許多儲存單元,怎樣才能找到所需的儲存單元呢?作業系統把所有儲存單元以位元組為單位編號,如圖2.2所示。
圖2.2表示:在編號為2001的位元組中存放資料3,在編號為2002的位元組中存放資料4……,以此類推。2001、2002就是儲存單元的地址。也就是說,在地址為2001的儲存單元中存放資料3,在地址為2002的儲存單元中存放資料4……。請注意,這只是示意性的說明,實際上在計算機中一般不是用一位元組存放一個整數﹐而是用2或4位元組存放一個整數。這是因為一位元組只有8個二進位制位,能存放的資料範圍比較小,因此為了擴大儲存資料的範圍,需要用幾字節來存放一個數據。
2.1.3 不同型別資料的儲存方式
由於在計算機中的儲存形式不同,C語言中的資料是分為不同型別的。
1.整數的儲存方式
一個十進位制整數﹐先轉換為二進位制形式,如整數10,以二進位制形式表示是1010,直接把它存放在儲存單元中。如果用一位元組來儲存,儲存單元中的情況如下。
- 一位元組共有8個二進位制位,左面第1位(即最高位)用來表示符號,當最高位為0時表示是正數。其他7位都用來存放數值,則它的最大值是01111111,即27_1,它相當於十進位制的127。如果數值大於127,一位元組就放不下了。這顯然是不滿足要求的。有的C語言編譯系統(如Turbo C 2.0)以兩位元組表示一個整數。這時,它的最大值是0111111111111111,即215一1,它相當於十進位制的32767。實際上使用的整數往往超過32767,顯然兩位元組放不下,因此現在的C語言編譯系統(如Visual C+)以4位元組表示一個整數﹐這時,它的最大值是31位都是1,即231—1,約為21億。一般情況下能滿足使用要求了。
- 數值並不總是正值,往往有負數。那麼怎樣表示負數呢?是用“補碼”表示的。在計算機的儲存器中,整數是以補碼形式存放的。一個正數的補碼和該數的原碼(即該數的二進位制形式)相同,如整數10的原碼和補碼都是00001010。對負數,先求出它的補碼,再存放到儲存單元中。
2.實數的儲存形式
- 前面介紹的是整數的儲存形式,一個整數可以準確地表示為二進位制形式。如果輸入的是一個實數,如123.456,就不能採取上面的辦法。
- 對於實數,一律採用指數形式儲存,例如123.456可以寫成標準化指數形式0.123456×103,它包括前後兩個部分:前面部分是數值部分,後面部分是指數部分,如下所示。