零零碎碎知识点

357 阅读4分钟

一, fixed << setprecision()的用法

让我详细解释 的用法:fixed << setprecision(3)

  1. fixed

    • 强制以固定小数点表示法显示浮点数
    • 不使用科学计数法表示
    • 比如 1234.5678 就会显示为 1234.5678,而不是 1.2345678e+03
  2. setprecision(3)

    • 设置精度为3位
    • 当与 fixed 一起使用时,表示小数点后保留3位
    • 如果不搭配 fixed 使用,则表示有效数字为3位
  3. 举例说明:

cpp
Copy
double num = 123.4567;

// 不使用 fixed
cout << setprecision(3) << num << endl;    // 输出:123

// 使用 fixed
cout << fixed << setprecision(3) << num << endl;    // 输出:123.457
  1. 在你的代码中的作用:
cpp
Copy
double cola = 500.0 / 3;  // 结果约等于 166.6666666...
cout << fixed << setprecision(3) << cola << endl;  // 输出:166.667

总结:

  • fixed << setprecision(3)的组合确保了输出结果严格保留小数点后3位
  • 这正好满足了题目要求的"严格精确到小数点后3位"
  • 它会自动进行四舍五入,保证输出的准确性

问:表示有效数字为3位,是四舍五入后留三位的意思吗

答 :让我解释有效数字和小数位的区别:

  1. 有效数字
  • 表示一个数字中有意义的数字的个数
  • 例如:使用 但不使用 :setprecision(3)``fixed
cpp
Copy
double num = 123.4567;
cout << setprecision(3) << num << endl;  // 输出:123  (保留3个有效数字)
double num2 = 1.23456;
cout << setprecision(3) << num2 << endl;  // 输出:1.23  (保留3个有效数字)
  1. 小数位数(使用fixed)
  • 表示小数点后保留的位数
  • 例如:使用 :fixed << setprecision(3)
cpp
Copy
double num = 123.4567;
cout << fixed << setprecision(3) << num << endl;  // 输出:123.457
double num2 = 1.23456;
cout << fixed << setprecision(3) << num2 << endl;  // 输出:1.235
  1. 两者的区别:
cpp
Copy
double num = 1234.5678;

// 有效数字3位(不用fixed)
cout << setprecision(3) << num << endl;      // 输出:1.23e+03

// 小数点后3位(用fixed)
cout << fixed << setprecision(3) << num << endl;  // 输出:1234.568

所以:

  • 单独的 是保留3个有效数字setprecision(3)
  • fixed << setprecision(3)是保留小数点后3位
  • 两种情况都会进行四舍五入
  • 题目要求是保留小数点后3位,所以我们使用fixed << setprecision(3)

问:如果只使用fixed呢

答:让我通过代码演示只使用 的效果:fixed

cpp
Copy
#include<iostream>
#include<iomanip>
using namespace std;

int main() {
    double num = 123.4567;
    
    // 1. 默认情况下(不使用fixed)
    cout << "默认输出:" << num << endl;  
    
    // 2. 只使用fixed
    cout << "只用fixed:" << fixed << num << endl;  
    
    // 3. 使用fixed和setprecision
    cout << "fixed和setprecision(3):" << fixed << setprecision(3) << num << endl;
    
    return 0;
}

输出结果:

Copy
默认输出:123.457
只用fixed:123.456700
fixed和setprecision(3):123.457

解释:

  1. fixed单独使用时:

    • 会强制使用固定小数点表示法
    • 默认会显示小数点后6位(这是C++的默认精度)
    • 不会进行四舍五入处理
  2. 这就是为什么我们需要同时使用 和 :fixed``setprecision(3)

    • fixed确保使用固定小数点表示法
    • setprecision(3)控制小数点后只保留3位
    • 两者结合才能满足题目要求

二,整数除法与浮点数除法

在C++中,当两个整数进行除法运算时,结果会自动向下取整(截断小数部分)。

让我用例子详细解释:


// 整数除法
int result1 = 1/2;    // 结果是0,因为1和2都是整数
double result2 = 1/2; // 结果仍是0,因为先进行整数除法得到0,然后才转换为double

// 浮点数除法
double result3 = 1.0/2;  // 结果是0.5,因为有浮点数参与运算
double result4 = 1/2.0;  // 结果是0.5,因为有浮点数参与运算

三.求根函数

C++中求根有几种常见方法:

  1. 使用 库中的 函数(求平方根):cmath``sqrt()
#include <cmath>
#include <iostream>
using namespace std;

int main() {
    double x = 16;
    double result = sqrt(x);  // 求平方根
    cout << result << endl;   // 输出:4
    
    // 也可以直接对表达式求根
    cout << sqrt(25) << endl; // 输出:5
    return 0;
}

四.for(int x : arr)用法

cpp
Copy
for(int x : arr) cout << x << " ";
  1. 这是 C++11 引入的新特性,称为范围用于循环,用于简化遍历操作。

  2. 语法解析:

    • for: 循环关键字
    • int x: 声明一个变量x,用于存储当前遍历到的元素
    • :: 范围运算符,表示"在...里面"
    • arr: 要遍历的数组
    • cout << x << " ": 循环体,打印当前元素和一个空格
  3. 工作原理:

    • 自动遍历 arr 数组中的每个元素
    • 每次遍历时,将当前元素的值复制给变量 x
    • 然后执行循环体(这里是输出操作)
  4. 等价的传统 for 循环写法:

cpp
Copy
// 方式1:使用下标
for(int i = 0; i < 5; i++) {
    cout << arr[i] << " ";
}

// 方式2:使用指针
for(int* p = arr; p < arr + 5; p++) {
    cout << *p << " ";
}