📦 C3-8 自定义函数

知识点体系逻辑图 · C++ 编程 · 陶老师课堂

📦 自定义函数
把有独立功能的代码打包成一个"工具",随时调用
🤔

一、为什么需要函数

  • 代码复用:写一次,多次调用,不用重复写相同代码
  • 模块化设计:把大程序拆成小模块,每个函数负责一个功能
  • 可读性强:函数名能说明功能,代码更易理解
  • 便于维护:修改一个函数,所有调用的地方都生效
  • 类比:函数就像"工具"——需要时拿出来用,不用每次都重新造
📝

二、函数定义语法

  • 返回值类型:函数返回什么类型的数据(int/bool/void等)
  • 函数名:给函数起个名字,见名知意
  • 参数列表:传给函数的"原料",可以有多个或没有
  • 函数体:大括号 {} 里的具体执行过程
  • return:返回结果给调用者,并结束函数
🔀

三、函数的分类

  • 按参数分:
  • 无参函数:void hello() —— 不需要原料
  • 带参函数:int add(int a, int b) —— 需要传入原料
  • 按返回值分:
  • 有返回值:int max(int a,int b) —— 用 return 返回结果
  • 无返回值:void print() —— 返回值类型写 void,不用 return
📞

四、函数的调用

  • 调用方式:函数名(参数值),如 add(3, 5)
  • 使用返回值:可以赋值给变量 int c = add(3,5);
  • 直接输出:cout << add(3,5);
  • 改变参数:传入不同参数,函数表现出不同功能
  • 定义位置:函数要写在 main 前面,或先声明再定义
🏭

五、函数的类比理解

  • 工厂类比:函数=工厂,参数=原料,返回值=产品
  • 魔法咒语:函数名=咒语,参数=咒语配料,返回值=魔法效果
  • 乐高积木:函数=积木块,可以拼接组合成大作品
  • 菜谱:函数名=菜名,参数=食材,函数体=烹饪步骤,返回值=成品菜
  • 自动售货机:投币(参数)→选商品(函数名)→出货(返回值)
🎯

六、与之前知识的联系

  • 回文数课用过 bool huiwen(int n) —— 带参+bool返回值
  • 排序课用过 sort(a, a+n) —— 调用库函数
  • 今天我们要自己写函数,而不只是调用别人写好的
  • 函数是编程中最重要的"封装"思想,以后会大量使用
  • 掌握函数后,就能写出结构清晰、功能强大的程序了

📝 函数定义语法详解

返回值类型 函数名(参数类型 参数名, 参数类型 参数名, ...) { // 函数中的具体过程 return 被返回的值; }

示例1:带参有返回值函数(加法器)

int add(int a, int b) { int sum = a + b; return sum; } // 调用:int c = add(3, 5); // c = 8

示例2:无参无返回值函数(打招呼)

void sayHello() { cout << "Hello, World!" << endl; } // 调用:sayHello(); // 输出 Hello, World!

示例3:带参无返回值函数(画矩形)

void drawRect(int width, int height) { for(int i=0; i<height; i++) { for(int j=0; j<width; j++) { cout << "*"; } cout << endl; } } // 调用:drawRect(5, 3); // 画5列3行的矩形 // 调用:drawRect(10, 5); // 画10列5行的矩形(改变参数=不同效果)

🔀 函数四大类型对比

类型 定义格式 特点 典型用途
无参无返回值 void func() 不需要输入,也不输出结果 打印固定内容、显示菜单
无参有返回值 int func() 不需要输入,但返回结果 获取随机数、获取当前时间
带参无返回值 void func(int a) 需要输入,但不返回结果 打印图形、输出指定内容
带参有返回值 int func(int a) 需要输入,也返回结果(最常用!) 计算、判断、查找、排序

🎮 趣味性拓展挑战

🎨

图形绘制工厂

写 drawRect()、drawTriangle()、drawDiamond() 函数,通过参数控制大小,一个函数画出各种尺寸的图形!

🧮

超级计算器

写 add()、sub()、mul()、div() 四个函数,封装加减乘除,主程序只负责调用,代码超简洁!

🎲

猜数字游戏

用函数封装游戏逻辑:generateNumber()生成答案、checkGuess()判断大小、playGame()主循环,模块化设计!

🔢

判断工具包

写 isPrime()判断素数、isHuiwen()判断回文数、isEven()判断偶数,以后写程序直接调用,不用重复写!

🏆

函数编程大赛

挑战:用函数实现"成绩分析系统"——inputScore()输入、sortScore()排序、avgScore()求平均、maxScore()找最高!

🎭

参数魔法秀

同一个 drawShape() 函数,传入不同参数画出不同图形:drawShape(1)画矩形、drawShape(2)画三角形、drawShape(3)画菱形!

🗺️ 本节课学习路径

🎬 动画引入 → 🤔 为什么用函数 → 📝 定义语法 → 🔀 四大类型 → 📞 调用与返回值 → 💻 代码实战 → 🎮 趣味拓展 → 📋 课堂练习

⚠️ 高频易错点提醒

① 忘记写返回值类型:函数定义时必须写返回值类型,即使没有返回值也要写 void,不能省略!
② void 函数里写 return 值:void 表示没有返回值,函数里不能写 return 某个值,但可以写 return; 来提前结束函数。
③ 函数定义在 main 后面且没声明:C++ 要求函数在调用之前必须先"看到"定义或声明。如果写在 main 后面,要在 main 前面加函数声明(函数头加分号)。
④ 调用函数时参数类型/数量不匹配:定义时是 int add(int a, int b),调用时就要传两个 int,不能传三个或传字符串。
⑤ 函数名后面忘记加括号:调用函数必须写 add(3,5),不能只写 add。括号是函数的标志!
⑥ 参数名和函数体外变量重名导致混淆:函数的参数是"局部变量",只在函数内部有效,和外面的变量互不影响。建议参数名见名知意。
⑦ 有返回值的函数忘记写 return:如果函数声明了 int 返回值类型,函数体里必须有 return 某个 int 值,否则结果不确定。