C++ 从入门到精通C++ 从入门到精通
首页
基础教程
进阶教程
实战项目
编程指南
首页
基础教程
进阶教程
实战项目
编程指南
  • 🚀 C++ 基础入门

    • 📚 C++ 基础教程
    • 第1章 - 环境搭建和第一个程序
    • 第2章 - 变量和数据类型
    • 第3章 - 输入输出和运算符
    • 第4章 - 条件判断
    • 第5章 - 循环语句
    • 第6章 - 函数基础
    • 第7章 - 数组和字符串

第6章 - 函数基础

嗨,朋友!我是长安。

你有没有发现,如果同一段代码需要在不同地方使用,我们就得复制粘贴好多遍?这样不仅麻烦,而且容易出错。

这一章,我要教你一个编程中最重要的概念——函数。它就像一个工具箱,把常用的代码打包起来,需要时直接调用!

🤔 什么是函数?

生活中的例子

想象你在厨房做饭:

  • 切菜 - 把食材切碎的过程
  • 炒菜 - 把食材放锅里翻炒的过程
  • 装盘 - 把菜盛到盘子里的过程

每个步骤都是一个"功能模块",你可以重复使用:

  • 做西红柿炒蛋时,需要"切菜"
  • 做青椒肉丝时,也需要"切菜"

编程中的函数

函数就是把一段代码打包起来,给它起个名字,需要时直接调用。

好处:

  • ✅ 代码复用 - 写一次,到处用
  • ✅ 便于维护 - 修改一处,全部生效
  • ✅ 提高可读性 - 代码结构清晰
  • ✅ 降低复杂度 - 把大问题分解成小问题

📝 定义函数

基本格式

返回类型 函数名(参数列表) {
    // 函数体:要执行的代码
    return 返回值;
}

第一个函数

#include <iostream>
using namespace std;

// 定义一个打招呼的函数
void sayHello() {
    cout << "Hello, World!" << endl;
}

int main() {
    sayHello();  // 调用函数
    sayHello();  // 再次调用
    sayHello();  // 又调用一次
    
    return 0;
}

输出:

Hello, World!
Hello, World!
Hello, World!

解释:

  • void - 函数不返回任何值
  • sayHello - 函数名
  • () - 参数列表(这里是空的)
  • 调用函数时,只需写 函数名();

🎁 带参数的函数

函数可以接收参数(输入数据)。

示例1:带一个参数

#include <iostream>
#include <string>
using namespace std;

// 定义一个带参数的函数
void greet(string name) {
    cout << "你好," << name << "!" << endl;
}

int main() {
    greet("张三");
    greet("李四");
    greet("王五");
    
    return 0;
}

输出:

你好,张三!
你好,李四!
你好,王五!

示例2:带多个参数

#include <iostream>
using namespace std;

// 定义一个计算两数之和的函数
void printSum(int a, int b) {
    int sum = a + b;
    cout << a << " + " << b << " = " << sum << endl;
}

int main() {
    printSum(3, 5);
    printSum(10, 20);
    printSum(100, 200);
    
    return 0;
}

输出:

3 + 5 = 8
10 + 20 = 30
100 + 200 = 300

📤 有返回值的函数

函数可以返回一个结果给调用者。

示例1:返回两数之和

#include <iostream>
using namespace std;

// 定义一个返回值的函数
int add(int a, int b) {
    int sum = a + b;
    return sum;  // 返回结果
}

int main() {
    int result1 = add(3, 5);
    int result2 = add(10, 20);
    
    cout << "3 + 5 = " << result1 << endl;
    cout << "10 + 20 = " << result2 << endl;
    
    return 0;
}

输出:

3 + 5 = 8
10 + 20 = 30

解释:

  • int add(int a, int b) - 函数返回类型是 int
  • return sum; - 返回计算结果
  • 调用时可以把返回值赋给变量:int result = add(3, 5);

示例2:判断奇偶数

#include <iostream>
using namespace std;

// 判断是否是偶数
bool isEven(int num) {
    return (num % 2 == 0);
}

int main() {
    int num;
    cout << "请输入一个整数:";
    cin >> num;
    
    if (isEven(num)) {
        cout << num << " 是偶数" << endl;
    } else {
        cout << num << " 是奇数" << endl;
    }
    
    return 0;
}

示例3:获取最大值

#include <iostream>
using namespace std;

// 返回两个数中的最大值
int getMax(int a, int b) {
    if (a > b) {
        return a;
    } else {
        return b;
    }
}

int main() {
    int num1, num2;
    
    cout << "请输入两个数:";
    cin >> num1 >> num2;
    
    int maxNum = getMax(num1, num2);
    cout << "最大值是:" << maxNum << endl;
    
    return 0;
}

🔍 函数的四种类型

根据是否有参数和是否有返回值,函数可以分为四种:

类型说明示例
无参无返回值不接收参数,不返回值void sayHello()
有参无返回值接收参数,不返回值void greet(string name)
无参有返回值不接收参数,返回值int getRandom()
有参有返回值接收参数,返回值int add(int a, int b)

完整示例

#include <iostream>
#include <string>
using namespace std;

// 1. 无参无返回值
void printLine() {
    cout << "==================" << endl;
}

// 2. 有参无返回值
void printMessage(string msg) {
    cout << msg << endl;
}

// 3. 无参有返回值
int getRandomNumber() {
    return 42;  // 简化示例
}

// 4. 有参有返回值
double calculateAverage(double a, double b, double c) {
    return (a + b + c) / 3;
}

int main() {
    // 调用无参无返回值函数
    printLine();
    
    // 调用有参无返回值函数
    printMessage("欢迎来到 C++ 世界!");
    
    // 调用无参有返回值函数
    int num = getRandomNumber();
    cout << "随机数:" << num << endl;
    
    // 调用有参有返回值函数
    double avg = calculateAverage(80, 90, 85);
    cout << "平均分:" << avg << endl;
    
    printLine();
    
    return 0;
}

🌟 实战案例

案例1:计算器(函数版)

#include <iostream>
using namespace std;

// 加法
double add(double a, double b) {
    return a + b;
}

// 减法
double subtract(double a, double b) {
    return a - b;
}

// 乘法
double multiply(double a, double b) {
    return a * b;
}

// 除法
double divide(double a, double b) {
    if (b != 0) {
        return a / b;
    } else {
        cout << "错误:除数不能为0!" << endl;
        return 0;
    }
}

int main() {
    double num1, num2;
    char op;
    
    cout << "===== 计算器 =====" << endl;
    cout << "请输入第一个数:";
    cin >> num1;
    
    cout << "请输入运算符(+、-、*、/):";
    cin >> op;
    
    cout << "请输入第二个数:";
    cin >> num2;
    
    double result;
    
    switch (op) {
        case '+':
            result = add(num1, num2);
            break;
        case '-':
            result = subtract(num1, num2);
            break;
        case '*':
            result = multiply(num1, num2);
            break;
        case '/':
            result = divide(num1, num2);
            break;
        default:
            cout << "无效运算符!" << endl;
            return 1;
    }
    
    cout << num1 << " " << op << " " << num2 << " = " << result << endl;
    
    return 0;
}

案例2:温度转换器

#include <iostream>
using namespace std;

// 摄氏度转华氏度
double celsiusToFahrenheit(double celsius) {
    return celsius * 9.0 / 5.0 + 32;
}

// 华氏度转摄氏度
double fahrenheitToCelsius(double fahrenheit) {
    return (fahrenheit - 32) * 5.0 / 9.0;
}

int main() {
    int choice;
    double temp, result;
    
    cout << "===== 温度转换器 =====" << endl;
    cout << "1. 摄氏度 → 华氏度" << endl;
    cout << "2. 华氏度 → 摄氏度" << endl;
    cout << "请选择(1或2):";
    cin >> choice;
    
    if (choice == 1) {
        cout << "请输入摄氏温度:";
        cin >> temp;
        result = celsiusToFahrenheit(temp);
        cout << temp << "°C = " << result << "°F" << endl;
    } else if (choice == 2) {
        cout << "请输入华氏温度:";
        cin >> temp;
        result = fahrenheitToCelsius(temp);
        cout << temp << "°F = " << result << "°C" << endl;
    } else {
        cout << "无效选择!" << endl;
    }
    
    return 0;
}

案例3:成绩管理系统

#include <iostream>
using namespace std;

// 计算平均分
double calculateAverage(double math, double english, double chinese) {
    return (math + english + chinese) / 3;
}

// 判断是否及格
bool isPassed(double score) {
    return score >= 60;
}

// 获取等级
char getGrade(double score) {
    if (score >= 90) {
        return 'A';
    } else if (score >= 80) {
        return 'B';
    } else if (score >= 70) {
        return 'C';
    } else if (score >= 60) {
        return 'D';
    } else {
        return 'F';
    }
}

// 打印成绩单
void printReport(string name, double math, double english, double chinese) {
    double avg = calculateAverage(math, english, chinese);
    
    cout << "\n===== 成绩单 =====" << endl;
    cout << "姓名:" << name << endl;
    cout << "数学:" << math << " 分" << endl;
    cout << "英语:" << english << " 分" << endl;
    cout << "语文:" << chinese << " 分" << endl;
    cout << "平均分:" << avg << " 分" << endl;
    cout << "等级:" << getGrade(avg) << endl;
    
    if (isPassed(avg)) {
        cout << "结果:通过 ✓" << endl;
    } else {
        cout << "结果:未通过 ✗" << endl;
    }
}

int main() {
    string studentName;
    double mathScore, englishScore, chineseScore;
    
    cout << "请输入学生姓名:";
    cin >> studentName;
    
    cout << "请输入数学成绩:";
    cin >> mathScore;
    
    cout << "请输入英语成绩:";
    cin >> englishScore;
    
    cout << "请输入语文成绩:";
    cin >> chineseScore;
    
    printReport(studentName, mathScore, englishScore, chineseScore);
    
    return 0;
}

案例4:数学工具箱

#include <iostream>
using namespace std;

// 计算阶乘
long long factorial(int n) {
    long long result = 1;
    for (int i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
}

// 判断是否是素数
bool isPrime(int n) {
    if (n <= 1) {
        return false;
    }
    for (int i = 2; i < n; i++) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
}

// 计算幂
double power(double base, int exponent) {
    double result = 1;
    for (int i = 0; i < exponent; i++) {
        result *= base;
    }
    return result;
}

// 求绝对值
double absolute(double num) {
    if (num < 0) {
        return -num;
    }
    return num;
}

int main() {
    cout << "===== 数学工具箱 =====" << endl;
    
    // 测试阶乘
    cout << "5! = " << factorial(5) << endl;
    
    // 测试素数判断
    cout << "7 是素数吗?" << (isPrime(7) ? "是" : "否") << endl;
    cout << "10 是素数吗?" << (isPrime(10) ? "是" : "否") << endl;
    
    // 测试幂运算
    cout << "2^10 = " << power(2, 10) << endl;
    
    // 测试绝对值
    cout << "|-5| = " << absolute(-5) << endl;
    
    return 0;
}

案例5:打印图案(函数版)

#include <iostream>
using namespace std;

// 打印一行星号
void printStars(int count) {
    for (int i = 0; i < count; i++) {
        cout << "* ";
    }
    cout << endl;
}

// 打印空格
void printSpaces(int count) {
    for (int i = 0; i < count; i++) {
        cout << "  ";
    }
}

// 打印三角形
void printTriangle(int height) {
    for (int i = 1; i <= height; i++) {
        printStars(i);
    }
}

// 打印倒三角形
void printInvertedTriangle(int height) {
    for (int i = height; i >= 1; i--) {
        printStars(i);
    }
}

// 打印金字塔
void printPyramid(int height) {
    for (int i = 1; i <= height; i++) {
        printSpaces(height - i);
        printStars(i);
    }
}

int main() {
    int size;
    
    cout << "请输入图案大小:";
    cin >> size;
    
    cout << "\n三角形:" << endl;
    printTriangle(size);
    
    cout << "\n倒三角形:" << endl;
    printInvertedTriangle(size);
    
    cout << "\n金字塔:" << endl;
    printPyramid(size);
    
    return 0;
}

🎯 小结

这一章我们学习了函数的基础知识:

概念说明
函数定义返回类型 函数名(参数列表) { 函数体 }
函数调用函数名(参数);
参数函数的输入数据
返回值函数的输出结果
void无返回值类型
return返回结果并结束函数

函数的好处:

  • ✅ 代码复用,提高效率
  • ✅ 降低复杂度,易于维护
  • ✅ 提高可读性,结构清晰

💪 练习题

动手练习巩固知识:

  1. 写一个函数 printRectangle(int width, int height),打印一个矩形
  2. 写一个函数 getMin(int a, int b),返回两个数中较小的那个
  3. 写一个函数 isLeapYear(int year),判断某年是否是闰年
  4. 写一个函数 sumRange(int start, int end),计算从start到end的所有整数之和
  5. 写一个函数 reverseNumber(int num),返回一个数字的反转(如123返回321)
点击查看参考答案

题目2 参考答案:

#include <iostream>
using namespace std;

int getMin(int a, int b) {
    if (a < b) {
        return a;
    } else {
        return b;
    }
}

int main() {
    cout << "10 和 20 中较小的是:" << getMin(10, 20) << endl;
    cout << "50 和 30 中较小的是:" << getMin(50, 30) << endl;
    return 0;
}

题目3 参考答案:

#include <iostream>
using namespace std;

bool isLeapYear(int year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

int main() {
    int year;
    cout << "请输入年份:";
    cin >> year;
    
    if (isLeapYear(year)) {
        cout << year << " 是闰年" << endl;
    } else {
        cout << year << " 不是闰年" << endl;
    }
    
    return 0;
}

🚀 下一步

太棒了!你已经掌握了函数的基础用法!

下一章,我们要学习数组和字符串,学会如何处理一组数据和文本!

➡️ 第7章 - 数组和字符串

最近更新: 2025/12/26 17:25
Contributors: 王长安
Prev
第5章 - 循环语句
Next
第7章 - 数组和字符串