主页 > 其他  > 

C++基础语法9——函数结构

C++基础语法9——函数结构
一、函数的基本概念与分类

在C++编程中,函数是最基础的程序组织单元,它封装了特定功能的代码块,实现了代码复用和模块化开发。C++函数可以分为两大类:

1. 库函数(Library Functions)

由C++标准库提供的预定义函数,通过包含对应头文件即可直接调用:

#include <cmath> // 数学函数 #include <cstring> // 字符串处理 double root = sqrt(25.0); // 平方根函数 double power = pow(2, 3); // 幂运算 int cmp = strcmp("abc", "abd"); // 字符串比较 2. 自定义函数(User-defined Functions)

开发者根据需求自行编写的功能模块:

// 计算阶乘的自定义函数 int factorial(int n) { int result = 1; for(int i=1; i<=n; ++i) { result *= i; } return result; } 二、数学函数库cmath的典型应用 1. 常用数学函数示例 函数原型功能描述示例double sqrt(double x)平方根计算sqrt(9.0) → 3.0double pow(double a, double b)幂运算pow(2,3) → 8.0double ceil(double x)向上取整ceil(2.3) → 3.0double floor(double x)向下取整floor(2.7) → 2.0 2. 数学函数的局限性

虽然cmath提供了丰富的数学运算函数,但实际开发中常需要扩展功能。例如判断质数的功能在标准库中缺失,这正是自定义函数大显身手的机会。

三、自定义质数判断函数实现 1. 函数设计规范

命名规范:isPrime(驼峰命名法)

参数类型:int number

返回值类型:bool

功能说明:判断输入整数是否为质数

2. 基础实现版本 bool isPrime(int number) { if(number <= 1) return false; for(int i=2; i<=sqrt(number); ++i) { if(number % i == 0) { return false; } } return true; } 3. 算法优化策略

边界优化:直接排除<=1的非质数

循环优化:仅需检查到√n即可

偶数的特殊处理:

bool isPrimeOptimized(int n) { if(n <= 1) return false; if(n == 2) return true; if(n % 2 == 0) return false; for(int i=3; i*i<=n; i+=2) { if(n % i == 0) return false; } return true; } 四、函数返回值的灵活应用 1. 赋值存储结果 bool result = isPrime(97); 2. 直接输出结果 cout << "97是质数吗?" << boolalpha << isPrime(97); // 输出:97是质数吗?true 3. 逻辑判断应用 if(isPrime(input)) { cout << "输入是质数"; } else { cout << "输入不是质数"; } 五、函数的本质特性解析 1. 函数执行机制

形参(Formal Parameters):定义时使用的占位符

实参(Actual Arguments):调用时传入的具体值

示例解析:

void printStars(int count) { // count是形参 for(int i=0; i<count; ++i) cout << "*"; } int main() { printStars(5); // 5是实参 } 2. 特殊返回类型void

表示无返回值的函数类型:

void showMenu() { cout << "1. 开始游戏\n"; cout << "2. 加载存档\n"; cout << "3. 退出系统\n"; } 六、函数的四种基本形态 1. 无参无返回值 void systemBeep() { cout << '\a'; // 触发系统提示音 } 2. 无参有返回值 int getRandomNumber() { return rand() % 100; } 3. 有参有返回值 double circleArea(double radius) { return M_PI * radius * radius; } 4. 有参无返回值 void drawRectangle(int width, int height) { for(int i=0; i<height; ++i) { cout << string(width, '#') << endl; } } 七、函数设计最佳实践 1. 单一职责原则

每个函数应专注于完成单一明确的任务。例如将质数判断和输出功能分离:

void printPrimeStatus(int n) { if(isPrime(n)) { cout << n << "是质数"; } else { cout << n << "不是质数"; } } 2. 参数校验机制

增强函数健壮性:

bool isValidPrimeCandidate(int n) { return (n > 0 && n <= INT_MAX); } bool isPrimeEnhanced(int n) { if(!isValidPrimeCandidate(n)) { cerr << "非法输入!"; return false; } // ...原有判断逻辑... } 3. 性能优化技巧

预计算优化:存储已知质数结果

并行计算:利用多线程处理大数判断

// 使用埃拉托斯特尼筛法批量判断 void sieveOfEratosthenes(int n) { vector<bool> isPrime(n+1, true); isPrime[0] = isPrime[1] = false; for(int i=2; i*i<=n; ++i) { if(isPrime[i]) { for(int j=i*i; j<=n; j+=i) isPrime[j] = false; } } for(int i=2; i<=n; ++i) { if(isPrime[i]) cout << i << " "; } } 八、函数的高级应用场景 1. 递归函数实现 int fibonacci(int n) { if(n <= 1) return n; return fibonacci(n-1) + fibonacci(n-2); } 2. 函数模板应用 template <typename T> T getMax(T a, T b) { return (a > b) ? a : b; } 3. Lambda表达式 auto isEven = [](int n) { return n%2 == 0; }; cout << isEven(4); // 输出1(true) 九、调试与测试技巧 1. 单元测试示例 void testIsPrime() { assert(isPrime(2) == true); assert(isPrime(3) == true); assert(isPrime(4) == false); assert(isPrime(9973) == true); cout << "所有测试用例通过!"; } 2. 性能基准测试 #include <chrono> void benchmarkIsPrime() { auto start = chrono::high_resolution_clock::now(); for(int i=0; i<100000; ++i) { isPrime(104729); // 第10000个质数 } auto end = chrono::high_resolution_clock::now(); auto duration = chrono::duration_cast<chrono::milliseconds>(end - start); cout << "耗时:" << duration.count() << " 毫秒"; } 十、总结

库函数与自定义函数的区别与应用

数学函数库cmath的典型使用场景

质数判断函数的完整实现与优化策略

函数参数与返回值的灵活应用

函数设计的基本原则与最佳实践

标签:

C++基础语法9——函数结构由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“C++基础语法9——函数结构