第四讲 基础运算之小数运算
第四讲 基础运算之小数运算
🎯 一、认识操纵器 manipulate
操纵器是C++中控制输入/输出格式的特殊工具,通过 <<
或 >>
与流对象(如 cout
)交互。分为两类:
- 无参数操纵器:如
endl
(换行+刷新缓冲区)、hex
(十六进制输出)。 - 带参数操纵器:如
setw(n)
(设置字段宽度)、setprecision(n)
(控制精度),需包含<iomanip>
头文件。
#include <iostream>
#include <iomanip>
using namespace std;
int main() {cout << hex << 255; // 输出 ff(十六进制)cout << setprecision(3) << 3.14159; // 输出 3.14
}
类别 | 操纵器 | 功能 | 示例 |
---|---|---|---|
数值进制 | hex /oct /dec | 十六/八/十进制输出 | cout << hex << 15; → f |
浮点控制 | fixed | 固定小数显示 | cout << fixed << 3.0; → 3.000 |
setprecision(n) | 设置小数位数 | cout << setprecision(2) << 3.141; → 3.14 | |
宽度与对齐 | setw(n) | 设置字段宽度(仅对下一个输出生效!) | cout << setw(5) << "Hi"; → Hi |
left /right | 左/右对齐 | cout << left << setw(5) << "Hi"; → Hi | |
setfill(c) | 填充字符(默认空格) | cout << setfill('*') << setw(5) << "Hi"; → ***Hi | |
符号显示 | showpos | 显示正数的 + 号 | cout << showpos << 42; → +42 |
布尔值 | boolalpha | 输出 true /false (非1/0) | cout << boolalpha << true; → true |
流控制 | endl | 换行 + 刷新缓冲区(性能慎用!) | cout << "Hello" << endl; |
⚠️ 避坑指南
setw
的陷阱:如setw(n)
只影响紧接的下一个输出。cout << setw(5) << "A" << "B"; // "A"占5位,"B"不受影响 → " AB"
endl
的性能问题:频繁使用会刷新缓冲区,降低效率,可用'\n'
代替。
- 进制切换后忘记恢复:如
hex
会一直生效,直到改为dec
cout << hex << 15; // 输出 f cout << 16; // 输出 10(仍是十六进制!) cout << dec; // 记得切回十进制!
🎯 三、小数运算
3.1 常用词汇
单词 | 含义 | 备注 |
---|---|---|
fixed | 固定的 | /fɪkst/ |
set | 设置 | /set/ |
precision | 精确、精度 | /prɪˈsɪʒn/ |
setprecision | 设置精度 | 组合词 |
manipulate | 操纵、操作器 | /məˈnɪpjuleɪt/ |
💡 重要特性:
- setw设置的宽度如果小于字段宽度会失效;
- fixed固定的意思,在cout时,强制的把float类型和double类型输出小数,而不是科学计数法的形式。
- setprecision(),设置输出的小数的小数点后显示几位,比如setprecision(2)表示小数点后显示两位。
3.2 案例实操
💡小学的运算注意以下问题:
- 小数和小数或小数和整数运算,得到的结果是小数。
- 整数和整数运算,得到的结果是整数。
- 整数转换成小数的方法是乘1.0;
- 注意存储数据时使用的数据类型;eg:整数用int 、小数用double
1031
- -【入门】温度转换(课堂讲解)
题目描述: 编一程序,将摄氏温度换为华氏温度。公式为:f=9/5*c+32。其中f为华氏温度,c是摄氏温度。
输入: 输入一行,只有一个整数c
输出: 输出只有一行,包括1个实数。(保留两位小数)
样例: 输入
50 输出
122.00
参考程序
#include <iostream> //输入输出流头文件
#include <iomanip> //通过此头文件调用控制符
using namespace std;
int main(){int c;//摄氏度 double f;//华氏度 //输入摄氏度ccin>>c;//计算华氏摄氏度f = 9.0 / 5 * c + 32;//输出结果;四舍五入保留2位小数;cout<<fixed<<setprecision(2)<<f<<endl;return 0;
}
1337
- -【入门】求花坛的面积
题目描述: 龙湖校区有一个圆形花坛,量得花坛周围的篱笆长是x米,请问该花坛的面积是多少平方米?(假设π=3.14)(5.2.99)
输入: 一个小数x
输出: 花坛的面积(结果保留2位小数)
样例: 输入
:18.84 输出
:28.26
说明: 圆的面积和周长求解公式分别如下;
圆的面积S = π * 半径 * 半径;(π读作pài,π = 3.1415926…,在具体的题目中π的值精确到小数点后多少位,取决于具体的题目):圆的周长C = π * 2 * 半径;
参考程序:
#include<iostream>
#include<iomanip>
using namespace std;
int main(){//已知条件:圆形花坛篱笆周长是x米//求:该花坛的面积 double p=3.14,r,x,s;cin>>x;//通过周长求半径r:x=p*2*r;r=x/p/2;//求半径s=r*r*p;//求面积cout<<fixed<<setprecision(2)<<s<<endl;
}
1345
– 【入门】玫瑰花圃
题目描述: 有一块n * n(n>=5,且n是奇数)的红玫瑰花圃,由n * n个小正方形花圃组成,现要求在花圃中最中间的一行、最中间的一列以及4个顶点处种植粉色玫瑰,请问粉玫瑰占地面积占整个玫瑰花圃总面积的百分比是多少?
如n=5,花圃形状如下,粉玫瑰占地百分比 = 13/25 = 52.0%
如n=7,花圃形状为如下,粉玫瑰占地百分比 = 17 / 49 = 34.7%
输入: 一个整数n (n>=5,且n是奇数)
输出: 粉玫瑰占总玫瑰园的百分比,结果保留1位小数,显示为百分比的形式
样例: 输入
:5 输出
:52.0%
参考程序:
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
//读题可得求粉玫瑰的计算公式为:n*2-1+4
//由于题目的输出要求是以百分比的形式输出,所以计算结果要扩大100倍;int n;cin>>n;double s;s=(n*2-1+4)*100/(n*n);cout<<fixed<<setprecision(1)<<s<<"%"<<endl;
}
💡 本节课后作业在OJ小组内发布 伊娃编程OJ题库