關(guān)于我們
書單推薦
新書推薦
|
C程序設(shè)計(jì)
本書由淺入深地介紹什么是程序, 怎樣編寫程序, 怎樣調(diào)試和運(yùn)行程序。以程序設(shè)計(jì)貫穿始終, 使學(xué)生掌握程序設(shè)計(jì)的基本知識和方法。本書將算法與C語言的語法緊密結(jié)合, 而不是孤立地介紹語法。作者精心考慮怎樣將算法與語法緊密而巧妙地結(jié)合起來。按照“算法是程序的靈魂, 語言是編程的工具”的思路組織全書。
本書為“十二五”普通高等教育本科國家級規(guī)劃教材、北京市高等教育精品教材立項(xiàng)項(xiàng)目,獲全國高校出版社*暢銷書特等獎(jiǎng)、原電子工業(yè)部*教材一等獎(jiǎng)、全國高等院校計(jì)算機(jī)基礎(chǔ)教育研究會*教材一等獎(jiǎng)等多項(xiàng)獎(jiǎng)項(xiàng)。
《C程序設(shè)計(jì)》累計(jì)發(fā)行逾1400萬冊,不僅創(chuàng)同類書的全國紀(jì)錄,在世界上也是罕見的,堪稱出版界的奇跡!禖程序設(shè)計(jì)》是一本公認(rèn)的學(xué)習(xí)C語言程序設(shè)計(jì)的經(jīng)典教材。根據(jù)C語言的發(fā)展和計(jì)算機(jī)教學(xué)的需要,作者在《C程序設(shè)計(jì)(第四版)》的基礎(chǔ)上進(jìn)行了修訂,使內(nèi)容更加完善,更易于理解,更加切合教學(xué)需要。本書按照C語言的新標(biāo)準(zhǔn)C 99進(jìn)行介紹,所有程序都符合C 99的規(guī)定,使編寫程序更加規(guī)范;采用Visual C++ 6.0編譯系統(tǒng);對C語言和程序設(shè)計(jì)的基本概念和要點(diǎn)講解透徹、全面而深入;按照作者提出的“提出問題—解決問題—?dú)w納分析”三部曲進(jìn)行教學(xué)和組織教材;本書的每個(gè)例題都按以下幾個(gè)步驟展開:提出任務(wù)—解題思路—編寫程序—運(yùn)行程序—程序分析—有關(guān)說明。符合讀者認(rèn)知規(guī)律,容易入門與提高。
本書是初學(xué)者學(xué)習(xí)C程序設(shè)計(jì)的理想教材,可作為高等學(xué)校各專業(yè)的正式教材,也是一本自學(xué)的好教材。本書配有輔助教材《C程序設(shè)計(jì)(第五版)學(xué)習(xí)輔導(dǎo)》(ISBN: 9787302480877)。本書的PPT電子教案和主輔教材的源代碼,可到清華大學(xué)出版社官網(wǎng)下載,與本書配合使用的數(shù)字資源也將陸續(xù)推出,供各高校教學(xué)使用。
譚浩強(qiáng)教授,我國著名計(jì)算機(jī)教育專家。1958年畢業(yè)于清華大學(xué)自動(dòng)控制系。青年時(shí)期曾擔(dān)任清華大學(xué)學(xué)生會主席、北京市學(xué)聯(lián)副主席、北京市人民代表、全國文教戰(zhàn)線先進(jìn)分子。他是我國計(jì)算機(jī)普及和高校計(jì)算機(jī)基礎(chǔ)教育的開拓者之一,F(xiàn)任全國高等院校計(jì)算機(jī)基礎(chǔ)教育研究會榮譽(yù)會長、教育部全國計(jì)算機(jī)應(yīng)用技術(shù)證書考試委員會主任委員,享受國務(wù)院政府特殊津貼。曾獲國家科技進(jìn)步獎(jiǎng)、國家教學(xué)成果獎(jiǎng),被原國家科學(xué)技術(shù)委員會和中國科學(xué)技術(shù)協(xié)會表彰為“全國先進(jìn)科普工作者”,被北京市人民政府評為“北京市有突出貢獻(xiàn)的專家”。
譚浩強(qiáng)教授創(chuàng)造了三個(gè)世界紀(jì)錄:(1)30年來他(以及和他人合作)共編著出版了160多本計(jì)算機(jī)著作,主編了400多本計(jì)算機(jī)書籍,是出版科技著作數(shù)量*多的人。(2)他編著和主編的書發(fā)行量超過6000萬冊,是讀者*多的科技作家。我國平均每21人、知識分子每1.2人就擁有一本譚浩強(qiáng)的書。(3)他和他人合著的《BASIC語言》發(fā)行1250多萬冊,他所著的《C程序設(shè)計(jì)》發(fā)行1400多萬冊,雙雙創(chuàng)造科技書籍發(fā)行量的*高紀(jì)錄。他曾在中央電視臺主講了BASIC,F(xiàn)ORTRAN,COBOL,Pascal,QBASIC,C,Visual Basic七種計(jì)算機(jī)語言,觀眾超過500萬人。
譚浩強(qiáng)教授善于用讀者容易理解的方法和語言說明復(fù)雜的概念。許多人認(rèn)為他開創(chuàng)了計(jì)算機(jī)書籍貼近大眾的新風(fēng),為我國的計(jì)算機(jī)普及事業(yè)作出重要的貢獻(xiàn)。21世紀(jì)初,被《計(jì)算機(jī)世界》報(bào)組織的“世紀(jì)評選”評為“我國20世紀(jì)*有影響的十個(gè)IT人物”,被《電腦報(bào)》評為“我國十大IT人物”,他的功績是把千百萬群眾帶入計(jì)算機(jī)的大門。
第1章程序設(shè)計(jì)和C語言11.1什么是計(jì)算機(jī)程序1
1.2什么是計(jì)算機(jī)語言1
1.3C語言的發(fā)展及其特點(diǎn)3
1.4最簡單的C語言程序5
1.4.1最簡單的C語言程序舉例5
1.4.2C語言程序的結(jié)構(gòu)9
1.5運(yùn)行C程序的步驟與方法11
1.6程序設(shè)計(jì)的任務(wù)13
習(xí)題14
第2章算法——程序的靈魂15
2.1程序=算法+數(shù)據(jù)結(jié)構(gòu)15
2.2什么是算法16
2.3簡單的算法舉例17
2.4算法的特性20
2.5怎樣表示一個(gè)算法21
2.5.1用自然語言表示算法21
2.5.2用流程圖表示算法21
2.5.3三種基本結(jié)構(gòu)和改進(jìn)的流程圖25
2.5.4用NS流程圖表示算法28
2.5.5用偽代碼表示算法31
2.5.6用計(jì)算機(jī)語言表示算法32
2.6結(jié)構(gòu)化程序設(shè)計(jì)方法33
習(xí)題35
第3章最簡單的C程序設(shè)計(jì)——順序程序設(shè)計(jì)37
3.1順序程序設(shè)計(jì)舉例37
3.2數(shù)據(jù)的表現(xiàn)形式及其運(yùn)算39
3.2.1常量和變量39
3.2.2數(shù)據(jù)類型42
3.2.3整型數(shù)據(jù)44
3.2.4字符型數(shù)據(jù)47
3.2.5浮點(diǎn)型數(shù)據(jù)49
3.2.6怎樣確定常量的類型50
3.3運(yùn)算符和表達(dá)式51
3.3.1C運(yùn)算符52
3.3.2基本的算術(shù)運(yùn)算符52
3.3.3自增(++)、自減(--)運(yùn)算符53
3.3.4算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級與結(jié)合性53
3.3.5不同類型數(shù)據(jù)間的混合運(yùn)算54
3.3.6強(qiáng)制類型轉(zhuǎn)換運(yùn)算符55
3.4C語句56
3.4.1C語句的作用和分類56
3.4.2最基本的語句——賦值語句58
3.5數(shù)據(jù)的輸入輸出64
3.5.1輸入輸出舉例64
3.5.2有關(guān)數(shù)據(jù)輸入輸出的概念65
3.5.3用printf函數(shù)輸出數(shù)據(jù)67
3.5.4用scanf函數(shù)輸入數(shù)據(jù)74
3.5.5字符輸入輸出函數(shù)76
習(xí)題80
第4章選擇結(jié)構(gòu)程序設(shè)計(jì)83
4.1選擇結(jié)構(gòu)和條件判斷83
4.2用if語句實(shí)現(xiàn)選擇結(jié)構(gòu)85
4.2.1用if語句處理選擇結(jié)構(gòu)舉例85
4.2.2if語句的一般形式 87
4.3關(guān)系運(yùn)算符和關(guān)系表達(dá)式89
4.3.1關(guān)系運(yùn)算符及其優(yōu)先次序90
4.3.2關(guān)系表達(dá)式90
4.4邏輯運(yùn)算符和邏輯表達(dá)式90
4.4.1邏輯運(yùn)算符及其優(yōu)先次序91
4.4.2邏輯表達(dá)式92
4.5條件運(yùn)算符和條件表達(dá)式94
4.6選擇結(jié)構(gòu)的嵌套96
4.7用switch語句實(shí)現(xiàn)多分支選擇結(jié)構(gòu)99
4.8選擇結(jié)構(gòu)程序綜合舉例102
習(xí)題107
第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)110
5.1為什么需要循環(huán)控制110
5.2用while語句實(shí)現(xiàn)循環(huán)111
5.3用do…while語句實(shí)現(xiàn)循環(huán)113
5.4用for 語句實(shí)現(xiàn)循環(huán)116
5.5循環(huán)的嵌套120
5.6幾種循環(huán)的比較121
5.7改變循環(huán)執(zhí)行的狀態(tài)121
5.7.1用break語句提前終止循環(huán)122
5.7.2用continue語句提前結(jié)束本次循環(huán)123
5.7.3break語句和continue語句的區(qū)別124
5.8循環(huán)程序舉例127
習(xí)題137
第6章利用數(shù)組處理批量數(shù)據(jù)139
6.1怎樣定義和引用一維數(shù)組139
6.1.1怎樣定義一維數(shù)組140
6.1.2怎樣引用一維數(shù)組元素140
6.1.3一維數(shù)組的初始化142
6.1.4一維數(shù)組程序舉例142
6.2怎樣定義和引用二維數(shù)組145
6.2.1怎樣定義二維數(shù)組146
6.2.2怎樣引用二維數(shù)組的元素147
6.2.3二維數(shù)組的初始化148
6.2.4二維數(shù)組程序舉例149
6.3字符數(shù)組151
6.3.1怎樣定義字符數(shù)組151
6.3.2字符數(shù)組的初始化152
6.3.3怎樣引用字符數(shù)組中的元素152
6.3.4字符串和字符串結(jié)束標(biāo)志153
6.3.5字符數(shù)組的輸入輸出156
6.3.6使用字符串處理函數(shù)157
6.3.7字符數(shù)組應(yīng)用舉例162
習(xí)題165
第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)167
7.1為什么要用函數(shù)167
7.2怎樣定義函數(shù)169
7.2.1為什么要定義函數(shù)169
7.2.2定義函數(shù)的方法170
7.3調(diào)用函數(shù)171
7.3.1函數(shù)調(diào)用的形式171
7.3.2函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞172
7.3.3函數(shù)調(diào)用的過程174
7.3.4函數(shù)的返回值174
7.4對被調(diào)用函數(shù)的聲明和函數(shù)原型176
7.5函數(shù)的嵌套調(diào)用179
7.6函數(shù)的遞歸調(diào)用181
7.7數(shù)組作為函數(shù)參數(shù)189
7.7.1數(shù)組元素作函數(shù)實(shí)參189
7.7.2一維數(shù)組名作函數(shù)參數(shù)191
7.7.3多維數(shù)組名作函數(shù)參數(shù)194
7.8局部變量和全局變量196
7.8.1局部變量196
7.8.2全局變量197
7.9變量的存儲方式和生存期201
7.9.1動(dòng)態(tài)存儲方式與靜態(tài)存儲方式201
7.9.2局部變量的存儲類別202
7.9.3全局變量的存儲類別205
7.9.4存儲類別小結(jié)209
7.10關(guān)于變量的聲明和定義211
7.11內(nèi)部函數(shù)和外部函數(shù)212
7.11.1內(nèi)部函數(shù)212
7.11.2外部函數(shù)213
習(xí)題215
第8章善于利用指針217
8.1指針是什么217
8.2指針變量219
8.2.1使用指針變量的例子219
8.2.2怎樣定義指針變量220
8.2.3怎樣引用指針變量222
8.2.4指針變量作為函數(shù)參數(shù)224
8.3通過指針引用數(shù)組229
8.3.1數(shù)組元素的指針229
8.3.2在引用數(shù)組元素時(shí)指針的運(yùn)算229
8.3.3通過指針引用數(shù)組元素231
8.3.4用數(shù)組名作函數(shù)參數(shù)236
8.3.5通過指針引用多維數(shù)組243
8.4通過指針引用字符串254
8.4.1字符串的引用方式 254
8.4.2字符指針作函數(shù)參數(shù)258
8.4.3使用字符指針變量和字符數(shù)組的比較262
8.5指向函數(shù)的指針265
8.5.1什么是函數(shù)的指針265
8.5.2用函數(shù)指針變量調(diào)用函數(shù)265
8.5.3怎樣定義和使用指向函數(shù)的指針變量267
8.5.4用指向函數(shù)的指針作函數(shù)參數(shù)269
8.6返回指針值的函數(shù)273
8.7指針數(shù)組和多重指針276
8.7.1什么是指針數(shù)組 276
8.7.2指向指針數(shù)據(jù)的指針變量279
8.7.3指針數(shù)組作main函數(shù)的形參281
8.8動(dòng)態(tài)內(nèi)存分配與指向它的指針變量284
8.8.1什么是內(nèi)存的動(dòng)態(tài)分配284
8.8.2怎樣建立內(nèi)存的動(dòng)態(tài)分配284
8.8.3void指針類型 286
8.9有關(guān)指針的小結(jié)288
習(xí)題291
第9章用戶自己建立數(shù)據(jù)類型293
9.1定義和使用結(jié)構(gòu)體變量293
9.1.1自己建立結(jié)構(gòu)體類型293
9.1.2定義結(jié)構(gòu)體類型變量 295
9.1.3結(jié)構(gòu)體變量的初始化和引用296
9.2使用結(jié)構(gòu)體數(shù)組300
9.2.1定義結(jié)構(gòu)體數(shù)組300
9.2.2結(jié)構(gòu)體數(shù)組的應(yīng)用舉例301
9.3結(jié)構(gòu)體指針303
9.3.1指向結(jié)構(gòu)體變量的指針303
9.3.2指向結(jié)構(gòu)體數(shù)組的指針304
9.3.3用結(jié)構(gòu)體變量和結(jié)構(gòu)體變量的指針作函數(shù)參數(shù)306
9.4用指針處理鏈表309
9.4.1什么是鏈表 309
9.4.2建立簡單的靜態(tài)鏈表310
9.4.3建立動(dòng)態(tài)鏈表311
9.4.4輸出鏈表315
9.5共用體類型317
9.5.1什么是共用體類型317
9.5.2引用共用體變量的方式318
9.5.3共用體類型數(shù)據(jù)的特點(diǎn)319
9.6使用枚舉類型322
9.7用typedef聲明新類型名326
習(xí)題330
第10章對文件的輸入輸出331
10.1C文件的有關(guān)基本知識331
10.1.1什么是文件331
10.1.2文件名332
10.1.3文件的分類332
10.1.4文件緩沖區(qū)333
10.1.5文件類型指針333
10.2打開與關(guān)閉文件334
10.2.1用fopen函數(shù)打開數(shù)據(jù)文件335
10.2.2用fclose函數(shù)關(guān)閉數(shù)據(jù)文件337
10.3順序讀寫數(shù)據(jù)文件338
10.3.1怎樣向文件讀寫字符338
10.3.2怎樣向文件讀寫一個(gè)字符串341
10.3.3用格式化的方式讀寫文本文件345
10.3.4用二進(jìn)制方式向文件讀寫一組數(shù)據(jù)345
10.4隨機(jī)讀寫數(shù)據(jù)文件350
10.4.1文件位置標(biāo)記及其定位350
10.4.2隨機(jī)讀寫 353
10.5文件讀寫的出錯(cuò)檢測355
習(xí)題355
附錄357
附錄A常用字符與ASCII代碼對照表357
附錄BC語言中的關(guān)鍵字358
附錄C運(yùn)算符和結(jié)合性359
附錄DC語言常用語法提要361
附錄EC庫函數(shù)365
參考文獻(xiàn)371
第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)〖1〗5.1為什么需要循環(huán)控制前面介紹了程序中常用到的順序結(jié)構(gòu)和選擇結(jié)構(gòu),但是只有這兩種結(jié)構(gòu)是不夠的,還需要用到循環(huán)結(jié)構(gòu)(或稱重復(fù)結(jié)構(gòu))。因?yàn)樵谌粘I钪谢蚴窃诔绦蛩幚淼膯栴}中常常遇到需要重復(fù)處理的問題。例如:
要向計(jì)算機(jī)輸入全班50個(gè)學(xué)生的成績;(重復(fù)50次相同的輸入操作)
分別統(tǒng)計(jì)全班50個(gè)學(xué)生的平均成績;(重復(fù)50次相同的計(jì)算操作)
求30個(gè)整數(shù)之和;(重復(fù)30次相同的加法操作)
檢查30個(gè)學(xué)生的成績是否及格。 (重復(fù)30次相同的判別操作)
要處理以上問題,最原始的方法是分別編寫若干個(gè)相同或相似的語句或程序段進(jìn)行處理。例如為了統(tǒng)計(jì)全班50個(gè)學(xué)生的平均成績,可以先編寫求一個(gè)學(xué)生平均成績的程序段: scanf(″%f,%f,%f,%f,%f″,&score1,&score2,&score3,&score4,&score5);//輸入一個(gè)學(xué)生5門課的成績
aver=(score1+score2+score3+score4+score5)/5;//求該學(xué)生平均成績
printf(″aver=%7.2f″,aver);//輸出該學(xué)生平均成績?nèi)缓笤僦貜?fù)寫49個(gè)同樣的程序段。這種方法雖然可以實(shí)現(xiàn)要求,但是顯然是不可取的,因?yàn)楣ぷ髁看,程序冗長、重復(fù),難以閱讀和維護(hù)。相信每一位讀者都會認(rèn)為這是最笨的辦法。實(shí)際上,幾乎每一種計(jì)算機(jī)高級語言都提供了循環(huán)控制,用來處理需要進(jìn)行的重復(fù)操作。
在C語言中,可以用循環(huán)語句來處理上面的問題: i=1;//設(shè)整型變量i初值為1
while(i<=50) //當(dāng)i的值小于或等于50時(shí)執(zhí)行花括號內(nèi)的語句
{scanf(″%f,%f,%f,%f,%f″,&score1,&score2,&score3,&score4,&score5);
//輸入一個(gè)學(xué)生5門課的成績
aver=(score1+score2+score3+score4+score5)/5; //求該學(xué)生平均成績
printf(″aver=%7.2f″,aver);//輸出該學(xué)生平均成績
i++;//每執(zhí)行完一次循環(huán)使i的值加1
} 可以看到: 用一個(gè)循環(huán)語句(while語句),就把需要重復(fù)執(zhí)行50次程序段的問題解決了。一個(gè)while語句實(shí)現(xiàn)了一個(gè)循環(huán)結(jié)構(gòu)。請讀者先閱讀這個(gè)程序段,理解循環(huán)結(jié)構(gòu)的執(zhí)行過程,在下一節(jié)將對其執(zhí)行過程作必要的說明。
大多數(shù)的應(yīng)用程序都會包含循環(huán)結(jié)構(gòu)。循環(huán)結(jié)構(gòu)和順序結(jié)構(gòu)、選擇結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計(jì)的3種基本結(jié)構(gòu),它們是各種復(fù)雜程序的基本構(gòu)成單元。因此熟練掌握選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的概念及使用是進(jìn)行程序設(shè)計(jì)最基本的要求。
5.2用while語句實(shí)現(xiàn)循環(huán)
在5.1節(jié)中已看到了在C程序中可以用while語句來實(shí)現(xiàn)循環(huán)結(jié)構(gòu)。上面的while循環(huán)結(jié)構(gòu)就是一個(gè)while語句,它的執(zhí)行過程是: 開始時(shí)變量i的值為1,while語句首先檢查變量i的值是否小于或等于50,如果是,則執(zhí)行while后面的語句(稱為循環(huán)體,在本例中是花括號內(nèi)的復(fù)合語句)。在循環(huán)體中先輸入第1個(gè)學(xué)生5門課的成績,然后求出該學(xué)生的平均成績aver,并輸出此平均成績。請思考最后一行“i++;”的作用。圖5.1
它使i的值加1,i的原值為1,現(xiàn)在變成2了。然后流程返回到while語句的開頭,再檢查i的值是否小于或等于50,由于i的值2小于50,因此又執(zhí)行循環(huán)體,輸入第2個(gè)學(xué)生5門課的成績,然后求出第2個(gè)學(xué)生的平均成績并輸出此平均成績。i++又使變量i的值變?yōu)?,處理第3個(gè)學(xué)生的數(shù)據(jù)……直到處理完第50個(gè)學(xué)生的數(shù)據(jù)后,i的值變?yōu)?1。由于它大于50,因此不再執(zhí)行循環(huán)體。流程圖見圖5.1,其中,虛線框內(nèi)為while循環(huán)結(jié)構(gòu)。
while語句的一般形式如下:
while (表達(dá)式) 語句
其中的“語句”就是循環(huán)體。循環(huán)體只能是一個(gè)語句,可以是一個(gè)簡單的語句,還可以是復(fù)合語句(用花括號括起來的若干語句)。執(zhí)行循環(huán)體的次數(shù)是由循環(huán)條件控制的,這個(gè)循環(huán)條件就是上面一般形式中的“表達(dá)式”,它也稱為循環(huán)條件表達(dá)式。當(dāng)此表達(dá)式的值為“真” (以非0值表示)時(shí),就執(zhí)行循環(huán)體語句;為“假” (以0表示)時(shí),就不執(zhí)行循環(huán)體語句。例如“i<=50”是一個(gè)循環(huán)條件表達(dá)式,它是一個(gè)關(guān)系表達(dá)式。它的值只能是“真”或“假”。在執(zhí)行while語句時(shí),先檢查循環(huán)條件表達(dá)式的值,當(dāng)為非0值(真)時(shí),就執(zhí)行while語句中的循環(huán)體語句;當(dāng)表達(dá)式為0(假)時(shí),不執(zhí)行循環(huán)體語句。其流程圖見圖5.2。
while語句可簡單地記為: 只要當(dāng)循環(huán)條件表達(dá)式為真(即給定的條件成立),就執(zhí)行循環(huán)體語句。
注意: while循環(huán)的特點(diǎn)是先判斷條件表達(dá)式,后執(zhí)行循環(huán)體語句。
通過下面的例子,可以學(xué)習(xí)到怎樣利用while語句進(jìn)行循環(huán)程序設(shè)計(jì)。
【例5.1】求1+2+3+…+100,即∑100n=1n。
解題思路: 在處理這個(gè)問題時(shí),先分析此題的特點(diǎn):
(1) 這是一個(gè)累加的問題,需要先后將100個(gè)數(shù)相加。要重復(fù)進(jìn)行100次加法運(yùn)算,顯然可以用循環(huán)結(jié)構(gòu)來實(shí)現(xiàn)。重復(fù)執(zhí)行循環(huán)體100次,每次加一個(gè)數(shù)。
(2) 分析每次所加的數(shù)有無規(guī)律。發(fā)現(xiàn)每次累加的數(shù)是有規(guī)律的,后一個(gè)數(shù)是前一個(gè)數(shù)加1。因此不需要每次用scanf語句從鍵盤臨時(shí)輸入數(shù)據(jù),只須在加完上一個(gè)數(shù)i后,使i加1就可得到下一個(gè)數(shù)。
……
你還可能感興趣
我要評論
|