




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
C++面向對象的程序設計第一章程序設計基礎學習目標:
初步掌握程序設計的概念和基本方法;了解C++語言的特點;學會使用VisualC++集成開發(fā)環(huán)境創(chuàng)建并運行簡單的C++項目。
了解計算機語言及其發(fā)展,了解高級語言的優(yōu)點。
了解結構化程序設計的基本概念,初步掌握結構化程序設計方法
了解面向對象程序設計的思想、基本概念。
初步接觸C++語言,了解C++語言的特點。
熟悉VisualC++集成開發(fā)環(huán)境的基本使用方法,并完成一個簡單的C++程序的編寫、編譯、調試和運行。
學習方法
本章概念和知識點較多,學習的時候注意不能死記硬背,要分清知識點的輕重程度。對于計算機語言的發(fā)展,只要了解其主要過程就可以了;對于程序設計方法和C++語言的特點,不能在本章范圍內孤立學習,要結合下面相應的章節(jié)以及親自上機實踐才能掌握,并且這是個漸進的過程,不能一蹴而就;對于C++集成開發(fā)環(huán)境的使用則一定要通過實際的動手操作才能熟悉。
自然語言與計算機語言之間的鴻溝機器語言機器可以直接識別并執(zhí)行面向機器高級語言低級語言面向過程面向對象關心求解過程著眼點:解決“什么”問題關心一個對象能干什么例如:FORTRAN、BASIC
結構化分析方法和設計方法例:C++、JAVA面向對象的分析方法和設計方法“編譯”“解釋”“鏈接”中級語言高級語言雙重功能例:C機器語言、匯編語言和高級語言匯編語言1.設計思路自頂向下、功能分解、逐步求精。采用模塊分解與功能抽象,自頂向下、分而治之。把精力主要集中在對如何求解問題的算法邏輯和過程的描述上,通過程序把解決問題的步驟告訴計算機。當一些任務十分復雜以至無法描述時,可以將它拆分為一系列較小的功能部件,直到這些自完備的子任務小到易于理解的程度。
2.程序結構按功能劃分為若干個基本模塊,形成一個樹狀結構。各模塊間的關系盡可能簡單,功能上相對獨立;每一模塊內部均是由順序、選擇和循環(huán)三種基本結構組成。其模塊化實現(xiàn)的具體方法是使用子程序。
面向過程的程序設計3.缺點可重用性差:相對于老問題的新方法帶來額外的開銷;安全性差:把數(shù)據(jù)和處理數(shù)據(jù)的過程分離為相互獨立的實體;難以開發(fā)圖形界面的應用;例如,計算一個公司中每一個職員的平均工資是一項較為復雜的任務??梢詫⑵洳鸱譃橐韵碌淖尤蝿眨?/p>
(1)計算總共有多少職員
(2)計算工資總額
(3)用職員人數(shù)去除工資總額
計算工資總額本身又可分為一系列子任務
(1)找出每個職員的檔案
(2)讀出工資數(shù)額
(3)把工資加到部分和上
(4)讀出下個職員的檔案
面向對象的程序設計
設計思想:
面向對象程序設計方法不是以函數(shù)過程和數(shù)據(jù)結構為中心,而是以對象為代表求解問題的中心環(huán)節(jié).它追求的是現(xiàn)實問題空間與軟件系統(tǒng)解空間的近似和直接模擬.從而使人們對復雜系統(tǒng)的認識過程與系統(tǒng)的程序設計實現(xiàn)過程盡可能一致.面向對象語言的發(fā)展過程1、雛形階段
60年代,挪威計算中心開發(fā)的Simula67語言,是面向對象語言發(fā)展史上的第一個里程碑。它引入了類的概念和繼承的機制。具有了面向對象語言的重要特征,是面向對象語言的先驅。
72年,Smalltalk-72問世,在Smalltalk-72中,任何東西都是對象
Smalltalk-72的問世,標志著面向對象程序設計方法的正式形成。但作為語言還不完善,處于研究性和實驗性階段。
2、完善階段
1981年,Smalltalk-80問世,成為面向對象發(fā)展史上最重要的里程碑。它具備了絕大部分面向對象的基本概念和機制,是第一個能夠實際應用的面向對象語言,隨著應用的深入,越來越多的人認識并接收了面向對象的思想,形成了一種嶄新的程序設計風格,引發(fā)了計算機軟件領域一場意義深遠的變革。
(1)作為一種嶄新的軟件設計方法,被大家廣泛接受尚需一定的時間,即使目前,還沒有為所有人所接受。(2)Smalltalk-80本身的商品化軟件開發(fā)工作直到1987年才開始進行。(3)太過理論化,追求一種純OO的宗旨,不能為許多講究實效的軟件開發(fā)人員接受。
3、繁榮階段
80年代中期到90年代,出現(xiàn)了大批實用的OOPL,如C++、Objective-C、ObjectPascal、Delphi等。大多都是一種混合型的面向對象語言,更重視實用性。 特別是C++語言,它是在C語言的基礎上擴充的,對C兼容,且十分重視代碼的執(zhí)行效率,所以以成為應用最為廣泛的OOPL。 面向對象的編程語言的繁榮是面向對象方法走向實用的重要標志,也是面向對象方法在計算機學術界、產業(yè)界和教育界受到越來越高的重視面向對象的當前的研究及實踐領域OO方法誕生20多年以來,已經進入計算機科學的各個分支領域,并在繼續(xù)發(fā)展。1、面向對象的編程語言(OOPL)2、面向對象的分析和面向對象的設計(OOA/OOD)
本課程的重點。產生于80年代末期,目前仍在發(fā)展和健全的過程。3、面向對象的數(shù)據(jù)庫(OODB)
是傳統(tǒng)數(shù)據(jù)庫技術與面向對象方法的結合。4、面向對象的軟件開發(fā)環(huán)境
已經比較成熟,如C++Builder、VC6.0、Delphi等。5、面向對象的圖形用戶界面(GUI)開發(fā)技術6、面向對象的智能程序設計
即面向對象方法與人工智能領域的專家系統(tǒng)的結合。7、面向對象的體系結構
是一種新型的計算機體系結構,連同支持面向對象技術的新興操作系統(tǒng),可望從根本上提高面向對象的軟件開發(fā)效率和運行效率,并形成從硬件到操作系統(tǒng)、語言、界面及上層應用支持系統(tǒng)一體化的面向對象的開發(fā)及運行環(huán)境。C++的發(fā)展歷史從C到C++
C語言是貝爾實驗室在B語言的基礎上開發(fā)出來的,1972年在一臺DECPDP-11計算機上實現(xiàn)了最初的C語言。C是作為UNIX操作系統(tǒng)的開發(fā)語言而開始廣為人們所認識。實際上,當今許多新的重要的操作系統(tǒng)都是用C或C++編寫的。在過去20年內,C語言已經能夠用在絕大多數(shù)計算機上了。C語言是與硬件無關的。由于C語言的嚴謹設計,使得把用C語言編寫的程序移植到大多數(shù)計算機上成為可能。到70年代末,C已經演化為現(xiàn)在所說的“傳統(tǒng)的C語言”。
C++入門
為了滿足管理程序的復雜性需要,1980年,貝爾實驗室開始對C進行改進和擴充。最初的成果稱為“帶類的C”,1983年正式取名為C++,在經歷了3次C++修訂后,于1994年制定了ANSIC++標準的草案。以后又經過不斷完善,成為目前的C++。C++仍在不斷發(fā)展中。
C++包含了整個C,C是建立C++的基礎。C++包括C的全部特征、屬性和優(yōu)點,同時添加了對面向對象編程(OOP)的完全支持。
C語言盛行的同時,也暴露出它的局限:
(1)C類型檢查機制相對較弱,這使得程序中的一些錯誤不能在編譯時發(fā)現(xiàn)。
(2)C本身幾乎沒有支持代碼重用的語言結構,因此一個程序員精心設計的程序,很難為其他程序所用。
(3)當程序的規(guī)模達到一定的程度時,程序員很難控制程序的復雜性。C++的特點
(1)C++保持與C兼容。
(2)用C++編寫的程序可讀性更好,代碼結構更為合理,支持面向對象的機制,可方便地構造出模擬現(xiàn)實問題的實體和操作。
(3)生成代碼的質量高,運行效率僅比匯編語言代碼段慢10%到20%(4)從開發(fā)時間、費用到形成的軟件的可重用性、可擴充性、可維護性和可靠性等方面有了很大的提高,使得大中型的程序開發(fā)項目變得容易的多。學習C++的目的
1.本身是一門優(yōu)秀的設計語言;
2.同時是一門實用的軟件開發(fā)語言,
3.可觸類旁通其他語言,如C#,Java等;
4.掌握面向對象的軟件設計方法;學習方法
1.掌握基本概念,如類、繼承、多態(tài);
2.多實踐.交流;
3.多讀優(yōu)秀的源代碼;編譯器
1.BorlandC++Builder5.0/6.0,
2.BorlandC++BuilderX1.0;3.MicrosoftVisualC++6.0
課程考核要求
1.熟悉重要概念;
2.讀懂C++編寫的常用的典型程序;
3.可獨立編寫C++程序;初識C++的函數(shù)和對象首先看下面這個簡單的C++程序
//simple.cpp是一個簡單的C++程序#include<iostream>//包含頭文件Usingnamespacestd;//使用命名空間voidmain()//主函數(shù){inti;//初始化對象cout<<“HelloC++!\n”;//輸出提示信息cout<<"請輸入一個整數(shù):";cin>>i;//接受輸入數(shù)值cout<<"您輸入的整數(shù)是:";cout<<i;//輸出值cout<<'\n';}
C語言程序編譯預處理命令
(1)宏定義:不帶參數(shù)的宏;帶參數(shù)的宏;
#define<宏名><替換字串>
取消宏定義
#undef<宏名>(2)文件包含:兩種格式―――牽涉到C程序文件的組織方式:公用數(shù)據(jù)和函數(shù)說明放在頭文件(.h)中;實現(xiàn)函數(shù)功能的函數(shù)體和局部數(shù)據(jù)放在源文件(.cpp)中;
#include<文件名>
在系統(tǒng)指定的目錄中查找文件(系統(tǒng)設置時的include目錄)。
#include“文件名”在當前目錄中查找文件,若找不到,再到系統(tǒng)指定的目錄中查找。我們對這個程序進行解釋2.主函數(shù)
C++源程序可由一個main函數(shù)和其他函數(shù)構成。
函數(shù)是c++程序的基本單位,一個C++程序有且只能有一個主函數(shù)main,是程序的入口,其他函數(shù)通過函數(shù)調用被執(zhí)行。用戶可自己定義函數(shù),也可使用系統(tǒng)提供的函數(shù)。3.使用注釋
注釋部分以“//…….”(或/*……*/)來標志,系統(tǒng)對注釋不做任何處理,幫助人閱讀程序
//…….到行尾
/*……*/多行4.使用命名空間
這是新的C++標準引入了新標準類庫的頭文件載入方式,即省略“.h”。不過必須同時使用下述語句:
Usingnamespacestd;它提高了程序的性能和可靠性5.使用輸入和輸出對象C++中的輸入輸出操作由“流”來處理。C++將數(shù)據(jù)從一個對象流向另一個對象的流動抽象為“流”提取操作:從流中獲取數(shù)據(jù)的操作;插入操作:向流中添加數(shù)據(jù)的操作;流對象(iostream.h)
cin:用來處理標準輸入,即鍵盤輸入;
cout:用來處理標準輸出,即屏幕輸出;
①數(shù)據(jù)輸出cout
(1)作用:將數(shù)據(jù)輸出到外設(如屏幕);(2)格式:cout<<表達式1<<表達式2<<表達式3<<…<<表達式n其中“<<”稱為插入運算符,將其后表達式的值輸出到顯示器當前光標位置。例如,
inta=2,b=3;charc='x';cout<<"a="<<a<<'\t'<<"b="<<b<<'\n';cout<<"c="<<c<<'\n';則執(zhí)行后顯示器上顯示:
a=2 b=3c=x②數(shù)據(jù)輸出cin(1)作用:從外設(鍵盤)輸入數(shù)據(jù)到變量(2)格式:cin>>變量名1〔>>變量名2>>變量名3…>>變量名n〕;其中,“>>”稱為提取運算符,表示將暫停程序執(zhí)行,等待用戶從鍵盤上輸入相應的數(shù)據(jù)。在提取運算符后只能跟一個變量名,但“>>變量名”可以重復多次,即可給一個變量輸入數(shù)據(jù),也可給多個變量輸入數(shù)據(jù)7.函數(shù)類型和返回值
函數(shù)由函數(shù)說明部分和函數(shù)體部分組成
floataverage(floata,floatb,floatc){ floatsum,average; sum=a+b+c; average=sum/3; returnaverage;}6.對象的定義和初始化
定義對象包括為它命名并賦予它數(shù)據(jù)類型。每個對象都隸屬于某個特定的數(shù)據(jù)類型。人們習慣于稱對象為變量,C++程序設計時,為了盡快養(yǎng)成使用對象思考問題的習慣,建議改成對象。本程序使用整型對象:inti8.程序運行結果:
HelloC++!
請輸入一個整數(shù):2
您輸入的整數(shù)是:2
C++語言對C語言擴充和增強的幾點具體體現(xiàn)1.更加靈活的變量說明
在傳統(tǒng)的C語言中,局部變量的說明必須集中放在執(zhí)行代碼的前面,數(shù)據(jù)說明語句和執(zhí)行語句的混合將引起編譯錯誤。而在C++中,可以在程序代碼塊的任何地方中卻可進行局部變量的說明。比如下面的代碼在C語言中是不正確的,在C++語言以正常運行。
for(inti=1;i<=100;i++);
這樣做的好處是使變量的定義和它的使用集中在一起,意義一目了然。
2.更加嚴格的函數(shù)原型說明
C++摒棄了C語言對函數(shù)原型隨意簡化的方式,這種簡化是許多C語言程序錯誤的根源。C++語言要求編程者為函數(shù)提供完整的原型,包括全部參數(shù)的類型和返回值得說明。
例如,有字符型和雙精度類型兩個參數(shù)、返回整型值的函數(shù)f,原型應該寫為:
intf(char,double);
而C語言中允許將這個原型寫成"f();"。
在函數(shù)原型說明中,參數(shù)名可有可無,并且可以和函數(shù)定義中的參數(shù)名不一致。3.函數(shù)缺省參數(shù)
C++中允許函數(shù)有缺省參數(shù)。所謂缺省,是指函數(shù)調用時可以不給出實際的參數(shù)值。下面是一個有缺省參數(shù)的函數(shù)定義的實例:例:
intf(inta,intb=1)
{
returna*b;
}
此后,函數(shù)調用f(3,1)和f(3)將返回同樣的結果。4.增加了內聯(lián)函數(shù)(InlineFunction)
5.增加了函數(shù)重載機制
6.更加方便的動態(tài)存儲分配函數(shù)部分講7.
作用域限定運算符
::
作用域限定運算符::用于對當前作用域之外的同名變量進行訪問。例如在下面的例子中,我們可以利用::實現(xiàn)在局部變量a的作用域范圍內對全局變量a的訪問。
例:#include<iostream.h>
inta;
voidmain()
{
floata;
a=3.14;
::a=6;
cout<<“l(fā)ocalvariablea=”<<a<<endl;
cout<<“globalvariablea=”<<::a<<endl;
}程序執(zhí)行結果如下:
localvariablea=3.14
globalvariablea=6
程序的調試與運行一、C++程序的編輯、編譯和運行二、VisualC++6.01.編輯:輸入、編輯、保存成源文件(多個)2.編譯、鏈接源程序文件:預處理;編譯生成目標程序文件.obj;鏈接生成可執(zhí)行文件.exe3.運行程序:4.程序調試:編譯錯誤、鏈接錯誤、算法錯誤啟動VisualC++:方法:開始菜單—>程序—>MicrosoftVisualstudio6.0—>MicrosoftVisualC++6.0;或:
雙擊桌面上的MicrosoftVisualstudio6.0的快捷方式;標題欄菜單欄工具欄工作區(qū)窗口Workspace輸出窗口Output編輯區(qū)狀態(tài)欄VC++集成環(huán)境簡介:VisualC++6.0主窗口(實驗P1)Project:
一個VC++應用程序稱為一個項目
項目是一些相互關聯(lián)的源文件的集合,包括:
SourceFiles源程序代碼文件.cppHeaderFiles頭文件.hResourceFiles資源文件程序結構信息文件系統(tǒng)參數(shù)設置文件等
一個項目的文件可以存放在不同的文件夾和驅動器中項目(project)※可包含多個項目,一般只包含一個項目※VisualC++以項目工作區(qū)方式組織文件、項目和項目配置?!㈨椖繒r,自動建立項目工作區(qū)文件.dsw
用于描述項目工作區(qū)的內容和設置※同時建立工程文件.dsp和工作區(qū)選項文件
.opt
用于保存項目工作區(qū)的設置※在項目工作區(qū)中可查看和訪問項目中的各種元素項目工作區(qū)(workspace)1.啟動VisualC++6.02.創(chuàng)建新項目,要添加到項目工作區(qū),有兩種選擇:
(1)添加到新創(chuàng)建的項目工作區(qū)(2)添加到當前指定的項目工作區(qū)3.建立新的源文件,要添加到指定項目中4.編輯/輸入源程序,保存程序.cpp(.h)注意:一個項目中只能有一個含main函數(shù)的文件5.編譯源程序:Build菜單中的Compile命令(ctrl+F7),形成目標文件.obj。6.鏈接目標程序,形成可執(zhí)行文件:Build菜單中的Build命令(F7),形成可執(zhí)行文件.exe。7.運行程序:Build菜單中的Execute命令(ctrl+F5)VisualC++6.0中創(chuàng)建一個C/C++程序(新項目)的步驟:知識點:本章主要講述程序設計的基本概念和方法,并簡單介紹了C++語言的特點以及VisualC++集成開發(fā)環(huán)境的使用。學習C++,不一定非要學過C。但學過C能促進C++的學習。
C++程序由函數(shù)構成,它總是從主函數(shù)main()開始運行。但并不是說,main()函數(shù)非得要寫在程序的最前面。
函數(shù)有兩種:標準庫函數(shù)和用戶定義函數(shù)。main()函數(shù)是特殊的用戶定義函數(shù)。每個程序只能有一個main()函數(shù),并且必須要有一個main()函數(shù)。
一個語句可以寫在多個程序行上,一個程序行可以寫多個語句。語句以分號結束。
C++通過標準輸入輸出流進行輸入輸出。
C++程序經過編輯、編譯和連接,產生可運行的exe文件。
內容小結:§
3-3運算符和表達式(續(xù))一、關系運算符和關系表達式二、邏輯運算符和邏輯表達式一、關系運算符和表達式:
關系運算符:>>=<<===!=高低雙目,左結合性
關系表達式格式:<表達式><關系運算符><表達式>例:x>5y>=x+3x==y*2
值:條件成立為真1
條件不成立為假,0二、邏輯運算符和邏輯表達式邏輯運算符:
操作數(shù)為0代表假,非0為真
值!單目&&||雙目0:假1:真如何表示3<x<=10?x>3&&x<=10右結合性左結合性高低*小結*:條件幾種表示形式復合條件如:條件
復合條件
3≤x<100x>=3&&x<100
判字符變量c的值是大寫字母?
(c
>=‘A’&&c<=‘Z’)判字符變量c的值不是大寫字母?(c
<
‘A’||c>‘Z’)判字符變量c的值是小寫字母?(c>=‘a’&&c<=‘z’)判字符變量c的值不是小寫字母?(c<‘a’||c>‘z’)判字符變量c的值是字母?if(c>=‘a’&&c<=‘z’||
c>=‘A’&&c<=‘Z’)判字符變量c的值不是字母?if((c<‘a’||c>‘z’)&&
(c<‘A’||c>‘Z’))
注意:是與不是的條件互為反條件§
3-4分支(選擇)結構一、if語句的簡單分支三、if語句的嵌套二、if語句的雙分支四、switch語句(多分支)表達式語句真假一、if語句的簡單分支
語句:if(表達式)語句
表達式為任意表達式
若有若干語句,要構成復合語句
執(zhí)行:計算表達式的值,若為真(不為0)則執(zhí)行語句;否則不執(zhí)行語句例如:求x的絕對值#include<iostream.h>voidmain(){intx,absx;cout<<“pleaseinputx=“;cin>>x;absx=x;if(x<0)absx=-x;cout<<“x=“<<x<<endl;cout<<“|x|=”<<absx;}
if(x>=0)absx=x;elseabsx=-x;absx=fabs(double(x))#include<math.h>例如:C若為大寫字母,則把它變?yōu)樾懽帜?,否則為c本身#include<iostream.h>voidmain(){charch;cin>>ch;if(ch>=‘A’&&ch<=‘Z’)ch=ch+32;cout<<ch;}
c=(c>=‘A’&&c<=‘Z’)?(c+32):c
條件運算符:
格式:表達式1?表達式2:表達式3先求表達式1的值若不等于0(為真),求表達式2的值,并把它作為整個表達式的值若等于0(為假),求表達式3的值,并把它作為整個表達式的值相當于分支結構三目運算符,右結合性?:
計算:條件運算符if(ch>=‘A’&&ch<=‘Z’)ch=ch+32;如:c=(c>=‘A’&&c<=‘Z’)?(c+32):c二、if語句的雙分支if(表達式)語句1else語句2表達式語句1語句2真假入口出口
執(zhí)行:若表達式的值不為0,執(zhí)行語句1,否則執(zhí)行語句2
語句:#include<iostream.h>voidmain()
{ inta,b,x; cin>>a>>b; if(a>b) x=a; x*=x; else x=b; cout<<x;}例如:輸入兩個數(shù)a,b,若a大,則輸出a的平方,若b大,輸出b。
復合語句一定要加大括號{x=a;x*=a;}嵌套的兩種形式:(1)嵌套if--else(2)嵌套elseif三、if語句的嵌套(處理多分支問題)(1)嵌套if—elseif(表達式1)if(表達式3)語句1;if(表達式2)else語句2;else語句3;else語句4;外層內層中層
若表達式1的值為非0,即真,則執(zhí)行中層if—else結構;否則,執(zhí)行語句4。執(zhí)行中層時,若表達式2的值為非0,即真,則執(zhí)行內層if—else結構;否則,執(zhí)行語句3。執(zhí)行內層時,若表達式3的值為非0,即真,則執(zhí)行語句1;否則,執(zhí)行語句2。if_else嵌套流程圖if(表達式1)語句1;
elseif(表達式2)語句2;
elseif(表達式3)語句3;….elseif(表達式n)語句n;else
語句n+1;/*前面n個條件均不成立,執(zhí)行語句n+1*/(2)嵌套elseifelse_if嵌套流程圖例如:編寫程序計算函數(shù)
x*x-4(x<=0)y=x(0<x<=3)x*x+4(x>3)解:
根據(jù)題目的三個區(qū)間,兩個判斷點,形成三分支,可采用三種選擇結構設計。
方法1:else_if嵌套結構設計方法2:三個并列的if結構設計方法3:if_else嵌套結構設計
方法1:else_if嵌套結構----源程序:注:這種方法是判判斷點法
各條件互相關聯(lián)形成區(qū)間要考慮條件成立與不成立//X>3//0<X<=3//X<=0#include<iostream.h>voidmain(){intx,y;cout<<“pleaseenterthenumber:”;cin>>x;if(x>3) y=x*x+4;elseif(x>0) y=x;else y=x*x-4;cout<<“y=“<<y<<endl;} 方法2三個并列的if結構------源程序#include<iostream.h>voidmain(){intx,y;cout<<“pleaseenterthenumber:”;cin>>x;
if(x>3)y=x*x+4;
if(x>0&&x<=3)y=x;
if
(x<=0)y=x*x-4;cout<<“y=“<<y<<endl;}注:這種方法是判區(qū)間法。方法3:if_else嵌套結構設計#include<iostream.h>voidmain(){intx,y;cout<<“pleaseenterthenumber:”;cin>>x;
if(x>0)
if(x<=3) y=x;
else
y=x*x+4;else
y=x*x-4;cout<<“y=“<<y<<endl;}注:這種方法也是判判斷點法
各條件互相關聯(lián)形成區(qū)間要考慮條件成立與不成立S=t2t2-1t2-2t+1t2+4t-170<t<11≤t<22≤t<33≤t<4Attention!這題中有無效區(qū)間,用并列if結構時要排除無效區(qū)間,當t在無效區(qū)間時,應給s賦一個無效區(qū)間的任意值。例當t=-5則使s=-1//the1stMethod#include<iostream.h>voidmain(){ intt;cout<<"pleaseinputt="; cin>>t; if(t>0) if(t>=1) if(t>=2) if(t>=3) if(t>=4) cout<<"error,tcantbemorehan4!“; elsecout<<"s="<<t*t+4*t-7; elsecout<<"s="<<t*t-2*t+1 elsecout<<"s="<<t*t-1; elsecout<<"s="<<t*t; elsecout<<"error,tcantbelessthan0!“;
}例如:輸入年份,判斷是否為閏年,若是,回 答“Yes”,否則回答“No”。什么樣的年份是閏年?能被4整除:是閏年能被4整除,也能被100整除:不一定是閏年能被4整除,也能被100整除,也能被400整除:是閏年#include<iostream.h>voidmain(){intyear;cout<<“pleaseinputtheyear:”;cin>>year; if(year%100==0)}if(year%400==0)cout<<“Yes”<<endl;elsecout<<“No”<<endl;/*不能被400整除*/elsecout<<“No”<<endl;/*不能被4整除*/elsecout<<“Yes”<<endl;/*不能被100整除*/if(year%4==0)if(year%4)/*不能被4整除*/
cout<<“No”<<endl;elseif(year%100)/*不能被100整除*/
cout<<“Yes”<<endl;elseif(year%400)/*不能被400整除*/
cout<<“No”<<endl;elsecout<<“Yes”<<endl;用一個邏輯表達式包含所有條件:if((year%4==0&&year%100!=0)||(year%400==0))leap=1;elseleap=0;四、switch語句(開關語句)
形式:switch(表達式){case常量表達式1:語句序列1;case常量表達式2:語句序列2;
…..
case常量表達式n:語句序列n;default:語句序列n+1;}switch語句是多分支選擇語句先計算switch中表達式的值,在大括號中若找到一個匹配的值就從該語句開始,依次向下執(zhí)行.否則,執(zhí)行default后面的語句組。執(zhí)行:注意:
語句序列中可以有若干條語句,不用復合語句序列;case后的常量表達式的值必須為整型和字符型,起標號的作用。
大括號cin>>N;cout<<x;cin>>N;cout<<x;switch通常與break語句聯(lián)用:break用于中斷或結束語句(只能用在switch語句和循環(huán)語句中)例:輸入成績,若:90—100:A70—89:B60—69:C<60:Dbreak語句:#include<iostream.h>voidmain(){intcj;cin>>cj;switch(cj/10){ case10: case9:cout<<“\nA”;
case8:case7:cout<<“\nB”;case6:cout<<“\nC”;default:cout<<“\nD”;}}break;break;break;分支結構總結1、if語句的簡單分支2、if語句的雙分支:if--else3、if的嵌套4、switch語句的使用§3-5循環(huán)結構(滲透簡單算法)一、while語句*二、do--while語句*三、for語句*四、break語句五、循環(huán)的嵌套六、continue語句七、goto語句主要學習語句的執(zhí)行過程、使用方法一、while語句循環(huán):重復執(zhí)行一段語句語句格式:while(表達式)語句執(zhí)行過程:先求表達式的值,判斷為真為假,若為真,則執(zhí)行語句真假表達式語句假注意:語句:一個語句,不是語句序列表達式后面不能有分號例如:求1+2+3+…+100的和#include<iostream.h>voidmain(){ints,i;s=0;/*s為累加和*/
i=1;/*i為循環(huán)控制變量*/
while(i<=100)/*循環(huán)條件*/{s+=i;i++;}cout<<s;}返回#include<iostream.h>voidmain(){ints,i;10:s=0;20:i=1;30:while(i<=4)40:{s+=i;50:i++;}
60:cout<<s;}s=0循環(huán)過程:102040305060i=1s=0+1i=21s=1+2i=311i=4s=3+30s=6+4i=5s=101二、do--while語句格式do語句while(表達式);執(zhí)行情況:先執(zhí)行語句,在計算表達式的值,若非0,再執(zhí)行語句,否則執(zhí)行下面的語句真表達式語句假do后若有多條語句,需使用復合語句語句至少被執(zhí)行一次,不同于while語句注意while語句與do-while語句#include<iostream.h>voidmain(){ints,i;s=0;cin>>i;while(i<=100){s+=i;i++;}cout<<s;}#include<iostream.h>voidmain(){ints,i;s=0;cin>>i;do{s+=i;i++;}while(i<=100);cout<<s;}輸入:101輸出:0輸出:101三、for語句(當型循環(huán))
格式for(
表達式1;表達式2;表達式3)語句表達式2語句表達式1表達式3表達式1:作為初始化先執(zhí)行表達式1的值,再執(zhí)行表達式2,如果值為真,執(zhí)行語句,再執(zhí)行表達式3,否則執(zhí)行下面的語句。
執(zhí)行情況真假表達式2:作為循環(huán)控制,是循環(huán)條件表達式3:每次都要做改變循環(huán)變量for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)語句for(s=0,i=1;i<=100;i++)
s+=i;注意:
這三個表達式都可以忽略,但分號不能省for(;;)
不能構成死循環(huán),死循環(huán)只能用ctrl+c強行中止,所以源程序編輯后應先存盤。**全部省略表達式或省略表達式2**例如:#include<iostream.h>voidmain(){inti;i=100;while(i>=20) {cout<<“\t“<<i; i-=20; }}#include<iostream.h>voidmain(){inti;for(i=100;i>=20;i-=20)cout<<“\t”<<i;}例如:求n!(n的值由鍵盤輸入)#include<iostream.h>voidmain(){ intn;
doubles=1.0; cout<<"pleaseinputn="; cin>>n; for(inti=1;i<=n;i++) s*=i; cout<<n<<"!="<<s<<endl;}四、break語句
只用于switch語句和循環(huán)中,用在循環(huán)中,用來中止循環(huán),提前跳出循環(huán)體#include<iostream.h>voidmain(){inti=1,s=0;while(i<=100) {if(s>=2000)break; s+=i; i++; }cout<<“s=“<<s<<“i=”<<i;}Example1:結果:s=2016i=64Example2:輸入一個數(shù),判斷是否為素數(shù)#include<iostream.h>voidmain(){intn,i;cin>>n;for(i=2;i<n;i++) if(n%i==0)break;if(i==n) cout<<“\nYes”;elsecout<<“\nNo”;}例如:打印出100到200之間的素數(shù)。#include<iostream.h>voidmain(){inti,j;for(i=100;i<=200;i++) { for(j=2;j<i;j++) if(i%j==0)break; if(j>=i)cout<<“\t”<<i; }}五、循環(huán)嵌套內循環(huán)外循環(huán)
嵌套不能有交叉
在循環(huán)嵌套中,break語句只能退出一層循環(huán)#include<iostream.h>voidmain(){inti,j;longints=0,m=1;for(i=1;i<=5;i++){m*=i;s+=m;}cout<<s<<endl;}
單重for循環(huán):例:求1!+2!+3!…+5!雙重for循環(huán)的執(zhí)行過程:例:求1!+2!+3!…+5!#include<iostream.h>Voidmain(){inti,j;longints=0,m;for(i=1;i<=5;i++){m=1;for(j=1;j<=i;j++)m*=j;s+=m;}cout<<s<<endl;}
m=1;s=0;當i<=5當j<=im*=j;j++;s+=m;i++;cout<<s<<endl;#include<iostream.h>10s=0;voidmain()20for(i=1;i<=3;i++){inti,j;30{m=1;longintm,s;40for(j=1;j<=i;j++)50m*=j;60s+=m;}70cout<<s<<endl;}102030405060m=1s=0i=1j=1m=1*1s=0+1i=2j=1m=1m=1*1j=2m=1*2s=1+2i=3j=1j=2j=4m=1m=1*1m=1*2m=2*3s=3+670s=9i=4外走一次內走一遍j=2j=3j=3打印一九乘法表1*1=11*2=21*3=3…1*9=9#include<iostream.h>voidmain(){
inti=1,j;cout<<“\n”;for(j=1;j<=9;j++)cout<<i<<“*”<<j<<“=“<<i*j;}inti,j;for(i=1;i<=9;i++) {cout<<“\n”;
for(j=1;j<=9;j++)
/*循環(huán)嵌套*/ cout<<i<<“*”<<j<<“=“<<i*j<<“\t”; }}inti,j;for(i=1;i<=9;i++) {cout<<“\n”;
for(j=1;j<=i;j++)
/*循環(huán)嵌套*/ cout<<i<<“*”<<j<<“=“<<i*j<<“\t”; }}1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=16…1*9=92*9=183*9=274*9=36...六、continue語句
只能用在循環(huán)中continue通常與if語句結合,一同用于循環(huán)結構
注意:與break語句的區(qū)別continue:結束本次循環(huán),繼續(xù)下次循環(huán)break:中止循環(huán)的進行例:把1到10之間的奇數(shù)輸出出來#include<iostream.h>voidmain(){inti=0;While(++i<=10){if(i%2==0)continue; cout<<i<<““; }}
continue語句的學習
//程序1:#include<iostream.h>voidmain(){inti=100;while(i<=200){if(i%3==0)continue;cout<<i<<endl;i++;}}#include<iostream.h>voidmain(){inti=99;while(i<=200){i++;if(i%3==0)continue;cout<<i<<'\t';} cout<<endl;}七、goto語句goto語句的一般形式goto<語句標號>;程序舉例累加累乘判素數(shù)牛頓迭代法數(shù)值積分*算法:§3-1C++輸入輸出流一、無格式輸入輸出二、指定格式輸入輸出返回
輸入:從標準輸入設備上輸入數(shù)據(jù)到計算機內存中輸出:將計算機中的數(shù)據(jù)在標準輸出設備上輸出出來一、無格式輸入輸出(系統(tǒng)默認的格式)C++中除了可以繼續(xù)使用C語言中標準I/O函數(shù)(printf和scanf)外,還增加了特有的流輸入(cin)和流輸出(cout)。它們被定義在頭文件iostream.h中,在使用cin和cout前,要用預編譯命令#include將頭文件包含到用戶源文件中(輸入輸出預說明)。#include“iostream.h”
:在當前目錄和系統(tǒng)指定的目錄中找該文件#include<iostream.h>
:在由系統(tǒng)指定的文件目錄中找該文件返回1、無格式輸出cout輸出流是輸出一系列字節(jié),當程序需要在屏幕上顯示待輸出的數(shù)據(jù)時,操作符cout必須和操作符<<(插入操作符)配合使用。格式如下:cout<<變量1<<變量2<<...<<變量n;或cout<<變量1<<變量2...<<變量n;返回注:兩種形式輸出效果相同例如:
#include<iostream.h>voidmain(){inta,b;charc;a=1;b=2;c=‘a’;cout<<a<<b<<c;}結果為:12acout<<“a=“<<a<<“b=“<<b<<“c=“<<c;雙引號內的內容原樣輸出a=1b=2c=a#include“iostream.h”voidmain()
{cout<<“hello!\n”;cout<<“Iamastudent”;}例如:輸出結果為:helloIamastudent311返回2、無格式輸入cin當程序需要從鍵盤輸入數(shù)據(jù)(到變量)時,可以使用抽取操作符“>>”從cin輸入流中抽取字符。對于不同類型的數(shù)據(jù)cin格式都相同。格式:
cin>>變量1>>變量2>>...>>變量n;或cin>>變量1>>變量2 ...>>變量n;
返回#include“iostream.h”voidmain()
{inta,b;charc1,c2;cout<<“Pleaseinput2integers\n”;cin>>a>>b;cout<<a+b<<“\n”;cout<<“Pleaseinput2character\n”cin>>c1>>c2;cout<<c1<<c2<<endl;}例如:輸出結果為:Pleaseinput2integers102030Pleaseinput2characterabab312返回二、指定格式輸入輸出返回返回流的默認格式輸出有時不能滿足特殊要求,如:
doubleaverage=9.400067; cout<<average<<endl;結果顯示9.40007(默認顯示6位有效數(shù)字),而用戶若希望顯示9.40(保留兩位小數(shù))結果,流默認格式就無能為力了。C++用控制符可以對I/O流的格式進行控制,可以滿足用戶的要求??刂品陬^文件iomanip.h中,使用控制符時要在程序的頭上加頭文件iomanip.h。I/O流的常用控制符參P551、控制浮點數(shù)值顯示返回C++默認的流輸出數(shù)值有效位是6,使用setprecision(n)可控制輸出流顯示浮點數(shù)的數(shù)字個數(shù)。setprecision(n)與setiosflags(ios::fixed)合用,可以控制以定點方式輸出數(shù)據(jù)的小數(shù)點右邊的數(shù)字個數(shù)。ssetprecision(n)與setiosflags(ios::scientific)合用,可以控制指數(shù)表示法的小數(shù)位數(shù)。注意:小數(shù)位數(shù)截短時,進行4舍5入處理返回例:分別用浮點、定點和指數(shù)方式表示一個實數(shù)。#include<iostream.h>#include<iomanip.h>voidmain(){doubleaverage=9.400067;cout<<average<<endl;cout<<setprecision(1)<<average<<endl;cout<<setiosflags(ios::scientific);cout<<setprecision(6)<<average<<endl;cout<<setiosflags(ios::fixed)<<setprecision(8)<<average<<endl;}流按默認值6輸出有效數(shù)字位1小數(shù)點后的位數(shù)8設置以指數(shù)形式輸出2、設置值的輸出寬度為控制輸出間隔,除了可以使用空格強行控制外,還可以用setw(n)控制符,它包含在iomanip.h中。setw(n)主要用來輸出欲留空間的格數(shù),若空間多余則向右對齊;否則按實際數(shù)據(jù)長度輸出。返回注意:setw(n)設置的間隔方式不保留其效力,僅影響緊接其后的數(shù)值輸出。例如:返回#include<iostream.h>#include<iomanip.h>voidmain(){inta=80;intb=8000;cout<<setw(5)<<a<<endl;cout<<setw(2)<<b;}結果:???808000cout<<b;3、輸出8進制和16進制控制符hex、oct和dec分別對應16進制、8進制和10進制數(shù)的顯示,它們在iostream.h頭文件中已定義。例如:返回#include<iostream.h>voidmain(){intnumber=1001;cout<<“Decimal:”<<dec<<number<<endl<<“Hexadecimal:”<<hex<<number<<endl<<“Octal:”<<oct<<number<<endl;}結果為:Decimal:1001Hexdecimal:3e9Octal:17514、設置填充字符在默認狀態(tài)下,使用空格來保證字符間的正確間隔,C++也可以用setfill控制符使一個非空格字符作為字符間的間隔(一般配合setw控制符使用)。setfill在頭文件iomanip.h中已定義。setfill用法如下:返回例#include<iostream.h>#include<iomanip.h>voidmain(){cout<<setfill(‘*’)<<setw(2)<<12<<endl;<<setw(3)<<12<<endl;<<setw(4)<<12<<endl;}
運行結果:322返回12*12**12自學5、左右對齊輸出返回6、強制顯示小數(shù)點和符號7、控制換行endl§3-2結構化程序設計概念一、順序結構二、分支結構三、循環(huán)結構返回一、順序結構BAABNS圖流程圖返回
#include<iostream.h>voidmain(){inta,b,t;cin<<a<<b;t=a;a=b;b=t;cout<<“a=”<<a<<“b=“<<b;}abt1234341212a=34b=12輸出:順序結構程序設計。#include<iostream.h>#include<math.h>voidmain(){floata,b,c,s,area;cin>>a>>b>>c;s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));cout<<“area=“<<area<<endl;}B二、分支結構N如果
成績<60
那么通知補考否則告知你考試成績AY條件PABNY條件P返回2-1標識符
標識符是一個字符序列,用來標記常量、變量、數(shù)據(jù)類型函數(shù)及程序的名字。標識符的命名規(guī)則:
1.所有標識符必須由一個字母(a~z或A~Z)或下劃線(_)開頭;
2.標識符的其它部分可以用字母、下劃線或數(shù)字(0~9)組成;
3.大小寫字母表示不同意義,即代表不同的標識符,如前面的AGE和age;C++語言中的標識符可以分為3類:關鍵字、特定字、一般標識符(附錄A,B)
在定義標識符時,雖然語法上允許用下劃線開頭,但是,我們最好避免定義用下劃線開頭的標識符,因為編譯器常常定義一些下劃線開頭的標識符。
C++沒有限制一個標識符中字符的個數(shù),但是,大多數(shù)的編譯器都會有限制。不過,我們在定義標識符時,通常并不用擔心標識符中字符數(shù)會不會超過編譯器的限制,因為編譯器限制的數(shù)字很大(例如255)。
一個寫得好的程序,標識符應該盡量有意義。比如表示年可以用year,表示長度可以用length,表示累加和可以用sum等,這樣的標識符本身就增加了程序的可讀性,使程序更加清晰易懂。匈牙利命名法
正確地的利用命名有助于程序的查錯。通過在數(shù)據(jù)和函數(shù)名中加入額外的信息。既增進程序員對程序的理解,也方便查錯?;驹瓌t是:變量名=類型+對象描述
char8位字符chchGrade
BOOL布爾值bbEnable
int整型nnLength
long32位有符號整型llOffset
*指針ppDoc數(shù)組構造類型:基本類型
:結構體共用體指針類型空類型數(shù)據(jù)類型字符型實型整型
枚舉型類略基本型短整型長整型無符號型2-2基本數(shù)據(jù)類型基本類型
整型字符型實型枚舉型表1基本的數(shù)據(jù)類型及其表示范圍
1、常量(1)整型常量:沒有小數(shù)點十進制:不能用數(shù)字0開頭;如123,-23八進制:必須以數(shù)字0開頭;如0123十六進制:必須以0x或0X開頭,如0x123長整常量:數(shù)字后加l(或L),如123L2.3常量與變量(2)實型常量:又稱浮點數(shù)十進制形式:由數(shù)字和小數(shù)點組成(必須有小數(shù)點)如.123,0.123指數(shù)形式:由尾符、尾數(shù)、階碼標志e(E)階符、整數(shù)階碼構成如:
0.31415926×10=0.314159e+1
31.4159×10
=31.4159e-1注:浮點常量總是以雙精度形式出現(xiàn),若要表示float型數(shù),則必須在實型數(shù)后面加上f或F,若表示longdouble則加l或L。如:12.3(double型)12.3F(float),12.3L(longdouble)-11(3)字符型常量:
一般字符:鍵盤上有該符號
轉義字符:不能從鍵盤上直接輸入(P28)以“\”開始的字符序列,表示控制代碼單引號括起來的單個字符,‘a’’A’’2’單引號是定界符,不是常量本身的內容如
‘\n’表示回車換行(endl)‘\’’表示打印單引號‘\“’表示打印雙引號A:65a:970:48(4)字符串常量:3a9d#=s\0存儲:依次存放各自的ASCII碼,尾部自動加字符串結束標志‘\0’,即:長度:為其本身的長度雙引號括起來的一串字符例“3a9d#=s”“2天津ABC”
‘a’:字符常量,存儲其ASCII碼值,占據(jù)一個字節(jié)
“a”:字符串常量,占據(jù)兩個字節(jié),即:a與\0的ASCII碼值‘a’與“a”的區(qū)別:charc1,c2;inti;c1=‘A’;c2=c1+32;i=c2;注:字符的ASCII碼與整型數(shù)據(jù)可以通用,可以相互賦值注:
在字符串里,可以使用轉義字符的書寫方式cout<<“\”Iamastudent!\””;例如:在屏幕上輸出:“Iamastudent!”“A\Sk3”或cout<<“A\\Sk3”;
(5)符號常量
C++中常量可以是常數(shù),也可以是代表固定不變的值的名字—符號常量。比如程序中經常用到某個常數(shù),此時可以定義一個名字來表示此常數(shù),以便改進程序的可讀性。例如計算圓面積或圓周長要用到3.1415926(不能直接用
),可定義為符號常量。定義符號常量一般形式:const
數(shù)據(jù)類型符號常量=表達式;例如:constfloatPI=3.1415926;
注意:(1)符號常量定義時必須初始化。如:
constfloatPI; PI=3.1415926; //error(2)定義中“表達式”只能是常量表達式,不能含有變量和函數(shù)。(6)枚舉常量使用關鍵字enum定義枚舉類型常量,枚舉常量是一種符號常量,在內存中表示整型數(shù).enum
類型名{枚舉常量1,枚舉常量2,….};例如:
enumCOLOR{RED,BLUE,GREEN,WHITE,BLACK};其中COLOR是枚舉類型名,不是變量名,不占內存空間.RED,BLUE…是符號常量,如果沒有專門規(guī)定,第一個符號常量的枚舉值就是0,其他依次為:1,2,3,….,故RED的值為0,BLUE的值為1.可以給符號常量指定枚舉值,也可以部分指定枚舉值.
enumCOLOR{RED=100,BLUE=200,GREEN,WHITE=400};其中GREEN自動被賦值為201.例:
in
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025進出口貿易公司購銷合同范本
- 2025資產保全擔保合同
- 南昌倉庫出租合同范本
- 物業(yè)和公司合同范本
- 家政服務搬家合同范本
- 技術工種合同范本
- 保姆合同范本 照顧嬰兒
- 肯德基門安裝合同范本
- 店面鋪面轉讓合同范本
- 線上雇傭合同范本模板
- 完整的離婚協(xié)議書打印電子版(2025年版)
- 自然科學類博物館AI應用行業(yè)跨境出海戰(zhàn)略研究報告
- 《小學科學課程標準》解讀與教學設計
- 2025屆高考新型題目“糾正錯別字”新題模擬練習
- 2024年江蘇省南京市中考數(shù)學試卷真題(含答案逐題解析)
- 兒童保健工作規(guī)范和技術規(guī)范
- 2025年區(qū)塊鏈應用操作員職業(yè)技能競賽理論參考試指導題庫500題(含答案)
- 福建地區(qū) 綠色食品琯溪蜜柚生產操作規(guī)程
- 人工智能智能客服系統(tǒng)
- 民辦學校教職工學年度考核方案模版(3篇)
- 集團公司司庫管理辦法
評論
0/150
提交評論