📄 知识库 C++常用数学函数与操作讲义 这篇笔记暂无摘要。 分类 未分类 难度 基础 阅读 3 分钟 浏览 20 更新 2026-7-21 10:02:40 🌐 所有人可见 登录后记录进度 导出 MD 复制链接 打印 / PDF ## 一、头文件引入 使用C++数学函数需要包含`<cmath>`头文件: ```cpp #include <cmath> ``` ## 二、常用数学函数分类 ### 1. 绝对值函数 • `abs(int x)`:计算整数的绝对值 • `fabs(double x)`:计算浮点数的绝对值 示例: ```cpp int a = abs(-5); // a = 5 double b = fabs(-3.14); // b = 3.14 ``` ### 2. 幂与根函数 • `pow(double base, double exponent)`:计算base的exponent次方 • `sqrt(double x)`:计算x的平方根 • `cbrt(double x)`:计算x的立方根 示例: ```cpp double a = pow(2, 3); // a = 8.0 double b = sqrt(9); // b = 3.0 double c = cbrt(27); // c = 3.0 ``` ### 3. 取整函数 • `ceil(double x)`:向上取整 • `floor(double x)`:向下取整 • `round(double x)`:四舍五入 示例: ```cpp double a = ceil(3.2); // a = 4.0 double b = floor(3.8); // b = 3.0 double c = round(3.5); // c = 4.0 ``` ### 4. 最值函数 • `max(a, b)`:返回a和b中的较大值 • `min(a, b)`:返回a和b中的较小值 示例: ```cpp int a = max(10, 20); // a = 20 int b = min(10, 20); // b = 10 ``` ### 5. 其他常用函数 • `fmod(double x, double y)`:计算x除以y的余数 • `exp(double x)`:计算e的x次幂 • `log(double x)`:计算x的自然对数 • `log10(double x)`:计算x的以10为底的对数 ## 三、使用注意事项 1. **数据类型匹配**: • 整数绝对值使用`abs()` • 浮点数绝对值使用`fabs()` 2. **错误处理**: • 负数开平方根会返回`nan`(Not a Number) • 除数为0会导致未定义行为 3. **精度问题**: • 浮点数运算可能存在精度误差 • 比较浮点数时建议使用容差法而非直接相等比较 ## 四、综合应用示例 ```cpp #include <iostream> #include <cmath> #include <algorithm> using namespace std; int main() { double num; cout << "请输入一个数字:"; cin >> num; cout << "绝对值:" << fabs(num) << endl; cout << "平方根:" << sqrt(num) << endl; cout << "向上取整:" << ceil(num) << endl; cout << "向下取整:" << floor(num) << endl; cout << "3次幂:" << pow(num, 3) << endl; return 0; } ``` ## 五、练习题 1. 编写程序计算用户输入数字的平方和立方 2. 编写程序找出三个数中的最大值和最小值 3. 编写程序计算圆的面积(使用π=3.14159) 4. 编写程序将华氏温度转换为摄氏温度(公式:C = (F-32)*5/9) [C++常用数学函数家庭作业](https://www.yuque.com/xiaoyezi-xxlong/htbc/yggtgpa1e7g15c5y?singleDoc#) ## 1. 绝对值函数 ### 1.1 abs() 函数 ```cpp #include <cstdlib> // 整数绝对值 #include <cmath> // 浮点数绝对值 int main() { int intNum = -10; double doubleNum = -3.14; cout << "整数绝对值: " << abs(intNum) << endl; // 10 cout << "浮点数绝对值: " << fabs(doubleNum) << endl; // 3.14 return 0; } ``` ## 2. 平方根函数 sqrt() ```cpp #include <cmath> int main() { double num = 25.0; cout << "平方根: " << sqrt(num) << endl; // 5.0 // 处理负数情况 double negative = -9.0; if(negative < 0) { cout << "负数没有实数平方根" << endl; } else { cout << sqrt(negative) << endl; } return 0; } ``` ## 3. 最大值和最小值函数 ```cpp #include <algorithm> int main() { int a = 5, b = 10; // 基本用法 cout << "最大值: " << max(a, b) << endl; // 10 cout << "最小值: " << min(a, b) << endl; // 5 // 多值比较(C++11) cout << "三数最大值: " << max({a, b, 15}) << endl; // 15 cout << "三数最小值: " << min({a, b, 3}) << endl; // 3 return 0; } ``` ## 4. sizeof 操作符 ```cpp int main() { int arr[] = {1, 2, 3, 4, 5}; cout << "int大小: " << sizeof(int) << " bytes" << endl; cout << "数组大小: " << sizeof(arr) << " bytes" << endl; cout << "数组元素个数: " << sizeof(arr)/sizeof(arr[0]) << endl; return 0; } ``` ## 5. sort 排序 可参考 ([C++之sort()函数详解,刷题必备~_c++ sort-CSDN博客](https://blog.csdn.net/Adae_Stevens/article/details/127754053?ops_request_misc=%257B%2522request%255Fid%2522%253A%252268d60813f66282dd5f8c376ebc4fb888%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=68d60813f66282dd5f8c376ebc4fb888&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-127754053-null-null.142^v102^pc_search_result_base4&utm_term=sort%20c%2B%2B&spm=1018.2226.3001.4187)) ```cpp #include <algorithm> #include <vector> int main() { // 数组排序 int arr[] = {5, 2, 8, 1, 4}; int n = sizeof(arr)/sizeof(arr[0]); sort(arr, arr + n); // 升序排序 for(int i = 0; i < n; i++) { cout << arr[i] << " "; // 1 2 4 5 8 } cout << endl; // 向量排序 vector<int> vec = {5, 2, 8, 1, 4}; sort(vec.begin(), vec.end()); // 降序排序 sort(vec.begin(), vec.end(), greater<int>()); return 0; } ``` ## 6. 取整函数 ```cpp #include <cmath> int main() { double num = 3.7; // 向下取整 floor() cout << "向下取整: " << floor(num) << endl; // 3.0 // 向上取整 ceil() cout << "向上取整: " << ceil(num) << endl; // 4.0 // 四舍五入 round() cout << "四舍五入: " << round(num) << endl; // 4.0 double num2 = 3.2; cout << "四舍五入: " << round(num2) << endl; // 3.0 return 0; } ``` ## 7. 综合示例 ```cpp #include <iostream> #include <cmath> #include <algorithm> #include <vector> #include <cstdlib> using namespace std; int main() { // 绝对值演示 cout << "|-5| = " << abs(-5) << endl; cout << "|-2.718| = " << fabs(-2.718) << endl; // 平方根演示 cout << "√16 = " << sqrt(16) << endl; // 最大最小值演示 cout << "max(3, 9, 5) = " << max({3, 9, 5}) << endl; cout << "min(3, 9, 5) = " << min({3, 9, 5}) << endl; // sizeof演示 double arr[] = {1.1, 2.2, 3.3}; cout << "数组大小: " << sizeof(arr) << " bytes" << endl; cout << "元素个数: " << sizeof(arr)/sizeof(arr[0]) << endl; // 排序演示 vector<int> nums = {5, 2, 8, 1, 6}; sort(nums.begin(), nums.end()); cout << "排序后: "; for(int n : nums) cout << n << " "; cout << endl; // 取整演示 cout << "floor(4.8) = " << floor(4.8) << endl; cout << "ceil(4.2) = " << ceil(4.2) << endl; cout << "round(4.5) = " << round(4.5) << endl; return 0; } ``` ## 8. 注意事项 1. **头文件包含**: • `<cmath>` - 数学函数 • `<algorithm>` - max, min, sort • `<cstdlib>` - abs • `<vector>` - 向量容器 2. **类型匹配**: • 整数用abs(), 浮点数用fabs() • floor(), ceil(), round()返回double类型 3. **排序函数**: • sort()默认升序 • 降序需使用greater() 4. **sizeof**: • 编译时确定 • 对指针返回指针大小而非指向对象大小 5. **C++11特性**: • 初始化列表{...}用于max/min多值比较 ## 9. 练习题目 1. 编写程序计算用户输入的5个数字的平均值和标准差 2. 编写程序找出用户输入的10个数字中的最大值、最小值和中间值 3. 创建一个结构体表示学生(姓名,成绩),然后对学生数组按成绩排序 4. 编写程序计算圆的面积和周长,处理用户输入的半径(使用数学常量和函数) 5. 实现一个简单的统计程序,计算用户输入数据的均值、方差和各种取整值 # 课后作业([常用函数练习题](https://www.yuque.com/xiaoyezi-xxlong/htbc/xo6v4csozqbcpidi?singleDoc#) 《常用函数练习题》) # C++数学函数编程练习题 ## 基础练习题 ### 1. 绝对值计算器 编写程序,让用户输入一个数字,输出该数字的绝对值。 ```cpp #include <iostream> #include <cmath> using namespace std; int main() { double num; cout << "请输入一个数字: "; cin >> num; cout << "绝对值是: " << fabs(num) << endl; return 0; } ``` ### 2. 平方根计算器 编写程序,计算用户输入数字的平方根,并处理负数输入。 ```cpp #include <iostream> #include <cmath> using namespace std; int main() { double num; cout << "请输入一个非负数: "; cin >> num; if(num < 0) { cout << "错误:负数没有实数平方根" << endl; } else { cout << "平方根是: " << sqrt(num) << endl; } return 0; } ``` ## 中级练习题 ### 3. 三数排序 编写程序,输入三个数字,使用sort函数将它们排序后输出。 ```cpp #include <iostream> #include <algorithm> using namespace std; int main() { double nums[3]; cout << "请输入三个数字: "; cin >> nums[0] >> nums[1] >> nums[2]; sort(nums, nums + 3); cout << "排序结果: "; for(int i = 0; i < 3; i++) { cout << nums[i] << " "; } cout << endl; return 0; } ``` ### 4. 成绩统计 编写程序,输入5个学生成绩,计算平均分、最高分和最低分。 ```cpp #include <iostream> #include <algorithm> #include <numeric> #include <vector> using namespace std; int main() { vector<double> grades(5); cout << "请输入5个学生成绩: "; for(int i = 0; i < 5; i++) { cin >> grades[i]; } double average = accumulate(grades.begin(), grades.end(), 0.0) / grades.size(); double maxGrade = *max_element(grades.begin(), grades.end()); double minGrade = *min_element(grades.begin(), grades.end()); cout << "平均分: " << average << endl; cout << "最高分: " << maxGrade << endl; cout << "最低分: " << minGrade << endl; return 0; } ``` ## 高级练习题 ### 5. 几何图形计算 编写程序,计算圆的面积和周长,矩形的面积和周长,使用适当的数学函数。 ```cpp #include <iostream> #include <cmath> using namespace std; const double PI = acos(-1.0); int main() { int choice; cout << "选择图形(1-圆, 2-矩形): "; cin >> choice; if(choice == 1) { double radius; cout << "输入圆的半径: "; cin >> radius; double area = PI * pow(radius, 2); double circumference = 2 * PI * radius; cout << "面积: " << area << endl; cout << "周长: " << circumference << endl; } else if(choice == 2) { double length, width; cout << "输入矩形的长和宽: "; cin >> length >> width; double area = length * width; double perimeter = 2 * (length + width); cout << "面积: " << area << endl; cout << "周长: " << perimeter << endl; } else { cout << "无效选择" << endl; } return 0; } ``` ### 6. 学生成绩管理系统 编写程序,管理学生成绩,包括添加成绩、显示所有成绩、计算统计信息、排序等功能。 ```cpp #include <iostream> #include <vector> #include <algorithm> #include <numeric> #include <cmath> using namespace std; void displayMenu() { cout << "\n1. 添加成绩\n"; cout << "2. 显示所有成绩\n"; cout << "3. 计算统计信息\n"; cout << "4. 排序成绩\n"; cout << "5. 退出\n"; cout << "选择操作: "; } int main() { vector<double> grades; int choice; do { displayMenu(); cin >> choice; switch(choice) { case 1: { double grade; cout << "输入成绩: "; cin >> grade; grades.push_back(grade); break; } case 2: { cout << "所有成绩: "; for(double g : grades) cout << g << " "; cout << endl; break; } case 3: { if(grades.empty()) { cout << "没有成绩数据" << endl; break; } double sum = accumulate(grades.begin(), grades.end(), 0.0); double average = sum / grades.size(); double variance = 0.0; for(double g : grades) { variance += pow(g - average, 2); } variance /= grades.size(); cout << "平均分: " << average << endl; cout << "最高分: " << *max_element(grades.begin(), grades.end()) << endl; cout << "最低分: " << *min_element(grades.begin(), grades.end()) << endl; cout << "方差: " << variance << endl; cout << "标准差: " << sqrt(variance) << endl; break; } case 4: { sort(grades.begin(), grades.end()); cout << "成绩已排序" << endl; break; } case 5: cout << "退出程序" << endl; break; default: cout << "无效选择" << endl; } } while(choice != 5); return 0; } ``` ## 挑战题 ### 7. 二次方程求解器 编写程序,求解二次方程 ax² + bx + c = 0 的实数根。 ```cpp #include <iostream> #include <cmath> using namespace std; int main() { double a, b, c; cout << "输入二次方程的系数(a b c): "; cin >> a >> b >> c; if(a == 0) { cout << "这不是二次方程" << endl; return 0; } double discriminant = b*b - 4*a*c; if(discriminant > 0) { double root1 = (-b + sqrt(discriminant)) / (2*a); double root2 = (-b - sqrt(discriminant)) / (2*a); cout << "两个实数根: " << root1 << " 和 " << root2 << endl; } else if(discriminant == 0) { double root = -b / (2*a); cout << "一个实数重根: " << root << endl; } else { cout << "没有实数根" << endl; } return 0; } ``` ### 8. 科学计算器 实现一个简单的科学计算器,支持加减乘除、平方根、幂运算、对数、三角函数等。 ```cpp #include <iostream> #include <cmath> #include <iomanip> using namespace std; void displayMenu() { cout << "\n科学计算器\n"; cout << "1. 加法\n"; cout << "2. 减法\n"; cout << "3. 乘法\n"; cout << "4. 除法\n"; cout << "5. 平方根\n"; cout << "6. 幂运算\n"; cout << "7. 对数\n"; cout << "8. 三角函数\n"; cout << "9. 退出\n"; cout << "选择操作: "; } int main() { int choice; double num1, num2, result; do { displayMenu(); cin >> choice; switch(choice) { case 1: cout << "输入两个数: "; cin >> num1 >> num2; cout << "结果: " << num1 + num2 << endl; break; case 2: cout << "输入两个数: "; cin >> num1 >> num2; cout << "结果: " << num1 - num2 << endl; break; case 3: cout << "输入两个数: "; cin >> num1 >> num2; cout << "结果: " << num1 * num2 << endl; break; case 4: cout << "输入两个数: "; cin >> num1 >> num2; if(num2 == 0) { cout << "错误: 除数不能为0" << endl; } else { cout << "结果: " << num1 / num2 << endl; } break; case 5: cout << "输入一个数: "; cin >> num1; if(num1 < 0) { cout << "错误: 负数没有实数平方根" << endl; } else { cout << "平方根: " << sqrt(num1) << endl; } break; case 6: cout << "输入底数和指数: "; cin >> num1 >> num2; cout << "结果: " << pow(num1, num2) << endl; break; case 7: cout << "输入一个正数: "; cin >> num1; if(num1 <= 0) { cout << "错误: 对数定义域为正实数" << endl; } else { cout << "自然对数: " << log(num1) << endl; cout << "常用对数: " << log10(num1) << endl; } break; case 8: cout << "输入角度(度): "; cin >> num1; double radians = num1 * M_PI / 180.0; cout << fixed << setprecision(4); cout << "sin: " << sin(radians) << endl; cout << "cos: " << cos(radians) << endl; cout << "tan: " << tan(radians) << endl; break; case 9: cout << "退出计算器" << endl; break; default: cout << "无效选择" << endl; } } while(choice != 9); return 0; } ``` 这些练习题涵盖了从基础到高级的各种数学函数应用场景,可以帮助你熟练掌握C++中的数学函数使用。 学习交流公开阅读不需要登录登录后可以评论、收藏并同步学习进度。登录暂时还没有评论。
学习交流