第1章 程序設(shè)計(jì)與算法
1.1 程序設(shè)計(jì)語言的發(fā)展
1. 機(jī)器語言
2. 匯編語言
3. 高級語言
1.2 C語言的特點(diǎn)
1.2.1 C語言是中級語言
1.2.2 C語言是結(jié)構(gòu)化語言
1.2.3 C語言是程序員的語言
1.3 C語言的程序結(jié)構(gòu)
1.3.1 基本程序結(jié)構(gòu)
1.3.2 函數(shù)庫和鏈接
1.3.3 開發(fā)一個(gè)C程序
1.4 算法
1.4.1 流程圖與算法的結(jié)構(gòu)化描述
1.4.2 用N-S圖描述算法
1.4.3 用PAD圖描述算法
1.1 程序設(shè)計(jì)語言的發(fā)展
自1 9 4 6年世界上第一臺電子計(jì)算機(jī)問世以來,計(jì)算機(jī)科學(xué)及其應(yīng)用的發(fā)展十分迅猛,計(jì)算機(jī)被廣泛地應(yīng)用于人類生產(chǎn)、生活的各個(gè)領(lǐng)域,推動(dòng)了社會(huì)的進(jìn)步與發(fā)展。特別是隨著國際互聯(lián)網(wǎng)( Internet)日益深入千家萬戶,傳統(tǒng)的信息收集、傳輸及交換方式正被革命性地改變,我們已經(jīng)難以擺脫對計(jì)算機(jī)的依賴,計(jì)算機(jī)已將人類帶入了一個(gè)新的時(shí)代—信息時(shí)代。新的時(shí)代對于我們的基本要求之一是:自覺地、主動(dòng)地學(xué)習(xí)和掌握計(jì)算機(jī)的基本知識和基本技能,并把它作為自己應(yīng)該具備的基本素質(zhì)。要充分認(rèn)識到,缺乏計(jì)算機(jī)知識,就是信息時(shí)代的“文盲”。
對于理工科的大學(xué)生而言,掌握一門高級語言及其基本的編程技能是必需的。大學(xué)學(xué)習(xí),除了掌握本專業(yè)系統(tǒng)的基礎(chǔ)知識外,科學(xué)精神的培養(yǎng)、思維方法的鍛煉、嚴(yán)謹(jǐn)踏實(shí)的科研作風(fēng)養(yǎng)成,以及分析問題、解決問題的能力的訓(xùn)練,都是日后工作的基礎(chǔ)。學(xué)習(xí)計(jì)算機(jī)語言,正是一種十分有益的訓(xùn)練方式,而語言本身又是與計(jì)算機(jī)進(jìn)行交互的有力的工具。
一臺計(jì)算機(jī)是由硬件系統(tǒng)和軟件系統(tǒng)兩大部分構(gòu)成的,硬件是物質(zhì)基礎(chǔ),而軟件可以說是計(jì)算機(jī)的靈魂,沒有軟件,計(jì)算機(jī)是一臺“*機(jī)”,是什么也不能干的,有了軟件,才能靈動(dòng)起來,成為一臺真正的“電腦”。所有的軟件,都是用計(jì)算機(jī)語言編寫的。計(jì)算機(jī)程序設(shè)計(jì)語言的發(fā)展,經(jīng)歷了從機(jī)器語言、匯編語言到高級語言的歷程。
1. 機(jī)器語言
電子計(jì)算機(jī)所使用的是由“ 0”和“1”組成的二進(jìn)制數(shù),二進(jìn)制是計(jì)算機(jī)的語言的基礎(chǔ)。計(jì)算機(jī)發(fā)明之初,人們只能降貴紆尊,用計(jì)算機(jī)的語言去命令計(jì)算機(jī)干這干那,一句話,就是寫出一串串由“ 0”和“ 1”組成的指令序列交由計(jì)算機(jī)執(zhí)行,這種語言,就是機(jī)器語言。使用機(jī)器語言是十分痛苦的,特別是在程序有錯(cuò)需要修改時(shí),更是如此。而且,由于每臺計(jì)算機(jī)的指令系統(tǒng)往往各不相同,所以,在一臺計(jì)算機(jī)上執(zhí)行的程序,要想在另一臺計(jì)算機(jī)上執(zhí)行,必須另編程序,造成了重復(fù)工作。但由于使用的是針對特定型號計(jì)算機(jī)的語言,故而運(yùn)算效率是所有語言中的。機(jī)器語言,是第一代計(jì)算機(jī)語言。
2. 匯編語言
為了減輕使用機(jī)器語言編程的痛苦,人們進(jìn)行了一種有益的改進(jìn):用一些簡潔的英文字母、符號串來替代一個(gè)特定的指令的二進(jìn)制串,比如,用“ ADD”代表加法,“MOV”代表數(shù)據(jù)傳遞等等,這樣一來,人們很容易讀懂并理解程序在干什么,糾錯(cuò)及維護(hù)都變得方便了,這種程序設(shè)計(jì)語言就稱為匯編語言,即第二代計(jì)算機(jī)語言。然而計(jì)算機(jī)是不認(rèn)識這些符號的,這就需要一個(gè)專門的程序,專門負(fù)責(zé)將這些符號翻譯成二進(jìn)制數(shù)的機(jī)器語言,這種翻譯程序被稱為匯編程序。
匯編語言同樣十分依賴于機(jī)器硬件,移植性不好,但效率仍十分高,針對計(jì)算機(jī)特定硬件而編制的匯編語言程序,能準(zhǔn)確發(fā)揮計(jì)算機(jī)硬件的功能和特長,程序精煉而質(zhì)量高,所以至今仍是一種常用而強(qiáng)有力的軟件開發(fā)工具。
3. 高級語言
從最初與計(jì)算機(jī)交流的痛苦經(jīng)歷中,人們意識到,應(yīng)該設(shè)計(jì)一種這樣的語言,這種語言接近于數(shù)學(xué)語言或人的自然語言,同時(shí)又不依賴于計(jì)算機(jī)硬件,編出的程序能在所有機(jī)器上通用。經(jīng)過努力, 1954年,第一個(gè)完全脫離機(jī)器硬件的高級語言—FORTRAN問世了, 40多年來,共有幾百種高級語言出現(xiàn),有重要意義的有幾十種,影響較大、使用較普遍的有FORTRAN、ALGOL、COBOL、BASI C、LISP、SNOBOL、PL / 1、Pascal、C、PROLOG、Ada、C+ +、VC、VB、Delphi、AVA等。
高級語言的發(fā)展也經(jīng)歷了從早期語言到結(jié)構(gòu)化程序設(shè)計(jì)語言,從面向過程到非過程化程序語言的過程。相應(yīng)地,軟件的開發(fā)也由最初的個(gè)體手工作坊式的封閉式生產(chǎn),發(fā)展為產(chǎn)業(yè)化、流水線式的工業(yè)化生產(chǎn)。6 0年代中后期,軟件越來越多,規(guī)模越來越大,而軟件的生產(chǎn)基本上是人自為戰(zhàn),缺乏科學(xué)規(guī)范的系統(tǒng)規(guī)劃與測試、評估標(biāo)準(zhǔn),其惡果是大批耗費(fèi)巨資建立起來的軟件系統(tǒng),由于含有錯(cuò)誤而無法使用,甚至帶來巨大損失,軟件給人的感覺是越來越不可靠,以致幾乎沒有不出錯(cuò)的軟件。這一切,極大地震動(dòng)了計(jì)算機(jī)界,史稱“軟件危機(jī)”。人們認(rèn)識到:大型程序的編制不同于寫小程序,它應(yīng)該是一項(xiàng)新的技術(shù),應(yīng)該像處理工程一樣處理軟件研制的全過程。程序的設(shè)計(jì)應(yīng)易于保證正確性,也便于驗(yàn)證正確性。1 9 6 9年,提出了結(jié)構(gòu)化程序設(shè)計(jì)方法,1 9 7 0年,第一個(gè)結(jié)構(gòu)化程序設(shè)計(jì)語言—Pascal語言出現(xiàn),標(biāo)志著結(jié)構(gòu)化程序設(shè)計(jì)時(shí)期的開始。
1.1 程序設(shè)計(jì)語言的發(fā)展
1. 機(jī)器語言
2. 匯編語言
3. 高級語言
1.2 C語言的特點(diǎn)
1.2.1 C語言是中級語言
1.2.2 C語言是結(jié)構(gòu)化語言
1.2.3 C語言是程序員的語言
1.3 C語言的程序結(jié)構(gòu)
1.3.1 基本程序結(jié)構(gòu)
1.3.2 函數(shù)庫和鏈接
1.3.3 開發(fā)一個(gè)C程序
1.4 算法
1.4.1 流程圖與算法的結(jié)構(gòu)化描述
1.4.2 用N-S圖描述算法
1.4.3 用PAD圖描述算法
1.1 程序設(shè)計(jì)語言的發(fā)展
自1 9 4 6年世界上第一臺電子計(jì)算機(jī)問世以來,計(jì)算機(jī)科學(xué)及其應(yīng)用的發(fā)展十分迅猛,計(jì)算機(jī)被廣泛地應(yīng)用于人類生產(chǎn)、生活的各個(gè)領(lǐng)域,推動(dòng)了社會(huì)的進(jìn)步與發(fā)展。特別是隨著國際互聯(lián)網(wǎng)( Internet)日益深入千家萬戶,傳統(tǒng)的信息收集、傳輸及交換方式正被革命性地改變,我們已經(jīng)難以擺脫對計(jì)算機(jī)的依賴,計(jì)算機(jī)已將人類帶入了一個(gè)新的時(shí)代—信息時(shí)代。新的時(shí)代對于我們的基本要求之一是:自覺地、主動(dòng)地學(xué)習(xí)和掌握計(jì)算機(jī)的基本知識和基本技能,并把它作為自己應(yīng)該具備的基本素質(zhì)。要充分認(rèn)識到,缺乏計(jì)算機(jī)知識,就是信息時(shí)代的“文盲”。
對于理工科的大學(xué)生而言,掌握一門高級語言及其基本的編程技能是必需的。大學(xué)學(xué)習(xí),除了掌握本專業(yè)系統(tǒng)的基礎(chǔ)知識外,科學(xué)精神的培養(yǎng)、思維方法的鍛煉、嚴(yán)謹(jǐn)踏實(shí)的科研作風(fēng)養(yǎng)成,以及分析問題、解決問題的能力的訓(xùn)練,都是日后工作的基礎(chǔ)。學(xué)習(xí)計(jì)算機(jī)語言,正是一種十分有益的訓(xùn)練方式,而語言本身又是與計(jì)算機(jī)進(jìn)行交互的有力的工具。
一臺計(jì)算機(jī)是由硬件系統(tǒng)和軟件系統(tǒng)兩大部分構(gòu)成的,硬件是物質(zhì)基礎(chǔ),而軟件可以說是計(jì)算機(jī)的靈魂,沒有軟件,計(jì)算機(jī)是一臺“*機(jī)”,是什么也不能干的,有了軟件,才能靈動(dòng)起來,成為一臺真正的“電腦”。所有的軟件,都是用計(jì)算機(jī)語言編寫的。計(jì)算機(jī)程序設(shè)計(jì)語言的發(fā)展,經(jīng)歷了從機(jī)器語言、匯編語言到高級語言的歷程。
1. 機(jī)器語言
電子計(jì)算機(jī)所使用的是由“ 0”和“1”組成的二進(jìn)制數(shù),二進(jìn)制是計(jì)算機(jī)的語言的基礎(chǔ)。計(jì)算機(jī)發(fā)明之初,人們只能降貴紆尊,用計(jì)算機(jī)的語言去命令計(jì)算機(jī)干這干那,一句話,就是寫出一串串由“ 0”和“ 1”組成的指令序列交由計(jì)算機(jī)執(zhí)行,這種語言,就是機(jī)器語言。使用機(jī)器語言是十分痛苦的,特別是在程序有錯(cuò)需要修改時(shí),更是如此。而且,由于每臺計(jì)算機(jī)的指令系統(tǒng)往往各不相同,所以,在一臺計(jì)算機(jī)上執(zhí)行的程序,要想在另一臺計(jì)算機(jī)上執(zhí)行,必須另編程序,造成了重復(fù)工作。但由于使用的是針對特定型號計(jì)算機(jī)的語言,故而運(yùn)算效率是所有語言中的。機(jī)器語言,是第一代計(jì)算機(jī)語言。
2. 匯編語言
為了減輕使用機(jī)器語言編程的痛苦,人們進(jìn)行了一種有益的改進(jìn):用一些簡潔的英文字母、符號串來替代一個(gè)特定的指令的二進(jìn)制串,比如,用“ ADD”代表加法,“MOV”代表數(shù)據(jù)傳遞等等,這樣一來,人們很容易讀懂并理解程序在干什么,糾錯(cuò)及維護(hù)都變得方便了,這種程序設(shè)計(jì)語言就稱為匯編語言,即第二代計(jì)算機(jī)語言。然而計(jì)算機(jī)是不認(rèn)識這些符號的,這就需要一個(gè)專門的程序,專門負(fù)責(zé)將這些符號翻譯成二進(jìn)制數(shù)的機(jī)器語言,這種翻譯程序被稱為匯編程序。
匯編語言同樣十分依賴于機(jī)器硬件,移植性不好,但效率仍十分高,針對計(jì)算機(jī)特定硬件而編制的匯編語言程序,能準(zhǔn)確發(fā)揮計(jì)算機(jī)硬件的功能和特長,程序精煉而質(zhì)量高,所以至今仍是一種常用而強(qiáng)有力的軟件開發(fā)工具。
3. 高級語言
從最初與計(jì)算機(jī)交流的痛苦經(jīng)歷中,人們意識到,應(yīng)該設(shè)計(jì)一種這樣的語言,這種語言接近于數(shù)學(xué)語言或人的自然語言,同時(shí)又不依賴于計(jì)算機(jī)硬件,編出的程序能在所有機(jī)器上通用。經(jīng)過努力, 1954年,第一個(gè)完全脫離機(jī)器硬件的高級語言—FORTRAN問世了, 40多年來,共有幾百種高級語言出現(xiàn),有重要意義的有幾十種,影響較大、使用較普遍的有FORTRAN、ALGOL、COBOL、BASI C、LISP、SNOBOL、PL / 1、Pascal、C、PROLOG、Ada、C+ +、VC、VB、Delphi、AVA等。
高級語言的發(fā)展也經(jīng)歷了從早期語言到結(jié)構(gòu)化程序設(shè)計(jì)語言,從面向過程到非過程化程序語言的過程。相應(yīng)地,軟件的開發(fā)也由最初的個(gè)體手工作坊式的封閉式生產(chǎn),發(fā)展為產(chǎn)業(yè)化、流水線式的工業(yè)化生產(chǎn)。6 0年代中后期,軟件越來越多,規(guī)模越來越大,而軟件的生產(chǎn)基本上是人自為戰(zhàn),缺乏科學(xué)規(guī)范的系統(tǒng)規(guī)劃與測試、評估標(biāo)準(zhǔn),其惡果是大批耗費(fèi)巨資建立起來的軟件系統(tǒng),由于含有錯(cuò)誤而無法使用,甚至帶來巨大損失,軟件給人的感覺是越來越不可靠,以致幾乎沒有不出錯(cuò)的軟件。這一切,極大地震動(dòng)了計(jì)算機(jī)界,史稱“軟件危機(jī)”。人們認(rèn)識到:大型程序的編制不同于寫小程序,它應(yīng)該是一項(xiàng)新的技術(shù),應(yīng)該像處理工程一樣處理軟件研制的全過程。程序的設(shè)計(jì)應(yīng)易于保證正確性,也便于驗(yàn)證正確性。1 9 6 9年,提出了結(jié)構(gòu)化程序設(shè)計(jì)方法,1 9 7 0年,第一個(gè)結(jié)構(gòu)化程序設(shè)計(jì)語言—Pascal語言出現(xiàn),標(biāo)志著結(jié)構(gòu)化程序設(shè)計(jì)時(shí)期的開始。