【C語言基礎(chǔ)Ep1】譚浩強(qiáng)《C程序設(shè)計(jì)》學(xué)習(xí)筆記P1:C語言概述

(合計(jì)2427字,用時(shí)80min——)
第1章?程序設(shè)計(jì)和C語言
1.1 什么是計(jì)算機(jī)程序
程序:
定義:一組計(jì)算機(jī)能識(shí)別和執(zhí)行的指令;
原理——
每一條指令使計(jì)算機(jī)執(zhí)行特定的操作;
只要讓計(jì)算機(jī)執(zhí)行這個(gè)程序,計(jì)算機(jī)就會(huì)“自動(dòng)地”執(zhí)行各條指令,有條不紊地進(jìn)行工作;
一個(gè)特定的指令程序,用來完成一定的功能;
為了使計(jì)算機(jī)系統(tǒng)能實(shí)現(xiàn)各種功能,需要成千上萬個(gè)程序;
這些程序大多數(shù)是由計(jì)算機(jī)軟件設(shè)計(jì)人員根據(jù)需要設(shè)計(jì)好的,作為計(jì)算機(jī)的軟件系統(tǒng)的一部分提供給用戶使用;
用戶還可以根據(jù)自己的實(shí)際需要設(shè)計(jì)一些應(yīng)用程序;
地位:計(jì)算機(jī)的一切操作都是由程序控制的,離開程序,計(jì)算機(jī)將一事無成,
計(jì)算機(jī)的本質(zhì)是程序的機(jī)器,程序和指令是計(jì)算機(jī)系統(tǒng)中最基本的概念,
只有懂得程序設(shè)計(jì),才能真正了解計(jì)算機(jī)是怎樣工作的,才能更深入地使用計(jì)算機(jī),
1.2 什么是計(jì)算機(jī)語言
發(fā)展階段:
機(jī)器語言(machine language):
原理:計(jì)算機(jī)工作基于二進(jìn)制,從根本上說,計(jì)算機(jī)只能識(shí)別和接受由0和1組成的指令;
概述:在計(jì)算機(jī)發(fā)展的初期,一般計(jì)算機(jī)的指令長(zhǎng)度為16,即以16個(gè)二進(jìn)制數(shù)(0或1)組成一條指令,16個(gè)0和1可以組成各種排列組合;
概念:
機(jī)器指令(machine instruction):計(jì)算機(jī)能直接識(shí)別和接受的二進(jìn)制代碼;
機(jī)器語言(machine language):機(jī)器指令的集合;
特點(diǎn):機(jī)器語言與人們習(xí)慣用的語言差別太大,難學(xué)、難寫、難記、難檢查、難修改,難以推廣使用。
符號(hào)語言(symbolic language):
概述:為了克服機(jī)器語言的上述缺點(diǎn),人們創(chuàng)造出符號(hào)語言(symbolic language),它用一些英文字母和數(shù)字表示一個(gè)指令,例如用ADD代表“加”,SUB代表“減”,LD代表“傳送”;
概念:
符號(hào)匯編語言(symbolic assembler language):一般,一條符號(hào)語言的指令對(duì)應(yīng)轉(zhuǎn)換為一條機(jī)器指令,轉(zhuǎn)換的過程稱為“代真”或“匯編”,符號(hào)語言又稱為符號(hào)匯編語言(assembler language);
低級(jí)語言(low level language):機(jī)器語言和匯編語言是完全依賴于具體機(jī)器特性的,是面向機(jī)器的語言,由于它“貼近”計(jì)算機(jī),或者說離計(jì)算機(jī)“很近”,稱為計(jì)算機(jī)低級(jí)語言(low level language)。
高級(jí)語言(high level language):
背景:為了克服低級(jí)語言的缺點(diǎn),20世紀(jì)50年代創(chuàng)造出了第一個(gè)計(jì)算機(jī)高級(jí)語言——FORTRAN語言;
特點(diǎn):
很接近于人們習(xí)慣使用的自然語言和數(shù)學(xué)語言,程序中用到的語句和指令是用英文單詞表示的;
程序中所用的運(yùn)算符和運(yùn)算表達(dá)式和人們?nèi)粘趟玫臄?shù)學(xué)式子差不多;
高級(jí)語言的一個(gè)語句往往對(duì)應(yīng)多條機(jī)器指令;
概念:
高級(jí)語言(high level language):這種語言功能很強(qiáng),且不依賴于具體機(jī)器,用它寫出的程序?qū)θ魏涡吞?hào)的計(jì)算機(jī)都適用(或只須作很少的修改),它與具體機(jī)器舉例較遠(yuǎn),故稱為計(jì)算機(jī)高級(jí)語言;
編譯:用一種稱為編譯程序的軟件把用高級(jí)語言寫的程序(稱為源程序,source program)轉(zhuǎn)換為機(jī)器指令的程序(稱為目標(biāo)程序,object program),然后讓計(jì)算機(jī)執(zhí)行機(jī)器指令程序,最后得到結(jié)果;
發(fā)展階段:
非結(jié)構(gòu)化的語言:初期的語言屬于非結(jié)構(gòu)化的語言,編程風(fēng)格比較隨意,只要符合語法規(guī)則即可,沒有嚴(yán)格的規(guī)范要求,程序中的流程可以隨意跳轉(zhuǎn);——難以閱讀和維護(hù);
結(jié)構(gòu)化語言:程序必須由具有良好特性的基本結(jié)構(gòu)(順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)機(jī)構(gòu))構(gòu)成,程序中的流程不允許隨意跳轉(zhuǎn),程序總是由上而下順序執(zhí)行各個(gè)基本機(jī)構(gòu);
基于過程的語言:在編寫程序時(shí)需要具體制定每一個(gè)過程的細(xì)節(jié),在編寫規(guī)模較小的程序時(shí),還能得心應(yīng)手,但在處理規(guī)模較大的程序時(shí),就顯得捉襟見肘、力不從心了;
面向?qū)ο蟮恼Z言:面對(duì)的不是過程的細(xì)節(jié),而是一個(gè)個(gè)對(duì)象,對(duì)象是由數(shù)據(jù)以及對(duì)數(shù)據(jù)進(jìn)行的操作組成的。
1.3?C語言的發(fā)展及其特點(diǎn)
發(fā)展:
BCPL語言:1967年英國(guó)劍橋大學(xué)的Martin Richards推出了沒有類型的BCPL(Basic Combined Programming Language)語言;
B語言:1970年美國(guó)AT&T貝爾實(shí)驗(yàn)室的Ken Thompson以BCPL語言為基礎(chǔ),設(shè)計(jì)出了很簡(jiǎn)單且很接近硬件的B語言(取BCPL的第一個(gè)字母),但B語言過于簡(jiǎn)單,功能有限;
C語言誕生:1972-1973年間,美國(guó)貝爾實(shí)驗(yàn)室的D. M. Ritchie在B語言的基礎(chǔ)上設(shè)計(jì)出了C語言;
C語言成長(zhǎng):最初的C語言只是為描述和實(shí)現(xiàn)UNIX操作系統(tǒng)提供一種工作語言而設(shè)計(jì)的,1973年,Ken Thompson和D. M. Ritchie合作把UNIX的90%以上用C語言改寫,隨著UNIX的日益廣泛使用,C語言也迅速得到推廣;
ANSI C:ANSI C比原來的C有了很大的發(fā)展;
ISO對(duì)C 90做的修訂(ISO/IEC 9899:1999):在基本保留原來的C語言特征的基礎(chǔ)上,針對(duì)應(yīng)用的需要,增加了一些功能,尤其是C++中的一些功能,命名為ISO/IEC 9899:1999。
概述:
C語言既保持了BCPL和B語言的優(yōu)點(diǎn)(精煉,接近硬件),又克服了它們的缺點(diǎn)(過于簡(jiǎn)單、無數(shù)據(jù)類型等);
C語言的新特點(diǎn)主要表現(xiàn)在具有多種數(shù)據(jù)類型(如字符、數(shù)值、數(shù)組、結(jié)構(gòu)體和指針等);
開發(fā)C語言的目的在于盡可能降低用它所寫的軟件對(duì)硬件平臺(tái)的依賴程度,使之具有可移植性;
C語言是一種用途廣泛、功能強(qiáng)大、使用靈活的過程性(procedural)編程語言,既可用于編寫應(yīng)用軟件,又能用于編寫系統(tǒng)軟件。
特點(diǎn):
語言簡(jiǎn)潔、緊湊,使用方便、靈活;
運(yùn)算符豐富;
數(shù)據(jù)類型豐富;
具有結(jié)構(gòu)化的控制語句(如if...else語句、while語句、do...while語句、switch語句和for語句);
語法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大;
C語言允許直接訪問物理地址,能進(jìn)行位(bit)操作,能實(shí)現(xiàn)匯編語言的大部分功能,可以直接對(duì)硬件進(jìn)行操作;
用C語言編寫的程序可移植性好;
生成目標(biāo)代碼質(zhì)量高,程序設(shè)計(jì)效率高。