
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)?編寫程序文檔