2.4 常用的数学函数
课程目标:
- 认识5种常用数学函数及其应用场景
- 理解这些函数背后的简单算法原理
- 能够用编程思维解决实际问题
引入
- “大家玩过电子游戏吗?游戏里的人物跳跃高度是怎么计算的?”
- “考试成绩排名是怎么算出来的?”
- “抽奖转盘为什么每次停的位置不一样?”
引出主题:今天我们要学习的就是让计算机“懂数学”的五个神奇函数!
绝对值函数
生活中的绝对值
场景:温度计显示-5°C,明天升温8度,会变成多少度?
- 错误计算:-5 + 8 = 3°C
- 实际理解:从-5到0需要5度,再加8度就是13度
概念引入:绝对值就是“距离零点的距离”
编程中的绝对值
cout<<abs(-10); // 输出:10
cout<<abs(5); // 输出:5
cout<<abs(-3.14); // 输出:3.14
算法原理(简单版)
如果 数字 >= 0:
绝对值 = 数字
否则:
绝对值 = -数字
动手试试:
- 计算 | -15 | = ?
- 计算 | 7 - 12 | = ?
- 设计一个求绝对值的简单程序
平方根函数
从面积到边长
情景引入:
- 一个正方形面积是25平方米,边长是多少? → √25 = 5
- 面积是10平方米呢? → √10 ≈ 3.16
编程实现
cout<<sqrt(25); # 输出:5.0
cout<<sqrt(100) # 输出:10.0
cout<<sqrt(2) # 输出:约1.414
算法原理(猜数字游戏)
游戏规则:
- 猜一个数的平方根
- 如果猜大了,就猜小一点
- 如果猜小了,就猜大一点
- 重复直到接近正确答案
简单示例(求√10):
猜5 → 5²=25 >10 → 太大了!
猜2.5 → 2.5²=6.25 <10 → 太小了!
猜3.5 → 3.5²=12.25 >10 → 太大了!
猜3.0 → 3.0²=9 <10 → 继续...
挑战:谁最快猜出√50的近似值?
最大值和最小值函数
现实应用
场景:班级数学成绩分析
- 最高分:max(88) = 98
- 最低分:min(88) = 76
编程实现
#include <iostream>
using namespace std;
// 自己实现的最大值函数(擂台法)
int my_max(int arr[], int size) {
// 假设第一个元素是冠军
int champion = arr[0];
// 让其他元素依次挑战冠军
for(int i = 1; i < size; i++) {
if(arr[i] > champion) {
champion = arr[i]; // 新冠军诞生!
}
}
return champion;
}
// 自己实现的最小值函数
int my_min(int arr[], int size) {
int champion = arr[0];
for(int i = 1; i < size; i++) {
if(arr[i] < champion) {
champion = arr[i];
}
}
return champion;
}
// 同时找到最大值和最小值(优化版)
void find_min_max(int arr[], int size, int &min_val, int &max_val) {
min_val = arr[0];
max_val = arr[0];
for(int i = 1; i < size; i++) {
if(arr[i] < min_val) {
min_val = arr[i];
}
if(arr[i] > max_val) {
max_val = arr[i];
}
}
}
int main() {
int scores[] = {85, 92, 76, 98, 88};
int size = 5;
cout << "自己实现的函数结果:" << endl;
cout << "最高分: " << my_max(scores, size) << endl;
cout << "最低分: " << my_min(scores, size) << endl;
int min_score, max_score;
find_min_max(scores, size, min_score, max_score);
cout << "\n同时查找结果:" << endl;
cout << "最高分: " << max_score << endl;
cout << "最低分: " << min_score << endl;
return 0;
}
算法原理(擂台比武法)
最大值算法:
冠军 = 第一个数
遍历每个数:
如果 当前数 > 冠军:
冠军 = 当前数
最小值算法: