課課通第2單元第1課-COUT語句
實踐鞏固
1.寫出程式的執行結果
#include<iostream>
using namespace std;
int main(){
int a,b,c,d,ans;
a = 2; b = 3; c = 4;
d = a - b; //2-3=-1
a = d + c; //-1+4=3
ans = a * b; //3*3=9
cout << "Ans = " << ans << endl;
return 0;
}
結果:Ans = 9
__________________________________________________________
2.體會實數的輸出格式
#include<iostream>
#include<iomanip> //格式函式的標頭檔案
using namespace std;
int main(){
cout << 10.0 / 6.0 << endl;
cout << fixed << setprecision(8) << 10.0 / 6.0 << endl;
return 0;
}
輸出:
1.66667
1.66666667
為什麼是1.66667呢,在C++中float能夠精確到小數點後6位,並且四捨五入。這裡涉及float的儲存。
十進位制中的9,在二進位制中的表示形式是1001,這裡也就告訴我們,表示十進位制中的一位數在二進位制中需要4bit,所以我們現在float中具有24bit的精度,所以float在十進位制中具有24/4=6,所以在十進位制裡,float能夠精確到小數點後6位。同理,具有53bit精度的double型別能夠精確到小數點後13位。
fixed 以普通小數形式輸出浮點數
setprecision(n) 設定輸出浮點數的精度為 n。
在使用非 fixed 且非 scientific 方式輸出的情況下,n 即為有效數字最多的位數,如果有效數字位數超過 n,則小數部分四舍五人,或自動變為科學計 數法輸出並保留一共 n 位有效數字.
在使用 fixed 方式和 scientific 方式輸出的情況下,n 是小數點後面應保留的位
數
3.體會把整數以不同進位制的形式輸出
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
int a;
cin >> a;
cout << "dec:" << dec << a << endl; //以十進位制形式輸出整數
cout << "hex:" << hex << a << endl; //以十六進位制形式輸出整數
cout << "oct:" << setbase(8) << a << endl; //以八進位制形式輸出整數
return 0;
}
輸入:17
輸出:
dec:17
hex:11
oct:21
ios::dec 以10進製表示整數
ios::hex 以16進製表示整數
ios::oct 以8進製表示整數
ios::showbase 為整數新增一個表示其進位制的字首
ios::internal 在符號位和數值的中間插入需要數量的填充字元以使串兩端對齊
ios::left 在串的末尾插入填充字元以使串居左對齊
ios::right 在串的前面插入填充字元以使串居右對齊
ios::boolalpha 將bool型別的值以true或flase表示,而不是1或0
ios::fixed 將符點數按照普通定點格式處理(非科學計數法)
ios::scientific 將符點數按照科學計數法處理(帶指數域)
ios::showpoint 在浮點數表示的小數中強制插入小數點(預設情況是浮點數表示的整數不顯示小數點)
ios::showpos 強制在正數前新增+號
ios::skipws 忽略前導的空格(主要用於輸入流,如cin)
ios::unitbuf 在插入(每次輸出)操作後清空快取
ios::uppercase 強制大寫字母
以上每一種格式都佔用獨立的一位,因此可以用“|”(位或)運算子組合使用。呼叫setf/unsetf或flags設定格式一般按如下方式進行:
cout.setf(ios::right | ios::hex); //設定16進位制右對齊
cout.setf(ios::right, ios::adjustfield); //取消其它對齊,設定為右對齊
預設包含的標頭檔案均為:
#include <iomanip>
#include <iostream>