《预备知识函数》PPT课件.ppt

上传人:牧羊曲112 文档编号:4878983 上传时间:2023-05-21 格式:PPT 页数:42 大小:410.50KB
返回 下载 相关 举报
《预备知识函数》PPT课件.ppt_第1页
第1页 / 共42页
《预备知识函数》PPT课件.ppt_第2页
第2页 / 共42页
《预备知识函数》PPT课件.ppt_第3页
第3页 / 共42页
《预备知识函数》PPT课件.ppt_第4页
第4页 / 共42页
《预备知识函数》PPT课件.ppt_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《《预备知识函数》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《预备知识函数》PPT课件.ppt(42页珍藏版)》请在三一办公上搜索。

1、函数,概述模块化程序设计基本思想:将一个大的程序按功能分割成一些小模块,特点:各模块相对独立、功能单一、结构清晰、接口简单控制了程序设计的复杂性提高元件的可靠性缩短开发周期避免程序开发的重复劳动易于维护和功能扩充开发方法:自上向下,逐步分解,分而治之,C是模块化程序设计语言,C程序结构,C是函数式语言必须有且只能有一个名为main的主函数C程序的执行总是从main函数开始,在main中结束函数不能嵌套定义,可以嵌套调用,函数分类从用户角度标准函数(库函数):由系统提供用户自定义函数从函数形式无参函数有参函数,使用库函数应注意:1、函数功能2、函数参数的数目和顺序,以及各参数意义和类型3、函数返

2、回值意义和类型4、需要使用的包含文件,*How do you do!*,例在屏幕上显示:main()printf(*n);printf(How do you do!n);printf(*n);,用函数模块设计:main()printstar();print_mess();printstar();,print_mess()printf(How do you do!n);,printstar()printf(*n);,函数是C语言的基本构件,1.一个C程序:,2.一个C程序的源文件:,由一个或若干个C程序的源文件成。,由一个或若干个函数组成。,源文件1,函数n,函数2,函数1,源文件m,源文件2,

3、一个C程序,一个C程序的源文件,.,.,C语言不允许:,main的唯一性:,函数嵌套定义。,在一个完整的C程序源文件中,必须有、而且只允许其中的一个C程序源文件含有一个main函数名。,函数的定义一般格式,合法标识符,函数返回值类型无返回值void,函数体,例 有参函数(现代风格)int max(int x,int y)int z;z=xy?x:y;return(z);,例 无参函数 void printstar()printf(“*n”);或 void printstar(void)printf(“*n”);,函数体由服务于函数的数据说明与执行语句两部分组成。前者完成数据描述。后者完成操作描

4、述。,函数体:由括起来的是函数体包括,变量定义语句执行语句,参数类型,参数名,函数名,函数类型,double power(int n,float x),无参函数例:void printstar();有参函数例:double power(int n,float x)空函数例:void dummy(),函数的返回值返回语句形式:return(表达式);或 return 表达式;或 return;功能:使程序控制从被调用函数返回到调用函数中,同时把返值带给调用函数说明:函数中可有多个return语句若无return语句,遇时,自动返回调用函数若函数类型与return语句中表达式值的类型不一致,按前者

5、为准,自动转换-函数调用转换void型函数,例 无返回值函数 void swap(int x,int y)int temp;temp=x;x=y;y=temp;,printstar()printf(*);main()int a;a=printstar();printf(%d,a);,例 函数带回不确定值,输出:10,void printstar()printf(*);main()int a;a=printstar();printf(%d,a);,编译错误!,例 求两个数的最大值函数。,float max(float x,float y)/函数类型float,函数名max,参数x,y float

6、 m;if(xy)m=x;else m=y;return m;,例 判断两个数是否是相等函数。,int eq(int x,int y)/函数类型int,函数名eq,参数x,y int t;if(x=y)t=1;else t=0;return t;,例 符号函数。,char sign(float x)/函数类型char,函数名sign,参数x char s;if(x=0)s=+;else s=-;return s;,例 求三角形面积函数。,float sabc(float a,float b,float c)/函数类型float float h;h=0.5*(a+b+c);return(sqrt

7、(h*(h-a)*(h-b)*(h-c);,例 素数判断函数。int pn(int n)int i;int flag;/素数标志 flag=1;for(i=2;i=n/2;i+)if(n%i=0)flag=0;break;return flag;,函数的调用调用形式 函数名(实参表);说明:实参与形参个数相等,类型一致,按顺序一一对应实参表求值顺序,因系统而定,说明:(1)如果调用无参函数,则无实参表,此时小括号不能省略。printstar();(2)调用有参函数时,实参与形参的个数应相同,类型应一致。(3)实参与形参按顺序对应,一一传递数据。调用后,形参得到实参的值。(4)实参可以是表达式。

8、如是表达式实参,先计算表达式的值,再将值传递给形参。,exch(a,b);exch(int x,int y),调用方式函数语句:例 printstar();printf(“Hello,World!n”);函数表达式:例 m=max(a,b)*2;函数参数:例 printf(“%d”,max(a,b);m=max(a,max(b,c);,例 用调用函数的方式求两个三角形的面积。,float sabc(float a,float b,float c)/函数类型float float h;h=0.5*(a+b+c);return(sqrt(h*(h-a)*(h-b)*(h-c);,main()flo

9、at x,y,z;x=3,y=4,z=5;if(x+yz),例 调用函数求 21000之间的所有素数。int pn(int n)int i;int flag;/素数标志 flag=1;for(i=2;i=n/2;i+)if(n%i=0)flag=0;break;return flag;,main()int i;int count=0;/统计素数个数,用以控制输出格式 clrscr();printf(21000之间的素数如下:n);for(i=2;i=1000;i+)if(pf(i)=1)printf(%6d,i);count+;if(count%5=0)printf(n);,函数声明对被调用函

10、数要求:必须是已存在的函数库函数:#include 用户自定义函数:函数类型说明函数声明一般形式:函数类型 函数名(形参列表);或 函数类型 函数名();作用:告诉编译系统函数类型、参数个数及类型,以便检验函数定义与函数声明不同函数声明位置:程序的数据说明部分(函数内或外),例 函数声明举例,数据传递方法,C语言程序由若干相对独立的函数组成,在程序运行期间,必然存在数据在函数中流动,流入或流出,这就是函数之间的数据传递,也是函数之间的接口。一般语言中,数据传递有参数传递和全局变量传递两种方法,C语言也提供这两种传递方法。参数传递是数据传递的主门,全局变量传递是数据传递的辅门。数据传递时一般宜用

11、参数传递。,函数之间的信息传递,参数传递,全局变量传递,函数参数及其传递方式形参与实参形式参数:定义函数时函数名后面括号中的变量名实际参数:调用函数时函数名后面括号中的表达式,例 比较两个数并输出大者,main()int a,b,c;scanf(%d,%d,说明:实参必须有确定的值形参必须指定类型形参与实参类型一致,个数相同若形参与实参类型不一致,自动按形参类型转换函数调用转换形参在函数被调用前不占内存;函数调用时为形参分配内存;调用结束,内存释放,函数参数及其传递方式形参与实参形式参数:定义函数时函数名后面括号中的变量名实际参数:调用函数时函数名后面括号中的表达式,例 计算x的立方,#inc

12、lude float cube(float x)return(x*x*x);main()float a,product;printf(Please input value of a:);scanf(%f,x,1.2,1.728,参数传递方式值传递方式方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值特点:形参与实参占用不同的内存单元单向传递,例 交换两个数,#include main()int x=7,y=11;printf(x=%d,ty=%dn,x,y);printf(swapped:n);swap(x,y);printf(x=%

13、d,ty=%dn,x,y);swap(int a,int b)int temp;temp=a;a=b;b=temp;,地址传递方式:函数调用时,将数据的存储地址作为参数传递给形参特点:形参指向实参占用的存储单元“双向”传递实参和形参必须是地址常量或变量,swap(p1,p2)int*p1,*p2;int p;p=*p1;*p1=*p2;*p2=p;main()int a,b;scanf(%d,%d,例 交换两个数,数组作为函数参数数组元素作函数实参值传递,例 两个数组大小比较,n=0m=0k=0,a和b为有10个元素的整型数组比较两数组对应元素变量n,m,k记录aibi,ai=bi,aik,认

14、为数组ab 若nk,认为数组ab 若n=k,认为数组a=b,数组名作函数参数地址传递在主调函数与被调函数分别定义数组,且类型应一致形参数组大小(多维数组第一维)可不指定形参数组名是地址变量,例 求学生的平均成绩,#include float average(int stu,int n);void main()int score10,i;float av;printf(Input 10 scores:n);for(i=0;i10;i+)scanf(%d,float average(int stu,int n)int i;float av,total=0;for(i=0;in;i+)total+=

15、stui;av=total/n;return av;,实参数组名,形参数组定义,int*stu,例 数组元素与 数组名 作函数参数比较,#include void swap2(int x,int y)int z;z=x;x=y;y=z;main()int a2=1,2;swap2(a0,a1);printf(a0=%dna1=%dn,a0,a1);,值传递,#include void swap2(int x)int z;z=x0;x0=x1;x1=z;main()int a2=1,2;swap2(a);printf(a0=%dna1=%dn,a0,a1);,地址传递,例 数组元素与 数组名 作函数参数比较,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号