函数C语言大学实用教程课件苏小红.ppt
《函数C语言大学实用教程课件苏小红.ppt》由会员分享,可在线阅读,更多相关《函数C语言大学实用教程课件苏小红.ppt(88页珍藏版)》请在三一办公上搜索。
1、第5章 函数与程序结构,哈尔滨工业大学计算机科学与技术学院苏小红,C语言大学实用教程,内容提要,函数定义、函数调用、函数原型、函数返回值难点:函数的参数传递与返回值 全局变量、自动变量、静态变量、寄存器变量难点:变量的作用域与存储类型 程序调试结构设计与模块化 代码风格问题,程序设计的艺术,三国演义中有这样一段描写:懿问曰:“孔明寝食及事之烦简若何?”使者曰:“丞相夙兴夜寐,罚二十以上皆亲览焉。所啖之食,日不过数升。”懿顾谓诸将曰:“孔明食少事烦,其能久乎?”此话音落不久,诸葛亮果然病故于五丈原。“事无巨细”,“事必躬亲”管理学的观点是极其排斥这种做法的,认为工作必须分工,各司其职其中的思想,
2、在程序设计里也适用,程序设计的艺术,C语言为程序的结构提供了两样武器函数和模块函数(function)是结构设计的最基本单位“一个程序应该是轻灵自由的,它的子过程就象串在一根线上的珍珠。”Geoffrey James的编程之道,数学函数(1),自变量,因变量,函数名,数学函数(2),一个自变量,一个因变量,两个自变量,一个因变量,数学函数(3),自变量,因变量,数学函数(4),一个变量二个变量N个变量,一个变量二个变量N个变量,自变量与因变量的关系,数学函数(5),集合A,关系,集合B,程序设计中的函数,程序设计中的函数不局限于计算计算类,如打印阶乘表的程序判断推理类,如排序、查找,用函数解决
3、问题的要点,分而治之函数把较大的任务分解成若干个较小的任务,并提炼出公用任务复用程序员可以在其他函数的基础上构造程序,而不需要从头做起信息隐藏设计得当的函数可以把具体操作细节对程序中不需要知道它们的那些部分隐藏掉,从而使整个程序结构清楚,C中的函数(Function),说明:一个源程序文件由一个或多个函数组成。一个C程序由一个或多个源程序文件组成。C程序的执行从main函数开始,调用其他函数后流程回到main函数,在main函数中结束整个程序运行。所有函数都是平行的,即函数定义时是互相独立的,一个函数并不从属于另一个函数。,函数的分类,标准函数,即库函数 目前为止,我们所学习的printf()
4、、scanf()等都是ANSI C标准定义的库函数。任意符合ANSI C的编译器,不管它支持什么平台,都必须提供这些函数供用户使用。用户自定义函数 用户按自己的意愿编写自己的函数,完成人员功能。,函数的定义,变量必须先定义,后使用。函数也一样。函数定义的语法如下:返回值类型 函数名(类型 参数1,类型 参数2,)函数体return 表达式;返回值类型与return语句配合当函数执行到return语句时,就中止函数的执行,返回到调用它的地方函数名的命名规则和变量名的命名规则一致。,函数的返回值是通过函数中的 return 语句获得的。,函数定义(definition),如果没有参数,则应该用vo
5、id注明其形如:如果不需要返回值,则应该用void定义返回值类型其形如:函数内部可以定义只能由该函数自己使用的变量,称内部变量。参数表里的变量也是内部变量,int Func(void),void Func(int i,float f),函数参数,函数参数:形参(形式参数):在定义函数时,定义函数名后面括号中的变量名实参(实际参数):在主调函数中调用一个函数,调用函数名后面括号中的参数(或表达式),实参,形参,函数调用(call),从实参到形参是单向值传递 调用时会把实参的值分别复制给形参,这个过程就是值传递。调用函数时,必须提供所有的参数(且必须是已赋值的)提供的参数个数、类型、顺序应与定义时
6、相同,例5.1a 计算两个整数的平均数,/*函数功能:计算平均数 函数入口参数:整型x,存储第一个运算数 整型y,存储第二个运算数 函数返回值:平均数*/int Average(int x,int y)int result;result=(x+y)/2;return result;,例5.1b 使用了Average函数的main(),main()int a=12;int b=24;int ave;ave=Average(a,b);printf(Average of%d and%d is%d.n,a,b,ave);,函数调用(call),有返回值时函数调用可以放到一个数值表达式中如 c=max(
7、a,b);也可作为另一个函数调用的参数如 c=max(max(a,b),c);printf(%dn,max(a,b);无返回值时函数调用可直接作为表达式如 display(a,b);,函数原型(prototype),调用一个函数之前,先要对其返回值类型、函数名和参数进行声明(declare)有助于编译器进行类型检查声明时不要省略参数以及返回值的类型,例5.1,#include/*函数功能:计算平均数 函数入口参数:整型x,存储第一个运算数 整型y,存储第二个运算数 函数返回值:平均数*/main()int a=12;int b=24;int ave=Average(a,b);printf(Av
8、erage of%d and%d is%d.n,a,b,ave);,当返回值为整型或者函数定义在函数调用前面时,可以省略原型,int Average(int x,int y)int result;result=(x+y)/2;return result;,例5.1,#include/*声明Average()函数*/main()int a=12;int b=24;int ave=Average(a,b);printf(Average of%d and%d is%d.n,a,b,ave);/*函数功能:计算平均数 函数入口参数:整型x,存储第一个运算数 整型y,存储第二个运算数 函数返回值:平均数
9、*/int Average(int x,int y)int result;result=(x+y)/2;return result;,int Average(int x,int y);,main()a();,a 函数b();return;,b函数return;,在被调函数中,又调用了函数-嵌套调用,函数的嵌套调用,循序渐进式编程实验4:小学生加法考试题,通过输入两个加数给学生出一道加法运算题,输入答案正确:right错误:Not correct!Try again!,循序渐进式编程实验4:小学生加法考试题,void Print(int flag)if(flag)printf(Right!n);
10、else printf(Not correct!n);,实验4:小学生加法考试题,/*函数功能:计算两整型数之和,如果与用户输入的答案相同,则返回1,否则返回0 函数参数:整型变量a和b,分别代表被加数和加数 函数返回值:当a加b的结果与用户输入的答案相同时,返回1,否则返回0*/int AddTest(int a,int b)int answer;printf(%d+%d=,a,b);scanf(%d,main()int a,b,answer;printf(Input a,b:);scanf(%d,%d,do while(answer=0);,实验4:小学生加法考试题,main()answe
11、r=AddTest(a,b);Print(answer,chance);,chance=0;do chance+;while(answer=0,实验4:小学生加法考试题,srand(time(NULL);error=0;score=0;for(i=0;i10;i+)a=rand()%10+1;b=rand()%10+1;answer=AddTest(a,b);Print(answer);if(answer=1)score=score+10;else error+;,实验4:小学生加法考试题,作业,P180,习题5.35.4,函数与类型,C语言规定:返回表达式的类型必须能转换到函数定义头部的返回
12、值类型。执行返回语句时,表达式求出的值先转换到函数头部要求的类型,以转换的结果作为实际返回值。举例来说,在下面的函数定义里,return语句求出表达式的值之后就需要做类型转换:int fun(int m)return 3.14159*m;,函数与类型,要求每个实参的值应该能转换到函数参数表里规定的类型。如果某个实参的类型与函数的要求不一致,首先转换该实参求出的值,而后将得到的结果送给函数。例如,对上面的函数fun,下面调用中也要做类型转换:x=fun(3.09);,int f(int n,float m)return(m+n)/4;int main()float y=3;printf(%dn,
13、f(y,y+1);return 0;,下面的程序在执行时,哪些地方将发生类型转换?程序打印的值是什么?,命名规则,在Linux/Unix平台习惯用function_name 本书采用Windows风格函数名命名用大写字母开头、大小写混排的单词组合而成 FunctionName 变量名形式“名词”或者“形容词+名词”如变量名oldValue与newValue等函数名形式“动词”或者“动词+名词”(动宾词组)如函数名GetMax()等,对函数接口加以注释说明,/*函数功能:实现功能 函数参数:参数1,表示 参数2,表示 函数返回值:*/返回值类型 函数名(参数表)函数体return 表达式;,主函
14、数mainmain的返回值规定为int。这个返回值在程序结束时送给外部。程序外部(如操作系统)可用这个值一般用返回0表示程序正常结束,其他值表示出错main以外的函数只有被调用时才会执行不允许调用main,int main()/*一般写法*/.return 0;,变量的作用域,指在源程序中定义变量的位置及其能被读写访问的范围分为局部变量(Local Variable)全局变量(Global Variable)演示变量的作用域规则例5.4,局部变量,局部变量在语句块内定义的变量形参也是局部变量特点定义时不会自动初始化,除非程序员指定初值进入语句块时获得内存,仅能由语句块内语句访问,退出语句块时释
15、放内存,不再有效 并列语句块各自定义的同名变量互不干扰,全局变量,全局变量在所有函数之外定义的变量特点在程序中定义它的位置以后都有效在定义点之前或在其他文件中引用,应该进行如下声明:extern 类型名 变量名;从程序运行起即占据内存,程序运行过程中可随时访问,程序退出时释放内存 使函数之间的数据交换更容易,也更高效但是并不推荐使用,尽量少用因为谁都可以改写全局变量,所以很难确定是谁改写了它,例5.7,#include int global;/*定义全局变量*/void GlobalPlusPlus(void);main()global=1;printf(Before GlobalPlusPl
16、us(),it is%dn,global);GlobalPlusPlus();printf(After GlobalPlusPlus(),it is%dn,global);/*函数功能:对全局变量global加1,并打印加1之前与之后的值 函数入口参数:无 函数返回值:无*/void GlobalPlusPlus(void)printf(Before+,it is%dn,global);global+;printf(After+,it is%dn,global);,Before GlobalPlusPlus(),it is 1Before+,it is 1After+,it is 2After
17、 GlobalPlusPlus(),it is 2,全局变量在程序员不指定初值的情况下自动初始化为零,在此初始化为0,例5.8,#include void GlobalPlusPlus(void);main()int global=1;printf(Before GlobalPlusPlus(),it is%dn,global);GlobalPlusPlus();printf(After GlobalPlusPlus(),it is%dn,global);/*函数功能:对局部变量global加1,并打印加1之前与之后的值 函数入口参数:无 函数返回值:无*/void GlobalPlusPlu
18、s(void)int global=1;printf(Before+,it is%dn,global);global+;printf(After+,it is%dn,global);,Before GlobalPlusPlus(),it is 1Before+,it is 1After+,it is 2After GlobalPlusPlus(),it is 1,变量的存储类型,指数据在内存中存储的方式即编译器为变量分配内存的方式,它决定变量的生存期动态存储根据需要临时分配存储空间,离开即释放静态存储在程序运行期间分配固定的存储空间不释放,程序区,静态存储区,动态存储区,形参、自动变量、函数调
19、用的现场等,全局变量、静态变量,自动变量(auto),“自动”体现在进入语句块时自动申请内存,退出时自动释放内存 标准定义格式 auto 类型名 变量名;动态局部变量缺省的存储类型不初始化时,值是随机不确定的,静态变量(static),一般的内部变量在函数退出后失效,再次进入函数,变量值重新初始化静态变量在变量类型前面用static修饰static int i;变量的值可以保存到下次进入函数,使函数具有记忆功能,例5.9,#include void Func(void);main()int i;for(i=0;i10;i+)Func();/*函数功能:打印被调用的次数 函数入口参数:无 函数返
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 语言 大学 实用教程 课件 苏小红

链接地址:https://www.31ppt.com/p-6407357.html