官术网_书友最值得收藏!

標準數據類型

C++語言提供了豐富的數據類型,如整數類型、實數類型(浮點數)、字符類型等。每種數據類型均有其取值范圍,Dev-C++(4.9.9.2)是Windows平臺下的32位編譯器,基本數據類型的取值范圍如表1.1所示(方括弧內的部分是可以省寫的,例如,signed int與int等價)。

表1.1

現在的計算機普遍使用二進制(即0和1兩個數碼)來存儲數據。二進制位(bit)是計算機存儲信息的最小單位,代表1個二進制數位,其值為0或1,可以表示兩個狀態/數值。

8個連續的二進制位為一個字節,可以存放1個西文字符的編碼(ASCII碼)。1個漢字占兩個字節。

表1.1列出的整數類型的取值范圍均包含有負數,如果程序中需要用到的某數據類型的取值范圍僅為正數,并且永遠不可能取負數時,則可以使用無符號的數據類型,其取值范圍如表1.2所示。

表1.2

使用無符號類型的整數類型,正整數的最大數據范圍擴大了一倍啊。這對于某些數據規模較大的題目來說,如果不涉及負數的運算,使用無符號類型的整數類型,倒是很方便的。

sizeof函數可用于獲取各數據類型的字節長度,例如獲取long型字節長度可這樣寫:

    cout <<sizeof(long);

了解所使用的編譯器支持的各數據類型的字節長度很有必要,可以這樣寫:

    cout<<"int的字節長度為"<<sizeof(int)<<endl;
    cout<<"short的字節長度為"<<sizeof(short)<<endl;
    cout<<"long的字節長度為"<<sizeof(long)<<endl;
    cout<<"long long的字節長度為"<<sizeof(long long)<<endl;
    cout<<"bool的字節長度為"<<sizeof(bool)<<endl;
    cout<<"char的字節長度為"<<sizeof(char)<<endl;
    cout<<"float的字節長度為"<<sizeof(float)<<endl;
    cout<<"double的字節長度為"<<sizeof(double)<<endl;
    cout<<"long double的字節長度為"<<sizeof(long double)<<endl;

【例題描述】 兩整數相加

輸入兩個整數,計算兩整數相加的和。

1 /*
2  這是一個加法程序
3 */
4 #include <iostream>
5 using namespace std;
6 
7 int main()
8 {
9  int a,b,c;                  //定義變量a,b,c
10  cout <<"請輸入a,b的值:";              //顯示提示信息
11  cin >> a >>b;                   //從鍵盤輸入a和b的值
12  c=a+b;                                  //計算a和b的和,并把結果放在c中
13  cout <<a<<"+"<<b<<"="<<c<<endl;//顯示結果
14  system("pause");
15  return 0;
16 }

第1~3行中的/*…… */是C++語言里的注釋語句,用于注釋多行的語句。

//也是C++語言里的注釋語句,用于注釋當前這一行的語句。

所謂注釋語句只是方便閱讀程序的人理解程序所寫的語句,對編譯和運行不起任何作用,當編譯程序時,將自動忽略注釋語句,所以注釋語句的多少不影響程序運行的快慢。為便于理解,一般注釋語句可用中文表示,當然也可以用英語或漢語拼音作注釋。適當地添加注釋語句是編程的一個好習慣。

int a,b,c;定義了a,b,c三個整型變量,所有的變量必須先定義后使用。

第11行是輸入語句。cin代表標準輸入流設備即鍵盤,輸入操作由運算符“>>”來表達,它表示通過標準輸入設備輸入右邊的數據。cin>>a>>b這條語句是表示從鍵盤輸入兩個整數,cin一次可輸入多個變量的值,注意輸入時數與數之間要以空格間隔。

第12行是表達式語句,即計算a+b的值,并將結果存儲在c中。

第13行最后的endl用于換行,相當于前面用過的'\n'。endl與'\n'有細微的差別,endl除了輸出換行外,還刷新了流,在Cena評測系統(一個可自動評測代碼是否正確的軟件)中,有時使用endl會隨機地導致程序無法通過。

我發現一個小技巧,就是在調試程序過程中,如果暫時不想運行某段代碼,其實無須將它刪除,只需將這段代碼注釋掉就可以了。

可是我又發現一個問題,就是我不小心在輸入數據時多輸入或者少輸入了數字,甚至輸入的根本就是錯誤字符,可是程序仍然會得出結果,雖然這結果是錯誤的。

從鍵盤輸入數據時,需嚴格按輸入語句要求的格式輸入,例如上例中,當a=1,b=2時,cin>>a>>b語句的正確輸入格式應該是輸入半角字符12后回車,其中1和2之間以一個或多個空格分隔,但不能是其他符號。諸如從鍵盤輸入“a=1,b=2”,或者“1,2”之類的格式均是錯誤的。

需要注意的是,如果輸入數字的時候錯誤地輸入了其他字符,在C語言里會將該字符自動轉換為該字符相對應ASCII碼,但C++語言會直接忽略該字符,而直接代之以內存中當前位置的原始儲存值。

此外,輸入輸出語句應嚴格按照格式編寫,例如不能寫成cin>>a,b,c;或者cout<<a+b=c之類的。即輸入輸出的字符串、各變量之間應使用“>>”或“<<”分隔。

C++程序對用到的所有數據都必須指定其數據類型。程序中常需要對一些變量預先設置初值。C++語言允許在定義變量的同時使變量初始化。例如:

    int a=5;     //指定a為整型變量,初值為5
    float f=3.45;   //指定f為實型變量,初值為3.45
    char c= 'a ';     //指定c為字符變量,初值為'a '

其中諸如int a=5這樣的語句,相當于下面兩條語句:

    int a;
    a=5;

也可以使被定義的變量的一部分賦初值。如:

    int a,b,c=5;      //定義了整型變量a,b,c,其中c的初值為5,注意a,b,c之間用逗號分隔。

如果對幾個變量均賦予初值5,應該寫成:

    int a=5,b=5,c=5;

不能寫成int a=b=c=5;

數據類型一經確定,即不再更改,所以變量類型的定義應視程序的實際需要而定,選取數據類型過大會降低運算速度、浪費內存空間,過小會發生數據溢出。

C++程序用到的算術運算符如表1.3所示。

表1.3

C++語言沒有提供數學中的中括號和大括號運算符,而統一以圓括號代替,例如數學算式:{[3-(2-9)]-[(6-10)-(5-17)]},寫成C++的表達式為((3-(2-9))-((6-10)-(5-17))),計算時由內到外計算圓括號里的值。

順便提一下,諸如x2+y2這樣的式子,寫成C++的表達式為x*x+y*y。

諸如a*b+a*c這樣的表達式,注意千萬不要寫成ab+ac這樣的數學算式了,初學者常犯這樣的隱蔽錯誤。

現在自己嘗試著編程解決一些復雜的算式。例如輸入三個整數a,b,c,輸出a3+b3+c3的值。

哈哈,這個簡單,看我的關鍵代碼如下:

int a,b,c; cin>>a>>b>>c; cout<<a*a*a+b*b*b+c*c*c<<"\n";

可是為什么當a=1000,b=1000,c=1000時,結果居然是-1294967296呢?

每種類型的數據都有各自的取值范圍,請勿必確保所定義的數據不超過該類型數據的取值范圍,否則會造成數據的溢出并產生結果錯誤。請注意,數據的溢出在編譯和運行時并不報錯,完全要靠編程者的細心和經驗來保證結果的正確性。

下面的程序顯示了整型數據溢出的錯誤。

1 //整型數據的溢出
2 #include <iostream>
3 using namespace std;
4
5 int main()
6 {
7  int a=2147483647;
8  a=a+1;
9  cout<<"a ="<<a<<endl;
10  system("pause");
11  return 0;
12 }

運行結果為:

    a=-2147483648

我明白了,變量a在自身加1以后,其值已經超過int型數據的取值范圍,而發生錯誤。這就好像汽車的里程表一樣,當達到最大值以后,又從最小值開始計數。

【上機實踐】 梯形面積

如圖1.18所示,圣魔法學院的主教學樓平面圖是一個梯形,已知梯形的上底和下底的長度分別為15公里和30公里,梯形中陰影部分為高級魔法師才能去的場所,其面積是160平方公里,求梯形面積是多少。

圖1.18

三角形的面積公式是(底×高)/2,由此可以算出梯形的高,再將高代入梯形面積公式(上底+下底)×高/2即可。

主站蜘蛛池模板: 江口县| 乌苏市| 昌乐县| 定陶县| 晋中市| 新安县| 富源县| 呼图壁县| 平阳县| 会同县| 吴旗县| 甘南县| 禹州市| 遂昌县| 三门峡市| 黎平县| 重庆市| 成都市| 柘城县| 昆山市| 巴马| 博乐市| 比如县| 焦作市| 新巴尔虎右旗| 江门市| 衡东县| 苍梧县| 铜陵市| 房产| 宝兴县| 锡林郭勒盟| 同仁县| 金乡县| 仪陇县| 焉耆| 全椒县| 澎湖县| 政和县| 墨竹工卡县| 繁峙县|