1、C语言程序设计语言程序设计学习目标:学习目标:为后续专业课为后续专业课(数据结构、面向对象程序设计、单片机数据结构、面向对象程序设计、单片机与嵌入式系统、物联网技术等课程与嵌入式系统、物联网技术等课程)奠定程序设计基础。奠定程序设计基础。第第1 1章:章:C C语言语法基础语言语法基础第第2 2章:章:C C程序设计基础程序设计基础第第3 3章:数组章:数组第第4 4章:函数章:函数第第5 5章:指针章:指针第第6 6章:结构体、共用体、枚举类型章:结构体、共用体、枚举类型第第7 7章:文件章:文件 教学内容:教学内容:C语言程序设计语言程序设计第第4 4章章 函数函数【学习目标学习目标】1
2、1掌握定义函数的方法;掌握定义函数的方法;2 2理解函数参数传递及函数返回值的概念;理解函数参数传递及函数返回值的概念;3.3.掌握函数的掌握函数的3 3种调用方法;种调用方法;4.4.掌握普通变量和数组作为函数参数传递的方法;掌握普通变量和数组作为函数参数传递的方法;5.5.理解并区别变量的类型;理解并区别变量的类型;6.6.掌握内部函数和外部函数的概念;掌握内部函数和外部函数的概念;*7.7.熟悉中断和嵌入式中断服务函数的概念。熟悉中断和嵌入式中断服务函数的概念。【学习内容学习内容】4.1 4.1 函数概述函数概述 4.2 4.2 定义函数的方法定义函数的方法 4.3 4.3 函数的调用函
3、数的调用 4.4 4.4 数组作为函数参数传递数组作为函数参数传递 4.5 4.5 变量的类型变量的类型 4.6 4.6 内部函数和外部函数内部函数和外部函数 *4.7 4.7 嵌入式中断服务函数嵌入式中断服务函数第第4 4章章 函数函数4.1 函数概述函数概述4.1 函数概述函数概述4.1 函数概述函数概述4.1 函数概述函数概述4.1 函数概述函数概述 需要注意:需要注意:4.2 定义函数的方法定义函数的方法4.2.1 定义定义无参无参函数函数4.2 定义函数的方法定义函数的方法声明部分声明部分执行部分执行部分系统编译不通过系统编译不通过 !4.2.1 定义定义无参无参函数函数4.2 定义
4、函数的方法定义函数的方法4.2.2 定义定义有参有参函数函数4.2 定义函数的方法定义函数的方法4.2.2 定义定义有参有参函数函数4.2 定义函数的方法定义函数的方法4.2.3 定义定义空空函数函数4.3 函数的调用函数的调用4.3.1 函数的函数的一般一般调用调用4.3 函数的调用函数的调用1、函数的函数的一般调用一般调用形式形式 4.3.1 函数的函数的一般一般调用调用4.3 函数的调用函数的调用【例例4.1】函数的一般调用:求两个数的最大值。函数的一般调用:求两个数的最大值。4.3.1 函数的函数的一般一般调用调用1、函数的函数的一般调用一般调用形式形式 c=max(a,b);(mai
5、n函数)函数)void main()4.3 函数的调用函数的调用2、关于函数调用时关于函数调用时“参数传递参数传递”的几点说明的几点说明 4.3.1 函数的函数的一般一般调用调用形参:形参:x4.3 函数的调用函数的调用函数调用时函数调用时被调函数执行时被调函数执行时实参:实参:a1b3y1324【例例4.2】函数参数传递。函数参数传递。2、关于函数调用时关于函数调用时“参数传递参数传递”的几点说明的几点说明 4.3.1 函数的函数的一般一般调用调用void main()4.3 函数的调用函数的调用3、函数的值函数的值 4.3.1 函数的函数的一般一般调用调用4.3 函数的调用函数的调用4、对
6、被调函数的声明对被调函数的声明 在被调函数在被调函数首部首部的基础上的基础上加一分号加一分号4.3.1 函数的函数的一般一般调用调用4.3 函数的调用函数的调用4、对被调函数的声明对被调函数的声明 4.3.1 函数的函数的一般一般调用调用提提倡倡使使用用void main()void main()void main()4.3 函数的调用函数的调用4.3.2 函数的函数的嵌套嵌套调用调用4.3 函数的调用函数的调用程序代码请链接:程序代码请链接:例例4_3.c4.3.2 函数的函数的嵌套嵌套调用调用【例例4.3】函数的嵌套调用:函数的嵌套调用:加、减、乘、除四则运算。加、减、乘、除四则运算。vo
7、id main()4.3 函数的调用函数的调用4.3.3 函数的函数的递归递归调用调用4.3 函数的调用函数的调用显然,这是一个递归问题,分显然,这是一个递归问题,分回推回推和和递推递推两个过程:两个过程:上述过程,可用数学公式表述:上述过程,可用数学公式表述:4.3.3 函数的函数的递归递归调用调用4.3 函数的调用函数的调用【例例4.5】用递归方法计算用递归方法计算n的阶乘的阶乘n!用递归方法计算用递归方法计算n!,可用公式表示:,可用公式表示:4.3.3 函数的函数的递归递归调用调用4.4 数组作为函数参数传递数组作为函数参数传递 4.4.1 数组元素数组元素作函数实参作函数实参【例例4
8、.6】数组元素作函数实参:根据学生课程成绩,判断考试结果。数组元素作函数实参:根据学生课程成绩,判断考试结果。void main()4.4 数组作为函数参数传递数组作为函数参数传递 4.4.2 数组名数组名作为函数参数作为函数参数4.4 数组作为函数参数传递数组作为函数参数传递 【例例4.7】数组名作为函数的实参和形参。数组名作为函数的实参和形参。4.4.2 数组名数组名作为函数参数作为函数参数void main()4.4 数组作为函数参数传递数组作为函数参数传递 【例例4.8】数组名作为函数的参数,编写冒泡法和选择法排序程序(由小到大)。数组名作为函数的参数,编写冒泡法和选择法排序程序(由小
9、到大)。程序代码请链接:程序代码请链接:例例4_8.c4.4.2 数组名数组名作为函数参数作为函数参数4.5 变量的类型变量的类型 4.5.1 局部变量局部变量和和全局变量全局变量1、局部变量局部变量 void main()4.5 变量的类型变量的类型 2、全局变量全局变量 4.5.1 局部变量局部变量和和全局变量全局变量void main()【例例4.9】输入正方体的棱长,输出其表面积和体积的大小。输入正方体的棱长,输出其表面积和体积的大小。4.5 变量的类型变量的类型 2、全局变量全局变量 4.5.1 局部变量局部变量和和全局变量全局变量void main()4.5 变量的类型变量的类型【
10、例例4.10】外部变量与局部变量同名。外部变量与局部变量同名。2、全局变量全局变量 4.5.1 局部变量局部变量和和全局变量全局变量void main()【例例4.11】考察全局变量和局部变量的系统默认初值。考察全局变量和局部变量的系统默认初值。4.5 变量的类型变量的类型 2、全局变量全局变量 4.5.1 局部变量局部变量和和全局变量全局变量void main()4.5 变量的类型变量的类型 4.5.2 变量的变量的存储类别存储类别4.5 变量的类型变量的类型 1、用用auto声明声明动态局部动态局部变量变量 4.5.2 变量的变量的存储类别存储类别4.5 变量的类型变量的类型 2、用用st
11、atic声明声明静态局部静态局部变量变量【例例4.12】考察静态局部变量的值。考察静态局部变量的值。可见,变量可见,变量a a、b b在三次函数调用时在三次函数调用时和函数调用结束时值的变化情况:和函数调用结束时值的变化情况:4.5.2 变量的变量的存储类别存储类别void main()4.5 变量的类型变量的类型 2、用用static声明声明静态局部静态局部变量变量4.5.2 变量的变量的存储类别存储类别4.5 变量的类型变量的类型 静态局部变量的静态局部变量的应用场合:应用场合:【例例4.13】利用静态局部变量实现:输出利用静态局部变量实现:输出1到到5的阶乘。的阶乘。问题分析:问题分析:
12、1!=12!=21!3!=32!4!=43!5!=54!(n+1)!=(n+1)n!2、用用static声明声明静态局部静态局部变量变量4.5.2 变量的变量的存储类别存储类别void main()4.5 变量的类型变量的类型 2、用用static声明声明静态局部静态局部变量变量4.5.2 变量的变量的存储类别存储类别静态局部变量的静态局部变量的应用场合:应用场合:4.5 变量的类型变量的类型 3、用用register声明声明寄存器寄存器变量变量【例例4.14】使用寄存器变量,输出使用寄存器变量,输出1+2+3+n的值。的值。4.5.2 变量的变量的存储类别存储类别void main()4.5
13、 变量的类型变量的类型 说明:说明:3、用用register声明声明寄存器寄存器变量变量4.5.2 变量的变量的存储类别存储类别4.5 变量的类型变量的类型 4、用用extern声明声明外部外部变量(变量(扩展外部变量的作用域扩展外部变量的作用域)(1 1)在)在一个文件内一个文件内声明外部变量声明外部变量【例例4.15】用用extern声明外部变量,扩展其在程序文件中的作用域。声明外部变量,扩展其在程序文件中的作用域。4.5.2 变量的变量的存储类别存储类别void main()4.5 变量的类型变量的类型(2 2)在)在多个文件的程序中多个文件的程序中声明外部变量声明外部变量4、用用ext
14、ern声明声明外部外部变量(变量(扩展外部变量的作用域扩展外部变量的作用域)4.5.2 变量的变量的存储类别存储类别4.5 变量的类型变量的类型【例例4.16】用用extern将外部变量的作用域扩展到其他文件。将外部变量的作用域扩展到其他文件。(2 2)在)在多个文件的程序中多个文件的程序中声明外部变量声明外部变量4、用用extern声明声明外部外部变量(变量(扩展外部变量的作用域扩展外部变量的作用域)4.5.2 变量的变量的存储类别存储类别void main()4.5 变量的类型变量的类型 5、用用static声明声明静态外部静态外部变量(变量(缩小外部变量的作用域缩小外部变量的作用域)4.
15、5.2 变量的变量的存储类别存储类别void main()4.6 内部函数和外部函数内部函数和外部函数 4.6 内部函数和外部函数内部函数和外部函数 void main()*4.7 嵌入式中断服务函数嵌入式中断服务函数*4.7 嵌入式中断服务函数嵌入式中断服务函数 利用利用MCU定时器中断实现每隔定时器中断实现每隔200ms切换指示灯的状态,其示意代码:切换指示灯的状态,其示意代码:定时时间定时时间200ms200ms到来时,到来时,CPUCPU将主动执行定时中断服将主动执行定时中断服务函数,而不是被主函数调用。显见,中断服务函数与一务函数,而不是被主函数调用。显见,中断服务函数与一般的子函数不同,一般的函数是被其他函数所调用而被动般的子函数不同,一般的函数是被其他函数所调用而被动执行,如代码中的执行,如代码中的light_changelight_change函数是被定时中断服务函函数是被定时中断服务函数调用的。数调用的。
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。