GESP7级C++考试语法知识(三、对数函数(1、认识对数)


🌟数学魔法函数学院

第八课《寻找指数小偷------认识对数》

------ 当结果知道了,指数跑哪去了?


🎯 本课学习目标

学完本课后,你将掌握:

✅ 什么是对数

✅ 对数与指数的关系

✅ 为什么要发明对数

✅ C++中的 log() 函数

✅ 如何利用对数反求指数

✅ 对数在信息学竞赛中的应用


🏰 一、故事开始:指数小偷失踪案

一天,程序王国发生了一件奇怪的事情。


1、数学宝库里有一张神秘纸条:

复制代码
2 ? = 1024

2、国王急坏了:

复制代码
指数不见了!

3、原来:

复制代码
?

的位置被神秘小偷偷走了。


4、国王下令:

谁能找到这个指数,

就封他为皇家数学侦探!


于是阿Q开始调查。


🔍 二、先回顾指数函数

阿Q想:

1、以前学过:

复制代码
2¹ = 2

2² = 4

2³ = 8

2⁴ = 16

2⁵ = 32

2、继续往后:

复制代码
2⁶ = 64

2⁷ = 128

2⁸ = 256

2⁹ = 512

2¹⁰ = 1024

3、终于发现:

复制代码
2¹⁰ = 1024

4、所以小偷藏起来的数字是:

复制代码
10

❓ 三、问题来了

刚才我们是一个个试出来的。


1、如果变成:

复制代码
2 ? = 1048576

怎么办?


2、或者:

复制代码
3 ? = 59049

怎么办?


3、难道要一直乘下去?


太麻烦了!


4、于是数学家发明了一个超级工具:

对数(Logarithm)


📖 四、什么是对数?

1、数学家规定:

如果:

复制代码
a^x=b

2、那么:

对数定义为:


3、我们简单理解下:

a要乘自己多少次,

才能得到b?


4、例如:

复制代码
2¹⁰ = 1024

那么:


意思:

复制代码
2要乘自己10次
才能得到1024

🎮 五、把对数理解成侦探

1、指数逆计算:

复制代码
2¹⁰ = 1024

(1)已知:

复制代码
底数
2

(2)和结果:

复制代码
1024

(3)求:

复制代码
10

2、这时:

复制代码
对数

就像侦探一样。

专门负责寻找失踪的指数。


3、所以:

复制代码
指数函数

负责:

复制代码
已知指数
求结果

4、而:

复制代码
对数函数

负责:

复制代码
已知结果
求指数

⚖️ 六、指数与对数是一对好朋友

1、看看这两个式子:


(1)指数形式:

cpp 复制代码
10 ^ 2  =100

(2)对数形式:


cpp 复制代码
lg100 = 2

其实表达的是同一件事。


2、再看:


(1)指数形式:

cpp 复制代码
e ^ 1 = e

(2)对数形式:

cpp 复制代码
ln e = 1

3、指数与对数的关系:

复制代码
互为逆运算

4、就像:

复制代码
加法 ↔ 减法

乘法 ↔ 除法

一样。


🧙 七、对数魔法表

1、阿Q整理出一张对数表。

指数形式 对数形式
2¹ = 2 log₂2 = 1
2² = 4 log₂4 = 2
2³ = 8 log₂8 = 3
2⁴ = 16 log₂16 = 4
2⁵ = 32 log₂32 = 5

2、观察:

复制代码
指数是多少
对数就是多少

3、因为:

复制代码
对数本来就是找指数

🎯 八、第一个侦探任务

1、求:

复制代码
log₂64

2、意思:

复制代码
2的几次方等于64?

3、观察:

复制代码
2⁶=64

4、所以:

复制代码
log₂64=6

🎯 第二个侦探任务

1、求:

复制代码
log₃81

2、意思:

复制代码
3的几次方等于81?

3、观察:

复制代码
3⁴=81

4、答案:

复制代码
4

💻 九、C++中的对数函数

1、问题来了。


2、C++有没有:

复制代码
log()

函数呢?


3、当然有!

需要头文件:

复制代码
#include <cmath>

4、语法:

复制代码
log(x)

5、注意:

这里计算的是:

cpp 复制代码
自然对数 e

6、数学写作:

lnN

比如:lne=1

e是底数

e ≈2.71828... 在数学中是非常重要的科学常数。


7、C++中,例如输出:

复制代码
cout << log(2);

输出的是:

复制代码
0.693147...

❓ 十、为什么结果不是1?

1、很多同学第一次学都会疑惑。


2、因为:

复制代码
log()

不是:

复制代码
log₂

3、而是:

复制代码
ln

即:

复制代码
以e为底

4、在高中数学中我们会学到。


5、今天先记住,C++中的对数函数:

复制代码
log()

表示:

复制代码
自然对数

相当于数学中的

cpp 复制代码
ln(N)

🏆 十一、如何求 log₂(X)呢?

1、例如:

求:

复制代码
log₂1024

2、数学里有一个重要公式:

换底公式


3、于是:


4、C++中:

复制代码
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    double ans = log(1024) / log(2);

    cout << ans;

    return 0;
}

5、输出:

复制代码
10

🔥 十二、信息学竞赛中的应用

以后会遇到很多题目:


应用1:二分查找

(1)例如:

复制代码
1024个数

(2)每次砍一半:

复制代码
1024
512
256
128
64
32
16
8
4
2
1

(3)需要几次?


(4)其实就是:

复制代码
2的几次方等于1024?

(5)答案:

复制代码
10次

应用2:满二叉树

(1)第n层节点数:


(2)如果有:

复制代码
1024个节点

求层数。


(3)其实就是:

复制代码
求指数

需要对数。


应用3:快速幂

(1)我们学习:

复制代码
快速幂

时,

时间复杂度:


(2)这里的:

复制代码
log

就是对数。


🚧 十三、初学者最容易犯的错误


错误1

(1)认为:

复制代码
log(8)

(2)等于:

复制代码
3

错!


(3)因为:

复制代码
log()

默认不是:

复制代码
log₂

(4)而是:

复制代码
ln

错误2

忘记包含头文件

复制代码
#include <cmath>

错误3

(1)把:

复制代码
pow()

复制代码
log()

搞混。


(2)记忆:

复制代码
pow()
知道指数求结果

log()
知道结果求指数

🎮 挑战任务


第一题

求:

复制代码
log₂32

第二题

求:

复制代码
log₃243

第三题

已知:

复制代码
2^x=2048

求:

复制代码
x

第四题

为什么:

cpp 复制代码
2¹⁰ 约等于 1000

所以:

cpp 复制代码
log₂1000 约等于 10

📝 本课总结

1、今天我们认识了指数函数最好的朋友:

对数函数

核心定义:

对数就是寻找失踪的指数。


2、一句话:

复制代码
指数函数:
知道指数求结果

对数函数:
知道结果求指数

下一课:

⚔️《魔法天梯有多高------对数增长》⚔️

在这里,同学们会发现:

为什么二分查找能那么快?

为什么100万数据只需要查20次左右?

对数到底为什么被称为:

🏆 增长最慢的函数之一。