本書從初學者的角度,以Visual Studio 2010為平臺,分析、講解了規(guī)范的C語言程序設(shè)計方法。
本書使用的程序設(shè)計平臺是Visual Studio 2010,教授內(nèi)容主線是以變量(數(shù)據(jù))、函數(shù)(方法)和指針(編程風格)流暢地融為一體的C程序設(shè)計方法,編程方法、風格、知識點與后續(xù)的C++課程、數(shù)據(jù)結(jié)構(gòu)課程融通。
C語言程序設(shè)計是新生第一學期最為困難的一門課程(無論有無計算機文化課基礎(chǔ)),因為他們從小學、初中到高中多年教育養(yǎng)成的數(shù)學、物理解題思路(連續(xù)的模擬量過程推理計算),可能無法適應(yīng)一種新的邏輯思維方式和完全不同的計算機程序的離散編程方法。
與傳統(tǒng)C語言教材不同,本書在編排上刪繁就簡,力求語言精煉,避免大段晦澀的文字描述,突出例題引導(dǎo)初學者入門的思路,便于讀者自學。
本書意圖通過通俗易懂的語言風格,淺入深出地引導(dǎo)初學者漸入佳境,培養(yǎng)讀者建立不畏懼C語言編程的心理。內(nèi)容展開如同遣詞造句學作文一樣,給初學者一個圖文并茂、一步一步地由生疏到習慣成自然的程序設(shè)計思路。
本書所有例題均從初學者角度,解說他們最容易碰到的困惑問題。讀者僅需跟著本書進度,按照給出的例題動手練習(一次或多次),就能亦步亦趨地進入C語言程序設(shè)計世界。
本書分為C語言基礎(chǔ)(第1~6章)與程序設(shè)計方法(第7~11章)兩部分;A(chǔ)內(nèi)容主要以例題貫通前后知識點,簡單易懂,引導(dǎo)初學者理解C語言程序設(shè)計的基本知識、強調(diào)客觀對象與抽象數(shù)據(jù)變量的關(guān)系和計算機編程的思維方式。
筆者認為,C語言程序設(shè)計課程的目的不是學C語言,而是為今后面向?qū)ο蟮某绦蛟O(shè)計方法(C++)和數(shù)據(jù)結(jié)構(gòu)的學習打下堅實的基礎(chǔ)。通過本書的學習,初學者要培養(yǎng)建立和掌握(或基本掌握)真正的大型軟件設(shè)計中必須遵循的規(guī)范、簡潔的編程風格,以及軟件工程體系結(jié)構(gòu)的基本概念。
為培養(yǎng)初學者解決問題的能力,本書結(jié)合函數(shù)討論了算法,結(jié)合鏈表訓(xùn)練了指針應(yīng)用風格。本書注重培養(yǎng)學生程序設(shè)計的思維方法與基本能力,強化解決實際應(yīng)用問題的編程能力。
本書配有11次上機作業(yè)、12次授課課件、2次習題課件、4次課堂測驗考卷及標準程序(按期中考試以后內(nèi)容安排)、4次期末試題(含標準程序)、DEBUG入門課件,以及所有的習題參考程序。
本書中所有例題都是調(diào)試通過的程序,并配有截屏及注釋。初學者可以在自己的計算機上,復(fù)制例題運行過程,從而逐漸熟悉C語言。然后,通過各章配置的高強度習題,逐步地建立自己的編程思路與方法。
本書是面向?qū)ο蟮某绦蛟O(shè)計方法(C++)和數(shù)據(jù)結(jié)構(gòu)的先修課程。若讀者想進一步提高編程水平與知識,請參考附錄相關(guān)內(nèi)容。
限于作者水平,書中難免存在不妥之處,請讀者諒解并提出寶貴意見。
編 者
前言
第1章 什么是C語言
1.1 概述
1.1.1 C語言的歷史
1.1.2 面向?qū)ο蟮某绦蛟O(shè)計語言-C++
1.1.3 為何不直接學習C++
1.2 如何學習C語言
第2章 創(chuàng)建C程序-照貓畫虎入門C語言
2.1 編程步驟
2.2 在Visual Studio 2010環(huán)境下建立C程序
2.2.1 打開Visual Studio 2010平臺
2.2.2 建立一個新項目
2.2.3 在項目中建立一個C程序
2.3 跟我學C例題2-1-C程序框架
2.3.1 在屏幕上輸出一段文字的C程序
2.3.2 編輯運行C程序
2.3.3 開始執(zhí)行-非調(diào)試模式
2.3.4 解決編譯錯誤的"傻瓜"辦法
2.3.5 初學者的常見錯誤
2.4 跟我學C例題2-2-變量和輸入/輸出語句
2.5 讀解C程序
2.5.1 主函數(shù)main和C程序結(jié)構(gòu)
2.5.2 書寫程序時應(yīng)遵循的"潛規(guī)則"
2.5.3 C語句的構(gòu)成
2.5.4 C語句詞匯
2.5.5 什么是變量
2.6 跟我學C例題2-3-C語言變量類型
2.6.1 如何打開一個已存在的程序
2.6.2 變量類型能影響程序執(zhí)行結(jié)果
2.6.3 可以輸入小數(shù)的變量類型
2.7 跟我學C練習題一
第3章 C語言的輸入/輸出格式-跟我學I/O
3.1 格式輸入/輸出函數(shù)scanf()、gets()和printf()
3.1.1 跟我學C例題3-1-求任意一個數(shù)的正弦值
3.1.2 函數(shù)scanf()的一般形式
3.1.3 函數(shù)scanf()是否可以從鍵盤輸入一段文字
3.1.4 字符串輸入函數(shù)gets()
3.1.5 使用scanf函數(shù)的注意事項
3.1.6 格式輸出函數(shù)printf()
3.2 cin函數(shù)和cout函數(shù)
3.2.1 cin和cout格式
3.2.2 cin能否讀入字符串中的空格
3.3 多學一點也無妨-緩沖區(qū)的概念
3.3.1 輸入緩沖區(qū)
3.3.2 輸出緩沖區(qū)-printf函數(shù)與cout函數(shù)的不同
3.4 本章要點
3.4.1 基本概念
3.4.2 輸入/輸出函數(shù)一覽
3.5 跟我學C練習題二
第4章 說文解字拆分C程序-程序結(jié)構(gòu)Ⅰ
4.1 條件分支語句if-else
4.1.1 跟我學C例題4-1-條件分支
4.1.2 if-else語句
4.1.3 if-else嵌套
4.2 邏輯關(guān)系表達式
4.2.1 跟我學C例題4-3-邏輯或
4.2.2 跟我學C例題4-4-邏輯與
4.2.3 跟我學C例題4-5-邏輯非
4.2.4 運算符一覽
4.3 跟我學C例題4-6-教學評估(多路分支語句)
4.3.1 教學評估問題
4.3.2 圖解switch語句
4.4 本章要點
4.4.1 控制語句一覽
4.4.2 基本概念和編程要求
4.5 跟我學C練習題三
第5章 說文解字拆分C程序-程序結(jié)構(gòu)Ⅱ
5.1 跟我學C例題5-1-for語句
5.1.1 月供問題
5.1.2 循環(huán)語句for
5.1.3 循環(huán)條件的多樣性
5.1.4 跟我學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 跟我學C例題5-3-循環(huán)與數(shù)組
5.3.1 跟我學計數(shù)
5.3.2 程序=循環(huán)+數(shù)組
5.3.3 初識數(shù)組
5.4 數(shù)組變量
5.4.1 基本概念
5.4.2 數(shù)組變量是同類型元素的線性集合
5.4.3 數(shù)組地址
5.4.4 聲明一個數(shù)組變量
5.5 數(shù)組操作
5.5.1 字符串操作
5.5.2 數(shù)值型數(shù)組操作
5.6 break與continue的異同
5.7 本章要點
5.8 跟我學C練習題四
第6章 說文解字拆分C程序-程序結(jié)構(gòu)Ⅲ
6.1 跟我學C例題6-1-應(yīng)用函數(shù)
6.2 變量的存儲方式-變量三代表
6.3 初識函數(shù)
6.3.1 函數(shù)概念
6.3.2 函數(shù)定義
6.4 參數(shù)傳遞與函數(shù)返回值
6.4.1 跟我學C例題6-2-照貓畫虎學函數(shù)
6.4.2 函數(shù)返回單個變量-return語句
6.5 函數(shù)返回多個變量-變量地址
6.5.1 跟我學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 變量存儲類型一覽
6.7 文章大綱化-程序函數(shù)化
6.8 跟我學C例題6-4-無知者無畏(學C還是用C)
6.9 本章要點
6.10 跟我學C練習題五
第7章 說文解字拆分C程序-變量的內(nèi)涵Ⅰ
7.1 再說變量-常識
7.1.1 常量與變量
7.1.2 類型自動轉(zhuǎn)換
7.1.3 類型強制轉(zhuǎn)換
7.2 變量的本質(zhì)-存儲它的地址
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ù)-形參與實參
7.6.1 實參是地址
7.6.2 實參是數(shù)組
7.7 指針的概念
7.7.1 為什么指針也是變量
7.7.2 指針是一個存儲地址的變量
7.7.3 指針指向一個變量
7.7.4 指針指向數(shù)組
7.7.5 指針的數(shù)據(jù)類型
7.7.6 跟我學C例題7-1
7.8 本章要點
7.9 跟我學C練習題六
第8章 說文解字拆分C程序-變量的內(nèi)涵Ⅱ
8.1 糊涂師數(shù)糊涂——如何存儲表格
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 交換指針的值(二級指針)
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 字符串數(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 本章要點
8.10 跟我學C練習題七
8.11 跟我學C練習題八
第9章 說文解字拆分C程序-指針與函數(shù)
9.1 指針概念一覽
9.2 指針與函數(shù)
9.2.1 函數(shù)是變量
9.2.2 函數(shù)的存儲方式-函數(shù)三代表
9.2.3 指針型函數(shù)-返回的是指針
9.2.4 函數(shù)型指針-指向函數(shù)的指針
9.2.5 跟我學C例題9-1-方法與變量分離
9.2.6 類型說明符typedef-變量的Facebook
9.3 按需申請內(nèi)存空間-按需分配
9.3.1 標準C語言的動態(tài)內(nèi)存申請函數(shù)-malloc()
9.3.2 動態(tài)內(nèi)存申請的存儲空間生存期
9.3.3 釋放內(nèi)存空間函數(shù)free()
9.3.4 動態(tài)內(nèi)存申請-結(jié)構(gòu)變量的長度
9.4 魅力指針-鏈表
9.4.1 指針與數(shù)據(jù)結(jié)構(gòu)
9.4.2 美麗的鏈-指針實戰(zhàn)
*9.5 指針與引用
9.5.1 遞歸倒序單鏈表-二級指針
9.5.2 結(jié)構(gòu)嵌套中的變量表達形式
9.5.3 引用的定義
9.5.4 引用的特色-伊人紅妝
9.5.5 遞歸倒序中的引用-引用指針
9.5.6 結(jié)構(gòu)變量訪問表達式
9.6 本章要點
9.7 跟我學C練習題九
第10章 算法初識-時間的概念
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 本章要點
10.5 跟我學C練習題十
第11章 數(shù)據(jù)收藏-跟我學文件
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)部的當前操作位置偏移
11.2.3 文件操作表
11.3 建立文件的步驟
11.3.1 文件打開函數(shù)fopen()
11.3.2 跟我學C例題11-1-建立一個文件
11.3.3 跟我學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 保存鏈表-動態(tài)數(shù)據(jù)文件的存取
11.6 本章要點
11.7 跟我學C練習題十一
附錄
附錄A 運算符的優(yōu)先級
附錄A.1 優(yōu)先級規(guī)則
附錄A.2 作者的心聲
附錄B 制作頭文件的方法
附錄B.1 頭文件的宏格式
附錄B.2 在Visual Studio 2010平臺上建立頭文件
附錄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 編程進階