跳到主要内容

2.4 常用的数学函数

课程目标

  1. 认识5种常用数学函数及其应用场景
  2. 理解这些函数背后的简单算法原理
  3. 能够用编程思维解决实际问题

引入

  1. “大家玩过电子游戏吗?游戏里的人物跳跃高度是怎么计算的?”
  2. “考试成绩排名是怎么算出来的?”
  3. “抽奖转盘为什么每次停的位置不一样?”

引出主题:今天我们要学习的就是让计算机“懂数学”的五个神奇函数!


绝对值函数

生活中的绝对值

场景:温度计显示-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:
绝对值 = 数字
否则:
绝对值 = -数字

动手试试

  1. 计算 | -15 | = ?
  2. 计算 | 7 - 12 | = ?
  3. 设计一个求绝对值的简单程序

平方根函数

从面积到边长

情景引入

  • 一个正方形面积是25平方米,边长是多少? → √25 = 5
  • 面积是10平方米呢? → √10 ≈ 3.16

编程实现


cout<<sqrt(25); # 输出:5.0
cout<<sqrt(100) # 输出:10.0
cout<<sqrt(2) # 输出:约1.414

算法原理(猜数字游戏)

游戏规则

  1. 猜一个数的平方根
  2. 如果猜大了,就猜小一点
  3. 如果猜小了,就猜大一点
  4. 重复直到接近正确答案

简单示例(求√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;
}

算法原理(擂台比武法)

最大值算法

冠军 = 第一个数
遍历每个数:
如果 当前数 > 冠军:
冠军 = 当前数

最小值算法

冠军 = 第一个数
遍历每个数:
如果 当前数 < 冠军:
冠军 = 当前数

随机数函数

生活中的随机

  • 掷骰子
  • 抽奖转盘
  • 石头剪刀布

算法原理(简单理解)

概念:计算机的“随机”其实是“伪随机”

  • 就像魔术师帽子里的兔子,看似随机出现,其实有规律
  • 计算机用一个“种子数”开始计算

小游戏制作

// 猜数字游戏
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main() {
srand(time(0));
int secret = rand() % 100 + 1;
int guess;
int attempts = 0;
const int maxAttempts = 7;

cout << "=== 猜数字游戏 ===" << endl;
cout << "我有一个1-100之间的秘密数字,你有7次机会猜它!" << endl;

while (attempts < maxAttempts) {
attempts++;
cout << endl << "第" << attempts << "次尝试: ";
cin >> guess;

if (guess == secret) {
cout << "太棒了!你在第" << attempts << "次猜对了!" << endl;
break;
} else if (guess < secret) {
cout << "猜小了!";
} else {
cout << "猜大了!";
}

// 提示还剩几次机会
if (attempts < maxAttempts) {
cout << " 还剩" << maxAttempts - attempts << "次机会。" << endl;
} else {
cout << endl << "游戏结束!秘密数字是:" << secret << endl;
}
}

return 0;
}

综合练习与创作

练习1:温度转换器

编写程序,输入摄氏温度(可能是负数),输出绝对温度值

练习2:成绩分析器

输入5个成绩,输出:

  • 最高分和最低分
  • 平均分
  • 与平均分的最大差距(用绝对值)

挑战题:简易密码生成器

用随机数生成一个4位密码,包含数字和字母

创作时间

任务:用今天学的函数,设计一个小程序 可选主题

  1. 幸运大转盘
  2. 数学小测验
  3. 简易计算器
  4. 自己的创意!

总结

知识回顾

函数作用生活中的例子
abs()求绝对值温度变化、距离
sqrt()求平方根正方形边长、圆半径
max()找最大值比赛最高分
min()找最小值比赛最低分
random()生成随机数抽奖、游戏

核心思想

  1. 函数是把复杂问题变简单的工具
  2. 每个函数背后都有聪明的算法
  3. 编程让我们能用数学解决实际问题

课后小任务

设计一个“班级成绩分析报告”程序,要求使用今天学的所有函数类型。

*学习笔记

暂没有学习笔记,快来抢first blood !