200 likes | 400 Views
ç¬¬äºŒç« . 基本的輸出與輸入. 大綱. 2.1 C++的輸出物件cout 2.2 cout ç‰©ä»¶çš„æ ¼å¼åŒ–å‡½å¼ 2.2.1 欄ä½å¯¬ è¨å®šï¼ cout.width(n); setw( ); 2.2.2 精確度è¨å®šï¼ cout.precision( ); setprecision( ) 2.2.3 進ä½åˆ¶è¨å®šï¼ dec, hex, oct 2.2.4 æŒ‡å®šå¤šé¤˜æ ¼æ•¸å—å…ƒï¼ cout.fill( ); setfill( ) 2.2.5 å°æ•¸ä½æ•¸è¨å®šï¼ cout.setf( ) 2.3 C++的輸入物件cin. 2. 1 C++ 的輸出物件 cout.
E N D
第二章 基本的輸出與輸入
大綱 • 2.1 C++的輸出物件cout • 2.2 cout物件的格式化函式 • 2.2.1 欄位寬設定- cout.width(n);setw( ); • 2.2.2 精確度設定-cout.precision( ); setprecision( ) • 2.2.3 進位制設定-dec, hex, oct • 2.2.4 指定多餘格數字元-cout.fill( ); setfill( ) • 2.2.5 小數位數設定-cout.setf( ) • 2.3 C++的輸入物件cin
2.1 C++的輸出物件cout • cout(唸做c-out)是C++的一個物件(Object) 。 • cout物件是<iostream>提供的物件,所以必須先引入該標頭檔。(#include <iostream>)。cout物件只要配合『<<』運算子就可以使用,基本格式為: • cout << “字串”; • cout << 變數名稱; • cout << ‘字元’; • cout <<(運算式); • 或上述混合使用 • “<<”為一插入(Insert)導向符號,將右邊資料及其格式傳給物件cout。
2.1 C++的輸出物件cout //未設定輸出欄寬為向左對齊 #include <iostream> //cout using namespace std; void main( ) { int i=1; cout<<"i=" << i << endl; cout<<"i*10=" << i*10 << endl; cout<<"i*100=" << i*100 << endl; return 0; }
2.2 cout物件的格式化函式 • cout物件會自行判斷變數的資料型態,這當然帶來了很大的方便,但似乎卻喪失了轉換輸出入變數資料型態的彈性,其實,並不是這樣子的,因為,我們也可以藉由其他屬於cout物件的相關函式來設定格式化的各種條件。 • 欄位寬設定-cout.width(); setw() • 填充字原設定-cout.fill(); setfill(); • 進位制設定-dec, hex, oct • 精確度設定-cout.precision(); setprecision() • 小數位數設定-cout.setf(ios::fixed, ios::floatfield); • 科學記號輸出-cout.setf(ios::scientific, ios::floatfield);
2.2.1 欄位寬設定-cout.width(n);setw(n) • 欄位寬設定之兩個敘述為 cout.width(n); setw(n) 其中n為正整數,表寬為n 。 • 使用setw(n)需包含一標題檔 • #include <iomanip> • 兩者皆只對下一輸出之資料有作用且資料向右對齊。 • 參數n,若資料位數比n小則不足位數以空白取代,若資料位數大於n則資料直接輸出而不捨去 ,如: • cout.width(4); • cout << 23; //結果為 ^^23 ( ^ 表空白) • cout << setw(4) <<12345; // 結果為12345
#include <iostream> //cout #include <iomanip> //setw( ) using namespace std; int main( ){ int i=1; cout << setw(5) << i << endl; cout << setw(5) << i*10 << endl; cout << setw(5) << i*100 << endl; cout << i << endl; cout << i*10 << endl; cout.width(5); cout << i*100 << endl return 0; } 2.2.1 欄位寬設定-cout.width(n);setw(n)
2.2.2 指定多餘格數字元-cout.fill();setfill (); • 指定多餘格數字元之兩個敘述為 cout.fill( ); setfill( ); ( )內需以一字元取代 ,如: • cout.fill(‘#’);輸出以「#」代替空白。 • 使用setfill( );需包含一標題檔 • #include <iomanip> • 配合欄寬cout.width()及setw()使用。 • 影響所有輸出。
#include <iostream> //cout #include <iomanip> //setw using namespace std; int main( ){ int i=1; cout.fill('#'); //設定填充字元為’#’ cout << setw(5) //設定輸出欄寬 << i << endl; cout << setw(5) << i*10 << endl; cout << setw(5) << i*100 << endl; return 0; } 2.2.2 指定多餘格數字元-cout.fill( );setfill ( ); 執行結果: ####1 //前面有4個# ###10 //前面有3個# ##100 //前面有2個#
2.2.3 十六進制、八進制與十進制之輸出 • 十進制為: dec (decimal) • 0, 1, 2, 3, 4, …, 9 • 十六進制為: hex (hexadecimal) • 0, 1, 2, 3, 4, …, 9, a, b, c, d, e, f • 八進制為: oct (octal) • 0, 1, 2, 3, 4, …, 7 • 設定後影響全部
2.2.3 十六進制、八進制與十進制之輸出 #include <iostream> //cout #include <iomanip> //setw using namespace std; int main( ){ int i=1; const int f = 5; //常數設定 cout.fill(‘#’); //設定填充字元 cout << setw(f) << hex << i << endl; //輸出16進位 cout << setw(f) << i*10 << endl; //輸出16進位 cout << setw(f) << oct << i*100 << endl; //輸出8進位 cout << setw(f) << dec << i*100 << endl; //輸出10進位 return 0; } 執行結果: ####1 ####a ##144 ##100
2.2.4 精確度設定-setprecision() • 對於浮點數而言,C++內定的小數位數為6位(小數點也算一位),而setprecision(n)函式可以用來設定輸出的小數點位數。 • 格式為:setprecision(n); • 需包含一標題檔 • #include <iomanip> • 影響所有輸出。
2.2.4 精確度設定-cout.precision() • cout.precision與setprecision函式功能相同,也是設定輸出的小數點位數。設定之後將影響之後所有的cout物件的輸出格式。(不必載入<iomanip>) • 格式為:cout.precision(n); • 用於浮點數資料 • 精確度之有效位數為整數位數加小數位數,參數n代表精確位數。 • 如:11.156代表精確度為5位,不含小數點
#include <iostream> //cout #include <iomanip> //setw using namespace std; int main( ){ const int f = 6; //設定輸出欄寬 float pi=3.14159; cout.fill(‘#’); cout << "有效精確度4位:\n"; cout.precision(4);//設定有效精確度 cout << setw(f) << pi << endl; cout << setw(f) << pi/4 << endl; cout << setw(f) << pi*10*10 << endl; return 0; } 2.2.4 精確度設定-cout.precision() 執行結果: 有效精確度4位: #3.142 0.7854 #314.2
2.2.5 設定浮點數之小數位數-cout.setf() • 以下兩敘述合用 • cout.setf (ios :: fixed, ios :: floatfield); • cout.precision(n); • fixed及floatfield皆定義在ios類別內。 • 使用需加上該類別名稱ios、範圍運算子(::)(Scope Resolution Operator)及成員。 • fixed: 固定小數位數n • floatfield: 浮點數欄位 • 若要恢復正常設定: cout.unsetf (ios :: floatfield);
#include <iostream> //cout #include <iomanip> //setw int main( ){ const int f=6; //設定輸出欄寬 float pi=3.14159; cout.fill(‘#’); cout << “小數位數2位,欄寬” << f << " 含小數點" << endl; cout.setf(ios::fixed, ios::floatfield);//定點小數 cout.precision(2);//設定小數位數2位 cout << setw(f) << pi << endl; cout << setw(f) << pi/4 << endl; cout<<setw(f)<< pi*10*10<<endl; return 0; } 2.2.5 設定浮點數之小數位數-cout.setf() • 執行結果: 小數位數2位,欄寬6 含小數點 ##3.14 ##0.78 314.16
2.2.6 科學記號輸出-cout.setf() • 科學記號輸出-cout.setf(ios::scientific, ios::floatfield); • 科學記號輸出固定小數位數- cout.setf(ios::scientific, ios::floatfield); cout.precision(n); • 恢復無科學記號輸出-cout.unsetf(ios::floatfield);
2.3 C++的輸入物件cin • cin 唸[si’in] • 自鍵盤讀取資料 • 輸入之格式 • cin>>變數名稱>>變數名稱 … ; • 右向插入運算子”>>”乃cin自鍵盤取得資料,再將資料傳送給其後之變數 • 運算子”>>”之後除了變數外不得有其它數字、字串或字元符號,如: • cin >> “a=” >> a; //錯誤,含字串”a=” • cin >> ‘a’ >> a; //錯誤,含字元’a’
2.3 C++的輸入物件cin • cin後之變數可為任何資料型態 • 16進位輸入則數字前需冠以『0x』或『0X』,如0x3A或0X3A • 8進位輸入則數字前需冠以『0』,如0123 • 輸入科學記號,需加入『e』或『E』,如3e8或3E8 • 輸入之前應有一提示文字,如: • cout << “輸入兩整數:”; • cin >> a >> b;
本章習題 • 由鍵盤輸入圓半徑並輸出圓半徑與面積。(pi=3.14159) • 由鍵盤任意輸入5個整數,求總和與平均。 • 由鍵盤任意輸入1個整數,分別輸出其十進位,十六進位,八進位數。 • 撰寫一個程式分別輸入你的生日(yyyy年,mm月,dd日),並輸出。(輸出格式為mm/dd/yyyy) • 寫一程式利用欄位寬設定輸出一個用’*’堆成的等腰三角形。(最上層1個’*’,第二層3個’*’,第三層5個’*’, …, 最後一層11個’*’ )