版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)培訓(xùn)合作計(jì)劃
- 2024出租車租賃經(jīng)營(yíng)合同企業(yè)租賃經(jīng)營(yíng)合同
- 2024室內(nèi)裝飾設(shè)計(jì)合同書樣本
- 軟件外包合同樣本
- 社區(qū)停車位租賃合同范本
- 賣房代理合同格式
- 公司貸款償還合同范例
- 專業(yè)攝影合作協(xié)議書模板
- 房屋租賃合同安全協(xié)議
- 房屋權(quán)益合法轉(zhuǎn)讓合同樣本
- 體檢報(bào)告匯總分析中風(fēng)險(xiǎn)的防范
- 村里建群管理制度
- 【城市軌道交通運(yùn)營(yíng)安全管理研究5300字】
- 2024年中核匯能有限公司招聘筆試參考題庫含答案解析
- 上海市2024屆高三7月模擬預(yù)測(cè)歷史試題(等級(jí)考)(解析版)
- 肺炎護(hù)理查房課件
- 2024年中國華能集團(tuán)招聘筆試參考題庫含答案解析
- 服務(wù)質(zhì)量的管理規(guī)定模版
- 部編《道德與法治》二年級(jí)上冊(cè)教材解析及教學(xué)建議
- 2024年中考化學(xué)實(shí)驗(yàn)探究題說題
- 在高中語文課堂中開展愛國主義教育的策略探究獲獎(jiǎng)科研報(bào)告
評(píng)論
0/150
提交評(píng)論