(精品)c8第七章函数.ppt
《(精品)c8第七章函数.ppt》由会员分享,可在线阅读,更多相关《(精品)c8第七章函数.ppt(58页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C语言程序设计第七章 函数武汉理工大学计算机学院1/29/20231第七章 函数7.1 函数的概念7.2 函数的定义7.3 函数的调用和函数的返回值7.4 函数应用实例7.5 嵌套调用和递归调用7.6 变量的作用域和存储类别7.7 内部函数和外部函数(*)7.8 编译预处理1/29/202327.1函数的概念#include stdio.hvoid stars(int n);void print_message();main()stars(20);print_message();stars(20);void stars(int n)int i;for(i=1;i=n;i+)putchar(*)
2、;putchar(n);void print_message()printf(How do you do!n);函数函数stars()、print_message()的声明的声明/*main函数的定义函数的定义*/stars()、print_message()函数调用函数调用定义定义stars()函数函数定义定义print_message()函数函数程序运行后输出结果为:程序运行后输出结果为:1/29/20233C 程序结构1/29/20234说明:C是函数式语言一个C程序有且只能有一个名为main的主函数。所有的函数都是互相独立的,除main函数不能调用外,其它函数可以互相调用。函数库函数(
3、标准函数)自定义函数有参函数无参函数或1/29/202357.2 函数的定义类型说明符类型说明符 函数名(函数名(形参说明表形参说明表)说明部分说明部分 语句部分语句部分说明函数返回值的数据类型;若缺省,则为 int 类型;若函数无值,则定义为 void 类型。由用户自己命名,合法的标识符说明参数的个数和类型说明函数中用到的除形参以外的其它变量等为了完成函数特定的功能而设计的一个或多个语句 空函数:Function()1/29/20236函数定义实例打印一行 n 个*void stars(int n)int i;for(i=1;i0)long power(int x,int n)int i;l
4、ong mul=1;for(i=1;iy?x:y;return(z);形参只能是变量或数组名int max(int x,int y)c=max(a,b)实参可以是常量、变量、表达式或数组名,但要求它们有确定的值如:c=max(10,(a+b)/2);实参与形参之间:个数一致,类型一致或赋值兼容,顺序一致。形参:变量常量变量 实参表达式值值1/29/2023117.3.2 函数的返回值返回语句(return语句):格式:return(表达式);或 return 表达式;或 return;功能:将流程及表达式的值从被调用函数返回到函数的调用处。说明:intint max(int x,int y)i
5、nt z;z=(xy)?x:y;return(z z);若return后面带表达式,首先计算表达式的值,表达式的值就是所求的函数值。return z z;return(xy)?x:y);1/29/202312说明(续)一个函数体内可以有多个或没有return语句;intint max(int x,int y)int z;if(xy)return(x);else return(y);void void output(int m)printf(”%d”,m);return;若return后面没有表达式,或没有return语句,则可能会返回不定值。output(int m)printf(”%d”,m
6、);return;/*默认为int类型函数*/voidvoid:空类型空类型1/29/2023137.3.3 函数的声明#include stdio.hvoid stars(int n);void print_message();main()stars(20);print_message();stars(20);void stars(int n)int i;for(i=1;i=n;i+)putchar(*);putchar(n);void print_message()printf(How do you do!n);1/29/202314函数声明的一般形式:函数类型 函数名(类型名 形参1,类
7、型名 形参2,)包含参数和返回值类型的函数声明称为函数原型。函数类型 函数名(类型名,类型名,)若有函数:float fun(double a,int b,float c)则可有函数声明:float fun(double a,int b,float c);float fun(double x,int y,float z);float fun(double,int,float);说明:1/29/202315说明(续):如果函数的值是 int 或 char 型,可以不必进行声明,系统自动按 int 型声明。如果被调用函数出现在主调函数之前,可以不必进行声明。#include main()int a
8、,b,c;scanf(%d%d,&a,&b);c=max(a,b);printf(Max=%dn,c);int max(int x,int y)int z;z=xy?x:y;return(z);1/29/202316说明(续):如果已在所有函数定义之前,在函数的外部已作了函数声明,则在各个主调函数中不必对所调用的函数再做声明。#include double mysqrt(float x);main()float a,c;scanf(”%f”,&a);c=mysqrt(a);printf(”sqrt(%f)=%fn”,a,c);double mysqrt(float x)double y;y=s
9、qrt(x);return(y);1/29/2023177.3.4 函数的调用调用的一般形式:函数名(实参1,实参2,)说明:若调用无参函数,则无实参表列,但括弧不能省略;如果实参表列包含多个实参,则各参数间用逗号隔开;实参与形参的个数应相等,类型应一致或赋值相容;实参与形参按顺序一一对应传递数据;1/29/202318调用方式函数语句:由函数调用加上分号构成,在主调函数中可作为一个独立的语句。如:stars(20);或 printf(”C program”);函数表达式:函数调用作为一个运算对象出现在表达式中,此时要求函数带回一个确定的值以参加表达式的运算。如:c=mysqrt(a);函数参
10、数:函数调用作为另一个函数的实参,其值作为一个实际参数传给被调函数的形参进行处理;此时也要求函数带回一个确定值。如:m=max(a,max(b,c);printf(%d,max(a,b);1/29/202319调用过程float add();main()float a,b,c;scanf(”%f,%f”,&a,&b);c=add(a,b);printf(”sum is%f”,c);float add(float a,float b)return(a+b);调用,流程从主调函数转移到被调用函数,且实参将值传给对应的形参;执行被调用函数;流程从被调用函数返回到主调函数,并返回函数值。abc615a
11、6b15211/29/202320调用过程float add();main()float a,b,c;scanf(”%f,%f”,&a,&b);c=add(10,b+2);printf(”sum is%f”,c);float add(float a,float b)float c;c=a+b;a+;b+;return(a+b);abc615a10b1717c2711182929形参:变量实参:常量变量表达式值值101/29/2023217.4 函数应用实例例7.1 求累加和 sum=1+2!+10!分析:可以编写一个求阶乘的函数fac(n)计算n!实现:long fac(int n);main
12、()int i;long sum=0;for(i=1;i=10;i+)sum+=fac(i);printf(”nsum=%ld”,sum);long fac(int n)int i;long x=1L;for(i=1;i=n;i+)x*=i;return(x);1/29/202322例7.2 由键盘输入x、y及z的值,计算函数 sin(x)sin(y)sin(z)func(x,y,z)=+sin(x-y)sin(x-z)sin(y-z)sin(y-x)sin(z-x)sin(z-y)分析:可以定义一个函数part(x,y,z)求每加项的值另外定义一个度与弧度之间的转换函数change(x)主函
13、数中以度为单位输入x、y及z的值,并转换为弧度;多次调用part()函数求出func的值输出func的值1/29/202323 sin(x)sin(y)sin(z)func(x,y,z)=+sin(x-y)sin(x-z)sin(y-z)sin(y-x)sin(z-x)sin(z-y)#includedouble change(float x);double part(float x,float y,float z);main()float x,y,z,sum;scanf(”%f%f%f”,&x,&y,&z);x=change(x);y=change(y);z=change(z);sum=pa
14、rt(x,y,z)+part(y,z,x)+part(z,x,y);printf(”nfunc=%f”,sum);1/29/202324 sin(x)sin(y)sin(z)func(x,y,z)=+sin(x-y)sin(x-z)sin(y-z)sin(y-x)sin(z-x)sin(z-y)double change(float x)return(x*3.14159/180);double part(float x,float y,float z);float tmp;tmp=sin(x)/sin(x-y)/sin(x-z);return(tmp);1/29/2023257.5 函数的嵌套
15、调用和递归调用7.5.1 函数的嵌套调用7.5.2 函数的递归调用1/29/2023267.5.1 函数的嵌套调用语言的函数定义都是互相平行的、独立的,即不允许嵌套定义函数;但是,可以嵌套调用函数,即程序在调用一个函数的过程中,该被调函数又可以调用其它函数。如:main函数调用a函数a函数调用b函数b函数结束main函数调用a函数a函数调用b函数b函数结束main函数调用a函数a函数调用b函数结束1/29/202327 n m!例7.1 求组合数 C =m n!*(m-n)!long cmn(int m,int n);long fac(int n);main()int m,n;long c;p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精品 c8 第七 函数
限制150内