C語言是一種在國際上廣泛流行的計(jì)算機(jī)語言,具有很多突出的優(yōu)點(diǎn),如很強(qiáng)的數(shù)據(jù)處理能力,目前已成為計(jì)算機(jī)程序設(shè)計(jì)的主流語言。C語言不僅適合于系統(tǒng)軟件的設(shè)計(jì),還適合于應(yīng)用軟件的設(shè)計(jì)。在操作系統(tǒng)、工具軟件、圖形圖像處理軟件、數(shù)值計(jì)算、人工智能、數(shù)據(jù)庫處理、嵌入式系統(tǒng)等多個方面都有廣泛的應(yīng)用。目前,全國計(jì)算機(jī)等級考試、職業(yè)資格認(rèn)定、技能大賽等都將C語言列入考查范圍。學(xué)習(xí)和使用C語言已經(jīng)成為廣大計(jì)算機(jī)應(yīng)用人員和學(xué)生的迫切需求。因此,我國絕大部分高等院校都將C語言作為學(xué)習(xí)程序設(shè)計(jì)入門的語言,同時,C語言也為進(jìn)一步學(xué)習(xí)C++以及Visual C++ 奠定了基礎(chǔ)。
本書作為C語言程序設(shè)計(jì)的入門與應(yīng)用教材,共分11章及3個附錄。全書包括以下內(nèi)容: 第1章C語言概述;第2章基本數(shù)據(jù)類型、運(yùn)算符及表達(dá)式;第3章順序結(jié)構(gòu)程序設(shè)計(jì);第4章選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)程序設(shè)計(jì);第5章數(shù)組;第6章函數(shù);第7章編譯預(yù)處理;第8章指針;第9章構(gòu)造數(shù)據(jù)類型;第10章位運(yùn)算;第11章文件。3個附錄分別是: 附錄A,常用字符與ASCII代碼對照表;附錄B,運(yùn)算符的優(yōu)先級和結(jié)合性;附錄C,C語言的庫函數(shù)。本書注重基礎(chǔ),突出應(yīng)用,每章的案例盡量貼近生活和應(yīng)用,以便讀者能夠綜合運(yùn)用本章所學(xué)知識,提高實(shí)際編程能力。
本書具有以下特色。
1. 易于教學(xué)和自學(xué),適合初學(xué)者
充分考慮到初學(xué)者學(xué)習(xí)C語言的特點(diǎn),本書按照循序漸進(jìn)、難點(diǎn)分散的原則組織內(nèi)容。通過通俗易懂的敘述,闡明復(fù)雜、靈活的概念。對于難點(diǎn)與重點(diǎn),通過豐富的例題,進(jìn)行詳盡的解釋。力求做到語言通俗、概念清晰、易學(xué)實(shí)用,以使讀者能夠做到上手快、學(xué)得會、用得著。
2. 注重基礎(chǔ)內(nèi)容,突出實(shí)用性
C語言博大精深。本書精選了對初學(xué)者最基本、最重要、最實(shí)用的內(nèi)容進(jìn)行介紹,不刻意追求全面和詳盡。對于較生僻的內(nèi)容,也從概念講解入手進(jìn)行簡單介紹,以保證C語言的完整性。力求做到內(nèi)容新穎、實(shí)用,邏輯性強(qiáng),完整性好,且又突出重點(diǎn)。
3. 強(qiáng)化編程思想,突出應(yīng)用性
本書不只是講解C語言的語法規(guī)則,更重要的是培養(yǎng)讀者的C語言程序設(shè)計(jì)能力。不是只給讀者一座花園,而是送給讀者整個春天。全書始終有意識地不斷強(qiáng)化編程思想,通過例題、程序案例、習(xí)題,給讀者以潛移默化的影響。由于程序設(shè)計(jì)語言是實(shí)踐性很強(qiáng)的課程,故建議讀者多上機(jī)實(shí)踐,以盡快掌握C語言的編程方法和提高調(diào)試程序的能力。為了加強(qiáng)讀者的實(shí)踐動手能力以及滿足參加二級C語言等級考試需要,本書還配套出版了《C語言程序設(shè)計(jì)實(shí)訓(xùn)》。衡量這門課程學(xué)習(xí)得好壞,不是看“知不知道”,而是看“會不會用”。
本書介紹的知識和程序具有通用性,基本可以適用于任何計(jì)算機(jī)系統(tǒng)和C版本,但是應(yīng)說明,不同的C版本是有一些差別的。本書所有程序均在Visual C++ 6.0開發(fā)環(huán)境中調(diào)試通過。
本書由武漢職業(yè)技術(shù)學(xué)院賈學(xué)斌、宋海民任主編,胡大威任副主編,其中第1、2、3、9章由宋海民編寫;第4、5章由胡大威編寫;第6、7、8、10、11章及附錄由賈學(xué)斌編寫。以上各編者都是具有豐富教學(xué)實(shí)踐經(jīng)驗(yàn)的教師。在本書的編寫過程中,得到許多領(lǐng)導(dǎo)及教師的熱情支持,還得到了陳覦、周桂枝、張偉的幫助,在此一并表示感謝。
感謝使用本書的各位讀者,本書力爭寫出作者的經(jīng)驗(yàn)和體會,但由于編者水平有限,書中不足之處在所難免,懇請廣大讀者批評指正。
編者
2017年4月
第1章C語言概述1
1.1初識C語言1
1.1.1C語言的由來2
1.1.2C語言的特點(diǎn)3
1.2C語言的語法基礎(chǔ)4
1.2.1基本符號4
1.2.2標(biāo)識符4
1.2.3保留字5
1.3設(shè)計(jì)簡單的C程序6
1.3.1賦值語句6
1.3.2printf()函數(shù)7
1.3.3scanf()函數(shù)8
1.3.4庫函數(shù)和頭文件9
1.4C程序的開發(fā)過程10
1.4.1C程序的實(shí)現(xiàn)步驟10
1.4.2C語言常用集成開發(fā)環(huán)境12
1.5在Microsoft Visual C++6.0中開發(fā)C程序12
1.5.1VC++6.0集成開發(fā)環(huán)境簡介13
1.5.2建立控制臺應(yīng)用程序15
1.6程序案例19
1.7本章小結(jié)23
1.8習(xí)題24
第2章基本數(shù)據(jù)類型、運(yùn)算符及表達(dá)式27
2.1C語言的數(shù)據(jù)類型27
2.2常量28
2.2.1常量的概念28
2.2.2常量的分類28
2.3變量32〖2〗〖3〗〖4〗2.3.1變量的定義32
2.3.2整型變量34
2.3.3實(shí)型變量37
2.3.4字符變量39
2.4運(yùn)算符和表達(dá)式41
2.4.1運(yùn)算符的分類41
2.4.2運(yùn)算符的優(yōu)先級與結(jié)合性42
2.4.3算術(shù)運(yùn)算符和算術(shù)表達(dá)式43
2.4.4增1、減1運(yùn)算符及表達(dá)式44
2.4.5賦值運(yùn)算符和賦值表達(dá)式46
2.4.6關(guān)系運(yùn)算符和關(guān)系表達(dá)式48
2.4.7邏輯運(yùn)算符和邏輯表達(dá)式50
2.4.8逗號運(yùn)算符和逗號表達(dá)式52
2.4.9sizeof運(yùn)算符53
2.5數(shù)據(jù)類型的轉(zhuǎn)換54
2.5.1自動類型轉(zhuǎn)換54
2.5.2強(qiáng)制類型轉(zhuǎn)換55
2.6程序案例56
2.7本章小結(jié)57
2.8習(xí)題58
第3章順序結(jié)構(gòu)程序設(shè)計(jì)62
3.1結(jié)構(gòu)化程序設(shè)計(jì)基礎(chǔ)62
3.1.1算法的概念62
3.1.2算法的特點(diǎn)63
3.1.3算法的描述65
3.1.4結(jié)構(gòu)化程序設(shè)計(jì)69
3.2輸入語句71
3.2.1輸入/輸出(I/O)函數(shù)71
3.2.2字符輸入函數(shù)和字符輸入語句72
3.2.3格式輸入函數(shù)和格式輸入語句73
3.2.4通過scanf()函數(shù)從鍵盤輸入數(shù)據(jù)74
3.2.5scanf()函數(shù)輸入中常見錯誤分析75
3.3輸出語句76
3.3.1字符輸出函數(shù)和字符輸出語句77
3.3.2格式輸出函數(shù)和格式輸出語句78
3.4程序案例85
3.5本章小結(jié)86
3.6習(xí)題87
第4章選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)程序設(shè)計(jì)93
4.1if語句93
4.1.1if語句94
4.1.2if語句的嵌套98
4.1.3條件運(yùn)算符和條件表達(dá)式100
4.2switch語句102
4.3選擇結(jié)構(gòu)程序設(shè)計(jì)案例106
4.4while語句107
4.4.1while語句的一般格式108
4.4.2while語句的執(zhí)行過程108
4.5do...while語句110
4.5.1do...while語句的一般格式110
4.5.2do...while語句的執(zhí)行過程110
4.5.3do...while語句和while語句的區(qū)別與聯(lián)系111
4.6for語句112
4.6.1for語句的一般格式112
4.6.2for語句的執(zhí)行過程114
4.6.3for語句的變形114
4.6.4for、while、do...while 3種語句的比較117
4.7循環(huán)嵌套117
4.8break語句和continue語句119
4.8.1break語句119
4.8.2continue語句120
4.9語句標(biāo)號和goto語句121
4.10程序案例122
4.11本章小結(jié)124
4.12習(xí)題125
第5章數(shù)組132
5.1數(shù)組的概念132
5.2一維數(shù)組133
5.2.1一維數(shù)組的定義133
5.2.2一維數(shù)組元素的引用134
5.2.3一維數(shù)組的初始化135
5.2.4一維數(shù)組的應(yīng)用136
5.3二維數(shù)組140
5.3.1二維數(shù)組的定義140
5.3.2二維數(shù)組元素的引用141
5.3.3二維數(shù)組的初始化141
5.3.4二維數(shù)組的應(yīng)用143
5.4字符數(shù)組144
5.4.1字符數(shù)組的定義144
5.4.2字符數(shù)組的初始化144
5.4.3字符數(shù)組的引用145
5.4.4字符串和字符串結(jié)束標(biāo)志146
5.4.5字符數(shù)組的輸入和輸出146
5.4.6字符串處理函數(shù)148
5.4.7字符數(shù)組的應(yīng)用150
5.5程序案例151
5.6本章小結(jié)153
5.7習(xí)題155
第6章函數(shù)159
6.1C程序的模塊化設(shè)計(jì)159
6.1.1函數(shù)的概念159
6.1.2C程序的模塊化設(shè)計(jì)160
6.1.3函數(shù)的分類161
6.2函數(shù)的定義162
6.3函數(shù)的參數(shù)與返回值164
6.4函數(shù)的調(diào)用166
6.4.1函數(shù)調(diào)用的一般格式166
6.4.2函數(shù)調(diào)用的方式166
6.4.3對被調(diào)函數(shù)的聲明168
6.4.4函數(shù)的嵌套調(diào)用170
6.4.5函數(shù)的遞歸調(diào)用171
6.5數(shù)組作為函數(shù)參數(shù)175
6.5.1數(shù)組元素作函數(shù)實(shí)參175
6.5.2數(shù)組名作函數(shù)參數(shù)176
6.5.3二維數(shù)組名作函數(shù)參數(shù)177
6.6變量的作用域和存儲類別178
6.6.1變量的作用域178
6.6.2變量的存儲類別180
6.6.3局部變量的存儲類別180
6.6.4全局變量的存儲類別186
6.7函數(shù)的作用域和存儲類別189
6.8程序案例190
6.9本章小結(jié)193
6.10習(xí)題195
第7章編譯預(yù)處理203
7.1宏定義203
7.1.1不帶參數(shù)的宏定義203
7.1.2帶參數(shù)的宏定義206
7.1.3取消宏定義210
7.2文件包含210
7.3條件編譯213
7.4程序案例216
7.5本章小結(jié)216
7.6習(xí)題218
第8章指針223
8.1指針概述223
8.1.1內(nèi)存地址與變量的地址223
8.1.2指針與指針變量224
8.2指針變量226
8.2.1指針變量的定義與初始化226
8.2.2指針變量的引用227
8.2.3指針變量作為函數(shù)的參數(shù)230
8.3通過指針引用數(shù)組233
8.3.1指向數(shù)組元素的指針233
8.3.2指針變量的運(yùn)算234
8.3.3通過指針引用數(shù)組元素237
8.3.4數(shù)組名和指針變量作函數(shù)參數(shù)240
8.4指針與字符串243
8.4.1字符串指針變量的定義與使用243
8.4.2字符串指針變量與字符數(shù)組的區(qū)別246
8.5指針與函數(shù)247
8.5.1函數(shù)指針變量247
8.5.2指針型函數(shù)249
8.6指針數(shù)組和二級指針250
8.7main()函數(shù)的形參、動態(tài)存儲分配和void指針253
8.7.1指針數(shù)組作為main()函數(shù)的形參253
8.7.2動態(tài)存儲分配254
8.7.3void指針類型255
8.8程序案例256
8.9本章小結(jié)257
8.10習(xí)題259
第9章構(gòu)造數(shù)據(jù)類型264
9.1結(jié)構(gòu)體類型264
9.1.1結(jié)構(gòu)體類型聲明264
9.1.2結(jié)構(gòu)體變量的定義265
9.1.3結(jié)構(gòu)體變量的初始化以及成員的引用269
9.2結(jié)構(gòu)體數(shù)組271
9.3結(jié)構(gòu)體與函數(shù)273
9.3.1結(jié)構(gòu)體變量作為函數(shù)參數(shù)273
9.3.2結(jié)構(gòu)體變量為函數(shù)的返回值275
9.4結(jié)構(gòu)體與指針277
9.4.1結(jié)構(gòu)體變量指針278
9.4.2結(jié)構(gòu)體數(shù)組指針280
9.4.3用指向結(jié)構(gòu)體的指針作函數(shù)參數(shù)282
9.5結(jié)構(gòu)體應(yīng)用——鏈表283
9.6共用體類型288
9.7枚舉類型290
9.8用typedef定義類型292
9.9程序案例294
9.10本章小結(jié)296
9.11習(xí)題297
第10章位運(yùn)算304
10.1位運(yùn)算符與位運(yùn)算304
10.2位段309
10.3程序案例310
10.4本章小結(jié)311
10.5習(xí)題312
第11章文件316
11.1文件概述316
11.1.1文件的概念316
11.1.2文件指針317
11.1.3緩沖文件系統(tǒng)和非緩沖文件系統(tǒng)318
11.2文件的打開和關(guān)閉319
11.2.1用fopen()函數(shù)打開文件319
11.2.2用fclose()函數(shù)關(guān)閉文件322
11.3文件的順序讀寫323
11.3.1文本文件中字符的輸入/輸出323
11.3.2文本文件中字符串的輸入/輸出324
11.3.3文本文件的格式化輸入/輸出326
11.3.4二進(jìn)制文件的輸入/輸出327
11.4文件的隨機(jī)讀寫328
11.5文件檢測函數(shù)329
11.6程序案例330
11.7本章小結(jié)332
11.8習(xí)題333
附錄A常用字符與ASCII代碼對照表338
附錄B運(yùn)算符的優(yōu)先級和結(jié)合性339
附錄CC語言的庫函數(shù)341
參考文獻(xiàn)348
第3章第3章順序結(jié)構(gòu)程序設(shè)計(jì) Project 3順序結(jié)構(gòu)是C程序中最簡單、最基本、最常用的一種程序結(jié)構(gòu)。也是進(jìn)行復(fù)雜程序設(shè)計(jì)的基礎(chǔ)。順序結(jié)構(gòu)的特點(diǎn)是完全按照語句出現(xiàn)的先后順序依次執(zhí)行程序。在日常生活中,需要“按部就班、依次進(jìn)行”處理和操作的問題隨處可見。賦值操作和輸入/輸出操作是順序結(jié)構(gòu)中最典型的操作。 本章學(xué)習(xí)目標(biāo)
1. 掌握結(jié)構(gòu)化程序設(shè)計(jì)基礎(chǔ)知識
2. 掌握輸入語句的使用方法
3. 掌握輸出語句的使用方法
3.1結(jié)構(gòu)化程序設(shè)計(jì)基礎(chǔ) 初學(xué)者常常會有這樣的一種感覺: 讀別人編寫的程序比較容易,自己雖然學(xué)了程序設(shè)計(jì)語言,可編寫程序,卻不知從何下手。其中一個重要的原因就是沒有掌握程序設(shè)計(jì)的靈魂——算法。所以,多了解、掌握和積累一些計(jì)算機(jī)常用的算法,養(yǎng)成編寫程序前先設(shè)計(jì)好算法的習(xí)慣至關(guān)重要。
3.1.1算法的概念〖*2〗1. 基本概念一個程序應(yīng)包括對數(shù)據(jù)的描述和對數(shù)據(jù)處理的描述。 對數(shù)據(jù)的描述,即數(shù)據(jù)結(jié)構(gòu)(Data Structure)。數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)學(xué)科的核心課程之一,有許多專門著作論述,本書不再贅述。 對數(shù)據(jù)處理的描述,即算法(Algorithm)。算法是為解決一個問題而采取的方法和步驟,是程序的靈魂。為此,著名計(jì)算機(jī)科學(xué)家尼克勞斯·沃思(Niklaus Wirth)提出了一個公式: 程序=數(shù)據(jù)結(jié)構(gòu)+算法 實(shí)際上,一個程序除了以上兩個主要因素之外,還應(yīng)考慮程序設(shè)計(jì)的方法以及用何種計(jì)算機(jī)語言來描述。因此,程序還可以這樣表示: 程序=算法+數(shù)據(jù)結(jié)構(gòu)+程序設(shè)計(jì)方法+語言工具和環(huán)境 所以,在設(shè)計(jì)一個程序時要綜合運(yùn)用這4方面的知識。在這4個方面中,算法是靈魂,數(shù)據(jù)結(jié)構(gòu)是要處理的對象,語言是工具,編程需要采用合適的方法。算法是解決“做什么”和“怎么做”的問題。程序中的操作語句,實(shí)際上就是算法的體現(xiàn)。 〖2〗〖3〗〖4〗無論是解決數(shù)學(xué)問題,還是解決日常生活和工作中的問題,都必須采用一定的方法,并且按照一定的步驟來解決。因此,廣義地認(rèn)為,算法是指為解決一個問題而采取的方法和步驟。 對于不同的問題有不同的算法,而對于同一個問題,也可以有不同的算法。例如,求1+2+3+4+5+6+7+8+9+10的和,就有多種算法。 其一,按照數(shù)的先后順序,從左至右一個數(shù)一個數(shù)地相加,直到加完10為止; 其二,將1與9相加,2與8相加……即原式=(1+9)+(2+8)+(3+7)+(4+6)+10+5=5×10+5=55。 還有其他算法。顯然,在這里第二種算法比第一種算法優(yōu)越,也就是說,對于同一個問題,不僅有不同的算法,而且這些算法又有優(yōu)劣之分。有的算法只需很少的步驟,而有些算法則需要較多的步驟。一般地說,應(yīng)采用簡單的和運(yùn)算步驟少的算法。因此,為了有效地進(jìn)行解題,不僅需要保證算法正確,還要考慮算法的質(zhì)量,選擇好的算法。 對于計(jì)算機(jī)而言,考慮的當(dāng)然只限于計(jì)算機(jī)算法,即計(jì)算機(jī)所能執(zhí)行的算法。例如,1+2+3+4+5,或者是將50名學(xué)生的成績打印出來,并且統(tǒng)計(jì)及格學(xué)生人數(shù)。這是計(jì)算機(jī)可以做到的。
2. 算法分類 計(jì)算機(jī)算法可分為兩大類,數(shù)值運(yùn)算算法和非數(shù)值運(yùn)算算法。 數(shù)值運(yùn)算算法,如求方程的根,求一個函數(shù)的定積分等。其目的是求數(shù)值解,它們屬于數(shù)值運(yùn)算范圍。 非數(shù)值運(yùn)算算法,如圖書檢索、人事管理、車輛調(diào)度管理等,其范圍十分廣泛。 目前,計(jì)算機(jī)在非數(shù)值運(yùn)算方面的應(yīng)用遠(yuǎn)遠(yuǎn)超過了在數(shù)值運(yùn)算方面的應(yīng)用。由于數(shù)值運(yùn)算有現(xiàn)成的模型,可以運(yùn)用數(shù)值分析的方法,因此,對數(shù)值運(yùn)算的算法研究比較深入,算法比較成熟,對各種數(shù)值運(yùn)算都有比較成熟的算法可供選用。人們常常將這些算法匯編成冊(寫成程序形式),或?qū)⑦@些程序存放在磁盤上,供用戶調(diào)用。而非數(shù)值運(yùn)算的種類繁多,要求各異,難以規(guī)范化,因此,只能對一些典型的非數(shù)值運(yùn)算算法(如排序算法)作比較深入的研究。其他的非數(shù)值運(yùn)算問題,往往需要用戶參考已有的類似算法,重新設(shè)計(jì)解決特定問題的專門算法。 3.1.2算法的特點(diǎn) 算法實(shí)際上是一種抽象的解題方法,它具有動態(tài)性。因此,算法的行為非常重要。作為一個算法,應(yīng)具有以下特性。
1. 有效性(Effectiveness) 算法的有效性包括兩個方面。一是算法中的每一個步驟必須能夠?qū)崿F(xiàn)。例如,在算法中,不允許分母為零的情況;在實(shí)數(shù)范圍內(nèi)不能求一個負(fù)數(shù)的平方根等。二是算法執(zhí)行的結(jié)果要能達(dá)到預(yù)期的結(jié)果。通常,針對實(shí)際問題設(shè)計(jì)的算法,人們總是希望能夠得到滿意的結(jié)果。
2. 確定性(Definiteness) 算法的確定性,是指算法中的每一個步驟都必須有明確的定義,不允許有模棱兩可的解釋,也不允許有多義性。這一特征也反映了算法與數(shù)學(xué)公式的明顯差異。在解決實(shí)際問題時,可能會出現(xiàn)這樣的情況: 針對某種特殊問題,數(shù)學(xué)公式是正確的,但按此數(shù)學(xué)公式設(shè)計(jì)的計(jì)算過程可能會使計(jì)算機(jī)系統(tǒng)無法認(rèn)知。這是因?yàn)楦鶕?jù)數(shù)學(xué)公式設(shè)計(jì)的計(jì)算過程只考慮了正常使用的情況,而當(dāng)出現(xiàn)異常情況時,該計(jì)算過程就不適應(yīng)了。例如,某計(jì)算公式規(guī)定,大于100的數(shù)被認(rèn)為比1大很多,而小于100的數(shù)不能認(rèn)為比1大很多;并且在正常情況下出現(xiàn)的數(shù)或是大于100,或是小于100。但指令“輸入X,若X比1大很多,則輸出數(shù)字1,否則輸出數(shù)字0”是不確定的。這是因?yàn)椋谡5妮斎肭闆r下,這一指令的執(zhí)行可以得到正確的結(jié)果,但在異常情況下(輸入的X在10~100),這一指令執(zhí)行的結(jié)果就不確定了。
3. 有窮性(Finiteness) 算法的有窮性是指算法必須在有限的時間內(nèi)執(zhí)行完,即算法必須能在執(zhí)行有限個步驟之后終止。數(shù)學(xué)中的無窮級數(shù),在實(shí)際計(jì)算時只能取有限項(xiàng),即計(jì)算無窮級數(shù)的過程只能是有窮的。因此,一個數(shù)的無窮級數(shù)的表示只是一種計(jì)算公式,而根據(jù)精度要求確定的計(jì)算過程才是有窮的算法。 算法的有窮性還包括合理的執(zhí)行時間。如果一個算法的執(zhí)行時間是有窮的,但需要執(zhí)行千萬年,顯然這就失去了算法的實(shí)用價值。例如,克萊姆(Cramer)法則是求解線性代數(shù)方程組的一種數(shù)學(xué)方法,但不能以此為算法,這是因?yàn)椋m然總可以根據(jù)克萊姆法則設(shè)計(jì)出一個計(jì)算過程用于計(jì)算所有可能出現(xiàn)的行列式,但這樣的計(jì)算過程所需的時間實(shí)際上是不能容忍的。再如,從理論上講,總可以寫出一個正確的弈棋程序,而且這也不是一件很困難的工作。由于在一個棋盤上安排棋子的方式總是有限的,而且,根據(jù)一定的規(guī)則,在有限次移動棋子之后比賽一定結(jié)束。因此,弈棋程序可以考慮計(jì)算機(jī)每一次可能的移動,它的對手每一次可能的應(yīng)答,以及計(jì)算機(jī)對這些移動的可能應(yīng)答等,直到每個可能的移動停止下來為止。此外,由于計(jì)算機(jī)可以知道每次移動的結(jié)果,因此,總可以選擇一種最好的移動方式。但是即使如此,這種弈棋程序還是很難執(zhí)行,因?yàn)樗羞@些可能移動的次數(shù)太多,所要花費(fèi)的時間不能容忍。由上述兩個例子可以看出,雖然許多計(jì)算過程是有限的,但仍有可能無實(shí)用價值。 ……