C語(yǔ)言項(xiàng)目開(kāi)發(fā)教程PPT 第1章.ppt_第1頁(yè)
C語(yǔ)言項(xiàng)目開(kāi)發(fā)教程PPT 第1章.ppt_第2頁(yè)
C語(yǔ)言項(xiàng)目開(kāi)發(fā)教程PPT 第1章.ppt_第3頁(yè)
C語(yǔ)言項(xiàng)目開(kāi)發(fā)教程PPT 第1章.ppt_第4頁(yè)
C語(yǔ)言項(xiàng)目開(kāi)發(fā)教程PPT 第1章.ppt_第5頁(yè)
已閱讀5頁(yè),還剩61頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第一章 初步認(rèn)識(shí)C語(yǔ)言 C語(yǔ)言是最通用和流行的計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言之一 在操作系統(tǒng)和系統(tǒng)實(shí)用程序以及需要對(duì)硬件進(jìn)行操作的環(huán)境中 C語(yǔ)言明顯優(yōu)于其他高級(jí)語(yǔ)言 很多大型應(yīng)用軟件都是用C語(yǔ)言編寫(xiě)的 C語(yǔ)言是1972年由美國(guó)的DennisRitchie設(shè)計(jì)發(fā)明的 并首次在UNIX操作系統(tǒng)的DECPDP 11計(jì)算機(jī)上使用 它由早期的編程語(yǔ)言BCPL BasicCombindProgrammingLanguage 發(fā)展演變而來(lái) C語(yǔ)言從誕生到現(xiàn)在已有40多年的歷史 仍以其緊湊的代碼 靈活的表達(dá)方式 高效的運(yùn)行效率 強(qiáng)大的功能 以及可直接操作計(jì)算機(jī)硬件等特點(diǎn) 深受廣大開(kāi)發(fā)人員和編程愛(ài)好者的喜愛(ài) 在使用C語(yǔ)言開(kāi)發(fā)具體項(xiàng)目之前 需要先了解一些關(guān)于C語(yǔ)言以及C語(yǔ)言程序的相關(guān)知識(shí) 通過(guò)對(duì)本章的學(xué)習(xí) 能夠?qū)語(yǔ)言的產(chǎn)生和發(fā)展 C語(yǔ)言的特點(diǎn) C語(yǔ)言的編程風(fēng)格等有一定的認(rèn)識(shí) 通過(guò)每一個(gè)任務(wù)的實(shí)現(xiàn) 了解C語(yǔ)言的運(yùn)行環(huán)境和C語(yǔ)言程序的編寫(xiě)和執(zhí)行過(guò)程 掌握用C語(yǔ)言解決問(wèn)題的過(guò)程 任務(wù)1 1學(xué)生信息管理系統(tǒng)之菜單設(shè)計(jì) 任務(wù)目標(biāo)掌握C語(yǔ)言的基本知識(shí) 包括C語(yǔ)言的發(fā)展歷史 C語(yǔ)言的基本特點(diǎn)和C語(yǔ)言的結(jié)構(gòu)特點(diǎn)等 比較C語(yǔ)言和其他語(yǔ)句之間的區(qū)別 熟悉C語(yǔ)言的開(kāi)發(fā)集成環(huán)境 學(xué)會(huì)初步創(chuàng)建 編寫(xiě) 編譯和執(zhí)行一個(gè)C語(yǔ)言程序 掌握C語(yǔ)言的輸入和輸出函數(shù)的用法 實(shí)現(xiàn)學(xué)生管理系統(tǒng)菜單設(shè)計(jì) 1 1 1C語(yǔ)言基本知識(shí) 1 C語(yǔ)言發(fā)展歷史C語(yǔ)言的發(fā)展頗為有趣 它的原型ALGOL60語(yǔ)言出現(xiàn)于1960年 ALGOL60是一種面向問(wèn)題的高級(jí)語(yǔ)言 它離硬件比較遠(yuǎn) 不適宜編寫(xiě)系統(tǒng)程序 1963年 劍橋大學(xué)將ALGOL60語(yǔ)言發(fā)展成為CPL CombinedProgrammingLanguage 語(yǔ)言 CPL語(yǔ)言更接近硬件 但規(guī)模比較大 難以實(shí)現(xiàn) 1967年 劍橋大學(xué)的MatinRichards對(duì)CPL語(yǔ)言進(jìn)行了簡(jiǎn)化 于是產(chǎn)生了BCPL語(yǔ)言 1970年 美國(guó)貝爾實(shí)驗(yàn)室的KenThompson將BCPL進(jìn)行了修改 并為它起了一個(gè)有趣的名字 B語(yǔ)言 意思是將BCPL語(yǔ)言煮干 提煉出它的精華 并且他用B語(yǔ)言寫(xiě)了第一個(gè)UNIX操作系統(tǒng) 而在1973年 B語(yǔ)言也給人 煮 了一下 美國(guó)貝爾實(shí)驗(yàn)室的D M RITCHIE在B語(yǔ)言的基礎(chǔ)上最終設(shè)計(jì)出了一種新的語(yǔ)言 他取了BCPL的第二個(gè)字母作為這種語(yǔ)言的名字 這就是C語(yǔ)言 為了使UNIX操作系統(tǒng)推廣 1977年DennisM Ritchie發(fā)表了不依賴于具體機(jī)器系統(tǒng)的C語(yǔ)言編譯文本 可移植的C語(yǔ)言編譯程序 1978年BrianW Kernighian和DennisM Ritchie出版了名著 TheCProgrammingLanguage 對(duì)C語(yǔ)言的流行起到了很大的推動(dòng)作用 1988年 隨著微型計(jì)算機(jī)的日益普及 出現(xiàn)了許多C語(yǔ)言版本 由于沒(méi)有統(tǒng)一的標(biāo)準(zhǔn) 使得這些C語(yǔ)言之間出現(xiàn)了一些不一致的地方 為了改變這種情況 美國(guó)國(guó)家標(biāo)準(zhǔn)研究所 ANSI 為C語(yǔ)言制定了一套ANSI標(biāo)準(zhǔn) C語(yǔ)言發(fā)展迅速 而且成為最受歡迎的語(yǔ)言之一 主要因?yàn)樗哂袕?qiáng)大的功能 許多著名的系統(tǒng)軟件 如DBASE PLUS DBASE 都是由C語(yǔ)言編寫(xiě)的 用C語(yǔ)言加上一些匯編語(yǔ)言子程序 就更能顯示C語(yǔ)言的優(yōu)勢(shì)了 如PC DOS WORDSTAR等就是用這種方法編寫(xiě)的 2 C語(yǔ)言的特點(diǎn) C語(yǔ)言既有高級(jí)語(yǔ)言的特點(diǎn) 又具有匯編語(yǔ)言的特點(diǎn) 它可以作為工作系統(tǒng)設(shè)計(jì)語(yǔ)言 編寫(xiě)系統(tǒng)應(yīng)用程序 也可以作為應(yīng)用程序設(shè)計(jì)語(yǔ)言 編寫(xiě)不依賴計(jì)算機(jī)硬件的應(yīng)用程序 它的應(yīng)用范圍廣泛 具備很強(qiáng)的數(shù)據(jù)處理能力 不僅僅是在軟件開(kāi)發(fā)上 就連各類(lèi)科研都需要用到C語(yǔ)言 它適于編寫(xiě)系統(tǒng)軟件 三維 二維圖形和動(dòng)畫(huà) 具體應(yīng)用比如單片機(jī)以及嵌入式系統(tǒng)開(kāi)發(fā) 如今 越來(lái)越多的人在學(xué)習(xí)C語(yǔ)言 使用C語(yǔ)言 用C語(yǔ)言開(kāi)發(fā)各個(gè)領(lǐng)域中的應(yīng)用軟件 C語(yǔ)言生命力之所以強(qiáng) 是因?yàn)槠渚哂胁煌谄渌Z(yǔ)言的特點(diǎn) 其主要特點(diǎn)如下 1 簡(jiǎn)潔緊湊 靈活方便 C語(yǔ)言一共只有32個(gè)關(guān)鍵字 9種控制語(yǔ)句 程序書(shū)寫(xiě)自由 主要用小寫(xiě)字母表示 它把高級(jí)語(yǔ)言的基本結(jié)構(gòu)和語(yǔ)句與低級(jí)語(yǔ)言的實(shí)用性結(jié)合起來(lái) C語(yǔ)言可以像匯編語(yǔ)言一樣對(duì)位 字節(jié)和地址進(jìn)行操作 而這三者是計(jì)算機(jī)最基本的工作單元 2 運(yùn)算符豐富 C語(yǔ)言的運(yùn)算符包含的范圍很廣泛 共有34個(gè)運(yùn)算符 C語(yǔ)言把括號(hào) 賦值 強(qiáng)制類(lèi)型轉(zhuǎn)換等都作為運(yùn)算符處理 從而使C的運(yùn)算類(lèi)型極其豐富 表達(dá)式類(lèi)型多樣化 靈活使用各種運(yùn)算符可以實(shí)現(xiàn)在其他高級(jí)語(yǔ)言中難以實(shí)現(xiàn)的運(yùn)算 3 數(shù)據(jù)結(jié)構(gòu)豐富 C語(yǔ)言的數(shù)據(jù)類(lèi)型有 整型 實(shí)型 字符型 數(shù)組類(lèi)型 指針類(lèi)型 結(jié)構(gòu)體類(lèi)型 共用體類(lèi)型等 能用來(lái)實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)類(lèi)型的運(yùn)算 并引入了指針概念 使程序效率更高 另外 C語(yǔ)言具有強(qiáng)大的圖形功能 支持多種顯示器和驅(qū)動(dòng)器 且計(jì)算功能 邏輯判斷功能強(qiáng)大 4 C語(yǔ)言是結(jié)構(gòu)式語(yǔ)言 結(jié)構(gòu)式語(yǔ)言的顯著特點(diǎn)是代碼及數(shù)據(jù)的分隔化 即程序的各個(gè)部分除了必要的信息交流外彼此獨(dú)立 這種結(jié)構(gòu)化方式可使程序?qū)哟吻逦?便于使用 維護(hù)以及調(diào)試 C語(yǔ)言是以函數(shù)形式提供給用戶的 這些函數(shù)可方便地調(diào)用 并具有多種循環(huán) 條件語(yǔ)句控制程序流向 從而使程序完全結(jié)構(gòu)化 5 語(yǔ)法限制不太嚴(yán)格 程序設(shè)計(jì)自由度大 一般的高級(jí)語(yǔ)言語(yǔ)法檢查比較嚴(yán) 能夠檢查出幾乎所有的語(yǔ)法錯(cuò)誤 而C語(yǔ)言允許程序編寫(xiě)者有較大的自由度 6 允許直接訪問(wèn)物理地址 可以直接對(duì)硬件進(jìn)行操作 C語(yǔ)言允許直接訪問(wèn)物理地址 可以直接對(duì)硬件進(jìn)行操作 因此既具有高級(jí)語(yǔ)言的功能 又具有低級(jí)語(yǔ)言的許多功能 能夠像匯編語(yǔ)言一樣對(duì)位 字節(jié)和地址進(jìn)行操作 而這三者是計(jì)算機(jī)最基本的工作單元 可以用來(lái)寫(xiě)系統(tǒng)軟件 7 C語(yǔ)言程序生成代碼質(zhì)量高 程序執(zhí)行效率高 一般只比匯編程序生成的目標(biāo)代碼效率低10 20 8 C語(yǔ)言適用范圍大 可移植性好 C語(yǔ)言有一個(gè)突出的優(yōu)點(diǎn)就是適合于多種操作系統(tǒng) 如DOS UNIX 也適用于多種機(jī)型 3 C語(yǔ)言的結(jié)構(gòu)特點(diǎn) 先看下面的案例 通過(guò)案例來(lái)了解C程序的結(jié)構(gòu)特點(diǎn) 案例1 1 求兩個(gè)數(shù)之和 源程序如下 include 將stdio h文件包含在本程序中 voidmain 主函數(shù) 函數(shù)體開(kāi)始inta b c 定義三個(gè)int類(lèi)型的變量a b ca 3 b 2 變量賦值c a b 將變量a和變量b的和賦給變量cprintf d n c 調(diào)用標(biāo)準(zhǔn)輸出函數(shù) 按十進(jìn)制整數(shù)形式輸出變量c 函數(shù)體結(jié)束 該程序?qū)崿F(xiàn)的功能是求出整數(shù)數(shù)據(jù)a和b的和并輸出 其中a的值為3 b的值為2 將a和b的和賦值給c 然后輸出變量c的值 程序運(yùn)行結(jié)果如下 5Pressanykeytocontinue 代碼中的 include 為文件包含命令 其意義為將或 內(nèi)指定的文件包含到本程序中 成為本程序的一部分 被包含的文件通常是由系統(tǒng)提供的 其擴(kuò)展名為 h 因此也稱為頭文件或首部文件 C語(yǔ)言的頭文件中包括了各個(gè)標(biāo)準(zhǔn)庫(kù)函數(shù)的函數(shù)原型 并有對(duì)應(yīng)的函數(shù)實(shí)現(xiàn) 程序中調(diào)用一個(gè)庫(kù)函數(shù)時(shí) 都必須包含該函數(shù)原型所在的頭文件 在本案例中 使用了一個(gè)庫(kù)函數(shù) prtinf 即標(biāo)準(zhǔn)輸出函數(shù) 其所在的頭文件名為stdio h文件 因此在程序的主函數(shù)前用include命令包含了stdio h文件 因?yàn)樵诔绦蛑惺褂昧藀rintf 函數(shù) 該函數(shù)為stdio h中定義的標(biāo)準(zhǔn)輸出函數(shù) 為了使用printf 函數(shù) 需要將包含該函數(shù)相關(guān)信息的頭文件stdio h包含到本文件中 inta b c 的作用為聲明三個(gè)int 即整數(shù)類(lèi)型的變量 變量名分別為a b c 這三個(gè)變量的取值只能為整數(shù) 和 均用來(lái)表示注釋 用來(lái)作單行注釋 其后面本行內(nèi)的內(nèi)容為注釋信息 用作多行注釋 和 之間的內(nèi)容均為注釋信息 可有多行 注釋是給閱讀程序的人看的 用來(lái)輔助理解程序 在編譯和運(yùn)行階段不起作用 注釋信息可以添加在任何位置 c a b 用來(lái)實(shí)現(xiàn)加法運(yùn)算 表示將a和b的值相加 再賦值給b printf d n c 用來(lái)輸出 d 表示輸出的信息為十進(jìn)制整數(shù) n 為換行符 在信息輸出后 屏幕上閃爍的光標(biāo)將會(huì)顯示在該輸出的下一行 mian函數(shù)是主函數(shù)的函數(shù)名 表示這是一個(gè)主函數(shù) 在主函數(shù)main 中可以調(diào)用的函數(shù)包括標(biāo)準(zhǔn)庫(kù)和自定義函數(shù) 由上述例子可以看出 C語(yǔ)言結(jié)構(gòu)和書(shū)寫(xiě)特點(diǎn)如下 C語(yǔ)言是由函數(shù)組成的 一個(gè)函數(shù)有一些語(yǔ)句組成 共同實(shí)現(xiàn)某一功能 在以后的案例中我們會(huì)看到每一個(gè)函數(shù)均可被其他函數(shù)調(diào)用 也可調(diào)用其他函數(shù) main函數(shù)除外 main函數(shù)不能被其他函數(shù)調(diào)用 C程序可以有若干個(gè)函數(shù)組成 但是其中必須有一個(gè)且只能有一個(gè)是main 程序的執(zhí)行必須從主函數(shù)main 開(kāi)始 在主函數(shù)main 中結(jié)束 C語(yǔ)言程序書(shū)寫(xiě)自由 一行內(nèi)可以寫(xiě)一條或多條語(yǔ)句 一條語(yǔ)句也可以寫(xiě)在多行 用 括起來(lái)的部分 通常表示程序的某一種層次結(jié)構(gòu) 一般情況下 左右花括號(hào)各占一行 并上下對(duì)齊 便于檢查花括號(hào)的成對(duì)性 C語(yǔ)言程序是區(qū)分大小寫(xiě)的 如輸入Printf則程序會(huì)報(bào)錯(cuò) 程序的書(shū)寫(xiě)根據(jù)從屬關(guān)系采用縮進(jìn)的格式 可使程序的層次結(jié)構(gòu)更加清晰 從而提高程序的可讀性 同一層次要左右對(duì)齊 第一層次的語(yǔ)句或說(shuō)明要比高一層次的語(yǔ)句縮進(jìn)若干個(gè)字符 這樣程序?qū)哟谓Y(jié)構(gòu)更加清晰 C語(yǔ)言中每一條語(yǔ)句和數(shù)據(jù)定義都必須以 結(jié)束 C語(yǔ)言用 或 來(lái)表示注釋 編碼過(guò)程中配合良好的注釋 可增加程序的可讀性和可維護(hù)性 對(duì)于C程序的書(shū)寫(xiě)格式 讀者可從后面的程序中逐漸體會(huì) 編碼時(shí)遵循以上規(guī)則 以形成良好的編程風(fēng)格 1 1 2C語(yǔ)言與其他語(yǔ)言 1 C到C 計(jì)算機(jī)誕生初期 人們要使用計(jì)算機(jī)必須用機(jī)器語(yǔ)言或匯編語(yǔ)言編寫(xiě)程序 世界上第一種計(jì)算機(jī)高級(jí)語(yǔ)言誕生于1954年 它是FORTRAN語(yǔ)言 先后出現(xiàn)了多種計(jì)算機(jī)高級(jí)語(yǔ)言 其中使用最廣泛 影響最大的當(dāng)推Basic語(yǔ)言和C語(yǔ)言 C語(yǔ)言最初不是為初學(xué)者設(shè)計(jì)的 而是為計(jì)算機(jī)專(zhuān)業(yè)人員設(shè)計(jì)的 大多數(shù)系統(tǒng)軟件和許多應(yīng)用軟件都是用C語(yǔ)言編寫(xiě)的 但是隨著軟件規(guī)模的增大 用C語(yǔ)言編寫(xiě)程序漸漸顯得有些吃力了 C 是由AT TBell 貝爾 實(shí)驗(yàn)室的BjarneStroustrup博士及其同事于20世紀(jì)80年代初在C語(yǔ)言的基礎(chǔ)上開(kāi)發(fā)成功的 C 保留了C語(yǔ)言原有的所有優(yōu)點(diǎn) 增加了面向?qū)ο蟮臋C(jī)制 C 是由C發(fā)展而來(lái)的 與C兼容 用C語(yǔ)言寫(xiě)的程序基本上可以不加修改地用于C 從C 的名字可以看出它是C的超越和集中 C 既可用于面向過(guò)程的結(jié)構(gòu)化程序設(shè)計(jì) 又可用于面向?qū)ο蟮某绦蛟O(shè)計(jì) 是一種功能強(qiáng)大的混合型程序設(shè)計(jì)語(yǔ)言 C是一個(gè)結(jié)構(gòu)化語(yǔ)言 它的重點(diǎn)在于算法和數(shù)據(jù)結(jié)構(gòu) C程序的設(shè)計(jì)首要考慮的是如何通過(guò)一個(gè)過(guò)程 對(duì)輸入 或環(huán)境條件 進(jìn)行運(yùn)算處理得到輸出 或?qū)崿F(xiàn)過(guò)程 事務(wù) 控制 而對(duì)于C 首要考慮的是如何構(gòu)造一個(gè)對(duì)象模型 讓這個(gè)模型能夠契合與之對(duì)應(yīng)的問(wèn)題域 這樣就可以通過(guò)獲取對(duì)象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過(guò)程 事務(wù) 控制 所以C與C 的最大區(qū)別在于它們的用于解決問(wèn)題的思想方法不一樣 之所以說(shuō)C 比C更先進(jìn) 是因?yàn)?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C 之中 而就語(yǔ)言本身而言 在C中更多的是算法的概念 那么是不是C就不重要了 錯(cuò) 算法是程序設(shè)計(jì)的基礎(chǔ) 好的設(shè)計(jì)如果沒(méi)有好的算法 一樣不行 而且 C加上好的設(shè)計(jì) 也能寫(xiě)出非常好的東西 語(yǔ)言本身而言 C是C 的子集 那么這是什么樣的一個(gè)子集 從上文可以看出 C實(shí)現(xiàn)了C 中過(guò)程化控制及其他相關(guān)功能 而在C 中的C 相對(duì)于原來(lái)的C還有所加強(qiáng) 引入了重載 內(nèi)聯(lián)函數(shù) 異常處理等內(nèi)容 C 更是拓展了面向?qū)ο笤O(shè)計(jì)的內(nèi)容 如類(lèi) 繼承 虛函數(shù) 模板和包容器類(lèi)等 所以相對(duì)于C C 包含了更豐富的 設(shè)計(jì) 的概念 但C是C 的一個(gè)子集 也具有強(qiáng)大的功能 同樣值得學(xué)習(xí) 2 C語(yǔ)言到Java Java是一種可以撰寫(xiě)跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言 是由SunMicrosystems公司于1995年5月推出的Java程序設(shè)計(jì)語(yǔ)言和Java平臺(tái) 即JavaSE JavaEE JavaME 的總稱 Java技術(shù)具有卓越的通用性 高效性 平臺(tái)移植性和安全性 廣泛應(yīng)用于個(gè)人PC 數(shù)據(jù)中心 游戲控制臺(tái) 科學(xué)超級(jí)計(jì)算機(jī) 移動(dòng)電話和互聯(lián)網(wǎng) 同時(shí)擁有全球最大的開(kāi)發(fā)者專(zhuān)業(yè)社群 在全球云計(jì)算和移動(dòng)互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下 Java更具備了顯著優(yōu)勢(shì)和廣闊前景 實(shí)際上 Java確實(shí)是從C語(yǔ)言和C 語(yǔ)言繼承了許多成份 甚至可以將Java看成是類(lèi)C語(yǔ)言發(fā)展和衍生的產(chǎn)物 比如Java語(yǔ)言的變量聲明 操作符形式 參數(shù)傳遞 流程控制等方面和C語(yǔ)言 C 語(yǔ)言完全相同 Java與C的本質(zhì)區(qū)別是Java面向?qū)ο缶幊?C是面向過(guò)程編程 這就使得Java具有重用的特性 在開(kāi)發(fā)速度上比之C更快 但是在運(yùn)行速度上卻是C更快 因?yàn)镃屬于底層語(yǔ)言 它比Java更加親近機(jī)器 所以在許多系統(tǒng)開(kāi)發(fā)上一般是用C語(yǔ)言 比如Windows系統(tǒng) Linux系統(tǒng) 都是用C語(yǔ)言開(kāi)發(fā)的 Java中對(duì)內(nèi)存的分配是動(dòng)態(tài)的 它采用運(yùn)算符new為每個(gè)對(duì)象分配內(nèi)存空間 而且 實(shí)際內(nèi)存還會(huì)隨程序運(yùn)行情況而改變 程序運(yùn)行中 Java系統(tǒng)自動(dòng)對(duì)內(nèi)存進(jìn)行掃描 對(duì)長(zhǎng)期不用的空間作為 垃圾 進(jìn)行收集 使得系統(tǒng)資源得到更充分地利用 按照這種機(jī)制 程序員不必關(guān)注內(nèi)存管理問(wèn)題 這使Java程序的編寫(xiě)變得簡(jiǎn)單明了 并且避免了由于內(nèi)存管理方面的差錯(cuò)而導(dǎo)致系統(tǒng)出問(wèn)題 而C語(yǔ)言通過(guò)malloc 和free 這兩個(gè)庫(kù)函數(shù)來(lái)分別實(shí)現(xiàn)分配內(nèi)存和釋放內(nèi)存空間的 C 語(yǔ)言中則通過(guò)運(yùn)算符operatornew和operatordelete來(lái)分配和釋放內(nèi)存 在C和C 中 程序員必須非常仔細(xì)地處理內(nèi)存的使用問(wèn)題 一方面 如果對(duì)已釋放的內(nèi)存再作釋放或者對(duì)未曾分配的內(nèi)存作釋放 都會(huì)造成不可預(yù)料的后果 而另一方面 如果對(duì)長(zhǎng)期不用的或不再使用的內(nèi)存不釋放 則會(huì)浪費(fèi)系統(tǒng)資源 甚至因此造成資源枯竭 目前 Java主要用在Web開(kāi)發(fā) 手機(jī)游戲及一些平臺(tái)游戲的開(kāi)發(fā) 因?yàn)樗哂泻芎玫目缙脚_(tái)性 現(xiàn)在Java與Linux結(jié)合得非常好 在手機(jī)等各種電子產(chǎn)品上應(yīng)用非常廣泛 C語(yǔ)言現(xiàn)在主要用與系統(tǒng)開(kāi)發(fā) 桌面應(yīng)用軟件的開(kāi)發(fā) 更多的是用在游戲領(lǐng)域 當(dāng)然 只要你愿意 也可以開(kāi)發(fā)Web程序 但是在開(kāi)發(fā)難度上會(huì)增加不少 這些足以證明C語(yǔ)言是比Java更強(qiáng)大的語(yǔ)言 但是也比Java更加難以掌握 里面的指針是所有程序員都為之頭痛的 而繼承了C的所有優(yōu)點(diǎn)的Java語(yǔ)言則完全沒(méi)有這個(gè)問(wèn)題 可以說(shuō)Java是C語(yǔ)言的進(jìn)化版本之一 為什么是之一呢 因?yàn)檫€有C 其實(shí)Java就是繼承了C C 的優(yōu)點(diǎn)而產(chǎn)生的高級(jí)語(yǔ)言 它可以說(shuō)具有兩者的全部?jī)?yōu)點(diǎn) 并剔除了其中不好的地方 但即使如此也不能否認(rèn)C C 仍然具有強(qiáng)大的優(yōu)勢(shì) 尤其是在系統(tǒng)程序的開(kāi)發(fā)上 這是Java無(wú)法比擬的 所以Java能做的C也可以做 而C能做的Java也可以做 只是兩者的側(cè)重點(diǎn)不一樣 3 C語(yǔ)言的缺點(diǎn) C語(yǔ)言的缺點(diǎn)主要是表現(xiàn)在數(shù)據(jù)的封裝性上 這一點(diǎn)使得C在數(shù)據(jù)的安全性上做的有很大缺陷 這也是C和C 的一大區(qū)別 C語(yǔ)言的語(yǔ)法限制不太嚴(yán)格 對(duì)變量的類(lèi)型約束不嚴(yán)格 影響程序的安全性 對(duì)數(shù)組下標(biāo)越界不做檢查等 從應(yīng)用的角度 C語(yǔ)言比其他高級(jí)語(yǔ)言較難掌握 指針是C語(yǔ)言的一大特色 可以說(shuō)C語(yǔ)言優(yōu)于其他高級(jí)語(yǔ)言的一個(gè)重要原因就是它有指針操作 可以直接進(jìn)行靠近硬件的操作 但是C的指針操作也給它帶來(lái)了很多不安全的因素 目前 C 在這方面做了很好的改進(jìn) 在保留了指針操作的同時(shí)又增強(qiáng)了安全性 Java取消了指針操作 提高了安全性 1 1 3了解VisualC 6 0集成開(kāi)發(fā)環(huán)境 集成開(kāi)發(fā)環(huán)境 IntegratedDevelopingEnvironment IDE 是一個(gè)綜合性的工具軟件 它把程序設(shè)計(jì)全過(guò)程所需要的各項(xiàng)功能集合在一起 為程序設(shè)計(jì)人員提供完整的服務(wù) 但集成開(kāi)發(fā)環(huán)境并不是把各種功能簡(jiǎn)單地拼接在一起 而是把它們有機(jī)地結(jié)合起來(lái) 統(tǒng)一在一個(gè)圖形化操作界面下 為程序設(shè)計(jì)人員提供盡可能高效 便利的服務(wù) C語(yǔ)言的開(kāi)發(fā)環(huán)境有很多 最流行的主要是TurboC系列和VisualC 6 0開(kāi)發(fā)環(huán)境 TurboC系列對(duì)幫助理解內(nèi)存溢出等概念比較方便 VisualC 6 0雖然常用來(lái)編寫(xiě)C 源程序 但它同時(shí)兼容C語(yǔ)言程序的開(kāi)發(fā) 并且其編輯器除了具備一般文本編輯器的基本功能以外 還能根據(jù)C語(yǔ)言的語(yǔ)法規(guī)則 自動(dòng)識(shí)別程序文本中的不同成分 并且用不同的顏色加以區(qū)別 為使用者提供很好的提示作用 因此本書(shū)選擇VC 6 0作為C語(yǔ)言的開(kāi)發(fā)工具 1 VisualC 6 0開(kāi)發(fā)環(huán)境 VisualC 6 0 簡(jiǎn)稱VC或者VC6 0 是微軟推出的一款C 編譯器 將 高級(jí)語(yǔ)言 翻譯為 機(jī)器語(yǔ)言 低級(jí)語(yǔ)言 的程序 VisualC 是一個(gè)功能強(qiáng)大的可視化軟件開(kāi)發(fā)工具 自1993年Microsoft公司推出VisualC 1 0后 隨著其新版本的不斷問(wèn)世 VisualC 已成為專(zhuān)業(yè)程序員進(jìn)行軟件開(kāi)發(fā)的首選工具 VC6 0啟動(dòng)后 即進(jìn)入如圖1 1所示的主窗口程序 在VC6 0的主界面中 最頂部是菜單欄和工具欄 主菜單共有9個(gè)菜單項(xiàng) 主界面的左側(cè)是項(xiàng)目工作區(qū)窗口 用來(lái)顯示工作區(qū)的信息 右側(cè)是程序編輯窗口 用來(lái)輸入和編輯源代碼 下面是輸出窗口 用來(lái)顯示進(jìn)行構(gòu)建或調(diào)試等工作時(shí)的狀態(tài)和數(shù)據(jù)信息 最底部是狀態(tài)欄 各個(gè)窗口可以任意顯示或隱藏 2 創(chuàng)建C項(xiàng)目 建立一個(gè)項(xiàng)目可以通過(guò)VC6 0的向?qū)瓿?單擊主菜單中 文件 新建 命令 彈出如圖1 2所示的對(duì)話框 在 工程 選項(xiàng)中列出了16個(gè)可以建立的項(xiàng)目選項(xiàng) 編寫(xiě)一般C語(yǔ)言程序時(shí)選擇 Win32ConsoleApplication 選項(xiàng) 然后在右上側(cè)的 工程名稱 文本框中輸入項(xiàng)目名稱 位置 中選擇項(xiàng)目要保存的路徑 單擊下方的 確定 按鈕即可進(jìn)入下一個(gè)界面 工程名稱可以由字母和數(shù)字組成 但是第一個(gè)字符必須是字母 下畫(huà)線也被認(rèn)為是字母 在如圖1 3所示界面中 顯示的是可以創(chuàng)建的應(yīng)用程序類(lèi)型 VC6 0中可以創(chuàng)建的程序類(lèi)型共有4種 在這里只需要選擇默認(rèn)的 一個(gè)空工程 選項(xiàng) 單擊 完成 按鈕 VC6 0即可完成項(xiàng)目創(chuàng)建 項(xiàng)目創(chuàng)建完成后 VC6 0會(huì)自動(dòng)顯示創(chuàng)建的項(xiàng)目信息 如圖1 4所示 圖1 3控制臺(tái)程序類(lèi)型對(duì)話框圖1 4項(xiàng)目創(chuàng)建完成對(duì)話框 3 創(chuàng)建和編輯C文件 單擊 文件 新建 菜單命令打開(kāi)文件創(chuàng)建對(duì)話框 向所創(chuàng)建的項(xiàng)目中添加源文件 在 文件 選項(xiàng)卡中 列出了可以創(chuàng)建的文件類(lèi)型 如圖1 5所示 圖1 5創(chuàng)建的項(xiàng)目文件和本課程有關(guān)的文件類(lèi)型為 C C HeaderFile 和 C SourceFile 分別用來(lái)創(chuàng)建頭文件和源文件 選擇 C SourceFile 選項(xiàng) 勾選 添加到工程 復(fù)選框 這時(shí)項(xiàng)目名稱文本框中會(huì)默認(rèn)顯示當(dāng)前項(xiàng)目名稱 在 文件名 文本框中輸入源文件名 位置 中會(huì)默認(rèn)顯示項(xiàng)目所在位置 單擊 確定 按鈕完成新建文件 4 編譯代碼 在編輯器中輸入代碼并保存 然后可以通過(guò)選擇主菜單中的 組建 編輯 命令進(jìn)行編譯和鏈接 也可以通過(guò)工具欄中的工具快速完成構(gòu)建可執(zhí)行文件的過(guò)程 編輯快速工具欄如圖1 6所示 圖1 6編譯快速工具欄快速工具欄中第1個(gè)按鈕為編譯按鈕 通過(guò)編譯可以找出工程中的錯(cuò)誤信息 提示編程人員進(jìn)行修改 第2個(gè)按鈕為鏈接按鈕 編譯成功后可進(jìn)行鏈接 在編譯的過(guò)程中 會(huì)在主界面下方的信息輸出窗口中顯示構(gòu)建過(guò)程信息 如編譯和鏈接過(guò)程的步驟 是否有錯(cuò)等信息 如圖1 7所示 5 運(yùn)行程序 在正確的編譯和鏈接以后 可通過(guò) 組建 執(zhí)行 命令執(zhí)行程序 也可以在圖1 7所示的快速工具欄中單擊 執(zhí)行 按鈕執(zhí)行程序 快速工具欄中第4個(gè)按鈕為 執(zhí)行 按鈕 在編譯鏈接后可單擊該按鈕執(zhí)行程序 也可直接單擊 執(zhí)行 按鈕 此時(shí)會(huì)自動(dòng)進(jìn)行編譯和鏈接操作 程序每次修改之后都必須重新進(jìn)行編譯鏈接才能執(zhí)行 圖1 7編譯和鏈接過(guò)程若程序執(zhí)行成功 屏幕上將會(huì)輸出執(zhí)行結(jié)果 并提示信息 Pressanykeytocontinue 此時(shí)按下任意鍵 系統(tǒng)都會(huì)返回VC6 0主窗口 可執(zhí)行文件存放在創(chuàng)建工程時(shí)指定的子目錄debug中 圖1 7程序執(zhí)行結(jié)果如圖1 8所示 圖1 8程序運(yùn)行結(jié)果若程序執(zhí)行有誤 用戶需要返回編輯狀態(tài)修改源程序并重新進(jìn)行編譯 鏈接和運(yùn)行 1 1 4數(shù)據(jù)的輸入和輸出 沒(méi)有輸出的程序的數(shù)據(jù)處理和計(jì)算結(jié)果無(wú)法展示給用戶 是沒(méi)有價(jià)值的 而如果沒(méi)有輸入操作 則無(wú)法對(duì)目標(biāo)數(shù)據(jù)進(jìn)行處理 或者只能將數(shù)據(jù)寫(xiě)在程序中 無(wú)法對(duì)不同的數(shù)據(jù)進(jìn)行處理 每次更換數(shù)據(jù)都需要更改程序和重新編譯 所以 數(shù)據(jù)的輸入和輸出是一項(xiàng)很重要的操作 C語(yǔ)言本身沒(méi)有提供輸入和輸出語(yǔ)句 輸入和輸出操作是由scanf和printf等庫(kù)函數(shù)來(lái)完成的 程序在調(diào)用這些函數(shù)時(shí) 必須在源文件的開(kāi)始處加上頭文件的包含命令 其格式如下 include或 include 庫(kù)函數(shù)頭文件名 C語(yǔ)言提供了多種輸入和輸出格式 使其操作靈活 多樣 且功能強(qiáng)大 1 字符輸出函數(shù)putchar 在C語(yǔ)言中 char為字符類(lèi)型 一個(gè)char類(lèi)型的數(shù)據(jù)表示一個(gè)單一的字符 字符輸出函數(shù)putchar 的功能為將一個(gè)字符輸出到屏幕上 其一般格式為 putchar 要輸出的字符 其中參數(shù)ch為要輸出的字符 執(zhí)行成功時(shí)返回輸出字符 即ch 錯(cuò)誤時(shí)將返回EOF 所在的頭文件為stdio h putchar的用法見(jiàn)案例1 2 案例1 2 putchar的用法 源程序如下 includevoidmain charc1 G c2 o c3 d c4 m c5 r putchar c1 putchar c2 putchar c2 putchar c3 putchar t t 表示空格putchar c4 putchar c2 putchar c5 putchar n putchar i putchar n putchar g putchar n n 表示換行 該程序的運(yùn)行結(jié)果如下 Goodmorning 2 標(biāo)準(zhǔn)格式輸出函數(shù)printf printf 函數(shù)的作用為按用戶指定的格式 把指定的數(shù)據(jù)輸出到計(jì)算機(jī)系統(tǒng)默認(rèn)的輸出設(shè)備 一般為終端或顯示器 上 printf的一般格式為 printf 格式控制串 輸出項(xiàng)序列 格式控制串中包含兩種信息 格式控制說(shuō)明和普通字符 格式控制說(shuō)明是由 字符開(kāi)始的 后面跟格式控制符 說(shuō)明輸出數(shù)據(jù)的類(lèi)型 形式 長(zhǎng)度 小數(shù)位等信息 其作用為按要求的格式將數(shù)據(jù)輸出 如 d f 等 普通字符為要輸出的字符 如字母 符號(hào) 空格 換行等 運(yùn)行時(shí)會(huì)在屏幕上原樣輸出 一般為提示作用 輸出項(xiàng)序列中各個(gè)輸出項(xiàng)用逗號(hào)隔開(kāi) 輸出項(xiàng)可以為變量 表達(dá)式 字符等 格式控制說(shuō)明和輸出項(xiàng)應(yīng)該在類(lèi)型 個(gè)數(shù) 順序上保持一致 且從左到右一一對(duì)應(yīng)匹配 在輸出時(shí) 每個(gè)對(duì)應(yīng)輸出項(xiàng)的值替換格式控制說(shuō)明所在的位置 顯示在屏幕上 案例1 3 輸出整型變量的值 源程序如下 includevoidmain inta 13 b 27 printf d d n a b printf a d b d n a b printf a b d n a b 程序運(yùn)行結(jié)果如下 1327a 13 b 27a b 40printf a b d n a b 中 a b 為普通字符 直接輸出 d 對(duì)應(yīng)后面 a b 被替換成 a b 的和 而 c 的值為1 3 但是因?yàn)槠漭敵龈袷揭鬄檎麛?shù) 則只輸出 c 的整數(shù)部分 即輸出為 c 1 printf函數(shù)常用的格式說(shuō)明符如表1 1所示 表1 1printf函數(shù)格式說(shuō)明符格式轉(zhuǎn)換符含義舉例結(jié)果 d以十進(jìn)制形式輸出一個(gè)整型數(shù)據(jù)intx 10 printf d x 10 o以八進(jìn)制形式輸出一個(gè)無(wú)符號(hào)整型數(shù)據(jù)intx 10 printf o x 12 x或 X以十六進(jìn)制形式輸出一個(gè)無(wú)符號(hào)整型數(shù)據(jù)intx 10 printf x x a u以十進(jìn)制形式輸出一個(gè)無(wú)符號(hào)整型數(shù)據(jù)intx 10 printf u x 10 f以十進(jìn)制形式輸出一個(gè)浮點(diǎn)型數(shù)據(jù)floatf 12 3 printf f f 12 300000 e或 E以指數(shù)形式輸出一個(gè)浮點(diǎn)型數(shù)據(jù)floatf 12 3 printf e f 1 230000e 001 c輸出一個(gè)字符型數(shù)據(jù)charc c printf c c c s輸出一個(gè)字符串chars Hello printf s s Hello 另外 在格式說(shuō)明中 可以在 和上述格式字符間插入以下幾種修飾符 用來(lái)表示數(shù)據(jù)的輸出寬度 修飾符的用法如表1 2所示 表1 2printf修飾符用法格式說(shuō)明l可加在格式符d o x u前面 如 ld 表示長(zhǎng)整型mm表示一個(gè)正整數(shù) 指定數(shù)據(jù)輸出寬度nn表示一個(gè)正整數(shù) 對(duì)于實(shí)數(shù) 表示輸出n位小數(shù) 對(duì)于字符串 表示截取的字符個(gè)數(shù) 輸出的內(nèi)容左對(duì)齊 案例1 4 修飾符的用法 源程序如下 includevoidmain inta 123 floatf 123 456 printf 8d 2d n a a printf a d a 6d a 6d n a a a printf f 8f 8 1f 2f 2e n f f f f f 程序的運(yùn)行結(jié)果如下 123 123a 123 a 123 a 123123 456001 123 456001 123 5 123 46 123e 002 該程序中 printf 8d 2d n a a 分別以8字符寬度和2字符寬度顯示整型變量a 且默認(rèn)輸出為右對(duì)齊 所以第一行輸出結(jié)果中先是5個(gè)空格 然后是a的值 而在指定的2字符寬度小于原整數(shù)的字符長(zhǎng)度時(shí) 仍完整地顯示原整數(shù)變量 6d 為以6個(gè)字符寬度顯示變量a 且采用左對(duì)齊的方式 通過(guò)比較 a 6d 和 a 6d 的輸出結(jié)果可看出左對(duì)齊和右對(duì)齊的區(qū)別 8 1f 的作用為只顯示小數(shù)點(diǎn)后一位數(shù)據(jù) 并采用四舍五入的方式截掉后面部分 所以顯示的值為123 5 按8字符寬度顯示 2e 為采用指數(shù)形式顯示數(shù)據(jù) 并且小數(shù)點(diǎn)之后取兩位有效數(shù)據(jù) 案例1 5 字符和字符串的輸出 源程序如下 includevoidmain charc1 H c2 e c3 o printf 3c c c c c n c1 c2 l l c3 printf s 9s 5 4s 3s 2s t n Hello Hello Hello Hello Hello printf Nicetomeetyou n 程序運(yùn)行結(jié)果如下 Hello hello Hello Hell Hel He Nicetomeetyou 5 4s 表示截取字符串中前4位 并以5個(gè)字符寬度顯示在屏幕上 printf Nicetomeetyou n 為printf最簡(jiǎn)單的用法 沒(méi)有用到任何格式控制說(shuō)明和變量 直接將字符串顯示在屏幕上 轉(zhuǎn)義字符是一種特殊的字符常量 轉(zhuǎn)義字符以反斜線 開(kāi)頭 后面跟一個(gè)或幾個(gè)字符 轉(zhuǎn)義字符有特殊的含義 不同于普通的字符 所以稱為轉(zhuǎn)義字符 例如 最常用的轉(zhuǎn)義字符 n 其意義為 回車(chē)換行 轉(zhuǎn)義字符主要用來(lái)表示那些不用于一般字符 而且不便于表示的控制代碼 因?yàn)?為轉(zhuǎn)義字符的標(biāo)志 所以每當(dāng) 出現(xiàn)時(shí) 編譯器將自動(dòng)把其和后面的字符連接起來(lái)讀取其含義 而編程人員想要輸出 字符時(shí)便無(wú)法完成 所以用 的形式來(lái)表示輸出 如在案例1 5中 t n 表示先輸出一個(gè)空格 然后輸出一個(gè)字符 再轉(zhuǎn)到下一行 常用的轉(zhuǎn)義字符及其含義如表1 3所示 表1 3常用的轉(zhuǎn)義符及其含義轉(zhuǎn)義符含義 t空格 跳到下一個(gè)tab位置 n換行 將但前位置移到下一行開(kāi)頭 b退格 將當(dāng)前位置移到前一列開(kāi)頭 r回車(chē) 將當(dāng)前位置移到本行開(kāi)頭 f換頁(yè) 將當(dāng)前位置移到下頁(yè)開(kāi)頭 反斜線字符 單引號(hào) 雙引號(hào) a響鈴 ddd1到3位八進(jìn)制數(shù)所代表的字符 xhh1到2位十六進(jìn)制數(shù)所代表的字符 案例1 6 打印一個(gè)金字塔 源程序如下 includevoidmain printf n printf n printf n printf n printf n printf n printf n printf n printf n printf n 該程序的輸出結(jié)果如下 通過(guò)空格和換行等控制字符顯示的位置 可以在屏幕上打印很多圖形 讀者可自己進(jìn)行嘗試 3 字符輸入函數(shù)getchar 字符輸如函數(shù)getchar 的功能為讀取屏幕上的一個(gè)字符 所在頭文件也是stdio h getchar運(yùn)行時(shí)會(huì)暫停 等待用戶的輸入 且接收用戶輸入時(shí)必須按Enter鍵結(jié)束 然后取走所輸入字符的第一個(gè)字符 字符輸入函數(shù)每執(zhí)行一次就從屏幕上讀取一個(gè)字符 可將這個(gè)字符賦值給一個(gè)變量 案例1 7 字符輸入函數(shù)的用法 源程序如下 includevoidmain charc1 c2 printf 請(qǐng)輸入第一個(gè)字符 c1 getchar printf 您輸入的第一個(gè)字符為 c n c1 printf 請(qǐng)輸入第二個(gè)字符 c2 getchar printf 您輸入的第二個(gè)字符為 putchar c2 printf n 程序運(yùn)行結(jié)果如下 請(qǐng)輸入第一個(gè)字符 a您輸入的第一個(gè)字符為a請(qǐng)輸入第二個(gè)字符 您輸入的第二個(gè)字符為 在程序中輸入字符a 然后按Enter鍵 程序的輸出如案例1 7運(yùn)行結(jié)果所示 每當(dāng)按下Enter鍵時(shí) 向鍵盤(pán)緩沖區(qū)發(fā)去一個(gè) 回車(chē) r 和一個(gè) 換行 n r 將光標(biāo)移動(dòng)到本行行首 n 將光標(biāo)移動(dòng)到下一行 這時(shí)緩沖區(qū)中有3個(gè)字符 a r n 第一個(gè)getchar函數(shù)讀取第一字符a賦值給c1 并將回車(chē)符 r 從緩沖區(qū)中去掉 但是留下了 n 于是第二個(gè)getchar將 n 賦值該給c2 要解決這個(gè)問(wèn)題 可以在兩個(gè)scanf 函數(shù)之后加入語(yǔ)句fflush stdin 其作用為清除緩沖區(qū) 這時(shí)可輸入第二個(gè)字符作為c2 如將案例1 7更改如下 includevoidmain charc1 c2 printf 請(qǐng)輸入第一個(gè)字符 c1 getchar printf 您輸入的第一個(gè)字符為 c n c1 fflush stdin printf 請(qǐng)輸入第二個(gè)字符 c2 getchar printf 您輸入的第二個(gè)字符為 putchar c2 printf n 則程序的運(yùn)行結(jié)果如下 請(qǐng)輸入第一個(gè)字符 a您輸入的第一個(gè)字符為a請(qǐng)輸入第二個(gè)字符 b您輸入的第二個(gè)字符為b注意 只有在讀取的數(shù)據(jù)為字符或字符串類(lèi)型時(shí) 才會(huì)發(fā)生上述問(wèn)題 其他情況下均不需要情況緩沖區(qū) 這是因?yàn)樵谧x取其他類(lèi)型 如整型 的數(shù)據(jù)時(shí) 會(huì)跳過(guò)空白字符 空格 制表符和換行符 直到遇到一個(gè)非空白字符 另外 getche 和getch 也是字符輸入函數(shù) 其所在的頭文件均為conio h 4 格式輸入函數(shù)scanf scanf 函數(shù)的作用為按照用戶指定的格式從鍵盤(pán)上把數(shù)據(jù)輸入到指定的變量中 所在包為stdio h scanf的一般格式為 scanf 格式控制串 地址表列 scanf接受用戶輸入時(shí)可以空格 制表符和換行符結(jié)束 格式控制串的使用規(guī)則和printf相同 但是輸入時(shí)不能規(guī)定精度 如 sacnf 7 3f f 是非法的 用 表示某變量所在的內(nèi)存單元地址 所讀入的數(shù)據(jù)要賦值給某變量 即保存到該變量所在的地址 用 變量名 表示 案例1 8 讀取數(shù)據(jù) 源程序如下 includevoidmain intn charc1 c2 c3 c4 printf Pleaseenteroneinteger scanf d 程序運(yùn)行結(jié)果如下 Pleaseenteroneinteger 4Pleaseinterfourcharacters abcdYouhaveentered4andabcd運(yùn)行以上程序時(shí) 在輸入 abcd 時(shí)不能添加空格 否而程序會(huì)將空格讀取并賦值給指定的變量 案例1 9 含有附加控制符的數(shù)據(jù)輸入 源程序如下 includevoidmain intn1 n2 n3 printf 請(qǐng)輸入三個(gè)整數(shù) scanf d d d 程序輸出結(jié)果如下 請(qǐng)輸入三個(gè)整數(shù) 123n1 1 n2 2 n3 3請(qǐng)輸入三個(gè)整數(shù) 123456n1 12 n2 345 n3 6請(qǐng)輸入三個(gè)整數(shù) 1 23 345n1 1 n2 23 n3 456 第一次輸入時(shí)按順序輸入三個(gè)整數(shù)數(shù)據(jù) 之間以空格表示一個(gè)數(shù)據(jù)輸入結(jié)束 分別將三個(gè)整數(shù)賦值給n1 n2和n3 第二次輸入時(shí) scanf函數(shù)中的整型變量根據(jù)格式項(xiàng)中指定的列寬來(lái)分隔數(shù)據(jù) 在輸入123456后 系統(tǒng)將前兩個(gè)寬度數(shù)據(jù)12賦值給n1 中間三個(gè)寬度數(shù)據(jù)345賦值給n2 最后只剩下一個(gè)寬度數(shù)據(jù) 小于指定寬度 此時(shí)只需將剩余數(shù)據(jù)全部賦值給n3即可 如最后剩余數(shù)據(jù)寬度大于指定寬度 也只截取指定寬度數(shù)據(jù) 第三次輸入時(shí) scanf函數(shù)格式控制串 d d d 中含 則在輸入數(shù)據(jù)時(shí)也必須在數(shù)據(jù)之間添加逗號(hào) 否則會(huì)顯示輸入錯(cuò)誤 1 1 5任務(wù)實(shí)現(xiàn) 1 問(wèn)題描述學(xué)生成績(jī)管理是學(xué)校教學(xué)管理中十分重要又相當(dāng)復(fù)雜的管理工作之一 為了保證學(xué)校的信息流暢 工作高效 有必要設(shè)計(jì)一個(gè)學(xué)生成績(jī)管理系統(tǒng) 學(xué)生成績(jī)管理系統(tǒng)完成一系列的功能 包括 錄入學(xué)生信息 顯示學(xué)生信息 查詢學(xué)生信息 修改學(xué)生信息 學(xué)生成績(jī)排序等 在這里要實(shí)現(xiàn)的功能為打印學(xué)生成績(jī)管理系統(tǒng)菜單 在菜單項(xiàng)中應(yīng)列出所有的功能選項(xiàng) 以供用戶選擇 在用戶選擇特定的選項(xiàng)后 進(jìn)入該功能 2 要點(diǎn)解析程序的主要功能為顯示歡迎信息并列出學(xué)生管理系統(tǒng)的主要功能供用戶選擇 主要功能包括 1 添加學(xué)生信息 2 查找學(xué)生信息 3 刪除學(xué)生信息 4 修改學(xué)生信息 5 學(xué)生成績(jī)排序 6 統(tǒng)計(jì)學(xué)生成績(jī)信息 7 保存數(shù)據(jù)到文件 8 讀取所有學(xué)生信息 3 程序?qū)崿F(xiàn)通過(guò)對(duì)上述知識(shí)的了解 便可以嘗試實(shí)現(xiàn) 學(xué)生成績(jī)管理系統(tǒng)菜單設(shè)計(jì) 任務(wù) 任務(wù)一的源程序如下 include include include 以下為自定義函數(shù)聲明語(yǔ)句voidchoose 選擇功能函數(shù)voidinsert 插入學(xué)生成績(jī)信息voidsearch 查找學(xué)生成績(jī)信息voiddel 刪除學(xué)生成績(jī)信息voidmodify 修改學(xué)生成績(jī)信息voidorder 按平均分成績(jī)排序voidtotal 學(xué)生成績(jī)信息統(tǒng)計(jì)voidwrite 將學(xué)生成績(jī)信息保存在文件中voidread 從文件中讀取所有學(xué)生成績(jī)信息voidmain 主函數(shù) printf n n printf t t STUDENT n printf t t t1 添加學(xué)生信息 n printf t t t2 查找學(xué)生信息 n printf t t t3 刪除學(xué)生信息 n printf t t t4 修改學(xué)生信息 n printf t t t5 學(xué)生成績(jī)排序 n printf t t t6 統(tǒng)計(jì)學(xué)生成績(jī)信息 n printf t t t7 保存數(shù)據(jù)到文件 n printf t t t8 讀取所有學(xué)生信息 n printf t t t0 退出系統(tǒng) n printf t t n n printf choose 0 7 choose 通過(guò)用戶輸入選擇相應(yīng)的功能實(shí)現(xiàn) 程序運(yùn)行結(jié)果如圖1 9所示 圖1 9運(yùn)行結(jié)果 任務(wù)1 2雞兔同籠問(wèn)題 任務(wù)目標(biāo)了解C語(yǔ)言中的基本數(shù)據(jù)類(lèi)型 掌握數(shù)據(jù)類(lèi)型之間的轉(zhuǎn)換方法 了解常量和變量的概念 掌握變量定義的方法 掌握C語(yǔ)言中運(yùn)算符和表達(dá)式的概念 掌握幾種表達(dá)式的含義和用法 實(shí)現(xiàn)雞兔同籠問(wèn)題程序 1 2 1基本數(shù)據(jù)類(lèi)型計(jì)算機(jī)語(yǔ)言中的數(shù)據(jù)類(lèi)型是為了高效處理不同數(shù)據(jù)而引入的一個(gè)概念 通過(guò)數(shù)據(jù)類(lèi)型把不同特征的數(shù)據(jù)以及這些數(shù)據(jù)的處理方法封裝在一起 既便于對(duì)信息的處理 也便于計(jì)算機(jī)硬件的實(shí)現(xiàn) 例如 C語(yǔ)言中有整數(shù)類(lèi)型 浮點(diǎn)類(lèi)型 字符類(lèi)型等基本數(shù)據(jù)類(lèi)型 另外 還提供了自定義數(shù)據(jù)類(lèi)型 下面具體講解每一種基本數(shù)據(jù)類(lèi)型 1 整數(shù)類(lèi)型整數(shù)類(lèi)型也稱為整型 用來(lái)存放整數(shù)數(shù)據(jù) 如1 21 4 0等 在C語(yǔ)言中用關(guān)鍵字int來(lái)表示 整型數(shù)據(jù)可以為十進(jìn)制 八進(jìn)制 以0開(kāi)頭 或十六進(jìn)制 以0 x開(kāi)頭 根據(jù)所占內(nèi)存空間大小的不同 整型數(shù)據(jù)又可以分為三種 整型 以int表示 短整型 以shortint表示 簡(jiǎn)寫(xiě)為short 長(zhǎng)整型 以longint表示 簡(jiǎn)寫(xiě)為long int short和long具體長(zhǎng)度和系統(tǒng)及編譯器有關(guān) 除上述三種類(lèi)型以外 整型數(shù)據(jù)還可以分為有符號(hào)整數(shù) 用signed表示 通??梢院雎?和無(wú)符號(hào)整數(shù) 用unsigned表示 有符號(hào)整數(shù)存儲(chǔ)時(shí)一般用最高位作為符號(hào)位 0為正數(shù) 1為負(fù)數(shù) 無(wú)符號(hào)整數(shù)只能表示正數(shù) 2 浮點(diǎn)類(lèi)型浮點(diǎn)類(lèi)型用來(lái)存放小數(shù)或者超出整數(shù)范圍的數(shù)值 浮點(diǎn)類(lèi)型分為單精度型和雙精度型兩種 單精度型用關(guān)鍵字float來(lái)表示 有4字節(jié) 雙精度型用關(guān)鍵字double表示 需要8字節(jié)存放 標(biāo)準(zhǔn)格式的浮點(diǎn)數(shù)在存儲(chǔ)時(shí)可分為三個(gè)部分 符號(hào)位 指數(shù)位 尾數(shù)位 為了統(tǒng)一表示 尾數(shù)位應(yīng)該小于1 由于浮點(diǎn)類(lèi)型提供的有效數(shù)據(jù)個(gè)數(shù)總是有限的 在有效位以外的數(shù)字將會(huì)被舍去 案例1 10 浮點(diǎn)類(lèi)型 源程序如下 includevoidmain doubled floatf d 123456789123 45 printf d f n d f 123456789123 45 printf f f n f 程序運(yùn)行結(jié)果如下 d 123456789123 450000f 123456790528 000000double所能表示的數(shù)據(jù)長(zhǎng)度大于float 所以程序中對(duì)同樣的數(shù)據(jù) double類(lèi)型可以完整地記錄所有有效位 而float只能記錄前7位有效數(shù)據(jù) 后面的數(shù)據(jù)沒(méi)有意義 幾乎不起作用 3 字符類(lèi)型 字符類(lèi)型數(shù)據(jù)如字母A Z 數(shù)字 符號(hào) 換行符 空格等 C語(yǔ)言中用char表示字符類(lèi)型數(shù)據(jù) 在計(jì)算機(jī)中 字符是以ASCII碼的形式存儲(chǔ)的 每個(gè)字符都有對(duì)應(yīng)的ASCII碼 例如 大寫(xiě)字母A對(duì)應(yīng)的ASCII碼值為65 即一個(gè)整數(shù) 因此 字符類(lèi)型和整型關(guān)系非常密切 可以把字符類(lèi)型看作為特殊的整型 案例1 11 查看字符對(duì)應(yīng)ASCII 源程序如下 includevoidmain charc1 A c2 Z c3 a c4 z intn1 33 n2 40 n3 53 n4 63 printf A dZ d n c1 c2 printf a dz d n c3 c4 printf 33 c40 c n n1 n2 printf 53 c64 c n n3 n4 程序運(yùn)行結(jié)果如下 A 65Z 90a 97z 12233 40 53 564 從程序運(yùn)行結(jié)果中可以看出 A和Z對(duì)應(yīng)的ASCII碼分別為65和90 ASCII碼中33對(duì)應(yīng)的符合為 64對(duì)應(yīng)的字符為 4 數(shù)據(jù)類(lèi)型轉(zhuǎn)換 數(shù)據(jù)類(lèi)型轉(zhuǎn)換分類(lèi)自動(dòng)轉(zhuǎn)換和強(qiáng)制類(lèi)型轉(zhuǎn)換 自動(dòng)轉(zhuǎn)換發(fā)生在參與運(yùn)算的多個(gè)操作數(shù)類(lèi)型不一致時(shí) 則先轉(zhuǎn)換成同一類(lèi)型 再進(jìn)行計(jì)算 如加法操作中兩個(gè)操作數(shù)分別為int類(lèi)型和float類(lèi)型 則都先轉(zhuǎn)換為float類(lèi)型 再進(jìn)行計(jì)算 計(jì)算結(jié)果為float類(lèi)型 自動(dòng)類(lèi)型轉(zhuǎn)換的規(guī)則如下 double float long unsigned int char short自動(dòng)類(lèi)型轉(zhuǎn)換由機(jī)器自動(dòng)完成 并且不會(huì)丟失數(shù)據(jù) 強(qiáng)制類(lèi)型轉(zhuǎn)換是通過(guò)類(lèi)型轉(zhuǎn)換運(yùn)算來(lái)實(shí)現(xiàn)的 其一般形式為 類(lèi)型說(shuō)明符 表達(dá)式 其功能是把表達(dá)式的運(yùn)算結(jié)果強(qiáng)制轉(zhuǎn)換成類(lèi)型說(shuō)明符所表示的類(lèi)型 例如 floata 5 432 intb int a 則把a(bǔ)轉(zhuǎn)換成整型 1 2 2常量和變量 每個(gè)C程序中處理的數(shù)據(jù) 無(wú)論哪種數(shù)據(jù)類(lèi)型 都是以常量和變量的形式出現(xiàn)的 在程序中 常量是可以不經(jīng)說(shuō)明而直接引用 而變量是必須先定義后使用的 1 常量常量為程序執(zhí)行過(guò)程中值保持不變的量 C語(yǔ)言中常量可以分為兩種 直接常量和符號(hào)常量 直接常量為直接以數(shù)據(jù)形式表現(xiàn)的常量 也稱為常數(shù) 直接常量根據(jù)類(lèi)型又可以分為4種 整型常量 實(shí)型常量 字符常量和字符串常量 整型常量有3種表現(xiàn)形式 十進(jìn)制整數(shù) 如0 23 23等 八進(jìn)制整數(shù) 以數(shù)字0開(kāi)頭 如012 034 0567等 十六進(jìn)制整數(shù) 以0 x開(kāi)頭 如0 x123 0 xa3等 實(shí)型常量有兩種表現(xiàn)形式 由數(shù)字和小數(shù)點(diǎn)組成的實(shí)型數(shù)據(jù) 如12 34 567 08等 以指數(shù)形式表示的實(shí)型數(shù)據(jù) 如12 3e4 表示12 3 1000 e后面必須為整數(shù) 字符常量指單一的字符數(shù)據(jù) 一般由單引號(hào)引起來(lái) 如 a n 4 等 任意數(shù)字均可被定義為字符常量 但定義為字符常量以后為字符類(lèi)型 不能參與數(shù)字計(jì)算 字符串常量為一串字符 由雙引號(hào)引起來(lái) 如 hello 12345 等 字符常量 a 和字符串常量 a 是不同的 因?yàn)檫M(jìn)算計(jì)在存儲(chǔ)時(shí) 會(huì)自動(dòng)在字符串的結(jié)尾添加 0 表示字符串的結(jié)束 所以 a 實(shí)際上由 a 和 0 兩個(gè)字符組成 符合常量為用符合表示數(shù)據(jù)的常量 符號(hào)常量在使用前必須先定義 通常用大寫(xiě)字母來(lái)定義符合常量 符合常量一旦定義好之后不能在程序執(zhí)行過(guò)程中修改其值 符合常量定義格式為 define常量名常量值 案例1 12 符號(hào)常量的使用 源程序如下 include definePI3 14voidmain floatradius 表示圓的半徑floatarea 表示圓的面積printf 請(qǐng)輸入圓的半徑 scanf f 程序輸出結(jié)果如下 請(qǐng)輸入圓的半徑 10圓的半徑為10 000000圓的面積為314 000000 2 變量 變量是指在程序執(zhí)行期間值可以發(fā)生變化的量 變量代表內(nèi)存中具有特定屬性的內(nèi)存單元 用來(lái)存放程序執(zhí)行過(guò)程中的輸入數(shù)據(jù) 中間結(jié)果和最終結(jié)果 一個(gè)變量應(yīng)該有一個(gè)名字 映射到特定存儲(chǔ)單元 存儲(chǔ)單元內(nèi)存放變量值 如圖1 10所示 圖1 10變量的存儲(chǔ)變量名為變量標(biāo)識(shí)符 在編譯過(guò)程中通過(guò)變量名查找相應(yīng)的內(nèi)存單元 并從內(nèi)存單元中讀取數(shù)據(jù) 變量的命名必須符合一定的規(guī)范 變量名必須以字母打頭 名字中間只能由字母 數(shù)字和下畫(huà)線 組成 變量名的長(zhǎng)度不得超過(guò)255個(gè)字符 變量名在有效的范圍內(nèi)必須是唯一的 在C語(yǔ)言中 變量必須 先聲明 再使用 在使用一個(gè)變量之前 必須先對(duì)它進(jìn)行定義 指定數(shù)據(jù)類(lèi)型和一個(gè)唯一的變量名 變量聲明格式如下 數(shù)據(jù)類(lèi)型符變量名 可以在一個(gè)變量類(lèi)型符后定義多個(gè)變量 變量間用逗號(hào)隔開(kāi) 但最后一個(gè)變量后必須加 在變量聲明的同時(shí)可以給變量賦值 如 inta 表示定義一個(gè)類(lèi)型為整型的變量a charc a 表示聲明一個(gè)類(lèi)型為字符型的變量c 同時(shí)給c賦值為字符a 1 2 3運(yùn)算符和表達(dá)式 C語(yǔ)言中 對(duì)常量和變量的處理是通過(guò)不同的運(yùn)算來(lái)實(shí)現(xiàn)的 用來(lái)表示各種運(yùn)算的符合稱為運(yùn)算符 常量和變量通過(guò)運(yùn)算符組成C語(yǔ)言的表達(dá)式 C語(yǔ)言中運(yùn)算符的種類(lèi)很多 這里重點(diǎn)介紹算數(shù)運(yùn)算 賦值運(yùn)算和逗號(hào)運(yùn)算 以及相對(duì)應(yīng)的表達(dá)式 1 算術(shù)運(yùn)算和算術(shù)表達(dá)式 算術(shù)運(yùn)算符可分為兩類(lèi) 雙目運(yùn)算符需要兩個(gè)運(yùn)算對(duì)象 單目運(yùn)算符只需要一個(gè)運(yùn)算對(duì)象 運(yùn)算對(duì)象可以是常數(shù) 變量和函數(shù)等 C語(yǔ)言中提供了5個(gè)基本運(yùn)算符 加法運(yùn)算符 雙目運(yùn)算符 求兩個(gè)數(shù)相加之和 如a b 3 2等 減法運(yùn)算符 可作為雙目運(yùn)算符 求兩個(gè)數(shù)相減的差 如a b 5 4等 也可作單目運(yùn)算符 表示運(yùn)算對(duì)象取負(fù)數(shù) 如 4 a等 乘法運(yùn)算符 雙目運(yùn)算符 取兩個(gè)數(shù)的乘積 如6 2 a b等 除法運(yùn)算符 雙目運(yùn)算符 求兩個(gè)數(shù)相除的商 如a b 3 2等 0不能作為除數(shù) 如果兩個(gè)運(yùn)算對(duì)象都是整數(shù) 則商也是整數(shù) 得到的結(jié)果只取整數(shù)部分 如果有其中一個(gè)運(yùn)算對(duì)象是實(shí)數(shù) 則計(jì)算結(jié)果也用實(shí)數(shù)表示 取模運(yùn)算符 雙目運(yùn)算符 求兩個(gè)數(shù)相除的余數(shù) 如5 3 2 其中兩個(gè)操作數(shù)都必須為整數(shù) C語(yǔ)言中還提供了自增運(yùn)算符 和自減運(yùn)算符 分別表示將操作對(duì)象加1或減1 然后存回到原操作對(duì)象中 這兩個(gè)運(yùn)算符都是單目運(yùn)算符 運(yùn)算對(duì)象只能是變量 且只能為整型或字符型 自增和自減操作符可以放在操作對(duì)象的前面 也可以放在操作對(duì)象的后面 其區(qū)別可看案例1 13 案例1 13 自增和自減操作符的使用 源程序如下 includevoidmain inta 3 b b a printf a d b d n a b b a printf a d b d n a b 程序運(yùn)行結(jié)果如下 a 4 b 4a 5 b 5執(zhí)行 b a 時(shí) 先對(duì)a進(jìn)行加1運(yùn)算 計(jì)算結(jié)果替換原來(lái)a的值 然后再將a的值賦給b 所以a b 4 而執(zhí)行 b a

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論