C語言程序設計97871132725790000(2-1)_第1頁
C語言程序設計97871132725790000(2-1)_第2頁
C語言程序設計97871132725790000(2-1)_第3頁
C語言程序設計97871132725790000(2-1)_第4頁
C語言程序設計97871132725790000(2-1)_第5頁
已閱讀5頁,還剩306頁未讀, 繼續(xù)免費閱讀

付費閱讀全文

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

職業(yè)教育“十三五”規(guī)劃教材

中高職銜接特色規(guī)劃教材

C語言程序設計

劉映群吳道君林佩娟◎主編

楊紀爭衛(wèi)靜婷◎副主編

內容簡介

本書是職業(yè)教育“十三五”規(guī)劃教材,全書本著“案例引入、循序漸進、按章小結”的原則

編寫,根據高職學生的特點,對C語言各知識點的闡述盡量通俗易懂,內容選擇難易適當,每章

以一個案例引入,同時配以相當數量的例題與習題,便于讀者邊學邊練。本書采用翻轉課堂的教

學模式,內容全面,條理清晰。

全書共分10章,主要內容包括C語言的基本概念、語法和數據結構,具體介紹了C語言的

數據類型、表達式及其運算、結構化程序設計語句和數組、函數、指針、結構體、文件操作、位

運算、編譯預處理及程序設計的方法。本書注重應用性和實踐性,通過一些典型案例的解題分析

幫助讀者進一步加強對C語言的理解。

本書適合作為普通高等職業(yè)院校各專業(yè)“C語言程序設計”課程的教材,也可作為各類開放

大學、成人院校、培訓學校的教材,還可供準備參加計算機等級考試(二級C語言)和自學C語

言的讀者閱讀參考。

圖書在版編目(CIP)數據

C語言程序設計/劉映群,吳道君,林佩娟主編.—2版.—北京:

中國鐵道出版社有限公司,2020.9

職業(yè)教育“十三五”規(guī)劃教材中高職銜接特色規(guī)劃教材

ISBN978-7-113-27257-9

Ⅰ.①C…Ⅱ.①劉…②吳…③林…Ⅲ.①C語言-程序設計-

職業(yè)教育-教材Ⅳ.①TP312.8

中國版本圖書館CIP數據核字(2020)第171316號

書名:C語言程序設計

作者:劉映群吳道君林佩娟

策劃:韓從付編輯部電話:(010)63549501

責任編輯:賈星賈淑媛

封面設計:劉穎

責任校對:張玉華

責任印制:樊啟鵬

出版發(fā)行:中國鐵道出版社有限公司(100054,北京市西城區(qū)右安門西街8號)

網址:/51eds/

印刷:國鐵印務有限公司

版次:2016年10月第1版2020年9月第2版2020年9月第1次印刷

開本:787mm×1092mm1/16印張:19.25字數:479千

書號:ISBN978-7-113-27257-9

定價:49.80元

版權所有侵權必究

凡購買鐵道版圖書,如有印制質量問題,請與本社教材圖書營銷部聯系調換。電話:(010)63550836

打擊盜版舉報電話:(010)63549461

前言

C語言作為一種廣泛流行的結構化程序設計語言,成為了大多數高職高專理工類專業(yè)開設計

算機語言課程的入門教學語言。C語言既適合于開發(fā)系統(tǒng)程序,又適合于開發(fā)應用程序;既具有

高級語言功能強大、使用靈活的特點,又具有匯編語言適合編寫底層應用程序的實用性。其對于

各理工類專業(yè)的學生來說都具有很強的實際應用價值,因此學好C語言對于理工類專業(yè)學生來

說具有現實意義。本書本著從基礎性、實用性出發(fā)的原則,結合一些典型案例進行講解,重點引

導讀者學習掌握程序設計技術。

本書于2016年10月出版發(fā)行第一版,受到廣大讀者的歡迎,先后多次重印。根據有關專家

和讀者的意見,結合編者多年教學和實踐應用體會,在第一版的基礎上作了修訂,對原版內容進

行了補充,增加了大量翔實的例題和算法流程圖,增加了“位運算”模塊,使內容更加充實。

全書共分10章,主要內容包括C語言的基本概念、語法和數據結構,具體介紹了C語言的

數據類型、表達式及其運算、結構化程序設計語句和數組、函數、指針、結構體、文件操作、位

運算、編譯預處理及程序設計的方法。

本書主要特點如下:

(1)本著“案例引入,循序漸進,按章小結”的原則編寫。

(2)結合高職高專學生的特點,對C語言各知識點的闡述盡量通俗易懂,內容選擇難易

適當。

(3)注重應用性和實踐性,通過一些典型案例的解題分析幫助讀者進一步加強對C語言的

理解。

(4)每一章精心挑選具有代表性的案例,全部在Dev-C++及VisualC++6.0環(huán)境下調試通過。

但讀者仍然可自由選擇其他符合ANSI標準的C系統(tǒng)編程環(huán)境作為學習工具??紤]到有部分讀者

會參加全國計算機等級考試(二級C語言),而2018年3月開始,等級考試已使用MicrosoftVisual

C++2010學習版,為了方便讀者,在本書附錄F也給出了MicrosoftVisualC++2010學習版的簡

明使用方法。

(5)本書采用翻轉課堂的教學模式,內容全面,條理清晰。

本書適合作為普通高等職業(yè)院校各專業(yè)“C語言程序設計”課程的教材,也可作為各類開放

大學、成人院校、培訓學校的教材,還可供準備參加計算機等級考試(二級C語言)和自學C

語言的讀者閱讀參考。本書配有的全部源程序、電子教案等教學資料,可在http://www.tdpress.

com/51eds/處下載。本書與劉映群等主編的《C語言程序設計學習指導與習題解答》配套出版。

由于原編寫人員單位調動等原因,第二版編寫人員作了調整,由廣東開放大學(廣東理工職

業(yè)學院)劉映群、廣東嶺南職業(yè)技術學院吳道君,廣州琪揚電子科技有限公司林佩娟任主編,河

南工業(yè)職業(yè)技術學院楊紀爭、廣東開放大學(廣東理工職業(yè)學院)衛(wèi)靜婷任副主編,全書由劉映群

負責策劃和統(tǒng)稿。

中國鐵道出版社有限公司的編輯對本書的編寫工作給予了大力支持,在此對他們致以衷心

的感謝。在本書編寫過程中,編者還參考了許多教材、文獻及網絡資料,在此一并向這些資料

的作者深表感謝。

限于編者水平有限,加之時間倉促,書中難免存在疏漏與不足之處,懇請廣大讀者批評指

正。歡迎讀者將建議和意見通過E-mail發(fā)給我們(liulaoshi2014@),以便再版時進

行修改。

編者

2020年5月

目錄

CONTENTS

第1章C語言概述................................12.3.4數據類型轉換..............................38

1.1案例引入..............................................12.4運算符及表達式.................................41

1.2為什么要學習C語言..........................22.4.1算術運算符及算術表達式..........41

1.3C語言程序與算法...............................42.4.2賦值運算符及賦值表達式..........44

1.3.1C語言的發(fā)展與特點....................42.4.3關系運算符及關系表達式..........45

1.3.2程序與算法的概念........................62.4.4邏輯運算符及邏輯表達式..........46

1.3.3C語言的基本符號、標識符2.4.5條件運算符及條件表達式..........48

與關鍵字.....................................122.4.6其他運算符及表達式..................49

1.4C程序運行過程.................................13小結.............................................................51

1.5Dev-C++集成環(huán)境與程序上機習題.............................................................51

操作....................................................14第3章順序結構程序設計...................54

1.5.1Dev-C++集成環(huán)境的安裝3.1案例引入............................................54

與基本設置.................................143.2結構化程序設計的基本概念.............55

1.5.2Dev-C++集成環(huán)境的程序3.3賦值語句............................................56

上機操作.....................................163.4數據的輸入/輸出................................57

1.6VisualC++6.0集成環(huán)境3.4.1基本輸入/輸出的概念.................57

與程序上機操作................................193.4.2字符、字符串數據的

1.6.1VisualC++6.0集成環(huán)境的輸入/輸出.....................................58

安裝.............................................193.4.3格式化輸入/輸出函數.................61

1.6.2VisualC++6.0集成環(huán)境的3.5復合語句和空語句.............................66

程序上機操作..............................193.6程序設計舉例....................................66

小結............................................................23小結.............................................................70

習題............................................................23習題.............................................................70

第2章數據類型、表達式及其運算.....29第4章選擇結構程序設計...................76

2.1案例引入............................................294.1案例引入............................................76

2.2常量與變量........................................304.2if語句和if語句構成的選擇結構......78

2.2.1常量.............................................304.3switch語句和switch、break語句

2.2.2變量.............................................31構成的選擇結構.................................86

2.3C語言的數據類型.............................324.4程序設計舉例....................................90

2.3.1整型.............................................33小結.............................................................96

2.3.2實型.............................................35習題.............................................................96

2.3.3字符型.........................................37

IIC語言程序設計

第5章循環(huán)結構程序設計.................101第7章函數......................................146

5.1案例引入..........................................1017.1案例引入..........................................146

5.2while語句和while語句構成的7.2概述..................................................148

循環(huán)結構..........................................1037.3函數的定義......................................149

5.3do...while語句和do...while語句7.4函數的參數和返回值.......................151

構成的循環(huán)結構..............................1047.5函數的調用......................................153

5.4for語句和for語句構成的循環(huán)7.6函數的嵌套調用...............................154

結構..................................................1077.7函數的遞歸調用...............................156

5.5循環(huán)結構的嵌套..............................1107.8數組作為函數參數...........................158

5.6循環(huán)的控制......................................1127.9變量作用域與存儲類別...................163

5.6.1break語句和continue語句.......1137.9.1變量作用域................................163

5.6.2goto語句...................................1157.9.2變量存儲類別............................164

5.7幾種循環(huán)結構的比較.......................1177.10內部函數與外部函數.....................167

5.8程序設計舉例..................................1187.11程序設計舉例.................................167

小結..........................................................121小結...........................................................170

習題..........................................................122習題...........................................................170

第6章數組......................................126第8章指針、結構體與共用體...........174

6.1案例引入..........................................1268.1案例引入..........................................174

6.2數組的概念......................................1278.2指針..................................................176

6.3一維數組..........................................1288.2.1地址和指針................................176

6.3.1一維數組的定義.......................1288.2.2聲明指針變量............................177

6.3.2一維數組的引用.......................1298.2.3指針的基本操作........................177

6.3.3一維數組的初始化....................1298.2.4指針和數組................................181

6.4二維數組..........................................1308.3結構體..............................................184

6.4.1二維數組的定義.......................1318.3.1結構體類型的定義....................184

6.4.2二維數組的引用.......................1318.3.2定義結構體類型的變量............185

6.4.3二維數組的初始化....................1328.3.3結構體變量的初始化................187

6.5字符型數組和字符串.......................1348.3.4結構體類型變量的引用............188

6.5.1字符型數組的定義、引用8.3.5結構體數組................................189

和初始化...................................1348.4共用體..............................................189

6.5.2字符型數組的輸入8.5枚舉類型..........................................193

和輸出函數...............................1358.6定義符typedef..................................194

6.5.3字符串函數...............................1368.7程序設計舉例..................................195

6.6程序設計舉例..................................139小結...........................................................198

小結..........................................................142習題...........................................................198

習題..........................................................142第9章文件與編譯預處理.................203

9.1案例引入..........................................203

目錄III

9.2文件概述..........................................20410.2位運算符........................................225

9.3文件的基本操作..............................20510.2.1二進制位運算概述..................225

9.3.1文件指針...................................20510.2.2各種位運算..............................226

9.3.2文件的打開...............................20510.3位域(位段).................................239

9.3.3文件的關閉...............................20610.3.1位域的定義和位域變量的

9.4文件的讀/寫.....................................206說明...........................................240

9.4.1字符讀/寫函數..........................20710.3.2位域的使用..............................241

9.4.2格式化讀/寫函數......................20710.4程序設計舉例.................................242

9.4.3數據塊讀/寫函數......................207小結...........................................................253

9.4.4字符串讀/寫函數......................208習題...........................................................254

9.5文件的定位......................................208附錄A運算符及其結合性..................258

9.6編譯預處理......................................209

附錄BC語言常用函數......................260

9.6.1宏定義.......................................209

9.6.2文件包含...................................212附錄CASCII字符.............................267

9.6.3條件編譯...................................213附錄DDev-C++簡明使用說明...........270

9.7程序設計舉例..................................215附錄EVisualC++6.0簡明使用

小結..........................................................219說明.......................................280

習題..........................................................219

附錄FVisualC++2010Express

第10章位運算.................................223

簡明使用說明.........................291

10.1案例引入........................................223參考文獻..............................................300

C語言概述

第1章

本章通過一個簡單的案例介紹了為什么要學習C語言,同時也介紹了C語言程序與算法的概

念,以及Dev-C++、VisualC++6.0集成環(huán)境與程序上機操作步驟。通過本章的學習,可使學生對

C語言有初步的認識,學會編程環(huán)境的使用方法,為后面的編程內容打下良好基礎。

知識點:

程序與算法的概念。

C語言的發(fā)展與特點。

C語言的基本符號與關鍵字。

技能點:

Dev-C++集成環(huán)境安裝與程序上機操作步驟。

VisualC++6.0集成環(huán)境安裝與程序上機操作步驟。

1.1案例引入

C語言由BrianKernighan和DennisRitchie所開發(fā)。作為一種廣泛流行的結構化程序設計語言,

C語言成為開設計算機語言課程的入門教學語言。本案例利用C語言編程實現在計算機屏幕上輸

出“HelloWorld!”,通過演示這個最簡單但卻經典的程序,使學生對C語言程序有感性的認識,

并學會編程環(huán)境的使用。

【例1-1】最簡單的C語言程序。

程序代碼如下:

1/*例1-1最簡單的C語言程序*///注釋信息,運行時忽略

2#include"stdio.h"http://將庫文件stdio.h包含到該文件中

3intmain(void)//主函數名

4{//main()函數體開始

5printf("HelloWorld!\n");//在屏幕上輸出“HelloWorld!”,\n是換行符

6return0;//表示程序正常結束,向操作系統(tǒng)返回一個0值

7}//main()函數體結束

程序運行結果如圖1-1所示。

2C語言程序設計

圖1-1例1-1程序運行結果

程序分析:

程序的第2行是“文件包含”的預編譯命令,目的是把標準輸入/輸出頭文件stdio.h(standard

input/output)的內容包含到本程序中。

程序從第3行intmain()開始是函數頭,包含函數的返回類型(int)及函數名(main)。在任

意一個函數的函數頭中,位于()之前的一定是函數名。

函數頭之后,是一對大括號及所包含的內容,稱為函數體。

在函數體中,第5行“printf("HelloWorld!\n");”一行的作用是把兩個雙引號之前的內容輸出。該

語句用了輸出函數printf(),該函數可用來輸出各種數據,而兩個雙引號之間的信息是要原樣輸出的。

既然是原樣輸出,為什么輸出結果中沒有“\n”?因為在C語言中,\n是“換行符”,其作用

是讓光標(代表輸出位置)換到下一行的開頭,以便后面再輸出的信息從下一行開頭開始。輸出

\n時,除了光標換行,不會有任何看得見的符號出現。

程序第6行“return0;”表示函數的返回值,main()函數的返回值用于說明程序的退出狀態(tài)。

如果返回0,則代表程序正常退出,否則代表程序異常退出。

函數體中只有兩個語句,兩個語句的最后,各有一個分號,分號表示語句結束。

程序開頭第一行和右邊文字說明是注釋,用來對程序進行解釋。注釋可以提高程序的可讀性,

注釋對程序的運行沒有任何影響,編譯時這些注釋都被忽略。

C89只支持用/*........*/的方式進行注釋,C99還支持用//...的方式進行注釋。

兩種注釋的作用略有不同:/*........*/可以跨行,而//...到行末即止。

例如,把三行文字變成注釋。

方法一:

/*第一行注釋內容

第二行注釋內容

第三行注釋內容*/

方法二:

//第一行注釋內容

//第二行注釋內容

//第三行注釋內容

1.2為什么要學習C語言

1.C語言通用性強

C語言語法簡單精練、靈活方便、效率高、可移植性好,包含了基本的編程元素,對初學者

來說,學習成本低、時間短,能夠快速掌握其編程技術。

第1章C語言概述3

C語言是較早的一種編程語言,它是現代最流行的編程語言之一,它改變了編程世界,后來

推出的很多語言都參照了C語言。

C++和Objective-C以C語言為基礎進行擴展,加入面向對象等高級特性。

PHP、Java、Python的底層也都由C語言來實現,學會了C語言,再學習其他語言就會容易很

多,達到“一通百通”的效果。C語言比較接近計算機底層,能夠直接操作硬件,執(zhí)行效率高(比

C++、Java、Python和Ruby都高),而且學習C語言,對于理解計算機體系結構也有很大的幫助。

C語言應用廣泛,可以用來開發(fā)桌面軟件、硬件驅動、操作系統(tǒng)、單片機等,從微波爐到手

機,從汽車到智能電視,都有C語言的影子。

真正的編程高手,不是會很多門語言,而是用一門語言可以干所有的事情。C語言被譽為“無

所不能的語言”,人們所能想到的關于編程的事情,C語言幾乎都能完成。

2.編程語言使用排行榜

TIOBE編程語言社區(qū)排行榜是編程語言流行趨勢的一個指標,每月更新,這份排行榜排名基

于互聯網上有經驗的程序員、課程和第三方廠商的數量。排名使用著名的搜索引擎(諸如Google、

Yahoo!、Wikipedia、YouTube以及百度等)進行計算。

該排行榜可以用來檢查你的編程技能是否仍然是最新的,或開始建立一個新的軟件系統(tǒng)時,

做出應采取什么編程語言的戰(zhàn)略決策。

2019年10月,TIOBE編程語言排行榜TOP20如圖1-2所示,前10名編程語言長期走勢如

圖1-3所示。從圖1-2和圖1-3可以清楚地發(fā)現,C語言長期排在所有計算機編程語言的前兩位,

可見其受歡迎的程度。

2019年10月2018年10月變化編程語言使用率兩次變化

圖1-22019年10月編程語言排行榜TOP20榜單

4C語言程序設計

圖1-3前10名編程語言2002—2019年長期走勢圖

1.3C語言程序與算法

1.3.1C語言的發(fā)展與特點

在介紹C語言的發(fā)展歷程之前,先對程序語言進行大概的了解。

1.程序語言概述

計算機語言具有高級語言和低級語言之分。而高級語言又主要是相對于匯編語言而言的,它

是較接近自然語言和數學公式的編程,基本脫離了機器的硬件系統(tǒng),用人們更易理解的方式編寫

程序。

低級語言分機器語言(二進制語言)和匯編語言(符號語言),這兩種語言都是面向機器的語

言,和具體機器的指令系統(tǒng)密切相關。機器語言用指令代碼編寫程序,而符號語言用指令助記符

來編寫程序。

(1)機器語言(MachineLanguage)是一種指令集的體系。這種指令集稱機器碼(MachineCode),

是計算機的CPU可直接解讀的數據。機器語言是用二進制代碼表示的計算機能直接識別和執(zhí)行的

一種機器指令系統(tǒng)。

它是計算機的設計者通過計算機的硬件結構賦予計算機的操作功能。機器語言具有靈活、直

接執(zhí)行和速度快等特點。

一條指令就是機器語言的一個語句,它是一組有意義的二進制代碼,指令的基本格式如“操

作碼字段+地址碼字段”,其中操作碼指明了指令的操作性質及功能,地址碼則給出了操作數或操

作數的地址。

用機器語言編寫程序,編程人員要首先熟記所用計算機的全部指令代碼和代碼的含義。編寫

程序時,程序員得自己處理每條指令和每一數據的存儲分配和輸入/輸出,還得記住編程過程中每

步所使用的工作單元處在何種狀態(tài)。這是一件十分煩瑣的工作。編寫程序花費的時間往往是實際

運行時間的幾十倍或幾百倍。而且,編出的程序全是些0和1的指令代碼,直觀性差,還容易出

錯。除了計算機生產廠家的專業(yè)人員外,絕大多數的程序員已經不再去學習機器語言了。

第1章C語言概述5

(2)匯編語言(AssemblyLanguage)是面向機器的程序設計語言。在匯編語合中,用助記符

(Memoni)代替操作碼,地址符號(Symbol)或標號(Label)代替地址碼。這樣用符號代替機器

語言的二進制碼,就把機器語言變成了匯編語言。于是匯編語言亦稱為符號語言。使用匯編語

言編寫的程序,機器不能直接識別,要由一種程序將匯編語言翻譯成機器語言,這種起翻譯作

用的程序叫匯編程序,匯編程序是系統(tǒng)軟件中語言處理系統(tǒng)軟件。匯編程序把匯編語言翻譯成

機器語言的過程稱為匯編。

(3)高級語言并不是特指的某一種具體的語言,而是包括很多編程語言,如目前流行的Java、

C、C++、C#、Python等,這些語言的語法、命令格式都不相同。

高級語言與計算機的硬件結構及指令系統(tǒng)無關,它有更強的表達能力,可方便地表示數據的

運算和程序的控制結構,能更好地描述各種算法,而且容易學習掌握。但高級語言編譯生成的程

序代碼一般比用匯編程序語言設計的程序代碼長,執(zhí)行的速度也慢。所以匯編語言適合編寫一些

對速度和代碼長度要求高的程序和直接控制硬件的程序。高級語言、匯編語言和機器語言都是用

于編寫計算機程序的語言。

高級語言程序“看不見”機器的硬件結構,不能用于編寫直接訪問機器硬件資源的系統(tǒng)軟件

或設備控制軟件。為此,一些高級語言提供了與匯編語言之間的調用接口。用匯編語言編寫的程

序,可作為高級語言的一個外部過程或函數,利用堆棧來傳遞參數或參數的地址。

2.C語言的發(fā)展歷史

C語言的發(fā)展頗為有趣,它的原型是ALGOL(ALGOrithmicLanguage)60語言。

1963年,劍橋大學將ALGOL60語言發(fā)展成為CPL(CombinedProgrammingLanguage)語言。

1967年,劍橋大學的MatinRichards對CPL語言進行了簡化,于是產生了BCPL語言。

1970年,美國貝爾實驗室的KenThompson將BCPL進行了修改,并為它起了一個有趣的名

字“B語言”,意思是將CPL語言煮干,提煉出它的精華,并且他用B語言寫了第一個UNIX操

作系統(tǒng)。

1973年,美國貝爾實驗室的D.M.Ritchie在B語言的基礎上最終設計出了一種新的語言,他

取了BCPL的第二個字母作為這種語言的名字,這就是C語言。

3.C語言的主要特點

如果用最簡單的語言來概括,C語言的優(yōu)點是簡潔、靈活、表達能力強,產生的目標代碼質

量高、可移植性好。具體講,有以下幾點:

(1)C語言同時具備了高級語言和低級語言的特征。高級語言應該具備的優(yōu)點C語言都有,

例如可讀性好、容易記憶、再移植性強等,同時,C語言還提供了某些接近于匯編程序的功能,

如地址處理、二進制位運算、以寄存器存放變量等。因此,有人認為C語言是中級語言。C語言

適合編寫系統(tǒng)程序和各種工具。

(2)C語言是結構化程序設計語言,具有結構化程序設計所要求的控制語句,如條件語句if,

循環(huán)語句for、while、do...while等。

(3)C語言支持模塊化程序設計。C語言的程序是由函數構成的,每個函數可以單獨編寫和

調試。因此,遇到大型程序,程序員可以分別編寫不同的模塊,這使得管理和調試工作變得簡單

和方便,并且可以實現軟件重用,即重復使用那些經常需要使用的程序模塊。

6C語言程序設計

(4)C語言具有豐富的數據類型。C語言支持各種高級語言普遍使用的基本數據類型,并允

許用基本數據類型構造復雜數據類型。

(5)C語言的運算符種類多、功能強大。

(6)C語言的基本組成部分緊湊、簡潔,關鍵字少。

(7)C語言有大量標準化的庫函數。這些庫函數不但包括了各種數學計算函數,還有用于輸

入/輸出的庫函數以及系統(tǒng)函數,給程序員編寫程序帶來了極大的方便。

(8)生成代碼質量高。

(9)具有特別良好的可移植性,應用性廣,可在許多軟件平臺和硬件平臺上應用。

任何事物都不是十全十美的,C語言也有一定的缺陷,了解C語言的缺點,有助于在編寫程

序的時候揚長避短。具體講,有以下兩點:

(1)C語言的語法限制不太嚴格,對變量的類型約束不嚴格,影響程序的安全性,對數組下

標越界不作檢查等。從應用的角度看,C語言比其他高級語言難掌握。

(2)如果不加以特別注意,C程序的安全性將會降低。例如,如果對指針的使用沒有適當的

限制,導致指針設置錯誤,可能引起內存中的信息被破壞,如果經常出現這種錯誤,極有可能導

致系統(tǒng)崩潰。

1.3.2程序與算法的概念

1.程序

計算機幫助人類處理數據和文件的能力并不是天生的,而是人類賦予它們的,人類要想指揮

計算機,就要和計算機交流,交流的工具就是計算機程序。計算機程序(Program)是為實現特定

目標或解決特定問題而用計算機語言編寫的命令序列的集合,是用匯編語言、高級語言等開發(fā)編

制出來的可以運行的文件,在計算機中稱為可執(zhí)行文件(擴展名一般為.exe)。如果沒有程序,計

算機什么也不會做。

2.算法和算法的基本性質

算法,廣義地說是為解決一個問題而采取的方法和步驟。例如:要把籃球投進籃框里,首先

要拿起籃球,然后按照一定角度和力度把球投出去;噴氣式飛機要飛上天,首先要在跑道上加速,

當速度足夠大時,才能夠飛起來;三三刷牙法,也可以稱為一種算法,因為它指定了刷牙的步驟

和方法。對于同一個問題,可以有不同的解決方法和步驟,也就產生了不同的算法。比如說投籃,

可以用一只手,也可以用兩只手;可以先跳起來再投,也可以不跳直接投。

對于計算機程序應包含的內容,1976年,瑞士著名計算機科學家沃思(NikiklausWirth)提

出過一個著名公式:

數據結構+算法=程序

他認為,程序就是在數據的某些特定表示方法和結的構基礎上對抽象算法的具體表述。一個

程序應包括以下兩部分內容:

(1)對數據的描述,在程序中要指定數據的類型和數據的組織形式,即數據結構。

(2)對操作的描述,即操作步驟,也就是算法。

根據算法,依據某種規(guī)則編寫計算機可以執(zhí)行的命令序列就是編制程序,而編寫程序時所應

第1章C語言概述7

遵守的規(guī)則就是某種語言的語法。

由此可見,程序設計的關鍵之一是解題的步驟,即算法。學習高級語言的重點,就是要掌握

分析問題、解決問題的方法,鍛煉分析、分解、最終歸納整理出算法的能力。與之相對應,具體

語言(如C語言)是算法的一種具體實現工具。所以高級語言的學習中,一方面應熟練掌握該語

言的語法,因為它是算法實現的基礎;另一方面,必須認識到算法的重要性,加強思維訓練,以

寫出高質量的程序。

計算機算法可分為兩大類:①數值運算算法,用于求解數值;②非數值運算算法,用于事務

管理領域。

算法具有以下特性:

(1)有窮性。一個算法應包含有限的操作步驟,每一步必須在允許的時間內完成。如果一個

算法完成的時間過長,就失去了有窮性。

(2)確定性。算法中的每一個步驟應當是確定的,而不能是含糊的、模棱兩可的。例如,“如

果x大于或等于0,輸出YES;x小于或等于0,輸出NO”在執(zhí)行時就會出現歧義,若x=0時,

既要輸出NO又要輸出YES,不符合確定性的要求。

(3)有零個或多個輸入。有些算法不需要從外界輸入數據就可以執(zhí)行,如計算11+22+33+…+1010;

而有些算法則需要輸入數據,如計算11+22+33+…+nn,n的數值未知,因此需要從鍵盤上輸入

數據。

(4)有一個或多個輸出。算法的實現是以得到計算結果為目的,沒有任何輸出的算法是沒有

意義的。

(5)有效性。算法中的每一個步驟應當能有效地執(zhí)行,并得到確定的結果。

程序設計人員必須會設計算法,并能根據算法寫出程序。

3.算法的表示形式

算法可以使用多種工具描述,常用的有自然語言、流程圖、N-S圖、偽代碼等。

1)用自然語言表示算法

算法可以用自然語言描述。自然語言就是人們日常使用的語言,可以是漢語、英語或其他語

言。用自然語言表示的算法通俗易懂,但文字冗長,容易出現歧義。自然語言的含義往往不太嚴

格,要根據上下文才能準確判斷其含義。此外,用自然語言描述選擇和循環(huán)的算法,不是很直觀。

因此,除了簡單問題,一般不采用自然語言描述算法。

【例1-2】輸入一個年份,判定其是否為閏年。

說明:能被4整除但不能被100整除的年份,或者能被400整除的年份是閏年。

算法描述如下。

S1:輸入一個年份y。

S2:若y不能被4整除,則輸出“y不是閏年”。

S3:若y能被4整除,但不能被100整除,則輸出“y是閏年”。

S4:若y能被400整除,則輸出“y是閏年”;否則輸出“y不是閏年”。

2)用流程圖表示算法

流程圖表示算法:用一些圖框表示各種操作,用箭頭表示算法流程。用流程圖表示算法直觀

8C語言程序設計

形象,易于理解。

美國國家標準學會(ANSI)規(guī)定了一些常用的流程圖符號,已為世界各國程序設計工作者普

遍采用,具體如表1-1所示。

表1-1流程圖符號

符號形狀名稱功能

圓角矩形起止框表示算法的起始和結束,是任何流程圖必不可少的

表示一個算法輸入和輸出的操作,可用在算法中需要輸

平行四邊形輸入/輸出框

入、輸出的位置

賦值、計算,算法中處理數據需要的算式、公式等分別寫

矩形處理框

在不同的處理框內

判斷某一條件是否成立,成立時在出口處標明“是”或Y;

菱形判斷框

不成立時標明“否”或N

帶箭頭的(折)線段流程線表示流程進行的方向

(1)起止框:表示算法的開始和結束,一般內部只寫“開始”或“結束”。

(2)處理框:表示算法的某個處理步驟,一般內部常常填寫賦值操作。

(3)輸入/輸出框:表示算法請求輸入需要的數據或算法將某些結果輸出。一般內部常常填寫

“輸入……”或“打印/顯示……”。

(4)判斷框:對一個給定條件進行判斷,根據給定的條件是否成立來決定如何執(zhí)行其后的操

作。它有1個入口和2個出口。

流程圖是表示算法較好的工具,包括以下幾個部分:表示相應操作的框,帶箭頭的流程線,

框內、框外必要的文字說明。

注意:流程線一定需要箭頭來指明方向,因其反映流程的先后次序。

傳統(tǒng)流程圖采用流程線指出各框的執(zhí)行順序,對流程線的使用沒有嚴格限制。因此,使用者

可以不受限制地使流程轉來轉去,使流程圖變得毫無規(guī)律。

人們對這種流程圖進行改進,規(guī)定幾種基本的結構,然后由這些基本結構按一定規(guī)律組成算

法結構,整個算法結構由上而下地將各個基本結構順序排列起來。這樣可以在一定程度上提高算

法的質量。

1966年,Bohra和Jacopini提出了3種基本結構,即順序結構、選擇結構和循環(huán)結構。

(1)順序結構:順序結構是一種最簡單、最基本的結構,在這種結構中,各程序塊按照出現

的順序依次執(zhí)行。如圖1-4所示,表示A框執(zhí)行完后立即執(zhí)行B框,它只有一個入口a和一個出

口b。

(2)選擇結構:選擇結構也稱為分支結構,是根據給定的條件判斷在兩條可能的路徑中

選擇哪一條。如圖1-5所示,條件P為真時執(zhí)行A框處理,為假時執(zhí)行B框處理。當然,A、

B框可為空,但不能同時為空,并且,它只有一個入口a和一個出口b。在執(zhí)行時,只可能

第1章C語言概述9

執(zhí)行A框或者執(zhí)行B框,不可能既執(zhí)行A框又執(zhí)行B框,但是無論走哪一條路徑,都在b

口結束。

圖1-4順序結構圖1-5選擇結構

(3)循環(huán)結構:循環(huán)結構也稱為重復處理結構,包括當型循環(huán)結構和直到型循環(huán)結構。當型

循環(huán)結構是在滿足給定條件時反復執(zhí)行某一程序塊A,否則不執(zhí)行。如圖l-6(a)所示,先判斷

條件P,當P為真時執(zhí)行A框,A框處理完后再判斷條件P,當P為真時再執(zhí)行A框,如此循環(huán)

往復,直到判斷條件P為假時為止。直到型循環(huán)結構是先執(zhí)行程序塊A,直到滿足給定條件時不

再執(zhí)行。如圖l-6(b)所示,先執(zhí)行A框,A框處理完后再判斷條件P,當P為假時再執(zhí)行A框,

如此循環(huán)往復,直到判斷條件P為真時為止。從圖1-6中可以看出,循環(huán)結構也只有一個入口a

和一個出口b。

(a)當型循環(huán)結構(b)直到型循環(huán)結構

圖1-6循環(huán)結構

在這3種基本結構中,有以下4個共同特征:

只有一個入口。

只有一個出口。

結構中的每一個部分都有機會被執(zhí)行到。

結構內不存在“死循環(huán)”。

【例1-3】把例1-2用流程圖表示,如圖1-7所示。

10C語言程序設計

圖1-7例1-2的流程圖

3)用N-S圖表示算法

既然基本結構的順序組合可以表示任何復雜的算法結構,那么,基本結構之間的流程線就屬

于多余的。美國學者I.Nassi和B.Shneiderman提出了一種新的流程圖——N-S圖,也稱盒圖。在

N-S圖中,取消了帶箭頭的流程線。每種結構用一個矩形框表示。N-S圖的符號比較簡單,如

圖1-8所示。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論