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

下載本文檔

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

文檔簡介

C++簡單程式設(shè)計(jì)

2C++語言的產(chǎn)生C++是從C語言發(fā)展演變而來的,首先是一個(gè)更好的C引入了類的機(jī)制,最初的C++被稱為“帶類的C”1983年正式取名為C++從1989年開始C++語言的標(biāo)準(zhǔn)化工作於1994年制定了ANSIC++標(biāo)準(zhǔn)草案於1998年11月被國際標(biāo)準(zhǔn)化組織(ISO)批準(zhǔn)為國際標(biāo)準(zhǔn),成為目前的C++C++語言概述3C++的特點(diǎn)全面相容C它保持了C的簡潔、高效和接近組合語言等特點(diǎn)對C的類型系統(tǒng)進(jìn)行了改革和擴(kuò)充C++也支持面向過程的程式設(shè)計(jì),不是一個(gè)純正的面向?qū)ο蟮恼Z言支持面向?qū)ο蟮姆椒–++語言概述4C++程式實(shí)例—例2-1//2_1.cpp#include<iostream>usingnamespacestd;intmain(){cout<<"Hello!\n";cout<<"Welcometoc++!\n";}運(yùn)行結(jié)果:Hello!Welcometoc++!C++語言概述5C++字元集大小寫的英文字母:A~Z,a~z數(shù)字字元:0~9特殊字元:空格 ! # % ^ & *

_(下劃線) + = - ~ < > / \ ' " ; . , () [] {}C++語言概述6詞法記號關(guān)鍵字

C++預(yù)定義的單詞識別字

程式員聲明的單詞,它命名程式正文中的一些實(shí)體文字

在程式中直接使用符號表示的數(shù)據(jù)操作符

用於實(shí)現(xiàn)各種運(yùn)算的符號分隔符號

(){},:;

用于分隔各個(gè)詞法記號或程序正文空白符 空格、跳位字元(TAB鍵產(chǎn)生的字元)、換行符(Enter鍵所產(chǎn)生的字元)和注釋的總稱C++語言概述7識別字的構(gòu)成規(guī)則以大寫字母、小寫字母或下劃線(_)開始??梢杂梢源髮懽帜?、小寫字母、下劃線(_)或數(shù)字0~9組成。大寫字母和小寫字母代表不同的識別字。C++語言概述8

數(shù)據(jù)類型

——常量與變數(shù)#include<iostream>usingnamespacestd;intmain(){constintPRICE=30;intnum,total;floatv,r,h;num=10;total=num*PRICE;cout<<total<<endl;r=2.5;h=3.2;v=3.14159*r*r*h;cout<<v<<endl;}常量變數(shù)變數(shù)先聲明後使用符號常量基本數(shù)據(jù)類型和運(yùn)算式9#include<iostream>usingnamespacestd;intmain(){constintPRICE=30;intnum,total;floatv,r,h;num=10;total=num*PRICE;cout<<total<<endl;r=2.5;h=3.2;v=3.14159*r*r*h;cout<<v<<endl;}

數(shù)據(jù)類型

——整型數(shù)據(jù)整型常量shortunsignedshort2位元組intunsignedint

4字節(jié)longunsignedlong4位元組整型變數(shù)整型變數(shù)聲明基本數(shù)據(jù)類型和運(yùn)算式10數(shù)據(jù)類型

—整型數(shù)據(jù)及取值範(fàn)圍類型 說明符 位數(shù) 數(shù)值範(fàn)圍 短整 short 16 -32768~32767基本 int 32 -231~(231-1)長整 long 32 -231~(231-1)無符號

unsignedshort 16 0~65535

unsigned[int] 32 0~(232-1)

unsignedlong 32 0~(232-1) 基本數(shù)據(jù)類型和運(yùn)算式11#include<iostream>usingnamespacestd;intmain(){constintPRICE=30;intnum,total;floatv,r,h;num=10;total=num*PRICE;cout<<total<<endl;r=2.5;h=3.2;v=3.14159*r*r*h;cout<<v<<endl;}

數(shù)據(jù)類型

——實(shí)型數(shù)據(jù)實(shí)型常量float4位元組精度:3.4×10±387位有效數(shù)字double8位元組精度:1.7×10±30815位有效數(shù)字longdouble8位元組精度:1.7×10±30815位有效數(shù)字實(shí)型變數(shù)默認(rèn)為double型尾碼F(或f)

為float型尾碼L(或l)

為longdouble

型基本數(shù)據(jù)類型和運(yùn)算式12

數(shù)據(jù)類型

——字元型數(shù)據(jù)(一)字元常量單引號括起來的一個(gè)字元,

如:'a','D','?','$'字元變數(shù)用來存放字元常量

例:charc1,c2;

c1='a';

c2='A';字符數(shù)據(jù)在內(nèi)存中的存儲形式以ASCII碼存儲,占1位元組,用7個(gè)二進(jìn)位位基本數(shù)據(jù)類型和運(yùn)算式13字元數(shù)據(jù)的使用方法字元數(shù)據(jù)和整型數(shù)據(jù)之間可以運(yùn)算。字元數(shù)據(jù)與整型數(shù)據(jù)可以互相賦值。字串常量例:"CHINA"

"a"

'a'所以:charc;

c="a";CHINA\0a

\0aPage13

數(shù)據(jù)類型

——字元型數(shù)據(jù)(二)基本數(shù)據(jù)類型和運(yùn)算式14

數(shù)據(jù)類型

——布爾型數(shù)據(jù)布爾型變數(shù)的說明:

例:boolflag;布爾型數(shù)據(jù)的取值:

只有false

和true

兩個(gè)值基本數(shù)據(jù)類型和運(yùn)算式15

數(shù)據(jù)類型

——變數(shù)初始化例:

inta=3;

doublef=3.56;

charc='a';

intc(5);Page15基本數(shù)據(jù)類型和運(yùn)算式16數(shù)據(jù)類型

—混合運(yùn)算時(shí)的類型轉(zhuǎn)換不同類型數(shù)據(jù)進(jìn)行混合運(yùn)算時(shí),C++編譯器會自動進(jìn)行類型轉(zhuǎn)換。為了避免不同的數(shù)據(jù)類型在運(yùn)算中出現(xiàn)類型問題,應(yīng)儘量使用同種類型數(shù)據(jù)??梢話裼脧?qiáng)制類型轉(zhuǎn)換:例如:

floatc;

inta,b;

c=float(a)/float(b);或c=(float)a/(float)b;

基本數(shù)據(jù)類型和運(yùn)算式17變數(shù)的存儲類型auto屬於一時(shí)性存儲,其存儲空間可以被若干變數(shù)多次覆蓋使用。register存放在通用寄存器中。extern在所有函數(shù)和程式段中都可引用。static在內(nèi)存中是以固定地址存放的,在整個(gè)程式運(yùn)行期間都有效。基本數(shù)據(jù)類型和運(yùn)算式18算術(shù)運(yùn)算符與算術(shù)運(yùn)算式基本算術(shù)運(yùn)算符

+-*/(若整數(shù)相除,結(jié)果取整)%(取餘,運(yùn)算元為整數(shù))優(yōu)先順序與結(jié)合性先乘除,後加減,同級自左至右++,--(自增、自減)例:i++;--j;Page18基本數(shù)據(jù)類型和運(yùn)算式19賦值運(yùn)算符和賦值運(yùn)算式

簡單的賦值運(yùn)算符"="舉例

n=n+5運(yùn)算式的類型

等號左邊對象的類型運(yùn)算式的值

等號左邊對象被賦值後的值Page19基本數(shù)據(jù)類型和運(yùn)算式20賦值運(yùn)算符和賦值運(yùn)算式

復(fù)合的賦值運(yùn)算符有10種複合運(yùn)算符:

+=,-=,*=,/=,%=,

<<=,>>=,&=,^=,|=例

a+=3

等價(jià)於a=a+3

x*=y+8

等價(jià)於x=x*(y+8)基本數(shù)據(jù)類型和運(yùn)算式21賦值運(yùn)算符和賦值運(yùn)算式

——賦值運(yùn)算式舉例a=5 運(yùn)算式值為5a=b=c=5

運(yùn)算式值為5,a,b,c均為5a=5+(c=6)

運(yùn)算式值為11,a為11,c為6a=(b=4)+(c=6)

運(yùn)算式值為10,a為10,b為4,c為6a=(b=10)/(c=2)

運(yùn)算式值為5,a為5,b為10,c為2a+=a-=a*a相當(dāng)於

a=a+(a=a-a*a)Page21基本數(shù)據(jù)類型和運(yùn)算式22逗號運(yùn)算和逗號運(yùn)算式格式運(yùn)算式1,運(yùn)算式2求解順序及結(jié)果先求解1,再求解2,最終結(jié)果為運(yùn)算式2的值例a=3*5,a*4

最終結(jié)果為60Page22基本數(shù)據(jù)類型和運(yùn)算式23關(guān)係運(yùn)算與關(guān)係運(yùn)算式關(guān)係運(yùn)算是比較簡單的一種邏輯運(yùn)算,優(yōu)先次序?yàn)椋?/p>

<<=>>===!=

優(yōu)先順序相同(高)優(yōu)先順序相同(低)關(guān)係運(yùn)算式是一種最簡單的邏輯運(yùn)算式其結(jié)果類型為bool,值只能為true

或false。例如:a>b,c<=a+b,x+y==3基本數(shù)據(jù)類型和運(yùn)算式24邏輯運(yùn)算與邏輯運(yùn)算式邏輯運(yùn)算符

!(非)&&(與)||(或)

優(yōu)先次序:高→低邏輯運(yùn)算式

例如:(a>b)&&(x>y)

其結(jié)果類型為bool,值只能為true

或false基本數(shù)據(jù)類型和運(yùn)算式25條件運(yùn)算符與條件運(yùn)算式一般形式運(yùn)算式1?運(yùn)算式2:運(yùn)算式3運(yùn)算式1必須是bool類型執(zhí)行順序先求解運(yùn)算式1,若運(yùn)算式1的值為true,則求解運(yùn)算式2,運(yùn)算式2的值為最終結(jié)果若運(yùn)算式1的值為false,則求解運(yùn)算式3,運(yùn)算式3的值為最終結(jié)果例:x=a>b?a:b;基本數(shù)據(jù)類型和運(yùn)算式26條件運(yùn)算符與條件運(yùn)算式注意:條件運(yùn)算符優(yōu)先順序高於賦值運(yùn)算符,低於邏輯運(yùn)算符運(yùn)算式2、3的類型可以不同,條件運(yùn)算式的最終類型為2和3中較高的類型。例:x=a>b?a:b;基本數(shù)據(jù)類型和運(yùn)算式①②27sizeof運(yùn)算符語法形式

sizeof(類型名)

或sizeof(運(yùn)算式)結(jié)果值:

“類型名”所指定的類型或“運(yùn)算式”的結(jié)果類型所占的位元組數(shù)。例:sizeof(short)sizeof(x)基本數(shù)據(jù)類型和運(yùn)算式28位運(yùn)算——按位與(&)運(yùn)算規(guī)則將兩個(gè)運(yùn)算量的每一個(gè)位進(jìn)行邏輯與操作舉例:計(jì)算3&53:000000115:(&)000001013&5:00000001用途:將某一位置0,其他位不變。例如:

將char型變數(shù)a的最低位置0:

a=a&0376;取指定位。

例如:有charc;inta;

取出a的低位元組,置於c中:c=a&0377;基本數(shù)據(jù)類型和運(yùn)算式29位運(yùn)算——按位或(|)運(yùn)算規(guī)則將兩個(gè)運(yùn)算量的每一個(gè)位進(jìn)行邏輯或操作舉例:計(jì)算3|53:000000115:(|)000001013|5:00000111用途:將某些位置1,其他位不變。

例如:將int

型變數(shù)a

的低位元組置

1

a=a|0xff;基本數(shù)據(jù)類型和運(yùn)算式30位運(yùn)算——按位異或(^)運(yùn)算規(guī)則兩個(gè)運(yùn)算元進(jìn)行異或:

若對應(yīng)位相同,則結(jié)果該位為0,

若對應(yīng)位不同,則結(jié)果該位為1,舉例:計(jì)算071^052071: 00111001052:(^)00101010071^052: 00010011基本數(shù)據(jù)類型和運(yùn)算式31位運(yùn)算——按位異或(^)用途:使特定位翻轉(zhuǎn)(與0異或保持原值,與1異或取反)例如:要使01111010

低四位翻轉(zhuǎn):

01111010(^) 00001111 01110101基本數(shù)據(jù)類型和運(yùn)算式32位運(yùn)算——取反(~)單目運(yùn)算符,對一個(gè)二進(jìn)位數(shù)按位取反。例:025:0000000000010101~025:1111111111101010基本數(shù)據(jù)類型和運(yùn)算式33位運(yùn)算——移位左移運(yùn)算(<<)左移後,低位補(bǔ)0,高位捨棄。右移運(yùn)算(>>)右移後,低位:捨棄高位:無符號數(shù):補(bǔ)0

有符號數(shù):補(bǔ)“符號位”基本數(shù)據(jù)類型和運(yùn)算式34運(yùn)算符優(yōu)先順序++,--,sizeof*,/,%+,-==,!=位運(yùn)算&&||?:賦值運(yùn)算逗號運(yùn)算低高基本數(shù)據(jù)類型和運(yùn)算式35混合運(yùn)算時(shí)數(shù)據(jù)類型的轉(zhuǎn)換

——隱含轉(zhuǎn)換一些二元運(yùn)算符(算術(shù)運(yùn)算符、關(guān)係運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符和賦值運(yùn)算符)要求兩個(gè)運(yùn)算元的類型一致。在算術(shù)運(yùn)算和關(guān)係運(yùn)算中如果參與運(yùn)算的運(yùn)算元類型不一致,編譯系統(tǒng)會自動對數(shù)據(jù)進(jìn)行轉(zhuǎn)換(即隱含轉(zhuǎn)換),基本原則是將低類型數(shù)據(jù)轉(zhuǎn)換為高類型數(shù)據(jù)。

char,short,int,unsigned,long,unsignedlong,float,double

低高基本數(shù)據(jù)類型和運(yùn)算式36混合運(yùn)算時(shí)數(shù)據(jù)類型的轉(zhuǎn)換

——隱含轉(zhuǎn)換當(dāng)參與運(yùn)算的運(yùn)算元必須是bool型時(shí),如果運(yùn)算元是其他類型,編譯系統(tǒng)會自動將非0數(shù)據(jù)轉(zhuǎn)換為true,0轉(zhuǎn)換為false。位運(yùn)算的運(yùn)算元必須是整數(shù),當(dāng)二元位運(yùn)算的運(yùn)算元是不同類型的整數(shù)時(shí),也會自動進(jìn)行類型轉(zhuǎn)換,賦值運(yùn)算要求左值與右值的類型相同,若類型不同,編譯系統(tǒng)會自動將右值轉(zhuǎn)換為左值的類型?;緮?shù)據(jù)類型和運(yùn)算式37混合運(yùn)算時(shí)數(shù)據(jù)類型的轉(zhuǎn)換

——強(qiáng)制類型轉(zhuǎn)換語法形式:類型說明符(運(yùn)算式)或(類型說明符)運(yùn)算式強(qiáng)制類型轉(zhuǎn)換的作用是將運(yùn)算式的結(jié)果類型轉(zhuǎn)換為類型說明符所指定的類型。基本數(shù)據(jù)類型和運(yùn)算式38語句聲明語句運(yùn)算式語句選擇語句迴圈語句跳轉(zhuǎn)語句複合語句標(biāo)號語句

39運(yùn)算式語句格式:運(yùn)算式;運(yùn)算式語句與運(yùn)算式的區(qū)別:運(yùn)算式可以包含在其他運(yùn)算式中,而語句不可。例如:if((a=b)>0)t=a;不可寫為:if((a=b;)>0)t=a;語句40複合語句將多個(gè)語句用一對大括弧包圍,便構(gòu)成一個(gè)複合語句例如{ sum=sum+i; i++;} 語句41簡單的輸入、輸出向標(biāo)準(zhǔn)輸出設(shè)備(顯示器)輸出例:intx;cout<<"x="<<x;從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤)輸入例:intx;cin>>x;42順序結(jié)構(gòu)分支結(jié)構(gòu)迴圈結(jié)構(gòu)演算法的基本控制結(jié)構(gòu)43如何解決分支問題?例2-2輸入一個(gè)年份,判斷是否閏年。演算法的基本控制結(jié)構(gòu)#include<iostream>usingnamespacestd;intmain(){ intyear;boolIsLeapYear;cout<<"Entertheyear:";cin>>year; IsLeapYear=((year%4==0&&

year%100!=0)||(year%400==0));

if(IsLeapYear)

cout<<year<<"isaleapyear"<<endl;

else

cout<<year<<"isnotaleapyear"<<endl;}44運(yùn)行結(jié)果:Entertheyear:20002000isaleapyear4546if(運(yùn)算式)語句例:if(x>y)cout<<x;if(運(yùn)算式)語句1else語句2例:if(x>y)cout<<x;elsecout<<y;if(運(yùn)算式1)語句1

elseif(表達(dá)式2)語句2

elseif(表達(dá)式3)語句3

else語句nif語句

——三種形式演算法的基本控制結(jié)構(gòu)47如何解決多分問題?例2-3輸入兩個(gè)整數(shù),比較兩個(gè)數(shù)的大小。演算法的基本控制結(jié)構(gòu)#include<iostream>usingnamespacestd;intmain(){intx,y;cout<<"Enterxandy:";cin>>x>>y;if(x!=y)if(x>y)cout<<"x>y"<<endl;elsecout<<"x<y"<<endl;elsecout<<"x=y"<<endl;}48運(yùn)行結(jié)果1:Enterxandy:58x<y運(yùn)行結(jié)果2:Enterxandy:88x=y運(yùn)行結(jié)果3:Enterxandy:128x>y4950一般形式if()if()語句1else語句2elseif()語句3else語句4注意語句1、2、3、4可以是複合語句,每層的if與else配對,或用{}來確定層次關(guān)係。if語句

——嵌套演算法的基本控制結(jié)構(gòu)51特殊的多分支結(jié)構(gòu)例2-4輸入一個(gè)0~6的整數(shù),轉(zhuǎn)換成星期輸出。演算法的基本控制結(jié)構(gòu)#include<iostream>usingnamespacestd;intmain(){ intday; cin>>day; switch(day)

{

case0:

cout<<"Sunday"<<endl;

break;

case1:

cout<<"Monday"<<endl;

break;

case2:

cout<<"Tuesday"<<endl;

break;

case3:cout<<"Wednesday"<<endl;

break;

case4:

cout<<"Thursday"<<endl;

break;

case5:

cout<<"Friday"<<endl;

break;

case6:

cout<<"Saturday"<<endl;

break;

default:

cout<<"DayoutofrangeSunday..Saturday"

<<endl;

break; }}5253一般形式switch(運(yùn)算式){case常量運(yùn)算式1:語句1case常量運(yùn)算式2:語句2┆case常量運(yùn)算式n:語句ndefault:語句n+1}switch語句執(zhí)行順序以case中的常量運(yùn)算式值為入口標(biāo)號,由此開始順序執(zhí)行。因此,每個(gè)case分支最後應(yīng)該加break語句。每個(gè)常量運(yùn)算式的值不能相同,次序不影響執(zhí)行結(jié)果??梢允嵌鄠€(gè)語句,但不必用{}??梢允钦汀⒆衷?、枚舉型演算法的基本控制結(jié)構(gòu)54使用switch語句應(yīng)注意的問題case分支可包含多個(gè)語句,且不用{}。運(yùn)算式、判斷值都是int型或char型。若干分支執(zhí)行內(nèi)容相同可共用一組語句。演算法的基本控制結(jié)構(gòu)55如何有效地完成重複工作例2-5求自然數(shù)1~10之和分析:本題需要用累加演算法,累加過程是一個(gè)迴圈過程,可以用while語句實(shí)現(xiàn)。演算法的基本控制結(jié)構(gòu)#include<iostream>usingnamespacestd;intmain(){inti(1),sum(0);

while(i<=10)

{sum+=i;//相當(dāng)於sum=sum+i;i++;

}cout<<"sum="<<sum

<<endl;}運(yùn)行結(jié)果:sum=555657while語句形式while(運(yùn)算式)語句

可以是複合語句,其中必須含有改變條件運(yùn)算式值的語句。執(zhí)行順序先判斷運(yùn)算式的值,若為true時(shí),執(zhí)行語句。演算法的基本控制結(jié)構(gòu)58先執(zhí)行循環(huán)體,後判斷條件的情況例2-6

輸入一個(gè)整數(shù),將各位數(shù)字反轉(zhuǎn)後輸出。演算法的基本控制結(jié)構(gòu)#include<iostream>usingnamespacestd;intmain(){ intn,right_digit,newnum=0; cout<<"Enterthenumber:"; cin>>n;

cout<<"Thenumberinreverseorderis";

do { right_digit=n%10; cout<<right_digit; n/=10;

//相當(dāng)於n=n/10

} while(n!=0);cout<<endl;

}59運(yùn)行結(jié)果:Enterthenumber:365Thenumberinreverseorderis5636061do-while語句一般形式do語句while(運(yùn)算式)可以是複合語句,其中必須含有改變條件運(yùn)算式值的語句。執(zhí)行順序先執(zhí)行循環(huán)體語句,後判斷條件。

運(yùn)算式為true時(shí),繼續(xù)執(zhí)行循環(huán)體與while語句的比較:While語句執(zhí)行順序

先判斷表達(dá)式的值,為true時(shí),再執(zhí)行語句演算法的基本控制結(jié)構(gòu)對比下列程式:程式1:#include<iostream>usingnamespacestd;intmain(){inti,sum(0);cin>>i;while(i<=10){sum+=i;i++;}cout<<"sum="<<sum<<endl;}演算法的基本控制結(jié)構(gòu)程式2:#include<iostream>usingnamespacestd;intmain(){inti,sum(0);cin>>i;do{sum+=i;i++;}while(i<=10);

cout<<"sum="<<sum<<endl;}6263for語句語法形式for(運(yùn)算式1;運(yùn)算式2;運(yùn)算式3)語句

迴圈前先求解為true時(shí)執(zhí)行循環(huán)體每次執(zhí)行完循環(huán)體後求解演算法的基本控制結(jié)構(gòu)64例2-8輸入一個(gè)整數(shù),求出它的所有因數(shù)。演算法的基本控制結(jié)構(gòu)#include<iostream>usingnamespacestd;intmain(){ intn,k; cout<<"Enterapositiveinteger:"; cin>>n; cout<<"Number"<<n<<"Factors"; for(k=1;k<=n;k++) if(n%k==0) cout<<k<<"";cout<<endl;}65運(yùn)行結(jié)果1:Enterapositiveinteger:36Number36Factors123469121836運(yùn)行結(jié)果2:Enterapositiveinteger:7Number7Factors176667例2-9編寫程式輸出以下圖案*************************演算法的基本控制結(jié)構(gòu)#include<iostream>usingnamespacestd;intmain(){inti,j,n=4;for(i=1;i<=n;i++)//輸出前4行圖案

{for(j=1;j<=30;j++)cout<<'';//在圖案左側(cè)空30列

for(j=1;j<=8-2*i;j++)cout<<'';for(j=1;j<=2*i-1;j++)cout<<'*';cout<<endl;}68for(i=1;i<=n-1;i++)//輸出後3行圖案

{for(j=1;j<=30;j++)cout<<'';//在圖案左側(cè)空30列

for(j=1;j<=7-2*i;j++)cout<<'*';cout<<endl;}}6970迴圈結(jié)構(gòu)與選擇結(jié)構(gòu)相互嵌套#include<iostream>usingnamespacestd;intmain(){ intn;

for(n=100;n<=200;n++) {if(n%3!=0) cout<<n; }}演算法的基本控制結(jié)構(gòu)71例2-10讀入一系列整數(shù),統(tǒng)計(jì)出正整數(shù)個(gè)數(shù)i和負(fù)整數(shù)個(gè)數(shù)j,讀入0則結(jié)束。分析:需要讀入一系列整數(shù),但是整數(shù)個(gè)數(shù)不定,要在每次讀入之後進(jìn)行判斷,因此使用while迴圈最為合適。迴圈控制條件應(yīng)該是n!=0。由於要判斷數(shù)的正負(fù)並分別進(jìn)行統(tǒng)計(jì),所以需要在迴圈內(nèi)部嵌入選擇結(jié)構(gòu)。演算法的基本控制結(jié)構(gòu)#include<iostream>usingnamespacestd;intmain(){inti=0,j=0,n;cout<<"請輸入若干整數(shù)(輸入0則結(jié)束):";cin>>n;while(n!=0){if(n>0)i++;if(n<0)j++;cin>>n;}cout<<"正整數(shù)個(gè)數(shù):"<<i<<"負(fù)整數(shù)個(gè)數(shù):"<<j<<endl;}7273break和continue語句break語句使程式從循環(huán)體和switch語句內(nèi)跳出,繼續(xù)執(zhí)行邏輯上的下一條語句。不宜用在別處。continue語句結(jié)束本次迴圈,接著判斷是否執(zhí)行下一次迴圈。演算法的基本控制結(jié)構(gòu)74typedef語句為一個(gè)已有的數(shù)據(jù)類型另外命名語法形式typedef已有類型名新類型名表;例如typedefdoublearea,volume;typedefintnatural;naturali1,i2;areaa;volumev;自定義數(shù)據(jù)類型75枚舉類型—enum只要將需要的變數(shù)值一一列舉出來,便構(gòu)成了一個(gè)枚舉類型。枚舉類型的聲明形式如下:enum枚舉類型名{變數(shù)值列表};例如:enumweekday{sun,mon,tue,wed,thu,fri,sat};自定義數(shù)據(jù)類型76枚舉類型—enum枚舉類型應(yīng)用說明:對枚舉元素按常量處理,不能對它們賦值。例如,不能寫:sun=0;枚舉元素具有默認(rèn)值,它們依次為:0,1,2,。也可以在聲明時(shí)另行指定枚舉元素的值,如:enumweekday{sun=7,mon=1,tue,wed,thu,fri,sat};枚舉值可以進(jìn)行關(guān)係運(yùn)算。整數(shù)值不能直接賦給枚舉變數(shù),如需

要將整數(shù)賦值給枚舉變數(shù),應(yīng)進(jìn)行強(qiáng)

制類型轉(zhuǎn)換。自定義數(shù)據(jù)類型77例2-11設(shè)某次體育比賽的結(jié)果有四種可能:勝(win)、負(fù)(lose)、平局(tie)、比賽取消(cancel),編寫程式順序輸出這四種情況。分析:由於比賽結(jié)果只有四種可能,所以可以聲明一個(gè)枚舉類型,聲明一個(gè)枚舉類型的變數(shù)來存放比賽結(jié)果。自定義數(shù)據(jù)類型#include<iostream>usingnamespacestd;enumgame_result{WIN,LOSE,TIE,CANCEL};intmain(){game_resultresult;enumgame_resultomit=CANCEL;intcount;for(count=WIN;count<=CANCEL;count++){result=(game_result)count;if(result==omit){cout<<"Thegamewascancelled\n";}else{cout<<"Thegamewasplayed";if(result==WIN)cout<<"andwewon!";if(result==LOSE)cout<<"andwelost.";cout<<"\n";}}return0;}78運(yùn)行結(jié)果

Thegamewasplayedandwewon!Thegamewasplayedandwelost.ThegamewasplayedThegamewascancelled7980結(jié)構(gòu)體——結(jié)構(gòu)的聲明結(jié)構(gòu)的概念結(jié)構(gòu)是由不同數(shù)據(jù)類型的數(shù)據(jù)組成的集合體。聲明結(jié)構(gòu)類型

struct結(jié)構(gòu)名

{

數(shù)據(jù)類型成員名1;數(shù)據(jù)類型成員名2;:數(shù)據(jù)類型成員名n;

};自定義數(shù)據(jù)類型81結(jié)構(gòu)體——結(jié)構(gòu)的聲明舉例:structstudent//學(xué)生資訊結(jié)構(gòu)體{intnum;//學(xué)號

charname[20];//姓名

chargender;//性別

intage;//年齡

floatscore;//成績

charaddr[30];//住址}自定義數(shù)據(jù)類型82結(jié)構(gòu)體——結(jié)構(gòu)變數(shù)說明變數(shù)說明形式結(jié)構(gòu)名結(jié)構(gòu)變數(shù)名;注意:結(jié)構(gòu)變數(shù)的存儲類型概念、它的壽命、可見性及使用範(fàn)圍與普通變數(shù)完全一致。結(jié)構(gòu)變數(shù)說明在結(jié)構(gòu)類型聲明之後,二者也可同時(shí)進(jìn)行。結(jié)構(gòu)變數(shù)占記憶體大小可用sizeof運(yùn)算求出:

sizeof(運(yùn)算量)自定義數(shù)據(jù)類型83結(jié)構(gòu)體

——結(jié)構(gòu)變數(shù)的初始化和使用初始化說明結(jié)構(gòu)變數(shù)的同時(shí)可以直接設(shè)置初值。使用結(jié)構(gòu)體成員的引用形式:

結(jié)構(gòu)變數(shù)名.成員名自定義數(shù)據(jù)類型84例2-12結(jié)構(gòu)體變數(shù)的初始化和使用#include<iostream>#include<iomanip>usingnamespacestd;structstudent//學(xué)生資訊結(jié)構(gòu)體{intnum;//學(xué)號

charname[20];//姓名

chargender;//性別

intage;//年齡}stu={97001,"LinLin",'F',19};intmain(){cout<<setw(7)<<stu.num<<setw(20)<<

<<setw(3)<<stu.sex<<setw(3)<<stu.age;}自定義數(shù)據(jù)類型運(yùn)行結(jié)果:97001LinLinF1985聯(lián)合體聲明形式:union聯(lián)合名{

數(shù)據(jù)類型成員名1;數(shù)據(jù)類型成員名2;:數(shù)據(jù)類型成員名n;};聯(lián)合體類型變數(shù)說明的語法形式聯(lián)合名聯(lián)合變數(shù)名;引用形式:聯(lián)合名.成員名自定義數(shù)據(jù)類型86例:unionuarea{charc_data;shorts_data;longl_data;}uareac_datal_datas_data聯(lián)合體自定義數(shù)據(jù)類型87無名聯(lián)合無名聯(lián)合沒有標(biāo)記名,只是聲明一個(gè)成員項(xiàng)的集合,這些成員項(xiàng)具有相同的記憶體地址,可以由成員項(xiàng)的名字直接訪問。例:union{inti;floatf;}在程式中可以這樣使用:i=10;f=2.2;自定義數(shù)據(jù)類型88小結(jié)與復(fù)習(xí)建議主要內(nèi)容C++語言概述、基本數(shù)據(jù)類型和運(yùn)算式、數(shù)據(jù)的輸入與輸出、演算法的基本控制結(jié)構(gòu)、自定義數(shù)據(jù)類型達(dá)到的目標(biāo)掌握C++語言的基本概念和基本語句,能夠編寫簡單的程式段。實(shí)驗(yàn)任務(wù)實(shí)驗(yàn)二第三章函數(shù)清華大學(xué)鄭莉C++語言程式設(shè)計(jì)90本章主要內(nèi)容函數(shù)的聲明和調(diào)用函數(shù)間的參數(shù)傳遞內(nèi)聯(lián)函數(shù)帶默認(rèn)形參值的函數(shù)函數(shù)重載C++系統(tǒng)函數(shù)91函數(shù)的聲明函數(shù)是面向?qū)ο蟪淌皆O(shè)計(jì)中,對功能的抽象函數(shù)聲明的語法形式類型識別字函數(shù)名(形式參數(shù)表){

語句序列}函數(shù)的聲明與使用是被初始化的內(nèi)部變數(shù),壽命和可見性僅限於函數(shù)內(nèi)部若無返回值,寫void92函數(shù)的聲明形式參數(shù)表<type1>name1,<type2>name2,...,<typen>namen函數(shù)的返回值由return語句給出,例如:

return0無返回值的函數(shù)(void類型),不必寫return語句。函數(shù)的聲明與使用93函數(shù)的調(diào)用調(diào)用前先聲明函數(shù)原型:在調(diào)用函數(shù)中,或程式檔中所有函數(shù)之外,按如下形式說明:

類型識別字被調(diào)用函數(shù)名(含類型說明的形參表);調(diào)用形式

函數(shù)名(實(shí)參列表)嵌套調(diào)用函數(shù)可以嵌套調(diào)用,但不允許嵌套定義。遞歸調(diào)用函數(shù)直接或間接調(diào)用自身。函數(shù)的聲明與使用94例3-1編寫一個(gè)求x的n次方的函數(shù)#include<iostream>usingnamespacestd;double

power(doublex,intn);intmain(){ cout<<"5tothepower2is"

<<power(5,2)<<endl;}double

power(doublex,intn){ doubleval=1.0; while(n--)

val=val*x; return(val);}函數(shù)的聲明與使用95運(yùn)行結(jié)果:5

tothepower2is25例3-1編寫一個(gè)求x的n次方的函數(shù)函數(shù)的聲明與使用96例3-2數(shù)制轉(zhuǎn)換題目:輸入一個(gè)8位二進(jìn)位數(shù),將其轉(zhuǎn)換為十進(jìn)位數(shù)輸出。例如:11012=1(23)+1(22)+0(21)+1(20)=1310所以,如果輸入1101,則應(yīng)輸出13函數(shù)的聲明與使用#include<iostream>usingnamespacestd;doublepower(doublex,intn);intmain(){ inti; intvalue=0; charch; cout<<"Enteran8bitbinarynumber"; for(i=7;i>=0;i--) { cin>>ch; if(ch=='1') value+=int(power(2,i)); } cout<<"Decimalvalueis"<<value<<endl;}doublepower(doublex,intn){ doubleval=1.0; while(n--)

val*=x; return(val);}運(yùn)行結(jié)果:Enteran8bitbinarynumber01101001Decimalvalueis1059798例3-3編寫程式求π的值其中arctan用如下形式的級數(shù)計(jì)算:直到級數(shù)某項(xiàng)絕對值不大於10-15為止;π和x均為double型。函數(shù)的聲明與使用#include<iostream>usingnamespacestd;intmain(){doublea,b;doublearctan(doublex);//函數(shù)原型聲明

a=16.0*arctan(1/5.0);b=4.0*arctan(1/239.0);//注意:因?yàn)檎麛?shù)相除結(jié)果取整,

//如果參數(shù)寫1/5,1/239,結(jié)果就都是0cout<<"PI="<<a-b<<endl;}99doublearctan(doublex){inti;doubler,e,f,sqr;sqr=x*x;r=0;e=x;i=1;while(e/i>1e-15){f=e/i;r=(i%4==1)?r+f:r-f;e=e*sqr;i+=2;}returnr;}運(yùn)行結(jié)果:PI=33-4尋找並輸出11~999之間的數(shù)m,它滿足m、m2和m3均為回文數(shù)?;匚模焊魑粩?shù)字左右對稱的整數(shù)。

例如:11滿足上述條件

112=121,113=1331。分析:10取餘的方法,從最低位開始,依次取出該數(shù)的各位數(shù)字。按反序重新構(gòu)成新的數(shù),比較與原數(shù)是否相等,若相等,則原數(shù)為回文。函數(shù)的聲明與使用#include<iostream>usingnamespacestd;intmain(){boolsymm(longn);longm;for(m=11;m<1000;m++)if(symm(m)&&symm(m*m)&&symm(m*m*m))cout<<"m="<<m<<"m*m="<<m*m<<"m*m*m="<<m*m*m<<endl;}102boolsymm(longn){longi,m;i=n;m=0;while(i){m=m*10+i%10;i=i/10;}return(m==n);}103運(yùn)行結(jié)果:m=11m*m=121m*m*m=1331m=101m*m=10201m*m*m=1030301m=111m*m=12321m*m*m=1367631104105例3-5計(jì)算如下公式,並輸出結(jié)果:其中r、s的值由鍵盤輸入。sinx的近似值按如下公式計(jì)算,計(jì)算精度為10-6:函數(shù)的聲明與使用#include<iostream>#include<cmath>usingnamespacestd;intmain(){doublek,r,s;doubletsin(doublex);cout<<"r=";cin>>r;cout<<"s=";cin>>s;if(r*r<=s*s)k=sqrt(tsin(r)*tsin(r)+tsin(s)*tsin(s));elsek=tsin(r*s)/2;cout<<k<<endl;}106doubletsin(doublex){doublep=0.000001,g=0,t=x;intn=1;do{g=g+t;n++;t=-t*x*x/(2*n-1)/(2*n-2);}while(fabs(t)>=p);returng;}運(yùn)行結(jié)果:r=5s=81.37781107108例3-6投骰子的隨機(jī)遊戲每個(gè)骰子有六面,點(diǎn)數(shù)分別為1、2、3、4、5、6。遊戲者在程式開始時(shí)輸入一個(gè)無符號整數(shù),作為產(chǎn)生亂數(shù)的種子。每輪投兩次骰子,第一輪如果和數(shù)為7或11則為勝,遊戲結(jié)束;和數(shù)為2、3或12則為負(fù),遊戲結(jié)束;和數(shù)為其他值則將此值作為自己的點(diǎn)數(shù),繼續(xù)第二輪、第三輪...直到某輪的和數(shù)等於點(diǎn)數(shù)則取勝,若在此前出現(xiàn)和數(shù)為7則為負(fù)。由rolldice函數(shù)負(fù)責(zé)模擬投骰子、計(jì)算和數(shù)並輸出和數(shù)。函數(shù)的聲明與使用#include<iostream>#include<cstdlib>usingnamespacestd;introlldice(void);intmain(){intgamestatus,sum,mypoint;unsignedseed;cout<<"Pleaseenteranunsignedinteger:";cin>>seed;//輸入亂數(shù)種子

srand(seed);//將種子傳遞給rand()sum=rolldice();//第一輪投骰子、計(jì)算和數(shù)109switch(sum){case7://如果和數(shù)為7或11則為勝,狀態(tài)為1case11:gamestatus=1;break;case2://和數(shù)為2、3或12則為負(fù),狀態(tài)為2case3:case12:gamestatus=2;break;default://其他情況,遊戲尚無結(jié)果,狀態(tài)為0,記下點(diǎn)數(shù),為下一輪做準(zhǔn)備

gamestatus=0;mypoint=sum;cout<<"pointis"<<mypoint<<endl;break;}110while(gamestatus==0)//只要狀態(tài)仍為0,就繼續(xù)進(jìn)行下一輪

{sum=rolldice();if(sum==mypoint)//某輪的和數(shù)等於點(diǎn)數(shù)則取勝,狀態(tài)置為1gamestatus=1elseif(sum==7)//出現(xiàn)和數(shù)為7則為負(fù),狀態(tài)置為2gamestatus=2;}//當(dāng)狀態(tài)不為0時(shí)上面的迴圈結(jié)束,以下程式段輸出遊戲結(jié)果

if(gamestatus==1)cout<<"playerwins\n";elsecout<<"playerloses\n";}111rand函數(shù)原型:intrand(void);所需頭檔:<cstdlib>功能和返回值:求出並返回一個(gè)偽亂數(shù)srand函數(shù)原型:voidsrand(unsignedintseed);參數(shù):seed產(chǎn)生亂數(shù)的種子。所需頭檔:<cstdlib>功能:為使rand()產(chǎn)生一序列偽隨機(jī)整數(shù)而設(shè)置起始點(diǎn)。使用1作為seed參數(shù),可以重新初化rand()。112introlldice(void){//投骰子、計(jì)算和數(shù)、輸出和數(shù)

intdie1,die2,worksum;die1=1+rand()%6;die2=1+rand()%6;worksum=die1+die2;cout<<"playerrolled"<<die1<<'+'<<die2<<'='<<worksum<<endl;returnworksum;}113運(yùn)行結(jié)果2:Pleaseenteranunsignedinteger:23playerrolled6+3=9pointis9playerrolled5+4=9playerwins114115函數(shù)調(diào)用的執(zhí)行過程函數(shù)的聲明與使用main()調(diào)fun()結(jié)束fun()返回①②④⑥⑦保存:返回地址當(dāng)前現(xiàn)場③恢復(fù):主調(diào)程式現(xiàn)場返回地址⑤116嵌套調(diào)用函數(shù)的聲明與使用main{}調(diào)fun1()結(jié)束fun1()調(diào)fun2()返回fun2()返回①②③⑦④⑤⑥⑧⑨117例3-6輸入兩個(gè)整數(shù),求平方和。#include<iostream>usingnamespacestd;intmain(){inta,b;intfun1(intx,inty);cin>>a>>b;cout<<"a、b的平方和:"

<<fun1(a,b)<<endl;}函數(shù)的聲明與使用intfun1(intx,inty){intfun2(intm);return(fun2(x)+fun2(y));}intfun2(intm){return(m*m);}運(yùn)行結(jié)果:34a、b的平方和:25118119遞歸調(diào)用函數(shù)直接或間接地調(diào)用自身,稱為遞歸調(diào)用。遞歸過程的兩個(gè)階段:遞推:

4!=4×3!→3!=3×2!→2!=2×1!→1!=1×0!→0!=1未知已知回歸:4!=4×3!=24←3!=3×2!=6←2!=2×1!=2←1!=1×0!=1←0!=1未知已知函數(shù)的聲明與使用120例3-8求n!分析:計(jì)算n!的公式如下:這是一個(gè)遞歸形式的公式,應(yīng)該用遞歸函數(shù)實(shí)現(xiàn)。函數(shù)的聲明與使用根源程式:#include<iostream>usingnamespacestd;longfac(intn){longf;if(n<0)cout<<"n<0,dataerror!"<<endl;

elseif(n==0)f=1;elsef=fac(n-1)*n;return(f);}121intmain(){longfac(intn);intn;longy;cout<<"Enterapositiveinteger:";cin>>n;y=fac(n);cout<<n<<"!="<<y<<endl;}運(yùn)行結(jié)果:Enterapositiveinteger:88!=40320122123例3-9用遞歸法計(jì)算從n個(gè)人中選擇k個(gè)人組成一個(gè)委員會的不同組合數(shù)。分析:由n個(gè)人裏選k個(gè)人的組合數(shù)

=由n-1個(gè)人裏選k個(gè)人的組合數(shù)

+由n-1個(gè)人裏選k-1個(gè)人的組合數(shù)當(dāng)n==k或k==0時(shí),組合數(shù)為1函數(shù)的聲明與使用#include<iostream>usingnamespacestd;intmain(){intn,k;intcomm(intn,intk);cin>>n>>k;cout<<comm(n,k)<<endl;}intcomm(intn,intk){if(k>n)return0;elseif(n==k||k==0)return1;elsereturncomm(n-1,k)+comm(n-1,k-1);}運(yùn)行結(jié)果:1858568124125例3-10漢諾塔問題有三根針A、B、C。A針上有N個(gè)盤子,大的在下,小的在上,要求把這N個(gè)盤子從A針移到C針,在移動過程中可以借助B針,每次只允許移動一個(gè)盤,且在移動過程中在三根針上都保持大盤在下,小盤在上。函數(shù)的聲明與使用ABC分析:將n個(gè)盤子從A針移到C針可以分解為下麵三個(gè)步驟:①將A上n-1個(gè)盤子移到B針上(借助C針);②把A針上剩下的一個(gè)盤子移到C針上;③將n-1個(gè)盤子從B針移到C針上(借助A針);事實(shí)上,上面三個(gè)步驟包含兩種操作:①將多個(gè)盤子從一個(gè)針移到另一個(gè)針上,這是一個(gè)遞歸的過程。hanoi函數(shù)實(shí)現(xiàn)。②將1個(gè)盤子從一個(gè)針上移到另一針上。

用move函數(shù)實(shí)現(xiàn)。126#include<iostream>usingnamespacestd;voidmove(chargetone,charputone){cout<<getone<<"-->"<<putone<<endl;}voidhanoi(intn,charone,chartwo,charthree){ voidmove(chargetone,charputone); if(n==1)move(one,three); else {hanoi(n-1,one,three,two); move(one,three); hanoi(n-1,two,one,three); }}127intmain(){ voidhanoi(intn,charone,chartwo,charthree); intm; cout<<"Enterthenumberofdiskes:"; cin>>m; cout<<"thestepstomoving"<<m<<"diskes:"<<endl; hanoi(m,'A','B','C');}128運(yùn)行結(jié)果:Enterthenumberofdiskes:3thestepstomoving3diskes:A-->CA-->BC-->BA-->CB-->AB-->CA-->C129130函數(shù)的參數(shù)傳遞機(jī)制

——傳遞參數(shù)值在函數(shù)被調(diào)用時(shí)才分配形參的存儲單元。實(shí)參可以是常量、變數(shù)或運(yùn)算式。實(shí)參類型必須與形參相符。傳遞時(shí)是傳遞參數(shù)值,即單向傳遞。函數(shù)的聲明與使用131函數(shù)的參數(shù)傳遞機(jī)制

——參數(shù)值傳遞舉例XN被調(diào)函數(shù):主調(diào)函數(shù):32.5AD=power(A,3)2.53doublepower(doubleX,intN)函數(shù)的聲明與使用132例3-11輸入兩個(gè)整數(shù)交換後輸出#include<iostream>usingnamespacestd;voidSwap(inta,intb);intmain(){ intx(5),y(10); cout<<"x="<<x<<"y="<<y<<endl;

Swap(x,y); cout<<"x="<<x<<"y="<<y<<endl; return0;}函數(shù)的聲明與使用voidSwap(inta,intb){ intt; t=a; a=b; b=t;}運(yùn)行結(jié)果: x=5y=10 x=5y=10133a=b;5x10y5a10b執(zhí)行主函數(shù)中的函數(shù)調(diào)用Swap(x,y);t=a;5x10y5a10b5tb=t;5x10y10a5b5t5x10y10a10b5t在Swap子函數(shù)中返回主函數(shù)以後5x10y134134135函數(shù)的參數(shù)傳遞

——用引用做形參引用(&)是識別字的別名,例如:inti,j;

int&ri=i;

//建立一個(gè)int型的引用ri,並將其

//初始化為變數(shù)i的一個(gè)別名

j=10;

ri=j;//相當(dāng)于i=j;聲明一個(gè)引用時(shí),必須同時(shí)對它進(jìn)行初始化,使它指向一個(gè)已存在的對象。一旦一個(gè)引用被初始化後,就不能改為指向其他對象。引用可以作為形參

voidswap(int&a,int&b){...}函數(shù)的聲明與使用136例3-12輸入兩個(gè)整數(shù)交換後輸出#include<iostream>usingnamespacestd;voidSwap(int&a,int&b);intmain(){ intx(5),y(10); cout<<"x="<<x<<"y="<<y<<endl;

Swap(x,y); cout<<"x="<<x<<"y="<<y<<endl; return0;}voidSwap(int&a,int&b){ intt; t=a; a=b; b=t;}函數(shù)的聲明與使用運(yùn)行結(jié)果:x=5y=10x=10y=5t=a;x5t5x的別名axy510y的別名x的別名aby的別名x的別名abx10y10a=bb=t;y5t5y的地址bxy105Swap(x,y);137138內(nèi)聯(lián)函數(shù)聲明與使用聲明時(shí)使用關(guān)鍵字inline。編譯時(shí)在調(diào)用處用函數(shù)體進(jìn)行替換,節(jié)省了參數(shù)傳遞、控制轉(zhuǎn)移等開銷。注意:內(nèi)聯(lián)函數(shù)體內(nèi)不能有迴圈語句和switch語句。內(nèi)聯(lián)函數(shù)的定義必須出現(xiàn)在內(nèi)聯(lián)函數(shù)第一次被調(diào)用之前。對內(nèi)聯(lián)函數(shù)不能進(jìn)行異常介面聲明。內(nèi)聯(lián)函數(shù)139例3-14內(nèi)聯(lián)函數(shù)應(yīng)用舉例#include<iostream>usingnamespacestd;inlinedoubleCalArea(doubleradius){ return3.14*radius*radius;}intmain(){ doubler(3.0); doublearea; area=CalArea(r); cout<<area<<endl; return0;}內(nèi)聯(lián)函數(shù)140默認(rèn)形參值的作用函數(shù)在聲明時(shí)可以預(yù)先給出默認(rèn)的形參值,調(diào)用時(shí)如給出實(shí)參,則採用實(shí)參值,否則採用預(yù)先給出的默認(rèn)形參值。例如:intadd(intx=5,inty=6){returnx+y;}intmain(){add(10,20);//10+20add(10);//10+6add();//5+6}帶默認(rèn)形參值的函數(shù)141默認(rèn)形參值的說明次序默認(rèn)形參值必須從右向左順序聲明,並且在默認(rèn)形參值的右面不能有非默認(rèn)形參值的參數(shù)。因?yàn)檎{(diào)用時(shí)實(shí)參取代形參是從左向右的順序。例:intadd(intx,inty=5,intz=6);//正確intadd(intx=1,inty=5,intz);//錯(cuò)誤intadd(intx=1,inty,intz=6);//錯(cuò)誤帶默認(rèn)形參值的函數(shù)142默認(rèn)形參值與函數(shù)的調(diào)用位置調(diào)用出現(xiàn)在函數(shù)體實(shí)現(xiàn)之前時(shí),默認(rèn)形參值必須在函數(shù)原形中給出;而當(dāng)調(diào)用出現(xiàn)在函數(shù)體實(shí)現(xiàn)之後時(shí),默認(rèn)形參值需在函數(shù)實(shí)現(xiàn)時(shí)給出。例:intadd(intx=5,inty=6);intmain(){add();

//調(diào)用在實(shí)現(xiàn)前}intadd(intx,inty){returnx+y;}intadd(intx=5,inty=6){returnx+y;}intmain(){add();

//調(diào)用在實(shí)現(xiàn)後}帶默認(rèn)形參值的函數(shù)143默認(rèn)形參值的作用域在相同的作用域內(nèi),默認(rèn)形參值的說明應(yīng)保持惟一,但如果在不同的作用域內(nèi),允許說明不同的默認(rèn)形參。例:intadd(intx=1,inty=2);intmain(){intadd(intx=3,inty=4);add();//使用局部默認(rèn)形參值(實(shí)現(xiàn)3+4)}voidfun(){...

add();//使用全局默認(rèn)形參值(實(shí)現(xiàn)1+2)}帶默認(rèn)形參值的函數(shù)144重載函數(shù)的聲明C++允許功能相近的函數(shù)在相同的作用域內(nèi)以相同函數(shù)名聲明,從而形成重載。方便使用,便於記憶。例:形參類型不同intadd(intx,inty);floatadd(floatx,floaty);形參個(gè)數(shù)不同intadd(intx,inty);intadd(intx,inty,intz);

函數(shù)重載145注意事項(xiàng)不要將不同功能的函數(shù)聲明為重載函數(shù),以免出現(xiàn)調(diào)用結(jié)果的誤解、混淆。這樣不好:intadd(intx,inty);intadd(inta,intb);編譯器不以形參名來區(qū)分intadd(intx,inty);voidadd(intx,inty);編譯器不以返回值來區(qū)分intadd(intx,inty){returnx+y;}floatadd(floatx,floaty){returnx-y;}

函數(shù)重載重載函數(shù)的形參必須不同:個(gè)數(shù)不同或類型不同。編譯程序?qū)⒏鶕?jù)實(shí)參和形參的類型及個(gè)數(shù)的最佳匹配來選擇調(diào)用哪一個(gè)函數(shù)。146例3-16重載函數(shù)應(yīng)用舉例編寫三個(gè)名為add的重載函數(shù),分別實(shí)現(xiàn)兩整數(shù)相加、兩實(shí)數(shù)相加和兩個(gè)複數(shù)相加的功能。#include<iostream>usingnamespacestd;structcomplex{ doublereal; doubleimaginary;};

函數(shù)重載intmain(){ intm,n; doublex,y; complexc1,c2,c3; intadd(intm,intn); doubleadd(doublex,doubley); complexadd(complexc1,complexc2); cout<<"Entertwointeger:"; cin>>m>>n; cout<<"integer<<m<<'+'<<n<<"="<<add(m,n)<<endl;147 cout<<"Entertworealnumber:"; cin>>x>>y; cout<<"realnumber"<<x<<'+'<<y<<"="<<add(x,y)<<endl; cout<<"Enterthefirstcomplexnumber:"; cin>>c1.real>>c1.imaginary; cout<<"Enterthesecondcomplexnumber:"; cin>>c2.real>>c2.imaginary; c3=add(c1,c2); cout<<"complexnumber("<<c1.real<<','<<c1.imaginary<<")+("<<c2.real<<','<<c2.imag

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論