大學計算機C++學習第二章_第1頁
大學計算機C++學習第二章_第2頁
大學計算機C++學習第二章_第3頁
大學計算機C++學習第二章_第4頁
大學計算機C++學習第二章_第5頁
已閱讀5頁,還剩120頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第二章

C++基礎知識

計算機程序設計基礎(C++)2教學內容1.C++程序的基本框架2.C++程序的開發(fā)過程3.變量與常量4.運算符與表達式5.類型轉換§23C++語言的產生C++是從C語言發(fā)展演變而來的,是更好的C引入了類的機制,最初的C++被稱為“帶類的C”1983年正式取名為C++1989年開始C++語言的標準化工作于1994年制定了ANSIC++標準草案于1998年11月被國際標準化組織(ISO)批準為國際標準,成為目前的C++§24C++的特點全面兼容C它保持了C的簡潔、高效和接近匯編語言等特點對C的數據類型系統(tǒng)進行了改革和擴充C++也支持面向過程的程序設計,不是一個完全純正的面向對象的高級語言支持面向對象的方法系統(tǒng)中一切皆為對象;對象是屬性及其操作的封裝體;對象可按其性質劃分為類,對象是類的實例;實例關系和繼承關系是對象之間的靜態(tài)關系;對象之間是靠消息傳遞來建立動態(tài)聯系的。§25常用的C++程序語言工具Microsoft:VisualC++

(又稱MSVC++)Borland:C++Builder§26注釋預編譯命令函數C++程序的書寫格式§2.1C++程序的基本框架7編寫程序:在計算機屏幕上顯示:Hello!源程序清單://屏幕輸出Hello!

#include<iostream>//預編譯命令

usingnamespacestd;//using命令

voidmain()//主函數名

{ //表示函數的開頭

cout<<"Hello!"<<endl;//函數體}//表示函數的結束注釋預編譯命令主函數輸出語句§2.1§2.1C++程序的基本框架8注釋

程序中“//”符號表明本行后續(xù)字符為注釋信息,該信息與程序的運行無關,在編譯時被忽略。作用是增強程序的可讀性,使程序更容易理解。

C++提供了兩種注釋方法:

//

其后至換行的所有字符為注釋信息。

/**/

夾在“/*”與“*/”之間的所有字符為注釋信息。注釋信息中不能再包括“/*”和“*/”,即注解方式不能嵌套。程序第一行://屏幕輸出Hello!

用于說明整個程序的功能,稱為序言注釋。第二行起語句后的注釋稱為解釋性注釋?!?.19預編譯命令

編譯程序時把指定文件的內容包含到本程序中來,位于主函數之前。

#include<iostream>

表示把庫文件iostream中的內容包含到該程序文件中來。

庫文件是系統(tǒng)提供的能實現某些特定功能的文件,如本例中用到系統(tǒng)提供的輸出功能。

iostream文件包含處理標準輸入輸出操作所需要的指令集。

多條#include命令必須分行書寫。不加分號§2.110包含庫文件時有兩種可能形式:

#include<iostream>usingnamespacestd;或

#include<iostream.h>

早些系統(tǒng)實現(如VC6.0)是將標準庫功能定義在全局空間中,聲明在帶.h后綴的頭文件中。

C++標準程序庫中的所有標識符都定義在名為std的名稱空間(計算機內存區(qū)域)中。

VC2010不允許:#include<iostream.h>預編譯命令using命令:告訴C++編譯器cin,cout,endl位于名為std的命名空間內,或者說將C++的庫文件加入到當前命名空間std中?!?.1加分號11//屏幕輸出"大家好"程序#include<iostream.h>voidmain(){cout<<"大家好!"<<endl;}//屏幕輸出"大家好"程序#include<iostream>usingnamespacestd;voidmain(){cout<<"大家好!"<<endl;}C++標準預編譯命令寫法1、頭文件不加擴展名,命令后無分號;2、必須使用using命令,命令后帶分號。傳統(tǒng)預編譯命令寫法,2010不適用?!?.112預編譯命令指出包含的文件名可以使用<>和“

”兩種符號

#include<iostream> #include“c:\jys\iostream”<>表示只在系統(tǒng)目錄中尋找要包含的文件“

”表示在指定目錄或者當前目錄中尋找要包含的文件§2.1庫文件位置的默認路徑:常使用13例:#include<iostream>

iostream.h文件包含處理標準輸入輸出操作所需要的指令集(源代碼);例:#include<cmath>

cmath.h文件包含內置數學函數的函數定義指令;例:#include<string>

string.h文件包含有聲明和訪問string型變量的指令常用預編譯命令§2.114

在基本程序設計中,源程序可以只包含一個函數——主函數(即main函數),程序的框架結構均為:

#include<iostream> usingnamespacestd;

voidmain() {

函數體

}C++程序的基本結構§2.115

C++程序可以由一個或多個函數組成(每個函數具有相對獨立的功能),而函數又是由語句構成。

C++程序有:主函數、用戶函數(兩者統(tǒng)稱自定義函數)和系統(tǒng)函數(標準庫函數)。

C++程序必須有且僅有一個main函數,可以定義用戶函數,調用系統(tǒng)函數。main函數位于預編譯命令之后,在程序中的位置可以任意。主函數main代表了程序執(zhí)行的起始點和終止點,即程序總是從主函數main的第一條語句開始執(zhí)行,并結束于主函數的最后一條語句。C++程序的基本結構§2.116例:輸入兩個數,輸出較大的數。#include<iostream>usingnamespacestd;voidmain(){inta,b,c;intmax(intx,inty);cout<<“pleaseenteraandb:”;cin>>a>>b;

c=max(a,b);cout<<“max=”<<c;}intmax(intx,inty){intz;if(x>y)z=x;elsez=y;returnz;}實例§2.117

(1)“{”與“}”為函數體的起止符,必須配對使用?!皗}”之間的內容為函數體,函數體內可以包含任意多行語句。(2)C++規(guī)定每個語句的最后以“;”結束。(3)C++程序的書寫很靈活,一行可書寫多個語句,一個語句可以寫成多行,但書寫時首先應該考慮程序的可讀性。說明§2.118(4)主函數的書寫也可以是如下形式:

intmain() {

函數體

return0;

}

int表示函數返回一個整型的數據說明§2.119主函數main()函數之前必須有返回值類型說明,void表示無返回值voidmain(){

…}intmain(){

…return0}向操作系統(tǒng)返回0,表示程序正常結束20//屏幕輸出"大家好"程序#include<iostream>usingnamespacestd;int

main(){cout<<"大家好!"<<endl;return0;}/*屏幕輸出"大家好"程序*/#include<iostream>usingnamespacestd;voidmain(){cout<<"大家好!"<<endl;}舉例21

通常采用縮進格式,按不同層次的結構,從不同的起始位置寫起,如下:

intabc()

{

…;

…; for()

{

…; if()

{

…;

…;

}

}

}C++程序的書寫格式注意:C++區(qū)分大小寫,所有標點必須使用西文標點,只有雙引號里(字符串)、注釋里才可使用中文。

§2.1//屏幕輸出"大家好"程序#include<iostream>usingnamespacestd;int

main(){cout<<"大家好!"<<endl;return0;}22完整的c++程序[注釋程序基本功能]#include<庫文件主名>usingnamespacestd;intmain(){[聲明常量][聲明變量][輸入語句][計算語句][輸出語句]return0;}//main()函數結束注釋語句Using命令主函數注釋語句頭文件§2.123§2.2C++程序的運行與調試方法§2.2基本概念編譯方式C++程序的運行過程VC++2010操作步驟調試程序24基本概念源程序:用匯編語言或高級語言

編寫的程序;目標程序:二進制代碼程序,機器可直接識別;庫文件:系統(tǒng)將經常使用的標準程序預先編好,并編譯成程序庫(能夠直接調用的機器代碼),可供用戶直接調用?!?.225編譯方式§2.226補充:OBJ和EXE文件的區(qū)別OBJ和EXE都是二進制文件;OBJ是COFF格式,只給出了程序的相對地址,是跨平臺的,沒有經過鏈接的重定位,不是可執(zhí)行的代碼;EXE是PE格式,給出了程序的絕對地址,是所有系統(tǒng)可以識別和執(zhí)行的。27C++程序的運行過程C++源程序:編輯→編譯→連接→運行.obj.exe.cpp§2.2生成28項目工作區(qū)窗口:包含用戶項目的一些信息(頭文件、源文件、資源等)VC++2010集成環(huán)境及操作輸出窗口:包括編譯和連接、調試、在文件中查找、結果等輸出信息文檔窗口:顯示源文件、資源文件及文檔文件的程序代碼標題欄菜單欄工具欄狀態(tài)欄:顯示當前的操作狀態(tài)、注釋、光標所在的位置等§2.2窗口列表:顯示當前窗口名稱,可以單擊鼠標切換。29VC++2010操作步驟

啟動VC++2010

創(chuàng)建項目創(chuàng)建源文件編輯程序—保存—編譯—執(zhí)行生成—執(zhí)行§2.2二選一30啟動VC++2010§2.231打開VC++2010起始頁§2.232新建項目§2.233新建項目§2.234新建項目§2.235新建項目§2.236打開已有項目3738向項目中添加源文件§2.2右擊”源文件”39新建C++源文件§2.240在編輯窗口輸入程序§2.241“編譯”或者“生成”§2.2生成產生OBJ和EXE文件,相當于“編譯+連接”。編譯只產生OBJ文件。42執(zhí)行程序(運行)§2.243結果窗口§2.2441、包含有C++代碼的.cpp文件稱為()文件。2、編譯器將C++代碼轉換成機器代碼后保存在()文件中,擴展名為()。3、連接器生成()文件,擴展名為(),該文件包含有運行C++程序所必需的所有機器代碼。源目標.obj可執(zhí)行.exe自測題§2.245測試:在計算機上使用樣本數據運行程序,檢查運行結果是否正確;調試:查找和排除錯誤(bug、debug);bug分語法錯誤、邏輯錯誤和運行錯誤:語法錯誤:違反C++語法規(guī)則,如誤拼關鍵字或變量名、漏寫分號等;編譯時可發(fā)現;邏輯錯誤:如漏寫語句、語句順序錯誤等,在編譯、執(zhí)行時均不能發(fā)現。運行出錯:在編譯時不能查出。如:除零、計算負數的平方根等。調試程序§2.246#include<iostream>;usingnamespacestd;intmain(){floatxcout<<“Pleaseenterx:”<<‘\n’;cin<<x;if(x>=0)cout<<x<<endl;elsecin<<-x<<endl;調試舉例:求非0數的絕對值§2.2調試程序471、一行語句輸入完成,按Enter鍵換行,如果下一行語句是下一層次,先按Tab鍵縮進,再輸入。如果下一行語句是上一層次,先按Shift+Tab鍵退回,再輸入。2、選中程序行,按Tab鍵,向右縮進四個字符位置。3、選中程序行,按Shift+Tab鍵,向左縮進四個字符位置。編輯程序小訣竅§2.248容易出錯問題強調1、鍵盤輸入多個數據時使用回車、空格、Tab鍵作為間隔符;2、語句后應加分號;3、標點符號應該使用英文半角狀態(tài)輸入;4、預編譯命令后不加分號;5、語句中關鍵字和數據之間有空格,如return0;6、變量、常量要先聲明再使用;7、使用變量時,若變量名輸錯,系統(tǒng)認為未聲明;8、cin>>變量名;

不能是字面值或endl?!?.249§2.3§2.3常量與變量基礎知識簡介常數變量符號常量501、C++字符集大小寫的英文字母:A~Z,a~z數字字符:0~9特殊字符:

space! # % ^ &

_ + -*/= ~ < > \ ' " ; . , ()[]{}C++程序由下面字符所組成的單詞或標識符寫成:§2.3基礎知識簡介51

源代碼文件:描述算法的源代碼,擴展名為.cpp。如:example1.cpp

C++源程序:由一個或多個源代碼文件及頭文件組成。

頭文件:放變量、類型、宏和類等的聲明,擴展名為.h。如:iostream.h、cmath.h。2、源程序§2.3523、詞法記號關鍵字:

C++預定義的單詞,不允許用戶重新定義。用戶自定義標識符:是程序員定義的單詞,在程序中聲明變量、數組、函數和標號等的名稱。操作符:

用于實現各種運算的符號。文字:

在程序中直接使用符號表示的數據。分隔符:

(){},:;

用于分隔各個詞法記號或程序正文??瞻追?/p>

空格、制表符(TAB鍵產生的字符)、換行符(Enter鍵所產生的字符)和注釋的總稱?!?.353

#include

<iostream>usingnamespace

std;void

main() { int

a;

intb;

intc;

//一行可寫多個語句

cout<<"輸入第一個加數a:"; cin>>a;

cout<<"輸入第二個加數b:";

cin>>b; c=a+b; cout<<a<<"+"<<b<<"="<<c<<endl;} //C++中語句采用自由格式書寫[例]編寫一個實現兩個整數相加的程序§2.3541、在對一個C++程序進行編譯時,可發(fā)現注釋中的拼寫錯誤()2、一個C++源程序必須包含一個main函數()3、C++中一條語句可用分號或逗號作為結束符。()4、一個C++源程序總是從()開始執(zhí)行

A.程序的第一個函數B.主函數C.子程序D.主程序5、設有定義:inta,b;當執(zhí)行cin>>a>>b;時,輸入a,b的值,作為數據的分隔符可以是()6、C++源程序必須有return語句。()自測題§2.3×√×Benter、space、tab×55數據類型

程序處理的對象是數據,有數值數據、文字數據、圖像數據、聲音數據等多種形式,最基本、最常用的數據是數值數據和文字數據。

數據在存儲器中存放的格式稱為數據類型。為表現不同性質的事物,要用不同的數據類型?!?.356程序中用到的數據都必須指明其數據類型,即:必須遵循“先聲明,后使用”的原則。任何數據在計算機中只能以二進制的形式存儲。不同類型的數據占據不同長度的存儲單元。

例如:char1字節(jié),int4字節(jié)不同類型的數據對應不同的值域范圍。

例如:short2字節(jié)-32768~32767

int4字節(jié)-2147483648~2147483647不同類型的數據對應不同的操作(運算)及規(guī)則。

例如:1.0/4.0與

1/4結果不同!數據類型§2.357C++數據類型基本數據類型非基本數據類型短整型

short整型int長整型long浮點型float雙精度型double長雙精度型longdouble字符型char布爾型bool數組指針引用類結構聯合枚舉C++內部預定義的類型由基本數據類型構造出來的類型§2.358數據對象的表達方式

C++中數據按本身的變化規(guī)律有常量和變量之分。

在程序運行過程中,其值可以被改變的量稱為變量,其值不能被改變的量稱為常量。

多數數據經常變化,而少數數據不變化。常量和變量是計算機語言中數據的兩種基本形式,常量和變量的運算規(guī)則有區(qū)別。

常量有字面常量和符號常量兩種,字面常量又稱為常數

或直接常量,是在程序中直接使用的值,不占內存。§2.359

#include<iostream>usingnamespacestd;voidmain(){ floatr;constdoublePI=3.14; doublearea; cin>>r; //輸入圓的半徑

area=PI*r*r;//計算圓面積

cout<<"area="<<area<<endl;} [例]寫出計算圓面積的程序符號常量變量字面常量§2.360基本數據類型§2.3基本數據類型常量變量字面常量符號常量整數浮點數字符字符串整型浮點型字符型字符串型布爾型開辟內存空間開辟內存空間布爾值61

字面常量指程序中直接給出的量,不占用內存空間。又稱為字面值、常數或直接常量。

字面常量(常數)常常用來給變量賦初值。

在程序中使用常數來初始化變量時,常數的數據類型與變量的數據類型是一致的。

C++中的字面常量有整型、實型、字符型、布爾型、字符串型五類。字面常量§2.3.1§2.3.1常數常量分為:字面常量(常數)和符號常量。62字面常量類型可以包含的字符示例數值型:整型,實型數字(0~9),正號(+),負號(-),字母e或E(作為指數標志)23.14-23003.2E6(表示3.2×106)字符型用單引號括起來的單個字符‘A’‘b’‘2’‘’‘$’字符串型用雙引號括起來的

0個或多個字符“Howareyou”“345”“123ab”“”布爾型邏輯假,邏輯真falsetrue字面常量(字面值)簡介§2.3.163整型字面值又叫整數、整型常量,包括正整數、負整數和零。1、十進制整數:無前綴,數碼為0至9。如0、123、-123等。2、八進制整數:前綴為0,數碼為0至7。如0123,-045等。3、十六進制整數:前綴為0X或0x,數碼為0至9,

A至F或a至f。如0X123,-0x1f?!?.3.164例如:15+30=15+030=15+0x30=015+30=015+030=015+0x30=0x15+30=0x15+030=0x15+0x15=453963433761514542§2.3.165實型字面值又叫實型常量、浮點數。1、小數形式:

由數字和小數組成,必須有小數點。如0.0、0.123、.123、123.0、123.、-0.123等。2、指數形式:

用E或e表示×10,E前必須有十進制數,E后必須為十進制整數。

如123×103表示為123E3;

-123×10-3表示為-123E-3;

C++輸出時統(tǒng)一規(guī)范為:+1.23E+5和-1.23E-5?!?.3.166

實型常數分單精度(float)、雙精度(double)和長雙精度(longdouble)三種:

不加說明(隱含)的實型常數是double型;

float型常數必須在實數后加F(或f);

longdouble型常數須在實數后加L(或l)。實型字面值簡介C++認為除0.0外,其余浮點常數都是double型,所以在給float型變量賦初值時:1.可賦為0.0;2.在浮點常數后加F(f);3.進行強制類型轉換或者由系統(tǒng)完成自動類型轉換(見§2.5)。-3.451.23E-3-3.45F1.23E-3f-3.45L1.23E-3l§2.3.167字符型字面值定義:用單引號引起的單個字符,區(qū)分大小寫。如‘A’、‘a’特點:必須用單引號,不能用其他符號。必須是單個字符,不能是字符串。轉義字符:由\

開頭,后跟一個或幾個字符,代表特定含義。如:\n表示換行。字符數據在內存中的存儲形式:

通常以十進制ASCII碼表示,以二進制ASCII碼存儲,占1個字節(jié)。

如:十進制ASCII碼值為48、65和97分別代表字符‘0’、‘A’和‘a’。舉例§2.3.168

對于控制字符等不可見的字符以及其他一些特殊字符(單引號、雙引號、反斜杠符等)可以使用由一個反斜杠符和一個或幾個符號組成的轉義字符表示:

C++預定義的主要轉義字符:

‘\n’(換行)

‘\r’(回車)‘\t’(橫向跳格)

‘\’’(單引號)‘\a’(響鈴)‘\”’(雙引號)

‘\b’(退格)‘\\’(反斜杠)‘\0’(空格)

‘\ddd’

(8進制數表示的ASCII字符)

‘\xhh’

(16進制數表示的ASCII字符)轉義字符簡介§2.3.1\r是回車,即回到行首,只有\(zhòng)n才有換行功能,鍵盤enter=’\r’+’\n’

69水平制表符空格

‘‘#include<iostream>usingnamespacestd;voidmain() { floata=2.7f; floatb=-3.2e24f; cout<<a<<'\0'<<b<<'\n'; cout<<a<<'\0'<<b<<'\r'; cout<<a<<'\t'<<b<<endl;}[例]輸出兩個浮點數的值常數實例換行§2.3.1回車70#include<iostream>usingnamespacestd;voidmain(){ cout<<'a'<<'\n';

cout<<'\141'<<endl; cout<<'\x61'<<endl;}//輸出字符a//輸出字符a//輸出字符a例、輸出單個字符的方法常數實例§2.3.171

#include<iostream>usingnamespacestd;voidmain(){cout<<'\''<<endl; cout<<'\"'<<endl; cout<<'"'<<'\n'<<'a'<<endl;cout<<'\t'<<'b'<<'\''<<'\b'<<'a'<<endl;

cout<<'\\'<<endl; cout<<'\a'<<endl;

}//輸出單引號//輸出雙引號//輸出反斜杠//輸出響鈴例:單引號、雙引號等特殊字符的輸出常數實例§2.3.1//輸出水平制表符,退格//輸出換行72字符串型字面值定義:簡稱字符串,用雙引號定界,區(qū)分大小寫。如“computer”、“A”、“a”、“”系統(tǒng)自動在字符串末添加結束符號‘\0’(空字符,作為字符串結束標志,占1個字節(jié))字符和字符串的不同:引用符號不同:字符用單引號;字符串用雙引號。容量不同:字符——單個字符;字符串——零個、單個或多個字符。占用內存空間不同:字符占1個字節(jié);字符串占字符串字節(jié)數加1個字節(jié)。如‘a’和“a”。§2.3.173#include<iostream>usingnamespacestd;voidmain(){cout<<12345<<endl; cout<<"12345\n";

cout<<"'VC++'是\"VisualC++\"的縮寫\n";}//輸出整數值//輸出字符串例:字符串輸出cout<<"\'VC++\'是\"VisualC++\"的縮寫\n";常數實例§2.3.1等價74布爾型字面值

布爾型數據的取值:

只有false(邏輯假)和

true(邏輯真)

兩種。輸出時:false為0,true為1。布爾型數據也可以和數值型數據參與運算,

此時:true相當于1false相當于0§2.3.175#include<iostream>usingnamespacestd;voidmain(){cout<<false<<endl; cout<<true<<'\n'; cout<<false+1<<endl; }§2.3.1常數實例例:布爾型字面值的輸出76§2.3.2變量變量:程序運行過程中其值可以改變的量;常量:程序運行過程中其值不變的量;“先聲明,后使用”

即命名、指定數據類型、賦初值,對變量進行聲明的語法格式如下:

數據類型變量名=初值;例如:floatlength=0.0;intsum=1;存儲單精度數存儲整型數§2.3.277標識符簡介標識符:在程序中聲明變量、數組、函數和標號的名稱。分為系統(tǒng)保留字和用戶自定義標識符;系統(tǒng)保留字:又叫關鍵字,有預定的含義,不允許用戶重新定義,也不允許用戶定義的標識符與其同名。C++的關鍵字見書P231附錄Ⅲ§2.3.278自定義標識符命名規(guī)則標識符只能包含字母、數字和下劃線;必須以字母或下劃線開頭(一般用字母);不能使用關鍵字;最多不超過247個字符;區(qū)分大小寫。習慣上:見名知意一般命名變量用小寫字母,命名常量用大寫字母§2.3.279判斷變量名是否合法

sum_1

2max

×age3

legiouerwalgk

int

×_a1

√§2.3.280聲明變量0.0語法示例初值類型

變量名=初值;類型

變量名(初值);類型變量名1,變量名2,…變量名n;變量名1=初值;變量名2=初值;

...變量名n=初值;inta=1,b=1;intsum1,sum2;sum1=0;sum2=0;10floatrate(0.0);chargrade=’’;一個空格stringname=“”;空字符串先聲明后使用§2.3.2習慣:變量名小寫81內存單元可存儲的數據數據類型占用內存字節(jié)數取值范圍整型短整型short2-32768~32767整型int4(32位機)-2147483648~2147483647長整型long4(32位機)-2147483648~2147483647浮點型實型float4±3.4e-38~±3.4e38雙精度型double8±1.7e-308~±1.7e308長雙精度型longdouble10±3.4e-4932~±1.1e4932字符型char1一個字符布爾型bool1true,false變量的類型§2.3.216位機int占2字節(jié)82輸入輸出流流:數據從一個位置流向另一個位置;C++使用流來執(zhí)行標準的輸入輸出操作;標準輸入流——鍵盤,稱為cin標準輸出流——屏幕,稱為cout>>為流提取操作符,用于從cin(鍵盤)中"取出"數據<<為流插入操作符,用于將數據"插入"到cout(屏幕)中;例:cout<<"Hello!";屏幕上顯示Hello!cin>>rate;鍵盤輸入數據存于rate變量§2.3.283格式:

cout<<表達式<<表達式…<<endl;cin>>變量>>變量…;換行

cout<<‘\n’;cout<<“\n”;cout<<endl;輸出數值

cout<<3;輸出字符串(雙引號中的內容原樣輸出)

cout<<"******";輸出變量的值

inta=5;cout<<a;輸入輸出流§2.3.284輸入輸出流例:cout<<"hello!\n";inta,b;cin>>a>>b;cout<<"a+b="<<a+b<<endl;

§2.3.285

輸入幾個數據時,要用空格、回車或Tab鍵分隔開。

cin>>a>>b>>c;(變量名不能是字面值常量或endl)

運行時從鍵盤輸入:3.52.1-4.3

3.5,2.1,-4.3

錯誤

輸入的數據個數、類型要與接收變量匹配。

inti,j;//定義為整型變量

cin>>i>>j;

運行時從鍵盤輸入:2 -8

2.5 -8

錯誤輸入完所有數據后,要用回車鍵表示輸入結束。輸入操作的幾點說明:§2.3.286

cout<<a<<b<<c;和下面幾條輸出語句等價嗎?

cout<<a; cout<<b; cout<<c;

若想使輸出更明確,可:

cout<<"a="<<a<<endl; cout<<"b="<<b<<endl; cout<<"c="<<c;

或:

cout<<"a="<<a<<endl<<"b="<<b<<endl<<"c="<<c;輸出操作舉例:§2.3.287閱讀程序寫出程序功能#include<iostream>usingnamespacestd;intmain(){cout<<"C++"<<"isaprogramminglanguage."<<endl;cout<<"C++"<<"is";cout<<"a";cout<<"programming"<<"language.";cout<<endl;cout<<"C";cout<<"+";cout<<"+";cout<<"isaprogramminglanguage."<<endl;return0;}§2.3.288#include<iostream>usingnamespacestd;voidmain(){ floatnum1,num2,sum,SUM; cout<<"Enterfirstnumber:"; cin>>num1; cout<<"Entersecondnumber:"; cin>>num2; sum=num1+num2;SUM=num1-num2; cout<<"Thesumis"<<sum<<endl;cout<<"TheSUMis"<<SUM<<endl;}閱讀程序寫出程序功能§2.3.2大小寫嚴格區(qū)分!89§2.3.3符號常量

符號常量是程序運行過程中數值不變的內存單元。關鍵字const用來說明屬于某種數據類型的符號常量,定義方法為:①const數據類型說明符常量名=常量值;②數據類型說明符const常量名=常量值;如:

const

doublePI=3.141592653;

char

constOP=‘+’;

§2.3.3

符號常量一旦定義不能在程序中再對它賦值。習慣:大寫90符號常量的名稱習慣使用大寫字母;在定義符號常量時必須賦值;定義了的符號常量不能再改變它的值。若數據類型為int,則類型可省略。

如:constint

SUM=0;

intconstSUM=0;

constSUM=0;注意:§2.3.3等價91聲明符號常量語法示例const

數據類型常量名=值;數據類型const

常量名=值;const

intAGE=30;constfloatMAXPAY=15.75;constcharYES=‘Y’;stringconstSCHOOL=“西南交通大學”;先聲明后使用習慣:常量名大寫優(yōu)點:含義清楚、一改全改92[例]編程實現:求半徑為8的圓的面積和周長。算法描述:定義符號常量PI定義double變量r,area,circum半徑r=8;計算圓面積area=PI*r*r計算圓周長circum=2*PI*r輸出圓面積和周長符號常量的應用§2.3.393#include<iostream>usingnamespacestd;voidmain(){

}constdoublePI=3.141592653;doubler,area,circum;area=PI*r*r;circum=2*PI*r;cout<<"面積為:"<<area<<endl;cout<<“周長為:“<<circum<<endl;r=8;§2.3.394§2.4運算符和表達式§2.4

我們把運算符、運算量(也稱操作數)構成的式子稱為表達式。表達式按照所規(guī)定的運算得到的結果便是表達式的值。

C++提供了豐富的運算符:①從功能上可分為算術運算符、條件運算符、邏輯運算符、賦值運算符、逗號運算符等;②從表現形式上可分為單目運算符、雙目運算符及三目運算符等(見下頁)。

95單目運算符,又稱為一元運算符

運算符操作數

(如:- !--++)例:i++雙目運算符,又稱為二元運算符

操作數1運算符操作數2

(如:+-*/%)例:3*2三目運算符

條件運算符(如問號運算符:?)例:

x>y

?

x

:

y§2.4運算符的分類96

優(yōu)先級是指表達式中運算符的執(zhí)行順序。在C++中,優(yōu)先級以阿拉伯數字表示,數值越小級別越高。計算機按照優(yōu)先級由高到級逐一運算處理。一般而言,單目運算符的優(yōu)先級高于雙目運算符。

結合性是指當表達式中的多個運算符優(yōu)先級相同時,是按照從左至右的順序執(zhí)行,還是從右至左的順序執(zhí)行,從左至右稱為左結合,從右至左稱為右結合?!?.4.1運算符的優(yōu)先級和結合性97算術運算符運算符運算優(yōu)先級別()改變正常優(yōu)先級1-負號2*,/,%乘法、除法、求余運算3+,-加、減法4§2.4.198算術運算符/:除法運算符注:整數相除時取整數舍小數,如5/2得2,5.0/2.0=2.5%:取模運算符或求余運算符用于計算兩個整型常量或整型變量相除的余數。如5%2=1,而25.7%3是非法的1/2=?1/2.0=?1.0/2=?0.500.5§2.4.199算術表達式表達式:是操作符、操作數(常量、變量、函數等)和標點符號組成的序列,其目的是用來說明一個計算過程。算術表達式:用算術運算符和括號將操作數連接起來,構成的符合C語法規(guī)則的式子。運算符的優(yōu)先級與結合性優(yōu)先級:先乘除,后加減。結合性:左結合性,即同級運算符由左至右結合?!?.4.1100算術表達式舉例例:設inta=5,b=2;floatc=5.0,d=2.0;求a/b、a%b、c/d、a+a%b/b、a%d。a/b=2、a%b=1、c/d=2.5、a+a%b/b=5、a%d非法已知inta=3467,寫出計算a的個、十、百、千位的表達式;a%10=7,a/10%10=6,a/100%10=4,a/1000%10=3偶數:x%2為0;奇數:x%2為1寫出偶數的通式;§2.4.1101算術表達式舉例如下的表達式是否正確?(x+y)(x-y)5X=5+3-0+0

=8設a=5,b=3,c=1,d=2,e=6,求:a+b-c/d+e%d§2.4.1××102

賦值語句語法示例變量名=表達式;(注:不能用賦值語句給常量賦值,賦值運算符的優(yōu)先級低于算術運算符)hours=10;age=age+1;price=price*0.9;name=“Jack”;表達式的數據類型必須和要賦值變量的數據類型匹配§2.4.2將表達式的值賦給操作符左邊的變量賦值等號在計算時具有右結合性!103a=5a=b=c=5 a=5+(c=6)

a=(b=4)+(c=6)

a=(b=10)/(c=2)

表達式值為5,a,b,c均為5表達式值為11,a為11,c為6表達式值為5,a為5賦值運算符舉例表達式值為10,a為10,b為4,c為6表達式值為5,a為5,b為10,c為2§2.4.2104復合賦值運算符+=,-=,*=,/=,%=等例如:

a+=3

等價于a=a+3

x*=y+8

等價于x=x*(y+8)

x%=3

等價于x=x%3

已知inta=12;求執(zhí)行a+=a-=a*a后a的值

a=a+(a=a-a*a)=a+(a-a*a)=-120§2.4.2?-132-132a=-264××等價于:a=a-a*a;a=a+a;具有右結合性105inta(2),b(3),c(4);a*=b/=c-=a;

a=a*(b=b/(c=c-a));

a-=b*=c+=3;

a=a-(b=b*(c=c+3));

a=b=c=1;c=(a*=2)+(b+=3)+2;

c=(a=a*2)+(b=b+3)+2;Page105//a=2,b=1,c=2//a=-3,b=5,c=5//a=2,b=4,c=8復合賦值運算符舉例§2.4.2106自增、自減運算符使用:賦值、輸出、計算等作用:使變量的值增加1或減少1。后置運算:i++,i--

表示先使用后加(減)1;前置運算:

++i,--i

表示先加(減)1后使用;§2.4.2#include<iostream>usingnamespacestd;voidmain(){inta,b;a=12;b=10;cout<<--a-b<<endl;//1a=12;b=10;cout<<(a--)-b<<endl;//2a=12;b=10;cout<<++a-b<<endl;//3a=12;b=10;cout<<(a++)-b<<endl;//2}1071、y=2,x=y++;2、y=2,x=y--;3、y=2,x=++y;4、y=2,x=--y;先將y的值賦給x,y再自加1得3,相當于x=2,y=3先將y的值賦給x,y再自減1得1,相當于x=2,y=1y先自加1得3,然后將y的值賦給x,相當于x=3,y=3y先自減1得1,然后將y的值賦給x,相當于x=1,y=1自增自減運算符示例§2.4.2108自增、自減運算符++、--只能作用于變量,不能作用于常量。-i++表示-(i++),XY表示(X--)-Y。已知:a=8;b=10;寫出執(zhí)行c=--a;d=b--;e=a--;f=--b;后abcdef的值6,8,7,10,7,8§2.4.2相當于:--a;c=a;d=b;b--;e=a;a--;--b;f=b;109[例]寫出程序的運行結果#include<iostream>usingnamespacestd;voidmain(){inti=5,j=5;intm=10,n=10;

i++;++j;cout<<i<<""<<j<<endl;cout<<i++<<""<<++j<<endl;

m--;--n;cout<<m<<""<<n<<endl;cout<<m--<<""<<--n<<endl;cout<<(m+=10)<<endl;}//66//67//99//98§2.4.2//18作為單獨的語句,i++;++i;效果完全相同:i=i+1;110#include<iostream>usingnamespacestd;intmain(){inta,b,c,d,e;a=6;b=c=d=e=3;c=(a--)-b;d=-b++;e=-(--a)--;cout<<a<<endl<<b<<endl<<c<<endl<<d<<endl<<e<<endl;return0;}[例]寫出程序的運行結果等價于d=-(b++);§2.4.2111自增自減運算符、復合賦值運算符使用說明優(yōu)點:豐富了程序的表達式,使程序簡潔干練,生成的目標代碼效率高;缺點:難于理解和調試,容易產生二義性,不同的C編譯器得出的結果有可能不同。建議:為確保實現自己所要求的計算順序,可用括號加以明確;如:-(--a)。將有副作用的復雜表達式分解成幾個比較簡單的表達式處理。盡量不要在一個表達式中對同一個變量連續(xù)使用++或--。如:避免(--a)++?!?.4.2112逗號表達式

1.

逗號運算符的使用格式為:表達式1,表達式2,……,表達式n

運行時依次求解各個表達式的值,表達式n的值作為整個逗號表達式的值。

2.使用逗號表達式的目的一般只是想分別得到各個表達式的值,而并非一定需要得到和使用整個逗號表達式的值。

3.逗號運算符是所有運算符中級別最低的運算符。已學運算符的優(yōu)先級順序為:

算術運算符>賦值運算符

>逗號運算符§2.4.3113[例]寫出程序運行結果#include<iostream>usingnamespacestd;voidmain(){intx=0,y=2;inta=5,i=0,j=0;x=(a=3*5,a*4);y=(i=2,j=2,i++,--j);cout<<x<<endl<<y<<endl;cout<<(i=2,i++,a--)<<endl;}60115§2.4.3114§2.5類型轉換§2.5.1

由于字符型數據存放的實際上是相應字符的ASCII碼的碼值,所以字符型數據和整型數據是匹配的。字符數據和整型數據之間可以互相賦值、運算。例如:intj; charm;j='a'; m=97; intc='A'+2;cout<<j<<endl<<c<<endl<<m<<endl;charc=65;intj='A';cout<<c<<","<<j<<endl;字符型數據的類型轉換115隱含類型轉換

由系統(tǒng)自動完成,也叫自動類型轉換。

如果不同類型的數據參與運算或者表達式值的數據類型與要賦值變量的數據類型不一致,大多數程序設計語言使用隱含類型轉換來使數據類型一致。隱含類型轉換由系統(tǒng)自動進行,有可能影響程序結果的準確率(高賦低時),此時系統(tǒng)會出現警告信息,編程時要盡量避免出現此類情況。§2.5.2116§2.5.2隱含類型轉換原則:(1)賦值號右邊類型轉換為賦值號左邊變量的類型。(2)多種類型數據混合運算時,低類型轉換為高類型。(3)浮點型轉換為整型時,直接去掉小數部分。(4)雙精度轉換為單精度時,去除多余小數位數四舍五入。隱含類型轉換117#include<iostream>usingnamespacestd;voidmain(){inta1=10,a2=5,k;doubleb,c,s;b=38.425,c=12.0;charc1='A',c2='B';s=b+a1-c;k=c1+c2+a1+b;cout<<"k="<<k<<",s="<<s<<endl;}

c1、c2由字符型先轉換為整型參加運算;c1+c2+a1+b的結果轉換為整型賦給k(舍去小數部分,不進行四舍五入)?!?.5.2隱含類型轉換舉例a1轉換為double型參加運算。118[例]閱讀程序給出運行結果#include<iostream>usingnamespacestd;voidmain(){charc1;cout<<"請輸入一個小寫字母:";cin>>c1;c1=c1-32;cout<<"大寫字母為:"<<c1<<endl;}小寫字母與大寫字母的關系為:

C大=C小-32§2.5.2119

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論