C++重點知識點總結(jié)及習(xí)題_第1頁
C++重點知識點總結(jié)及習(xí)題_第2頁
C++重點知識點總結(jié)及習(xí)題_第3頁
C++重點知識點總結(jié)及習(xí)題_第4頁
C++重點知識點總結(jié)及習(xí)題_第5頁
已閱讀5頁,還剩136頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C++的特點:1.支持抽象數(shù)據(jù)類型

2.多態(tài)性,一個接口,多重算法,支持早期聯(lián)編和滯后聯(lián)編

3.繼承性,保證了代碼復(fù)用,支持分類的概念

一^個C++程序由一個或多個函數(shù)構(gòu)成,并且在這些函數(shù)中只有一^個主函數(shù)

main,它是程序執(zhí)行的入口。

C++程序嚴(yán)格區(qū)分字母的大小寫。

第2章基本數(shù)據(jù)類型、運算符及表達式

【內(nèi)容提要】

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

變量及常量

運算符及表達式

簡潔輸入及輸出

【重點及難點】

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

在C++程序里,每個名字都有一個及之相關(guān)聯(lián)的類型,這個類型確定了可以對這個名字

所指代的實體應(yīng)用什么操作,并確定這些操作將如何做出說明。

'布爾型bool

整型int

基本數(shù)據(jù)類型字符型char

r單精度型float

I浮點型3

L雙精度型double

空類型void

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

指針類型Type*

,【工?八非控數(shù)據(jù)類型。

P=U

2.1.1基本數(shù)據(jù)類型數(shù)組類型Type口

小邏輯型:又稱布爾型,用關(guān)鍵字hoc'士KA或false。true可以轉(zhuǎn)換成

整數(shù)1,falseEi'1fct的1民場■特q。枚舉類型enum意式的轉(zhuǎn)換成bool值:非0

的整數(shù)轉(zhuǎn)換限復(fù)合數(shù)據(jù)類型ie

▲字符型:用關(guān)鍵字char表示。取I拄聯(lián)合類型union集里的一個字符。字符型數(shù)

據(jù)通常占用1個字節(jié)的存儲空間,

4整型:用關(guān)鍵字int表示。取值:芝t結(jié)構(gòu)類型struct[數(shù)。

上浮點型:包括單精度型(float)和雙糠府則ac,,hic)的輻府型通常占用4個字節(jié)的存儲

空間,雙精度型通常占用8個字括£類類型class

.I空類型:用關(guān)鍵字主井用羊TClM種r、g后的Ini估必■右'VOid類型的對象。

圖2/C++的數(shù)據(jù)類型

在基本的數(shù)據(jù)類型前可以添加修飾符,以變更基本類型的意義。

signed:有符號。

unsigned:無符號。

unsigned和signed只用于修飾char和int,且signed修飾詞可以省略。當(dāng)用unsigned

修飾詞時,后面的類型說明符可以省略。對于有符號和無符號的整型數(shù)據(jù),它們所占的存儲

空間的大小相同,但它們的表數(shù)范圍卻不相同(對字符型意義相同)。

short:短型。只用于修飾int,且用short修飾時,int可以省略。

long:長型。只用于修飾int和double。當(dāng)用long修飾int時,int可以省略。

數(shù)據(jù)類型的描述確定了其內(nèi)存所占空間的大小,也確定了其表示范圍。用sizeof(數(shù)據(jù)

類型)可以確定某數(shù)據(jù)類型的字節(jié)長度。請讀者查看在你所用的機器上,下面類型的最大值

和最小值是什么:char、short,int、long、float、double、longdouble、unsigned?

2.1.2復(fù)合數(shù)據(jù)類型

▲數(shù)組:由具有相同數(shù)據(jù)類型的元素組成的集合。

-結(jié)構(gòu)體:由不同的數(shù)據(jù)類型構(gòu)成的一種混合的數(shù)據(jù)結(jié)構(gòu),構(gòu)成結(jié)構(gòu)體的成員的數(shù)據(jù)類型

一般不同,并且在內(nèi)存中分別占據(jù)不同的存儲單元。

▲共用體:是類似于結(jié)構(gòu)體的一種構(gòu)造類型,及結(jié)構(gòu)體不同的是構(gòu)成共同體的數(shù)據(jù)成員共

用同一段內(nèi)存單元。

▲枚舉:將變量的值一一列舉出來,每個枚舉成員(枚舉符)都及一個整數(shù)相對應(yīng)。按默

認(rèn)方式,枚舉符所貝武的值從0起先遞增。枚舉的值也可以用整型的表達式賦值進行初始

化。假如某個枚舉中全部枚舉符的值均非負,該枚舉的表示范圍是[0:2K-1],其中2K

是能使全部枚舉符位于此范圍內(nèi)的最小的2的幕;假如存在負的枚舉符值,該枚舉的取

值范圍就是[-2%2K-1]?

上指針類型:指針類型變量用于存儲另一變量的地址,而不能用來存放基本類型的數(shù)據(jù)。

它在內(nèi)存中占據(jù)一個存儲單元。

4類類型:類是體現(xiàn)面對對象程序設(shè)計的最基本特征,也是體現(xiàn)C++及C最大的不同之處。

類是一個數(shù)據(jù)類型,它定義的是一種對象類型,由數(shù)據(jù)和方法組成,描述了屬于該類型

的全部對象的性質(zhì)。

2.2變量及常量

2.1.1變量:指在運行期間其值可以變更的量。

變量有三個特征:變量類型、變量名、變量值。

▲命名:遵循標(biāo)識符命名規(guī)則。

標(biāo)識符是對實體定義的一種定義符,用來標(biāo)識用戶定義的常量名、變量名、函數(shù)名、文

件名、數(shù)組名、和數(shù)據(jù)類型名和程序名等。只能由字母、數(shù)字和下劃線組成,且以字母或下

劃線開頭。命名時留意以下幾點:

1.C++的關(guān)鍵字不能用作用戶自定義的實體名;

2.以下劃線開頭的名字是保留給實現(xiàn)或者運行環(huán)境,用于特殊目的,在應(yīng)用程序里不

要接受這樣的名字;

3.大寫及小寫字母是區(qū)分的;

4.見名知義。

5.維持統(tǒng)一的命名風(fēng)格。

上定義:

格式:〈類型名X變量名>[[=(表達式>],…]

J.typedef:為某種類型聲明一個新名字,而不是定義一種新類型。

格式:typedef(已有類型名>(新類型名)

2.1.2常量:程序執(zhí)行期間其值不變的量。主要有下列幾類常量。

J布爾常量

4.字符常量

用單引號括起的一個字符。在內(nèi)存中,字符數(shù)據(jù)以ASCII碼存儲,如字符'a'的ASCII

碼為97。以轉(zhuǎn)義字符'\'起先的字符常量后跟不同的字符表示不同的特殊字符。

小字符串常量

由一對雙引號括起來的零個或多個字符序列。

字符串可以寫在多行上,不過在這種狀況下必需用反斜線'V表示下一行字符是這一

行字符的持續(xù)。

字符串常量事實上是一個字符數(shù)組,組成數(shù)組的字符除顯示給出的外,還包括字符結(jié)尾

處標(biāo)識字符串結(jié)束的符號'\0',所以字符串“abc”事實上包含4個字符:‘a(chǎn)'、'b'、'c'

和'\0'。

留意字符常量及字符串常量在表示、存儲、運算方面的區(qū)分。

小整型常量

可以用十進制、八進制或十六進制表示。

十進制常量:一般占一個機器字長,是一個帶正負號的常數(shù)(默認(rèn)狀況下為正數(shù))。

八進制常量:由數(shù)字0開頭,其后由若干0-7的數(shù)字組成,如0378,0123等。

十六進制常量:以O(shè)x或0X開頭,其后由若干0-9的數(shù)字及A-F(或小寫a-f)的字母

組成,如0x123,0x3ab?

4浮點型常量

只能以十進制形式表示。共有兩種表示形式:小數(shù)表示法和指數(shù)表示法。

如:11.3-..2、2.3el0s~2.3E—1等。

▲枚舉常量

枚舉聲明形式:enum〈枚舉名>{〈枚舉符表>};

枚舉符可以有兩種形式:

〈枚舉符名〉/〈枚舉符名>=<整形常量〉

尊符號常量

定義形式:const〈類型名〉〈符號常量名>=<表達式",…];

口表示可選項,以下都接受這種標(biāo)記。

定義的符號常量必需初始化。一個符號常量可看作是一個只讀變量,由const定義的常

量的值不行以變更。const的最常見的用途是作為數(shù)組的界和作為分狀況標(biāo)號。

2.3運算符及表達式

在程序中,表達式是計算求值的基本單位,它是由運算符和運算數(shù)組成的式子。運算符

是表示進行某種運算的符號。運算數(shù)包含常量、變量和函數(shù)等。C++語言的運算符按其在表

達式中及運算對象的關(guān)系(連接運算對象的個數(shù))可分為:單目運算、雙目運算、三目運算。

C++運算符一覽表

名稱運算符舉例優(yōu)先級結(jié)合性

作用域區(qū)分符::x1左結(jié)合性

重量運算符.->p.next,p->next2

函數(shù)調(diào)用運算符()fac()

下標(biāo)運算符[]p[io]

后增量、后減量++——p++2右結(jié)合性

前增量、前減量++——-p3

求字節(jié)運算符sizeofsizeof(int)3

正號、負號+--l,+3

指針運算符*和&*p,&x

支配、回收空間運算符Newdeletep=newint;

deletep;

強制類型轉(zhuǎn)換運算符(type)(int)x

算術(shù)運算符*/%3%5(取模)4左結(jié)合性

+-5

左移、右移??8?3,8?36

關(guān)系運算符?=>>=3<57

==|=3!=58

位運算符&(按位“及”)1&29

X按位“異或”)1"210

1(按位“或”)1|211

邏輯運算符&&x&&y12

IIx||y13

J!x3

條件運算符?:a>b?x:y14右結(jié)合性

賦值運算符=及其擴展(+=a=215

一二*二/-%-等)a+=2

逗號運算符a=l,b=2,c=316左結(jié)合性

表2.1C++運算符一覽表

2.4簡潔輸入及輸出

在C++中,I/O運用了流的概念-字符(或字節(jié))流。每一個I/O設(shè)備傳送和接收一系列的字

節(jié),稱之為流。輸入操作可以看成是字節(jié)從一個設(shè)備流入內(nèi)存,而輸出操作可以看成是字節(jié)

從內(nèi)存流出到一個設(shè)備。要運用C++標(biāo)準(zhǔn)的I/O流庫的功能,須要包括兩個頭文件:iostream.h

用于供應(yīng)基本的輸入輸出功能,iomanip.h用于供應(yīng)格式化的功能。

2.4.11/。的書寫格式(基本數(shù)據(jù)類型的輸入輸出)

頭文件iostream.h包含有cin和cout對象,對應(yīng)于標(biāo)準(zhǔn)輸入流和標(biāo)準(zhǔn)輸出流。流讀取運算符

“>>”表示流的輸入,可以從cin輸入流中讀取字符;流插入運算符“<<”表示流的輸出,

可以向cout輸出流插入字符。

如:cout?whelloworld.z,?endl;〃輸出helloworld,然后換行

inti,j;

cin?i?j;〃輸入i.j的值

2.4.2運用限制符(基本數(shù)據(jù)類型輸入輸出的格式限制)

C++中供應(yīng)了大量的用于執(zhí)行格式化輸入輸出的格式限制符,詳細名稱及作用請參看表2.2。

限制符描述所在頭文

dec置基數(shù)為10iostream.h

hex置基數(shù)為16

oct置基數(shù)為8

setfill(c)設(shè)填充字符為c

setprecision(n)設(shè)顯示小數(shù)精度為n位

setw(n)設(shè)域?qū)挒閚個字符

setiosflags(ios::fixed)固定的浮點顯示iomanip.h

setiosflags(ios::scientific)指數(shù)表示

setiosflags(ios::left)左對齊

setiosflags(ios::right)右對齊

setiosflags(ios::skipws)忽視前導(dǎo)空白

setiosflags(ios:uppercase)16進制數(shù)大寫輸出

setiosflags(ios::lowercase)16進制數(shù)小寫輸出

setiosflags(ios::showpoin)顯示小數(shù)點

setiosflags(ios::showpos)顯示符號(正負號)

setiosflags(ios::showbase)指定在數(shù)值前輸出進制(0表示八進制,Ox或

0X表示十六進制)

表2.2I/O流的常用限制符

【典型例題】

例題1:對以下各種數(shù)據(jù)類型比較所占用存儲空間的大?。?/p>

(1)char、int、shortint、longint、double>longdouble.

(2)signedint、unsignedint.

解答:

(1)本題主要考查的學(xué)問點是各種類型所占用的存儲空間的大小以及相應(yīng)的表數(shù)范圍。在

32位計算機中,char占1個字節(jié),shortint占2個字節(jié),int占4個字節(jié),longint占

4個字節(jié),double占8個字節(jié)。sizeof運算符用于求解某種數(shù)據(jù)類型的大小。short和long

在修飾整型時可以省略int?答案為:

1=sizeof(char)<sizeof(short)<sizeof(int)<sizeof(Iona)<sizeof(double)

(2)對于一種確定的數(shù)據(jù)類型有符號數(shù)及無符號數(shù)所占的存儲空間相同,表數(shù)范圍不同。修

飾符signed和unsigned只能用于修飾字符型和整型。答案為:

例題2:下列哪一項能用作用戶自定義的標(biāo)識符:

(a)const(b)2var(c)myname(d)var2

解答:

本題主要考查標(biāo)識符命名規(guī)則。C++關(guān)鍵字不能用于用戶自定義標(biāo)識符,(a)中const是關(guān)鍵

字;第一個字符必需是字母或下劃線,(b)中2var是以數(shù)字開頭;不能含有空格,(c)中my

name含有空格。答案為:d。

例題3:指出下列程序中的錯誤:。

intmainO

(

constintx;

x=100;

return0;

)

解答:

本題主要考查對符號常量的理解。const定義的符號常量必需初始化,由const定義的常量

的值不行以變更。所以本題有兩處錯誤:第一、沒有對符號常量x進行初始化;其次、給符

號常量賦值是錯誤的。

例題4:給下列表達式加上全部的括號(假設(shè)所用變量均已定義):

(1)a+b-c-%b

X

21

7a>b?b:c>d?a:c<a?c:d

z3

\la+=a+b|e

zX

(41

x7a&b+c++

/\

f51

xi7-a&&b~c

/

l6

xk=b=c=a

解答:

本題主要考查表達式中運算符的優(yōu)先級及結(jié)合性。請參閱表2.1。為了避開出錯,建議讀者

在書寫表達式時完整書寫括號。

(1)答案為:(a+b)-((c—)燦)

(2)答案為:a>b?b:(c>d?a:(c<a?c:d))

(3)答案為:a+=((a+b)||e)

(4)答案為:a&(b+(c++))

(5)答案為:(-a)&&(b-c)

(6)答案為:k=(b=(c=a))

例題5:請依據(jù)下列題意寫出相應(yīng)的表達式。

(1)有a、b、c、max四個變量a、b、c中的最大值,并將結(jié)果放入max中。

(2)年齡在1到100之間(包含1和100,年齡用變量age表示)。

(3)公式:(a+b)h。

(4)推斷一年是否為閏年,年用year表示。滿足下列兩個條件之一即為閏年:①

能被4整除但不能被100整除②能被400整除。

解答:

(1)主要考查對條件表達式的理解和書寫。答案為:max=a>b?(a>c?a:c):(b>c?b:c)?

(2)主要考查對邏輯表達式的理解和書寫?答案為:"=age&&age<=100。

(3)主要考查如何在計算機中表示一個數(shù)學(xué)公式。答案為:(a+b)*h/2。

(4)主要考查對邏輯表達式的理解和書寫。答案為:

(year%4=0&&year%100!=0)||(year%400==0)o

例題6:下列選項中兩個表達式的運算結(jié)果相同的是()。

(a)3/2和3.0/2.0(b)3/2和3.0/2(c)3/2.0和3.0/2.0(d)3/2.0和3/2

解答:

本題考查數(shù)據(jù)類型及表達式中數(shù)據(jù)類型的隱式轉(zhuǎn)換。3/2中兩個操作數(shù)都為整型,運算結(jié)果

仍為整型即1;3.0/2和3/2.0中一個操作數(shù)為整型另一個為浮點型,運算時整型隱式轉(zhuǎn)換

為浮點型,運算結(jié)果也為浮點型即1.5;3.0/2.0兩個操作數(shù)均為浮點型,結(jié)果也為浮點型

即1.5,答案為:(c)o

例題7:

下列程序的運行結(jié)果為:。

#include<iostream.h>

voidmain()

(

inta=2,b=4,i=0,x;

x=a>b&&++i;

cout<<,zx:/,?x?endl;

cout?*i:z/?i?endl;

}

解答:

本題主要考查“短路”表達式的運算。對于表達式中的“及”運算而言,只要有一個操作數(shù)

為假,結(jié)果為假。所以當(dāng)?shù)谝粋€操作數(shù)為假時,不在求解其它操作數(shù)。對于表達式中的“或”

運算而言,只要有一個操作數(shù)為真,則結(jié)果為真。所以當(dāng)?shù)谝粋€操作數(shù)為真時,不在求解其

它操作數(shù)。本題中a>b為假,所以表達式a>b&&++i為假,而++i沒有執(zhí)行。故i為0。答案

為:x:0

i:0

例題8:求解下列各表達式的值(其中x的值為100)?

(1)(a=l,b=2,c=3)

(2)113?5

(3)'a'+3&&!0%l

(4)x%2?"odd"even"

解答:

(ir逗號表達式的值是其最終一個表達式的值。答案為:3。

(2)<<運算符的優(yōu)先級高于|運算符,所以先算3<<5結(jié)果為96(二進制1100000),然后及1

做按位及運算則結(jié)果為97(二進制1100001)。答案為:97o

(3)參及本題的運算符,按優(yōu)先級由高到低依次是:!運算符、算術(shù)運算符、邏輯運算符。

'a+3時字符型首先隱式轉(zhuǎn)換成整型然后相加結(jié)果為100,!0%1即1%1結(jié)果為0,100&&0

結(jié)果為0。答案為:0o

(4)算術(shù)表達式的優(yōu)先級高于條件表達式,所以先算x%2結(jié)果為0,0?”odd":”even"結(jié)

果為“even”。本題完成推斷一個數(shù)是奇數(shù)還是偶數(shù),若該數(shù)為奇數(shù),則表達式的值為"

odd",為偶數(shù),則表達式的值為“even"。答案為:“odd”。

例題9:下列程序運行結(jié)果為:。

#include<iostream.h>

#include<iomanip.h>

voidmain()

(

inta=23;

doubleb=23.123456789;

cout<<a?,\t"<<b<<endl;

cout<<setprecision(0)<<b<<endl;

cout<<setiosflags(ios::fixed)<<setprecision(7)?b<<endl;

cout<<setiosflags(ios::scientific)<<b<<endl;

cout?setprecision(6);

cout<<setiosflags(ios::showbase);

cout<<hex<<a<<,\t><<a<<endl;

cout<<dec;

cout?setw(10)?setfi11(**')<<setiosflags(ios::left)?a<<endl;

cout?setfillC');

)

解答:

本題主要考查對格式化輸入輸出的駕馭。

①本題主函數(shù)中第三行輸出a,b/為轉(zhuǎn)義字符,其含義是跳過一個制表位。不設(shè)置輸

出寬度時,默認(rèn)輸出6位有效數(shù)字,超出部分四舍五入。所以該行輸出為:2323.1235。

②setprecision(n)設(shè)置顯示精度,最少顯示一位有效數(shù)字。假如不重新設(shè)置,則其保持效

力,所以運用完后要還原為6位默認(rèn)值。第四行中設(shè)置setprecision(0)及setprecision(l)

作用相同,結(jié)果顯示一位有效數(shù)字即為:2e+001o

③setiosflags(ios::fixed)為固定的浮點顯示,其后跟setprecision(n)表示小數(shù)點后顯

示精度為n。所以第五行輸出結(jié)果為:23.1234568。

④setiosflags(ios::scientific)為指數(shù)顯示,當(dāng)其整數(shù)部分寬度大于設(shè)置的顯示精度(默

認(rèn)為6位)時,以指數(shù)形式顯示結(jié)果。否則依據(jù)設(shè)置的(或默認(rèn)的)顯示精度顯示n位有效

數(shù)字。所以第六行輸出結(jié)果為:23.12346o

⑤setiosflags(ios::showbase)為指定在數(shù)值前輸出進制。hex置基數(shù)為16,且該操作保

持效力,所以運用完后應(yīng)當(dāng)復(fù)原為默認(rèn)值10進制。第九行輸出結(jié)果為:0x170xl7o

⑥setw(n)設(shè)域?qū)挒閚個字符,setfill(c)設(shè)填充字符為C,setiosflags(ios::left)為左

對齊。第H一行輸出結(jié)果為:23********。

答案為:

2323.1235

2e+001

23.1234568

23.12346

0x170x17

23********

【習(xí)題】

一、選擇題

1.下列數(shù)據(jù)類型不是C++語言基本數(shù)據(jù)類型的是()。

(a)字符型(b)整型(c)浮點型(d)數(shù)組

一、下列字符列中,可作為C++語言程序自定義標(biāo)識符是選擇題

2.

(a)x(b)-var(c)new(d)3i

3.下列數(shù)中哪一個是8進制數(shù)()。

(a)Oxlg(b)010(c)080(d)Olb

4.已知a=l,b=2,c=3,則表達是++a||-b&&++c的值為()。

(a)0(b)l(c)2(d)3

5.下列表達式選項中,()是正確的。

(a)++(a++)(b)a++b(c)a+++b(d)a++++b

6.已知枚舉類型定義語句為:()。

enumcolor(RED,BLUE,PINK=6,YELLOW,GREEN,PURPLE=15};

則下列敘述中錯誤的是()。

(a)枚舉常量RED的值為1(b)枚舉常量BLUE的值為1

(c)枚舉常量YELLOW的值為7(d)枚舉常量PURPLE的值為15

7.下列程序的運行結(jié)果正確的是()。

#include<iostream.h>

#include<iomanip.h>

voidmainO

(

constdoublepi=3.1415926;

cout?setprecision(3)?pi?endl

?setiosflags(ios::fixed)?pi?endl

?setprecision(8)?setfillCX<setw(12)?pi?endl;

return;

)

(a)3.142

3.142

**3.14159260

(b)3.14

3.142

**3.14159260

(c)3.14

3.14

3.14159260**

(d)3.14

3.142

***3.1415926

8.若intx=3,y=5;則表達式x&y++%3的值為()。

(a)0(b)l(c)2(d)3

9.下列常量正確的是()o

(a)whello(b)1FL(c)3.14UL(d)1.8E-3

WorldM

10.若charx=97;,則變量x包含幾個字符()。

(a)l個(b)2個(c)4個(d)8個

—、填空題

1.C++語言標(biāo)示符是以字母或__________開頭的,由字母、數(shù)字、下劃線組成。

2.在C++語言中,char型數(shù)據(jù)在內(nèi)存中的存儲形式是。

3.在內(nèi)存中,存儲字符'x'占用1個字節(jié),存儲字符串“x”要占用個字節(jié)。

4.符號常量可以用宏定義define和表示。

5.轉(zhuǎn)義字符序列中的首字符是o

6.空字符串的長度是

7.表達式cout<<'\n';還可以表示為。

8.若要為unsignedint定義一個新的名字UINT應(yīng)接受的語句是。

9.以下程序不借助第3個變量實現(xiàn)a,b值得交換,請?zhí)羁铡?/p>

#include<iostream.h>

Voidmain()

(

inta,b;

cout<<“輸入a,b:”;

cin?a?b;

a=___a+b;

b=_____a-b

a=(a-b)/2;

cout<<a<<,\t'?b<<endl;

)

10.大多數(shù)C++程序都要包含頭文件。該文件中包含了全部輸入/輸出流操作

所需的基本信息。當(dāng)運用帶參數(shù)的操作時,程序中必需包含頭文件。

三、編程題

1.編寫一個程序,輸入一個三位數(shù),分別輸出該數(shù)的百位、十位和個位。

2.編寫一個程序打印出各種基本數(shù)據(jù)類型、幾個你自己定義的復(fù)合數(shù)據(jù)類型的大小。

運用sizeof運算符。

【參考答案】

一、選擇題

1.d

2.a

3.b

4.b

5.c

6.a

7.b

8.c

9.d

10.a

二、填空題

1.下劃線

2.ASCII

3.2

4.const

5.\

6.0

7.cout?endl;

8.typedefunsignedintUINT;

9.a+ba-ba-b

10.iomanip.hiostream.h

三、編程題

#include<iostream.h>

voidmain()

intnum,varl,var2,var3;

coutvv"請輸入一個三位數(shù):"?endl;

cin?num;

if(num>999||num<100)〃用于檢查輸入數(shù)據(jù)的合法性

cout<<"您的輸入有誤!”《endl;

else

(

varl=num/100;

var2=(num-varl*100)/10;

var3=num%10;

cout?”百位數(shù)為:"?varl?endl

十位數(shù)為:"<<var2vvendl

v<”個位數(shù)為:H?var3?endl;

2.

#include<iostream.h>

#include<iomanip.h>

voidmain()

(

intarray[10];

enummonth{Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec);

char*p;

cout?nThesizeofcharis:H?sizeof(char)?endl

?uThesizeofintis:"?sizeof(int)?endl

?uThesizeofshortintis:u?sizeof(shortint)?endl

?"Thesizeoflongintis:"?sizeof(longint)?endl

?uThesizeoffloatis:M?sizeof(float)?endl

?uThesizeofdoubleis:n?sizeof(double)?endl

?uThesizeoflongdoubleis:"?sizeof(longdouble)?endl

?uThesizeofsignedintis:H?sizeof(int)?endl

?°Thesizeofunsignedintis:M?sizeof(unsigned)?endl

?"Thesizeofarrayis:n?sizeof(array)?endl

?"Thesizeofmonthis:H?sizeof(month)?endl

?uThesizeofpis:"?sizeof(p)?endl;

)

第3章C++程序的流程限制

【內(nèi)容提要】

依次限制語句

選擇限制語句

循環(huán)限制語句

跳轉(zhuǎn)語句

【重點及難點】

3.1依次限制語句

指依據(jù)語句在程序中出現(xiàn)的先后次序一條一條的順次執(zhí)行。包含聲明語句,表達式語句,

輸入輸出語句等。

3.1.1表達式語句

任何一個表達式(上一章中給出了詳細介紹)后面加上一個分號就構(gòu)成了表達式語

句(沒有分號的不是語句)。常見的表達式語句有以下兒種:空語句、賦值語句、函數(shù)調(diào)用

語句等。

1空語句:指只有一個分號而沒有表達式的語句,它不作任何操作和運算。

格式為:;

空語句被用在程序的語法上要求一條語句而邏輯上卻不須要的時候。

小函數(shù)調(diào)用語句:是由函數(shù)調(diào)用表達式加一個語句結(jié)束標(biāo)記(分號“;”)構(gòu)成的語句。

函數(shù)的定義和運用請參見第五章中的詳細介紹。

3.1.2輸入/輸出語句

C++程序沒有輸入/輸出語句,它的輸入/輸出功能由函數(shù)(scanf、printf)或流限

制來實現(xiàn)。printf和scanf是標(biāo)準(zhǔn)的輸入輸出函數(shù),主要在C程序設(shè)計中運用,其聲明包

含在頭文件stdio.h中。在C++中,I/O流完全取代了它們,運用I/O流輸入輸出時,必需

包含頭文件iostream,h。

從鍵盤輸入語句格式為:cin>>表達式1[>>表達式2?-];

向屏幕輸出語句格式為:cout〈〈表達式1[<〈表達式2〈O-];

留意:連續(xù)輸入多項數(shù)據(jù)時應(yīng)鍵入空白字符(包括空格鍵、回車鍵和Tab鍵)將相

鄰的兩項數(shù)據(jù)分開。而連續(xù)輸出時;cout不會在相鄰數(shù)據(jù)項間加分隔符,為了增加顯示效

果,用戶可通過限制符自定義顯示寬度,換行等(部分限制符在iomanip.h頭文件中聲明)。

3.1.3復(fù)合語句

C++語言允許把一組語句用一對花括號括起來,構(gòu)成一個復(fù)合語句。復(fù)合語句被視為

一個獨立的單元它可以出現(xiàn)在程序中任何單個語句可以出現(xiàn)的地方復(fù)合語句不須要用分號

作為結(jié)束。留意空語句;和空復(fù)合語句{}是等價的。

3.2選擇限制語句

針對于不同狀況接受不同的處理方式的問題,用選擇結(jié)構(gòu)來實現(xiàn)。選擇語句包含:

if語句和switch語句。

3.2.1if語句

Qif語句:

格式:if(〈條件表達式〉)〈語句〉

作用:當(dāng)〈條件表達式>為真時,執(zhí)行〈語句〉,否則干脆執(zhí)行if語句后邊的語句。

這里的〈語句》可以是一條語句,也可以是幾條語句,但對于多條語句的狀況必需用{}

將幾條語句括起來構(gòu)成復(fù)合語句,在if語句中當(dāng)做一個整體處理。

1if…else語句:

格式:if(〈條件表達式》)

〈語句1>

else

(語句2>

作用:當(dāng)〈條件表達式>為真時,執(zhí)行〈語句1>;當(dāng)〈條件表達式>為假時,執(zhí)行〈語句2>。

這里〈語句1》和〈語句2>可以是一條語句也可以是復(fù)合語句。

說明:

①if語句有時可以用條件表達式替代。

②if語句支持多種形式的嵌套運用,但一般嵌套層次不超過三層。另外約定else總是

及它上邊最近的一個if配對。為了防止語法或邏輯錯誤的發(fā)生,建議在較困難的情形中運

用花括號區(qū)分。

3.2.2switch語句

格式:switch(〈表達式>){

case〈常量表達式1>:<語句序列1>

case〈常量表達式2>:(語句序列2>

case〈常量表達式n>:<語句序列n>

[default:〈語句序列n+l>]

作用:計算〈表達式》推斷它及哪個〈常量表達式>匹配,執(zhí)行第一個相匹配的〈常量表

達式》后的語句,直到遇到break轉(zhuǎn)去執(zhí)行switch語句以外的語句;假如均不匹配則執(zhí)行

default后定義的語句(在default省略的情形中,干脆執(zhí)行switch語句以外的語句)。

說明:

①switch語句中的〈表達式》的值只能是整型、字符型或枚舉型表達式。

②switch語句中,case和其后的〈常量表達式>間必需有空格否則會產(chǎn)生邏輯錯誤。case

后的〈常量表達式》的值是互不相同的,且它的類型及switch后的〈表達式》的類型一樣。

③通常狀況下,每個case分支語句結(jié)束后都要加一個break語句來結(jié)束switch語句。

但在要表示一個范圍,或描述一類對象時(如A,B,C都屬于合格,D屬于不合格)有可能幾

條case分支語句后才有一個break語句。

?switch語句及嵌套的if語句都可以用于處理多分支選擇的問題。

3.3循環(huán)限制語句

對于同一個語句或同一組語句序列須要重復(fù)多次,則接受循環(huán)結(jié)構(gòu)。C++供應(yīng)了三種循

環(huán)限制語句:while語句,do…while語句,for語句。

3.3.1while語句

格式:while(〈條件表達式〉)

〈語句〉

作用:推斷〈條件表達式》是否為真,若為真則執(zhí)行〈語句〉,然后重復(fù)推斷,直到〈條件

表達式》為假時跳出while循環(huán)執(zhí)行其后的語句。

說明:

①這里的(語句>可以是單條語句也可以是復(fù)合語句。

②當(dāng)〈條件表達式>在循環(huán)起先就不滿足,則不執(zhí)行while循環(huán)也就是說while循環(huán)有可

能一次都不執(zhí)行。

3.3.2do…while語句

格式:do{

〈語句〉

}while(〈條件表達式〉);

作用:當(dāng)流程到達do后,立刻執(zhí)行循環(huán)體語句,然后再對條件表達式進行推斷。若

(條件表達式》的值為真,則重復(fù)執(zhí)行循環(huán)體語句,直到〈條件表達式>為假時退出循環(huán),執(zhí)行

do…while循環(huán)后的語句。

說明:這種循環(huán)中(語句>至少執(zhí)行一次,當(dāng)條件在循環(huán)起先時就不滿足時這種做法

是緊急的,所以應(yīng)盡量運用while語句而避開運用do…while語句。

3.3.3for語句

格式:for(〈表達式1>;〈表達式2>;〈表達式3>)

〈語句〉

作用:〈表達式i>可以稱W初始化表達式,一般用于對循環(huán)變量進行初始化或賦初值;

〈表達式2>可以稱為條件表達式,當(dāng)它的推斷條件為真時,就執(zhí)行循環(huán)體〈語句),否則終止

循環(huán),退出for循環(huán);〈表達式3>可以稱為修正表達式,一般用于在每次循環(huán)體執(zhí)行之后,

對循環(huán)變量進行修改操作。

說明:

①這里的《語句》可以是一條語句也可以是復(fù)合語句。

②for循環(huán)中三個表達式可能省略一個、兩個或三個都省略,但它們之間分號在三種狀

況下都不行以省略。

3.4跳轉(zhuǎn)語句

3.4.1break語句

格式:break;

作用:結(jié)束當(dāng)前正在執(zhí)行的循環(huán)(for、while、do…while)或多路分支(switch)

程序結(jié)構(gòu),轉(zhuǎn)而執(zhí)行這些結(jié)構(gòu)后面的語句。

說明:在循環(huán)結(jié)構(gòu)中運用時,假如有多層循環(huán),只跳出其所在的最近的循環(huán)層。

3.4.2continue語句

格式:continue;

作用:結(jié)束當(dāng)前正在執(zhí)行的這一次循環(huán)(for、while、do…while),接著執(zhí)行下一

次循環(huán)。即跳過循環(huán)體中尚未執(zhí)行的語句,接著進行下一次是否執(zhí)行循環(huán)語句的判定。

【典型例題】

例題1:下列程序的運行結(jié)果為o

#include<iostream.h>

voidmain()

(

charc='@';

if(c>='A'&&c<='Z')cout<<“是大寫字母

elseif(c>='a'&&c<='z')cout<<”是小寫字母”;

elsecout<<”是其它字符“;

}

解答:

本題主要考查if語句的嵌套運用方法。首先推斷字符變量c是否滿足c>='A'&&c<='Z',假

如滿足則輸出“是大寫字母否則推斷c是否滿足c>=N&&c<=2,假如滿足則輸出“是小

寫字母“否則輸出"是其它字符二else總是及離它最近的前一個if配對。

答案為:是其它字符。

例題2:己定義:chargrade;,若成果為A、B、C時輸出合格,成果為D時輸出不合格,

其他狀況提示重新輸入。要完成以上功能,則下列switch語句正確的是()。

(a)switch(grade){

case'A':

case'B':

caseC:coutvv”合格”;break;

case'D':cout<<"不合格";break;

default:cout<<”請重新輸入:”;

)

(b)switch(grade){

case'A':

case'B':

caseC:coutvv”合格";

case儀cout<<"不合格";

default:cout<<”請重新輸入:”;

)

(c)switch(grade){

case'A'JB','C':cout<〈”合格〃;break;

case'D':cout<<“不合格";break;

default:cout<<〃請重新輸入:”;

(d)switch(grade){

caseA:

caseB:

caseC:cout<<"合格”;break;

caseD:cout<<"不合格";break;

default:coutcc”請重新輸入:

)

解答:

本題主要考查switch語句的運用。在switch語句執(zhí)行過程中,找到第一個相匹配的表達式

后,轉(zhuǎn)去執(zhí)行該case后的語句,直到遇到break語句后跳出switch語句執(zhí)行其后的語句。

對于選項b,若grade的值為A則執(zhí)行結(jié)果為“合格不合格請重新輸入”,不滿足本題的要

求;switch語句多個case分支不能簡寫為多個表達式之間用逗號隔開的一個case分支,選

項c錯誤;case后的表達式只能是整型、字符型或枚舉型常量表達式,選項d中case后的

A、B、C、D是變量。答案為:a。

例題3:找出并改正下列程序段中的錯誤:

(1)if(x>0);-------------------①

y=x+l;--------------------②

else;------------------------③

y=x-l;--------------------④

(2)While(i)------------------------------①

{cout?i?endl;---------------②

i-;}-------------------------------③

(3)inti=l,sum;-----------①

while(i<=100)---------②

{sum+=i;----------------(3)

i++;}--------------------④

(4)inti=l,sum=0;--------------------①

do{------------------------------------②

sum+=i;--------------------------③

i++;}while(i<=100)---------④

解答:

本題中包含了初學(xué)者在編程中簡潔犯的一些錯誤,提示讀者留意。

(1)本題考查對if語句的語法結(jié)構(gòu)的駕馭。本題的錯誤在于在if和else后不應(yīng)加分號。答

案為:將①、③句末的分號去掉。

(2)C++是大小寫敏感的語言。答案為:將①中While改為while。

(3)本題目的是完成1到100求和,結(jié)果放在sum中,但是sum在參及運算前應(yīng)當(dāng)首先對其

賦值。答案為:將①改為inti=l,sum=0;

(4)本題主要考查對do…while的語法結(jié)構(gòu)的駕馭以及及while結(jié)構(gòu)進行對比區(qū)分兩者在作

用和語法上的不同。答案為:將第④行while后加分號即while(i<=100);

例題4:循環(huán)語句for(inti=0;i<=5&&!i;i++)cout?i<<endl;執(zhí)行循環(huán)次數(shù)為()。

(a)1次(b)3次(c)5次(d)6次

解答:

本題考查對for循環(huán)的理解以及表達式運算。執(zhí)行for循環(huán)i的初值為0,第一次循環(huán)時表達

式0<=5&&!0結(jié)果為1所以執(zhí)行循環(huán)體輸出0;然后i自加為1,計算表達式1<=5&&!1結(jié)果

為0,所以退出循環(huán)。答案為:a。

例題5:程序段:

inti,sum=0;

for(i=l;i<=100;sum+=i,i++);

及上邊程序段不等價的是()。

(a)intsum=O,i=l;

do{

sum+=i++;

}while(i<=100);

(b)inti=l,sum=O;

while(i<=100)

(

sum+=i++;

)

(c)inti=l,sum=O;

while(1)

(

if(i>100)

break;

sum+=i++;

)

(d)inti,sum=O;

for(i=l;i<=100;i++,sum+=i);

解答:

本著主要考查對各種循環(huán)結(jié)構(gòu)的以及它們之間轉(zhuǎn)換關(guān)系的理解。本

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論