『壹』 明解c語言第3版入門篇這書怎麼樣
《明解C語言(第3版)》是日本的C語言經典教材,作者柴田望洋是日本福岡工業大學信息工程學院副教授。問書好不好,最好是到豆瓣或知乎上。這本書的例子比較多,通過例子學習一個編程語言,要比國內死板的反復講難以記憶的語法規則的教課書要好。
『貳』 跪求:C語言程序設計:現代方法(解析答案)
、應用最廣泛的windows、linux和UNIX三個操作系統都是用C語言編寫的。0S是計算機系統(由軟硬體兩個子系統構成)的核心和靈魂,它是軟體中最龐大最復雜的系統軟體。既然如此龐大復雜的0S都可以用c語言編寫,從狹義而言,還有什麼系統軟體和應用軟體不能用c語言編寫呢?由此可以肯定的說,c語言是一門十分優秀而又重要的語言。
c語言程序設計是過程性程序設計語言,它的發展貫穿了計算機發展的歷程,它蘊含了程序設計的基本思想,囊括了程序設計的基本概念,所以它是理工科高等院校的一門基礎課程。
從市面上有關c語言的書籍和高等院校採用的教材來看,它們有一個共性,那就是:脫離了實際應用(全是小打小鬧的小例子),純粹的過程性程序設計,沒有軟體工程思想的體現,沒有一定程序設計風格,僅僅是為了讓大家明白什麼是c語言而已。
高等院校開設c語言程序設計的目的是讓學生對程序設計有個入門,有個直觀的理解,同時為其他後續課程作鋪墊。但是如果教學僅僅以此為目的,那麼教學本身就效果而言是個大大的失敗。
大家知道,在商業上講究唯利是圖,「利」是商業追求的目標,離開了「利」經商,則商無動力,其結果是必敗無疑。在c語言程序設計教學當中,教師應該把「唯用是圖」作為教學的首要目標。如果拋開了實際應用進行程序設計教學,就是紙上談兵,就是「說明書」式的教學。印度的程序設計課程採用「事件驅動式」教學,我認為在中國的c語言程序設計教學中應該採用「項目驅動式」教學。「項目驅動式」教學就是以項目為目的,以c語言理論教學為過程,最終能用c語言設計項目,實現項目的要求。「項目驅動式」教學的關鍵在於培養學生「如何做什麼」和「可以干什麼」。一個項目就是一個工程,在「項目驅動式」教學中,首先應該讓學生簡單了解什麼是軟體工程思想,其次在c語言理論教學過程中,讓學生懂得面向對象的程序設計的風格,最後引導他們來設計項目。
(二)「項目驅動」式教學應注意的問題
1.c語言程序設計教學要幫助學生樹立面向工程的觀點
在計算機行業中,軟體是通過人們的智力活動、把知識與技術轉化成信息的一種產品。軟體的設計已經用工程的觀念來進行管理。軟體設計工作被當作一項系統工程來對待。軟體的的生存周期一般可分為以下階段:問題定義、可行性研究、需求分析、概要設計、詳細設計、編碼、測試、運行與維護。我們不難看出軟體工程的復雜程度是很大的。理工科高等院校把c語言作為一門基礎課程,也是為了給社會培養信息技術人才。眾所周知,養成一個好的習慣是非常重要的,所以c語言程序設計作為大多數工科院校學生接觸的第一門程序設計語言(有的院校講pascal),就應該讓學生樹立正確的觀點。那麼當前的程序設計教學也必須以切合將來軟體工程開發的實際需要為第一目標,使學生在學習程序設計的初級階段就樹立正確的軟體工程觀點。這樣做不僅可以為學生將來從事計算機應用設計打下良好的基礎,而且有利於培養學生分析問題的完備性,以及統籌全局,協調關系的基本素質。
2.理論教學應從單一的「結構化程序設計」向「結構化與面向對象並舉」轉變
「結構化程序設計」方法是程序設計的基礎,必須讓學生掌握得堅實可靠。結構化程序設計的過程是培養學生思維能力的過程,在教學中經常發現有些學生的思維混亂。這些都是缺乏思維訓練的結果。結構化程序設計的訓練不僅可以讓學生養成良好的程序設計習慣,而且可以有效地培養學生思維的條理性和邏輯性。所以在授課過程中要注意講解結構化程序設計的思想時應突出兩點:(1)程序的質量首先取決於它的結構。(2)程序設計的基本方法是自頂向下地逐步求精和模塊化。
在c程序教學過程中,越到後面的章節,學生越會產生設計程序逐漸變難的感覺,這是不符合邏輯的一種怪現象。按照常理,C語言學的越多,說明你的程序設計知識越多,設計起程序來應該更加得心應手,那麼出現這種現象的原因何在呢?當然該問題的出現的原因是多方面的,但是其中最重要的一點就是長期以來程序設計的觀念不是以如何處理好對象為出發點,而是以如何使用好語言為基本點。受這種思想的影響,我們的程序設計教學大多數不是以如何解決好問題為重點,而是以講解語法規則和語句格式為重點,是「說明書」式的教學。這樣做造成的結果就是見到一個程序後學生首先想到是該用哪條語句,而不是思考怎樣合理的解析。要切實解決這個問題,首先應該改變程序設計的觀念。「面向對象程序設計」思想是目前最為流行、極為實用的一種程序設計方法,但是讓學生直接接觸「面向對象程序設計」,肯定不能對程序設計打下牢固的基礎。「結構化與面向對象並舉」是現代計算機程序設計的發展趨勢,應該認真探索研究,讓學生有一個較為輕松的學習過程。程序設計的實質就是編寫處理對象的過程,所以將c與c++有機的融為一體的教材應該是首選教材,在教學過程中,我們應該從社會發展的角度進行探索研究,將目前最為流行又極為實用「面向對象程序設計」思想融合到c語言教學中。
3.c語言教學應培養學生良好的程序設計風格
具有良好的設計風格應該是程序員所具備的基本素質,在實際的項目中程序員往往都有自己的一些編程風格。目前95%以上的程序設計書籍不注重程序設計風格問題,這導致了很多學生沒有良好的程序設計風格,在他們剛剛畢業踏入社會時,如果周圍的同事沒有良好的編程風格,那麼很難通過環境來使自己提高這方面的素質,即使有提高也不容易比較全面的提高。因此在學生接觸的第一門程序設計語言教學中,就應該培養學生良好的程序設計風格,使他們一進工作環境就具備這個素質。
Pascal設計者N.Writh教授十分重視程序設計風格的養成,他堅信「教給學生們以表達他們思維的語言會深深地影響他們思維和創造發明的習慣,而正是這些語言本身的混亂直接影響著學生們的程序設計的風格」,他這里所指的「這些運用」是當時那些主要用於程序設計教學的計算機語言。對學生來講,一開始就強調程序設計風格很有必要,良好的程序設計風格不僅有助於提高程序的可靠性、可理解性、可測試性、可維護性和可重用性,而且也能夠促進技術的交流,改善軟體的質量。所以培養良好的程序設計風格對於初學者來說非常重要。
程序設計風格,實際上是指的是編碼風格。在教學過程中應從源程序文檔化,數據說明的原則,輸入/輸出方法這三個方面培養學生的編碼風格,進而從編碼原則探討提高程序的可讀性、改善程序質量的方法。
(1)源程序文檔化。編碼的目的是產生程序,但是為了提高程序的可維護性。源代碼是需要實現文檔化的。源程序文檔化包括選擇標識符(變數和標號)的名字、安排注釋以及標準的書寫格式等。
①選擇標識符的命名規則。標識符包括模塊名、變數名、常量名、標號名、子程序名等。這些名字應能反映它所代表的實際東西,應有一定實際意義,使其能顧名思義。另外在模塊名、變數名、常量名、標號名、子程序名中使用下劃線是一種風格。使用這一技術的一種廣為人知的命名規則就是匈牙利命名法(變數類型由一個或兩個字元表示,並且這些字元將作為變數名的前綴)。當然使用匈牙利命名法與否都沒有錯誤,重要的是要保持一致性——在整個程序中使用相同的命名規則。這就是說,如果你在一個小組環境中編程,你和其他小組成員應該制定一種命名規則。並自始至終使用這種規則。如果有人使用了別的命名規則,那麼集成的程序讀起來將是很費勁的。此外,你還要與程序中用到的第三方庫(如果有的話)所使用的風格保持一致。如果可能的話,你應該盡量使用與第三方庫相同的命名規則,這將加強你的程序的可讀性和一致性。
②注釋。程序中的注釋是程序設計者與程序閱讀者之間通信的重要手段。注釋能夠幫助讀者理解程序,並為後續測試維護提供明確的指導信息。因此,注釋是十分重要的,大多數程序設計語言提供了使用自然語言來寫注釋的環境,為程序閱讀者帶來很大的方便。注釋分為功能性注釋和序言性注釋。
a.功能性注釋。功能性注釋在源程序中,用以描述其後的語句或程序段是在做什麼工作,也就是解釋下面要「做什麼」,而不是解釋下面怎麼做。對於書寫功能性注釋,要注意以下幾點:第一描述一段程序,而不是每一個語句。第二利用縮進和空行,使程序與注釋容易區別。第三注釋要准確無誤。
b.序言性注釋。序言性注釋通常位於每個程序模塊的開頭部分,它給出程序的整體說明,對於理解程序具有引導作用。有些軟體開發部門對序言性注釋做了明確而嚴格的規定,要求程序編制者逐項列出。有關內容包括:程序標題;有關該模塊功能和目的的說明;主要演算法;介面說明:包括調用形式,參數描述,子程序清單;有關數據描述;模塊位置(在哪一個源文件中,或隸屬於哪一個軟體包);開發簡歷:模塊設計者、復審考、復審日期。
③用標準的書寫格式。源程序清單的書寫建議採用以下幾點:
a.每行只寫一條語句;
b.用分層縮進的寫法顯示嵌套結構層次,這樣可使程序的邏輯結構更加清晰,層次更加分明。
c.書寫表達式時適當使用空格或圓括弧作隔離符。
d.在注釋段周圍加上邊框;
e.注釋段與程序段、以及不同的程序段之間插入字行;
(2)數據說明採用的原則。在編寫程序時,要注意數據說明的風格。
數據說明的次序如果規范,將有利於測試,排錯和維護。首先說明的先後次序要固定,例如,按常量說明、簡單變數類型說明、數組說明用數據塊說明、所有的文件說明的順序說明。當然在類型說明中還可進一步要求,例如按如下順序排列:整型量說明、實型量說明、字元量說明、邏輯說明。
其次當用一個語句說明多個變數名時,應當對這些變數按字母的順序排列。
最後對於復雜數據結構,應利用注釋說明實現這個數據結構的特點。
(3)輸入/輸出方法。輸入/輸出的方式和格式應當盡量避免因設計不當給用戶帶來的麻煩。這就要求,源程序的輸入/輸出風格必須滿足能否為用戶接受這一原則。所以在設計程序時,應考慮以下原則:輸入數據時,要使輸入的步驟和操作盡可能簡單,應允許使用自由格式輸入;應允許預設值;對輸入的數據要進行檢驗,以保證每個數據的有效性。
(三)結束語
在教學過程中,我們讓學生設計一個程序模擬體育彩票的銷售與對獎的過程,取得了良好的效果。他不僅啟發和誘導了學生獨立思考、積極思維的主動性,而且充分調動了學生學習的自覺性和積極性,使學生融會貫通地掌握了所學知識,提高了分析問題和解決實際問題的能力。
搞好c程序設計的教學工作涉及的因素很多,如果以項目來驅動教學,首先讓學生樹立面向工程的思想,其次把教學從單一的「結構化程序設計」向「結構化與面向對象並舉」轉變,最後特別要培養學生養成良好的編碼風格,從而使他們學會能夠「干什麼」,那麼我們認為教學目的就達到了。
另外,虛機團上產品團購,超級便宜
『叄』 c語言如何學習
談及C語言,我想凡是學過它的朋友都有這樣一種感覺,那就是「讓我歡喜讓我憂。」歡喜的是,C語言功能非常強大、應用廣泛,一旦掌握了後,你就可以理直氣壯地對他人說「我是電腦高手!」,而且以後若是再自學其他語言就顯得輕而易舉了。憂慮的是,C語言猶如「少林武功」一般博大精深,太難學了。其實就筆者認為C語言並非是「difficult(困難)」的,只要你能理清思路,掌握它的精髓,那麼自學C語言是一件非常容易且又其樂無窮的事。今天本人就與大家一起談談如何學習C語言。
學習C語言必須從以下四點入手,也就是說,只要你能掌握這四點的內容,那麼基本上就大功告成了。
1、多看代碼 在有一定基礎以後一定要多看別人的代碼。 注意代碼中的演算法和數據結構。
畢竟學C之後的關口就是演算法和數據結構。提到數據結構,指針是其中重要的一環,絕大多數的數據結構是建立在指針之上的,如鏈表、隊列、樹、圖等等,所以只有學好指針才能真正學好C。別的方面也要關注一下,諸如變數的命名、庫函數的用法等等。有些庫函數是經常用到的。對於這些函數的用法就要牢牢記住。
2、要自己動手 編程序是個實乾的活,光說不練不行。剛開始學的時候可以多練習書上的習題。 對於自己不明白的地方,自己編個小程序實驗一下是最好的方法,能給自己留下深刻的印象。 自己動手的過程中要不斷糾正自己不好的編程習慣和認識錯誤。有一定的基礎以後可以嘗試編一點小游戲,文曲星之類的電子詞典上小游戲很多,照著編作為練習。基礎很扎實的時候,可以編一些關於數據結構方面的東西,諸如最經典的學生管理系統。之後.....學匯編、硬體知識。
3、選擇一個好的編譯器 VS2010以上版本
4、關於養成良好的編程習慣 基本上每本C教材上都要提到。作為新手這條一定要時時遵守。具體方面:
(1) 在比較復雜的代碼後面要有注釋。 如果光溜溜一堆代碼,別人就不可能看懂你的代碼,而且也不利於查找錯誤。
(2)注意語句的嵌套不能過長,一般來說,一段代碼里Tab要少於8個。
簡單說就是語句最多8個嵌套。 對於新手來說,這個標准還要下降。有一個好習慣是,把主函數盡量寫簡短。經常看到別人的代碼是主函數只有幾行,幾個函數調用,而定義全在主函數外部。這樣一是減少了主函數內部的嵌套,二是比較精簡,容易讀懂。
(3)注意語句的選擇。並不是分支語句就用if循環就用while、for。在適當的情況下switch和do while語句也是要用的。
『肆』 C語言程序設計:現代方法:第2版的目錄
第1章c語言概述 1
1.1c語言的歷史 1
1.1.1起源 1
1.1.2標准化 1
1.1.3基於c的語言 2
1.2c語言的優缺點 3
1.2.1c語言的優點 3
1.2.2c語言的缺點 3
1.2.3高效地使用c語言 4
問與答 5
第2章c語言基本概念 7
2.1編寫一個簡單的c程序 7
程序顯示雙關語 7
2.1.1編譯和鏈接 8
2.1.2集成開發環境 8
2.2簡單程序的一般形式 9
2.2.1指令 9
2.2.2函數 9
2.2.3語句 10
2.2.4顯示字元串 10
.2.3注釋 11
2.4變數和賦值 12
2.4.1類型 12
2.4.2聲明 13
2.4.3賦值 13
2.4.4顯示變數的值 14
程序計算箱子的空間重量 14
2.4.5初始化 15
2.4.6顯示表達式的值 16
2.5讀入輸入 16
程序計算箱子的空間重量(改進版) 16
2.6定義常量的名字 17
程序華氏溫度轉換為攝氏溫度 17
2.7標識符 18
2.8c程序的書寫規范 19
問與答 21
練習題 23
編程題 24
第3章格式化輸入/輸出 26
3.1printf函數 26
3.1.1轉換說明 27
程序用printf函數格式化數 28
3.1.2轉義序列 28
3.2scanf函數 29
3.2.1scanf函數的工作方法 30
3.2.2格式串中的普通字元 31
3.2.3易混淆的printf函數和scanf
函數 32
程序分數相加 32
問與答 33
練習題 34
編程題 35
第4章表達式 36
4.1算術運算符 36
程序計算通用產品代碼的校驗位 38
4.2賦值運算符 39
4.2.1簡單賦值 40
4.2.2左值 41
4.2.3復合賦值 41
4.3自增運算符和自減運算符 42
4.4表達式求值 43
4.5表達式語句 45
問與答 45
練習題 47
編程題 49
第5章選擇語句 50
5.1邏輯表達式 50
5.1.1關系運算符 50
5.1.2判等運算符 51
5.1.3邏輯運算符 51
5.2if語句 52
5.2.1復合語句 53
5.2.2else子句 53
5.2.3級聯式if語句 54
程序計算股票經紀人的傭金 55
5.2.4「懸空else」的問題 56
5.2.5條件表達式 57
5.2.6c89中的布爾值 58
5.2.7c99中的布爾值 58
5.3switch語句 59
程序顯示法定格式的日期 61
問與答 62
練習題 65
編程題 67
第6章循環 69
6.1while語句 69
程序顯示平方表 71
程序數列求和 71
6.2do語句 72
程序計算整數的位數 73
6.3for語句 73
6.3.1for語句的慣用法 74
6.3.2在for語句中省略表達式 75
6.3.3c99中的for語句 75
6.3.4逗號運算符 76
程序顯示平方表(改進版) 77
6.4退出循環 78
6.4.1break語句 78
6.4.2continue語句 78
6.4.3goto語句 79
程序賬簿結算 80
6.5空語句 81
問與答 83
練習題 84
編程題 85
第7章基本類型 88
7.1整數類型 88
7.1.1c99中的整數類型 90
7.1.2整數常量 90
7.1.3c99中的整數常量 91
7.1.4整數溢出 91
7.1.5讀/寫整數 91
程序數列求和(改進版) 92
7.2浮點類型 93
7.2.1浮點常量 94
7.2.2讀/寫浮點數 94
7.3字元類型 94
7.3.1字元操作 95
7.3.2有符號字元和無符號字元 95
7.3.3算術類型 96
7.3.4轉義序列 96
7.3.5字元處理函數 97
7.3.6用scanf和printf讀/寫字元 98
7.3.7用getchar和putchar讀/寫
字元 98
程序確定消息的長度 99
7.4類型轉換 100
7.4.1常用算術轉換 101
7.4.2賦值過程中的轉換 102
7.4.3c99中的隱式轉換 103
7.4.4強制類型轉換 103
7.5類型定義 105
7.5.1類型定義的優點 105
7.5.2類型定義和可移植性 105
7.6sizeof運算符 106
問與答 107
練習題 109
編程題 110
第8章數組 113
8.1一維數組 113
8.1.1數組下標 113
程序數列反向 115
8.1.2數組初始化 115
8.1.3 指定初始化式 116
程序檢查數中重復出現的數字 116
8.1.4對數組使用sizeof運算符 117
程序計算利息 118
8.2多維數組 119
8.2.1多維數組初始化 120
8.2.2常量數組 121
程序發牌 121
8.3c99中的變長數組 122
問與答 123
練習題 124
編程題 125
第9章函數 129
9.1函數的定義和調用 129
程序計算平均值 129
程序顯示倒計數 130
程序顯示雙關語(改進版) 131
9.1.1函數定義 132
9.1.2函數調用 133
程序判定素數 134
9.2函數聲明 135
9.3實際參數 136
9.3.1實際參數的轉換 137
9.3.2數組型實際參數 138
9.3.3變長數組形式參數 140
9.3.4在數組參數聲明中使用
static 141
9.3.5復合字面量 141
9.4return語句 142
9.5程序終止 143
9.6遞歸 144
程序快速排序 146
問與答 147
練習題 150
編程題 153
第10章程序結構 155
10.1局部變數 155
10.1.1靜態局部變數 156
10.1.2形式參數 156
10.2外部變數 156
10.2.1示例:用外部變數實現棧 156
10.2.2外部變數的利與弊 157
程序 猜數 158
10.3程序塊 161
10.4作用域 162
10.5構建c程序 163
程序給一手牌分類 163
問與答 169
練習題 169
編程題 170
第11章指針 172
11.1指針變數 172
11.2取地址運算符和間接定址運算符 173
11.2.1取地址運算符 173
11.2.2間接定址運算符 174
11.3指針賦值 174
11.4指針作為參數 176
程序找出數組中的最大元素和最
小元素 177
11.5指針作為返回值 179
問與答 180
練習題 181
編程題 182
第12章指針和數組 184
12.1指針的算術運算 184
12.1.1指針加上整數 185
12.1.2指針減去整數 185
12.1.3兩個指針相減 186
12.1.4指針比較 186
12.1.5指向復合常量的指針 186
12.2指針用於數組處理 186
12.3用數組名作為指針 188
程序 數列反向(改進版) 189
12.3.1數組型實際參數(改進版) 189
12.3.2用指針作為數組名 191
12.4指針和多維數組 191
12.4.1處理多維數組的元素 191
12.4.2處理多維數組的行 192
12.4.3處理多維數組的列 192
12.4.4用多維數組名作為指針 192
12.5c99中的指針和變長數組 193
問與答 194
練習題 195
編程題 197
第13章字元串 198
13.1字元串字面量 198
13.1.1字元串字面量中的轉義序列 198
13.1.2延續字元串字面量 199
13.1.3如何存儲字元串字面量 199
13.1.4字元串字面量的操作 200
13.1.5字元串字面量與字元常量 200
13.2字元串變數 200
13.2.1初始化字元串變數 201
13.2.2字元數組與字元指針 202
13.3字元串的讀和寫 203
13.3.1用printf函數和puts函數
寫字元串 203
13.3.2用scanf函數和gets函數讀
字元串 203
13.3.3逐個字元讀字元串 204
13.4訪問字元串中的字元 205
13.5使用c語言的字元串庫 206
13.5.1strcpy函數 207
13.5.2strlen函數 208
13.5.3strcat函數 208
13.5.4strcmp函數 209
程序 顯示一個月的提醒列表 209
13.6字元串慣用法 211
13.6.1搜索字元串的結尾 211
13.6.2復制字元串 213
13.7字元串數組 214
程序 核對行星的名字 217
問與答 218
練習題 220
編程題 222
第14章預處理器 225
14.1預處理器的工作原理 225
14.2預處理指令 227
14.3宏定義 227
14.3.1簡單的宏 227
14.3.2帶參數的宏 229
14.3.3#運算符 231
14.3.4##運算符 231
14.3.5宏的通用屬性 232
14.3.6宏定義中的圓括弧 233
14.3.7創建較長的宏 233
14.3.8預定義宏 234
14.3.9c99中新增的預定義宏 235
14.3.10空的宏參數 236
14.3.11參數個數可變的宏 236
14.3.12__func__標識符 237
14.4條件編譯 237
14.4.1#if指令和#endif指令 238
14.4.2defined運算符 238
14.4.3#ifdef指令和#ifndef
指令 239
14.4.4#elif指令和#else指令 239
14.4.5使用條件編譯 240
14.5其他指令 240
14.5.1#error指令 240
14.5.2#line指令 241
14.5.3#pragma指令 242
14.5.4_pragma運算符 242
問與答 243
練習題 245
第15章編寫大型程序 248
15.1源文件 248
15.2頭文件 249
15.2.1#include指令 249
15.2.2共享宏定義和類型定義 250
15.2.3共享函數原型 251
15.2.4共享變數聲明 252
15.2.5嵌套包含 253
15.2.6保護頭文件 253
15.2.7頭文件中的#error指令 254
15.3把程序劃分成多個文件 254
程序文本格式化 255
15.4構建多文件程序 260
15.4.1makefile 260
15.4.2鏈接期間的錯誤 262
15.4.3重新構建程序 262
15.4.4在程序外定義宏 264
問與答 264
練習題 265
編程題 266
第16章結構、聯合和枚舉 267
16.1結構變數 267
16.1.1結構變數的聲明 267
16.1.2結構變數的初始化 269
16.1.3指定初始化 269
16.1.4對結構的操作 270
16.2結構類型 270
16.2.1結構標記的聲明 271
16.2.2結構類型的定義 272
16.2.3結構作為參數和返回值 272
16.2.4復合字面量 273
16.3嵌套的數組和結構 274
16.3.1嵌套的結構 274
16.3.2結構數組 274
16.3.3結構數組的初始化 275
程序 維護零件資料庫 275
16.4聯合 281
16.4.1用聯合來節省空間 282
16.4.2用聯合來構造混合的數據
結構 284
16.4.3為聯合添加「標記欄位」 284
16.5枚舉 285
16.5.1枚舉標記和類型名 286
16.5.2枚舉作為整數 286
16.5.3用枚舉聲明「標記欄位」 286
問與答 287
練習題 289
編程題 293
第17章指針的高級應用 294
17.1動態存儲分配 294
17.1.1內存分配函數 294
17.1.2空指針 295
17.2動態分配字元串 296
17.2.1使用malloc函數為字元串
分配內存 296
17.2.2在字元串函數中使用動態
存儲分配 296
17.2.3動態分配字元串的數組 297
程序 顯示一個月的提醒列表
(改進版) 297
17.3動態分配數組 299
17.3.1使用malloc函數為數組分配
存儲空間 299
17.3.2calloc函數 300
17.3.3realloc函數 300
17.4釋放存儲空間 301
17.4.1free函數 301
17.4.2「懸空指針」問題 301
17.5鏈表 302
17.5.1聲明結點類型 302
17.5.2創建結點 303
17.5.3-)運算符 303
17.5.4在鏈表的開始處插入結點 304
17.5.5搜索鏈表 306
17.5.6從鏈表中刪除結點 307
17.5.7有序鏈表 308
程序 維護零件資料庫(改進版) 309
17.6指向指針的指針 313
17.7指向函數的指針 314
17.7.1函數指針作為參數 314
17.7.2qsort函數 314
17.7.3函數指針的其他用途 316
程序 列三角函數表 317
17.8受限指針 318
17.9靈活數組成員 319
問與答 320
練習題 323
編程題 325
第18章聲明 327
18.1聲明的語法 327
18.2存儲類型 328
18.2.1變數的性質 328
18.2.2auto存儲類型 329
18.2.3static存儲類型 329
18.2.4extern存儲類型 330
18.2.5register存儲類型 331
18.2.6函數的存儲類型 332
18.2.7小結 332
18.3類型限定符 333
18.4聲明符 334
18.4.1解釋復雜聲明 335
18.4.2使用類型定義來簡化聲明 336
18.5初始化式 336
18.6內聯函數 337
18.6.1內聯定義 338
18.6.2對內聯函數的限制 339
18.6.3在gcc中使用內聯函數 339
問與答 339
練習題 342
第19章程序設計 345
19.1模塊 345
19.1.1內聚性與耦合性 347
19.1.2模塊的類型 347
19.2信息隱藏 347
19.3抽象數據類型 350
19.3.1封裝 351
19.3.2不完整類型 351
19.4棧抽象數據類型 352
19.4.1為棧抽象數據類型定義介面 352
19.4.2用定長數組實現棧抽象數據
類型 353
19.4.3改變棧抽象數據類型中數據
項的類型 354
19.4.4用動態數組實現棧抽象數據
類型 355
19.4.5用鏈表實現棧抽象數據類型 357
19.5抽象數據類型的設計問題 359
19.5.1命名慣例 359
19.5.2錯誤處理 359
19.5.3通用抽象數據類型 359
19.5.4新語言中的抽象數據類型 360
問與答 360
練習題 361
編程題 362
第20章底層程序設計 363
20.1位運算符 363
20.1.1移位運算符 363
20.1.2按位求反運算符、按位與運
算符、按位異或運算符和按
位或運算符 364
20.1.3用位運算符訪問位 365
20.1.4用位運算符訪問位域 366
程序 xor加密 366
20.2結構中的位域 367
20.3其他底層技術 369
20.3.1定義依賴機器的類型 369
20.3.2用聯合提供數據的多個視角 370
20.3.3將指針作為地址使用 371
程序 查看內存單元 371
20.3.4volatile類型限定符 373
問與答 374
練習題 374
編程題 376
第21章標准庫 377
21.1標准庫的使用 377
21.1.1對標准庫中所用名字的
限制 377
21.1.2使用宏隱藏的函數 378
21.2c89標准庫概述 378
21.3c99標准庫更新 380
21.4(stddef.h):常用定義 381
21.5(stdbool.h):布爾類型和值 381
問與答 382
練習題 382
編程題 383
第22章輸入/輸出 384
22.1流 384
22.1.1文件指針 385
22.1.2標准流和重定向 385
22.1.3文本文件與二進制文件 385
22.2文件操作 386
22.2.1打開文件 386
22.2.2模式 387
22.2.3關閉文件 388
22.2.4為打開的流附加文件 389
22.2.5從命令行獲取文件名 389
程序 檢查文件是否可以打開 389
22.2.6臨時文件 390
22.2.7文件緩沖 391
22.2.8其他文件操作 392
22.3格式化的輸入/輸出 393
22.3.1…printf函數 393
22.3.2…printf轉換說明 393
22.3.3c99對…printf轉換說明的
修改 395
22.3.4…printf轉換說明示例 396
22.3.5…scanf函數 398
22.3.6…scanf格式串 398
22.3.7…scanf轉換說明 398
22.3.8c99對...scanf轉換說明的
改變 400
22.3.9scanf示例 400
22.3.10檢測文件末尾和錯誤條件 401
22.4字元的輸入/輸出 403
22.4.1輸出函數 403
22.4.2輸入函數 403
程序 復制文件 404
22.5行的輸入/輸出 405
22.5.1輸出函數 405
22.5.2輸入函數 406
22.6塊的輸入/輸出 406
22.7文件定位 407
程序 修改零件記錄文件 409
22.8字元串的輸入/輸出 409
22.8.1輸出函數 410
22.8.2輸入函數 410
問與答 411
練習題 414
編程題 416
第23章庫對數值和字元數據的支持 419
23.1(float.h):浮點類型的特性 419
23.2(limits.h):整數類型的大小 421
23.3(math.h):數學計算(c89) 422
23.3.1錯誤 422
23.3.2三角函數 422
23.3.3雙曲函數 423
23.3.4指數函數和對數函數 423
23.3.5冪函數 424
23.3.6就近取整函數、絕對值函數
和取余函數 424
23.4(math.h):數學計算(c99) 425
23.4.1ieee浮點標准 425
23.4.2類型 426
23.4.3宏 426
23.4.4錯誤 426
23.4.5函數 427
23.4.6分類宏 427
23.4.7三角函數 428
23.4.8雙曲函數 428
23.4.9指數函數和對數函數 429
23.4.10冪函數和絕對值函數 430
23.4.11誤差函數和伽瑪函數 430
23.4.12就近取整函數 431
23.4.13取余函數 432
23.4.14操作函數 432
23.4.15最大值函數、最小值函數
和正差函數 433
23.4.16浮點乘加 433
23.4.17比較宏 434
23.5(ctype.h):字元處理 434
23.5.1字元分類函數 435
程序 測試字元分類函數 436
23.5.2字元大小寫映射函數 437
程序 測試大小寫映射函數 437
23.6(string.h):字元串處理 437
23.6.1復制函數 437
23.6.2拼接函數 438
23.6.3比較函數 439
23.6.4搜索函數 440
23.6.5其他函數 442
問與答 442
練習題 443
編程題 444
第24章錯誤處理 446
24.1(assert.h):診斷 446
24.2(errno.h):錯誤 447
24.3(signal.h):信號處理 448
24.3.1信號宏 449
24.3.2signal函數 449
24.3.3預定義的信號處理函數 450
24.3.4raise函數 450
程序 測試信號 451
24.4(setjmp.h):非局部跳轉 452
程序 測試setjmp和longjmp 452
問與答 453
練習題 454
第25章國際化特性 456
25.1(locale.h):本地化 456
25.1.1類別 456
25.1.2setlocale函數 457
25.1.3localeconv函數 458
25.2多位元組字元和寬字元 461
25.2.1多位元組字元 461
25.2.2寬字元 461
25.2.3統一碼和通用字元集 462
25.2.4統一碼編碼 462
25.2.5多位元組/寬字元轉換函數 463
25.2.6多位元組/寬字元串轉換函數 465
25.3雙字元和三字元 465
25.3.1三字元 465
25.3.2雙字元 466
25.3.3(iso646.h):拼寫替換 467
25.4通用字元名 467
25.5(wchar.h):擴展的多位元組和寬字元
實用工具 467
25.5.1流傾向 468
25.5.2格式化寬字元輸入/輸出
函數 468
25.5.3寬字元輸入/輸出函數 470
25.5.4通用的寬字元串實用工具 471
25.5.5寬字元時間轉換函數 474
25.5.6擴展的多位元組/寬字元轉換
實用工具 474
25.6(wctype.h):寬字元分類和映射實
用工具 477
25.6.1寬字元分類函數 477
25.6.2可擴展的寬字元分類函數 478
25.6.3寬字元大小寫映射函數 478
25.6.4可擴展的寬字元大小寫映射
函數 478
問與答 479
練習題 479
編程題 480
第26章其他庫函數 482
26.1(stdarg.h):可變參數 482
26.1.1調用帶有可變參數列表的
函數 483
26.1.2v…printf函數 484
26.1.3v…scanf函數 485
26.2(stdlib.h):通用的實用工具 485
26.2.1數值轉換函數 485
程序 測試數值轉換函數 486
26.2.2偽隨機序列生成函數 488
程序 測試偽隨機序列生成函數 488
26.2.3與環境的通信 489
26.2.4搜索和排序實用工具 490
程序 確定航空里程 491
26.2.5整數算術運算函數 492
26.3(time.h):日期和時間 492
26.3.1時間處理函數 493
26.3.2時間轉換函數 495
程序 顯示日期和時間 498
問與答 500
練習題 501
編程題 502
第27章c99對數學計算的新增支持 503
27.1(stdint.h):整數類型 503
27.1.1(stdint.h)類型 503
27.1.2對指定寬度整數類型的限制 504
27.1.3對其他整數類型的限制 505
27.1.4用於整數常量的宏 505
27.2(inttypes.h):整數類型的格式
轉換 506
27.2.1用於格式說明符的宏 506
27.2.2用於最大寬度整數類型的
函數 507
27.3復數 508
27.3.1復數的定義 508
27.3.2復數的算術運算 509
27.3.3c99中的復數類型 509
27.3.4復數的運算 510
27.3.5復數類型的轉換規則 510
27.4(complex.h):復數算術運算 511
27.4.1(complex.h)宏 511
27.4.2cx_limited_range編譯
提示 512
27.4.3(complex.h)函數 512
27.4.4三角函數 512
27.4.5雙曲函數 513
27.4.6指數函數和對數函數 514
27.4.7冪函數和絕對值函數 514
27.4.8操作函數 514
程序 求二次方程的根 515
27.5(tgmath.h):泛型數學 515
27.5.1泛型宏 516
27.5.2調用泛型宏 517
27.6(fenv.h):浮點環境 518
27.6.1浮點狀態標志和控制模式 518
27.6.2(fenv.h)宏 519
27.6.3fenv_access編譯提示 519
27.6.4浮點異常函數 520
27.6.5舍入函數 520
27.6.6環境函數 521
問與答 521
練習題 522
編程題 523
附錄ac語言運算符 524
附錄bc99與c89的比較 525
附錄cc89與經典c的比較 529
附錄d標准庫函數 532
附錄eascii字元集 569
參考文獻 570
索引 573
『伍』 求推薦一本0基礎學習c語言的書,最好沒有錯誤的
您好,很高興為您解答問題。
0基礎學習C語言建議購買《CPrimerPlus》中文版,這本書非常好。
補充資料:
《CPrimerPlus(中文版)》共17章。第1、2章學習C語言編程所需的預備知識。第3到15章介紹了C語言的相關知識,包括數據類型、格式化輸入輸出、運算符、表達式、流程式控制制語句、函數、數組和指針、字元串操作、內存管理、位操作等等,知識內容都針對C99標准;另外,第10章強化了對指針的討論,第12章引入了動態內存分配的概念,這些內容更加適合讀者的需求。第16章和第17章討論了C預處理器和C庫函數、高級數據表示(數據結構)方面的內容。附錄給出了各章後面復習題、編程練習的答案和豐富的C編程參考資料。
圖片:網頁鏈接