




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C++面向對象的程式設計第一章程式設計基礎學習目標:
初步掌握程式設計的概念和基本方法;瞭解C++語言的特點;學會使用VisualC++集成開發環境創建並運行簡單的C++專案。
瞭解電腦語言及其發展,瞭解高級語言的優點。
瞭解結構化程式設計的基本概念,初步掌握結構化程式設計方法
瞭解面向對象程式設計的思想、基本概念。
初步接觸C++語言,瞭解C++語言的特點。
熟悉VisualC++集成開發環境的基本使用方法,並完成一個簡單的C++程式的編寫、編譯、調試和運行。
學習方法
本章概念和知識點較多,學習的時候注意不能死記硬背,要分清知識點的輕重程度。對於電腦語言的發展,只要瞭解其主要過程就可以了;對於程式設計方法和C++語言的特點,不能在本章範圍內孤立學習,要結合下麵相應的章節以及親自上機實踐才能掌握,並且這是個漸進的過程,不能一蹴而就;對於C++集成開發環境的使用則一定要通過實際的動手操作才能熟悉。
自然語言與電腦語言之間的鴻溝機器語言機器可以直接識別並執行面向機器高級語言低級語言面向過程面向對象關心求解過程著眼點:解決“什麼”問題關心一個對象能幹什麼例如:FORTRAN、BASIC
結構化分析方法和設計方法例:C++、JAVA面向對象的分析方法和設計方法“編譯”“解釋”“鏈接”中級語言高級語言雙重功能例:C機器語言、組合語言和高級語言組合語言1.設計思路自頂向下、功能分解、逐步求精。採用模組分解與功能抽象,自頂向下、分而治之。把精力主要集中在對如何求解問題的演算法邏輯和過程的描述上,通過程式把解決問題的步驟告訴電腦。當一些任務十分複雜以至無法描述時,可以將它拆分為一系列較小的功能部件,直到這些自完備的子任務小到易於理解的程度。
2.程式結構按功能劃分為若干個基本模組,形成一個樹狀結構。各模組間的關係盡可能簡單,功能上相對獨立;每一模組內部均是由順序、選擇和迴圈三種基本結構組成。其模組化實現的具體方法是使用副程式。
面向過程的程式設計3.缺點可重用性差:相對於老問題的新方法帶來額外的開銷;安全性差:把數據和處理數據的過程分離為相互獨立的實體;難以開發圖形介面的應用;例如,計算一個公司中每一個職員的平均工資是一項較為複雜的任務。可以將其拆分為以下的子任務:
(1)計算總共有多少職員
(2)計算工資總額
(3)用職員人數去除工資總額
計算工資總額本身又可分為一系列子任務
(1)找出每個職員的檔案
(2)讀出工資數額
(3)把工資加到部分和上
(4)讀出下個職員的檔案
面向對象的程式設計
設計思想:
面向對象程式設計方法不是以函數過程和數據結構為中心,而是以對象為代表求解問題的中心環節.它追求的是現實問題空間與軟體系統解空間的近似和直接模擬.從而使人們對複雜系統的認識過程與系統的程式設計實現過程盡可能一致.面向對象語言的發展過程1、雛形階段
60年代,挪威計算中心開發的Simula67語言,是面向對象語言發展史上的第一個里程碑。它引入了類的概念和繼承的機制。具有了面向對象語言的重要特徵,是面向對象語言的先驅。
72年,Smalltalk-72問世,在Smalltalk-72中,任何東西都是對象
Smalltalk-72的問世,標誌著面向對象程式設計方法的正式形成。但作為語言還不完善,處於研究性和實驗性階段。
2、完善階段
1981年,Smalltalk-80問世,成為面向對象發展史上最重要的里程碑。它具備了絕大部分面向對象的基本概念和機制,是第一個能夠實際應用的面向對象語言,隨著應用的深入,越來越多的人認識並接收了面向對象的思想,形成了一種嶄新的程式設計風格,引發了電腦軟體領域一場意義深遠的變革。
(1)作為一種嶄新的軟體設計方法,被大家廣泛接受尚需一定的時間,即使目前,還沒有為所有人所接受。(2)Smalltalk-80本身的商品化軟體開發工作直到1987年才開始進行。(3)太過理論化,追求一種純OO的宗旨,不能為許多講究實效的軟體開發人員接受。
3、繁榮階段
80年代中期到90年代,出現了大批實用的OOPL,如C++、Objective-C、ObjectPascal、Delphi等。大多都是一種混合型的面向對象語言,更重視實用性。 特別是C++語言,它是在C語言的基礎上擴充的,對C相容,且十分重視代碼的執行效率,所以以成為應用最為廣泛的OOPL。 面向對象的編程語言的繁榮是面向對象方法走向實用的重要標誌,也是面向對象方法在電腦學術界、產業界和教育界受到越來越高的重視面向對象的當前的研究及實踐領域OO方法誕生20多年以來,已經進入電腦科學的各個分支領域,並在繼續發展。1、面向對象的編程語言(OOPL)2、面向對象的分析和麵向對象的設計(OOA/OOD)
本課程的重點。產生於80年代末期,目前仍在發展和健全的過程。3、面向對象的資料庫(OODB)
是傳統資料庫技術與面向對象方法的結合。4、面向對象的軟體開發環境
已經比較成熟,如C++Builder、VC6.0、Delphi等。5、面向對象的圖形用戶介面(GUI)開發技術6、面向對象的智能程式設計
即面向對象方法與人工智慧領域的專家系統的結合。7、面向對象的體系結構
是一種新型的電腦體系結構,連同支持面向對象技術的新興操作系統,可望從根本上提高面向對象的軟體開發效率和運行效率,並形成從硬體到操作系統、語言、介面及上層應用支持系統一體化的面向對象的開發及運行環境。C++的發展歷史從C到C++
C語言是貝爾實驗室在B語言的基礎上開發出來的,1972年在一臺DECPDP-11電腦上實現了最初的C語言。C是作為UNIX操作系統的開發語言而開始廣為人們所認識。實際上,當今許多新的重要的操作系統都是用C或C++編寫的。在過去20年內,C語言已經能夠用在絕大多數電腦上了。C語言是與硬體無關的。由於C語言的嚴謹設計,使得把用C語言編寫的程式移植到大多數電腦上成為可能。到70年代末,C已經演化為現在所說的“傳統的C語言”。
C++入門
為了滿足管理程式的複雜性需要,1980年,貝爾實驗室開始對C進行改進和擴充。最初的成果稱為“帶類的C”,1983年正式取名為C++,在經歷了3次C++修訂後,於1994年制定了ANSIC++標準的草案。以後又經過不斷完善,成為目前的C++。C++仍在不斷發展中。
C++包含了整個C,C是建立C++的基礎。C++包括C的全部特徵、屬性和優點,同時添加了對面向對象編程(OOP)的完全支持。
C語言盛行的同時,也暴露出它的局限:
(1)C類型檢查機制相對較弱,這使得程式中的一些錯誤不能在編譯時發現。
(2)C本身幾乎沒有支持代碼重用的語言結構,因此一個程式員精心設計的程式,很難為其他程式所用。
(3)當程式的規模達到一定的程度時,程式員很難控制程式的複雜性。C++的特點
(1)C++保持與C相容。
(2)用C++編寫的程式可讀性更好,代碼結構更為合理,支持面向對象的機制,可方便地構造出模擬現實問題的實體和操作。
(3)生成代碼的品質高,運行效率僅比組合語言代碼段慢10%到20%(4)從開發時間、費用到形成的軟體的可重用性、可擴充性、可維護性和可靠性等方面有了很大的提高,使得大中型的程式開發專案變得容易的多。學習C++的目的
1.本身是一門優秀的設計語言;
2.同時是一門實用的軟體開發語言,
3.可觸類旁通其他語言,如C#,Java等;
4.掌握面向對象的軟體設計方法;學習方法
1.掌握基本概念,如類、繼承、多態;
2.多實踐.交流;
3.多讀優秀的源代碼;編譯器
1.BorlandC++Builder5.0/6.0,
2.BorlandC++BuilderX1.0;3.MicrosoftVisualC++6.0
課程考核要求
1.熟悉重要概念;
2.讀懂C++編寫的常用的典型程式;
3.可獨立編寫C++程式;初識C++的函數和對象首先看下麵這個簡單的C++程式
//simple.cpp是一個簡單的C++程式#include<iostream>//包含頭檔Usingnamespacestd;//使用命名空間voidmain()//主函數{inti;//初始化對象cout<<“HelloC++!\n”;//輸出提示資訊cout<<"請輸入一個整數:";cin>>i;//接受輸入數值cout<<"您輸入的整數是:";cout<<i;//輸出值cout<<'\n';}
C語言程式編譯預處理命令
(1)宏定義:不帶參數的宏;帶參數的宏;
#define<宏名><替換字串>
取消宏定義
#undef<宏名>(2)檔包含:兩種格式―――牽涉到C程式檔的組織方式:公用數據和函數說明放在頭檔(.h)中;實現函數功能的函數體和局部數據放在原始檔案(.cpp)中;
#include<檔案名>
在系統指定的目錄中查找檔(系統設置時的include目錄)。
#include“檔案名”在當前目錄中查找檔,若找不到,再到系統指定的目錄中查找。我們對這個程式進行解釋2.主函數
C++源程式可由一個main函數和其他函數構成。
函數是c++程式的基本單位,一個C++程式有且只能有一個主函數main,是程式的入口,其他函數通過函數調用被執行。用戶可自己定義函數,也可使用系統提供的函數。3.使用注釋
注釋部分以“//…….”(或/*……*/)來標誌,系統對注釋不做任何處理,幫助人閱讀程式
//…….到行尾
/*……*/多行4.使用命名空間
這是新的C++標準引入了新標準類庫的頭檔載入方式,即省略“.h”。不過必須同時使用下述語句:
Usingnamespacestd;它提高了程式的性能和可靠性5.使用輸入和輸出對象C++中的輸入輸出操作由“流”來處理。C++將數據從一個對象流向另一個對象的流動抽象為“流”提取操作:從流中獲取數據的操作;插入操作:向流中添加數據的操作;流對象(iostream.h)
cin:用來處理標準輸入,即鍵盤輸入;
cout:用來處理標準輸出,即螢幕輸出;
①數據輸出cout
(1)作用:將數據輸出到外設(如螢幕);(2)格式:cout<<運算式1<<運算式2<<運算式3<<…<<運算式n其中“<<”稱為插入運算符,將其後運算式的值輸出到顯示器當前游標位置。例如,
inta=2,b=3;charc='x';cout<<"a="<<a<<'\t'<<"b="<<b<<'\n';cout<<"c="<<c<<'\n';則執行後顯示器上顯示:
a=2 b=3c=x②數據輸出cin(1)作用:從外設(鍵盤)輸入數據到變數(2)格式:cin>>變數名1〔>>變數名2>>變數名3…>>變數名n〕;其中,“>>”稱為提取運算符,表示將暫停程式執行,等待用戶從鍵盤上輸入相應的數據。在提取運算符後只能跟一個變數名,但“>>變數名”可以重複多次,即可給一個變數輸入數據,也可給多個變數輸入數據7.函數類型和返回值
函數由函數說明部分和函數體部分組成
floataverage(floata,floatb,floatc){ floatsum,average; sum=a+b+c; average=sum/3; returnaverage;}6.對象的定義和初始化
定義對象包括為它命名並賦予它數據類型。每個對象都隸屬於某個特定的數據類型。人們習慣於稱對象為變數,C++程式設計時,為了儘快養成使用對象思考問題的習慣,建議改成對象。本程式使用整型對象:inti8.程式運行結果:
HelloC++!
請輸入一個整數:2
您輸入的整數是:2
C++語言對C語言擴充和增強的幾點具體體現1.更加靈活的變數說明
在傳統的C語言中,局部變數的說明必須集中放在執行代碼的前面,數據說明語句和執行語句的混合將引起編譯錯誤。而在C++中,可以在程式代碼塊的任何地方中卻可進行局部變數的說明。比如下麵的代碼在C語言中是不正確的,在C++語言以正常運行。
for(inti=1;i<=100;i++);
这样做的好处是使变量的定义和它的使用集中在一起,意义一目了然。
2.更加嚴格的函數原型說明
C++摒棄了C語言對函數原型隨意簡化的方式,這種簡化是許多C語言程式錯誤的根源。C++語言要求編程者為函數提供完整的原型,包括全部參數的類型和返回值得說明。
例如,有字元型和雙精度類型兩個參數、返回整型值的函數f,原型應該寫為:
intf(char,double);
而C語言中允許將這個原型寫成"f();"。
在函数原型说明中,参数名可有可无,并且可以和函数定义中的参数名不一致。3.函數缺省參數
C++中允許函數有缺省參數。所謂缺省,是指函數調用時可以不給出實際的參數值。下麵是一個有缺省參數的函數定義的實例:例:
intf(inta,intb=1)
{
returna*b;
}
此後,函數調用f(3,1)和f(3)將返回同樣的結果。4.增加了內聯函數(InlineFunction)
5.增加了函數重載機制
6.更加方便的動態存儲分配函數部分講7.
作用域限定運算符
::
作用域限定運算符::用於對當前作用域之外的同名變數進行訪問。例如在下面的例子中,我們可以利用::實現在局部變數a的作用域範圍內對全局變數a的訪問。
例:#include<iostream.h>
inta;
voidmain()
{
floata;
a=3.14;
::a=6;
cout<<“localvariablea=”<<a<<endl;
cout<<“globalvariablea=”<<::a<<endl;
}程式執行結果如下:
localvariablea=3.14
globalvariablea=6
程式的調試與運行一、C++程式的編輯、編譯和運行二、VisualC++6.01.編輯:輸入、編輯、保存成原始檔案(多個)2.編譯、鏈接根源程式檔:預處理;編譯生成目標程式檔.obj;鏈接生成可執行檔.exe3.運行程式:4.程式調試:編譯錯誤、鏈接錯誤、演算法錯誤啟動VisualC++:方法:開始菜單—>程式—>MicrosoftVisualstudio6.0—>MicrosoftVisualC++6.0;或:
雙擊桌面上的MicrosoftVisualstudio6.0的快捷方式;標題欄菜單欄工具欄工作區窗口Workspace輸出窗口Output編輯區狀態欄VC++集成環境簡介:VisualC++6.0主窗口(實驗P1)Project:
一個VC++應用程式稱為一個專案
專案是一些相互關聯的原始檔案的集合,包括:
SourceFiles根源程式代碼檔.cppHeaderFiles頭檔.hResourceFiles資源檔程式結構資訊檔系統參數設置檔等
一個專案的檔可以存放在不同的檔夾和驅動器中專案(project)※可包含多個專案,一般只包含一個專案※VisualC++以專案工作區方式組織檔、專案和專案配置。※建立專案時,自動建立專案工作區檔.dsw
用於描述專案工作區的內容和設置※同時建立工程檔.dsp和工作區選項檔
.opt
用於保存專案工作區的設置※在專案工作區中可查看和訪問專案中的各種元素專案工作區(workspace)1.啟動VisualC++6.02.創建新專案,要添加到專案工作區,有兩種選擇:
(1)添加到新創建的專案工作區(2)添加到當前指定的專案工作區3.建立新的原始檔案,要添加到指定專案中4.編輯/輸入根源程式,保存程式.cpp(.h)注意:一個專案中只能有一個含main函數的檔5.編譯根源程式:Build菜單中的Compile命令(ctrl+F7),形成目標檔.obj。6.鏈接目標程式,形成可執行檔:Build菜單中的Build命令(F7),形成可執行檔.exe。7.運行程式:Build菜單中的Execute命令(ctrl+F5)VisualC++6.0中創建一個C/C++程式(新專案)的步驟:知識點:本章主要講述程式設計的基本概念和方法,並簡單介紹了C++語言的特點以及VisualC++集成開發環境的使用。學習C++,不一定非要學過C。但學過C能促進C++的學習。
C++程式由函數構成,它總是從主函數main()開始運行。但並不是說,main()函數非得要寫在程式的最前面。
函數有兩種:標準庫函數和用戶定義函數。main()函數是特殊的用戶定義函數。每個程式只能有一個main()函數,並且必須要有一個main()函數。
一個語句可以寫在多個程式行上,一個程式行可以寫多個語句。語句以分號結束。
C++通過標準輸入輸出流進行輸入輸出。
C++程式經過編輯、編譯和連接,產生可運行的exe檔。
內容小結:§
3-3運算符和運算式(續)一、關係運算符和關係運算式二、邏輯運算符和邏輯運算式一、關係運算符和運算式:
關係運算符:>>=<<===!=高低雙目,左結合性
關係運算式格式:<運算式><關係運算符><運算式>例:x>5y>=x+3x==y*2
值:條件成立為真1
條件不成立為假,0二、邏輯運算符和邏輯運算式邏輯運算符:
運算元為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(運算式)語句
運算式為任意運算式
若有若干語句,要構成複合語句
執行:計算運算式的值,若為真(不為0)則執行語句;否則不執行語句例如:求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若為大寫字母,則把它變為小寫字母,否則為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真假入口出口
執行:若運算式的值不為0,執行語句1,否則執行語句2
語句:#include<iostream.h>voidmain()
{ inta,b,x; cin>>a>>b; if(a>b) x=a; x*=x; else x=b; cout<<x;}例如:輸入兩個數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,即真,則執行中層if—else結構;否則,執行語句4。執行中層時,若運算式2的值為非0,即真,則執行內層if—else結構;否則,執行語句3。執行內層時,若運算式3的值為非0,即真,則執行語句1;否則,執行語句2。if_else嵌套流程圖if(運算式1)語句1;
elseif(運算式2)語句2;
elseif(運算式3)語句3;….elseif(運算式n)語句n;else
語句n+1;/*前面n個條件均不成立,執行語句n+1*/(2)嵌套elseifelse_if嵌套流程圖例如:編寫程式計算函數
x*x-4(x<=0)y=x(0<x<=3)x*x+4(x>3)解:
根據題目的三個區間,兩個判斷點,形成三分支,可採用三種選擇結構設計。
方法1:else_if嵌套結構設計方法2:三個並列的if結構設計方法3:if_else嵌套結構設計
方法1:else_if嵌套結構----根源程式:注:這種方法是判判斷點法
各條件互相關聯形成區間要考慮條件成立與不成立//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;}注:這種方法是判區間法。方法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;}注:這種方法也是判判斷點法
各條件互相關聯形成區間要考慮條件成立與不成立S=t2t2-1t2-2t+1t2+4t-170<t<11≤t<22≤t<33≤t<4Attention!這題中有無效區間,用並列if結構時要排除無效區間,當t在無效區間時,應給s賦一個無效區間的任意值。例當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中表達式的值,在大括弧中若找到一個匹配的值就從該語句開始,依次向下執行.否則,執行default後面的語句組。執行:注意:
語句序列中可以有若干條語句,不用複合語句序列;case後的常量運算式的值必須為整型和字元型,起標號的作用。
大括弧cin>>N;cout<<x;cin>>N;cout<<x;switch通常與break語句聯用:break用於中斷或結束語句(只能用在switch語句和迴圈語句中)例:輸入成績,若: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迴圈結構(滲透簡單演算法)一、while語句*二、do--while語句*三、for語句*四、break語句五、迴圈的嵌套六、continue語句七、goto語句主要學習語句的執行過程、使用方法一、while語句迴圈:重複執行一段語句語句格式:while(運算式)語句執行過程:先求運算式的值,判斷為真為假,若為真,則執行語句真假運算式語句假注意:語句:一個語句,不是語句序列運算式後面不能有分號例如:求1+2+3+…+100的和#include<iostream.h>voidmain(){ints,i;s=0;/*s為累加和*/
i=1;/*i為迴圈控制變數*/
while(i<=100)/*迴圈條件*/{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迴圈過程:102040305060i=1s=0+1i=21s=1+2i=311i=4s=3+30s=6+4i=5s=101二、do--while語句格式do語句while(運算式);執行情況:先執行語句,在計算運算式的值,若非0,再執行語句,否則執行下麵的語句真運算式語句假do後若有多條語句,需使用複合語句語句至少被執行一次,不同於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語句(當型迴圈)
格式for(
運算式1;運算式2;運算式3)語句運算式2語句運算式1運算式3運算式1:作為初始化先執行運算式1的值,再執行運算式2,如果值為真,執行語句,再執行運算式3,否則執行下麵的語句。
執行情況真假運算式2:作為迴圈控制,是迴圈條件運算式3:每次都要做改變迴圈變數for(迴圈變數賦初值;迴圈條件;迴圈變數增值)語句for(s=0,i=1;i<=100;i++)
s+=i;注意:
這三個運算式都可以忽略,但分號不能省for(;;)
不能構成死迴圈,死迴圈只能用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語句和迴圈中,用在迴圈中,用來中止迴圈,提前跳出循環體#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:輸入一個數,判斷是否為素數#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之間的素數。#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; }}五、迴圈嵌套內迴圈外迴圈
嵌套不能有交叉
在迴圈嵌套中,break語句只能退出一層迴圈#include<iostream.h>voidmain(){inti,j;longints=0,m=1;for(i=1;i<=5;i++){m*=i;s+=m;}cout<<s<<endl;}
單重for迴圈:例:求1!+2!+3!…+5!雙重for迴圈的執行過程:例:求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++)
/*迴圈嵌套*/ cout<<i<<“*”<<j<<“=“<<i*j<<“\t”; }}inti,j;for(i=1;i<=9;i++) {cout<<“\n”;
for(j=1;j<=i;j++)
/*迴圈嵌套*/ 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語句
只能用在迴圈中continue通常與if語句結合,一同用於迴圈結構
注意:與break語句的區別continue:結束本次迴圈,繼續下次迴圈break:中止迴圈的進行例:把1到10之間的奇數輸出出來#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<語句標號>;程式舉例累加累乘判素數牛頓迭代法數值積分*演算法:§3-1C++輸入輸出流一、無格式輸入輸出二、指定格式輸入輸出返回
輸入:從標準輸入設備上輸入數據到電腦記憶體中輸出:將電腦中的數據在標準輸出設備上輸出出來一、無格式輸入輸出(系統默認的格式)C++中除了可以繼續使用C語言中標准I/O函數(printf和scanf)外,還增加了特有的流輸入(cin)和流輸出(cout)。它們被定義在頭檔iostream.h中,在使用cin和cout前,要用預編譯命令#include將頭檔包含到用戶原始檔案中(輸入輸出預說明)。#include“iostream.h”
:在當前目錄和系統指定的目錄中找該檔#include<iostream.h>
:在由系統指定的檔目錄中找該檔返回1、無格式輸出cout輸出流是輸出一系列位元組,當程式需要在螢幕上顯示待輸出的數據時,操作符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當程式需要從鍵盤輸入數據(到變數)時,可以使用抽取操作符“>>”從cin輸入流中抽取字元。對於不同類型的數據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位有效數字),而用戶若希望顯示9.40(保留兩位小數)結果,流默認格式就無能為力了。C++用控制符可以對I/O流的格式進行控制,可以滿足用戶的要求。控制符在頭檔iomanip.h中,使用控制符時要在程式的頭上加頭檔iomanip.h。I/O流的常用控制符參P551、控制浮點數值顯示返回C++默認的流輸出數值有效位是6,使用setprecision(n)可控制輸出流顯示浮點數的數字個數。setprecision(n)與setiosflags(ios::fixed)合用,可以控制以定點方式輸出數據的小數點右邊的數字個數。ssetprecision(n)與setiosflags(ios::scientific)合用,可以控制指數表示法的小數位數。注意:小數位數截短時,進行4舍5入處理返回例:分別用浮點、定點和指數方式表示一個實數。#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輸出有效數字位1小數點後的位數8設置以指數形式輸出2、設置值的輸出寬度為控制輸出間隔,除了可以使用空格強行控制外,還可以用setw(n)控制符,它包含在iomanip.h中。setw(n)主要用來輸出欲留空間的格數,若空間多餘則向右對齊;否則按實際數據長度輸出。返回注意:setw(n)設置的間隔方式不保留其效力,僅影響緊接其後的數值輸出。例如:返回#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進制數的顯示,它們在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、設置填充字元在默認狀態下,使用空格來保證字元間的正確間隔,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、強制顯示小數點和符號7、控制換行endl§3-2結構化程式設計概念一、順序結構二、分支結構三、迴圈結構返回一、順序結構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識別字
標識符是一個字元序列,用來標記常量、變數、數據類型函數及程式的名字。識別字的命名規則:
1.所有識別字必須由一個字母(a~z或A~Z)或下劃線(_)開頭;
2.識別字的其他部分可以用字母、下劃線或數字(0~9)組成;
3.大小寫字母表示不同意義,即代表不同的識別字,如前面的AGE和age;C++語言中的識別字可以分為3類:關鍵字、特定字、一般識別字(附錄A,B)
在定義識別字時,雖然語法上允許用下劃線開頭,但是,我們最好避免定義用下劃線開頭的識別字,因為編譯器常常定義一些下劃線開頭的識別字。
C++沒有限制一個識別字中字元的個數,但是,大多數的編譯器都會有限制。不過,我們在定義識別字時,通常並不用擔心識別字中字元數會不會超過編譯器的限制,因為編譯器限制的數字很大(例如255)。
一個寫得好的程式,識別字應該儘量有意義。比如表示年可以用year,表示長度可以用length,表示累加和可以用sum等,這樣的識別字本身就增加了程式的可讀性,使程式更加清晰易懂。匈牙利命名法
正確地的利用命名有助於程式的查錯。通過在數據和函數名中加入額外的資訊。既增進程式員對程式的理解,也方便查錯。基本原則是:變數名=類型+對象描述
char8位字元chchGrade
BOOL布爾值bbEnable
int整型nnLength
long32位有符號整型llOffset
*指針ppDoc數組構造類型:基本類型
:結構體共用體指針類型空類型數據類型字元型實型整型
枚舉型類略基本型短整型長整型無符號型2-2基本數據類型基本類型
整型字元型實型枚舉型表1基本的數據類型及其表示範圍
1、常量(1)整型常量:沒有小數點十進位:不能用數字0開頭;如123,-23八進制:必須以數字0開頭;如0123十六進制:必須以0x或0X開頭,如0x123長整常量:數字後加l(或L),如123L2.3常量與變數(2)實型常量:又称浮点数十進位形式:由數字和小數點組成(必須有小數點)如.123,0.123指數形式:由尾符、尾數、階碼標誌e(E)階符、整數階碼構成如:
0.31415926×10=0.314159e+1
31.4159×10
=31.4159e-1注:浮點常量總是以雙精度形式出現,若要表示float型數,則必須在實型數後面加上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碼值,佔據一個位元組
“a”:字串常量,占据两个字节,即:a與\0的ASCII碼值‘a’與“a”的區別:charc1,c2;inti;c1=‘A’;c2=c1+32;i=c2;注:字元的ASCII碼與整型數據可以通用,可以相互賦值注:
在字串裏,可以使用轉義字元的書寫方式cout<<“\”Iamastudent!\””;例如:在螢幕上輸出:“Iamastudent!”“A\Sk3”或cout<<“A\\Sk3”;
(5)符號常量
C++中常量可以是常數,也可以是代表固定不變的值的名字—符號常量。比如程式中經常用到某個常數,此時可以定義一個名字來表示此常數,以便改進程式的可讀性。例如計算圓面積或圓周長要用到3.1415926(不能直接用
),可定義為符號常量。定義符號常量一般形式:const
數據類型符號常量=運算式;例如:constfloatPI=3.1415926;
注意:(1)符號常量定義時必須初始化。如:
constfloatPI; PI=3.1415926; //error(2)定義中“運算式”只能是常量運算式,不能含有變數和函數。(6)枚舉常量使用關鍵字enum定義枚舉類型常量,枚舉常量是一種符號常量,在內存中表示整型數.enum
類型名{枚舉常量1,枚舉常量2,….};例如:
enumCOLOR{RED,BLUE,GREEN,WHITE,BLACK};其中COLOR是枚舉類型名,不是變數名,不占記憶體空間.RED,BLUE…是符號常量,如果沒有專門規定,第一個符號常量的枚舉值就是0,其他依次為:1,2,3,….,故RED的值為0,BLUE的值為1.可以給符號常量指定枚舉值,也可以部分指定枚舉值.
enumCOLOR{RED=100,BLUE=200,GREEN,WHITE=400};其中GREEN自動被賦值為201.例:
inti,j,k;longl1,l2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- sap考试试题及答案
- 电网基础知识培训课程课件
- 电缆颗粒生产基础知识培训课件
- 三洲田道路施工方案
- 安徽省亳州市蒙城县涡南片区联考2022-2023学年九年级上学期期中化学试题(含答案)
- 电站电工知识培训内容课件
- 电磁炉介绍与使用
- 北师大六上期中考试卷及答案
- 北京地理模拟中考试卷及答案
- 3-8-Diamino-6-phenylphenanthridine-生命科学试剂-MCE
- 教育政策法规课件
- 湖南省安仁县2025年上半年事业单位公开招聘试题含答案分析
- 2025-2026学年秋季第一学期学校德育工作安排表
- 2025-2030中国汽车工程服务外包(ESO)行业现状调查与前景趋势研究报告
- 外墙排水管施工合同
- 2022年十部经典的三级片电影
- 六三制新青岛版四年级科学上册第一单元《动物王国》全部课件(一共5课时)
- 顶推法钢箱梁安装施工方案
- 中国诗词协会入会申请表
- 新版人民音乐出版社三年级(上册)音乐教案简版
- 北京四方说明书cst302a
评论
0/150
提交评论