C、C++語言全部關(guān)鍵字解釋_第1頁
C、C++語言全部關(guān)鍵字解釋_第2頁
C、C++語言全部關(guān)鍵字解釋_第3頁
C、C++語言全部關(guān)鍵字解釋_第4頁
C、C++語言全部關(guān)鍵字解釋_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C/C++語言全部關(guān)鍵字解釋

C語言32個(gè)關(guān)鍵字解釋

C語言的關(guān)鍵字共有32個(gè),根據(jù)關(guān)鍵字的作用,可分其為數(shù)據(jù)類型

關(guān)鍵字、控制語句關(guān)鍵字、存儲(chǔ)類型關(guān)鍵字和其它關(guān)鍵字四類。

1數(shù)據(jù)類型關(guān)鍵字(12個(gè)):

(1)char:聲明字符型變量或函數(shù)

(2)double:聲明雙精度變量或函數(shù)

(3)enum:聲明枚舉類型

(4)float:聲明浮點(diǎn)型變量或函數(shù)

(5)int:聲明整型變量或函數(shù)

(6)long:聲明長(zhǎng)整型變量或函數(shù)

(7)short:聲明短整型變量或函數(shù)

(8)signed:聲明有符號(hào)類型變量或函數(shù)

(9)struct:聲明結(jié)構(gòu)體變量或函數(shù)

(10)union:聲明聯(lián)合數(shù)據(jù)類型

(11)unsigned:聲明無符號(hào)類型變量或函數(shù)

(12)void:聲明函數(shù)無返回值或無參數(shù),聲明無類型指針(基本上

就這三個(gè)作用)

(2)控制語句關(guān)鍵字(12個(gè)):

A循環(huán)語句

(1)for:一種循環(huán)語句(可意會(huì)不可言傳)

(2)do:循環(huán)語句的循環(huán)體

(3)while:循環(huán)語句的循環(huán)條件

(4)break:跳出當(dāng)前循環(huán)

(5)continue:結(jié)束當(dāng)前循環(huán),開始下一輪循環(huán)

B條件語句

(Dif:條件語句

(2)else:條件語句否定分支(與if連用)

(3)goto:無條件跳轉(zhuǎn)語句

C開關(guān)語句

(1)switch:用于開關(guān)語句

(2)case:開關(guān)語句分支

(3)default:開關(guān)語句中的“其他”分支

Dreturn:子程序返回語句(可以帶參數(shù),也看不帶參數(shù))

3存儲(chǔ)類型關(guān)鍵字(4個(gè))

(Dauto:聲明自動(dòng)變量一般不使用

(2)extern:聲明變量是在其他文件正聲明(也可以看做是引用變量)

(3)register:聲明積存器變量

(4)static:聲明靜態(tài)變量

4其它關(guān)鍵字(4個(gè)):

(1)const:聲明只讀變量(

2)sizeof:計(jì)算數(shù)據(jù)類型長(zhǎng)度

(3)typedef:用以給數(shù)據(jù)類型取別名(當(dāng)然還有其他作用

(4)volatile:說明變量在程序執(zhí)行中可被隱含地改變

char8

int16

long32

float32

double64

這是占的位數(shù)bit

1Byte=8bit

除以8就是字節(jié)數(shù)byte

C語言32個(gè)關(guān)鍵字解釋([color=Teal]C語言小知識(shí):[/color])

auto:聲明自動(dòng)變量一般不使用

double:聲明雙精度變量或函數(shù)

int:聲明整型變量或函數(shù)

struct:聲明結(jié)構(gòu)體變量或函數(shù)

break:跳出當(dāng)前循環(huán)

else:條件語句否定分支(與if連用)

long:聲明長(zhǎng)整型變量或函數(shù)

switch:用于開關(guān)語句

case:開關(guān)語句分支

enum:聲明枚舉類型

register:聲明積存器變量

typedef:用以給數(shù)據(jù)類型取別名(當(dāng)然還有其他作用)

char:聲明字符型變量或函數(shù)

extern:聲明變量是在其他文件正聲明(也可以看做是引用變量)

return:子程序返回語句(可以帶參數(shù),也看不帶參數(shù))

union:聲明聯(lián)合數(shù)據(jù)類型

const:聲明只讀變量

float:聲明浮點(diǎn)型變量或函數(shù)

short:聲明短整型變量或函數(shù)

unsigned:聲明無符號(hào)類型變量或函數(shù)

continue:結(jié)束當(dāng)前循環(huán),開始下一輪循環(huán)

for:一種循環(huán)語句(可意會(huì)不可言傳)

signed:生命有符號(hào)類型變量或函數(shù)

void:聲明函數(shù)無返回值或無參數(shù),聲明無類型指針(基本上就這

三個(gè)作用)

default:開關(guān)語句中的“其他”分支

goto:無條件跳轉(zhuǎn)語句

sizeof:計(jì)算數(shù)據(jù)類型長(zhǎng)度

volatile:說明變量在程序執(zhí)行中可被隱含地改變

do:循環(huán)語句的循環(huán)體

while:循環(huán)語句的循環(huán)條件

static:聲明靜態(tài)變量

if:條件語句

C++全部關(guān)鍵字說明

(l)auto

這個(gè)這個(gè)關(guān)鍵字用于聲明變量的生存期為自動(dòng),即將不在任

何類、結(jié)構(gòu)、枚舉、聯(lián)合和函數(shù)中定義的變量視為全局變量,而在函

數(shù)中定義的變量視為局部變量。這個(gè)關(guān)鍵字不怎么多寫,因?yàn)樗械?/p>

變量默認(rèn)就是auto的。

(2)register

這個(gè)關(guān)鍵字命令編譯器盡可能的將變量存在CPU內(nèi)部寄存器

中而不是通過內(nèi)存尋址訪問以提高效率。

(3)static

常見的兩種用途:

1》統(tǒng)計(jì)函數(shù)被調(diào)用的次數(shù);

2》減少局部數(shù)組建立和賦值的開銷.變量的建立和賦值是需要一定的

處理器開銷的,特別是數(shù)組等含有較多元素的存儲(chǔ)類型。在一些含有

較多的變量并且被經(jīng)常調(diào)用的函數(shù)中,可以將一些數(shù)組聲明為

static類型,以減少建立或者初始化這些變量的開銷.

詳細(xì)說明:

1>、變量會(huì)被放在程序的全局存儲(chǔ)區(qū)中,這樣可以在下一次調(diào)用的時(shí)

候還可以保持原來的賦值。這一點(diǎn)是它與堆棧變量和堆變量的區(qū)別。

2>、變量用static告知編譯器,自己僅僅在變量的作用范圍內(nèi)可見。

這一點(diǎn)是它與全局變量的區(qū)別。

3>當(dāng)static用來修飾全局變量時(shí),它就改變了全局變量的作用域,

使其不能被別的程序extern,限制在了當(dāng)前文件里,但是沒有改變

其存放位置,還是在全局靜態(tài)儲(chǔ)存區(qū)。

使用注意:

1>若全局變量?jī)H在單個(gè)C文件中訪問,則可以將這個(gè)變量修改為靜態(tài)

全局變量,以降低模塊間的耦合度;

2》若全局變量?jī)H由單個(gè)函數(shù)訪問,則可以將這個(gè)變量改為該函數(shù)的靜

態(tài)局部變量,以降低模塊間的耦合度;

3》設(shè)計(jì)和使用訪問動(dòng)態(tài)全局變量、靜態(tài)全局變量、靜態(tài)局部變量的函

數(shù)時(shí),需要考慮重入問題(只要輸入數(shù)據(jù)相同就應(yīng)產(chǎn)生相同的輸出)

(4)const被const修飾的東西都受到強(qiáng)制保護(hù),可以預(yù)防意外的

變動(dòng),能提高程序的健壯性。它可以修飾函數(shù)的參數(shù)、返回值,甚至

函數(shù)的定義體。

作用:

1》修飾輸入?yún)?shù)

a.對(duì)于非內(nèi)部數(shù)據(jù)類型的輸入?yún)?shù),應(yīng)該將“值傳遞”的方式改為

"const引用傳遞”,目的是提高效率。例如將voidFunc(Aa)改

為voidFunc(constA&a)。

b.對(duì)于內(nèi)部數(shù)據(jù)類型的輸入?yún)?shù),不要將“值傳遞”的方式改為

“const引用傳遞”。否則既達(dá)不到提高效率的目的,又降低了函數(shù)

的可理解性。例如voidFunc(intx)不應(yīng)該改為voidFunc(const

int&x)o

2>用const修飾函數(shù)的返回值

a.如果給以“指針傳遞”方式的函數(shù)返回值加const修飾那么函數(shù)

返回值(即指針)的內(nèi)容不能被修改,該返回值只能被賦給加const

修飾的同類型指針。

如對(duì)于:constchar*GetString(void);

如下語句將出現(xiàn)編譯錯(cuò)誤:

char*str=GetString();//cannotconvertfrom'constchar*'

to'char*';

正確的用法是:

constchar*str=GetString();

b.如果函數(shù)返回值采用“值傳遞方式”,由于函數(shù)會(huì)把返回值復(fù)制到

外部臨時(shí)的存儲(chǔ)單元中,加const修飾沒有任何價(jià)值。如不要把函

數(shù)intGetlnt(void)寫成constintGetlnt(void)o

3>const成員函數(shù)的聲明中,const關(guān)鍵字只能放在函數(shù)聲明的尾部,

表示該類成員不修改對(duì)象.

說明:

consttypem;〃修飾m為不可改變

示例:

typedefchar*pStr;〃新的類型pStr;

charstring[4]="abc";

constchar*pl=string;

pl++;〃正確,上邊修飾的是*pl,pl可變

constpStrp2=string;

p2++;〃錯(cuò)誤,上邊修飾的是p2,p2不可變,*p2可變

同理,const修飾指針時(shí)用此原則判斷就不會(huì)混淆了。

constint*value;〃*value不可變,value可

int*constvalue;〃value不可變,*value可變

const(int*)value;//(int*)是一種type,value不可變,*value

可變

〃邏輯上這樣理解,編譯不能通過,需要tydefint*NewType;

constint*constvalue;〃*value,value都不可變

(5)volatile

表明某個(gè)變量的值可能在外部被改變,優(yōu)化器在用到這個(gè)變

量時(shí)必須每次都小心地重新讀取這個(gè)變量的值而不是使用保存在寄

存器里的備份。它可以適用于基礎(chǔ)類型如:int,char,long.....也

適用于C的結(jié)構(gòu)和C++的類。當(dāng)對(duì)結(jié)構(gòu)或者類對(duì)象使用volatile修

飾的時(shí)候,結(jié)構(gòu)或者類的所有成員都會(huì)被視為volatile.

該關(guān)鍵字在多線程環(huán)境下經(jīng)常使用,因?yàn)樵诰帉懚嗑€程的程序時(shí),同

一個(gè)變量可能被多個(gè)線程修改,而程序通過該變量同步各個(gè)線程。

簡(jiǎn)單示例:

DWORD_stdcallthreadFunc(LPVOIDsignal)

int*intSignal=reinterpret_cast(signal);

*intSignal=2;

while(*intSignal!=1)

sleep(1000);

return0;

)

該線程啟動(dòng)時(shí)將intSignal置為2然后循環(huán)等待直到intSignal為

1時(shí)退出。顯然intSignal的值必須在外部被改變,否則該線程不會(huì)

退出。但是實(shí)際運(yùn)行的時(shí)候該線程卻不會(huì)退出,即使在外部將它的值

改為L(zhǎng)看一下對(duì)應(yīng)的偽匯編代碼就明白了:

movax,signal

label:

if(ax!=l)

gotolabel

對(duì)于C編譯器來說,它并不知道這個(gè)值會(huì)被其他線程修改。自然就把

它c(diǎn)ache在寄存器里面。C編譯器是沒有線程概念的,這時(shí)候就需要

用到volatile。volatile的本意是指:這個(gè)值可能會(huì)在當(dāng)前線程外

部被改變。也就是說,我們要在threadFunc中的intSignal前面加

上volatile關(guān)鍵字,這時(shí)候編譯器知道該變量的值會(huì)在外部改變,

因此每次訪問該變量時(shí)會(huì)重新讀取,所作的循環(huán)變?yōu)槿缦旅鎮(zhèn)未a所

示:

label:

movax,signal

if(ax!=l)

gotolabel

注意:一個(gè)參數(shù)既可以是const同時(shí)是volatile,是

volatile因?yàn)樗赡鼙灰庀氩坏降馗淖儭K莄onst因?yàn)槌绦虿粦?yīng)

該試圖去修改它。

(6)externextern意為"外來的”?,?它的作用在于告訴編譯

器:有這個(gè)變量,它可能不存在當(dāng)前的文件中,但它肯定要存在于工

程中的某一個(gè)源文件中或者一個(gè)D11的輸出中。C++關(guān)鍵字(不同于

c的關(guān)鍵字)

1.C++包含的類型:

booltruefalse

2.類型聲明所用到的關(guān)鍵字

class

public

private

protected

friend

mutable

explicit

this

3.虛擬與多態(tài)以及rtti

virtual

typeidO

static_cast<>()

dynamic_cast<>()

reinterpret_cast<>()

4.泛型編程相關(guān)

templateO

typename

5.全局函數(shù)和成員函數(shù)相關(guān)

inline

6.堆管理

new

delete

7.異常處理

try{}

catch(){}

throw()

[編輯本段]電腦語言用語

關(guān)鍵字是用來標(biāo)識(shí)文件中各個(gè)記錄的特定數(shù)據(jù)項(xiàng)目的值。

關(guān)鍵字是電腦語言里事先定義的,有特別意義的標(biāo)識(shí)符,有

時(shí)又叫保留字。系統(tǒng)定義了以下關(guān)鍵字:

Const(常數(shù))Dim(定義)As(為)Mod(取模)

And(并且)Or(或者)Not(非)

If(如果)Then(那么)Else(否則)

Stop(停止)End(結(jié)束)

Select(選擇)Case(條件)Is(是)

For(計(jì)數(shù))To(到)Step(步長(zhǎng))

Byref(傳址)Byval(傳值)

Sub(子程序)Function(函數(shù))Exit(退出)

Do(做)Loop(循環(huán))Until(除非)While(當(dāng))Wend(當(dāng)結(jié)束)

Let(讓)Call(調(diào)用)

Rem(注釋)

Integer(整數(shù))Long(長(zhǎng)整數(shù))Single(單精度小數(shù))

Double(雙精度,小數(shù))Boolean(布爾)String(字符串,文字)

Me(我)Private(私有)Public(公共)

注意:vb里名稱與關(guān)鍵字不區(qū)分字母的大小寫;在c語言

里,一切都是小寫字母

C,C++,java語言關(guān)鍵字調(diào)查統(tǒng)計(jì):

C,C++,JAVA

共有的關(guān)鍵字—22個(gè)

intcharfloatdoubleshortlong

ifelse

switchcasedefault

forwhiledo

voidreturn

continuebreak

constgoto(JAVA中未用,但是保留字)

volatilestatic

C和C++

共有的關(guān)鍵字(除三者共有)一一10個(gè)

unsignedsigned

structenumunion

autoregisterextern

sizeoftypedef

C++和JAVA共有的關(guān)鍵字—11個(gè)(9個(gè))

classnewpublicprivateprotectedthistrythrowcatch

(truefalse)

C+嘯有的關(guān)鍵字(除JAVA和其共有的)一一20個(gè)

asmboolexplicitexportfriendinlinemutable

operatortemplate

typeidvirtualwarch_tdeletenamespacetypenameusing

const_castdynamic_castreinterpret_caststatic_cast

JAVA特有的關(guān)鍵字(除C++和其共有的)一一17個(gè)

abstractbooleanbyteextendsfinalfinallyimplements

importinstanceofinterface

nativepackagesupersynchronizedthrowstransient

strictfp

null(僅在java用,類似true和false不是關(guān)鍵字)

所以說:

C有22+10=32個(gè)關(guān)鍵字

C++有22+10+11+20=63個(gè)關(guān)鍵字

JAVA有22+9+17=48個(gè)關(guān)鍵字

C++關(guān)鍵字詳細(xì)解釋

autobreakcasechatclassconst

continuedefaultdeletedodoubleelse

enumexplicitexternfloatforfiend

gotoifinlineintlongmutable

newoperatorprivateprotectedpublicregister

returnshortsignedsizeofstaticstatic_cast

structswitchthistypedefunionunsigned

virtualviodwhile

C++語言關(guān)鍵字

asmdoifreturntry

autodoubleinlineshorttypedef

booldynamic_castintsignedtypeid

breakelselongsizeoftypename

caseenummutablestaticunion

catchexplicitnamespacestatic_castunsigned

charexportnewstructusing

classexternoperatorswitchvirtual

constfalseprivatetemplatevoid

const_castflostprotectedthisvolatile

continueforpublicthrowwchar_t

defaultfriendregistertruewhile

deletegotoreinterpret_

cast

關(guān)鍵字是預(yù)先保留的標(biāo)識(shí)符,每個(gè)關(guān)鍵字都有特殊的含義。我們

不能在程序中使用與關(guān)鍵字同名的標(biāo)識(shí)符。以下是C++所保留的關(guān)

鍵字全集。

(l)asm

asm已經(jīng)被_asm替代了,用于匯編語言嵌入在C/C++程序里編程,從

而在某些方面優(yōu)化代碼.雖然用asm關(guān)鍵字編譯時(shí)編譯器不會(huì)報(bào)錯(cuò),

但是asm模塊的代碼是沒有意義的.

(2)auto

這個(gè)這個(gè)關(guān)鍵字用于聲明變量的生存期為自動(dòng),即將不在任何類、結(jié)

構(gòu)、枚舉、聯(lián)合和函數(shù)中定義的變量視為全局變量,而在函數(shù)中定義

的變量視為局部變量。這個(gè)關(guān)鍵字不怎么多寫,因?yàn)樗械淖兞磕J(rèn)

就是

auto的。

(3)bad_cast,const_cast,dynamic_cast,reinterpret_cast,st

aticcast

(4)bad_typeid

也是用于異常處理的,當(dāng)typeid操作符的操作數(shù)typeid為Null指針

時(shí)拋出。

(5)bool

不用多說了吧,聲明布爾類型的變量或函數(shù).

(6)break

跳出當(dāng)前循環(huán).

(7)case

switch語句分支.

(8)catch,throw,try

都是異常處理的語句。

(9)char

聲明字符型變量或函數(shù).

(10)class

聲明或定義類或者類的對(duì)象.

(11)const

被const修飾的東西都受到強(qiáng)制保護(hù),可以預(yù)防意外的變動(dòng),能提高

程序的健壯性>它可以修飾函數(shù)的參數(shù)返回值甚至函數(shù)的定義體

作用:

1.修飾輸入?yún)?shù)

a.對(duì)于非內(nèi)部數(shù)據(jù)類型的輸入?yún)?shù)應(yīng)該將“值傳遞”的方式

改為“const引用傳遞”,目的是提

高效率。例如將voidFunc(Aa)改為voidFunc(constA&a)。

b.對(duì)于內(nèi)部數(shù)據(jù)類型的輸入?yún)?shù)不要將“值傳遞”的方式改

為“const引用傳遞”。否則既達(dá)不

到提高效率的目的,又降低了函數(shù)的可理解性。例如void

Func(intx)不應(yīng)該改為voidFunc(constint

&x)o

2.用const修飾函數(shù)的返回值

a.如果給以“指針傳遞”方式的函數(shù)返回值加const修飾那

么函數(shù)返回值(即指針)的內(nèi)容不能

被修改,該返回值只能被賦給加const修飾的同類型指針。

如對(duì)于:constchar*GetString(void);

如下語句將出現(xiàn)編譯錯(cuò)誤:

char*str=GetString();//cannotconvertfrom'constchar*'

to'char*';

正確的用法是:

constchar*str=GetString();

b.如果函數(shù)返回值采用“值傳遞方式”,由于函數(shù)會(huì)把返回值

復(fù)制到外部臨時(shí)的存儲(chǔ)單元中,加

const修飾沒有任何價(jià)值。如不要把函數(shù)intGetlnt(void)寫

成constintGetlnt(void)o

3.const成員函數(shù)的聲明中,const關(guān)鍵字只能放在函數(shù)聲明的尾部,

表示該類成員不修改對(duì)象.

說明:

consttypem;〃修飾m為不可改變

示例:

typedefchar*pStr;〃新的類型pStr;

charstring[4]="abc";

constchar*pl=string;

pl++;〃正確,上邊修飾的是*pl,pl可變

constpStrp2=string;

p2++;〃錯(cuò)誤,上邊修飾的

是p2,p2不可變,*p2可變

同理,const修飾指針時(shí)用此原則判斷就不會(huì)混淆了。

constint*value;〃*value不可變,value可變

int*constvalue;〃value不可變,*value可變

const(int*)value;//(int*)是一種type,value不可變,*value

可變

〃邏輯上這樣理解,編譯不能通過,需要tydefint*NewType;

constint*constvalue;〃*value,value都不可變

(12)continue

結(jié)束當(dāng)前循環(huán),開始下一輪循環(huán).

(13)default

switch語句中的默認(rèn)分支.

(14)delete

經(jīng)常用于動(dòng)態(tài)內(nèi)存分配的語句。

(15)do

在do-while循環(huán)結(jié)構(gòu)中開始循環(huán)體。

(16)double

聲明雙精度變量或函數(shù).

(17)else

條件語句否定分支(與if連用).

(18)enum

聲明枚舉類型.

(19)explicit

這個(gè)關(guān)鍵字聲明說明符,可以只適用于同類構(gòu)造函數(shù)聲明。顯式

構(gòu)造函數(shù)不能在隱式轉(zhuǎn)換的一部分。它只能用于顯式構(gòu)造一個(gè)對(duì)象。

(20)export

MSDN只說Theexportkeywordisnotsupportedontemplates.

一種導(dǎo)出語句吧..

(21)extern

(22)false,true

bool類型的兩個(gè)枚舉值.

(23)float

聲明浮點(diǎn)型變量或函數(shù).

(24)for

一種循環(huán)語句。

(25)friend

聲明友元函數(shù)或者類。

(26)goto

無條件跳轉(zhuǎn)語句。

(27)if

條件語句。常與else一起用。

(28)inline

聲明定義內(nèi)聯(lián)函數(shù),編譯時(shí)將所調(diào)用的代碼嵌入到主函數(shù)中。

(29)int

聲明整型變量或函數(shù).

(30)long

聲明長(zhǎng)整型變量或函數(shù).

(31)mutable

這個(gè)關(guān)鍵字只適用于非靜態(tài)和非const數(shù)據(jù)類成員。如果一個(gè)聲明數(shù)

據(jù)成員是可變的,那么它在const成員函數(shù)的賦值是合法。

(32)namespace

動(dòng)態(tài)導(dǎo)入到文檔中的元素行為

C++中usingnamespacestd

(33)new

動(dòng)態(tài)內(nèi)存分配。返回一個(gè)適當(dāng)類型、非零對(duì)象的指針

(34)operator

(35-37)private,protected,public

類私有/保護(hù)/公有函數(shù)和數(shù)據(jù)成員的標(biāo)示.

(38)register

聲明寄存器變量.

(39)return

子程序返回語句(可以帶參數(shù),也看不帶參數(shù)),返回函數(shù)調(diào)用點(diǎn)。

(40)short

聲明短整型變量或函數(shù).

(41)signed,unsigned

聲明有符號(hào)類型變量或函數(shù);聲明無符號(hào)類型變量或函數(shù).

(42)static

聲明靜態(tài)變量.

(43)struct

聲明結(jié)構(gòu)體變量或函數(shù).

(44)switch

條件選擇

(45)template

模板.

(46)this

訪問類,結(jié)構(gòu)或者聯(lián)合的非靜態(tài)成員函數(shù)。

(47)typedef

用以給數(shù)據(jù)類型取別名.

(48)typeid

用于獲取一個(gè)在編譯時(shí)類型的類型

(49)typename

僅在模板中使用,告訴編譯器是一個(gè)未知的type。

(50)union

聲明聯(lián)合數(shù)據(jù)類型.

(51)using

(52)virtual

聲明虛基類或虛函數(shù)。

(53)void

聲明函數(shù)無返回值或無參數(shù),聲明無類型指針.

(54)volatile

(55)wchar_t

寬字.

(56)while

循環(huán)語句的循環(huán)條件

(57)class

C++語言中const關(guān)鍵字的詳細(xì)使用解釋

生中的const關(guān)鍵字的用法非常靈活,而使用const將大大改善程

序的健壯性,本人根據(jù)各方面查到的資料進(jìn)行總結(jié)如下,期望對(duì)朋友

們有所幫助。

Const是空中常用的類型修飾符,常類型是指使用類型修

飾符const說明的類型,常類型的變量或?qū)ο蟮闹凳遣荒鼙桓碌摹?/p>

一、Const作用

如下表所示:

No.

作用

說明

參考代碼

1可以定義const常量

constintMax=100;

2便于進(jìn)行類型檢查

const常量有數(shù)據(jù)類型,而宏常量沒有數(shù)據(jù)類型。編譯器可

以對(duì)前者進(jìn)行類型安全檢查,而對(duì)后者只進(jìn)行字符替換,沒有類型安

全檢查,并且在字符替換時(shí)可能會(huì)產(chǎn)生意料不到的錯(cuò)誤

voidf(constinti){........}

〃對(duì)傳入的參數(shù)進(jìn)行類型檢查,不匹配進(jìn)行提示

3可以保護(hù)被修飾的東西

防止意外的修改,增強(qiáng)程序的健壯性。

voidf(constinti){i=10;//error!}

〃如果在函數(shù)體內(nèi)修改了i,編譯器就會(huì)報(bào)錯(cuò)

4可以很方便地進(jìn)行參數(shù)的調(diào)整和修改

同宏定義一樣,可以做到不變則已,一變都變

5為函數(shù)重載提供了一個(gè)參考

classA

voidf(inti).....)〃一個(gè)函數(shù)

voidf(inti)const{......}〃上一個(gè)函數(shù)的重載

};

6可以節(jié)省空間,避免不必要的內(nèi)存分配

const定義常量從匯編的角度來看,只是給出了對(duì)應(yīng)的內(nèi)存

地址,而不是象#(16支便一樣給出的是立即數(shù),所以,const定義的

常量在程序運(yùn)行過程中只有一份拷貝,而#(16支加定義的常量在內(nèi)存

中有若干個(gè)拷貝

#definePI3.14159〃常量宏

constdoulbePi=3.14159;〃此時(shí)并未將Pi放入ROM中

doublei=Pi;〃此時(shí)為Pi分配內(nèi)存,以后不再分配!

doubleI=PI;〃編譯期間進(jìn)行宏替換,分配內(nèi)存

doublej=Pi;〃沒有內(nèi)存分配

doubleJ=PI;〃再進(jìn)行宏替換,又一次分配內(nèi)存!

7提高了效率

編譯器通常不為普通const常量分配存儲(chǔ)空間,而是將它們

保存在符號(hào)表中,這使得它成為一個(gè)編譯期間的常量,沒有了存儲(chǔ)與

讀內(nèi)存的操作,使得它的效率也很高

二、Const的使用

1、定義常量

(1)const修飾變量,以下兩種定義形式在本質(zhì)上是一樣的。

它的含義是:const修飾的類型為TYPE的變量value是不可變的。

TYPEconstValueName=value;

constTYPEValueName=value;

(2)將const改為外部連接,作用于擴(kuò)大至全局,編譯時(shí)會(huì)分

配內(nèi)存,并且可以不進(jìn)行初始化,僅僅作為聲明,編譯器認(rèn)為在程序其

他地方進(jìn)行了定義.

extendconstintValueName=value;

2、指針使用CONST

(1)指針本身是常量不可變

(char*)constpContent;

const(char*)pContent;

(2)指針?biāo)赶虻膬?nèi)容是常量不可變

const(char)*pContent;

(char)const*pContent;

(3)兩者都不可變

constchar*constpContent;

(4)還有其中區(qū)別方法,沿著*號(hào)劃一條線:

如果const位于*的左側(cè),則const就是用來修飾指針?biāo)?/p>

向的變量,即指針指向?yàn)槌A浚?/p>

如果const位于*的右側(cè),const就是修飾指針本身,即指針

本身是常量。

3、函數(shù)中使用CONST

(1)const修飾函數(shù)參數(shù)

a.傳遞過來的參數(shù)在函數(shù)內(nèi)不可以改變(無意義,因?yàn)閂ar

本身就是形參)

voidfunction(constintVar);

b.參數(shù)指針?biāo)竷?nèi)容為常量不可變

voidfunction(constchar*Var);

c.參數(shù)指針本身為常量不可變(也無意義,因?yàn)閏har*Var

也是形參)

voidfunction(char*constVar);

d.參數(shù)為引用,為了增加效率同時(shí)防止修改。修飾引用參數(shù)

時(shí):

voidfunction(constClass&Var);〃引用參數(shù)在函數(shù)內(nèi)

不可以改變

voidfunction(constTYPE&Var);〃引用參數(shù)在函數(shù)內(nèi)為

常量不可變

這樣的一個(gè)const引用傳遞和最普通的函數(shù)按值傳遞的效果

是一模一樣的,他禁止對(duì)引用的對(duì)象的一切修改,唯一不同的是按值

傳遞會(huì)先建立一個(gè)類對(duì)象的副本,然后傳遞過去,而它直接傳遞地址,

所以這種傳遞比按值傳遞更有效.另外只有引用的const傳遞可以傳

遞一個(gè)臨時(shí)對(duì)象,因?yàn)榕R時(shí)對(duì)象都是const屬性,且是不可見的,他

短時(shí)間存在一個(gè)局部域中,所以不能使用指針,只有引用的const傳

遞能夠捕捉到這個(gè)家伙.

(2)const修飾函數(shù)返回值

const修飾函數(shù)返回值其實(shí)用的并不是很多,它的含義和

const修飾普通變量以及指針的含義基本相同。

a.constintfunl()〃這個(gè)其實(shí)無意義,因?yàn)閰?shù)返回本

身就是賦值。

b.constint*fun2()〃調(diào)用時(shí)constint*pValue=

fun2();

〃我們可以把fun2()看作成一個(gè)變量,即指針內(nèi)容不可變。

*constfun3()〃調(diào)用時(shí)int*constpValue=

fun2();

〃我們可以把fun2()看作成一個(gè)變量,即指針本身不可變。

一般情況下,函數(shù)的返回值為某個(gè)對(duì)象時(shí),如果將其聲明為

const時(shí),多用于操作符的重載。通常,不建議用const修飾函數(shù)的

返回值類型為某個(gè)對(duì)象或?qū)δ硞€(gè)對(duì)象引用的情況。原因如下:如果返

回值為某個(gè)對(duì)象為const(constAtest=A實(shí)例)或某個(gè)對(duì)象的

引用為const(constA&test=A實(shí)例),則返回值具有const

屬性,則返回實(shí)例只能訪問類A中的公有(保護(hù))數(shù)據(jù)成員和const

成員函數(shù)并且不允許對(duì)其進(jìn)行賦值操作這在一般情況下很少用到>

4、類相關(guān)CONST

(1)const修飾成員變量

const修飾類的成員函數(shù),表示成員常量,不能被修改,同

時(shí)它只能在初始化列表中賦值。

classA

constintnValue;〃成員常量不能被修改

A(intx):nValue(x){};〃只能在初始化列表中賦值

)

(2)const修飾成員函數(shù)

const修飾類的成員函數(shù),則該成員函數(shù)不能修改類中任何

非const成員函數(shù)。一般寫在函數(shù)的最后來修飾。

classA

(

???

voidfunction。const;〃常成員函數(shù),它不改變對(duì)象的成

員變量.

〃也不能調(diào)用類中任何非const成員函數(shù)。

}

對(duì)于const類對(duì)象/指針/引用,只能調(diào)用類的const成員函

數(shù),因此,const修飾成員函數(shù)的最重要作用就是限制對(duì)于const對(duì)

象的使用。

a.const成員函數(shù)不被允許修改它所在對(duì)象的任何一個(gè)數(shù)

據(jù)成員。

b.const成員函數(shù)能夠訪問對(duì)象的const成員,而其他成員

函數(shù)不可以。

(3)const修飾類對(duì)象/對(duì)象指針/對(duì)象引用

?const修飾類對(duì)象表示該對(duì)象為常量對(duì)

象,其中的任何成員都不能被修改。對(duì)于對(duì)象指針和對(duì)象引用也是一

樣。

,const修飾的對(duì)象,該對(duì)象的任何非const

成員函數(shù)都不能被調(diào)用,因?yàn)槿魏畏莄onst成員函數(shù)會(huì)有修改成員變

量的企圖。

例如:

classAAA

(

voidfund();

voidfunc2()const;

)

constAAAaObj;

aObj.fund();X

aObj.func2();正確

constAAA*aObj=newAAA();

aObj->fund();X

aObj->func2();正確

三、將Const類型轉(zhuǎn)化為非Const類型的方法

采用const_cast進(jìn)行轉(zhuǎn)換。

用法:const_cast<type_id>(expression)

該運(yùn)算符用來修改類型的const或volatile屬性。除了

const或volatile修飾之外,type_id和expression的類型是一

樣的。

?常量指針被轉(zhuǎn)化成非常量指針,并且仍然

指向原來的對(duì)象;

?常量引用被轉(zhuǎn)換成非常量引用,并且仍然

指向原來的對(duì)象;

-常量對(duì)象被轉(zhuǎn)換成非常量對(duì)象。

C++經(jīng)典語句(一)

1.1.2求兩個(gè)數(shù)的和

程序如下:

#include<iostream.h>

voidmain()

inta,b,sum;//定義了三個(gè)整型變量

a=43;//把整數(shù)常量賦給變量a

b=37;

sum=a+b;//a與b相加的和賦給變量sum

cout?*Thesumis/z?sum;

cout?endl;//endl是回車換行的作用

}

程序運(yùn)行結(jié)果如下:

Thissumis80

1.1.3計(jì)算圓面積

#include<iostream.h>

voidmain()

(

constfloatpai=3.14;//用const說明了一個(gè)float型常量pai,m

由于pai是常量,所以在

//程序中這個(gè)值不會(huì)被改變

floatradius;//說明了一個(gè)float型變量radius,用于存放半徑

cout?*Enterradius:

cin?radius;//cin為iosream.h中說明的文件,作用為接收鍵

盤輸入。如此

//時(shí)從鍵盤輸入一個(gè)數(shù)2.5,就把輸入的這個(gè)值送入變量radius,

floatarea=pai*radius*radius;//說明了一個(gè)float型常量

area,用于存放計(jì)算后的面積

cout<〈”\nTheareaofcircleis:

cout?area?endl;//輸出面積

程序運(yùn)行結(jié)果如下:

Enterradius:2.5

Theareaofcircleis19.625

說明:這個(gè)程序相對(duì)于progam1_2有一個(gè)明顯的優(yōu)點(diǎn),就是它

的輸入數(shù)據(jù)不必在編程時(shí)確定而是在運(yùn)行時(shí)由操作者直接從鍵盤輸

入。

上面的程序稱為簡(jiǎn)單程序。直觀上看,它們都很短,進(jìn)一步

分析發(fā)現(xiàn)它們有兩個(gè)特點(diǎn):

1)程序要做的事情是由程序員在編程時(shí)就安排好了的是固定不

變的。

2)程序要做幾個(gè)動(dòng)作也是由程序員在編程時(shí)安排好的程序?qū)嶋H

上是一個(gè)簡(jiǎn)單的命令序列。

下面的程序有了“判斷”的能力。此程序用于溫度值(撮氏與華

氏溫度)的換算,輸入溫度值并指出該值是播氏。還是華氏(F)溫

度,然后程序根據(jù)不同的輸入(撮氏或華氏)進(jìn)行不同的換算。

2.1按條件進(jìn)行判斷

#include<iostream.h>

voidmain()

(

floatt,tc,tf;

charcorf;

constfloatfac=l.8,inc=32;

cout?/zEntertemperature:

cin?t;//輸入溫度值

cin?corf;//指出是撮氏(C)或華氏(F)

if(corf==,ccorf=,C')

(

tc=t;

tf=t*fac+inc;

}

else

if(corf=='F'corf='f')

(

tf=t;

tc=(t-inc)/fac;

elsetc=tf=0.0;

cout?endl?z,Thetemperatureis:

cout〈〈tc?"C="<<tf<X"F\n";

)

程序運(yùn)行結(jié)果如下:

Entertemperature:40.2C

Thetemperatureis40.2C=104.36F

下面是使用switch(開關(guān))語句的程序。switch提供了多分

支選擇的方法。

5.2簡(jiǎn)單的計(jì)算器程序

這個(gè)程序完成的功能是:輸入兩個(gè)數(shù),然后輸入運(yùn)算符,在屏幕

上顯示運(yùn)算結(jié)果。

程序運(yùn)行結(jié)果如下:

#include<iostream.h>

voidmain()

(

intx,y;

charop;

cout?*firstinteger:

cin?x;

cout?endl?*Secondinteger:

cin?y;

cout?endl?z,operator(+,*,/,%):";

cin?op;

switch(op)//switch開關(guān)分支語句從這里開始,根據(jù)表達(dá)式的值

分支

(

case'://如果op=='+'

cout<<endl<<x<<"+"<<y<<"="<<x+y;

break;//執(zhí)行完畢,退出switch分支。下面的break語句的作用

相同

case://如果op=='-'

cout<<endl〈<xW<<y<<"="<<x-y;

break;

case'://如果op=='*'

cout?endl?x?**z,?y?z,=z,?x*y;

break;

case7’:〃如果op—5/'

cout?endl?x?z,/>z?y?z,=z,?x/y;

break;

case'://如果op=='%'

cout<<endl<<x<<"%"<<y<〈"="<〈x%y;

break;

default:

cout?endl?z,Wrong!”;

)

)

程序運(yùn)行結(jié)果如下:

firstinteger:12

secondinteger:7

operator(+,*,/,%):*

12*7=84

上面的這個(gè)程序可以由用戶任意輸入兩個(gè)整數(shù)及運(yùn)算符,完

成指定的運(yùn)算,但是它的不便之處是當(dāng)有多次運(yùn)算要進(jìn)行時(shí),每算完

一次必須重新啟動(dòng)程序。下面的程序使用循環(huán)控制語句,使得程序可

以進(jìn)行多次運(yùn)算?!╬rogram2_5.cpp

#include<iostream.h>

voidmain()

(

intx,y,quit=l;

charop,cont;

while(quit)//whiel循環(huán)語句,括號(hào)里面是一個(gè)表達(dá)式,稱為控

制表達(dá)式。當(dāng)這個(gè)表

{//達(dá)式的值為1時(shí)繼續(xù)循環(huán)體內(nèi)的代碼。從這個(gè)大括號(hào)開始,進(jìn)

入循環(huán)體。

cin?x;

cin?y;

cin?op;

switch(op)

(

case'+':

cout?endl<<x<<"+”<<y〈<"="<<x+y;

break;

case'-':

cout?endl?x?z,->z?y?*=z,?x-y;

break;

case'*':

cout<<endl<<x<<"*"<〈y<〈"="<G*y;

break;

case'/':

if(y=0)cout?endl?*Overflow!*;//判斷y是否為0,避免除

0錯(cuò)誤。

else

cout<<endl<<x<〈"/"<<y<〈"="<<x/y;

break;

case':

if(y—0)cout?endl?>zOverflow!*;〃判斷y是否為0,避免除

0錯(cuò)誤。

elsecout?endl?x?*%*?y?*=*?x%y;

break;

default:

cout?endl?A,Wrong!";

break;

)

cout〈<endl〈〈“Doyouwanttocontinue?(yorn)”;

cin?cont;

if(cont=,n)quit=0;//當(dāng)操作者輸入字符'n'時(shí),由于quit被

賦值0。

//當(dāng)再次檢測(cè)while表達(dá)式時(shí),由于quit為0,所以退出while循

環(huán)。

)

)

這個(gè)程序所做出的改進(jìn)是很明顯的,只要在每次完成一次計(jì)

算后,用戶回答是否繼續(xù)時(shí)按下'y'鍵(或除'n'之外的任何字符),就

可以連續(xù)運(yùn)行,完成用戶指定的四則運(yùn)算,直到接收到字母'n'為止。

在循環(huán)體內(nèi)必須有改變while表達(dá)式值的語句否則一旦進(jìn)入死循環(huán)

就無法跳出,這種情形稱為“死循環(huán)”,編程中應(yīng)注意避免。

2.3計(jì)算e的值和求素?cái)?shù)

e是自然對(duì)數(shù)的底它和n一樣是數(shù)學(xué)中最常用的無理數(shù)常量。

其近似值的計(jì)算公式為:

e=l+l/l!+l/2!+l/3!+...+l/(n-l)!+r

當(dāng)n充分大時(shí),這個(gè)公式可以計(jì)算任意精度e的近似值。為了保

證誤差r<e,只需l/(n-l)!(>r)<e

程序代碼如下:

#include<iostream.h>

voidmainO

(

constdoubleeps=0.Ie-10;

intn=l;

floate=l.0,r=l.0;

do//開始do循環(huán)。循環(huán)條件由后面的while中的表達(dá)式值確定。

(

e+=r;

n++;

r/=n;

}

while(r>eps);

cout?*TheapproximateValueofnaturallogarithmbaseis:

cout?e?endl;

)

程序運(yùn)行結(jié)果如下:

TheapproximateValueofnaturallogarithmbaseis:

2.71828

說明:

上面這個(gè)程序中使用了do循環(huán),它是循環(huán)控制中的一種。循環(huán)

控制條件放在后面的while表達(dá)式中。

下面的程序用來求出1000以內(nèi)的全部素?cái)?shù)。

#include<iostream.h>

voidmain()

(

constintm=1000;

inti,j,isprime;

for(i=2;i<=m;i++)//這里用到了for循環(huán)控制語句。for循環(huán)語

句有三個(gè)表達(dá)式

{//第一個(gè)表達(dá)式賦給變量初值,第二個(gè)表達(dá)式為循環(huán)控制條件,

//第三個(gè)表達(dá)式為循環(huán)變量改變其值

isprime=l;

for(j=i-l;j>l;j—)

if(i%j==0)isprime=0;

if(isprime)cout?i?,,,;

if(i%30==0)cout?endl;

)

說明:

D當(dāng)m值比較大時(shí),這個(gè)程序計(jì)算量是比較大的,事實(shí)上這是用

來求出小于m的所有素?cái)?shù)的最簡(jiǎn)單也是最笨的算法。

一種辦法是作下面的改進(jìn):

把for(j=iT;j>l;j-)改為:

intil=int(sqrt(i));

for(j=il;j>l;j—)

為了確定整數(shù)i是不是素?cái)?shù),不需要用2,3,。。。,i-1來除

它,只需用2,3,。。。,sqrt(i)試除就可以了。

這里sqrt(i)是標(biāo)準(zhǔn)函數(shù),功能是計(jì)算平方根,而int()則是把

浮點(diǎn)值圍化為整型值。

另一種算法是埃拉脫散(Eratosthenes)篩法,將在以后介紹。

3.1統(tǒng)計(jì)學(xué)生成績(jī)

已知n個(gè)學(xué)生的注冊(cè)號(hào)和成績(jī),計(jì)算他們的平均成績(jī),并列出成

績(jī)最好的前t名學(xué)生的注冊(cè)號(hào)和分?jǐn)?shù)。

程序代碼如下:

#include<iostream.h>

voidmain()

constintn=3;

constintt=n;

intindex[n];//存放注冊(cè)號(hào)

floatscore[n];//存放成績(jī)

for(inti=0;i<n;i++)

cin?index[i]?score[i];//從鍵盤輸入數(shù)據(jù)

floatsum=0;

for(i=0;i<n;i++)

sum+=score[i];//計(jì)算分?jǐn)?shù)總和

cout.precision(2);//設(shè)置輸出精度

cout?endl?z,Averagescore:,,?sum/n;

cout.width(28);//輸出精度

cout?endl?A,registernumberscore”;

for(i=0;i<t;i++)//選取前t名分?jǐn)?shù)最高的學(xué)生,輸出其注冊(cè)號(hào)和

成績(jī)

(

floats=score[i];

intjl=i;

for(intj=i+l;j<n;j++)

if(s<score[j])

s=score[j];

jl=j;

)

if(jl>i)

(

score[jl]=score[i];

score[i]=s;

j=index[jl];

index[jl]=index[i];

index[i]=j;

)

cout.width(4);//輸出序號(hào),注冊(cè)號(hào)和分?jǐn)?shù)

cout?endl?i+l;

cout.width(11);//設(shè)置寬度

cout?index[i];

cout.width(16);

cout.precision(2);//設(shè)置輸出精度

cout?score[i];

}

cout?endl;

程序運(yùn)行結(jié)果如下:

£4270

15689

15867

ftueragescore:75

registernunberscore

115689

214270

315867說明

cout.precision⑵是一個(gè)函數(shù)調(diào)用語句,函數(shù)名是

precisionocout說明此函數(shù)是一個(gè)標(biāo)準(zhǔn)類的一個(gè)標(biāo)準(zhǔn)對(duì)象cout的

函數(shù)。所“標(biāo)準(zhǔn)”,即它們所涉及的流(stream)類和對(duì)象cout都是

由系統(tǒng)已經(jīng)義好了的。其說明可以在頭文件iostream.h中找到。函

數(shù)precision要求一個(gè)int型參數(shù)該參數(shù)指出在后面輸出的浮點(diǎn)數(shù)

的精度取到小數(shù)點(diǎn)后的多少位。

cout.width。是另一個(gè)函數(shù)的用法。width決定了其后數(shù)據(jù)輸出

的寬度。

3.2輸出三角函數(shù)表

輸出人0~90度之間每隔15度的正弦、余弦、正切函數(shù)值。

程序代碼如下:

//program3_2.cpp

#include<iostream.h>

#include<math.h>

voidmain()

constfloatpai=3.1416f;

constintinterval=15;

cout.width(10);

cout?*Anglex";

cout.width(10);

cout?*sin(x)”;

cout.width(10);

cout<〈”cos(x)”;

cout.width(10);

cout?*tan(x)”;

floatarc;

cout.precision(4);

for(intdoa=0;doa<=90;doa+=interval)

(

arc=pai*doa/180;

cout?endl;

cout.width(10);

cout?doa;

cout.width(10);

cout?sin(arc);

cout.width(10);

cout?cos(arc);

cout.width(10);

if(doa==90)cout?*-,/;

elsecout?tan(arc);

cout?endl;

}程序運(yùn)行結(jié)果如下:

Anglexsin<x>cos<x>tan<x>

0010

150.25880.96590.2679

300.50.8660.5774

450.70710.70711

600.8660.51.732

?50.96590.25883.732

901-3.62e—006—

說明:

1)本程序中使用了系統(tǒng)提供的標(biāo)準(zhǔn)庫函數(shù)

sin(),cos(),tan(),它們都在頭文件math,h中說明。因此在3行包

含了此文件。

2)由于當(dāng)doa=90時(shí),其正切函數(shù)趨于無窮大,故對(duì)它有特殊的

處理,否則如按正弦、余弦一樣輸出,當(dāng)doa變到90時(shí),運(yùn)行將可

能溢出或打印一個(gè)超界的大數(shù)。

3.3Eratosthenes篩法求素?cái)?shù)

在2_3節(jié)給出了一個(gè)求在一個(gè)范圍內(nèi)的全部素?cái)?shù)的程序)下面給

出的程序其算法比原來的好。

program3_5是對(duì)2~1000的所有素?cái)?shù)進(jìn)行檢測(cè),用小于該數(shù)的數(shù)

試驗(yàn),如果都不能除盡,就找到了一個(gè)素?cái)?shù)。本節(jié)的程序也是用來求

1000以內(nèi)的所有素?cái)?shù),但其思想簡(jiǎn)單而巧妙。它是把2~1000所有的

整數(shù)放到一起首先把2保留,把2的所有素?cái)?shù)從中去掉,再保留3,

同時(shí)刪去所有3的倍數(shù),下一個(gè)數(shù)是5,7...o好象是一把篩子,把

不需要的數(shù)逐步篩去,留下的正是所求的數(shù)。

程序代碼如下:

#include<iostream.h>

#include<iomanip.h>

voidmain()

(

constintn=1000;

inti=l,j,count=0,sieve[n+1];

for(j=l;j<n;j++)sieve[j>j;//把廣n存入sieve[n]

while(i<n+l)//從while循環(huán)開始完成全部素?cái)?shù)的產(chǎn)生和輸出。

(

while(sieve[i]=l)i++;//跳過值為1的分量,表示下一個(gè)分量

必為一素?cái)?shù)

cout?setw(4)?sieve[i];//setw(4)設(shè)置以寬度為4的格式輸出

數(shù)據(jù)。setw(4)

//等價(jià)于cout.width(4)

count++;

if(count%15==0)cout?endl;

for(j=i;j<n+l;j+=i)

sieve[j]=l;

)

程序運(yùn)行結(jié)果如下:

235711131?192329313741434?

53596167717379838997101103107109113

12?13113?139149151157163167173179181191193197

199211223227229233239241251257263269271277281

283293307311313317331337347349353359367373379

383389397401409419421431433439443449457461463

467479487491499503509521523541547557563569571

577587593599601607613617619631641643647653659

661673677683691701709719727733739743751757761

769773787797809811821823827829839853857859863

8778818838879079119199299379419479539679719??在本節(jié)

以前給出的程序都是由一個(gè)函數(shù)組成的,實(shí)際上,一個(gè)真正的C++程

序幾乎都包含若干個(gè)由用戶自定義的函數(shù)。

在下面的幾個(gè)程序?qū)嵗?,都調(diào)用了由用戶定義的函數(shù)。

4.1三次方程求根

按照Cardan公式,計(jì)算三次方程x3+px+q=0的一個(gè)實(shí)根的公式為:

在計(jì)算實(shí)根xr的程序中,把計(jì)算一個(gè)浮點(diǎn)數(shù)的立方根的程序作

為一個(gè)用戶定義的函數(shù),而在主程序中兩次調(diào)用這個(gè)函數(shù)。

在計(jì)算6過程中,使用迭代公式:

程序代碼如下:

#include<iostream.h>

#include<math.h>

floatcuberoot(float);//自定義函數(shù)的原型

voidmainO

(

floatp,q,xr;

cout?*Inputparamertersp,q:";

cin?p?q;

floata=sqrt(q/2*q/2+p/3*p/3*p/3);

xr=cuberoot(-q/2+a)+cuberoot(-q/2-a);//調(diào)用cuberoot函數(shù)

cout?endl?*Therealrootoftheequationis”<<xr;

floatcuberoot(floatx)//

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論