版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
C++語言程序設(shè)計(上)第1章計算機(jī)與程序設(shè)計
第2章數(shù)據(jù)類型、運算符與表達(dá)式
第3章輸入和輸出
第04章控制結(jié)構(gòu)
第5章函數(shù)
第6章數(shù)組
第7章指針
第9章鏈表
第10章面向?qū)ο蟪绦蛟O(shè)計根本概念
第11章類與對象
第12章類和對象的使用
第13章運算符重載
第14章繼承
第15章多態(tài)性
第16章文件和流
第17章異常
第18章模板第1章計算機(jī)與程序設(shè)計講授內(nèi)容計算機(jī)系統(tǒng)的根本組成、工作原理程序設(shè)計的根本過程和方法程序設(shè)計語言根本概念及其開展歷史結(jié)構(gòu)化程序設(shè)計和面向?qū)ο蟪绦蛟O(shè)計方法典型的C++編程環(huán)境、開發(fā)過程和程序結(jié)構(gòu)程序設(shè)計風(fēng)格1.1計算機(jī)系統(tǒng)概述(1/4)計算機(jī)系統(tǒng)機(jī)器系統(tǒng)能接收和存儲信息能對數(shù)據(jù)進(jìn)行處理和計算能輸出結(jié)果計算機(jī)系統(tǒng)由硬件系統(tǒng)和軟件系統(tǒng)組成硬件系統(tǒng)包括CPU、顯示器、內(nèi)存、硬盤、鍵盤等軟件系統(tǒng)包括各種程序和文檔1.1計算機(jī)系統(tǒng)概述(2/4)計算機(jī)硬件——是軟件實現(xiàn)的根底運算器——對數(shù)據(jù)進(jìn)行算術(shù)運算和邏輯運算主存儲器——存儲二進(jìn)制信息,與運算器、控制器等直接交換信息控制器——按程序的要求,控制計算機(jī)各功能部件協(xié)調(diào)一致地動作控制器+運算器=中央處理器中央處理器+主存儲器=處理機(jī)1.1計算機(jī)系統(tǒng)概述(3/4)計算機(jī)硬件——是軟件實現(xiàn)的根底輸入設(shè)備——將用戶信息〔數(shù)據(jù)、程序等〕變換為計算機(jī)能識別和處理的信息形式輸出設(shè)備——將計算機(jī)中二進(jìn)制信息變換為用戶所需要并能識別的信息形式輔助存儲器——存儲主存儲器難以容納、又為程序執(zhí)行所需要的大量文件信息1.1計算機(jī)系統(tǒng)概述(4/4)計算機(jī)軟件——計算機(jī)系統(tǒng)中的指揮者系統(tǒng)軟件——最靠近硬件,如編譯程序和操作系統(tǒng)等支撐軟件——支撐其它軟件的開發(fā)和維護(hù),如各種數(shù)據(jù)庫管理系統(tǒng)、接口軟件和工具組應(yīng)用軟件——用于特定應(yīng)用領(lǐng)域,如財務(wù)管理系統(tǒng)上述分類是交叉和變化的一個軟件可以在一個系統(tǒng)中是系統(tǒng)軟件,在另一個系統(tǒng)中是支撐軟件在同一系統(tǒng)中,一個軟件可以既是系統(tǒng)軟件,也是支撐軟件1.2程序設(shè)計根本概念(1/6)問題求解過程步驟問題定義——明確要解決的問題算法設(shè)計——把要求解的問題轉(zhuǎn)化為計算機(jī)的解題步驟程序編碼——對設(shè)計出來的算法實現(xiàn)進(jìn)行編程實現(xiàn)測試和調(diào)試——發(fā)現(xiàn)和糾正程序中的錯誤1.2程序設(shè)計根本概念(2/6)算法與程序算法——由有限個步驟組成的求解問題的方法算法的特點有窮性:執(zhí)行有窮個步驟后必須終止確定性:每一個步驟必須是無二義的能行性:每一個步驟都可以在有限時間內(nèi)做完輸入:一般有輸入信息輸出:一般有一個或多個輸出信息1.2程序設(shè)計根本概念(3/6)算法的描述方式文字描述自然語言圖形描述流程圖、盒圖,PAD圖等程序語言描述計算機(jī)程序,如C++1.2程序設(shè)計根本概念(4/6)程序的組成數(shù)據(jù)數(shù)據(jù)結(jié)構(gòu),程序處理的數(shù)據(jù)操作處理數(shù)據(jù)的操作步驟,即算法程序=數(shù)據(jù)結(jié)構(gòu)+算法1.2程序設(shè)計根本概念(5/6)程序設(shè)計和程序編碼先設(shè)計,后編碼設(shè)計是根底,是編碼的依據(jù)設(shè)計的好壞影響代碼的質(zhì)量1.2程序設(shè)計根本概念(6/6)程序設(shè)計語言描述數(shù)據(jù)和對數(shù)據(jù)的操作機(jī)器語言用機(jī)器根本指令編碼,二進(jìn)制形式匯編語言使用一組助記符編碼,需要匯編才能運行高級語言表示方法更接近于待解問題的表示方法,需要編譯才能運行1.3程序設(shè)計方法(1/4)結(jié)構(gòu)化程序設(shè)計任何程序邏輯都可以用順序、選擇和循環(huán)三種根本結(jié)構(gòu)表示1.3程序設(shè)計方法(2/4)結(jié)構(gòu)化程序設(shè)計自頂向下,逐步求精描述問題,分析問題,分解問題成相對獨立的子問題〔反復(fù)進(jìn)行,逐步分解〕描述子問題的數(shù)據(jù)和操作模塊化原那么盡量采用典型根本控制結(jié)構(gòu):順序、選擇、循環(huán)缺點〔對于大型軟件開發(fā)〕穩(wěn)定性低、可修改性和可重用性差1.3程序設(shè)計方法(3/4)面向?qū)ο蟪绦蛟O(shè)計面向問題現(xiàn)實世界是由對象組成的問題由哪些對象組成?對象之間如何相互作用?結(jié)構(gòu)化程序由函數(shù)組成,面向?qū)ο蟪绦蛴蓪ο蠼M成易于擴(kuò)展、可維護(hù)性好1.3程序設(shè)計方法(4/4)面向?qū)ο蠓治龊驮O(shè)計步驟找出問題中的對象和類確定每個對象應(yīng)具備的屬性和功能確定類、對象之間關(guān)系,相互作用的方式用程序代碼實現(xiàn)這些對象和類1.4C與C++(1/3)C語言的歷史起源于Algol60在Algol60的根底上開展出CPL語言1967年開展為BCPL,用于編寫操作系統(tǒng)和編譯器1970年貝爾實驗室將BCPL改進(jìn)成B,并用B語言實現(xiàn)了第一個UNIX操作系統(tǒng)1972年左右,DennisRitchie和KenThompson在貝爾實驗室設(shè)計UNIX系統(tǒng)時,開發(fā)出了C語言之后,C語言開展出很多版本1988年,美國國家標(biāo)準(zhǔn)化協(xié)會(ANSI)制定了C的標(biāo)準(zhǔn)——ANSIC1.4C與C++(2/3)C語言的特點數(shù)據(jù)類型豐富運算符豐富,共34個運算符支持結(jié)構(gòu)化程序設(shè)計方便、靈活,結(jié)合了高級語言的根本結(jié)構(gòu)、語句和低級語言的實用性程序生成代碼質(zhì)量高、程序執(zhí)行效率高可移植性好,可用于UNIX、AIX、WINDOWS等操作系統(tǒng)1.4C與C++(3/3)C++語言在C語言中引入了面向?qū)ο蟮乃枷胧且环N混合型的語言,同時支持結(jié)構(gòu)化程序設(shè)計和面向?qū)ο蟪绦蛟O(shè)計方法兼容C語言,可不加修改地使用C語言代碼允許數(shù)據(jù)抽象,支持封裝、繼承和多態(tài)等特征1.5C++編程簡介使用IDE開發(fā)C++程序編輯(edit)預(yù)處理(preprocess)編譯(compile)連接(link)裝入(load)執(zhí)行(execute)例子1:C++程序:輸入一個人的姓名,然后輸出"HELLO,***//ex1_2.cpp:輸入姓名,然后在屏幕輸出問候信息。#include<iostream.h>intmain(){charname[20];//輸出提示信息cout<<"Pleaseinputyourname:";
cin>>name;//輸入姓名//輸出信息,并使用\n換行
cout<<"HELLO,"<<name<<"!\n";
return0;//指示程序運行}1.6程序設(shè)計風(fēng)格(1/2)用好的設(shè)計方法編寫結(jié)構(gòu)好的程序提高程序的可讀性、可理解性和可修改性,以利于程序查錯、測試及維護(hù)程序員要養(yǎng)成良好的程序設(shè)計風(fēng)格1.6程序設(shè)計風(fēng)格(2/2)注意點以簡潔明了的方式編寫C++程序縮排規(guī)那么標(biāo)識符命名規(guī)那么注釋輸出信息直觀清晰,布局合理學(xué)習(xí)目的檢測了解計算機(jī)系統(tǒng)、程序設(shè)計語言、程序設(shè)計的根本概念掌握簡單C++程序的結(jié)構(gòu)明確程序設(shè)計風(fēng)格的意義作業(yè)1.21.31.71.9第2章數(shù)據(jù)類型、運算符與表達(dá)式講授內(nèi)容C++語言的根本元素、字符集和關(guān)鍵字根本的數(shù)據(jù)類型的表示方法常量和變量類型轉(zhuǎn)換各種運算符與表達(dá)式2.1C++的字符集和關(guān)鍵字(1/2)字符集由52個字母、10個數(shù)字、27個特殊字符組成所有C++程序〔忽略換行符和字符串常量中的內(nèi)容〕都由字符集中的字符按一定規(guī)那么構(gòu)成2.1C++的字符集和關(guān)鍵字(2/2)C++標(biāo)識符是滿足如下條件的一串字符由字母(a~z,A~Z)或下劃線(_)開頭;其它局部可以由字母、下劃線或數(shù)字(0~9)組成;只有前32個字符有效;C++的63個關(guān)鍵字也是標(biāo)識符,但不能作其它用〔保存字〕2.2 根本數(shù)據(jù)類型(1/5)C++程序中的每個數(shù)據(jù)對象〔如2、x1、x1+2〕都有確定的數(shù)據(jù)類型C++的數(shù)據(jù)類型包括根本數(shù)據(jù)類型和復(fù)合數(shù)據(jù)類型根本數(shù)據(jù)類型有整型、浮點型、字符型、布爾型不同數(shù)據(jù)類型有自己的取值范圍和所允許的操作2.2 根本數(shù)據(jù)類型(2/5)整型signedshortint(簡寫為short)signedint(簡寫為int)signedlongint(簡寫為long)unsignedshortint(簡寫為unsignedshort)unsignedint(簡寫為unsigned)unsignedlongint(簡寫為unsignedlong)2.2 根本數(shù)據(jù)類型(3/5)浮點型float(浮點型)double(雙精度型)longdouble(長雙精度型)均有符號不允許的操作:取余%、位運算等2.2 根本數(shù)據(jù)類型(4/5)字符型charsignedcharunsignedchar實質(zhì)是占一個字節(jié)的整型數(shù)〔小整數(shù)〕允許的操作:和整型相同2.2 根本數(shù)據(jù)類型(5/5)布爾型bool值為true和false可以當(dāng)作整數(shù)用〔true一般為1,false為0〕把其它類型的值轉(zhuǎn)換為布爾值時,非零值轉(zhuǎn)換為true,零值轉(zhuǎn)換為false2.3 變量與常量(1/9)函數(shù)體說明語句類型名、變量、常量表達(dá)式執(zhí)行語句表達(dá)式變量、常量、運算符2.3 變量與常量(2/9)擴(kuò)充的巴克斯范式表示語法〔全書統(tǒng)一,不涉及語義〕<非0數(shù)字>→1|2|3|4|5|6|7|8|9<八進(jìn)制數(shù)字>→0|1|2|3|4|5|6|7<十六進(jìn)制數(shù)字>→0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f|A|B|C|D|E|F<整型后綴>→<無符號整型后綴>[<長整型后綴>]|<長整型后綴>[<無符號整型后綴>]<無符號整型后綴>→u|U<長整型后綴>→l|L<八進(jìn)制整型常量>→0<八進(jìn)制數(shù)字>{<八進(jìn)制數(shù)字>}2.3 變量與常量(3/9)擴(kuò)充的巴克斯范式<整型常量>→<十進(jìn)制整型常量>[<整型后綴>]|<八進(jìn)制整型常量>[<整型后綴>]|<十六進(jìn)制整型常量>[<整型后綴>]<十進(jìn)制整型常量>→0|<非0數(shù)字>{<數(shù)字>}<八進(jìn)制整型常量>→0<八進(jìn)制數(shù)字>{<八進(jìn)制數(shù)字>}<十六進(jìn)制整型常量>→0x<十六進(jìn)制數(shù)字>{<十六進(jìn)制數(shù)字>}|0X<十六進(jìn)制數(shù)字>{<十六進(jìn)制數(shù)字>}<數(shù)字>→0|1|2|3|4|5|6|7|8|92.3 變量與常量(4/9)擴(kuò)充的巴克斯范式<浮點常量>→<尾數(shù)局部>[<指數(shù)局部>][<浮點后綴>]|<數(shù)字串><指數(shù)局部>[<浮點后綴>]<尾數(shù)局部>→[<數(shù)字串>].<數(shù)字串>|<數(shù)字串>.<指數(shù)局部>→e[<符號>]<數(shù)字串>|E[<符號>]<數(shù)字串><符號>→+|-<數(shù)字串>→<數(shù)字>{<數(shù)字>}<浮點后綴>→f|l|F|L2.3 變量與常量(5/9)擴(kuò)充的巴克斯范式<字符型常量>→‘<c字符>’
<c字符>→字符集中除單引號’、反斜線\外的任意字符|<轉(zhuǎn)義序列><轉(zhuǎn)義序列>→<簡單轉(zhuǎn)義序列>|<八進(jìn)制轉(zhuǎn)義序列>|<十六進(jìn)制轉(zhuǎn)義序列><簡單轉(zhuǎn)義序列>→\’|\“|\?|\\|\a|\b|\f|\n|\r|\t|\v<八進(jìn)制轉(zhuǎn)義序列>→\<八進(jìn)制數(shù)字>|
\<八進(jìn)制數(shù)字><八進(jìn)制數(shù)字>|
\<八進(jìn)制數(shù)字><八進(jìn)制數(shù)字><八進(jìn)制數(shù)字><十六進(jìn)制轉(zhuǎn)義序列>→\x<十六進(jìn)制數(shù)字>{<十六進(jìn)制數(shù)字>}2.3 變量與常量(6/9)擴(kuò)充的巴克斯范式<字符串常量>→“[<s字符序列>]〞<s字符序列>→<s字符>{<s字符>}<s字符>→字符集中除雙引號“、反斜線\外的任意字符|其它可顯示字符|<轉(zhuǎn)義序列>2.3 變量與常量(7/9)變量四要素:變量名、類型、存儲空間、值必須先聲明后使用,一般聲明形式為:<變量聲明>→<存儲類別描述符><類型描述符><變量表><存儲類別描述符>→auto|register|static|extern<類型描述符>→<類型名><變量表>→<標(biāo)識符列表><標(biāo)識符列表>→<非關(guān)鍵字標(biāo)識符>{,<非關(guān)鍵字標(biāo)識符>}2.3 變量與常量(8/9)符號常量符號常量是經(jīng)過定義的代表常量的標(biāo)識符C++定義符號常量的格式如下:#define<標(biāo)識符><常量>#define是C++的預(yù)處理指令,說明程序中的<標(biāo)識符>都代表了<常量>。2.3 變量與常量(9/9)例子:#definePRICE30#include<iostream.h>main(){intnum,total;num=10;total=num*PRICE;cout<<"total="<<total<<endl;return0;}2.4 類型轉(zhuǎn)換(1/4)舉例(int)3.14將3.14轉(zhuǎn)換成整數(shù)3(double)3將3轉(zhuǎn)換成雙精度浮點數(shù)3.0double(3)將3轉(zhuǎn)換成雙精度浮點數(shù)3.02.4 類型轉(zhuǎn)換(2/4)提升規(guī)那么將數(shù)值轉(zhuǎn)換成較低的類型,如從float到int必須顯式地使用類型轉(zhuǎn)換,如(int)3.14;將數(shù)值轉(zhuǎn)換成較高的類型可以通過隱式的類型轉(zhuǎn)換,如3.14+22.4 類型轉(zhuǎn)換(3/4)隱式類型轉(zhuǎn)換表達(dá)式中運算符的操作數(shù)類型與要求不符時,要進(jìn)行隱式類型轉(zhuǎn)換,使之符合要求隱式類型轉(zhuǎn)換規(guī)那么:〔1〕表達(dá)式中如有char、short和enum類型的數(shù)據(jù)時,自動將它們轉(zhuǎn)換成int類型〔2〕把表達(dá)式中不同類型的數(shù)據(jù)轉(zhuǎn)換成精度最高、占用內(nèi)存最多的那個數(shù)據(jù)的類型在賦值表達(dá)式中,自動將賦值運算符右邊表達(dá)式的值的類型轉(zhuǎn)換成左邊變量的類型2.4 類型轉(zhuǎn)換(4/4)強制類型轉(zhuǎn)換〔顯式類型轉(zhuǎn)換〕形式為:〔<類型>〕<表達(dá)式>或<類型>〔<表達(dá)式>〕例如:(double)3/2或double(3)/2(double)(3/2)或double(3/2)2.5 運算符和表達(dá)式(1/11)運算符的優(yōu)先級和結(jié)合性運算符包括:算術(shù)運算符、關(guān)系運算符、邏輯運算符、位運算符、賦值運算符根據(jù)組成表達(dá)式的運算符的不同,表達(dá)式可以分為算術(shù)表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式、位運算表達(dá)式、逗號表達(dá)式和賦值表達(dá)式2.5 運算符和表達(dá)式(2/11)算術(shù)運算之一:一元算術(shù)運算+正,運算結(jié)果同操作數(shù)-負(fù),運算結(jié)果為操作數(shù)的負(fù)數(shù)++自增運算符;操作數(shù)的位置?--自減運算符2.5 運算符和表達(dá)式(3/11)算術(shù)運算之一:根本算術(shù)運算〔二元〕+加法,運算結(jié)果為兩個操作數(shù)的和-減法,運算結(jié)果為左操作數(shù)減去右操作數(shù)的差*乘法,運算結(jié)果為兩個操作數(shù)的乘積/除法,運算結(jié)果為左操作數(shù)除以右操作數(shù)的商%求余,運算結(jié)果為左操作數(shù)除以右操作數(shù)的余數(shù),只用于整型數(shù)據(jù),其結(jié)果也是整型2.5 運算符和表達(dá)式(4/11)算術(shù)運算之一:根本算術(shù)運算兩個整數(shù)作/運算,其結(jié)果為整數(shù)具體結(jié)果依賴于具體機(jī)器,一般為直接截去小數(shù)局部兩個整數(shù)求余%如果兩數(shù)都是正數(shù),結(jié)果為正否那么結(jié)果與左操作數(shù)的符號一致〔MicrosoftC++〕2.5 運算符和表達(dá)式(5/11)算術(shù)表達(dá)式<算術(shù)表達(dá)式>
→<常量>|<變量>|+<操作數(shù)>|-<操作數(shù)>|<操作數(shù)>++|++<操作數(shù)>|<操作數(shù)>--|--<操作數(shù)>|<操作數(shù)><二元算術(shù)運算符><操作數(shù)>|(<算術(shù)表達(dá)式>)<操作數(shù)>
→<表達(dá)式>2.5 運算符和表達(dá)式(6/11)關(guān)系運算<關(guān)系表達(dá)式>
→<操作數(shù)><關(guān)系運算符><操作數(shù)><關(guān)系運算符>→<|>|<=|>=|==|!=2.5 運算符和表達(dá)式(7/11)邏輯運算<邏輯表達(dá)式>→<布爾型常量>|<布爾型變量>|<關(guān)系表達(dá)式>|<操作數(shù)>&&<操作數(shù)>|<操作數(shù)>||<操作數(shù)>|!<邏輯表達(dá)式>|(<邏輯表達(dá)式>)!、||、&&的優(yōu)先級和結(jié)合性邏輯表達(dá)式的“短路計算法〞(慎用自增、自減〕2.5 運算符和表達(dá)式(8/11)位運算<位運算表達(dá)式>→~<操作數(shù)>|<操作數(shù)>&<操作數(shù)>|<操作數(shù)>|<操作數(shù)>|<操作數(shù)>^<操作數(shù)>|<操作數(shù)><<<操作數(shù)>|<操作數(shù)>>><操作數(shù)>操作數(shù)只能是整型或字符型數(shù)據(jù),結(jié)果亦然符號位參加運算向右移位運算,但左操作數(shù)是負(fù)數(shù)時,高位填0或12.5 運算符和表達(dá)式(9/11)逗號運算<逗號表達(dá)式>→<表達(dá)式>,<表達(dá)式>二元運算,左結(jié)合先左后右計算表達(dá)式的值,取右表達(dá)式的值為運算結(jié)果逗號的左、右表達(dá)式作為逗號運算符的操作數(shù),類型可以不同2.5 運算符和表達(dá)式(10/11)賦值運算<賦值表達(dá)式>→<變量><賦值運算符><表達(dá)式><賦值運算符>→=|*=|/=|%=|+=|-=|>>=|<<=|&=|^=||=二元運算,右結(jié)合<變量>可以是由標(biāo)識符表示的變量,也可以是數(shù)組元素或指針指向的存儲空間〔“左值性質(zhì)〞〕賦值運算可用于變量初始化,運算符右邊的表達(dá)式需編譯時可計算2.5 運算符和表達(dá)式(11/11)條件運算符
<表達(dá)式1>?<表達(dá)式2>:<表達(dá)式3>三元運算運算符的操作數(shù)類型可以不同學(xué)習(xí)目的檢測理解字符集、標(biāo)識符和關(guān)鍵字的意義掌握根本數(shù)據(jù)類型的定義及不同數(shù)據(jù)類型之間的轉(zhuǎn)換機(jī)制掌握各種常量的性質(zhì)和定義掌握變量的聲明方法熟練運用各種運算符與表達(dá)式作業(yè)2.8、2.10、2.11、2.12、2.14、2.15、2.16、2.18、2.19第3章輸入和輸出講授內(nèi)容標(biāo)準(zhǔn)輸入輸出函數(shù)格式化輸入輸出函數(shù)通過流進(jìn)行輸入輸出3.1C++的輸入和輸出兩種I/O方式保存自C的——通過標(biāo)準(zhǔn)的I/O函數(shù)實現(xiàn)面向?qū)ο蟮摹愋推桨驳?,編譯器對輸入輸出操作做嚴(yán)格的類型檢查建議盡量使用面向?qū)ο蟮腎/O方式3.2標(biāo)準(zhǔn)輸入與輸出函數(shù)字符輸入函數(shù)getchar
intgetchar(void);字符輸出函數(shù)putchar
intputchar(intc);例子1:字符輸入輸出//ex3_1.cpp#include<stdio.h>intmain(){ chara='a',b='b',c;
c=getchar(); putchar(a); putchar(b); putchar('c'); putchar(c); putchar('\"'); putchar(0101); putchar('\n'); return0;}程序運行如果sabcs"A3.3格式化輸入輸出(1/12)格式化輸入函數(shù)scanf輸入各種類型的數(shù)據(jù),并存入相應(yīng)的參數(shù)中讀取輸入流中的指定的字符跳過輸入流中的指定的字符3.3格式化輸入輸出(2/12)格式化輸入函數(shù)scanfscanf(<格式控制串>,<參數(shù)列表>)<格式控制串>描述輸入數(shù)據(jù)遵循的格式,可以包含3種類型的字符:格式指示符、空白字符〔空格、Tab鍵和回車鍵〕和非空白字符〔普通字符〕<參數(shù)列表>是存放數(shù)據(jù)的地址的列表,參數(shù)之間用“,〞分隔。參數(shù)列表是一個地址列表scanf("%d%f%d",&num1,&num2,&num3);1234.56783.3格式化輸入輸出(3/12)scanf函數(shù)的格式指示符%*<寬度><轉(zhuǎn)換說明符>%是格式指示符的前導(dǎo)符*賦值抑制符,表示該格式指示符對應(yīng)的數(shù)據(jù)讀入后,不賦給相應(yīng)的變量
scanf("%d%*d%d%d",&num1,&num2,&num3);輸入1234567893.3格式化輸入輸出(4/12)scanf函數(shù)的格式指示符%*<寬度><轉(zhuǎn)換說明符>寬度是任選項,為一整數(shù)n,指明了該輸入數(shù)據(jù)長度為n,如果有多余的局部將被舍棄scanf("%3c%3c",&ch1,&ch2);ch1和ch2均為字符型變量,輸入為:abcdefg3.3格式化輸入輸出(5/12)scanf函數(shù)的格式指示符%*<寬度><轉(zhuǎn)換說明符>轉(zhuǎn)換說明符d十進(jìn)制整型量e實型的指數(shù)形式o八進(jìn)制整型量gf和e的較短形式x十六進(jìn)制整型量c字符u無符號十進(jìn)制整型s字符串i整型l或h輸入short或long類型數(shù)據(jù)f實型的小數(shù)形式l或L用于輸入double或longdouble類型數(shù)據(jù)3.3格式化輸入輸出(6/12)格式化輸出函數(shù)printf指定浮點值保存的小數(shù)位數(shù)浮點值小數(shù)點對齊輸出數(shù)據(jù)的右對齊和左對齊將直接字符插入到輸出數(shù)據(jù)中將浮點數(shù)按照指數(shù)形式輸出將整數(shù)按照八進(jìn)制或十六進(jìn)制形式輸出按指定的域?qū)捄途容敵鰯?shù)據(jù)3.3格式化輸入輸出(7/12)格式化輸出函數(shù)printfprintf(<格式控制串>,<參數(shù)列表>);<格式控制串>描述了輸出數(shù)據(jù)的格式??梢园?種類型的字符格式指示符,那么被參數(shù)列表中相應(yīng)的數(shù)據(jù)替換轉(zhuǎn)義字符,按其含義輸出相應(yīng)的特殊符號普通字符,按照原樣輸出3.3格式化輸入輸出(8/12)格式化輸出函數(shù)printf
printf(<格式控制串>,<參數(shù)列表>);<參數(shù)列表>存放輸出數(shù)據(jù)的表達(dá)式列表。格式指示符的數(shù)量、順序與輸出參數(shù)相對應(yīng)。printf函數(shù)執(zhí)行時,從左到右依次處理格式控制串,遇到格式控制字符,先計算相應(yīng)的輸出參數(shù)表達(dá)式,然后將該參數(shù)的計算結(jié)果按照格式指示符指定的方式輸出3.3格式化輸入輸出(9/12)格式化輸出函數(shù)printf
printf(<格式控制串>,<參數(shù)列表>);<格式控制串>中的格式指示符%<標(biāo)志><域?qū)?gt;<.精度><轉(zhuǎn)換說明符>其中<標(biāo)志>、<域?qū)?gt;和<精度>可選3.3格式化輸入輸出(10/12)格式化輸出函數(shù)printf
<格式控制串>中的格式指示符%<標(biāo)志><域?qū)?gt;<.精度><轉(zhuǎn)換說明符>共五種不同的標(biāo)志標(biāo)志含義-輸出在域?qū)拑?nèi)左對齊+在正數(shù)值之前顯示一個加號,在負(fù)數(shù)值之前顯示一個減號空格在正數(shù)值之前顯示一個空格#與八進(jìn)制轉(zhuǎn)換說明符o一起使用時,在輸出值之前加0;與十六進(jìn)制轉(zhuǎn)換說明符x或X一起使用時,在輸出值之前加0x或0X0用0填充域?qū)?.3格式化輸入輸出(11/12)格式化輸出函數(shù)printf<格式控制串>中的格式指示符%<標(biāo)志><域?qū)?gt;<.精度><轉(zhuǎn)換說明符>域?qū)?,指明了?shù)據(jù)打印的寬度。如果數(shù)據(jù)實際長度小于域?qū)?,那么?shù)據(jù)輸出右對齊;如果數(shù)據(jù)實際長度大于域?qū)?,系統(tǒng)自動突破域?qū)捪拗?,按?shù)據(jù)的實際長度輸出3.3格式化輸入輸出(12/12)<格式控制串>中的格式指示符精度:對于整數(shù),表示至少要打印的數(shù)字個數(shù),如果數(shù)據(jù)長度小于精度,那么左邊補齊0;如果數(shù)據(jù)實際長度大于精度,那么按數(shù)據(jù)實際長度輸出。對于浮點數(shù),如果轉(zhuǎn)換說明符為e、E和f,精度表示小數(shù)點后的有效位數(shù),如果數(shù)據(jù)小數(shù)局部的長度小于精度,那么在右邊補齊0;否那么按精度對數(shù)據(jù)進(jìn)行舍入輸出。如果浮點數(shù)的轉(zhuǎn)換說明符為g和G,精度表示打印數(shù)據(jù)的最大的長度。對于字符串,精度表示字符串輸出的最大長度,如果輸出字符串長度小于精度,那么按照字符串的實際長度輸出;否那么按精度截取輸出字符串開頭的n個字符〔假設(shè)精度為n〕輸出例子2:格式化輸入輸出例子(1/2)//ex3_2.cpp:根本格式化輸入和輸出#include<stdio.h>intmain(){ intnum1; floatnum2; charch2; intna,nb,nc,nd,ne,nf,ng; doubleda,db,dc; printf("---Basicinputandoutput:---\n"); printf(“Inputachar,aintandafloat:"); scanf("%c%d%f",&ch1,&num1,&num2); printf("ch1=%c,num1=%d,num2=%f\n", ch1,num1,num2);例子2:格式化輸入輸出例子(2/2)
printf("Pleaseentersevenintegers:"); scanf("%d%i%i%i%o%u%x", &na,&nb,&nc,&nd,&ne,&nf,&ng);
printf("%d%d%d%d%d%d%d\n", na,nb,nc,nd,ne,nf,ng);
scanf("%le%lf%lg",&da,&db,&dc); printf("%f\n%f\n%f\n",da,db,dc);
return0;}3.4用流進(jìn)行輸入輸出(1/3)通過I/O流對象實現(xiàn)輸入輸出功能將實現(xiàn)數(shù)據(jù)傳送操作的設(shè)備抽象成對象將“流〞作為設(shè)備〔如鍵盤、顯示器等〕和程序之間通訊的通道C++預(yù)定義的四個輸入輸出對象cout,標(biāo)準(zhǔn)輸出設(shè)備,即顯示器cin,標(biāo)準(zhǔn)輸入設(shè)備,即鍵盤cerr和clog代表標(biāo)準(zhǔn)錯誤流對象3.4用流進(jìn)行輸入輸出(2/3)通過cout流輸出數(shù)據(jù)
cout<<<表達(dá)式>;cout<<<表達(dá)式1><<<表達(dá)式2>...;
cout<<"WelcometoC++!\n";cout<<"123+456="<<(123+456) <<endl;3.4用流進(jìn)行輸入輸出(3/3)通過cin流輸入數(shù)據(jù)
cin>><變量>
cin>><變量1>>><變量2>...;
例子3:流輸入輸出例子//ex3_5.cpp#include<iostream.h>intmain(){ charc; inti; floatx,y; cout<<"Enter:\n"; cin>>i>>x>>y; c=i; cout<<"c="<<c<<"\ti="<<i; cout<<"\tx="<<x<<"\ty="<<y<<"\n"; return0;}3.5流操縱算子(1/4)流操縱算子——為流輸入輸出提供格式化輸入輸出的功能常用的流操縱算子流操縱算子功能描述setbase(b)以進(jìn)制基數(shù)b為輸出整數(shù)值setprecision(n)將浮點精度設(shè)置為nsetw(n)按照w個字符來讀或者寫flush刷新ostream緩沖區(qū)ends插入字符串結(jié)束符,然后刷新ostream緩沖區(qū)endl插入換行符,然后刷新ostream緩沖區(qū)ws跳過空白字符setfill(ch)用ch填充空白字符3.5流操縱算子(2/4)設(shè)置整數(shù)基數(shù)將整數(shù)按十進(jìn)制、八進(jìn)制和十六進(jìn)制等形式輸出流操縱算子oct——將整數(shù)輸出形式設(shè)置為八進(jìn)制流操縱算子hex——將整數(shù)輸出形式設(shè)置為十六進(jìn)制流操縱算子dec——將整數(shù)輸出形式設(shè)置為十進(jìn)制例子4:使用設(shè)置整數(shù)基數(shù)的流操縱算子#include<iostream.h>#include<iomanip.h>intmain(){intn;cout<<"Enteradecimalnumber:";cin>>n;cout<<n<<"inhexadecimalis:"<<hex<<n<<endl<<dec<<n<<"inoctalis:"<<oct<<n<<endl;return0;}
3.5流操縱算子(3/4)設(shè)置浮點數(shù)精度流操縱算子setprecision和函數(shù)precision都可控制浮點數(shù)小數(shù)點后面的位數(shù)例子5:使用設(shè)置浮點數(shù)精度的流操縱算子//ex3_7.cpp:設(shè)置浮點數(shù)精度的流操縱算子的使用#include<iostream.h>#include<iomanip.h>#include<math.h>intmain(){doublelog2=log(2.0);
intplaces;cout<<"log(2)withprecisions0-9.\n"<<"Precisionsetbythe"<<"precisionmemberfunction:"<<endl;
for(places=0;places<=9;places++){cout.precision(places);cout<<log2<<'\n';}例子5:使用設(shè)置浮點數(shù)精度的流操縱算子cout<<"\nPrecisionsetbythe"<<"setprecisionmanipulator:\n";
//使用setprecision算子
for(places=0;places<=9;places++)cout<<setprecision(places)<<log2<<'\n';return0;}3.5流操縱算子(4/4)設(shè)置域?qū)捄瘮?shù)width可以設(shè)置當(dāng)前域?qū)挕草斎胼敵龅淖址麛?shù)〕如果輸出的數(shù)據(jù)所需的寬度比設(shè)置的域?qū)捫?,空位用填充字符〔省缺為空格〕填充如果輸出的?shù)據(jù)所需的寬度比設(shè)置的域?qū)挻?,系統(tǒng)輸出所有位流操縱算子setw也可以設(shè)置域?qū)捓?:使用設(shè)置域?qū)挼牧鞑倏v算子//ex3_8.cpp:設(shè)置域?qū)挼牧鞑倏v算子的使用#include<iostream.h>#defineWIDTH5intmain(){intw=4;charstring[WIDTH+1];cout<<"Enterasentence:\n";cin.width(WIDTH);while(cin>>string){cout.width(w++);cout<<string<<endl;cin.width(WIDTH);}return0;}學(xué)習(xí)目的檢測掌握各種輸入輸出函數(shù)掌握通過I/O流進(jìn)行輸入輸出的方法作業(yè)3.83.13第04章控制結(jié)構(gòu)講授內(nèi)容順序結(jié)構(gòu):表達(dá)式語句和復(fù)合語句選擇結(jié)構(gòu):if語句、if-else語句和switch語句循環(huán)結(jié)構(gòu):while語句、do-while語句、for語句控制轉(zhuǎn)移語句:continue語句、break語句及goto語句4.1程序的根本控制結(jié)構(gòu)順序結(jié)構(gòu):包括表達(dá)式語句和復(fù)合語句等選擇結(jié)構(gòu):if語句、if-else語句、switch語句循環(huán)結(jié)構(gòu):while語句、do-while語句、for語句。其它:空語句、continue語句、break語句、goto語句、return語句4.2順序結(jié)構(gòu)(1/3)表達(dá)式語句表達(dá)式;表達(dá)式語句例如:a=a+3; //賦值語句x=y=z=0; //多重賦值語句t=2,t+x+a; //逗號表達(dá)式語句z=i<j?x:x+y;//條件表達(dá)式語句f1(); //函數(shù)調(diào)用語句x1=exp(x);//函數(shù)表達(dá)式語句,計算exx2=pow(x,y);//函數(shù)表達(dá)式語句,計算xy4.2順序結(jié)構(gòu)(2/3)空語句空語句的形式如下:;表達(dá)式語句和空語句例如:a=a+3; //賦值語句; //空語句4.2順序結(jié)構(gòu)(3/3)復(fù)合語句復(fù)合語句的語法:<復(fù)合語句>→‘{’<語句序列>‘}’<語句序列>→{<語句>}復(fù)合語句例如:{a=a+3; //賦值語句x=y=z=0; //多重賦值語句t=2,t+x+a; //逗號表達(dá)式語句z=i<j?x:x+y;//條件表達(dá)式語句}例子1:計算圓的周長和面積#include<iostream.h>#include<math.h>#definePI3.14intmain(){ doubleradius,area; radius=3.0; { doubleperimeter; perimeter=PI*2*radius; cout<<“Perimeteris:“<<perimeter<<"\n"; } area=PI*radius*radius; cout<<“Areaofthecircleis:“<<area<<"\n"; return0;}4.3選擇結(jié)構(gòu)(1/7)
if語句if(<條件表達(dá)式>)<語句><條件表達(dá)式>可以是任意表達(dá)式〔一般為邏輯表達(dá)式〕if語句例如:if(grade>=60)cout<<"passed\n";4.3選擇結(jié)構(gòu)(2/7)
if-else語句if(<條件表達(dá)式>)<語句1>else<語句2>if-else語句例如:if(grade>=60)cout<<"Passed!\n";elsecout<<"Failed!\n";(錯:elsecout<<"Failed!\n";)4.3選擇結(jié)構(gòu)(3/7)
if-else語句if或if-else的嵌套:if或if-else中嵌套if或if-elseif(grade>=90)printf(“A〞);elseif(grade>=80)printf(“B〞);elseif(grade>=70)printf(“C〞);elseif(grade>=60)printf(“D〞);elseprintf(“F〞);注意else和if的匹配:在if語句后面假設(shè)直接跟else,那么把if語句、else和其后的語句一起作為if-else語句4.3選擇結(jié)構(gòu)(4/7)
if-else語句if或if-else的嵌套:if或if-else中嵌套if或if-elseif(grade>=60)if(grade==100)printf(“AAA〞);elseif(grade==0)printf(“FFF〞);不等價于if(grade>=60){if(grade==100)printf(“AAA〞);}elseif(grade==0)printf(“FFF〞);4.3選擇結(jié)構(gòu)(5/7)
if-else語句復(fù)合語句應(yīng)用例如if(grade>=60)
printf(“Passed.\n〞);else{printf(“Failed.\n〞);printf(“Doyoutakethiscourseagain?y/n〞);cin>>answer;}4.3選擇結(jié)構(gòu)(6/7)
switch語句switch(<條件表達(dá)式>){case<常量表達(dá)式1>:<語句序列1>case<常量表達(dá)式2>:<語句序列2>……case<常量表達(dá)式n>:<語句序列n>default:<語句序列n+1>}多個case分支和可選的default分支<條件表達(dá)式>的值為整數(shù)類型〔int,char,…〕每個<語句序列>的最后一個語句一般為break語句,每個<語句序列>也可以為空4.3選擇結(jié)構(gòu)(7/7)
switch語句流程┇falsetrue計算條件表達(dá)式的值條件表達(dá)式的值==常量表達(dá)式1語句序列1falsetrue條件表達(dá)式的值==常量表達(dá)式2語句序列2falsetrue條件表達(dá)式的值==常量表達(dá)式n語句序列n語句序列n+1┇例子2:用switch語句實現(xiàn)成績轉(zhuǎn)換#include<iostream.h>
intmain(){ intscore;scorePhrase;
cout<<"Pleaseinputthescore:\n";cin>>score; if(score<0){ cout<<"Thescoreisillegal!"; return1; } scorePhrase=score/10; switch(scorePhrase) { case9: cout<<"Gradeis"<<'A'<<'.'<<endl; break;例子2:用switch語句實現(xiàn)成績轉(zhuǎn)換 case8: cout<<"Gradeis"<<'B'<<'.'<<endl; break; case7: cout<<"Gradeis"<<'C'<<'.'<<endl; break; case6: cout<<"Gradeis"<<'D'<<'.'<<endl; break; case0:case1:case2:case3:case4:case5: cout<<"Gradeis"<<'E'<<'.'<<endl; break; default: cout<<"Thescoreisillegal!"<<endl; }return0;}4.4循環(huán)結(jié)構(gòu)(1/13)
while語句while(<表達(dá)式>)
<語句><表達(dá)式>的值?<語句>非00例外:break等四個控制語句4.4循環(huán)結(jié)構(gòu)(2/13)
while語句 intproduct=2; while(product<=1000)
product=2*product;product<=1000product=2*producttruefalse例子3:while語句和switch語句的應(yīng)用/*計算各級成績的人數(shù)*/#include<stdio.h>intmain(){ intgrade; intaCount=0,bCount=0,cCount=0,dCount=0,fCount=0;printf("Enterthelettergrades.\n");printf("EnterEOFtoend.\n");while((grade=getchar())!=EOF){ switch(grade){ case'A':case'a':++aCount;break;例子3:while語句和switch語句的應(yīng)用case'B':case'b':++bCount;break;case'C':case'c':++cCount;break; case'D':case'd':++dCount;break;case'F':case'f':++fCount;break;case'\n':case'':break;例子3:while語句和switch語句的應(yīng)用default:printf("Incorrectlettergradeentered.");printf("Enteranewgrade.\n");break;}}printf("\nTotalsforeachgradeare:\n");printf("A:%d\n",aCount);printf("B:%d\n",bCount);printf("C:%d\n",cCount);printf("D:%d\n",dCount);printf("F:%d\n",fCount);return0;}程序運行結(jié)果Enterthelettergrades.EnterEOFtoend.ABCCADFCEIncorrectlettergradeentered.Enteranewgrade.DABTotalsforeachlettergradeare:A:3B:2C:3D:2F:14.4循環(huán)結(jié)構(gòu)(3/13)while語句典型應(yīng)用1:計數(shù)控制循環(huán)循環(huán)反復(fù)執(zhí)行,直到計數(shù)器到達(dá)特定的值,是定數(shù)循環(huán):即循環(huán)次數(shù)是的。例如:計算10個學(xué)生的平均成績例子4:計算10個學(xué)生的平均成績#include<stdio.h>intmain(){ intcounter,grade,total,average; total=0; counter=1; while(counter<=10){ printf("Entergrade:"); scanf(“%d",&grade); total=total+grade; counter=counter+1; } average=total/10; printf("Classaverageis%d\n",average); return0;}程序運行結(jié)果Entergrade:98Entergrade:76Entergrade:71Entergrade:87Entergrade:83Entergrade:90Entergrade:57Entergrade:79Entergrade:82Entergrade:94Classaverageis81
4.4循環(huán)結(jié)構(gòu)(4/13)while語句典型應(yīng)用2:條件控制循環(huán)問題能計算任意個數(shù)學(xué)生的平均成績學(xué)生人數(shù)未知,是不定數(shù)循環(huán)程序如何結(jié)束?使用條件控制當(dāng)用戶輸入信號量〔標(biāo)記值〕時,循環(huán)結(jié)束信號量不能和一般數(shù)據(jù)混淆:特殊數(shù)據(jù)例子5:計算N個學(xué)生的平均成績#include<stdio.h>intmain(){ floataverage; intcounter,grade,total; total=0; counter=0; printf("Entergrade,-1toend:"); scanf(“%d",&grade); while(grade!=-1){ total=total+grade; counter=counter+1; printf("Entergrade,-1toend:"); scanf(“%d",&grade);}例子5:計算N個學(xué)生的平均成績 /*terminationphase*/ if(counter!=0) { average=(float)total/counter; printf("Classaverageis%.2f",average);} else printf("Nogradeswereentered\n"); return0;}程序運行結(jié)果Entergrade,-1toend:75Entergrade,-1toend:94Entergrade,-1toend:97Entergrade,-1toend:88Entergrade,-1toend:70Entergrade,-1toend:64Entergrade,-1toend:83Entergrade,-1toend:89Entergrade,-1toend:-1Classaverageis82.50
4.4循環(huán)結(jié)構(gòu)(5/13)do-while語句 do
<語句>
while(<表達(dá)式>);<表達(dá)式>的值?<語句>非00例外:break等四個控制語句4.4循環(huán)結(jié)構(gòu)(6/13)do-while語句例如1 intcounter=1; do printf(“%d\n",counter); while(++counter<=10); 打印整數(shù)1到104.4循環(huán)結(jié)構(gòu)(7/13)do-while語句例如2 intcounter=1,sum=0; do sum=sum+counter; while(++counter<=100); counter=?sum=?4.4循環(huán)結(jié)構(gòu)(8/13)計數(shù)控制的循環(huán)舉例 intcounter=1; //初始化 while(counter<=10){//重復(fù)條件 printf(“%d\n〞,counter); ++counter; //遞增 }或 intcounter=0; //初始化 while(++counter<=10) printf(“%d\n〞,counter);4.4循環(huán)結(jié)構(gòu)(9/13)for語句
for(<初始化語句>;[<表達(dá)式2>];[<表達(dá)式3>])
<語句>
非00<初始化語句>[<表達(dá)式3>];<語句><表達(dá)式2>的值?當(dāng)<表達(dá)式2>省略時其值為1例外:break等四個控制語句4.4循環(huán)結(jié)構(gòu)(10/13)for語句例子1
int
counter; for(counter=1;counter<=10;counter++)
printf(“%d\n",counter);4.4循環(huán)結(jié)構(gòu)(11/13)for語句例子2
intcounter;
for(counter=1;counter<=10;counter++)
printf(“%d\n",counter); 打印整數(shù)1到10.4.4循環(huán)結(jié)構(gòu)(12/13)for語句例子3
inti,j; for(i=0,j=0;j+i<=10;j++,i++)
printf(“%d\n",j+i);4.4循環(huán)結(jié)構(gòu)(13/13)for語句和while語句的關(guān)系 假設(shè)<語句>中不含continue語句,那么 for(<表達(dá)式1>;<表達(dá)式2>;<表達(dá)式3>)
<語句>等價于: <表達(dá)式1>; while(<表達(dá)式2>){ <語句> <表達(dá)式3>;
}例子6:2到100的偶數(shù)求和/*for循環(huán)求和*/#include<stdio.h>intmain(){intsum=0,number;for(number=2;number<=100;number+=2)sum+=number;printf("Sumis%d\n",sum);return0;}4.5控制轉(zhuǎn)移語句(1/4)break語句 break;只能用于循環(huán)體或switch語句中,使程序控制退出while,for,do/while或switch結(jié)構(gòu)程序執(zhí)行這些語句的后繼語句break語句的用途提早退出循環(huán)跳出switch結(jié)構(gòu)4.5控制轉(zhuǎn)移語句(2/4)continue語句 continue;只能用于循環(huán)體中,跳過while,for或do/while循環(huán)體中的剩余語句程序開始執(zhí)行下一次循環(huán)while和do/whilecontinue語句執(zhí)行后,馬上測試循環(huán)條件for語句continue語句執(zhí)行后,
計算遞增表達(dá)式,然后測試循環(huán)條件例子7:在for循環(huán)結(jié)構(gòu)中使用break語句#include<stdio.h>intmain(){ intx;for(x=1;x<=10;x++){ if(x==5) break; printf("%d",x);}printf("\nBrokeoutofloopatx==%d\n",x);return0;}例子8:在for循環(huán)結(jié)構(gòu)中使用continue語句#include<stdio.h>intmain(){ intx;for(x=1;x<=10;x++){ if(x==5) continue; printf("%d",x);}printf("\nUsedcontinuetoskipprintingthe value5\n");return0;}4.5控制轉(zhuǎn)移語句(3/4)goto
語句
goto<標(biāo)號>;使程序控制轉(zhuǎn)移到前面帶有<標(biāo)號>:的語句繼續(xù)執(zhí)行<標(biāo)號>是一個非關(guān)鍵字標(biāo)識符,<標(biāo)號>:和goto<標(biāo)號>;必須出現(xiàn)在同一個函數(shù)體中,<標(biāo)號>:不能重復(fù)出現(xiàn)4.5控制轉(zhuǎn)移語句(4/4)return語句 return<表達(dá)式>;或return;在主函數(shù)體中執(zhí)行return語句,使整個程序結(jié)束在其它函數(shù)體中執(zhí)行return語句,返回到調(diào)用函數(shù)的相應(yīng)位置繼續(xù)執(zhí)行學(xué)習(xí)目的檢測掌握利用復(fù)合機(jī)制編寫較復(fù)雜類的方法理解this指針的作用、原理,了解類和對象的實現(xiàn)機(jī)制掌握使用this指針編寫能連續(xù)調(diào)用的成員函數(shù)的方法掌握const對象和const成員函數(shù)的定義和使用方法掌握編寫友元函數(shù)的方法掌握友元類的用法作業(yè)4.64.74.84.114.12第5章函數(shù)講授內(nèi)容函數(shù)的定義和函數(shù)原型函數(shù)調(diào)用和參數(shù)傳遞機(jī)制函數(shù)重載存儲類別和作用域遞歸函數(shù)設(shè)計和函數(shù)的遞歸調(diào)用類的復(fù)合預(yù)處理指令5.1模塊化程序設(shè)計(1/3)復(fù)雜問題一般可以分解為假設(shè)干稍簡單的問題每個問題的解決對應(yīng)一個模塊的求解解決復(fù)雜問題的系統(tǒng)一般由逐級抽象的諸模塊組成每個模塊是一個類或函數(shù)5.1模塊化程序設(shè)計(2/3)函數(shù)是C++程序構(gòu)成的根底任何C++程序至少包含一個函數(shù)——main()函數(shù)函數(shù)也是類的方法的實現(xiàn)手段函數(shù)的作用實現(xiàn)系統(tǒng)中按功能分解的各小任務(wù)實現(xiàn)類對象的方法C++程序的設(shè)計最終都落實到一個個函數(shù)的設(shè)計上5.1模塊化程序設(shè)計(3/3)函數(shù)是C++源程序的根本模塊C++中的函數(shù)包括兩類:預(yù)定義函數(shù),C++提供了豐富的庫函數(shù),程序員可以在自己的程序中直接使用用戶自定義函數(shù),用戶根據(jù)需要編寫的函數(shù)一個C++程序可包含多個文件,一個文件可包含多個函數(shù)5.2預(yù)定義函數(shù)的使用(1/2)C++提供了豐富的庫函數(shù),這些庫函數(shù)的聲明都放在相應(yīng)的頭文件中要使用這些庫函數(shù),必須先包括相應(yīng)的頭文件,然后直接使用例如:數(shù)學(xué)運算函數(shù)的聲明包含在math.h中,要使用這些函數(shù),程序中必須加上代碼#include<math.h>5.2預(yù)定義函數(shù)的使用(2/2)函數(shù)調(diào)用的一般過程先計算實參表達(dá)式的值然后將計算的結(jié)果交給被調(diào)用函數(shù)再執(zhí)行被調(diào)用函數(shù)的代碼,直至返回語句return或到函數(shù)尾最后程序控制返回到函數(shù)的調(diào)用處,繼續(xù)執(zhí)行printf(“%.2f〞,sqrt(900.0));的執(zhí)行過程以900.0為參數(shù)調(diào)用sqrt函數(shù),得到返回結(jié)果30.0以"%.2f"和30.0為參數(shù)調(diào)用printf函數(shù),實現(xiàn)格式化輸出5.3函數(shù)定義與函數(shù)原型函數(shù)模塊化所有在函數(shù)體中說明的變量都是局部變量僅在定義的函數(shù)中有效參數(shù)函數(shù)間傳遞信息局部變量5.3函數(shù)定義與函數(shù)原型函數(shù)的優(yōu)點分而治之有利于程序開發(fā)防止代碼重復(fù)軟件重用重用已有的函數(shù)來構(gòu)造新的程序抽象-隱蔽內(nèi)部的細(xì)節(jié)例子1:函數(shù)舉例#include<stdio.h>intmaximum(int,int,int);/*functionprototype*/intmain(){inta,b,c;printf("Enterthreeintegers:");scanf("%d%d%d",&a,&b,&c);printf("Maximumis:%d\n",maximum(a,b,c));return0;}/*Functionmaximumdefinition*/intmaximum(intx,inty,intz){intmax=x;if(y>max)max=y;if(z>max)max=z;returnmax;}例子2:函數(shù)舉例#include<stdio.h>intmaximum(int,int,int);intmain(){inta,b,c,max;printf("Enterthreeintegers:");scanf("%d%d%d",&a,&b,&c);max=maximum(a,b,c);printf("Maximumis:%d\n",max);return0;}intmaximum(intx,inty,intz){intmax=x;if(y>max)max=y;if(z>max)max=z;returnmax;}例子3:函數(shù)舉例#include<stdio.h>intmaximum(intx,inty,intz){intmax=x;if(y>max)max=y;if(z>max)max=z;returnmax;}intmain(){inta,b,c,max;printf("Enterthreeintegers:");scanf("%d%d%d",&a,&b,&c);
max=maximum(a,b,c);printf("Maximumis:%d\n",max);return0;}例子4:函數(shù)舉例#include<stdio.h>voidmaximum(int,int,int);intmain(){inta,b,c,max;printf("Enterthreeintegers:");scanf("%d%d%d",&a,&b,&c);maximum(a,b,c);
return0;}voidmaximum(intx,inty,intz){intmax=x;if(y>max)max=y;if(z>max)max=z;printf("Maximumis:%d\n",max);return;/*isnotnecessary*/}例子5:函數(shù)舉例#include<stdio.h>voidmaximum(intx,inty,intz){intmax=x;if(y>max)max=y;if(z>max)max=z;printf("Maximumis:%d\n",max);return;/*isnotnecessary*/}intmain(){inta,b,c,max;printf("Enterthreeintegers:");scanf("%d%d%d",&a,&b,&c);maximum(a,b,c);
maximum(12,23,55);return0;}例子6:函數(shù)舉例#include<stdio.h>intmaximum(intx,inty,intz){intmax=x;if(y>max)max=y;if(z>max)max=z;printf("Maximumis:%d\n",max);return0;/*necessary*/}intmain(){inta,b,c,max;printf("Enterthreeintegers:");scanf("%d%d%d",&a,&b,&c);maximum(a,b,c);
maximum(12,23,55);
return0;}例子7:函數(shù)舉例#include<stdio.h>voidmaximum(int&,int&,int&);intmain(){inta,b,c,max;printf("Enterthreeintegers:");scanf("%d%d%d",&a,&b,&c);maximum(a,b,c);/*maximum(12,23,55);?*/return0;}voidmaximum(int&x,int&y,int&z){intmax=x;if(y>max)max=y;if(z>max)max=z;printf("Maximumis:%d\n",max);return;/*isnotnecessary*/}例子8:函數(shù)舉例#include<stdio.h>voidmaximum(int&,int&,int&);intmain(){inta,b,c,max;printf("Enterthreeintegers:");scanf("%d%d%d",&a,&b,&c);maximum(a,b,c);/*maximum(12,23,55);?*/return0;}voidmaximum(int&x,int&y,int&z){if(y>x)x=y;if(z>x)x=z;printf("Maximumis:%d\n",x);return;/*isnotnecessary*/}例子9:函數(shù)舉例#include<stdio.h>voidmaximum(int,int,int);intmain(){inta,b,c,max;printf("Enterthreeintegers:");scanf("%d%d%d",&a,&b,&c);maximum(a,b,c);retu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年版餐廳股權(quán)轉(zhuǎn)讓協(xié)議書
- 2025年度綠色環(huán)保水電安裝項目合同書3篇
- 2025年度汽車吊機(jī)租賃及吊裝作業(yè)現(xiàn)場應(yīng)急預(yù)案合同3篇
- 2024年股權(quán)轉(zhuǎn)讓之擔(dān)保協(xié)議要覽
- 2025年度消防工程應(yīng)急物資儲備與供應(yīng)合同3篇
- 2025年度水暖設(shè)備研發(fā)、生產(chǎn)、銷售與售后一體化承包合同3篇
- 二零二五年度光伏發(fā)電站建設(shè)項目合同3篇
- 2025年度虛擬偶像創(chuàng)作軟件銷售合同范本2篇
- 地面施工冬季施工方案(7篇)
- 春節(jié)放假的通知匯編9篇資料
- GB/T 5130-1997電氣用熱固性樹脂工業(yè)硬質(zhì)層壓板試驗方法
- FZ/T 01041-2014絨毛織物絨毛長度和絨毛高度的測定
- 《經(jīng)濟(jì)學(xué)導(dǎo)論》考試復(fù)習(xí)題庫(含答案)
- 農(nóng)田水利渠道灌溉與排水課件
- 精品解析浙教版科學(xué) 九年級上冊 3.43 簡單機(jī)械之機(jī)械效率 同步練習(xí)
- 六棱塊護(hù)坡施工方案
- 機(jī)械制圖課件(完整版)
- 夸美紐斯-大教學(xué)論-文本細(xì)讀
- 《行政組織學(xué)小抄》word版
- 日立多聯(lián)機(jī)系統(tǒng)調(diào)試培訓(xùn)教材
- (完整版)環(huán)境科學(xué)與工程-專業(yè)英語詞匯必備(免費)
評論
0/150
提交評論