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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論