本書從初學(xué)者的角度,以Visual Studio 2010為平臺(tái),分析、講解了規(guī)范的C語言程序設(shè)計(jì)方法。
本書使用的程序設(shè)計(jì)平臺(tái)是Visual Studio 2010,教授內(nèi)容主線是以變量(數(shù)據(jù))、函數(shù)(方法)和指針(編程風(fēng)格)流暢地融為一體的C程序設(shè)計(jì)方法,編程方法、風(fēng)格、知識(shí)點(diǎn)與后續(xù)的C++課程、數(shù)據(jù)結(jié)構(gòu)課程融通。
C語言程序設(shè)計(jì)是新生第一學(xué)期最為困難的一門課程(無論有無計(jì)算機(jī)文化課基礎(chǔ)),因?yàn)樗麄儚男W(xué)、初中到高中多年教育養(yǎng)成的數(shù)學(xué)、物理解題思路(連續(xù)的模擬量過程推理計(jì)算),可能無法適應(yīng)一種新的邏輯思維方式和完全不同的計(jì)算機(jī)程序的離散編程方法。
與傳統(tǒng)C語言教材不同,本書在編排上刪繁就簡,力求語言精煉,避免大段晦澀的文字描述,突出例題引導(dǎo)初學(xué)者入門的思路,便于讀者自學(xué)。
本書意圖通過通俗易懂的語言風(fēng)格,淺入深出地引導(dǎo)初學(xué)者漸入佳境,培養(yǎng)讀者建立不畏懼C語言編程的心理。內(nèi)容展開如同遣詞造句學(xué)作文一樣,給初學(xué)者一個(gè)圖文并茂、一步一步地由生疏到習(xí)慣成自然的程序設(shè)計(jì)思路。
本書所有例題均從初學(xué)者角度,解說他們最容易碰到的困惑問題。讀者僅需跟著本書進(jìn)度,按照給出的例題動(dòng)手練習(xí)(一次或多次),就能亦步亦趨地進(jìn)入C語言程序設(shè)計(jì)世界。
本書分為C語言基礎(chǔ)(第1~6章)與程序設(shè)計(jì)方法(第7~11章)兩部分;A(chǔ)內(nèi)容主要以例題貫通前后知識(shí)點(diǎn),簡單易懂,引導(dǎo)初學(xué)者理解C語言程序設(shè)計(jì)的基本知識(shí)、強(qiáng)調(diào)客觀對象與抽象數(shù)據(jù)變量的關(guān)系和計(jì)算機(jī)編程的思維方式。
筆者認(rèn)為,C語言程序設(shè)計(jì)課程的目的不是學(xué)C語言,而是為今后面向?qū)ο蟮某绦蛟O(shè)計(jì)方法(C++)和數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)打下堅(jiān)實(shí)的基礎(chǔ)。通過本書的學(xué)習(xí),初學(xué)者要培養(yǎng)建立和掌握(或基本掌握)真正的大型軟件設(shè)計(jì)中必須遵循的規(guī)范、簡潔的編程風(fēng)格,以及軟件工程體系結(jié)構(gòu)的基本概念。
為培養(yǎng)初學(xué)者解決問題的能力,本書結(jié)合函數(shù)討論了算法,結(jié)合鏈表訓(xùn)練了指針應(yīng)用風(fēng)格。本書注重培養(yǎng)學(xué)生程序設(shè)計(jì)的思維方法與基本能力,強(qiáng)化解決實(shí)際應(yīng)用問題的編程能力。
本書配有11次上機(jī)作業(yè)、12次授課課件、2次習(xí)題課件、4次課堂測驗(yàn)考卷及標(biāo)準(zhǔn)程序(按期中考試以后內(nèi)容安排)、4次期末試題(含標(biāo)準(zhǔn)程序)、DEBUG入門課件,以及所有的習(xí)題參考程序。
本書中所有例題都是調(diào)試通過的程序,并配有截屏及注釋。初學(xué)者可以在自己的計(jì)算機(jī)上,復(fù)制例題運(yùn)行過程,從而逐漸熟悉C語言。然后,通過各章配置的高強(qiáng)度習(xí)題,逐步地建立自己的編程思路與方法。
本書是面向?qū)ο蟮某绦蛟O(shè)計(jì)方法(C++)和數(shù)據(jù)結(jié)構(gòu)的先修課程。若讀者想進(jìn)一步提高編程水平與知識(shí),請參考附錄相關(guān)內(nèi)容。
限于作者水平,書中難免存在不妥之處,請讀者諒解并提出寶貴意見。
編 者
前言
第1章 什么是C語言
1.1 概述
1.1.1 C語言的歷史
1.1.2 面向?qū)ο蟮某绦蛟O(shè)計(jì)語言-C++
1.1.3 為何不直接學(xué)習(xí)C++
1.2 如何學(xué)習(xí)C語言
第2章 創(chuàng)建C程序-照貓畫虎入門C語言
2.1 編程步驟
2.2 在Visual Studio 2010環(huán)境下建立C程序
2.2.1 打開Visual Studio 2010平臺(tái)
2.2.2 建立一個(gè)新項(xiàng)目
2.2.3 在項(xiàng)目中建立一個(gè)C程序
2.3 跟我學(xué)C例題2-1-C程序框架
2.3.1 在屏幕上輸出一段文字的C程序
2.3.2 編輯運(yùn)行C程序
2.3.3 開始執(zhí)行-非調(diào)試模式
2.3.4 解決編譯錯(cuò)誤的"傻瓜"辦法
2.3.5 初學(xué)者的常見錯(cuò)誤
2.4 跟我學(xué)C例題2-2-變量和輸入/輸出語句
2.5 讀解C程序
2.5.1 主函數(shù)main和C程序結(jié)構(gòu)
2.5.2 書寫程序時(shí)應(yīng)遵循的"潛規(guī)則"
2.5.3 C語句的構(gòu)成
2.5.4 C語句詞匯
2.5.5 什么是變量
2.6 跟我學(xué)C例題2-3-C語言變量類型
2.6.1 如何打開一個(gè)已存在的程序
2.6.2 變量類型能影響程序執(zhí)行結(jié)果
2.6.3 可以輸入小數(shù)的變量類型
2.7 跟我學(xué)C練習(xí)題一
第3章 C語言的輸入/輸出格式-跟我學(xué)I/O
3.1 格式輸入/輸出函數(shù)scanf()、gets()和printf()
3.1.1 跟我學(xué)C例題3-1-求任意一個(gè)數(shù)的正弦值
3.1.2 函數(shù)scanf()的一般形式
3.1.3 函數(shù)scanf()是否可以從鍵盤輸入一段文字
3.1.4 字符串輸入函數(shù)gets()
3.1.5 使用scanf函數(shù)的注意事項(xiàng)
3.1.6 格式輸出函數(shù)printf()
3.2 cin函數(shù)和cout函數(shù)
3.2.1 cin和cout格式
3.2.2 cin能否讀入字符串中的空格
3.3 多學(xué)一點(diǎn)也無妨-緩沖區(qū)的概念
3.3.1 輸入緩沖區(qū)
3.3.2 輸出緩沖區(qū)-printf函數(shù)與cout函數(shù)的不同
3.4 本章要點(diǎn)
3.4.1 基本概念
3.4.2 輸入/輸出函數(shù)一覽
3.5 跟我學(xué)C練習(xí)題二
第4章 說文解字拆分C程序-程序結(jié)構(gòu)Ⅰ
4.1 條件分支語句if-else
4.1.1 跟我學(xué)C例題4-1-條件分支
4.1.2 if-else語句
4.1.3 if-else嵌套
4.2 邏輯關(guān)系表達(dá)式
4.2.1 跟我學(xué)C例題4-3-邏輯或
4.2.2 跟我學(xué)C例題4-4-邏輯與
4.2.3 跟我學(xué)C例題4-5-邏輯非
4.2.4 運(yùn)算符一覽
4.3 跟我學(xué)C例題4-6-教學(xué)評估(多路分支語句)
4.3.1 教學(xué)評估問題
4.3.2 圖解switch語句
4.4 本章要點(diǎn)
4.4.1 控制語句一覽
4.4.2 基本概念和編程要求
4.5 跟我學(xué)C練習(xí)題三
第5章 說文解字拆分C程序-程序結(jié)構(gòu)Ⅱ
5.1 跟我學(xué)C例題5-1-for語句
5.1.1 月供問題
5.1.2 循環(huán)語句for
5.1.3 循環(huán)條件的多樣性
5.1.4 跟我學(xué)C例題5-2-for語句形態(tài)的多樣性
5.2 while()-僅判斷循環(huán)條件
5.2.1 清晰的主題
5.2.2 while語句的循環(huán)方式
5.2.3 do-while()-至少循環(huán)一次
5.3 跟我學(xué)C例題5-3-循環(huán)與數(shù)組
5.3.1 跟我學(xué)計(jì)數(shù)
5.3.2 程序=循環(huán)+數(shù)組
5.3.3 初識(shí)數(shù)組
5.4 數(shù)組變量
5.4.1 基本概念
5.4.2 數(shù)組變量是同類型元素的線性集合
5.4.3 數(shù)組地址
5.4.4 聲明一個(gè)數(shù)組變量
5.5 數(shù)組操作
5.5.1 字符串操作
5.5.2 數(shù)值型數(shù)組操作
5.6 break與continue的異同
5.7 本章要點(diǎn)
5.8 跟我學(xué)C練習(xí)題四
第6章 說文解字拆分C程序-程序結(jié)構(gòu)Ⅲ
6.1 跟我學(xué)C例題6-1-應(yīng)用函數(shù)
6.2 變量的存儲(chǔ)方式-變量三代表
6.3 初識(shí)函數(shù)
6.3.1 函數(shù)概念
6.3.2 函數(shù)定義
6.4 參數(shù)傳遞與函數(shù)返回值
6.4.1 跟我學(xué)C例題6-2-照貓畫虎學(xué)函數(shù)
6.4.2 函數(shù)返回單個(gè)變量-return語句
6.5 函數(shù)返回多個(gè)變量-變量地址
6.5.1 跟我學(xué)C例題6-3-形參表中的數(shù)據(jù)變量
6.5.2 函數(shù)之間的蟲洞-變量的地址
6.5.3 歸納
6.6 變量作用域
6.6.1 作用域的基本概念
6.6.2 函數(shù)內(nèi)部聲明的變量=局部變量
6.6.3 函數(shù)外部聲明的變量=全局變量
6.6.4 函數(shù)私密性-盡量避免使用全局變量
6.6.5 變量存儲(chǔ)類型一覽
6.7 文章大綱化-程序函數(shù)化
6.8 跟我學(xué)C例題6-4-無知者無畏(學(xué)C還是用C)
6.9 本章要點(diǎn)
6.10 跟我學(xué)C練習(xí)題五
第7章 說文解字拆分C程序-變量的內(nèi)涵Ⅰ
7.1 再說變量-常識(shí)
7.1.1 常量與變量
7.1.2 類型自動(dòng)轉(zhuǎn)換
7.1.3 類型強(qiáng)制轉(zhuǎn)換
7.2 變量的本質(zhì)-存儲(chǔ)它的地址
7.2.1 字節(jié)、字與變量的地址
7.2.2 操作變量的方式
7.3 互聯(lián)網(wǎng)域名-IP地址
7.4 海量的內(nèi)存-無限的網(wǎng)絡(luò)
7.5 如何獲取變量的地址
7.6 再看函數(shù)-形參與實(shí)參
7.6.1 實(shí)參是地址
7.6.2 實(shí)參是數(shù)組
7.7 指針的概念
7.7.1 為什么指針也是變量
7.7.2 指針是一個(gè)存儲(chǔ)地址的變量
7.7.3 指針指向一個(gè)變量
7.7.4 指針指向數(shù)組
7.7.5 指針的數(shù)據(jù)類型
7.7.6 跟我學(xué)C例題7-1
7.8 本章要點(diǎn)
7.9 跟我學(xué)C練習(xí)題六
第8章 說文解字拆分C程序-變量的內(nèi)涵Ⅱ
8.1 糊涂師數(shù)糊涂——如何存儲(chǔ)表格
8.2 物類聚集——數(shù)組
8.2.1 數(shù)組的基本概念
8.2.2 一維數(shù)組聲明形式
8.3 二維數(shù)組
8.3.1 二維數(shù)組聲明形式及初始化
8.3.2 函數(shù)形參是二維數(shù)組
8.3.3 交換指針的值(二級(jí)指針)
8.4 指向指針的指針
8.5 二維數(shù)組的本質(zhì)-矢量的數(shù)組
8.5.1 指針類型一覽
8.5.2 二維數(shù)組-矢量數(shù)組
8.5.3 矢量指針-指向二維數(shù)組
8.5.4 形參是矢量指針
8.5.5 問題集錦
8.5.6 字符串?dāng)?shù)組
8.5.7 二維數(shù)組的形參簡寫形式
8.6 再說糊涂表-破家值萬貫
8.6.1 簡單變量的局限性-客觀對象有多種屬性
8.6.2 打開你的胸襟-構(gòu)建大千世界的結(jié)構(gòu)
8.6.3 結(jié)構(gòu)體的嵌套
8.7 結(jié)構(gòu)-變量的組合
8.7.1 基本數(shù)據(jù)類型與構(gòu)造數(shù)據(jù)類型
8.7.2 數(shù)據(jù)是客觀事物屬性的描述
8.7.3 結(jié)構(gòu)變量-打包數(shù)據(jù)
8.7.4 結(jié)構(gòu)體的概念-打包的方法
8.7.5 數(shù)據(jù)封裝的概念
8.7.6 結(jié)構(gòu)數(shù)組-線性表
8.8 索引未來-指針數(shù)組
8.8.1 索引舉例1-糊涂掌門
8.8.2 索引舉例2-傻瓜買車
8.8.3 指針與索引
8.9 本章要點(diǎn)
8.10 跟我學(xué)C練習(xí)題七
8.11 跟我學(xué)C練習(xí)題八
第9章 說文解字拆分C程序-指針與函數(shù)
9.1 指針概念一覽
9.2 指針與函數(shù)
9.2.1 函數(shù)是變量
9.2.2 函數(shù)的存儲(chǔ)方式-函數(shù)三代表
9.2.3 指針型函數(shù)-返回的是指針
9.2.4 函數(shù)型指針-指向函數(shù)的指針
9.2.5 跟我學(xué)C例題9-1-方法與變量分離
9.2.6 類型說明符typedef-變量的Facebook
9.3 按需申請內(nèi)存空間-按需分配
9.3.1 標(biāo)準(zhǔn)C語言的動(dòng)態(tài)內(nèi)存申請函數(shù)-malloc()
9.3.2 動(dòng)態(tài)內(nèi)存申請的存儲(chǔ)空間生存期
9.3.3 釋放內(nèi)存空間函數(shù)free()
9.3.4 動(dòng)態(tài)內(nèi)存申請-結(jié)構(gòu)變量的長度
9.4 魅力指針-鏈表
9.4.1 指針與數(shù)據(jù)結(jié)構(gòu)
9.4.2 美麗的鏈-指針實(shí)戰(zhàn)
*9.5 指針與引用
9.5.1 遞歸倒序單鏈表-二級(jí)指針
9.5.2 結(jié)構(gòu)嵌套中的變量表達(dá)形式
9.5.3 引用的定義
9.5.4 引用的特色-伊人紅妝
9.5.5 遞歸倒序中的引用-引用指針
9.5.6 結(jié)構(gòu)變量訪問表達(dá)式
9.6 本章要點(diǎn)
9.7 跟我學(xué)C練習(xí)題九
第10章 算法初識(shí)-時(shí)間的概念
10.1 什么是算法
10.2 簡單的排序算法
10.2.1 簡單排序算法的概念
10.2.2 直接插入排序算法
10.2.3 冒泡排序算法
10.3 遞歸函數(shù)與分治算法
10.3.1 遞歸的概念
10.3.2 分治法的基本思想
10.3.3 對半檢索(binary search)
10.3.4 漢諾塔算法
10.4 本章要點(diǎn)
10.5 跟我學(xué)C練習(xí)題十
第11章 數(shù)據(jù)收藏-跟我學(xué)文件
11.1 文件的概念
11.1.1 保存文件
11.1.2 保存數(shù)據(jù)——聰明的糊涂
11.1.3 數(shù)據(jù)似水流
11.1.4 硬盤的概念
11.1.5 文件在硬盤的存放形式
11.2 文件操作方式
11.2.1 文件操作一覽
11.2.2 文件內(nèi)部的當(dāng)前操作位置偏移
11.2.3 文件操作表
11.3 建立文件的步驟
11.3.1 文件打開函數(shù)fopen()
11.3.2 跟我學(xué)C例題11-1-建立一個(gè)文件
11.3.3 跟我學(xué)C例題11-2-從鍵盤輸入文件名
11.4 文件的讀寫
11.4.1 格式化讀寫函數(shù)fscanf()和fprintf()
11.4.2 數(shù)據(jù)塊讀寫函數(shù)fread()和fwrite()
11.4.3 定位函數(shù)rewind()和fseek()
11.5 保存鏈表-動(dòng)態(tài)數(shù)據(jù)文件的存取
11.6 本章要點(diǎn)
11.7 跟我學(xué)C練習(xí)題十一
附錄
附錄A 運(yùn)算符的優(yōu)先級(jí)
附錄A.1 優(yōu)先級(jí)規(guī)則
附錄A.2 作者的心聲
附錄B 制作頭文件的方法
附錄B.1 頭文件的宏格式
附錄B.2 在Visual Studio 2010平臺(tái)上建立頭文件
附錄C ASCII碼表
附錄D 變量命名
附錄D.1 變量命名的共性規(guī)則
附錄D.2 簡單的Windows應(yīng)用程序命名規(guī)則
附錄E DEBUG入門
附錄E.1 調(diào)試程序的步驟
附錄E.2 調(diào)試程序工具
附錄E.3 DEBUG工具欄
附錄E.4 DEBUG快捷鍵的使用說明
附錄E.5 調(diào)試心得
附錄F 編程進(jìn)階