第四讲 基础运算之小数运算

发布于:2025-06-13 ⋅ 阅读:(21) ⋅ 点赞:(0)

第四讲 基础运算之小数运算


🎯 一、认识操纵器 manipulate

操纵器是C++中控制输入/输出格式的特殊工具,通过 <<>> 与流对象(如 cout)交互。分为两类:

  1. 无参数操纵器:如 endl(换行+刷新缓冲区)、hex(十六进制输出)。
  2. 带参数操纵器:如 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;

⚠️ 避坑指南

    1. setw 的陷阱:如 setw(n) 只影响紧接的下一个输出。
    cout << setw(5) << "A" << "B";  // "A"占5位,"B"不受影响 → "    AB"
    
    1. endl 的性能问题:频繁使用会刷新缓冲区,降低效率,可用 '\n' 代替。
    1. 进制切换后忘记恢复:如 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;//华氏度 
		//输入摄氏度c
		cin>>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题库