实践巩固
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>