第7章 第3节:函数的定义与调用(课件)-《C语言程序设计》(电子工业出版社)上好课

2026-04-30
| 47页
| 84人阅读
| 0人下载
精品

内容正文:

7.3节:函数的定义与调用 C语言程序设计 电子工业出版社 理解函数概念,掌握其定义格式 剖析函数各组成部分的逻辑意义 能独立编写规范的无参及有参函数 具备将复杂逻辑模块化的实践能力 建立模块化、结构化的程序设计思维 养成规范编码习惯,提升逻辑思维能力 知识目标 能力目标 素养目标 01 01 01 学习目标 目录 Part 01 教学导入 Part 02 知识讲授 Part 03 师生互动 Part 04 课堂练习 Part 05 课堂小结 教学导入:如何高效地组装一台电脑? 现状思考:拒绝从零造轮子 我们不会去从零开始制造CPU、内存条或硬盘,因为这需要极高的专业门槛和成本。 高效采购:利用标准化模块 去商店购买已经标准化生产好的“成品模块”,如Intel的CPU、金士顿的内存、希捷的硬盘。 快速组装:组合形成整体 将这些独立的、标准化的硬件“模块”进行物理组装,最终得到一台完整可用的电脑。 核心思想:模块化思维 这种思想能让复杂的任务变得简单、高效,同时每个模块都具备极高的可复用性。 教学导入:程序设计中的“模块化”思想 在编程中,一个复杂的程序也可以看作一台“电脑”。面对复杂功能(如“计算全班平均分”),我们将其分解为若干独立的“功能模块”来处理。 模块 01 输入学生各科成绩 模块 02 累加所有分数总和 模块 03 总分除以人数计算 模块 04 在屏幕输出平均分 在C语言中,这些独立的“功能模块”就是 ——函数 教学导入:函数定义的基本结构 在C语言中,定义一个函数就像设计一个“功能模块”的蓝图。它主要由两部分组成:函数头和函数体。 函数头 (Header) 函数的“说明书”。主要作用是告诉编译器这个函数的名称、返回值类型以及需要传入的参数列表。 函数体 (Body) 函数的“核心构造”。被大括号 {} 包裹,包含了实现函数具体功能的所有执行语句和逻辑代码。 知识讲授 函数的定义与调用 函数的定义 函数的调用 第一部分 函数的定义 知识讲授 知识讲授:无参函数 💡 核心定义 无参函数是指在调用时不接收外部传入数据的函数,其参数列表为空,逻辑相对独立。 类型标识符 函数名() { 声明部分 语句部分 } 💡 提示:若函数无需返回结果,返回值类型应声明为void,此时 return 语句可省略。 [返回值类型] (关键标识) 指定函数执行完毕后返回数据的类型,无返回值时必须使用 `void` 关键字。 函数名 (功能标识) 给功能模块起的名字,需遵循标识符命名规则,做到“见名知意”。 () 小括号 (参数列表) 括号内部为空,表示该函数不接收任何参数,是无参函数的重要特征。 {} 大括号 (函数体范围) 包裹函数实现具体功能的核心代码块,定义了函数的有效作用范围。 return 语句:将结果返回给调用者,void类型函数中可省略此语句。 知识讲授:定义一个打印欢迎语的函数 功能需求 创建一个专用函数,核心任务是在终端屏幕上输出固定的欢迎语 "Welcome to C World!"。 逻辑分析 该功能仅执行打印操作,不需要接收任何外部数据作为参数,也不需要向外部返回任何计算结果。 核心讲解 这是典型的“无参、无返回值”函数。`void` 关键字明确表示没有返回值,函数体中仅包含一条 `printf` 执行语句即可完成任务。 程序文本 // 无返回值,使用 void 关键字 void Hello() { // 执行核心打印任务 printf("Hello,world "); // void 类型可省略 return } 知识讲授:定义一个打印欢迎语的函数 知识讲授:有参函数 核心定义 与无参函数不同,有参函数必须接收外部传入的数据才能完成特定的逻辑执行。 C语言标准语法结构 类型标识符 函数名(形式参数表列) { 声明部分 语句部分 } 关键要素深度解析 形式参数列表 (形参) 函数的“原料入口”。规定了函数需要接收几个数据,以及每个数据的具体数据类型。 参数名的本质 相当于在函数内部定义的局部变量,专门用来“接住”并存储从外部传入的具体数值。 知识讲授:定义一个求两数之和的函数 核心需求 创建一个函数,接收外部传入的两个整数作为参数,计算它们的算术和,并将最终结果返回给调用者。 逻辑拆解 1. 定义函数名与入参(int a, int b); 2. 内部定义临时变量存储计算结果; 3. 执行加法运算,return 返回结果。 运行机制 当调用 add 函数时,系统会为形参分配内存接收实参值,执行完计算逻辑后,将结果“抛出”并释放临时资源。 程序文本 // 返回值类型为int,表示返回整数 int add(int a, int b) { int sum; // 定义临时变量sum sum = a + b; // 核心计算逻辑 return sum; // 将结果返回给调用者 } 知识讲授:定义一个求两数之和的函数 知识讲授:对函数进行命名 ▍ 规则回顾 合法字符组成 只能由字母 (a-z/A-Z)、数字 (0-9) 和下划线 (_) 组成。 首字符限制 严禁以数字开头,必须以字母 (a-z/A-Z) 或下划线 (_) 开头。 严格区分大小写 C语言标识符对大小写敏感,如 `Func` 与 `func` 是两个不同名字。 严禁使用C语言的保留关键字(如 if, else, for, while, int 等)。 ▍ 命名建议 核心原则:见名知意 拒绝 `func1`,推荐calculateAverage(计算平均值)。 动词驱动命名 常用动词:printInfo(打印),getMax(获取),isPrime(判断)。 驼峰命名法 首个单词小写,后续单词首字母大写。示例:userLogin。 下划线命名法:单词间用下划线分隔,全小写。示例:user_login。 知识讲授:函数体 核心定义 由一对{ }包裹的代码块,是函数功能的具体承载区域。 组成结构 包含声明(定义变量)与执行(运算/循环/分支等)两部分逻辑。 关键特性 内部定义的变量为局部变量,其作用域严格限制在函数体内部。 💡 核心提示:局部变量就像函数的“私有物品”,只能在函数体这个“房间”里使用,一旦离开这个房间(函数执行结束),变量就会被销毁,外部代码无法访问。 知识讲授:函数的“出口”——return ▍ 核心作用 返回结果:将函数内部的计算结果“携带”回调用它的位置。 终止执行:一旦执行到 return 语句,函数会立即结束并退出。 ▍ 两种语法形式 有返回值函数:return 表达式; // 例: return num1 + num2; 无返回值(void):return; // 直接结束函数,不带任何数据 知识讲授:定义函数时的“雷区” 先定义,后使用 在调用一个函数之前,必须确保它已经被定义过,否则编译器将无法识别该函数符号。 💡 建议:将主函数 main() 放在文件末尾,先集中定义所有工具函数。 禁止嵌套定义 C语言中,所有函数都是平行、独立的单元。严禁在一个函数的函数体内部再定义另一个函数。 // ❌ 错误示范 void outer() { int inner() { ... } // 非法嵌套 } 参数类型需明确 定义函数时,每个形式参数都必须显式声明其数据类型(如 int, char),不可省略。 // ❌ 错误示范 int add(a, b) { ... } // a, b 未声明类型 背诵记忆 函数定义的两大核心 一个完整的函数由函数头(声明部分) 和函数体(执行逻辑) 两部分紧密组成。 无参函数标准格式 格式固定为:返回值类型 函数名() { ... },括号内为空,代表不需要外部传入数据。 有参函数标准格式 格式:返回值类型 函数名(类型 参数...) { ... },括号内定义参数列表,用于接收外部数据。 return 语句的双重作用 1.返回值:将函数内部计算结果传递回调用处。 2.结束函数:执行后立即终止函数运行,不再执行后续代码。 重要避坑:禁止嵌套定义 在C/C++等语言规范中,函数内部不能再定义另一个函数。所有函数必须在同级作用域下进行声明与定义。 例题分析:定义一个求两数最大值的函数 题目要求 请定义一个名为max的函数,它需要接收两个整数作为输入参数,并返回这两个数中数值较大的那一个。 💡 核心目标: 将数学比较逻辑转化为结构化的代码函数。 核心要素拆解 返回值:int (整数类型) 函数名:max (语义化命名) 入参:int x, int y (两个整数) 逻辑:if-else 比较并返回 C语言实现 int max(int a, int b) { if (a > b) return a;// 取较大值 else return b; } 注:代码中使用了标准的单出口原则,结构清晰,易于阅读和维护。 课堂问答 Q1 · 函数结构 一个完整的函数定义包含哪两个主要部分? 函数头 和 函数体 Q2 · 命名规则 以下哪个是合法的函数名? A. 1func B. func-name C. func_name C。函数名是标识符,不能以数字开头,也不能包含减号。 Q3 · 代码纠错 指出下面函数定义的错误: int myFunc(a, b) { return a + b; } 错误:参数 a 和 b 未声明数据类型。正确写法应为: int myFunc(int a, int b)。 课堂练习:定义一个打印矩形的函数 📝 题目描述 请定义一个无参、无返回值的函数printRectangle,其功能是在屏幕上打印一个由星号组成的4行5列的矩形。 *** *** *** *** 💡 提示:注意打印的对齐与格式细节,体现代码规范。 🎯 实现要求 函数类型 无参、无返回值的 void 函数。 功能实现 使用嵌套循环(一个循环控制行数,一个循环控制列数)来打印星号。 编写要求 写出完整的函数定义代码。 课堂练习:定义一个打印矩形的函数 程序文本:定义一个打印矩形的函数 #include <stdio.h> // 引入标准输入输出头文件 void sayHello() //函数的定义 { //函数体 printf("************************** "); printf("* * "); printf("* Hello, C! * "); printf("* * "); printf("************************** "); } main() //主函数 { sayHello(); //函数调用 } 课堂练习:定义一个打印矩形的函数 课堂练习:定义一个计算矩形面积的函数 题目核心解析 📋 函数功能定义 接收两个整数类型的参数,分别代表矩形的「长」和「宽」,作为函数的输入源。 🎯 预期返回结果 在函数内部执行「长 × 宽」的算术运算,最终返回一个数值型结果,即矩形的面积。 💡 进阶思考:如果传入的参数不是整数(如字符串),程序会报错吗?如何添加参数校验来优化这个函数? 课堂练习:定义一个计算矩形面积的函数 程序文本:定义一个计算矩形面积的函数 #include<stdio.h> int calculateArea(int length, int width) { int area = length * width; // 1. 计算面积 return area; // 2. 返回计算结果 } // 简写优化: return length * width; main() //主函数 { printf("%d ",calculateArea(3,4)); //函数调用 } 课堂练习:定义一个计算矩形面积的函数 第二部分 知识讲授 函数的调用 知识讲授:函数的调用 核心定义 什么是函数调用? 调用函数本质上是控制程序的执行流程,使其跳转到该函数的定义处,执行函数体中封装的逻辑代码。 执行完后,返回原位置继续执行 一般形式 标准调用语法 在C语言中,函数调用的基本结构非常固定,由函数名和参数列表组成: 函数名(实参列表); // 分号表示语句结束 代码示例 ① 无参函数调用 printWelcome(); // 调用无参函数,无需传值 ② 有参函数调用 add(3, 5); // 调用有参函数,传入实参3和5 知识讲授:函数的“形参”与“实参” 形式参数 📍位置:在函数定义的参数列表中。 💡本质:是函数内部的局部变量,仅在函数内有效。 📝示例:`int add(int a, int b)` 中的变量 `a` 和 `b`。 实际参数 📍位置:在函数调用时传入的参数列表中。 💡本质:是具有确定值的具体数据(常量、变量或表达式)。 📝示例:`add(3, x + 2)` 中的数值 `3` 和表达式 `x+2`。 知识讲授:数据传递——“值传递” 默认机制:单向传递 在 C 语言中,函数参数的默认传递方式就是值传递,数据流向具有明确的单向性。 执行的核心过程 1. 调用函数时,系统为形参独立分配内存空间。 2. 将实参的值“复制”一份,赋值给对应的形参。 3. 函数内部对形参的修改,不会影响外部的实参。 生活中的形象比喻 就像把文件“复印”给同事,同事修改复印件不会改变你的原件。 知识讲授:数据传递——“值传递” 知识讲授:函数调用的三种方式——函数语句 基本形式 语法结构定义 函数名(实参列表); 这是最基础的调用写法。语句必须以分号结尾,程序执行时会直接跳转到该函数的定义处执行对应的逻辑。 核心特点 🎯 只关注“动作” 调用的目的是执行函数内部封装的操作流程,不依赖其计算结果。 📭 通常无返回值 常用于屏幕打印、文件写入或初始化等场景,函数定义时通常返回void。 代码示例 // 1. 调用自定义函数 printWelcome(); // 2. 调用标准库函数 printf("Hello World!"); 注:printf 是 C 语言标准库中最典型的输出函数,在实际开发中绝大多数时候都是作为函数语句来使用的。 知识讲授:函数调用的三种方式——函数表达式 核心形式 将函数调用语句,直接“嵌入”到一个具体的表达式中,使其成为表达式的有机组成部分之一。 关键特点 核心目的是利用函数执行后的返回值参与后续计算。不再是单纯执行函数,而是将其作为一个“值”来驱动赋值、算术运算等过程。 代码演示 // 1. 赋值运算 int res = add(3, 5); // 2. 算术运算 int sum = 10 + add(2, 3); // sum 最终等于 15 注:示例中 add() 函数需提前定义 知识讲授:函数调用的三种方式——函数实参 基本语法形式 函数名A(函数名B(实参列表)); 函数的嵌套调用写法,将一个函数的执行结果,直接作为另一个函数的输入数据。 核心逻辑特点 本质是数据的传递。将一个函数的返回值,直接作为另一个函数的实际参数进行传递和计算。 这种方式可以简化代码,避免定义过多的中间变量。 实战代码演示 // 1. 数学运算嵌套 int m = max(add(1,2), 5); // 2. 输入输出经典用法 putchar(getchar()); 先执行内层函数得到结果,再将结果传给外层函数执行。 背诵记忆 函数调用语法 固定格式: 函数名(实参列表); 形参 函数定义时的参数, 本质是局部变量。 实参 函数调用时的参数, 是传入的具体数值。 C语言参数传递机制 默认采用值传递(单向传递)。 特点:函数内部对形参的修改,不会影响外部实参的值。 函数的三种调用方式 ①函数语句:独立调用完成操作 ②函数表达式:参与运算 ③函数实参:作为另一个函数的参数 例题分析:调用求和函数 📝 题目描述 编写一个程序,定义一个求和函数 sum,然后在主函数中调用它,计算 1 到 100 的累加和并将结果输出到控制台。 💡 核心解题思路 函数定义:实现 int sum(int n),利用循环计算 1+2+...+n 的值。 函数调用:在 main 函数中,通过 sum(100) 传入参数,触发函数执行。 结果输出:使用函数表达式接收返回值,赋值给变量后打印最终结果。 例题分析:调用求和函数 程序文本:调用求和函数 #include<stdio.h> // 1. 定义求和函数 int sum(int n) { int i, total = 0; for(i=1; i<=n; i++) total += i; return total; } main() { int res =sum(100);// 2. 调用函数 printf("Sum is: %d ", res);// 3. 输出结果 } 例题分析:调用求和函数 课堂问答 参数匹配规则 Q: 形参和实参的个数和类型必须一致吗? A: 是的。实参的个数、类型和顺序必须与形参一一对应,程序才能正确编译运行。 值传递特性 void change(int x) { x=100; } int a=10; change(a); // a = ? A: 变量 a 的值仍为10。因为值传递时,函数修改的只是实参的临时副本,不影响原变量。 函数调用场景 Q: printf("%d", add(3, 5)); 属于哪种调用方式? A: 属于函数实参调用。函数 add 的返回值,作为了 printf 函数的一个实际参数被使用。 课堂练习 编程任务目标 1. 定义函数:编写 `isPrime(int n)`,判断整数是否为素数,是则返回1,否则返回0。 2. 主函数逻辑:从键盘输入整数 `num`,调用上述函数,并根据返回值输出判断结果。 💡 实现提示:判断逻辑需结合**循环**遍历可能的因子,并结合**分支**语句进行条件判断。 素数 (Prime Number) 素数(又称质数)是指大于 1 的自然数,且除了 1 和它本身外,不能被其他任何自然数整除。 ✅ 是素数:2, 3, 5, 7, 11 (只能被 1 和自身整除) ❌ 非素数:4 (2×2), 6 (2×3), 9 (3×3) (存在其他因子) 课堂练习 程序文本 #include <stdio.h> #include <math.h> // 判断素数的函数:小于等于1返回0,2返回1,偶数返回0 int isPrime(int n) { int i; if (n <= 1) return 0; if (n == 2) return 1; if (n % 2 == 0) return 0; for (i= 3; i <= sqrt(n); i += 2) if (n % i == 0) return 0; // 能被整除则不是素数 return 1; // 循环结束未返回,则是素数 } main() {int num; printf("Enter a number: "); scanf("%d", &num); isPrime(num)?printf("%d is a prime number. ",num):printf("%d is not a prime number. ",num); } 课堂练习 课堂小结 课堂小结 函数定义 •结构:函数头 + 函数体 •组成:返回值、函数名、参数列表、函数体 •原则:先定义后使用,不可嵌套 函数调用 •定义:执行功能的唯一方式 •格式:函数名(实参) •方式:语句、表达式、实参 参数传递 •形参:定义时的变量(模具) •实参:调用时的传入值(原料) •值传递:核心是复制,互不影响 核心思想与流程 •核心思想:模块化、结构化程序设计 •执行流程:跳转函数体执行,完毕后返回调用点 课后任务 作业 01 · 数值比较 编写函数getMax,接收三个整数,返回其中的最大值。 要求:在主函数中输入三个数,调用该函数并输出结果。 作业 02 · 菜单交互 定义无参无返回值函数printMenu。 功能:打印简单菜单(如:1.加法 / 2.减法 / 3.退出)。在主函数中调用该函数。 作业 03 · 温度转换 定义函数convertTemperature,接收摄氏温度,返回华氏温度。 公式:F = C × 9/5 + 32。在主函数中输入温度并调用输出。 谢谢观看 THANKS $

资源预览图

第7章 第3节:函数的定义与调用(课件)-《C语言程序设计》(电子工业出版社)上好课
1
第7章 第3节:函数的定义与调用(课件)-《C语言程序设计》(电子工业出版社)上好课
2
第7章 第3节:函数的定义与调用(课件)-《C语言程序设计》(电子工业出版社)上好课
3
第7章 第3节:函数的定义与调用(课件)-《C语言程序设计》(电子工业出版社)上好课
4
第7章 第3节:函数的定义与调用(课件)-《C语言程序设计》(电子工业出版社)上好课
5
第7章 第3节:函数的定义与调用(课件)-《C语言程序设计》(电子工业出版社)上好课
6
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。