第1章 程序設(shè)計(jì)和C語(yǔ)言

1.1什么是計(jì)算機(jī)程序

程序,就是一組計(jì)算機(jī)能識(shí)別和執(zhí)行的指令。每一條指令使計(jì)算機(jī)執(zhí)行特定的操作。只要讓計(jì)算機(jī)執(zhí)行這個(gè)程序,計(jì)算機(jī)就會(huì)“自動(dòng)地”執(zhí)行各條指令,有條不紊地進(jìn)行工作。

1.2什么是計(jì)算機(jī)語(yǔ)言

計(jì)算機(jī)語(yǔ)言——計(jì)算機(jī)和人都能識(shí)別的語(yǔ)言

計(jì)算機(jī)語(yǔ)言的發(fā)展階段:

機(jī)器語(yǔ)言?計(jì)算機(jī)工作基于二進(jìn)制,從根本上說(shuō),計(jì)算機(jī)智能識(shí)別和接受由0和1組成的指令。在計(jì)算機(jī)發(fā)展的初期,一般計(jì)算機(jī)的指令長(zhǎng)度為156,即以16個(gè)二進(jìn)制數(shù)(0或1)組成一條指令,16個(gè)0和1可以組成各種排列組合。

這種計(jì)算機(jī)能直接識(shí)別和接受的二進(jìn)制代碼稱為機(jī)器指令(machine instruction)。機(jī)器指令的集合就是該計(jì)算機(jī)的機(jī)器語(yǔ)言(machine language)。

???????? 顯然,機(jī)器語(yǔ)言與人們習(xí)慣用的語(yǔ)言差別太大,難學(xué)、難記、難檢查、難修改、難以推廣使用、難寫。因此初期只有極少數(shù)的計(jì)算機(jī)專業(yè)人員會(huì)編寫計(jì)算機(jī)程序。


?符號(hào)語(yǔ)言?為了克服機(jī)器語(yǔ)言的上述缺點(diǎn),人們創(chuàng)造出符號(hào)語(yǔ)言(symbolic language),它用一些英文字母和數(shù)字表示一個(gè)指令,例如用ADD表示“加”,SUB代表“減”,LD代表“傳送”等。

顯然,計(jì)算機(jī)并不能直接識(shí)別和執(zhí)行符號(hào)語(yǔ)言的指令,需要用一種稱為匯編程序的軟件,把符號(hào)語(yǔ)言的指令轉(zhuǎn)換為機(jī)器指令。一般,一條符號(hào)語(yǔ)言的指令對(duì)應(yīng)轉(zhuǎn)換為一條機(jī)器指令。轉(zhuǎn)換的過(guò)程稱為:“代真”或“匯編”,因此,符號(hào)語(yǔ)言又稱為符號(hào)匯編語(yǔ)言(symbolic assembler language)或匯編語(yǔ)言(assembler language)。

???????? 雖然匯編語(yǔ)言比機(jī)器語(yǔ)言簡(jiǎn)單好記一些,但仍然難以普及,只在專業(yè)人員中使用。

不同型號(hào)的計(jì)算機(jī)的機(jī)器語(yǔ)言和匯編語(yǔ)言是互不相通的。如,用甲機(jī)器的機(jī)器語(yǔ)言編寫的程序在乙機(jī)器上不能使用。機(jī)器語(yǔ)言和匯編語(yǔ)言是完全依賴于具體機(jī)器特性的,是面向機(jī)器的語(yǔ)言。由于它“貼近”計(jì)算機(jī),或者說(shuō)離計(jì)算機(jī)“很近”,稱為計(jì)算機(jī)低級(jí)語(yǔ)言(low level language).

?高級(jí)語(yǔ)言?為了克服低級(jí)語(yǔ)言的缺點(diǎn)。創(chuàng)造出了高級(jí)語(yǔ)言。第一個(gè)高級(jí)語(yǔ)言為Fortran語(yǔ)言。

這種語(yǔ)言功能很強(qiáng),且不依賴于具體機(jī)器,用它寫出的程序?qū)θ魏涡吞?hào)的計(jì)算機(jī)都是用(或只須作很少的修改),它與具體機(jī)器距離較遠(yuǎn),故稱為計(jì)算機(jī)高級(jí)語(yǔ)言(high level language)。

當(dāng)然,計(jì)算機(jī)也是不能夠直接識(shí)別高級(jí)語(yǔ)言程序的,也要進(jìn)行“翻譯”。用一種稱為編譯程序的軟件把用高級(jí)語(yǔ)言寫的程序(稱為源程序,source program)轉(zhuǎn)換為機(jī)器指令的程序(稱為目標(biāo)程序,object program),然后當(dāng)計(jì)算機(jī)執(zhí)行機(jī)器指令程序,最后得到記過(guò)。高級(jí)語(yǔ)言的一個(gè)語(yǔ)句往往對(duì)應(yīng)多條機(jī)器指令。


???????? 高級(jí)語(yǔ)言也經(jīng)歷了不同的發(fā)展階段:

(1)???? 非結(jié)構(gòu)化語(yǔ)言。早期的BASIC、FORTRAN、ALGOL等都術(shù)語(yǔ)非結(jié)構(gòu)化語(yǔ)言。

(2)???? 結(jié)構(gòu)化語(yǔ)言。QBASIC、FORTRAN77和C語(yǔ)言等。

(3)???? 面向?qū)ο笳Z(yǔ)言。C++、C#、visual、Basic、和java等



關(guān)于怎么快速學(xué)C/C++,可以加下小編的C/C++學(xué)習(xí)企鵝群:【870+963+251】不管你是小白還是大牛,小編我都?xì)g迎,不定期分享干貨,歡迎初學(xué)和進(jìn)階中的小伙伴。每天晚上20:00都會(huì)開(kāi)直播給大家分享C/C++游戲編程學(xué)習(xí)知識(shí)和路線方法,群里會(huì)不定期更新最新的教程和學(xué)習(xí)方法,最后祝所有程序員都能夠走上人生峰,讓代碼將夢(mèng)想照進(jìn)現(xiàn)實(shí)



1.3 C語(yǔ)言的發(fā)展及其特點(diǎn)

C語(yǔ)言主要由以下一些主要特點(diǎn);

1).語(yǔ)言簡(jiǎn)潔、緊湊,使用方便、靈活。

2).運(yùn)算符豐富

3).數(shù)據(jù)類型豐富

4).具有結(jié)構(gòu)化的控制語(yǔ)句

5).語(yǔ)法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大

6).C語(yǔ)言允許直接訪問(wèn)物理地址,能進(jìn)行位(bit)操作,能實(shí)現(xiàn)匯編語(yǔ)言的大部分功能,可以直接對(duì)硬件進(jìn)行操作

7).用C語(yǔ)言編寫的程序可移植性好

8).生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高

1.4 最簡(jiǎn)單的C語(yǔ)言程序


1.4.1?最簡(jiǎn)單的C語(yǔ)言程序舉例

例,要求在屏幕上輸入以下一行信息

Hello world

編寫程序

?Hello.c


/*程序分析

#include <stdio.h>??

#include 編譯預(yù)處理指令,把括號(hào)<>中的信息調(diào)入供使用

stdio.h 是系統(tǒng)提供的一個(gè)文件名

stdio是”standard Input & output“的縮寫

文件后綴.h的意思是頭文件(header file),因?yàn)檫@些文件都是放在程序個(gè)文件模塊的開(kāi)頭

*/


說(shuō)明:C語(yǔ)言允許兩種注釋方式:

1).以//開(kāi)始的單行注釋。可以嵌套使用 //xxxx//yyy

2).以/*開(kāi)始,以*/結(jié)束的塊式注釋。不可以嵌套使用/*xxxxx/*yyyy*/zzzzz*/這是錯(cuò)誤的,最后的*/會(huì)沒(méi)有匹配的/*。

?

1.4.2 C語(yǔ)言程序的結(jié)構(gòu)

(1) 一個(gè)程序有一個(gè)或多個(gè)源程序文件組成。

在一個(gè)源程序文件中可以包括以下3部分:

①預(yù)處理文件

②全局聲明

③函數(shù)定義

(2) 函數(shù)是C語(yǔ)言的主要組成部分。

函數(shù)是C語(yǔ)言的基本單位。編寫C語(yǔ)言的工作主要就是編寫一個(gè)個(gè)函數(shù),C語(yǔ)言的這種特點(diǎn)容易實(shí)現(xiàn)程序的模塊化。

(3) 一個(gè)函數(shù)包括兩個(gè)部分

①函數(shù)首部

?? int??? max?????? (int????????? x ,??????? int????????? ???y)

函數(shù)類型 函數(shù)名? 函數(shù)參數(shù)類型 函數(shù)參數(shù)名 函數(shù)參數(shù)類型 函數(shù)參數(shù)名

②函數(shù)體

函數(shù)體一般包括以下兩部分

·聲明部分

·執(zhí)行部分

(4) 程序總是從main開(kāi)始執(zhí)行的

(5) 程序中對(duì)計(jì)算機(jī)的操作都是由函數(shù)中的C語(yǔ)言完成的。

(6) 在每個(gè)數(shù)據(jù)聲明和語(yǔ)句的最后必須有一個(gè)分號(hào)

(7) C語(yǔ)言本身不提供輸入輸出語(yǔ)句

(8) 程序應(yīng)當(dāng)包含注釋



1.5 運(yùn)行C程序的步驟與方法

在編號(hào)一個(gè)C源程序后,怎樣上機(jī)進(jìn)行編譯和運(yùn)行呢?一般要經(jīng)過(guò)以下幾個(gè)步驟:

(1)??? 上機(jī)輸入和編譯源程序

(2)??? 對(duì)源程序進(jìn)行編譯,先用C編譯系統(tǒng)提供的“預(yù)處理器”(又稱“預(yù)處理程序”或“預(yù)編譯器”)對(duì)程序中的預(yù)處理指令進(jìn)行編譯預(yù)處理。

編譯的作用:首先是對(duì)源程序進(jìn)行檢查,判定它有無(wú)語(yǔ)法方面的錯(cuò)誤;若有,則發(fā)出“出錯(cuò)信息error”。反復(fù)進(jìn)行,直到?jīng)]有無(wú)法錯(cuò)誤為止。

At(Attention):語(yǔ)法錯(cuò)誤能夠被檢查出來(lái),不可以檢查出邏輯錯(cuò)誤。

在用編譯系統(tǒng)對(duì)源程序進(jìn)行編譯時(shí),自動(dòng)包括了預(yù)編譯和正式編譯兩個(gè)階段。用戶不必分別發(fā)出二次指令。

(3)??? 進(jìn)行連接處理

必須把所有的編譯后得到的目標(biāo)模塊連接裝配起來(lái),再與函數(shù)庫(kù)相連接成一個(gè)整體,生成一個(gè)可供計(jì)算機(jī)執(zhí)行的目標(biāo)程序,稱為可執(zhí)行程序(executive program)。

在Visual C++中其后綴為.exe,如f.exe

(4)??? 運(yùn)行可執(zhí)行程序,得到運(yùn)行結(jié)果。


1.6程序設(shè)計(jì)的任務(wù)

從確定問(wèn)題到最后完成任務(wù),一般經(jīng)歷以下幾個(gè)工作階段:

(1)?問(wèn)題分析

(2)?設(shè)計(jì)算法

(3)?編寫程序

(4)?對(duì)源程序進(jìn)行編輯、編譯和連接,得到可執(zhí)行程序

(5)?運(yùn)行程序,分析結(jié)果

(6)?編寫程序文檔

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 學(xué)完這課,我真的覺(jué)得太及時(shí)了,反思,我到底有多久沒(méi)有讀完一整本書(shū)了,每次翻開(kāi)就是第一面開(kāi)始,然后又去做別的...
    有美媽閱讀 192評(píng)論 0 0
  • ▼ 時(shí)尚界的風(fēng)潮大抵是三十年一個(gè)輪回 原本土氣的喇叭褲在你未察覺(jué)的某一天突然流行,紅配綠的“村感”猝不及防地出現(xiàn)在...
    住百家閱讀 409評(píng)論 0 1
  • 飲料分好多種各種各樣的,有的添加了色素,還有添加了糖喝了之后特甜,有的飲料是像水一樣的透明。還有的飲料是綠...
    45cbff51831c閱讀 2,935評(píng)論 3 4
  • 在敦煌的月牙泉小鎮(zhèn),有一家何氏剪紙。 遠(yuǎn)近聞名。 店主是一個(gè)燙發(fā)的中年女子。人極淳樸,憨厚。她叫何克鳳。人稱金剪子...
    東方地秀閱讀 476評(píng)論 2 1

友情鏈接更多精彩內(nèi)容