| 我們對這個(gè)程序逐行加以解釋: ?。?)第一行是C++語言的注釋。其中,"http://"是C++語言的一種注釋符號,自"http://"開始,一直到本行結(jié)束,所有內(nèi)容都會被當(dāng)作注釋對待。C++注釋也可以寫成下面的形式: /*注釋內(nèi)容*/ 即夾在"/*"與"*/"號間的部分是要注釋的內(nèi)容,例如,本句可以改為: /*simple.cpp是一個(gè)簡單的C++程序*/ 我們進(jìn)行程序設(shè)計(jì)時(shí),這兩種注釋形式都會經(jīng)常用到。它們的區(qū)別在于:前者只能注釋一行內(nèi)容,而后者可以注釋多行內(nèi)容。它可以用在程序的任何地方,編譯器在編譯時(shí)將這些信息忽略,注釋就是用來幫助閱讀和理解程序的信息,也可使用注釋來幫助用戶調(diào)試程序。 ?。?)第2行使用預(yù)處理指令#include將頭文件iostream.h包含到程序中來, iostream.h是標(biāo)準(zhǔn)的C++頭文件,它包含了輸入和輸出的定義。 (3)第3行定義了一個(gè)稱為main的函數(shù)。 ◇ 一個(gè)函數(shù)有0個(gè)或多個(gè)參數(shù),它們出現(xiàn)在函數(shù)名后的一對圓括號中。 ◇ 括號中的void表示main沒有參數(shù)。 ◇ 一個(gè)函數(shù)可以有一個(gè)返回類型,它在函數(shù)名的左邊。 ◇ main函數(shù)左邊的返回類型為void,表示沒有返回值。 ◇ C++程序的執(zhí)行總是從main函數(shù)開始的。 ?。?)第4行是一個(gè)花括號,是main函數(shù)體開始的標(biāo)記。 ?。?)第5行是一個(gè)語句。 ◇ 一個(gè)語句可能是定義或聲明一個(gè)變量,也可能是得到一個(gè)數(shù)值的計(jì)算步驟。 ◇ 一個(gè)語句用分號(;)結(jié)尾,C/C++用分號來分隔語句。 ◇ 這個(gè)語句定義了一個(gè)整型變量i。 ◇ 一個(gè)變量能夠保存一種特定類型的數(shù)據(jù),整型變量能夠保存一個(gè)整型數(shù)據(jù)。 ?。?)第6行也是一個(gè)語句。 ◇ 這個(gè)語句將字符串"Hello C++!"發(fā)送到cout輸出流。 ◇ 一個(gè)字符串是一個(gè)用雙引號包圍的字符系列。 ?。?)第7行也是一個(gè)語句。 ◇ 這個(gè)語句將字符串"請輸入一個(gè)整數(shù):"發(fā)送到cout輸出流。 ◇ 字符串的最后一個(gè)字符(\n)是一個(gè)換行符。 ◇ 流是執(zhí)行輸入和輸出的對象。 ◇ cout是C++標(biāo)準(zhǔn)的輸出流,標(biāo)準(zhǔn)輸出通常是指計(jì)算機(jī)屏幕。 ◇ 符號<<是一個(gè)輸出運(yùn)算符,帶一個(gè)輸出流作為它的左操作數(shù),一個(gè)表達(dá)式作為它的右操作數(shù)。后者被發(fā)送到前者,字符串"請輸入一個(gè)整數(shù):\n"發(fā)送到cout的效果是把字符串打印到計(jì)算機(jī)屏幕上。 ?。?)第8行也是一個(gè)語句。 ◇ 這個(gè)語句將cin輸入流抽取到變量i。 ◇ cin是C++標(biāo)準(zhǔn)的輸入流,標(biāo)準(zhǔn)輸入通常是指計(jì)算機(jī)鍵盤。 ◇ 符號>>是一個(gè)輸入運(yùn)算符,帶一個(gè)輸入流作為它的左操作數(shù),一個(gè)變量作為它的右操作數(shù)。前者被抽取到后者,cin輸入流抽取到變量i的效果是將鍵盤的輸入值復(fù)制到變量i中。 ?。?)第9、10、11行分別是在屏幕上打印"您輸入的整數(shù)是:"、變量i和和換行符。這三行實(shí)際上可以綜合為一個(gè)語句: cout<<"您輸入的整數(shù)是:" <<i <<'\n'; 它的效果與使用三個(gè)語句是一樣的。 ?。?0)第12行的花括號是main函數(shù)體結(jié)束的標(biāo)記。 運(yùn)用第一章介紹的知識,我們在Visual C++6的開發(fā)環(huán)境里,編譯、連接、運(yùn)行該程序,可以得到下面的提示: Hello C++!請輸入一個(gè)整數(shù): 假定我們輸入整數(shù)5,即: 5↙ ↙表示鍵入了"ENTER"鍵(或稱為回車鍵),則得到運(yùn)行結(jié)果: 您輸入的整數(shù)是:5 通過這個(gè)實(shí)例,我們對C++程序的結(jié)構(gòu)、語句、變量、函數(shù)、預(yù)處理指令、輸入和輸出等,已有了一個(gè)初步的印象,在后面的章節(jié)中,我們還將作更詳細(xì)的介紹。 由于我們定義main( )函數(shù)的返回類型為void,所以最后就不用返回值了。如果我們定義main的返回類型的int,則要返回一個(gè)整型值: int main() { … return 0; } 要注意的是C/C++是區(qū)分大小寫的,不能隨便更改,cout是C++標(biāo)準(zhǔn)的輸出流,而Cout不是,如果沒有預(yù)先定義,編譯器就不認(rèn)識這個(gè)Cout。大多數(shù)C++命令使用小寫字母,大多數(shù)常量使用大寫字母,而大多數(shù)變量是大小寫混合使用。 | | 表2-2 C++關(guān)鍵字 | | asm | default | float | operator | static_cast | union | auto | delete | for | private | struct | unsigned | bool | do | friend | protected | switch | using | break | double | goto | public | template | virtual | case | dynamic_cast | if | register | this | void | catch | else | inline | reinterpret_cast | throw | volatile | char | enum | int | return | true | wchar_t | class | explicit | long | short | try | while | const | export | mutable | signed | typedef | . | const_cast | extern | namespace | sizeof | typeid | . . | Continue | false | new | static | typename | . . | | | | | | 表2-3 基本的數(shù)據(jù)類型及其表示范圍 | | 類型名 | 類型 | 字節(jié) | 表示范圍 | char | 字符型 | 1 | -128 ~127 | unsigned char | 無符號字符型 | 1 | 0 ~255 | signed char | 有符號字符型(與字符型相同) | 1 | -128 ~127 | int | 整型 | * | 與機(jī)器有關(guān) | unsigned int | 無符號整型 | * | 與機(jī)器有關(guān) | signed int | 有符號整型(與整型相同) | * | 與機(jī)器有關(guān) | short int | 短整型 | 2 | -32,768~ 32,767 | unsigned short int | 無符號短整型 | 2 | 0~65,535 | signed short int | 有符號短整型(與短整型相同) | 2 | -32,768~ 32,767 | long int | 長整型 | 4 | -2,147,483,648 ~2,147,483,647 | signed long int | 有符號長整型(與長整型相同) | 4 | -2,147,483,648 ~ 2,147,483,647 | unsigned long int | 無符號長整型 | 4 | 0~4,294,967,295 | float | 浮點(diǎn)型 | 4 | 3.4E +/- 38 (7位有效數(shù)字) | double | 雙精度型 | 8 | 1.7E +/- 308 (15位有效數(shù)字) | long double | 長雙精度型 | 10 | 1.2E +/- 4932 (19位有效數(shù)字)
| | | | 如果一個(gè)雙目運(yùn)算符兩邊的操作數(shù)類型不同,先要將它們轉(zhuǎn)換為相同的類型,即較低類型轉(zhuǎn)換為較高類型,然后再參加運(yùn)算。所謂類型的高低,跟所占的存儲空間大小有直接關(guān)系,所占存儲空間越大的類型,級別越高。 圖中橫向的箭頭表示必須的轉(zhuǎn)換,如兩個(gè)float型數(shù)參加運(yùn)算,雖然它們類型相同,但仍要先轉(zhuǎn)換成double型再進(jìn)行運(yùn)算,結(jié)果亦為double型??v向箭頭表示當(dāng)運(yùn)算符兩邊的操作數(shù)為不同類型時(shí)的轉(zhuǎn)換,如一個(gè)long型數(shù)據(jù)與一個(gè)int型數(shù)據(jù)一起運(yùn)算,需要先將int型數(shù)據(jù)轉(zhuǎn)換為long型,然后兩者再進(jìn)行運(yùn)算,結(jié)果為long型。所有這些轉(zhuǎn)換都是由系統(tǒng)自動進(jìn)行的,使用時(shí)只需了解結(jié)果的類型即可。 | | 程序2-2 | | #include <iostream.h> void main(void) { char a = 'x'; int b = 3,f = 2; float c = 2.5678; double d = 5.2345 long e = 32L; cout<<a - b + d / c - e * f<<endl; } | | 下面我們來分析一下這段程序: ?。?) 進(jìn)行d / c運(yùn)算時(shí),要將c轉(zhuǎn)換成double型,運(yùn)算的中間結(jié)果為double型; ?。?) 進(jìn)行e * f運(yùn)算時(shí),將f轉(zhuǎn)換為long型,運(yùn)算的中間結(jié)果為long型; ?。?) 進(jìn)行a - b運(yùn)算時(shí),將a轉(zhuǎn)換為int型(數(shù)值為ASCⅡ碼值120),運(yùn)算的中間結(jié)果為int型; ?。?) 當(dāng)(3)的中間結(jié)果與(1)的中間結(jié)果運(yùn)算時(shí),將(3)的中間結(jié)果轉(zhuǎn)換為double型,運(yùn)算的中間結(jié)果為double型; ?。?) 當(dāng)(4)的中間結(jié)果與(2)的中間結(jié)果運(yùn)算時(shí),將(2)的中間結(jié)果轉(zhuǎn)換為double型,得出最后結(jié)果。 于是,程序最后的運(yùn)行結(jié)果為55.038515。
| | 表2-4 | | 從 | 到 | 方法 | char | short | 符號位擴(kuò)展 | char | long | 符號位擴(kuò)展 | char | unsigned char | 最高位失去符號位意義,變?yōu)閿?shù)據(jù)位 | char | unsigned short | 符號位擴(kuò)展到short;然后從short轉(zhuǎn)到 unsigned short | char | unsigned long | 符號位擴(kuò)展到long; 然后從long 轉(zhuǎn)到unsigned long | char | float | 符號位擴(kuò)展到long; 然后從long 轉(zhuǎn)到float | char | double | 符號位擴(kuò)展到long; 然后從long 轉(zhuǎn)到double | char | long double | 符號位擴(kuò)展到long; 然后從long 轉(zhuǎn)到long double | short | char | 保留低位字節(jié) | short | long | 符號位擴(kuò)展 | short | unsigned char | 保留低位字節(jié) | short | unsigned short | 最高位失去符號位意義,變?yōu)閿?shù)據(jù)位 | short | unsigned long | 符號位擴(kuò)展到long; 然后從long轉(zhuǎn)到unsigned double | short | float | 符號位擴(kuò)展到long; 然后從long 轉(zhuǎn)到float | short | double | 符號位擴(kuò)展到long; 然后從long 轉(zhuǎn)到double | short | long double | 符號位擴(kuò)展到long; 然后從long 轉(zhuǎn)到double | long | char | 保留低位字節(jié) | long | short | 保留低位字節(jié) | long | unsigned char | 保留低位字節(jié) | long | unsigned short | 保留低位字節(jié) | long | unsigned long | 最高位失去符號位意義,變?yōu)閿?shù)據(jù)位 | long | Float | 使用單精度浮點(diǎn)數(shù)表示??赡軄G失精度。 | long | double | 使用雙精度浮點(diǎn)數(shù)表示。可能丟失精度。 | long | long double | 使用雙精度浮點(diǎn)數(shù)表示。可能丟失精度。 | | | | | 表2-5 | | 從 | 到 | 方法 | unsigned char | char | 最高位作為符號位 | unsigned char | short | 0擴(kuò)展 | unsigned char | long | 0擴(kuò)展 | unsigned char | unsigned short | 0擴(kuò)展 | unsigned char | unsigned long | 0擴(kuò)展 | unsigned char | float | 轉(zhuǎn)換到long; 再從 long 轉(zhuǎn)換到float | unsigned char | double | 轉(zhuǎn)換到long; 再從 long 轉(zhuǎn)換到double | unsigned char | long double | 轉(zhuǎn)換到long; 再從 long 轉(zhuǎn)換到double | unsigned short | char | 保留低位字節(jié) | unsigned short | short | 最高位作為符號位 | unsigned short | long | 0擴(kuò)展 | unsigned short | unsigned char | 保留低位字節(jié) | unsigned short | unsigned long | 0擴(kuò)展 | unsigned short | float | 轉(zhuǎn)換到long; 再從 long 轉(zhuǎn)換到float | unsigned short | double | 轉(zhuǎn)換到long; 再從 long 轉(zhuǎn)換到double | unsigned short | long double | 轉(zhuǎn)換到long; 再從 long 轉(zhuǎn)換到double | unsigned long | char | 保留低位字節(jié) | unsigned long | short | 保留低位字節(jié) | unsigned long | long | 最高位作為符號位 | unsigned long | unsigned char | 保留低位字節(jié) | unsigned long | unsigned short | 保留低位字節(jié) | unsigned long | float | 轉(zhuǎn)換到long; 再從 long 轉(zhuǎn)換到float | unsigned long | double | Convert directly to double | unsigned long | long double | 轉(zhuǎn)換到long; 再從 long 轉(zhuǎn)換到double | | |
| | 下面是一個(gè)使用變量的程序?qū)嵗? | | 程序2-3: | | #include <iostream.h> int main (void) { 1. int workDays = 5; 2. float workHours, payRate, weeklyPay; 3. workHours = 7.5; payRate = 38.55; 4. weeklyPay = workDays * workHours * payRate; 5. cout << "Weekly Pay = " << weeklyPay << '\n'; } | | 第一行定義了一個(gè)整型變量workDays,并初始化為5,表示一周的工作天數(shù)。 第二行定義了三個(gè)實(shí)型變量,分別表示每天工作的小時(shí)數(shù)、每小時(shí)應(yīng)支付的薪水及每周應(yīng)支付的薪水。 第三行是兩個(gè)賦值語句。7.5 賦給變量workHours,38.55賦給變量payRate。 第四行是計(jì)算每周的工資,即三個(gè)變量workDays、workHours、payRate的積,*是乘運(yùn)算符,結(jié)果保存在變量weeklyPay變量中。 第五行輸出字符串"Weekly Pay = "、變量weeklyPay 的值和換行符。 本程序的運(yùn)行結(jié)果如下: Weekly Pay = 1445.625 如果我們定義一個(gè)變量時(shí),沒有給它賦初值,它的值是不定的。例如,在上面的第四行執(zhí)行前,weeklyPay的值是不定的。 變量第一次賦值稱之為初始化,變量在使用之前應(yīng)當(dāng)先初始化。
| | | | C++語言把字符型變量當(dāng)作一個(gè)較小的整型量,可以象整型量一樣使用它。下面舉一個(gè)例子說明: | | 程序2-6 | | #include <iostream.h> void main() { char c1 = 'a'; char c2 = 'b'; char c3,c4; c3 = c1 - ('a' - 'A'); c4 = c2 - ('a' - 'A'); cout<<c3<<c4<<endl; } 運(yùn)行結(jié)果為: A B | | 程序中的'a' - 'A'是大小寫字母之間的差值,其值為32。所以我們也可以把程序?qū)懗桑?br> c3 = c1 - 32; c4 = c2 - 32; 如果我們想看一看c3、c4中到底存儲的值是多少,可以這樣: cout<<(int)c3<<(int)c4<<endl; 其運(yùn)行結(jié)果為: 65 66 注意:在內(nèi)存中,字符數(shù)據(jù)以ASCII碼存儲,即以整數(shù)表示,'0'和0是不同的。 | | 例2-1: | | '\n' // 換行 '\r' // 回車 '\t' // 水平tab '\v' // 垂直tab '\b' // 退格 '\f' // 進(jìn)紙 '\'' // 單引號 (') '\"' // 雙引號 (") '\\' // 反斜杠 (\) | | | | 例2-2: | | '\12' //換行(10進(jìn)制編碼 = 10) '\11' // 水平tab (10進(jìn)制編碼= 9) '\101' // 'A' (10進(jìn)制編碼= 65) '\0' // null (10進(jìn)制編碼= 0) | |
| |
|