版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编辑课件第第8 8章章 函数与变量函数与变量8.1 8.1 函数函数8.2 8.2 变量的作用域和存储类型变量的作用域和存储类型编辑课件 根据结构化程序设计原则,一个较大的程根据结构化程序设计原则,一个较大的程序要经过自顶向下的分析,逐步细化为若干模序要经过自顶向下的分析,逐步细化为若干模块,每一模块完成某种功能,在块,每一模块完成某种功能,在C C语言中由函语言中由函数来实现这些模块。数来实现这些模块。 C C语言源程序是由许多函数组成的。语言源程序是由许多函数组成的。mainmain是由用户自己编写的,其中可以调用是由用户自己编写的,其中可以调用C C提供的提供的库函数,也可以调用自己和他
2、人编写的函数,库函数,也可以调用自己和他人编写的函数,但总是从但总是从main()main()开始执行。开始执行。编辑课件 C C语言提供的标准库中存放着若干已定语言提供的标准库中存放着若干已定义的函数,在使用这些库函数时,需要使义的函数,在使用这些库函数时,需要使用文件包含命令(用文件包含命令(#include#include)将带有该函)将带有该函数定义的头文件包含到当前程序;数定义的头文件包含到当前程序; 而对于标准库函数未提供的功能则只而对于标准库函数未提供的功能则只能由用户编写自定义函数来实现。能由用户编写自定义函数来实现。编辑课件标准库函数的调用:标准库函数的调用:形式:函数名形式
3、:函数名( (参数表参数表) )调用库函数有两种形式:调用库函数有两种形式:(1)(1)在表达式中:在表达式中:y=sqrt(x)+1.5y=sqrt(x)+1.5(2)(2)作为独立的语句完成某种操作作为独立的语句完成某种操作: : scanf(“%d”,&x); scanf(“%d”,&x);注意:注意:调用各个函数时,必须给予类型相同调用各个函数时,必须给予类型相同的参数,并且最后的结果作为函数的返回值。的参数,并且最后的结果作为函数的返回值。编辑课件函数函数 C C语言中所有函数的定义是并列的、独语言中所有函数的定义是并列的、独立的。各个函数之间没有嵌套或从属的关立的。
4、各个函数之间没有嵌套或从属的关系。系。 建立函数即为函数的定义;使用函数即建立函数即为函数的定义;使用函数即为函数的调用。为函数的调用。 调用其它函数的函数称为调用其它函数的函数称为主调函数主调函数;被;被其它函数所调用的函数称为其它函数所调用的函数称为被调函数被调函数。 mainmain函数只能被系统调用,而对于其它函数只能被系统调用,而对于其它函数而言,函数而言,mainmain函数只能是主调函数函数只能是主调函数。编辑课件8.1 8.1 函数函数函数只能通过被调用才能执行。函数只能通过被调用才能执行。8.1.1 8.1.1 函数的定义函数的定义 自定义函数必须经过用户自行定义后,才能使用
5、。自定义函数必须经过用户自行定义后,才能使用。函数原型定义格式:函数原型定义格式:函数类型函数类型 函数名函数名( (类型类型 形参形参1,1,类型类型 形参形参2)2) 声明部分声明部分 执行部分执行部分 编辑课件【例【例8.1】求】求3个字符中的最大值个字符中的最大值#include main()char a,b,c,d;printf(Enter three characters:n);scanf(%c,%c,%c,&a,&b,&c);printf(Max is %cn,d); 编辑课件(1)(1)函数类型函数类型 return voidreturn void(2)
6、(2)函数名函数名 同一程序中,函数的名称应同一程序中,函数的名称应是唯一的。是唯一的。(3)(3)函数参数函数参数 分为有参、无参函数。分为有参、无参函数。(4)(4)形参说明形参说明 若是有参函数,在函数定义若是有参函数,在函数定义时必须对参数类型进行说明。时必须对参数类型进行说明。(5)(5)函数体函数体 声明部分和执行部分。声明部分和执行部分。对函数定义作进一步说明:对函数定义作进一步说明:编辑课件 若一个函数定义后,未被调用,它是若一个函数定义后,未被调用,它是不能自己执行自己的。不能自己执行自己的。 定义空函数:定义空函数: 函数类型函数类型 函数名()函数名() 空函数实际上什么
7、也不做,但具有空函数实际上什么也不做,但具有可用在以后扩充函数的功能。可用在以后扩充函数的功能。编辑课件【例【例8.28.2】编程计算组合数】编程计算组合数C(n,k)=n!/(k!(n-k)!)C(n,k)=n!/(k!(n-k)!)#include int fac(int m)int i,s=1;for(i=1;i=m;i+)s*=i;return(s); void main()int n,k,c;printf(请输入请输入C(n,k):);scanf(%d,%d,&n,&k);c=fac(n)/(fac(k)*fac(n-k);printf(nC(n,k)=%dn,c);
8、 请输入 C(n,k): 6,4C(n,k)=15编辑课件8.1.2 8.1.2 函数的参数和返回值函数的参数和返回值1.1.函数的参数函数的参数 定义函数时的参数为形参,调用函数时的定义函数时的参数为形参,调用函数时的参数为实参。参数为实参。形参和实参不同:形参和实参不同: 当函数未被调用时,形参无确定值,只是形式当函数未被调用时,形参无确定值,只是形式上的数。函数定义时形参不占内存,只有当函数上的数。函数定义时形参不占内存,只有当函数被调用时,形参才被分配内存单元,接收传递来被调用时,形参才被分配内存单元,接收传递来的实参值。的实参值。 实参则有确定值。实参可以是常量、变量或表实参则有确定
9、值。实参可以是常量、变量或表达式。当调用函数时,实参值将被传递给对应的达式。当调用函数时,实参值将被传递给对应的形参。形参。编辑课件 使用时实参和形参个数必须相等,对应使用时实参和形参个数必须相等,对应实参和形参的数据类型应该相同。实参和形参的数据类型应该相同。当实参和形参不一致时:当实参和形参不一致时:(1)(1)类型不同类型不同 (2)(2)个数不同个数不同 另外,实参和形参可以同名,虽然是同另外,实参和形参可以同名,虽然是同名也是两个不同的变量,占用不同的内存单名也是两个不同的变量,占用不同的内存单元,不会发生混浠。元,不会发生混浠。编辑课件2.函数的返回值函数的返回值主调函数调用被调函
10、数的目的:主调函数调用被调函数的目的:(1)(1)完成一定的处理功能,无返回值;完成一定的处理功能,无返回值;(2)(2)得到一个计算处理结果,并向主调函数得到一个计算处理结果,并向主调函数 返回一个返回值(用返回一个返回值(用returnreturn语句)。语句)。其格式如下:其格式如下:return (return (表达式表达式);); return return 表达式表达式; ; return; return;执行过程:执行过程:程序执行到程序执行到returnreturn时,流程返回时,流程返回 到调用函数的地方到调用函数的地方( (退出被调函数),退出被调函数), 带回函数值。带
11、回函数值。 编辑课件【例【例8.38.3】编写子程序求两个数的和。】编写子程序求两个数的和。#include float add(float x,float y) float z; z=x+y; return(z); main()float a,b,c; printf(Input two floats:); scanf(%f,%f,&a,&b); c=add(a,b);printf(Sum is %fn,c); 编辑课件在设计带有返回值的函数时注意以下几点:在设计带有返回值的函数时注意以下几点:(1 1)无返回值的函数应该定义)无返回值的函数应该定义voidvoid类型,否则类
12、型,否则会返回一个不确定的值。会返回一个不确定的值。(2 2)函数返回值的类型应为定义函数时函数的)函数返回值的类型应为定义函数时函数的类型。若类型。若returnreturn语句中表达式值的类型与函数类语句中表达式值的类型与函数类型不一致,系统会将其强制转换为函数类型。型不一致,系统会将其强制转换为函数类型。(3 3)returnreturn语句的另一功能是结束被调函数的语句的另一功能是结束被调函数的运行,返回主调函数中继续执行后续语句。无返运行,返回主调函数中继续执行后续语句。无返回值的函数中也可以有回值的函数中也可以有returnreturn语句,可写为:语句,可写为: return;r
13、eturn;若没有若没有return return 语句,会执行到函数体最后的语句,会执行到函数体最后的“”为止,但也无确定的函数值。为止,但也无确定的函数值。编辑课件8.1.3 8.1.3 函数的声明和调用函数的声明和调用1.1.函数的声明函数的声明一个函数调用另一个函数必须具备的前提是:一个函数调用另一个函数必须具备的前提是:(1 1)被调函数已存在。被调函数可以是库函)被调函数已存在。被调函数可以是库函数,或者是用户自定义的函数。数,或者是用户自定义的函数。(2 2)对于库函数,调用前要用)对于库函数,调用前要用#include#include命令命令包含相应的头文件;对于自定义函数,要
14、在主调包含相应的头文件;对于自定义函数,要在主调函数中对其进行声明。函数中对其进行声明。编辑课件 声明的目的:声明的目的: 使编译系统在编译阶段对函数调用使编译系统在编译阶段对函数调用进行合法性检查。即说明被调函数返回进行合法性检查。即说明被调函数返回值的类型,检查实参与形参的类型与个值的类型,检查实参与形参的类型与个数是否一致。数是否一致。 优点:优点: 提高调试效率,把错误改正在初级提高调试效率,把错误改正在初级阶段;提高程序的可读性。阶段;提高程序的可读性。 函数的定义只能有一次,而函数声函数的定义只能有一次,而函数声明则可以有多次。明则可以有多次。编辑课件标准标准C C语言声明格式如下
15、:语言声明格式如下: 函数类型函数类型 函数名(形参类型表);函数名(形参类型表);例如:例如:double mix(int a,double b);double mix(int a,double b); float big(char,int); float big(char,int);【例【例8.48.4】编写子】编写子程序,判断两个数程序,判断两个数的符号是否相同。的符号是否相同。若相同就输出若相同就输出Y,Y,否否则输出则输出N N。#include char f(float a,float b) ;main() float x,y; char p; printf(Input two f
16、loats: ); scanf(“ %f,%f ”,&x,&y); printf(“%c ”,p); char f(float a,float b)if(a*b0) return(Y);else return(N); 编辑课件C C语言约定,以下语言约定,以下3 3中情况下可省略对被调函中情况下可省略对被调函数的声明:数的声明:(1)(1)在同一文件中被调函数的定义出现在主在同一文件中被调函数的定义出现在主调函数之前。调函数之前。(2)(2)被调函数的返回值类型为整型时。被调函数的返回值类型为整型时。 整型整型是系统默认的类型。是系统默认的类型。(3)(3)在文件的开头,所有函
17、数定义之前已对在文件的开头,所有函数定义之前已对各个函数统一进行了声明,这样,在各主调函各个函数统一进行了声明,这样,在各主调函数内可以不必再次声明。数内可以不必再次声明。编辑课件2. 2. 函数调用函数调用 函数的调用就是主调函数通过传递一定的函数的调用就是主调函数通过传递一定的信息来使用被调函数的功能。信息来使用被调函数的功能。函数调用的一般格式:函数调用的一般格式: 函数名(实参表列);函数名(实参表列);圆括弧内实参的个数、出现的顺序必须与函圆括弧内实参的个数、出现的顺序必须与函数定义中的形参一致,实参类型一般也应与形数定义中的形参一致,实参类型一般也应与形参表列对应相同,实参之间用逗
18、号分隔。参表列对应相同,实参之间用逗号分隔。编辑课件函数调用的执行过程:函数调用的执行过程:(1)为形参分配内存单元,并把实参值一一对为形参分配内存单元,并把实参值一一对应的传送给形参。应的传送给形参。(2)进入函数体,执行语句,实现函数的功能。进入函数体,执行语句,实现函数的功能。执行到执行到return语句,计算表达式的值,释放语句,计算表达式的值,释放形参及本函数的局部变量所占内存,返回主形参及本函数的局部变量所占内存,返回主调函数。调函数。(3)继续执行主调函数中的后续语句。继续执行主调函数中的后续语句。【例【例8.58.5】计算两个实数的和与积,并将它们】计算两个实数的和与积,并将它
19、们按大小顺序输出。按大小顺序输出。编辑课件#include void output() printf(*n);float add(float x, float y) return(x+y); float multiply(float x,float y) return(x*y); void sort(float x,float y) float a,b; char ch1,ch2; if(x=y) a=x;b=y; else a=y;b=x; printf(最大数为最大数为:%d,最小数为最小数为:%dn,a,b);void main() float a,b,sum,mul; output(); printf(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 车辆质押合同模板10篇
- 营养师案例试题及答案
- 学校校园安全隐患大排查大整治实施方案
- 浙江省杭州市萧山区2026年中考模拟英语试卷附答案
- 2025年临床执业医师《临床》卷
- 药品质量管理制度试题及答案
- 医疗机构XX管理制度
- 中职日常考试试题及答案
- 医疗器械经营质量管理规范(GSP)内审培训试题及答案
- 183红色喜庆福字背景的“金龙献瑞”龙年新年主题模板 2
- 急性脑梗死临床诊疗指南(2025版)
- 2026商用航空发动机产业链商业模式、估值分布及未来发展前景分析报告
- 中药膏摩技术
- GB/T 46871-2025二氧化碳捕集、运输和地质封存提高原油采收率的二氧化碳封存
- 生产统计管理岗位操作规范
- 2026年湖南交通职业技术学院单招综合素质笔试参考题库带答案解析
- 针刺伤处理课件
- 2026年江苏卫生健康职业学院高职单招职业适应性测试备考试题有答案解析
- 2026年娱乐行业互动电影报告及未来五至十年沉浸式娱乐报告
- 2023年阜阳科技职业学院单招职业适应性测试题库附答案解析
- 2026年萍乡卫生职业学院单招职业技能考试必刷测试卷及答案1套
评论
0/150
提交评论