C++順序結構(3)、資料型別_____教學

gdyyx發表於2024-10-18

一、設定域寬setw()

輸出的內容所佔的總寬度成為域寬,有些高階語言中稱為場寬。
使用setw()前,必須包含標頭檔案iomanip,即#include<iomanip>
標頭檔案iomanip,用來宣告一些“流運算子”,需要一定格式輸入輸出時,就需要用到它,比較常用的有設定域寬、設定左右對齊、設定實數的精確度等。
setw(n)的作用是設定輸出寬度為n,預設為右對齊,並且用空格填充。例如:cout << std::setw(5) << "0" << "1" << endl,該語句就是設定字串"0"的輸出寬度為5,預設為右對齊,空格填充。若想使用其他符號填充(例如用'*'填充),則可以用cout << std::setw(5) << setfill('*') << "0" << "1" << endl;如果想修改成左對齊,則只需要在std::setw(n)之前加上std::left即可。
setw()只對直接跟在後面的輸出資料起作用。
當要輸出的字串寬度大於setw設定的寬度n時,直接輸出想要輸出的字串即可(此時忽視setw設定的寬度)。

透過執行如下測試程式碼即可瞭解setw()的規則:

#include <iomanip>
#include <iostream>
#include<string.h>
using namespace std;
int main()
{
	/*預設為右對齊,此時加不加std::right都可以 */
	cout << std::setw(5) << "0" << "1" << endl;
	cout << std::setw(5) << "00" << "1" << endl;
	cout << std::setw(5) << "000" << "1" << endl;
	
	/*用<<left或者std::left改成左對齊*/
	cout << std::left << std::setw(5) << "0" << "1" << endl;
	cout << std::left << std::setw(5) << "00" << "1" << endl;
	cout << std::left << std::setw(5) << "000" << "1" << endl;
 
	/*當要輸出的字串寬度大於setw設定的寬度時,直接輸出想要輸出的字串即可*/
	cout << std::right <<std::setw(5) << "0000000" << "1" << endl;
 
	/*用其他符號填充*/
	cout << std::right <<std::setw(5) << setfill('*') << "0" << "1" << endl;
	cout << std::left << std::setw(5) << setfill('*') << "0" << "1" << endl;
 
	return 0;
}

英漢小詞典:
iomanip:io是輸入輸出的縮寫;
manip:是manipulator(操縱器)的縮寫;
setw:set width的縮寫,設定域寬;

二、cin語句

cin>>a;輸入一個數並賦值給變數a。
習慣上,將"cin"和流提取運算子">>"實現的輸入語句簡稱為cin語句。
C++程式語言I/O流中的標準輸入流,需要包含iostream標頭檔案,即#include ,cin 分為兩個音節 讀為 "c in",音標 "/si:ɪn/"。
cin代表標準輸入裝置,使用右移運算子 ">>" 從裝置鍵盤取得資料,送到輸入流物件cin中,然後送到記憶體。

使用cin可以獲得多個從鍵盤的輸入值,其具體使用格式如下:
cin >> 變數1 >>變數2...>>變數n

示例:風之巔小學向全校師生髮出“植樹造林,還我綠色”的倡議,鼓勵大家多植樹,創造綠色家園,同學們都積極響應。向日葵班有43人,平均每人種2棵樹;蘋果班42人,平均每人種3棵樹;草莓班45人,平均每人種2棵樹。
當程式執行時,每班人數和平均每人種的顆數由客戶輸入,程式算出該班種的總顆數。
每個班的學生人數是不一樣的,平均每人種樹的棵數也會不一樣,每次執行時都要更改程式,很不方便。能不能實現這樣的功能:當程式執行時,每個班的人數和平均每人種的棵數由我們自己輸入,程式能根據輸入的數值計算出總的棵數?
由cin來實現,如cin>a的作用是輸入一個數並賦值給變數a。

三、輸入輸出.格式化

1. 輸出

對於格式化輸出,本節課將學習兩個函式 scanf()printf() 來取代之前的cin和cout方法;

  • 假如,我們要輸出一組運算等式:1 + 2 = 3,而1是變數a,2是變數b,3是a+b的運算結果;
int a = 1, b = 2;
// cout
cout << a << " + " << b << " = " << a + b;

cout << endl;

// printf
printf("%d + %d = %d", a, b, a + b);
  • printf() 函式極其方便的原因,它可以先按照自己的輸出格式,先寫出來,不需要頭腦翻譯;

  • 然後把需要替換成變數的部分,用 %d 來表示即可,而後續對應的位置換成變數或表示式運算即可;

  • %d 這裡表示佔位的內容 是 整型,也有各種其它的佔位符,這裡羅列出常用的幾個:

    佔位控制符 說明
    %d 整數
    %f 浮點數(float)
    %c 字元
    %s 字串
  • 最終的語法結構如下:

    printf(格式控制符, 佔位替換列表)
    

2. 輸入

  • 從上面例子中,我們使用 scanf() 函式來控制輸入:

    int a, b;
    // scanf
    scanf("%d %d", &a, &b);
    
    // printf
    printf("%d + %d = %d", a, b, a + b);
    
  • 先了解下輸入引數的格式需求:

    scanf(格式控制符, 地址集)
    

四、單精度實數float

例程1:金字塔的底是正方形,側面由四個大小相等的等腰三角形構成。試編一程式,輸入底和高,輸出三角形的面積。

五、整除及整除求餘運算子的應用

"%"在C++中是整除求餘的運算子,又叫模運算子。
例程1:試編一程式,輸入一個兩位數,交換十位與個位上的數字,並輸出。

六、ASCII碼與字元型

計算機中的所有資料在儲存和運算時都是用二進位制數表示,而具體用哪些二進位制數字表示,每個人都可以約定自己的一套編碼。大家如果想要互相通訊而不造成混亂,那麼就必須使用相同的編碼規則,於是美國有關的標準化組織就出臺了ASCII編碼(美國標準資訊交換程式碼)。標準ASCII碼(基礎ASCII碼)使用指定的7位二進位制陣列合來表示128種可能的字元。基本的 ASCII 字符集共有 128 個字元,其中有 96 個可列印字元,包括常用的字母、數字、標點符號等,另外還有 32 個控制字元。雖然標準 ASCII 碼是 7 位編碼,但由於計算機基本處理單位為位元組( 1byte = 8bit ),所以一般仍以一個位元組來存放一個 ASCII 字元。每一個位元組中多餘出來的一位(最高位)在計算機內部通常保持為 0 (在資料傳輸時可用作奇偶校驗位)。

字元 ASCII值 字元 ASCII值
空格 32 0 48
9 57 A 65
Z 90 a 97
z 122


將一個字元常量存放到記憶體單元時,實際上並不是把該字元本身存放到記憶體單元中,而是將該字元相應的ASCII碼存放到儲存單元中。如下圖,字元變數k的值為'A'。


既然字元資料是以ASCII碼儲存的,它的儲存形式就與整數的儲存形式類似。這樣,C++中字元型資料和整型資料之間就可以互相通用。一個字元資料可以賦給一個整型變數,反之,一個整型資料可以賦給一個字元變數。對字元資料進行算術運算,其實對它們的ASCII碼進行算術運算。
字元型資料,只能包含一個字元,用一對單撇號括起來,如'+'、'b'、'8'、'#'等,用關鍵字char定義字元型變數。

例程:試編一程式,輸入一個小寫字母,輸出其大寫字母。

注:字元'A'的ASCII碼是65,字元'a'的ASCII碼是97,兩者的差值為32。

七、 資料型別.轉換

1. 資料型別

型別名 型別宣告 解釋說明
整型 int -2147483648 到 2147483647 的範圍的整數
長整形 long long 比上面大很多很多,這裡裝不下,具體搜尋
字元型 char 賦值只能是一個字元,比如 'A',必須用單引號,雙表示字串不是字元
浮點型 float 也叫實型或小數型,38位以內的小數,只保留6為有效數字
  • 其實還有很多型別,暫時先理解這幾個,後續用到的再單獨講解;

    // 字元型,切記是單引號
    char ch = 'a';
    

// 長整形
long long b = 100000000000000000;
// 浮點型,只能六位
float c = 3.1415926;
cout << b << endl;
cout << ch << endl;
cout << c << endl;
return 0;

### 2. 型別轉換

- 這裡我們只探討整數和小數之間的轉換,其它的放到以後;

- 型別轉換分為兩種:隱式轉換和強制轉換;

```c++
// 兩邊都是整數,結果也是整數:1
cout << 8 / 5 << endl;
// 兩邊有一邊是浮點,結果是浮點:1.6
cout << 8.0 / 5 << endl;
// 強制轉換浮點,float()是轉換函式,將整數轉換成浮點數,8叫做引數
cout << float(8) / 5 << endl;
// 強制轉換整型
cout << int(3.14 * 5.25) << endl;

3. 保留小數點

  • 首先要引入相關庫:

  • 其次使用 setprecision(n) 函式 來設定保留小數點的位數;

    // 輸出保留的小數點
    // fixed可以在缺少的位數補零,這樣就精確保證2位
    cout << fixed << setprecision(2) << 3.1415926;
    

相關文章