C語(yǔ)言程序設(shè)計(jì)上_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)上_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)上_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)上_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)上_第5頁(yè)
已閱讀5頁(yè),還剩235頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

會(huì)計(jì)學(xué)1C語(yǔ)言程序設(shè)計(jì)上第1章計(jì)算機(jī)與程序設(shè)計(jì)第1頁(yè)/共240頁(yè)講授內(nèi)容計(jì)算機(jī)系統(tǒng)的基本組成、工作原理程序設(shè)計(jì)的基本過(guò)程和方法程序設(shè)計(jì)語(yǔ)言基本概念及其發(fā)展歷史結(jié)構(gòu)化程序設(shè)計(jì)和面向?qū)ο蟪绦蛟O(shè)計(jì)方法典型的C++編程環(huán)境、開(kāi)發(fā)過(guò)程和程序結(jié)構(gòu)程序設(shè)計(jì)風(fēng)格第2頁(yè)/共240頁(yè)1.1計(jì)算機(jī)系統(tǒng)概述(1/4)計(jì)算機(jī)系統(tǒng)機(jī)器系統(tǒng)能接收和存儲(chǔ)信息能對(duì)數(shù)據(jù)進(jìn)行處理和計(jì)算能輸出結(jié)果計(jì)算機(jī)系統(tǒng)由硬件系統(tǒng)和軟件系統(tǒng)組成硬件系統(tǒng)包括CPU、顯示器、內(nèi)存、硬盤(pán)、鍵盤(pán)等軟件系統(tǒng)包括各種程序和文檔第3頁(yè)/共240頁(yè)1.1計(jì)算機(jī)系統(tǒng)概述(2/4)計(jì)算機(jī)硬件——是軟件實(shí)現(xiàn)的基礎(chǔ)運(yùn)算器——對(duì)數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算和邏輯運(yùn)算主存儲(chǔ)器——存儲(chǔ)二進(jìn)制信息,與運(yùn)算器、控制器等直接交換信息控制器——按程序的要求,控制計(jì)算機(jī)各功能部件協(xié)調(diào)一致地動(dòng)作控制器+運(yùn)算器=中央處理器中央處理器+主存儲(chǔ)器=處理機(jī)第4頁(yè)/共240頁(yè)1.1計(jì)算機(jī)系統(tǒng)概述(3/4)計(jì)算機(jī)硬件——是軟件實(shí)現(xiàn)的基礎(chǔ)輸入設(shè)備——將用戶(hù)信息(數(shù)據(jù)、程序等)變換為計(jì)算機(jī)能識(shí)別和處理的信息形式輸出設(shè)備——將計(jì)算機(jī)中二進(jìn)制信息變換為用戶(hù)所需要并能識(shí)別的信息形式輔助存儲(chǔ)器——存儲(chǔ)主存儲(chǔ)器難以容納、又為程序執(zhí)行所需要的大量文件信息第5頁(yè)/共240頁(yè)1.1計(jì)算機(jī)系統(tǒng)概述(4/4)計(jì)算機(jī)軟件——計(jì)算機(jī)系統(tǒng)中的指揮者系統(tǒng)軟件——最靠近硬件,如編譯程序和操作系統(tǒng)等支撐軟件——支撐其它軟件的開(kāi)發(fā)和維護(hù),如各種數(shù)據(jù)庫(kù)管理系統(tǒng)、接口軟件和工具組應(yīng)用軟件——用于特定應(yīng)用領(lǐng)域,如財(cái)務(wù)管理系統(tǒng)上述分類(lèi)是交叉和變化的一個(gè)軟件可以在一個(gè)系統(tǒng)中是系統(tǒng)軟件,在另一個(gè)系統(tǒng)中是支撐軟件在同一系統(tǒng)中,一個(gè)軟件可以既是系統(tǒng)軟件,也是支撐軟件第6頁(yè)/共240頁(yè)1.2程序設(shè)計(jì)基本概念(1/6)問(wèn)題求解過(guò)程步驟問(wèn)題定義——明確要解決的問(wèn)題算法設(shè)計(jì)——把要求解的問(wèn)題轉(zhuǎn)化為計(jì)算機(jī)的解題步驟程序編碼——對(duì)設(shè)計(jì)出來(lái)的算法實(shí)現(xiàn)進(jìn)行編程實(shí)現(xiàn)測(cè)試和調(diào)試——發(fā)現(xiàn)和糾正程序中的錯(cuò)誤第7頁(yè)/共240頁(yè)1.2程序設(shè)計(jì)基本概念(2/6)算法與程序算法——由有限個(gè)步驟組成的求解問(wèn)題的方法算法的特點(diǎn)有窮性:執(zhí)行有窮個(gè)步驟后必須終止確定性:每一個(gè)步驟必須是無(wú)二義的能行性:每一個(gè)步驟都可以在有限時(shí)間內(nèi)做完輸入:一般有輸入信息輸出:一般有一個(gè)或多個(gè)輸出信息第8頁(yè)/共240頁(yè)1.2程序設(shè)計(jì)基本概念(3/6)算法的描述方式文字描述自然語(yǔ)言圖形描述流程圖、盒圖,PAD圖等程序語(yǔ)言描述計(jì)算機(jī)程序,如C++第9頁(yè)/共240頁(yè)1.2程序設(shè)計(jì)基本概念(4/6)程序的組成數(shù)據(jù)數(shù)據(jù)結(jié)構(gòu),程序處理的數(shù)據(jù)操作處理數(shù)據(jù)的操作步驟,即算法程序=數(shù)據(jù)結(jié)構(gòu)+算法第10頁(yè)/共240頁(yè)1.2程序設(shè)計(jì)基本概念(5/6)程序設(shè)計(jì)和程序編碼先設(shè)計(jì),后編碼設(shè)計(jì)是基礎(chǔ),是編碼的依據(jù)設(shè)計(jì)的好壞影響代碼的質(zhì)量第11頁(yè)/共240頁(yè)1.2程序設(shè)計(jì)基本概念(6/6)程序設(shè)計(jì)語(yǔ)言描述數(shù)據(jù)和對(duì)數(shù)據(jù)的操作機(jī)器語(yǔ)言用機(jī)器基本指令編碼,二進(jìn)制形式匯編語(yǔ)言使用一組助記符編碼,需要匯編才能運(yùn)行高級(jí)語(yǔ)言表示方法更接近于待解問(wèn)題的表示方法,需要編譯才能運(yùn)行第12頁(yè)/共240頁(yè)1.3程序設(shè)計(jì)方法(1/4)結(jié)構(gòu)化程序設(shè)計(jì)任何程序邏輯都可以用順序、選擇和循環(huán)三種基本結(jié)構(gòu)表示第13頁(yè)/共240頁(yè)1.3程序設(shè)計(jì)方法(2/4)結(jié)構(gòu)化程序設(shè)計(jì)自頂向下,逐步求精描述問(wèn)題,分析問(wèn)題,分解問(wèn)題成相對(duì)獨(dú)立的子問(wèn)題(反復(fù)進(jìn)行,逐步分解)描述子問(wèn)題的數(shù)據(jù)和操作模塊化原則盡量采用典型基本控制結(jié)構(gòu):順序、選擇、循環(huán)缺點(diǎn)(對(duì)于大型軟件開(kāi)發(fā))穩(wěn)定性低、可修改性和可重用性差第14頁(yè)/共240頁(yè)1.3程序設(shè)計(jì)方法(3/4)面向?qū)ο蟪绦蛟O(shè)計(jì)面向問(wèn)題現(xiàn)實(shí)世界是由對(duì)象組成的問(wèn)題由哪些對(duì)象組成?對(duì)象之間如何相互作用?結(jié)構(gòu)化程序由函數(shù)組成,面向?qū)ο蟪绦蛴蓪?duì)象組成易于擴(kuò)展、可維護(hù)性好第15頁(yè)/共240頁(yè)1.3程序設(shè)計(jì)方法(4/4)面向?qū)ο蠓治龊驮O(shè)計(jì)步驟找出問(wèn)題中的對(duì)象和類(lèi)確定每個(gè)對(duì)象應(yīng)具備的屬性和功能確定類(lèi)、對(duì)象之間關(guān)系,相互作用的方式用程序代碼實(shí)現(xiàn)這些對(duì)象和類(lèi)第16頁(yè)/共240頁(yè)1.4C與C++(1/3)C語(yǔ)言的歷史起源于Algol60在Algol60的基礎(chǔ)上發(fā)展出CPL語(yǔ)言1967年發(fā)展為BCPL,用于編寫(xiě)操作系統(tǒng)和編譯器1970年貝爾實(shí)驗(yàn)室將BCPL改良成B,并用B語(yǔ)言實(shí)現(xiàn)了第一個(gè)UNIX操作系統(tǒng)1972年左右,DennisRitchie和KenThompson在貝爾實(shí)驗(yàn)室設(shè)計(jì)UNIX系統(tǒng)時(shí),開(kāi)發(fā)出了C語(yǔ)言之后,C語(yǔ)言發(fā)展出很多版本1988年,美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)(ANSI)制定了C的標(biāo)準(zhǔn)——ANSIC第17頁(yè)/共240頁(yè)1.4C與C++(2/3)C語(yǔ)言的特點(diǎn)數(shù)據(jù)類(lèi)型豐富運(yùn)算符豐富,共34個(gè)運(yùn)算符支持結(jié)構(gòu)化程序設(shè)計(jì)方便、靈活,結(jié)合了高級(jí)語(yǔ)言的基本結(jié)構(gòu)、語(yǔ)句和低級(jí)語(yǔ)言的實(shí)用性程序生成代碼質(zhì)量高、程序執(zhí)行效率高可移植性好,可用于UNIX、AIX、WINDOWS等操作系統(tǒng)第18頁(yè)/共240頁(yè)1.4C與C++(3/3)C++語(yǔ)言在C語(yǔ)言中引入了面向?qū)ο蟮乃枷胧且环N混合型的語(yǔ)言,同時(shí)支持結(jié)構(gòu)化程序設(shè)計(jì)和面向?qū)ο蟪绦蛟O(shè)計(jì)方法兼容C語(yǔ)言,可不加修改地使用C語(yǔ)言代碼允許數(shù)據(jù)抽象,支持封裝、繼承和多態(tài)等特征第19頁(yè)/共240頁(yè)1.5C++編程簡(jiǎn)介使用IDE開(kāi)發(fā)C++程序編輯(edit)預(yù)處理(preprocess)編譯(compile)連接(link)裝入(load)執(zhí)行(execute)第20頁(yè)/共240頁(yè)例子1:C++程序:輸入一個(gè)人的姓名,然后輸出"HELLO,***//ex1_2.cpp:輸入姓名,然后在屏幕輸出問(wèn)候信息。#include<iostream.h>intmain(){charname[20];//輸出提示信息cout<<"Pleaseinputyourname:";

cin>>name;//輸入姓名//輸出信息,并使用\n換行

cout<<"HELLO,"<<name<<"!\n";

return0;//指示程序運(yùn)行}第21頁(yè)/共240頁(yè)1.6程序設(shè)計(jì)風(fēng)格(1/2)用好的設(shè)計(jì)方法編寫(xiě)結(jié)構(gòu)好的程序提高程序的可讀性、可理解性和可修改性,以利于程序查錯(cuò)、測(cè)試及維護(hù)程序員要養(yǎng)成良好的程序設(shè)計(jì)風(fēng)格第22頁(yè)/共240頁(yè)1.6程序設(shè)計(jì)風(fēng)格(2/2)注意點(diǎn)以簡(jiǎn)潔明了的方式編寫(xiě)C++程序縮排規(guī)則標(biāo)識(shí)符命名規(guī)則注釋輸出信息直觀清晰,布局合理第23頁(yè)/共240頁(yè)學(xué)習(xí)目的檢測(cè)了解計(jì)算機(jī)系統(tǒng)、程序設(shè)計(jì)語(yǔ)言、程序設(shè)計(jì)的基本概念掌握簡(jiǎn)單C++程序的結(jié)構(gòu)明確程序設(shè)計(jì)風(fēng)格的意義第24頁(yè)/共240頁(yè)作業(yè)1.21.31.71.9第25頁(yè)/共240頁(yè)第2章數(shù)據(jù)類(lèi)型、運(yùn)算符與表達(dá)式第26頁(yè)/共240頁(yè)講授內(nèi)容C++語(yǔ)言的基本元素、字符集和關(guān)鍵字基本的數(shù)據(jù)類(lèi)型的表示方法常量和變量類(lèi)型轉(zhuǎn)換各種運(yùn)算符與表達(dá)式第27頁(yè)/共240頁(yè)2.1C++的字符集和關(guān)鍵字(1/2)字符集由52個(gè)字母、10個(gè)數(shù)字、27個(gè)特殊字符組成所有C++程序(忽略換行符和字符串常量中的內(nèi)容)都由字符集中的字符按一定規(guī)則構(gòu)成第28頁(yè)/共240頁(yè)2.1C++的字符集和關(guān)鍵字(2/2)C++標(biāo)識(shí)符是滿(mǎn)足如下條件的一串字符由字母(a~z,A~Z)或下劃線(_)開(kāi)頭;其它部分可以由字母、下劃線或數(shù)字(0~9)組成;只有前32個(gè)字符有效;C++的63個(gè)關(guān)鍵字也是標(biāo)識(shí)符,但不能作其它用(保留字)第29頁(yè)/共240頁(yè)2.2 基本數(shù)據(jù)類(lèi)型(1/5)C++程序中的每個(gè)數(shù)據(jù)對(duì)象(如2、x1、x1+2)都有確定的數(shù)據(jù)類(lèi)型C++的數(shù)據(jù)類(lèi)型包括基本數(shù)據(jù)類(lèi)型和復(fù)合數(shù)據(jù)類(lèi)型基本數(shù)據(jù)類(lèi)型有整型、浮點(diǎn)型、字符型、布爾型不同數(shù)據(jù)類(lèi)型有自己的取值范圍和所允許的操作第30頁(yè)/共240頁(yè)2.2 基本數(shù)據(jù)類(lèi)型(2/5)整型signedshortint(簡(jiǎn)寫(xiě)為short)signedint(簡(jiǎn)寫(xiě)為int)signedlongint(簡(jiǎn)寫(xiě)為long)unsignedshortint(簡(jiǎn)寫(xiě)為unsignedshort)unsignedint(簡(jiǎn)寫(xiě)為unsigned)unsignedlongint(簡(jiǎn)寫(xiě)為unsignedlong)第31頁(yè)/共240頁(yè)2.2 基本數(shù)據(jù)類(lèi)型(3/5)浮點(diǎn)型float(浮點(diǎn)型)double(雙精度型)longdouble(長(zhǎng)雙精度型)均有符號(hào)不允許的操作:取余%、位運(yùn)算等第32頁(yè)/共240頁(yè)2.2 基本數(shù)據(jù)類(lèi)型(4/5)字符型charsignedcharunsignedchar實(shí)質(zhì)是占一個(gè)字節(jié)的整型數(shù)(小整數(shù))允許的操作:和整型相同第33頁(yè)/共240頁(yè)2.2 基本數(shù)據(jù)類(lèi)型(5/5)布爾型bool值為true和false可以當(dāng)作整數(shù)用(true一般為1,false為0)把其它類(lèi)型的值轉(zhuǎn)換為布爾值時(shí),非零值轉(zhuǎn)換為true,零值轉(zhuǎn)換為false第34頁(yè)/共240頁(yè)2.3 變量與常量(1/9)函數(shù)體說(shuō)明語(yǔ)句類(lèi)型名、變量、常量表達(dá)式執(zhí)行語(yǔ)句表達(dá)式變量、常量、運(yùn)算符第35頁(yè)/共240頁(yè)2.3 變量與常量(2/9)擴(kuò)充的巴克斯范式表示語(yǔ)法(全書(shū)統(tǒng)一,不涉及語(yǔ)義)<非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<整型后綴>→<無(wú)符號(hào)整型后綴>[<長(zhǎng)整型后綴>]|<長(zhǎng)整型后綴>[<無(wú)符號(hào)整型后綴>]<無(wú)符號(hào)整型后綴>→u|U<長(zhǎng)整型后綴>→l|L<八進(jìn)制整型常量>→0<八進(jìn)制數(shù)字>{<八進(jìn)制數(shù)字>}第36頁(yè)/共240頁(yè)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|9第37頁(yè)/共240頁(yè)2.3 變量與常量(4/9)擴(kuò)充的巴克斯范式<浮點(diǎn)常量>→<尾數(shù)部分>[<指數(shù)部分>][<浮點(diǎn)后綴>]|<數(shù)字串><指數(shù)部分>[<浮點(diǎn)后綴>]<尾數(shù)部分>→[<數(shù)字串>].<數(shù)字串>|<數(shù)字串>.

<指數(shù)部分>→e[<符號(hào)>]<數(shù)字串>|E[<符號(hào)>]<數(shù)字串><符號(hào)>→+|-<數(shù)字串>→<數(shù)字>{<數(shù)字>}<浮點(diǎn)后綴>→f|l|F|L第38頁(yè)/共240頁(yè)2.3 變量與常量(5/9)擴(kuò)充的巴克斯范式<字符型常量>→‘<c字符>’

<c字符>→字符集中除單引號(hào)’、反斜線\外的任意字符|<轉(zhuǎn)義序列><轉(zhuǎn)義序列>→<簡(jiǎn)單轉(zhuǎn)義序列>|<八進(jìn)制轉(zhuǎn)義序列>|<十六進(jìn)制轉(zhuǎn)義序列><簡(jiǎ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ù)字>}第39頁(yè)/共240頁(yè)2.3 變量與常量(6/9)擴(kuò)充的巴克斯范式<字符串常量>→“[<s字符序列>]”

<s字符序列>→<s字符>{<s字符>}<s字符>→字符集中除雙引號(hào)“、反斜線\外的任意字符|其它可顯示字符|<轉(zhuǎn)義序列>第40頁(yè)/共240頁(yè)2.3 變量與常量(7/9)變量四要素:變量名、類(lèi)型、存儲(chǔ)空間、值必須先聲明后使用,一般聲明形式為:<變量聲明>→<存儲(chǔ)類(lèi)別描述符><類(lèi)型描述符><變量表><存儲(chǔ)類(lèi)別描述符>→auto|register|static|extern<類(lèi)型描述符>→<類(lèi)型名><變量表>→<標(biāo)識(shí)符列表><標(biāo)識(shí)符列表>→<非關(guān)鍵字標(biāo)識(shí)符>{,<非關(guān)鍵字標(biāo)識(shí)符>}第41頁(yè)/共240頁(yè)2.3 變量與常量(8/9)符號(hào)常量符號(hào)常量是經(jīng)過(guò)定義的代表常量的標(biāo)識(shí)符C++定義符號(hào)常量的格式如下:#define<標(biāo)識(shí)符><常量>#define是C++的預(yù)處理指令,說(shuō)明程序中的<標(biāo)識(shí)符>都代表了<常量>。第42頁(yè)/共240頁(yè)2.3 變量與常量(9/9)例子:#definePRICE30#include<iostream.h>main(){intnum,total;num=10;total=num*PRICE;cout<<"total="<<total<<endl;return0;}第43頁(yè)/共240頁(yè)2.4 類(lèi)型轉(zhuǎn)換(1/4)舉例(int)3.14將3.14轉(zhuǎn)換成整數(shù)3(double)3將3轉(zhuǎn)換成雙精度浮點(diǎn)數(shù)3.0double(3)將3轉(zhuǎn)換成雙精度浮點(diǎn)數(shù)3.0第44頁(yè)/共240頁(yè)2.4 類(lèi)型轉(zhuǎn)換(2/4)提升規(guī)則將數(shù)值轉(zhuǎn)換成較低的類(lèi)型,如從float到int必須顯式地使用類(lèi)型轉(zhuǎn)換,如(int)3.14;將數(shù)值轉(zhuǎn)換成較高的類(lèi)型可以通過(guò)隱式的類(lèi)型轉(zhuǎn)換,如3.14+2第45頁(yè)/共240頁(yè)2.4 類(lèi)型轉(zhuǎn)換(3/4)隱式類(lèi)型轉(zhuǎn)換表達(dá)式中運(yùn)算符的操作數(shù)類(lèi)型與要求不符時(shí),要進(jìn)行隱式類(lèi)型轉(zhuǎn)換,使之符合要求隱式類(lèi)型轉(zhuǎn)換規(guī)則:(1)表達(dá)式中如有char、short和enum類(lèi)型的數(shù)據(jù)時(shí),自動(dòng)將它們轉(zhuǎn)換成int類(lèi)型(2)把表達(dá)式中不同類(lèi)型的數(shù)據(jù)轉(zhuǎn)換成精度最高、占用內(nèi)存最多的那個(gè)數(shù)據(jù)的類(lèi)型在賦值表達(dá)式中,自動(dòng)將賦值運(yùn)算符右邊表達(dá)式的值的類(lèi)型轉(zhuǎn)換成左邊變量的類(lèi)型第46頁(yè)/共240頁(yè)2.4 類(lèi)型轉(zhuǎn)換(4/4)強(qiáng)制類(lèi)型轉(zhuǎn)換(顯式類(lèi)型轉(zhuǎn)換)形式為:(<類(lèi)型>)<表達(dá)式>或

<類(lèi)型>(<表達(dá)式>)例如:(double)3/2或double(3)/2(double)(3/2)或double(3/2)第47頁(yè)/共240頁(yè)2.5 運(yùn)算符和表達(dá)式(1/11)運(yùn)算符的優(yōu)先級(jí)和結(jié)合性運(yùn)算符包括:算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、賦值運(yùn)算符根據(jù)組成表達(dá)式的運(yùn)算符的不同,表達(dá)式可以分為算術(shù)表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式、位運(yùn)算表達(dá)式、逗號(hào)表達(dá)式和賦值表達(dá)式第48頁(yè)/共240頁(yè)2.5 運(yùn)算符和表達(dá)式(2/11)算術(shù)運(yùn)算之一:一元算術(shù)運(yùn)算+正,運(yùn)算結(jié)果同操作數(shù)-負(fù),運(yùn)算結(jié)果為操作數(shù)的負(fù)數(shù)++自增運(yùn)算符;操作數(shù)的位置?--自減運(yùn)算符第49頁(yè)/共240頁(yè)2.5 運(yùn)算符和表達(dá)式(3/11)算術(shù)運(yùn)算之一:基本算術(shù)運(yùn)算(二元)+加法,運(yùn)算結(jié)果為兩個(gè)操作數(shù)的和-減法,運(yùn)算結(jié)果為左操作數(shù)減去右操作數(shù)的差*乘法,運(yùn)算結(jié)果為兩個(gè)操作數(shù)的乘積/除法,運(yùn)算結(jié)果為左操作數(shù)除以右操作數(shù)的商%求余,運(yùn)算結(jié)果為左操作數(shù)除以右操作數(shù)的余數(shù),只用于整型數(shù)據(jù),其結(jié)果也是整型第50頁(yè)/共240頁(yè)2.5 運(yùn)算符和表達(dá)式(4/11)算術(shù)運(yùn)算之一:基本算術(shù)運(yùn)算兩個(gè)整數(shù)作/運(yùn)算,其結(jié)果為整數(shù)具體結(jié)果依賴(lài)于具體機(jī)器,一般為直接截去小數(shù)部分兩個(gè)整數(shù)求余%如果兩數(shù)都是正數(shù),結(jié)果為正否則結(jié)果與左操作數(shù)的符號(hào)一致(MicrosoftC++)

第51頁(yè)/共240頁(yè)2.5 運(yùn)算符和表達(dá)式(5/11)算術(shù)表達(dá)式<算術(shù)表達(dá)式>

→<常量>|<變量>|+<操作數(shù)>|-<操作數(shù)>|<操作數(shù)>++|++<操作數(shù)>|<操作數(shù)>--|--<操作數(shù)>|<操作數(shù)><二元算術(shù)運(yùn)算符><操作數(shù)>|(<算術(shù)表達(dá)式>)<操作數(shù)>

→<表達(dá)式>第52頁(yè)/共240頁(yè)2.5 運(yùn)算符和表達(dá)式(6/11)關(guān)系運(yùn)算<關(guān)系表達(dá)式>

→<操作數(shù)><關(guān)系運(yùn)算符><操作數(shù)><關(guān)系運(yùn)算符>→<|>|<=|>=|==|!=第53頁(yè)/共240頁(yè)2.5 運(yùn)算符和表達(dá)式(7/11)邏輯運(yùn)算<邏輯表達(dá)式>→<布爾型常量>|<布爾型變量>|<關(guān)系表達(dá)式>|<操作數(shù)>&&<操作數(shù)>|<操作數(shù)>||<操作數(shù)>|!<邏輯表達(dá)式>|(<邏輯表達(dá)式>)!、||、&&的優(yōu)先級(jí)和結(jié)合性邏輯表達(dá)式的“短路計(jì)算法”(慎用自增、自減)第54頁(yè)/共240頁(yè)2.5 運(yùn)算符和表達(dá)式(8/11)位運(yùn)算<位運(yùn)算表達(dá)式>→~<操作數(shù)>|<操作數(shù)>&<操作數(shù)>|<操作數(shù)>|<操作數(shù)>|<操作數(shù)>^<操作數(shù)>|<操作數(shù)><<<操作數(shù)>|<操作數(shù)>>><操作數(shù)>操作數(shù)只能是整型或字符型數(shù)據(jù),結(jié)果亦然符號(hào)位參加運(yùn)算向右移位運(yùn)算,但左操作數(shù)是負(fù)數(shù)時(shí),高位填0或1第55頁(yè)/共240頁(yè)2.5 運(yùn)算符和表達(dá)式(9/11)逗號(hào)運(yùn)算<逗號(hào)表達(dá)式>→<表達(dá)式>,<表達(dá)式>二元運(yùn)算,左結(jié)合先左后右計(jì)算表達(dá)式的值,取右表達(dá)式的值為運(yùn)算結(jié)果逗號(hào)的左、右表達(dá)式作為逗號(hào)運(yùn)算符的操作數(shù),類(lèi)型可以不同第56頁(yè)/共240頁(yè)2.5 運(yùn)算符和表達(dá)式(10/11)賦值運(yùn)算<賦值表達(dá)式>→<變量><賦值運(yùn)算符><表達(dá)式><賦值運(yùn)算符>→=|*=|/=|%=|+=|-=|>>=|<<=|&=|^=||=二元運(yùn)算,右結(jié)合<變量>可以是由標(biāo)識(shí)符表示的變量,也可以是數(shù)組元素或指針指向的存儲(chǔ)空間(“左值性質(zhì)”)賦值運(yùn)算可用于變量初始化,運(yùn)算符右邊的表達(dá)式需編譯時(shí)可計(jì)算第57頁(yè)/共240頁(yè)2.5 運(yùn)算符和表達(dá)式(11/11)條件運(yùn)算符

<表達(dá)式1>?<表達(dá)式2>:<表達(dá)式3>三元運(yùn)算運(yùn)算符的操作數(shù)類(lèi)型可以不同第58頁(yè)/共240頁(yè)學(xué)習(xí)目的檢測(cè)理解字符集、標(biāo)識(shí)符和關(guān)鍵字的意義掌握基本數(shù)據(jù)類(lèi)型的定義及不同數(shù)據(jù)類(lèi)型之間的轉(zhuǎn)換機(jī)制掌握各種常量的性質(zhì)和定義掌握變量的聲明方法熟練運(yùn)用各種運(yùn)算符與表達(dá)式第59頁(yè)/共240頁(yè)作業(yè)2.8、2.10、2.11、2.12、2.14、2.15、2.16、2.18、2.19第60頁(yè)/共240頁(yè)第3章輸入和輸出第61頁(yè)/共240頁(yè)講授內(nèi)容標(biāo)準(zhǔn)輸入輸出函數(shù)格式化輸入輸出函數(shù)通過(guò)流進(jìn)行輸入輸出第62頁(yè)/共240頁(yè)3.1C++的輸入和輸出兩種I/O方式保留自C的——通過(guò)標(biāo)準(zhǔn)的I/O函數(shù)實(shí)現(xiàn)面向?qū)ο蟮摹?lèi)型安全的,編譯器對(duì)輸入輸出操作做嚴(yán)格的類(lèi)型檢查建議盡量使用面向?qū)ο蟮腎/O方式第63頁(yè)/共240頁(yè)3.2標(biāo)準(zhǔn)輸入與輸出函數(shù)字符輸入函數(shù)getchar

intgetchar(void);字符輸出函數(shù)putchar

intputchar(intc);第64頁(yè)/共240頁(yè)例子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;}第65頁(yè)/共240頁(yè)程序運(yùn)行如果sabcs"A第66頁(yè)/共240頁(yè)3.3格式化輸入輸出(1/12)格式化輸入函數(shù)scanf輸入各種類(lèi)型的數(shù)據(jù),并存入相應(yīng)的參數(shù)中讀取輸入流中的指定的字符跳過(guò)輸入流中的指定的字符第67頁(yè)/共240頁(yè)3.3格式化輸入輸出(2/12)格式化輸入函數(shù)scanfscanf(<格式控制串>,<參數(shù)列表>)<格式控制串>描述輸入數(shù)據(jù)遵循的格式,可以包含3種類(lèi)型的字符:格式指示符、空白字符(空格、Tab鍵和回車(chē)鍵)和非空白字符(普通字符)<參數(shù)列表>是存放數(shù)據(jù)的地址的列表,參數(shù)之間用“,”分隔。參數(shù)列表是一個(gè)地址列表scanf("%d%f%d",&num1,&num2,&num3);1234.5678第68頁(yè)/共240頁(yè)3.3格式化輸入輸出(3/12)scanf函數(shù)的格式指示符%*<寬度><轉(zhuǎn)換說(shuō)明符>%是格式指示符的前導(dǎo)符*賦值抑制符,表示該格式指示符對(duì)應(yīng)的數(shù)據(jù)讀入后,不賦給相應(yīng)的變量

scanf("%d%*d%d%d",&num1,&num2,&num3);輸入123456789第69頁(yè)/共240頁(yè)3.3格式化輸入輸出(4/12)scanf函數(shù)的格式指示符%*<寬度><轉(zhuǎn)換說(shuō)明符>寬度是任選項(xiàng),為一整數(shù)n,指明了該輸入數(shù)據(jù)長(zhǎng)度為n,如果有多余的部分將被舍棄scanf("%3c%3c",&ch1,&ch2);

ch1和ch2均為字符型變量,輸入為:abcdefg第70頁(yè)/共240頁(yè)3.3格式化輸入輸出(5/12)scanf函數(shù)的格式指示符%*<寬度><轉(zhuǎn)換說(shuō)明符>轉(zhuǎn)換說(shuō)明符d十進(jìn)制整型量e實(shí)型的指數(shù)形式o八進(jìn)制整型量gf和e的較短形式x十六進(jìn)制整型量c字符u無(wú)符號(hào)十進(jìn)制整型s字符串i整型l或h輸入short或long類(lèi)型數(shù)據(jù)f實(shí)型的小數(shù)形式l或L用于輸入double或longdouble類(lèi)型數(shù)據(jù)第71頁(yè)/共240頁(yè)3.3格式化輸入輸出(6/12)格式化輸出函數(shù)printf指定浮點(diǎn)值保留的小數(shù)位數(shù)浮點(diǎn)值小數(shù)點(diǎn)對(duì)齊輸出數(shù)據(jù)的右對(duì)齊和左對(duì)齊將直接字符插入到輸出數(shù)據(jù)中將浮點(diǎn)數(shù)按照指數(shù)形式輸出將整數(shù)按照八進(jìn)制或十六進(jìn)制形式輸出按指定的域?qū)捄途容敵鰯?shù)據(jù)第72頁(yè)/共240頁(yè)3.3格式化輸入輸出(7/12)格式化輸出函數(shù)printf

printf(<格式控制串>,<參數(shù)列表>);<格式控制串>描述了輸出數(shù)據(jù)的格式??梢园?種類(lèi)型的字符格式指示符,則被參數(shù)列表中相應(yīng)的數(shù)據(jù)替換轉(zhuǎn)義字符,按其含義輸出相應(yīng)的特殊符號(hào)普通字符,按照原樣輸出第73頁(yè)/共240頁(yè)3.3格式化輸入輸出(8/12)格式化輸出函數(shù)printf

printf(<格式控制串>,<參數(shù)列表>);<參數(shù)列表>存放輸出數(shù)據(jù)的表達(dá)式列表。格式指示符的數(shù)量、順序與輸出參數(shù)相對(duì)應(yīng)。printf函數(shù)執(zhí)行時(shí),從左到右依次處理格式控制串,遇到格式控制字符,先計(jì)算相應(yīng)的輸出參數(shù)表達(dá)式,然后將該參數(shù)的計(jì)算結(jié)果按照格式指示符指定的方式輸出第74頁(yè)/共240頁(yè)3.3格式化輸入輸出(9/12)格式化輸出函數(shù)printf

printf(<格式控制串>,<參數(shù)列表>);<格式控制串>中的格式指示符%<標(biāo)志><域?qū)?gt;<.精度><轉(zhuǎn)換說(shuō)明符>其中<標(biāo)志>、<域?qū)?gt;和<精度>可選第75頁(yè)/共240頁(yè)3.3格式化輸入輸出(10/12)格式化輸出函數(shù)printf

<格式控制串>中的格式指示符%<標(biāo)志><域?qū)?gt;<.精度><轉(zhuǎn)換說(shuō)明符>共五種不同的標(biāo)志標(biāo)志含義-輸出在域?qū)拑?nèi)左對(duì)齊+在正數(shù)值之前顯示一個(gè)加號(hào),在負(fù)數(shù)值之前顯示一個(gè)減號(hào)空格在正數(shù)值之前顯示一個(gè)空格#與八進(jìn)制轉(zhuǎn)換說(shuō)明符o一起使用時(shí),在輸出值之前加0;與十六進(jìn)制轉(zhuǎn)換說(shuō)明符x或X一起使用時(shí),在輸出值之前加0x或0X0用0填充域?qū)挼?6頁(yè)/共240頁(yè)3.3格式化輸入輸出(11/12)格式化輸出函數(shù)printf

<格式控制串>中的格式指示符%<標(biāo)志><域?qū)?gt;<.精度><轉(zhuǎn)換說(shuō)明符>域?qū)挘该髁藬?shù)據(jù)打印的寬度。如果數(shù)據(jù)實(shí)際長(zhǎng)度小于域?qū)?,則數(shù)據(jù)輸出右對(duì)齊;如果數(shù)據(jù)實(shí)際長(zhǎng)度大于域?qū)挘到y(tǒng)自動(dòng)突破域?qū)捪拗?,按?shù)據(jù)的實(shí)際長(zhǎng)度輸出第77頁(yè)/共240頁(yè)3.3格式化輸入輸出(12/12)<格式控制串>中的格式指示符精度:對(duì)于整數(shù),表示至少要打印的數(shù)字個(gè)數(shù),如果數(shù)據(jù)長(zhǎng)度小于精度,則左邊補(bǔ)齊0;如果數(shù)據(jù)實(shí)際長(zhǎng)度大于精度,則按數(shù)據(jù)實(shí)際長(zhǎng)度輸出。對(duì)于浮點(diǎn)數(shù),如果轉(zhuǎn)換說(shuō)明符為e、E和f,精度表示小數(shù)點(diǎn)后的有效位數(shù),如果數(shù)據(jù)小數(shù)部分的長(zhǎng)度小于精度,則在右邊補(bǔ)齊0;否則按精度對(duì)數(shù)據(jù)進(jìn)行舍入輸出。如果浮點(diǎn)數(shù)的轉(zhuǎn)換說(shuō)明符為g和G,精度表示打印數(shù)據(jù)的最大的長(zhǎng)度。對(duì)于字符串,精度表示字符串輸出的最大長(zhǎng)度,如果輸出字符串長(zhǎng)度小于精度,則按照字符串的實(shí)際長(zhǎng)度輸出;否則按精度截取輸出字符串開(kāi)頭的n個(gè)字符(假設(shè)精度為n)輸出第78頁(yè)/共240頁(yè)例子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);第79頁(yè)/共240頁(yè)例子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;}第80頁(yè)/共240頁(yè)3.4用流進(jìn)行輸入輸出(1/3)通過(guò)I/O流對(duì)象實(shí)現(xiàn)輸入輸出功能將實(shí)現(xiàn)數(shù)據(jù)傳送操作的設(shè)備抽象成對(duì)象將“流”作為設(shè)備(如鍵盤(pán)、顯示器等)和程序之間通訊的通道C++預(yù)定義的四個(gè)輸入輸出對(duì)象cout,標(biāo)準(zhǔn)輸出設(shè)備,即顯示器cin,標(biāo)準(zhǔn)輸入設(shè)備,即鍵盤(pán)cerr和clog代表標(biāo)準(zhǔn)錯(cuò)誤流對(duì)象第81頁(yè)/共240頁(yè)3.4用流進(jìn)行輸入輸出(2/3)通過(guò)cout流輸出數(shù)據(jù)

cout<<<表達(dá)式>;cout<<<表達(dá)式1><<<表達(dá)式2>...;

cout<<"WelcometoC++!\n";cout<<"123+456="<<(123+456) <<endl;第82頁(yè)/共240頁(yè)3.4用流進(jìn)行輸入輸出(3/3)通過(guò)cin流輸入數(shù)據(jù)

cin>><變量>

cin>><變量1>>><變量2>...;

第83頁(yè)/共240頁(yè)例子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;}第84頁(yè)/共240頁(yè)3.5流操縱算子(1/4)流操縱算子——為流輸入輸出提供格式化輸入輸出的功能常用的流操縱算子流操縱算子功能描述setbase(b)以進(jìn)制基數(shù)b為輸出整數(shù)值setprecision(n)將浮點(diǎn)精度設(shè)置為nsetw(n)按照w個(gè)字符來(lái)讀或者寫(xiě)flush刷新ostream緩沖區(qū)ends插入字符串結(jié)束符,然后刷新ostream緩沖區(qū)endl插入換行符,然后刷新ostream緩沖區(qū)ws跳過(guò)空白字符setfill(ch)用ch填充空白字符第85頁(yè)/共240頁(yè)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)制第86頁(yè)/共240頁(yè)例子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;}

第87頁(yè)/共240頁(yè)3.5流操縱算子(3/4)設(shè)置浮點(diǎn)數(shù)精度流操縱算子setprecision和函數(shù)precision都可控制浮點(diǎn)數(shù)小數(shù)點(diǎn)后面的位數(shù)第88頁(yè)/共240頁(yè)例子5:使用設(shè)置浮點(diǎn)數(shù)精度的流操縱算子//ex3_7.cpp:設(shè)置浮點(diǎn)數(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';}第89頁(yè)/共240頁(yè)例子5:使用設(shè)置浮點(diǎn)數(shù)精度的流操縱算子cout<<"\nPrecisionsetbythe"<<"setprecisionmanipulator:\n";

//使用setprecision算子

for(places=0;places<=9;places++)cout<<setprecision(places)<<log2<<'\n';return0;}第90頁(yè)/共240頁(yè)3.5流操縱算子(4/4)設(shè)置域?qū)捄瘮?shù)width可以設(shè)置當(dāng)前域?qū)挘ㄝ斎胼敵龅淖址麛?shù))如果輸出的數(shù)據(jù)所需的寬度比設(shè)置的域?qū)捫?,空位用填充字符(省缺為空格)填充如果輸出的?shù)據(jù)所需的寬度比設(shè)置的域?qū)挻螅到y(tǒng)輸出所有位流操縱算子setw也可以設(shè)置域?qū)挼?1頁(yè)/共240頁(yè)例子6:使用設(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;}第92頁(yè)/共240頁(yè)學(xué)習(xí)目的檢測(cè)掌握各種輸入輸出函數(shù)掌握通過(guò)I/O流進(jìn)行輸入輸出的方法第93頁(yè)/共240頁(yè)作業(yè)3.83.13第94頁(yè)/共240頁(yè)第04章控制結(jié)構(gòu)第95頁(yè)/共240頁(yè)講授內(nèi)容順序結(jié)構(gòu):表達(dá)式語(yǔ)句和復(fù)合語(yǔ)句選擇結(jié)構(gòu):if語(yǔ)句、if-else語(yǔ)句和switch語(yǔ)句循環(huán)結(jié)構(gòu):while語(yǔ)句、do-while語(yǔ)句、for語(yǔ)句控制轉(zhuǎn)移語(yǔ)句:continue語(yǔ)句、break語(yǔ)句及goto語(yǔ)句第96頁(yè)/共240頁(yè)4.1程序的基本控制結(jié)構(gòu)順序結(jié)構(gòu):包括表達(dá)式語(yǔ)句和復(fù)合語(yǔ)句等選擇結(jié)構(gòu):if語(yǔ)句、if-else語(yǔ)句、switch語(yǔ)句循環(huán)結(jié)構(gòu):while語(yǔ)句、do-while語(yǔ)句、for語(yǔ)句。其它:空語(yǔ)句、continue語(yǔ)句、break語(yǔ)句、goto語(yǔ)句、return語(yǔ)句第97頁(yè)/共240頁(yè)4.2順序結(jié)構(gòu)(1/3)表達(dá)式語(yǔ)句表達(dá)式;表達(dá)式語(yǔ)句示例:a=a+3; //賦值語(yǔ)句x=y=z=0; //多重賦值語(yǔ)句t=2,t+x+a; //逗號(hào)表達(dá)式語(yǔ)句z=i<j?x:x+y;//條件表達(dá)式語(yǔ)句f1(); //函數(shù)調(diào)用語(yǔ)句x1=exp(x);//函數(shù)表達(dá)式語(yǔ)句,計(jì)算exx2=pow(x,y);//函數(shù)表達(dá)式語(yǔ)句,計(jì)算xy第98頁(yè)/共240頁(yè)4.2順序結(jié)構(gòu)(2/3)空語(yǔ)句空語(yǔ)句的形式如下:;

表達(dá)式語(yǔ)句和空語(yǔ)句示例:a=a+3; //賦值語(yǔ)句; //空語(yǔ)句第99頁(yè)/共240頁(yè)4.2順序結(jié)構(gòu)(3/3)復(fù)合語(yǔ)句復(fù)合語(yǔ)句的語(yǔ)法:<復(fù)合語(yǔ)句>→‘{’<語(yǔ)句序列>‘}’

<語(yǔ)句序列>→{<語(yǔ)句>}復(fù)合語(yǔ)句示例:{a=a+3; //賦值語(yǔ)句x=y=z=0; //多重賦值語(yǔ)句t=2,t+x+a; //逗號(hào)表達(dá)式語(yǔ)句z=i<j?x:x+y;//條件表達(dá)式語(yǔ)句}第100頁(yè)/共240頁(yè)例子1:計(jì)算圓的周長(zhǎng)和面積#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;}第101頁(yè)/共240頁(yè)4.3選擇結(jié)構(gòu)(1/7)

if語(yǔ)句if(<條件表達(dá)式>)<語(yǔ)句><條件表達(dá)式>可以是任意表達(dá)式(一般為邏輯表達(dá)式)if語(yǔ)句示例:

if(grade>=60)cout<<"passed\n";第102頁(yè)/共240頁(yè)4.3選擇結(jié)構(gòu)(2/7)

if-else語(yǔ)句

if(<條件表達(dá)式>)<語(yǔ)句1>else<語(yǔ)句2>if-else語(yǔ)句示例:

if(grade>=60)cout<<"Passed!\n";elsecout<<"Failed!\n";(錯(cuò):elsecout<<"Failed!\n";)第103頁(yè)/共240頁(yè)4.3選擇結(jié)構(gòu)(3/7)

if-else語(yǔ)句if或if-else的嵌套:if或if-else中嵌套if或if-else

if(grade>=90)printf(“A”);elseif(grade>=80)printf(“B”);

elseif(grade>=70)printf(“C”);elseif(grade>=60)printf(“D”);elseprintf(“F”);注意else和if的匹配:在if語(yǔ)句后面若直接跟else,則把if語(yǔ)句、else和其后的語(yǔ)句一起作為if-else語(yǔ)句第104頁(yè)/共240頁(yè)4.3選擇結(jié)構(gòu)(4/7)

if-else語(yǔ)句if或if-else的嵌套:if或if-else中嵌套if或if-elseif(grade>=60)if(grade==100)printf(“AAA”);elseif(grade==0)printf(“FFF”);不等價(jià)于

if(grade>=60){if(grade==100)printf(“AAA”);}elseif(grade==0)printf(“FFF”);第105頁(yè)/共240頁(yè)4.3選擇結(jié)構(gòu)(5/7)

if-else語(yǔ)句復(fù)合語(yǔ)句應(yīng)用示例if(grade>=60)

printf(“Passed.\n”);else{printf(“Failed.\n”);printf(“Doyoutakethiscourseagain?y/n”);cin>>answer;}第106頁(yè)/共240頁(yè)4.3選擇結(jié)構(gòu)(6/7)

switch語(yǔ)句switch(<條件表達(dá)式>){case<常量表達(dá)式1>:<語(yǔ)句序列1>case<常量表達(dá)式2>:<語(yǔ)句序列2>

……case<常量表達(dá)式n>:<語(yǔ)句序列n>default:<語(yǔ)句序列n+1>}多個(gè)case分支和可選的default分支<條件表達(dá)式>的值為整數(shù)類(lèi)型(int,char,…)每個(gè)<語(yǔ)句序列>的最后一個(gè)語(yǔ)句一般為break語(yǔ)句,每個(gè)<語(yǔ)句序列>也可以為空第107頁(yè)/共240頁(yè)4.3選擇結(jié)構(gòu)(7/7)

switch語(yǔ)句流程┇falsetrue計(jì)算條件表達(dá)式的值條件表達(dá)式的值==常量表達(dá)式1語(yǔ)句序列1falsetrue條件表達(dá)式的值==常量表達(dá)式2語(yǔ)句序列2falsetrue條件表達(dá)式的值==常量表達(dá)式n語(yǔ)句序列n語(yǔ)句序列n+1┇第108頁(yè)/共240頁(yè)例子2:用switch語(yǔ)句實(shí)現(xiàn)成績(jī)轉(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;第109頁(yè)/共240頁(yè)例子2:用switch語(yǔ)句實(shí)現(xiàn)成績(jī)轉(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;}第110頁(yè)/共240頁(yè)4.4循環(huán)結(jié)構(gòu)(1/13)

while語(yǔ)句while(<表達(dá)式>)

<語(yǔ)句><表達(dá)式>的值?<語(yǔ)句>非00例外:break等四個(gè)控制語(yǔ)句第111頁(yè)/共240頁(yè)4.4循環(huán)結(jié)構(gòu)(2/13)

while語(yǔ)句 intproduct=2; while(product<=1000)

product=2*product;product<=1000product=2*producttruefalse第112頁(yè)/共240頁(yè)例子3:while語(yǔ)句和switch語(yǔ)句的應(yīng)用/*計(jì)算各級(jí)成績(jī)的人數(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;第113頁(yè)/共240頁(yè)例子3:while語(yǔ)句和switch語(yǔ)句的應(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;第114頁(yè)/共240頁(yè)例子3:while語(yǔ)句和switch語(yǔ)句的應(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;}第115頁(yè)/共240頁(yè)程序運(yùn)行結(jié)果Enterthelettergrades.EnterEOFtoend.ABCCADFCEIncorrectlettergradeentered.Enteranewgrade.DABTotalsforeachlettergradeare:A:3B:2C:3D:2F:1第116頁(yè)/共240頁(yè)4.4循環(huán)結(jié)構(gòu)(3/13)while語(yǔ)句典型應(yīng)用1:計(jì)數(shù)控制循環(huán)循環(huán)反復(fù)執(zhí)行,直到計(jì)數(shù)器達(dá)到特定的值,是定數(shù)循環(huán):即循環(huán)次數(shù)是已知的。示例:計(jì)算10個(gè)學(xué)生的平均成績(jī)第117頁(yè)/共240頁(yè)例子4:計(jì)算10個(gè)學(xué)生的平均成績(jī)#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;}第118頁(yè)/共240頁(yè)程序運(yùn)行結(jié)果Entergrade:98Entergrade:76Entergrade:71Entergrade:87Entergrade:83Entergrade:90Entergrade:57Entergrade:79Entergrade:82Entergrade:94Classaverageis81

第119頁(yè)/共240頁(yè)4.4循環(huán)結(jié)構(gòu)(4/13)while語(yǔ)句典型應(yīng)用2:條件控制循環(huán)問(wèn)題能計(jì)算任意個(gè)數(shù)學(xué)生的平均成績(jī)學(xué)生人數(shù)未知,是不定數(shù)循環(huán)程序如何結(jié)束?使用條件控制當(dāng)用戶(hù)輸入信號(hào)量(標(biāo)記值)時(shí),循環(huán)結(jié)束信號(hào)量不能和一般數(shù)據(jù)混淆:特殊數(shù)據(jù)第120頁(yè)/共240頁(yè)例子5:計(jì)算N個(gè)學(xué)生的平均成績(jī)#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);}第121頁(yè)/共240頁(yè)例子5:計(jì)算N個(gè)學(xué)生的平均成績(jī) /*terminationphase*/ if(counter!=0) { average=(float)total/counter; printf("Classaverageis%.2f",average);} else printf("Nogradeswereentered\n"); return0;}第122頁(yè)/共240頁(yè)程序運(yùn)行結(jié)果Entergrade,-1toend:75Entergrade,-1toend:94Entergrade,-1toend:97Entergrade,-1toend:88Entergrade,-1toend:70Entergrade,-1toend:64Entergrade,-1toend:83Entergrade,-1toend:89Entergrade,-1toend:-1Classaverageis82.50

第123頁(yè)/共240頁(yè)4.4循環(huán)結(jié)構(gòu)(5/13)do-while語(yǔ)句 do <語(yǔ)句>

while(<表達(dá)式>);<表達(dá)式>的值?<語(yǔ)句>非00例外:break等四個(gè)控制語(yǔ)句第124頁(yè)/共240頁(yè)4.4循環(huán)結(jié)構(gòu)(6/13)do-while語(yǔ)句示例1 intcounter=1; do printf(“%d\n",counter); while(++counter<=10); 打印整數(shù)1到10第125頁(yè)/共240頁(yè)4.4循環(huán)結(jié)構(gòu)(7/13)do-while語(yǔ)句示例2 intcounter=1,sum=0; do sum=sum+counter; while(++counter<=100); counter=?sum=?第126頁(yè)/共240頁(yè)4.4循環(huán)結(jié)構(gòu)(8/13)計(jì)數(shù)控制的循環(huán)舉例 intcounter=1; //初始化 while(counter<=10){//重復(fù)條件 printf(“%d\n”,counter); ++counter; //遞增 }或 intcounter=0; //初始化 while(++counter<=10) printf(“%d\n”,counter);第127頁(yè)/共240頁(yè)4.4循環(huán)結(jié)構(gòu)(9/13)for語(yǔ)句

for(<初始化語(yǔ)句>;[<表達(dá)式2>];[<表達(dá)式3>])

<語(yǔ)句>

非00<初始化語(yǔ)句>[<表達(dá)式3>];<語(yǔ)句><表達(dá)式2>的值?當(dāng)<表達(dá)式2>省略時(shí)其值為1例外:break等四個(gè)控制語(yǔ)句第128頁(yè)/共240頁(yè)4.4循環(huán)結(jié)構(gòu)(10/13)for語(yǔ)句例子1

intcounter; for(counter=1;counter<=10;counter++) printf(“%d\n",counter);第129頁(yè)/共240頁(yè)4.4循環(huán)結(jié)構(gòu)(11/13)for語(yǔ)句例子2

intcounter;

for(counter=1;counter<=10;counter++) printf(“%d\n",counter); 打印整數(shù)1到10.第130頁(yè)/共240頁(yè)4.4循環(huán)結(jié)構(gòu)(12/13)for語(yǔ)句例子3 inti,j; for(i=0,j=0;j+i<=10;j++,i++) printf(“%d\n",j+i);第131頁(yè)/共240頁(yè)4.4循環(huán)結(jié)構(gòu)(13/13)for語(yǔ)句和while語(yǔ)句的關(guān)系

若<語(yǔ)句>中不含continue語(yǔ)句,則 for(<表達(dá)式1>;<表達(dá)式2>;<表達(dá)式3>)

<語(yǔ)句>

等價(jià)于:

<表達(dá)式1>; while(<表達(dá)式2>){ <語(yǔ)句> <表達(dá)式3>;

}第132頁(yè)/共240頁(yè)例子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;}第133頁(yè)/共240頁(yè)4.5控制轉(zhuǎn)移語(yǔ)句(1/4)break語(yǔ)句 break;只能用于循環(huán)體或switch語(yǔ)句中,使程序控制退出while,for,do/while或switch結(jié)構(gòu)程序執(zhí)行這些語(yǔ)句的后繼語(yǔ)句break語(yǔ)句的用途提早退出循環(huán)跳出switch結(jié)構(gòu)第134頁(yè)/共240頁(yè)4.5控制轉(zhuǎn)移語(yǔ)句(2/4)continue語(yǔ)句 continue;只能用于循環(huán)體中,跳過(guò)while,for或do/while循環(huán)體中的剩余語(yǔ)句程序開(kāi)始執(zhí)行下一次循環(huán)while和do/whilecontinue語(yǔ)句執(zhí)行后,馬上測(cè)試循環(huán)條件for語(yǔ)句continue語(yǔ)句執(zhí)行后,

計(jì)算遞增表達(dá)式,然后測(cè)試循環(huán)條件第135頁(yè)/共240頁(yè)例子7:在for循環(huán)結(jié)構(gòu)中使用break語(yǔ)句#include<stdio.h>intmain(){ intx;for(x=1;x<=10;x++){ if(x==5) break; printf("%d",x);}printf("\nBrokeoutofloopatx==%d\n",x);return0;}第136頁(yè)/共240頁(yè)例子8:在for循環(huán)結(jié)構(gòu)中使用continue語(yǔ)句#include<stdio.h>intmain(){ intx;for(x=1;x<=10;x++){ if(x==5) continue; printf("%d",x);}printf("\nUsedcontinuetoskipprintingthe value5\n");return0;}第137頁(yè)/共240頁(yè)4.5控制轉(zhuǎn)移語(yǔ)句(3/4)goto語(yǔ)句 goto<標(biāo)號(hào)>;使程序控制轉(zhuǎn)移到前面帶有<標(biāo)號(hào)>:的語(yǔ)句繼續(xù)執(zhí)行<標(biāo)號(hào)>是一個(gè)非關(guān)鍵字標(biāo)識(shí)符,<標(biāo)號(hào)>:和goto<標(biāo)號(hào)>;必須出現(xiàn)在同一個(gè)函數(shù)體中,<標(biāo)號(hào)>:不能重復(fù)出現(xiàn)第138頁(yè)/共240頁(yè)4.5控制轉(zhuǎn)移語(yǔ)句(4/4)return語(yǔ)句 return<表達(dá)式>;或return;在主函數(shù)體中執(zhí)行return語(yǔ)句,使整個(gè)程序結(jié)束在其它函數(shù)體中執(zhí)行return語(yǔ)句,返回到調(diào)用函數(shù)的相應(yīng)位置繼續(xù)執(zhí)行第139頁(yè)/共240頁(yè)學(xué)習(xí)目的檢測(cè)掌握利用復(fù)合機(jī)制編寫(xiě)較復(fù)雜類(lèi)的方法理解this指針的作用、原理,了解類(lèi)和對(duì)象的實(shí)現(xiàn)機(jī)制掌握使用this指針編寫(xiě)能連續(xù)調(diào)用的成員函數(shù)的方法掌握const對(duì)象和const成員函數(shù)的定義和使用方法掌握編寫(xiě)友元函數(shù)的方法掌握友元類(lèi)的用法第140頁(yè)/共240頁(yè)作業(yè)4.64.74.84.114.12第141頁(yè)/共240頁(yè)第5章函數(shù)第142頁(yè)/共240頁(yè)講授內(nèi)容函數(shù)的定義和函數(shù)原型函數(shù)調(diào)用和參數(shù)傳遞機(jī)制函數(shù)重載存儲(chǔ)類(lèi)別和作用域遞歸函數(shù)設(shè)計(jì)和函數(shù)的遞歸調(diào)用類(lèi)的復(fù)合預(yù)處理指令第143頁(yè)/共240頁(yè)5.1模塊化程序設(shè)計(jì)(1/3)復(fù)雜問(wèn)題一般可以分解為若干稍簡(jiǎn)單的問(wèn)題每個(gè)問(wèn)題的解決對(duì)應(yīng)一個(gè)模塊的求解解決復(fù)雜問(wèn)題的系統(tǒng)一般由逐級(jí)抽象的諸模塊組成每個(gè)模塊是一個(gè)類(lèi)或函數(shù)第144頁(yè)/共240頁(yè)5.1模塊化程序設(shè)計(jì)(2/3)函數(shù)是C++程序構(gòu)成的基礎(chǔ)任何C++程序至少包含一個(gè)函數(shù)——main()函數(shù)函數(shù)也是類(lèi)的方法的實(shí)現(xiàn)手段函數(shù)的作用實(shí)現(xiàn)系統(tǒng)中按功能分解的各小任務(wù)實(shí)現(xiàn)類(lèi)對(duì)象的方法C++程序的設(shè)計(jì)最終都落實(shí)到一個(gè)個(gè)函數(shù)的設(shè)計(jì)上第145頁(yè)/共240頁(yè)5.1模塊化程序設(shè)計(jì)(3/3)函數(shù)是C++源程序的基本模塊C++中的函數(shù)包括兩類(lèi):預(yù)定義函數(shù),C++提供了豐富的庫(kù)函數(shù),程序員可以在自己的程序中直接使用用戶(hù)自定義函數(shù),用戶(hù)根據(jù)需要編寫(xiě)的函數(shù)一個(gè)C++程序可包含多個(gè)文件,一個(gè)文件可包含多個(gè)函數(shù)第146頁(yè)/共240頁(yè)5.2預(yù)定義函數(shù)的使用(1/2)C++提供了豐富的庫(kù)函數(shù),這些庫(kù)函數(shù)的聲明都放在相應(yīng)的頭文件中要使用這些庫(kù)函數(shù),必須先包括相應(yīng)的頭文件,然后直接使用例如:數(shù)學(xué)運(yùn)算函數(shù)的聲明包含在math.h中,要使用這些函數(shù),程序中必須加上代碼#include<math.h>第147頁(yè)/共240頁(yè)5.2預(yù)定義函數(shù)的使用(2/2)函數(shù)調(diào)用的一般過(guò)程先計(jì)算實(shí)參表達(dá)式的值然后將計(jì)算的結(jié)果交給被調(diào)用函數(shù)再執(zhí)行被調(diào)用函數(shù)的代碼,直至返回語(yǔ)句return或到函數(shù)尾最后程序控制返回到函數(shù)的調(diào)用處,繼續(xù)執(zhí)行printf(“%.2f”,sqrt(900.0));的執(zhí)行過(guò)程以900.0為參數(shù)調(diào)用sqrt函數(shù),得到返回結(jié)果30.0以"%.2f"和30.0為參數(shù)調(diào)用printf函數(shù),實(shí)現(xiàn)格式化輸出第148頁(yè)/共240頁(yè)5.3函數(shù)定義與函數(shù)原型函數(shù)模塊化所有在函數(shù)體中說(shuō)明的變量都是局部變量?jī)H在定義的函數(shù)中有效參數(shù)函數(shù)間傳遞信息局部變量第149頁(yè)/共240頁(yè)5.3函數(shù)定義與函數(shù)原型函數(shù)的優(yōu)點(diǎn)分而治之有利于程序開(kāi)發(fā)避免代碼重復(fù)軟件重用重用已有的函數(shù)來(lái)構(gòu)造新的程序抽象-隱蔽內(nèi)部的細(xì)節(jié)第150頁(yè)/共240頁(yè)例子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;}第151頁(yè)/共240頁(yè)例子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;}第152頁(yè)/共240頁(yè)例子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;}第153頁(yè)/共240頁(yè)例子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,in

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論