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;
}
算法原理(擂台比武法)
最大值算法:
冠军 = 第一个数
遍历每个数:
如果 当前数 > 冠军:
冠军 = 当前数
最小值算法:
冠军 = 第一个数
遍历每个数:
如果 当前数 < 冠军:
冠军 = 当前数
随机数函数
生活中的随机
- 掷骰子
- 抽奖转盘
- 石头剪刀布
算法原理(简单理解)
概念:计算机的“随机”其实是“伪随机”
- 就像魔术师帽子里的兔子,看似随机出现,其实有规律
- 计算机用一个“种子数”开始计算
小游戏制作
// 猜数字游戏
#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位密码,包含数字和字母
创作时间
任务:用今天学的函数,设计一个小程序 可选主题:
- 幸运大转盘
- 数学小测验
- 简易计算器
- 自己的创意!
总结
知识回顾
| 函数 | 作用 | 生活中的例子 |
|---|---|---|
| abs() | 求绝对值 | 温度变化、距离 |
| sqrt() | 求平方根 | 正方形边长、圆半径 |
| max() | 找最大值 | 比赛最高分 |
| min() | 找最小值 | 比赛最低分 |
| random() | 生成随机数 | 抽奖、游戏 |
核心思想
- 函数是把复杂问题变简单的工具
- 每个函数背后都有聪明的算法
- 编程让我们能用数学解决实际问题
课后小任务
设计一个“班级成绩分析报告”程序,要求使用今天学的所有函数类型。