版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第二章C++簡(jiǎn)單程序設(shè)計(jì)清華大學(xué)鄭莉C++語(yǔ)言程序設(shè)計(jì)12本章主要內(nèi)容C++語(yǔ)言概述基本數(shù)據(jù)類型和表達(dá)式數(shù)據(jù)的輸入與輸出算法的基本控制結(jié)構(gòu)自定義數(shù)據(jù)類型3C++語(yǔ)言的產(chǎn)生C++是從C語(yǔ)言發(fā)展演變而來(lái)的,首先是一個(gè)更好的C引入了類的機(jī)制,最初的C++被稱為“帶類的C”1983年正式取名為C++從1989年開始C++語(yǔ)言的標(biāo)準(zhǔn)化工作于1994年制定了ANSIC++標(biāo)準(zhǔn)草案于1998年11月被國(guó)際標(biāo)準(zhǔn)化組織(ISO)批準(zhǔn)為國(guó)際標(biāo)準(zhǔn),成為目前的C++C++語(yǔ)言概述4C++的特點(diǎn)全面兼容C它保持了C的簡(jiǎn)潔、高效和接近匯編語(yǔ)言等特點(diǎn)對(duì)C的類型系統(tǒng)進(jìn)行了改革和擴(kuò)充C++也支持面向過(guò)程的程序設(shè)計(jì),不是一個(gè)純正的面向?qū)ο蟮恼Z(yǔ)言支持面向?qū)ο蟮姆椒–++語(yǔ)言概述5C++程序?qū)嵗?-1//2_1.cpp#include<iostream>usingnamespacestd;intmain(){
cout<<"Hello!"<<endl;
cout<<"Welcometoc++!"<<endl; return0;}運(yùn)行結(jié)果:Hello!Welcometoc++!C++語(yǔ)言概述6C++字符集大小寫的英文字母:A~Z,a~z數(shù)字字符:0~9特殊字符:
! # % ^ & * _ + = - ~ < > / \ ‘
“ ; . , : ? ( ) [ ] { }C++語(yǔ)言概述7詞法記號(hào)關(guān)鍵字
C++預(yù)定義的單詞標(biāo)識(shí)符
程序員聲明的單詞,它命名程序正文中的一些實(shí)體文字
在程序中直接使用符號(hào)表示的數(shù)據(jù)操作符
用于實(shí)現(xiàn)各種運(yùn)算的符號(hào)分隔符
(){},:;
用于分隔各個(gè)詞法記號(hào)或程序正文空白符 空格、制表符(TAB鍵產(chǎn)生的字符)、垂直制表符、換行符、回車符和注釋的總稱C++語(yǔ)言概述8標(biāo)識(shí)符的構(gòu)成規(guī)則以大寫字母、小寫字母或下劃線(_)開始??梢杂梢源髮懽帜?、小寫字母、下劃線(_)或數(shù)字0~9組成。大寫字母和小寫字母代表不同的標(biāo)識(shí)符。C++語(yǔ)言概述9
數(shù)據(jù)類型
——常量與變量#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;return0;}常量變量變量先聲明后使用符號(hào)常量基本數(shù)據(jù)類型和表達(dá)式10#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;return0;}
數(shù)據(jù)類型
——整型數(shù)據(jù)shortunsignedshort2字節(jié)intunsignedint
4字節(jié)longunsignedlong4字節(jié)整型變量聲明基本數(shù)據(jù)類型和表達(dá)式整型變量整型常量11數(shù)據(jù)類型
—整型數(shù)據(jù)及取值范圍類型 說(shuō)明符 位數(shù) 數(shù)值范圍 短整 short 16 -32768~32767基本 int 32 -231~(231-1)長(zhǎng)整 long 32 -231~(231-1)無(wú)符號(hào)
unsignedshort 16 0~65535
unsigned[int] 32 0~(232-1)
unsignedlong 32 0~(232-1) 基本數(shù)據(jù)類型和表達(dá)式12#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;return0;}
數(shù)據(jù)類型
——實(shí)型數(shù)據(jù)實(shí)型常量float4字節(jié)
3.4×10±387位有效數(shù)字double8字節(jié)
1.7×10±30815位有效數(shù)字longdouble8字節(jié)
1.7×10±30815位有效數(shù)字實(shí)型變量默認(rèn)為double型后綴F(或f)
為float型后綴L(或l)
為longdouble
型基本數(shù)據(jù)類型和表達(dá)式13
數(shù)據(jù)類型
——字符型數(shù)據(jù)(一)字符常量單引號(hào)括起來(lái)的一個(gè)字符,
如:'a','D','?','$'字符變量用來(lái)存放字符常量
例:charc1,c2;
c1='a';
c2='A';字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式以ASCII碼存儲(chǔ),占1字節(jié),用7個(gè)二進(jìn)制位基本數(shù)據(jù)類型和表達(dá)式14字符數(shù)據(jù)的使用方法字符數(shù)據(jù)和整型數(shù)據(jù)之間可以運(yùn)算。字符數(shù)據(jù)與整型數(shù)據(jù)可以互相賦值。字符串常量例:"CHINA"
"a"
'a'所以:charc;
c="a";CHINA\0a
\0aPage14
數(shù)據(jù)類型
——字符型數(shù)據(jù)(二)基本數(shù)據(jù)類型和表達(dá)式15
數(shù)據(jù)類型
——布爾型數(shù)據(jù)布爾型變量的說(shuō)明:
例:boolflag;布爾型數(shù)據(jù)的取值:
只有false
和true
兩個(gè)值基本數(shù)據(jù)類型和表達(dá)式16
數(shù)據(jù)類型
——變量初始化例:
inta=3;
doublef=3.56;
charc='a';
intc(5);Page16基本數(shù)據(jù)類型和表達(dá)式17數(shù)據(jù)類型
—混合運(yùn)算時(shí)的類型轉(zhuǎn)換不同類型數(shù)據(jù)進(jìn)行混合運(yùn)算時(shí),C++編譯器會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換。為了避免不同的數(shù)據(jù)類型在運(yùn)算中出現(xiàn)類型問(wèn)題,應(yīng)盡量使用同種類型數(shù)據(jù)??梢圆捎脧?qiáng)制類型轉(zhuǎn)換:例如:
floatc;
inta,b;
c=float(a)/float(b);或c=(float)a/(float)b;
基本數(shù)據(jù)類型和表達(dá)式18變量的存儲(chǔ)類型auto屬于一時(shí)性存儲(chǔ),其存儲(chǔ)空間可以被若干變量多次覆蓋使用。register存放在通用寄存器中。extern在所有函數(shù)和程序段中都可引用。static在內(nèi)存中是以固定地址存放的,在整個(gè)程序運(yùn)行期間都有效?;緮?shù)據(jù)類型和表達(dá)式19算術(shù)運(yùn)算符與算術(shù)表達(dá)式基本算術(shù)運(yùn)算符
+-*/(若整數(shù)相除,結(jié)果取整)%(取余,操作數(shù)為整數(shù))優(yōu)先級(jí)與結(jié)合性先乘除,后加減,同級(jí)自左至右++,--(自增、自減)例:i++;--j;Page19基本數(shù)據(jù)類型和表達(dá)式20賦值運(yùn)算符和賦值表達(dá)式
簡(jiǎn)單的賦值運(yùn)算符"="舉例
n=n+5表達(dá)式的類型
等號(hào)左邊對(duì)象的類型表達(dá)式的值
等號(hào)左邊對(duì)象被賦值后的值Page20基本數(shù)據(jù)類型和表達(dá)式21賦值運(yùn)算符和賦值表達(dá)式
復(fù)合的賦值運(yùn)算符有10種復(fù)合運(yùn)算符:
+=,-=,*=,/=,%=,
<<=,>>=,&=,^=,|=例
a+=3
等價(jià)于a=a+3
x*=y+8
等價(jià)于x=x*(y+8)基本數(shù)據(jù)類型和表達(dá)式22賦值運(yùn)算符和賦值表達(dá)式
——賦值表達(dá)式舉例a=5 表達(dá)式值為5a=b=c=5 表達(dá)式值為5,a,b,c均為5a=5+(c=6) 表達(dá)式值為11,a為11,c為6a=(b=4)+(c=6)
表達(dá)式值為10,a為10,b為4,c為6a=(b=10)/(c=2)
表達(dá)式值為5,a為5,b為10,c為2a+=a-=a*a 相當(dāng)于a=a+(a=a-a*a)Page22基本數(shù)據(jù)類型和表達(dá)式23逗號(hào)運(yùn)算和逗號(hào)表達(dá)式格式表達(dá)式1,表達(dá)式2求解順序及結(jié)果先求解1,再求解2,最終結(jié)果為表達(dá)式2的值例a=3*5,a*4
最終結(jié)果為60Page23基本數(shù)據(jù)類型和表達(dá)式24關(guān)系運(yùn)算與關(guān)系表達(dá)式關(guān)系運(yùn)算是比較簡(jiǎn)單的一種邏輯運(yùn)算,優(yōu)先次序?yàn)椋?/p>
<<=>>===!=
優(yōu)先級(jí)相同(高)優(yōu)先級(jí)相同(低)關(guān)系表達(dá)式是一種最簡(jiǎn)單的邏輯表達(dá)式其結(jié)果類型為bool,值只能為true
或false。例如:a>b,c<=a+b,x+y==3基本數(shù)據(jù)類型和表達(dá)式25邏輯運(yùn)算與邏輯表達(dá)式邏輯運(yùn)算符
!(非)&&(與)||(或)
優(yōu)先次序:高→低邏輯表達(dá)式
例如:(a>b)&&(x>y)
其結(jié)果類型為bool,值只能為true
或false基本數(shù)據(jù)類型和表達(dá)式26邏輯運(yùn)算與邏輯表達(dá)式“&&”
的“短路特性”表達(dá)式1&&表達(dá)式2先求解表達(dá)式1若表達(dá)式1的值為false,則最終結(jié)果為false,不再求解表達(dá)式2若表達(dá)式1的結(jié)果為true,則求解表達(dá)式2,以表達(dá)式2的結(jié)果作為最終結(jié)果“||”也具有類似的特性基本數(shù)據(jù)類型和表達(dá)式27條件運(yùn)算符與條件表達(dá)式一般形式表達(dá)式1?表達(dá)式2:表達(dá)式3表達(dá)式1必須是bool
類型執(zhí)行順序先求解表達(dá)式1,若表達(dá)式1的值為true,則求解表達(dá)式2,表達(dá)式2的值為最終結(jié)果若表達(dá)式1的值為false,則求解表達(dá)式3,表達(dá)式3的值為最終結(jié)果例:x=a>b?a:b;基本數(shù)據(jù)類型和表達(dá)式28條件運(yùn)算符與條件表達(dá)式注意:條件運(yùn)算符優(yōu)先級(jí)高于賦值運(yùn)算符,低于邏輯運(yùn)算符表達(dá)式2、3的類型可以不同,條件表達(dá)式的最終類型為2和3中較高的類型。例:x=a>b?a:b;基本數(shù)據(jù)類型和表達(dá)式①②29sizeof
運(yùn)算符語(yǔ)法形式
sizeof(類型名)
或sizeof
表達(dá)式結(jié)果值:
“類型名”所指定的類型或“表達(dá)式”的結(jié)果類型所占的字節(jié)數(shù)。例:sizeof(short)sizeof
x基本數(shù)據(jù)類型和表達(dá)式30位運(yùn)算——按位與(&)運(yùn)算規(guī)則將兩個(gè)運(yùn)算量的每一個(gè)位進(jìn)行邏輯與操作舉例:計(jì)算3&53:000000115:(&)000001013&5:00000001用途:將某一位置0,其他位不變。例如:
將char型變量a的最低位置0:
a=a&0xfe;取指定位。
例如:有charc;inta;
取出a的低字節(jié),置于c中:c=a&0xff;基本數(shù)據(jù)類型和表達(dá)式31位運(yùn)算——按位或(|)運(yùn)算規(guī)則將兩個(gè)運(yùn)算量的每一個(gè)位進(jìn)行邏輯或操作舉例:計(jì)算3|53:000000115:(|)000001013|5:00000111用途:將某些位置1,其他位不變。
例如:將int
型變量a
的低字節(jié)置
1
:
a=a|0xff;基本數(shù)據(jù)類型和表達(dá)式32位運(yùn)算——按位異或(^)運(yùn)算規(guī)則兩個(gè)操作數(shù)進(jìn)行異或:
若對(duì)應(yīng)位相同,則結(jié)果該位為0,
若對(duì)應(yīng)位不同,則結(jié)果該位為1,舉例:計(jì)算071^052071: 00111001052:(^)00101010071^052: 00010011基本數(shù)據(jù)類型和表達(dá)式33位運(yùn)算——按位異或(^)用途:使特定位翻轉(zhuǎn)(與0異或保持原值,與1異或取反)例如:要使01111010
低四位翻轉(zhuǎn):
01111010(^) 00001111 01110101基本數(shù)據(jù)類型和表達(dá)式34位運(yùn)算——取反(~)單目運(yùn)算符,對(duì)一個(gè)二進(jìn)制數(shù)按位取反。例:025:0000000000010101~025:1111111111101010基本數(shù)據(jù)類型和表達(dá)式35位運(yùn)算——移位左移運(yùn)算(<<)左移后,低位補(bǔ)0,高位舍棄。右移運(yùn)算(>>)右移后,低位:舍棄高位:無(wú)符號(hào)數(shù):補(bǔ)0
有符號(hào)數(shù):補(bǔ)“符號(hào)位”基本數(shù)據(jù)類型和表達(dá)式36運(yùn)算符優(yōu)先級(jí)括號(hào)++,--,sizeof*,/,%+,-==,!=位運(yùn)算&&||?:賦值運(yùn)算逗號(hào)運(yùn)算低高基本數(shù)據(jù)類型和表達(dá)式37混合運(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è)操作數(shù)的類型一致。在算術(shù)運(yùn)算和關(guān)系運(yùn)算中如果參與運(yùn)算的操作數(shù)類型不一致,編譯系統(tǒng)會(huì)自動(dòng)對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換(即隱含轉(zhuǎn)換),基本原則是將低類型數(shù)據(jù)轉(zhuǎn)換為高類型數(shù)據(jù)。
char,short,int,unsigned,long,unsigned
long,float,double
低高基本數(shù)據(jù)類型和表達(dá)式38混合運(yùn)算時(shí)數(shù)據(jù)類型的轉(zhuǎn)換
——隱含轉(zhuǎn)換當(dāng)參與運(yùn)算的操作數(shù)必須是bool型時(shí),如果操作數(shù)是其它類型,編譯系統(tǒng)會(huì)自動(dòng)將非0數(shù)據(jù)轉(zhuǎn)換為true,0轉(zhuǎn)換為false。將低類型數(shù)據(jù)轉(zhuǎn)換為高類型數(shù)據(jù);位運(yùn)算的操作數(shù)必須是整數(shù),當(dāng)二元位運(yùn)算的操作數(shù)是不同類型的整數(shù)時(shí),也會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換,賦值運(yùn)算要求左值與右值的類型相同,若類型不同,編譯系統(tǒng)會(huì)自動(dòng)將右值轉(zhuǎn)換為左值的類型?;緮?shù)據(jù)類型和表達(dá)式39混合運(yùn)算時(shí)數(shù)據(jù)類型的轉(zhuǎn)換
——顯式轉(zhuǎn)換語(yǔ)法形式(3種):類型說(shuō)明符(表達(dá)式)(類型說(shuō)明符)表達(dá)式類型轉(zhuǎn)換操作符<類型說(shuō)明符>(表達(dá)式)類型轉(zhuǎn)換操作符可以是:
const_cast、dynamic_cast、
reinterpret_cast、static_cast顯式類型轉(zhuǎn)換的作用是將表達(dá)式的結(jié)果類型轉(zhuǎn)換為類型說(shuō)明符所指定的類型。例:int(z),(int)z,static_cast<int>(z)
三種完全等價(jià)基本數(shù)據(jù)類型和表達(dá)式40語(yǔ)句空語(yǔ)句聲明語(yǔ)句表達(dá)式語(yǔ)句選擇語(yǔ)句循環(huán)語(yǔ)句跳轉(zhuǎn)語(yǔ)句復(fù)合語(yǔ)句標(biāo)號(hào)語(yǔ)句
41表達(dá)式語(yǔ)句格式:表達(dá)式;表達(dá)式語(yǔ)句與表達(dá)式的區(qū)別:表達(dá)式可以包含在其他表達(dá)式中,而語(yǔ)句不可。例如:if((a=b)>0)t=a;不可寫為:if((a=b;)>0)t=a;語(yǔ)句42復(fù)合語(yǔ)句將多個(gè)語(yǔ)句用一對(duì)大括號(hào)包圍,便構(gòu)成一個(gè)復(fù)合語(yǔ)句例如{ sum=sum+i; i++;} 語(yǔ)句43簡(jiǎn)單的輸入、輸出向標(biāo)準(zhǔn)輸出設(shè)備(顯示器)輸出例:intx;
cout<<"x="<<x;從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤)輸入例:intx;
cin>>x;44順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)算法的基本控制結(jié)構(gòu)45如何解決分支問(wèn)題?例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; return0;}4646運(yùn)行結(jié)果:Entertheyear:20002000isaleapyear474748if(表達(dá)式)語(yǔ)句例:if(x>y)cout<<x;if(表達(dá)式)語(yǔ)句1else語(yǔ)句2例:if(x>y)cout<<x;elsecout<<y;if(表達(dá)式1)語(yǔ)句1
elseif(表達(dá)式2)語(yǔ)句2
elseif(表達(dá)式3)語(yǔ)句3
…
else語(yǔ)句nif語(yǔ)句
——三種形式算法的基本控制結(jié)構(gòu)49如何解決多分問(wèn)題?例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; else
cout<<"x<y"<<endl; else
cout<<"x=y"<<endl; return0;}5050運(yùn)行結(jié)果1:Enterxandy:58x<y運(yùn)行結(jié)果2:Enterxandy:88x=y運(yùn)行結(jié)果3:Enterxandy:128x>y515152一般形式if()if()語(yǔ)句1else語(yǔ)句2elseif()語(yǔ)句3else語(yǔ)句4注意語(yǔ)句1、2、3、4可以是復(fù)合語(yǔ)句,每層的if與else配對(duì),或用{}來(lái)確定層次關(guān)系。if語(yǔ)句
——嵌套算法的基本控制結(jié)構(gòu)53特殊的多分支結(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; } return0;}545455一般形式switch(表達(dá)式){case常量表達(dá)式1:語(yǔ)句1case常量表達(dá)式2:語(yǔ)句2┆case常量表達(dá)式n:語(yǔ)句ndefault:語(yǔ)句n+1}switch語(yǔ)句執(zhí)行順序以case中的常量表達(dá)式值為入口標(biāo)號(hào),由此開始順序執(zhí)行。因此,每個(gè)case分支最后應(yīng)該加break語(yǔ)句。每個(gè)常量表達(dá)式的值不能相同,次序不影響執(zhí)行結(jié)果??梢允嵌鄠€(gè)語(yǔ)句,但不必用{}??梢允钦?、字符型、枚舉型算法的基本控制結(jié)構(gòu)56使用switch語(yǔ)句應(yīng)注意的問(wèn)題case分支可包含多個(gè)語(yǔ)句,且不用{}。表達(dá)式、判斷值都是int型或char型。若干分支執(zhí)行內(nèi)容相同可共用一組語(yǔ)句。算法的基本控制結(jié)構(gòu)57如何有效地完成重復(fù)工作例2-5求自然數(shù)1~10之和分析:本題需要用累加算法,累加過(guò)程是一個(gè)循環(huán)過(guò)程,可以用while語(yǔ)句實(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; return0;}運(yùn)行結(jié)果:sum=55585859while語(yǔ)句形式while(表達(dá)式)語(yǔ)句
可以是復(fù)合語(yǔ)句,其中必須含有改變條件表達(dá)式值的語(yǔ)句。執(zhí)行順序先判斷表達(dá)式的值,若為true時(shí),執(zhí)行語(yǔ)句。算法的基本控制結(jié)構(gòu)60先執(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; return0;}6161運(yùn)行結(jié)果:Enterthenumber:365Thenumberinreverseorderis563626263do-while語(yǔ)句一般形式do語(yǔ)句while(表達(dá)式)可以是復(fù)合語(yǔ)句,其中必須含有改變條件表達(dá)式值的語(yǔ)句。執(zhí)行順序先執(zhí)行循環(huán)體語(yǔ)句,后判斷條件。
表達(dá)式為true時(shí),繼續(xù)執(zhí)行循環(huán)體與while語(yǔ)句的比較:while語(yǔ)句執(zhí)行順序
先判斷表達(dá)式的值,為true時(shí),再執(zhí)行語(yǔ)句算法的基本控制結(jié)構(gòu)對(duì)比下列程序:程序1:#include<iostream>usingnamespacestd;intmain(){
inti=1,sum=0;while(i<=10){sum+=i;i++;}
cout<<"sum="<<sum<<endl;return0;}算法的基本控制結(jié)構(gòu)程序2:#include<iostream>usingnamespacestd;intmain(){
inti=1,sum=0;do{sum+=i;i++;}while(i<=10);
cout<<"sum="<<sum<<endl;return0;}646465for語(yǔ)句
既可以用于循環(huán)次數(shù)已知,也可用于次數(shù)未知語(yǔ)法形式for(初始語(yǔ)句;表達(dá)式1;表達(dá)式2)語(yǔ)句
循環(huán)前先求解為true時(shí)執(zhí)行循環(huán)體循環(huán)控制條件每次執(zhí)行完循環(huán)體后求解算法的基本控制結(jié)構(gòu)66例2-8輸入一個(gè)整數(shù),求出它的所有因子。算法的基本控制結(jié)構(gòu)#include<iostream>usingnamespacestd;intmain()
{ intn; cout<<"Enterapositiveinteger:"; cin>>n; cout<<"Number"<<n<<"Factors"; for(int
k
=
1;k<=n;k++)
if(n%k==0)
cout<<k<<"";cout<<endl;return0;}6767運(yùn)行結(jié)果1:Enterapositiveinteger:36Number36Factors123469121836運(yùn)行結(jié)果2:Enterapositiveinteger:7Number7Factors17686869例2-9編寫程序輸出以下圖案*************************算法的基本控制結(jié)構(gòu)#include<iostream>usingnamespacestd;intmain(){ constintN=4; for(inti=1;i<=N;i++){//輸出前4行圖案
for(intj=1;j<=30;j++)
cout<<''; //在圖案左側(cè)空30列
for(intj=1;j<=8-2*i;j++)
cout<<''; for(intj=1;j<=2*i-1;j++)
cout<<'*';
cout<<endl; }7070
//輸出后3行圖案
for(inti=1;i<=N-1;i++){ for(intj=1;j<=30;j++)
cout<<''; //在圖案左側(cè)空30列
for(intj=1;j<=7-2*i;j++)
cout<<'*';
cout<<endl; } return0;}717172循環(huán)結(jié)構(gòu)與選擇結(jié)構(gòu)相互嵌套#include<iostream>usingnamespacestd;intmain(){ for(intn=100;n<=200;n++){if(n%3!=0)
cout<<n; }return0;}算法的基本控制結(jié)構(gòu)73例2-10讀入一系列整數(shù),統(tǒng)計(jì)出正整數(shù)個(gè)數(shù)i和負(fù)整數(shù)個(gè)數(shù)j,讀入0則結(jié)束。分析:需要讀入一系列整數(shù),但是整數(shù)個(gè)數(shù)不定,要在每次讀入之后進(jìn)行判斷,因此使用while循環(huán)最為合適。循環(huán)控制條件應(yīng)該是n!=0。由于要判斷數(shù)的正負(fù)并分別進(jìn)行統(tǒng)計(jì),所以需要在循環(huán)內(nèi)部嵌入選擇結(jié)構(gòu)。算法的基本控制結(jié)構(gòu)#include<iostream>usingnamespacestd;intmain(){
inti=0,j=0,n;
cout<<"Entersomeintegersplease(enter0toquit):" <<endl;
cin>>n; while(n!=0){ if(n>0)i+=1; if(n<0)j+=1;
cin>>n; }
cout<<"Countofpositiveintegers:"<<i<<endl;
cout<<"Countofnegativeintegers:"<<j<<endl; return0;}747475break和continue語(yǔ)句break語(yǔ)句使程序從循環(huán)體和switch語(yǔ)句內(nèi)跳出,繼續(xù)執(zhí)行邏輯上的下一條語(yǔ)句。不宜用在別處。continue語(yǔ)句結(jié)束本次循環(huán),接著判斷是否執(zhí)行下一次循環(huán)。算法的基本控制結(jié)構(gòu)76typedef語(yǔ)句為一個(gè)已有的數(shù)據(jù)類型另外命名語(yǔ)法形式typedef
已有類型名新類型名表;例如typedefdoubleArea,Volume;typedef
int
Natural;Naturali1,i2;Areaa;Volumev;自定義數(shù)據(jù)類型77枚舉類型—enum只要將需要的變量值一一列舉出來(lái),便構(gòu)成了一個(gè)枚舉類型。枚舉類型的聲明形式如下:enum
枚舉類型名{變量值列表};例如:enumWeekday{SUN,MON,TUE,WED,THU,FRI,SAT};自定義數(shù)據(jù)類型78枚舉類型—enum枚舉類型應(yīng)用說(shuō)明:對(duì)枚舉元素按常量處理,不能對(duì)它們賦值。例如,不能寫:SUN=0;枚舉元素具有默認(rèn)值,它們依次為:0,1,2,。也可以在聲明時(shí)另行指定枚舉元素的值,如:enum
Weekday{SUN=7,MON=1,TUE,WED,THU,FRI,SAT};枚舉值可以進(jìn)行關(guān)系運(yùn)算。整數(shù)值不能直接賦給枚舉變量,如需
要將整數(shù)賦值給枚舉變量,應(yīng)進(jìn)行強(qiáng)
制類型轉(zhuǎn)換。自定義數(shù)據(jù)類型79例2-11設(shè)某次體育比賽的結(jié)果有四種可能:勝(WIN)、負(fù)(LOSE)、平局(TIE)、比賽取消(CANCEL),編寫程序順序輸出這四種情況。分析:由于比賽結(jié)果只有四種可能,所以可以聲明一個(gè)枚舉類型,聲明一個(gè)枚舉類型的變量來(lái)存放比賽結(jié)果。自定義數(shù)據(jù)類型#include<iostream>usingnamespacestd;enum
GameResult{WIN,LOSE,TIE,CANCEL};intmain(){
GameResultresult;
enum
GameResultomit=CANCEL;//可不用關(guān)鍵字enmum for(intcount=WIN;count<=CANCEL;count++){ result=GameResult(count); if(result==omit)
cout<<"Thegamewascancelled"<<endl; else{
cout<<"Thegamewasplayed"; if(result==WIN)
cout<<"andwewon!"; if(result==LOSE)
cout<<"andwelost.";
cout<<endl; } } return0;}8080運(yùn)行結(jié)果
Thegamewasplayedandwewon!Thegamewasplayedandwelost.ThegamewasplayedThegamewascancelled818182結(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ù)類型83結(jié)構(gòu)體——結(jié)構(gòu)的聲明舉例:structStudent{//學(xué)生信息結(jié)構(gòu)體
intnum;//學(xué)號(hào)
charname[20];//姓名
chargender;//性別
intage;//年齡
floatscore;//成績(jī)
charaddr[40];//住址};自定義數(shù)據(jù)類型84結(jié)構(gòu)體——結(jié)構(gòu)變量說(shuō)明變量說(shuō)明形式結(jié)構(gòu)名結(jié)構(gòu)變量名;注意:結(jié)構(gòu)變量的存儲(chǔ)類型概念、它的壽命、可見(jiàn)性及使用范圍與普通變量完全一致。結(jié)構(gòu)變量說(shuō)明在結(jié)構(gòu)類型聲明之后,二者也可同時(shí)進(jìn)行。結(jié)構(gòu)變量占內(nèi)存大小可用sizeof
運(yùn)算求出:
sizeof(類型名或變量名)自定義數(shù)據(jù)類型85結(jié)構(gòu)體
——結(jié)構(gòu)變量的初始化和使用初始化說(shuō)明結(jié)構(gòu)變量的同時(shí)可以直接設(shè)置初值。使用結(jié)構(gòu)體成員的引用形式:
結(jié)構(gòu)變量名.成員名自定義數(shù)據(jù)類型86例2-12結(jié)構(gòu)體變量的初始化和使用#include<iostream>#include<iomanip>#include<string>usingnamespacestd;structStudent{//學(xué)生信息結(jié)構(gòu)體
intnum;//學(xué)號(hào)
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;return0;}//setw()用來(lái)設(shè)置輸出間隔的自定義數(shù)據(jù)類型運(yùn)行結(jié)果:97001LinLinF1987聯(lián)合體聲明形式:union聯(lián)合名{
數(shù)據(jù)類型成員名1;數(shù)據(jù)類型成員名2;:數(shù)據(jù)類型成員名n;};聯(lián)合體類型變量說(shuō)明的語(yǔ)法形式聯(lián)合名聯(lián)合變量名;引用形式:聯(lián)合名.成員名自定義數(shù)據(jù)類型88例:unionUArea{charcData;shortsData;longlData;}UAreacDatalDatasData聯(lián)合體
共用一組內(nèi)存單元自定義數(shù)據(jù)類型89無(wú)名聯(lián)合無(wú)名聯(lián)合沒(méi)有標(biāo)記名,只是聲明一個(gè)成員項(xiàng)的集合,這些成員項(xiàng)具有相同的內(nèi)存地址,可以由成員項(xiàng)的名字直接訪問(wèn)。例:union{
inti;floatf;}在程序中可以這樣使用:i=10;f=2.2;自定義數(shù)據(jù)類型變量是如何工作的?站在目標(biāo)代碼的角度上看問(wèn)題變量具有兩個(gè)重要屬性——數(shù)據(jù)類型和變量名它們都用文字表示,便于人們理解,但不便于CPU識(shí)別,因此它們不能出現(xiàn)在目標(biāo)代碼中;下面將討論它們?cè)谀繕?biāo)代碼中的表示方式。90深度探索變量是如何工作的?變量名源代碼中,變量依靠變量名來(lái)標(biāo)識(shí);目標(biāo)代碼中,變量依靠地址來(lái)標(biāo)識(shí),每個(gè)變量的地址互不相同。91深度探索inta,b;intmain(){a++;b++;return0;}incl0x80495f8incl0x80495fc地址變量是如何工作的?數(shù)據(jù)類型任何數(shù)據(jù)在內(nèi)存中都是用二進(jìn)制串的形式表示的;一串二進(jìn)制數(shù),只有確定了類型,才有真實(shí)的含義;例:10111111,10000000,00000000,00000000解釋為int型:-1,082,130,432解釋為unsigned型:3,212,836,864解釋為float型:-1.092深度探索變量是如何工作的?目標(biāo)代碼體現(xiàn)數(shù)據(jù)類型的方式類型的特性蘊(yùn)含于操作之中;對(duì)不同數(shù)據(jù)類型,源代碼中形式上相同的操作,會(huì)被轉(zhuǎn)化為目標(biāo)代碼中的不同操作。93深度探索93inta;shortb;charc;
intmain(){a++;b++;c++;return0;}incl0x80495f8incw0x80495fcincb0x80495fe不同的操作變量是如何工作的?變量的聲明將一個(gè)標(biāo)識(shí)符聲明為變量,告訴編譯器這個(gè)標(biāo)識(shí)符表示變量,同時(shí)還指出了它的數(shù)據(jù)類型;只有確定了一個(gè)變量的數(shù)據(jù)類型,變量參與的操作才具有完整的意義,編譯器才能將該變量參與的表達(dá)式翻譯為合適的操作。變量的定義不僅確定了一個(gè)標(biāo)識(shí)符表示變量,以及該變量的類型,還確定了變量地址的分配位置。94深度探索表達(dá)式的執(zhí)行原理什么是寄存器?CPU內(nèi)部的存儲(chǔ)單元讀寫速度非??鞌?shù)量很少IA-32有eax、ebx、ecx、edx、esp、ebp、esi、edi八個(gè)通用寄存器大部分CPU指令都需要讀寫寄存器。復(fù)雜的表達(dá)式,分步執(zhí)行,每條指令只能做一次基本運(yùn)算,中間結(jié)果暫存在寄存器中。95深度探索表達(dá)式的執(zhí)行原理inta,b,c,d;inte;intmain(){ a=4; b=2; c=1; d=10; e=(a+b)*(c-d); return0;}movl$0x4,0x80495d8movl$0x2,0x80495dcmovl$0x1,0x80495e0movl$0xa,0x80495e496深
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年豐巢柜快捷掃碼取件協(xié)議
- 2024年雙方關(guān)于空間探索與利用合作協(xié)議
- 2024企業(yè)間關(guān)于智慧城市項(xiàng)目的建設(shè)與運(yùn)營(yíng)合作協(xié)議
- 2024年切削液品牌代理協(xié)議
- 2024雙方就文化旅游項(xiàng)目融資服務(wù)協(xié)議
- 2024年保溫工程規(guī)范:施工承包協(xié)議
- 2024年婚姻財(cái)產(chǎn)管理協(xié)議模板
- 2024年互聯(lián)網(wǎng)金融服務(wù)綜合平臺(tái)協(xié)議
- 2024年合作共進(jìn):合資企業(yè)設(shè)立協(xié)議范本
- 廠房物業(yè)管理合同協(xié)議書
- 手機(jī)游戲獨(dú)家代理協(xié)議模板
- 2023年隴南康縣招聘專職社區(qū)工作者考試真題
- 2024年審計(jì)工作總結(jié)(六篇)
- 福建復(fù)旦大學(xué)附屬中山醫(yī)院廈門醫(yī)院招聘編外真題
- 中國(guó)在線親子游行業(yè)產(chǎn)業(yè)鏈全景圖譜、領(lǐng)先企業(yè)分析及投資前景預(yù)測(cè)報(bào)告
- 2024年新華社招聘應(yīng)屆畢業(yè)生及留學(xué)回國(guó)人員歷年高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
- 中國(guó)航空學(xué)會(huì)-2024低空經(jīng)濟(jì)場(chǎng)景白皮書
- 23J916-1 住宅排氣道(一)
- 《傳播學(xué)概論(第四版)》全套教學(xué)課件
- 第八章旅游體驗(yàn)
- 人教版(2024)七年級(jí)英語(yǔ)上冊(cè)教學(xué)課件Unit 3 Lesson 6 Reading Plus
評(píng)論
0/150
提交評(píng)論