第7章函数模块化设计学习培训模板课件.ppt

上传人(卖家):林田 文档编号:4163044 上传时间:2022-11-16 格式:PPT 页数:114 大小:2.19MB
下载 相关 举报
第7章函数模块化设计学习培训模板课件.ppt_第1页
第1页 / 共114页
第7章函数模块化设计学习培训模板课件.ppt_第2页
第2页 / 共114页
第7章函数模块化设计学习培训模板课件.ppt_第3页
第3页 / 共114页
第7章函数模块化设计学习培训模板课件.ppt_第4页
第4页 / 共114页
第7章函数模块化设计学习培训模板课件.ppt_第5页
第5页 / 共114页
点击查看更多>>
资源描述

1、Advanced Programming第第7章章 函数函数-模块化设计模块化设计Advanced Programming主要内容主要内容一、概述一、概述二、函数定义的一般形式二、函数定义的一般形式三、函数参数和函数的值三、函数参数和函数的值四、函数的调用四、函数的调用五、函数的嵌套调用五、函数的嵌套调用六、函数的递归调用六、函数的递归调用七、数组作为函数参数七、数组作为函数参数八、变量的存储类别八、变量的存储类别九、内部函数和外部函数九、内部函数和外部函数十、运行一个多文件的程序十、运行一个多文件的程序Advanced Programming一、概述一、概述1、函数的概念:一个子程序段,能完

2、成特定的功能。、函数的概念:一个子程序段,能完成特定的功能。存在位置:存在位置:1.c2.h函数函数1函数函数3函数函数2函数函数4函数函数5Advanced Programming(1)各函数包含在一个文件中各函数包含在一个文件中#include void main()void printstar();void print_message();printstar();print_message();printstar();void printstar()printf(“*n”);void print_message()printf(“_ _ _ _ _How_do_you_do!n”);运行

3、结果:运行结果:*How do you do!*一、概述一、概述Advanced Programming(2)文件包含的方法文件包含的方法 在主函数中使用文件包含预编译命令,将不在本文件在主函数中使用文件包含预编译命令,将不在本文件而在其它文件中的函数进行预编译处理把各文件中的函数而在其它文件中的函数进行预编译处理把各文件中的函数包含到本文件中来,然后一起进行编译、连接、运行。包含到本文件中来,然后一起进行编译、连接、运行。#include“T7-1-2.c”#include“T7-1-3.c”main()p1();p2();p1();运行结果同上运行结果同上T7-1-2.c p1()prin

4、tf(“*n”);T7-1-3.c p2()printf(“How do you do!n”);一、概述一、概述Advanced Programming例:在屏幕上输出例:在屏幕上输出“How do you do?”stdio.hprintf函数函数函数函数3函数函数2#include void main()printf(“How do you do?”);3.c一、概述一、概述Advanced Programming2、函数调用方式:、函数调用方式:mainabca1abb1b2不能被调用不能被调用所有函数都是所有函数都是平行的,不能平行的,不能嵌套定义嵌套定义分为分为:库函数和库函数和自定

5、义函数自定义函数一、概述一、概述Advanced Programming几点说明:(1)一个源文件由一个或者多个函数组成。(2)一个C程序由一个或者多个源文件组成。(3)C程序的执行从main 函数开始。(4)所有的子函数都是平行的。(5)从用户的角度看,函数分库函数和自定义函数。(6)函数形式:主调函数无数据传送给被调函数,可带或不带返回值。主调函数与被调函数间有参数传递,主调函数可将实参传送给被调函数的形参,被调函数的数据可返回主调函数。一、概述一、概述Advanced Programming二、函数定义的一般形式二、函数定义的一般形式1、无参函数的定义形式、无参函数的定义形式v类型标识符

6、:类型标识符:l用于指定函数带回的值的类型,不写时为用于指定函数带回的值的类型,不写时为int型。型。l不带回值时可以不写。不带回值时可以不写。类型标识符类型标识符 函数名函数名()()说明部分说明部分 语句语句例例 无参函数无参函数 printstar()printf(“*n”);或或 printstar(void)printf(“*n”);Advanced Programming2、有参函数定义的一般形式、有参函数定义的一般形式类型标识符类型标识符 函数名函数名(形式参数表列形式参数表列)说明部分说明部分 语句语句现代风格现代风格:例例 有参函数(现代风格)有参函数(现代风格)int ma

7、x(int x,int y)int z;z=xy?x:y;return(z);例例 有参函数(现代风格)有参函数(现代风格)int max(int x,y)int z;z=xy?x:y;return(z);二、函数定义的一般形式二、函数定义的一般形式Advanced Programming3、空函数、空函数v为扩充功能预留,在主调函数中先占一个位置。为扩充功能预留,在主调函数中先占一个位置。类型标识符类型标识符 函数名函数名()()例例 空函数空函数 dummy()二、函数定义的一般形式二、函数定义的一般形式Advanced Programming三、函数参数和函数的值三、函数参数和函数的值1

8、、形式参数和实际参数、形式参数和实际参数v形式参数:定义函数时函数名后面括号中的变量名形式参数:定义函数时函数名后面括号中的变量名v实际参数:调用函数时函数名后面括号中的表达式实际参数:调用函数时函数名后面括号中的表达式例例 比较两个数并输出大者比较两个数并输出大者#include void main()int max(int x,int y);int a,b,c;scanf(%d,%d,&a,&b);c=max(a,b);printf(Max is%d,c);max(int x,int y)int z;z=xy?x:y;return(z);形参形参实参实参c=max(a,b);(main 函

9、数)函数)(max 函数)函数)max(int x,int y)int z;z=xy?x:y;return(z);运行:运行:7,8 Max is 8Advanced Programmingv几点说明:几点说明:l实参可以是常量、变量或表达式。必须有确定的值。当函数调实参可以是常量、变量或表达式。必须有确定的值。当函数调用时,将实参的值传递给形参,若是数组名,则传送的是数组用时,将实参的值传递给形参,若是数组名,则传送的是数组首地址。首地址。l形参必须指定类型,只能是简单变量或数组,不能是常量或表形参必须指定类型,只能是简单变量或数组,不能是常量或表达式达式l形参与实参形参与实参类型一致,个数

10、相同顺序相同。类型一致,个数相同顺序相同。l若形参与实参类型不一致,自动按形参类型转换若形参与实参类型不一致,自动按形参类型转换函数调函数调用转换用转换l形参在函数被调用前不占内存形参在函数被调用前不占内存;函数调用时为形参分配内存;调函数调用时为形参分配内存;调用结束,内存释放用结束,内存释放l实参对形参的数据传送是值传送,也是单向传送,当被调函数实参对形参的数据传送是值传送,也是单向传送,当被调函数的形参发生变化时,并不改变主调函数实参的值。的形参发生变化时,并不改变主调函数实参的值。形、实参占形、实参占据的是不同的存储单元据的是不同的存储单元 三、函数参数和函数的值三、函数参数和函数的值

11、Advanced Programming例:例:形、实参占据的是不同的存储单元形、实参占据的是不同的存储单元#include void main()void add(int x,int y);int a=2,b=3;printf(“a=%d,b=%dn”,a,b);printf(“&a=%x,&b=%xn”,&a,&b);add(a,b);printf(“a=%d,b=%dn”,a,b);printf(“&a=%x,&b=%xn”,&a,&b);void add(int x,int y)x=x+8;y=y+12;printf(“x=%d,y=%dn”,x,y);printf(“&x=%x,&y

12、=%xn”,&x,&y);2+8=103+12=1523ffd2ffd4ffd6ffd8xayb运行结果:运行结果:a=2,b=3&a=ffd6,&b=ffd8 x=10,y=15&x=ffd2,&y=ffd4a=2,b=3&a=ffd6,&b=ffd8Advanced Programming2、函数的返回值、函数的返回值v返回语句形式:返回语句形式:return(表达式表达式);或或 return 表达式表达式;v功能:使程序控制从被调用函数返回到功能:使程序控制从被调用函数返回到调用函数中,同时把返值带给调用函数调用函数中,同时把返值带给调用函数三、函数参数和函数的值三、函数参数和函数的值

13、Advanced Programming 说明:函数的返回值,必须用 return 语句带回。return 语句只能把一个返值传递给调用函数。函数中可有多个return语句,执行哪一个由程序执行情况来定。if(ab)return(a);else return(b);return 后的值可以是一个表达式,如:return(x y?x:y);返回值的类型为定义的函数类型,不指定的按整型处理。如:int max(int x,int y)float min(float a,float b)double abc(float d1,float d2)三、函数参数和函数的值三、函数参数和函数的值Advanc

14、ed Programming-若若 return 语句中表达式类型与函数类型不一语句中表达式类型与函数类型不一致,则转换为函数类型。致,则转换为函数类型。-若无若无return语句,遇语句,遇时,自动返回调用函数。时,自动返回调用函数。可能返回一个不确定或无用的值可能返回一个不确定或无用的值。-无返回值的函数,定义为无返回值的函数,定义为 void 类型。类型。printstar()printf(*);void main()int a;a=printstar();printf(%d,a);例:例:无无return语句,语句,函数带回不确定值函数带回不确定值void printstar()pri

15、ntf(*);void main()int a;a=printstar();printf(%d,a);三、函数参数和函数的值三、函数参数和函数的值Advanced Programming四、四、函数的调用函数的调用主调函数:主动去调用其它函数主调函数:主动去调用其它函数 被调函数:被其它函数所调用被调函数:被其它函数所调用1、函数调用的一般形式、函数调用的一般形式函数名(实参表列)函数名(实参表列)v说明:说明:l实参表列:有确定值的数据或表达式实参表列:有确定值的数据或表达式l实参与形参实参与形参个数相等,类型一致,按顺序一一对应,个数相等,类型一致,按顺序一一对应,当有多个实参时,实参间用

16、当有多个实参时,实参间用“,”分隔分隔l实参表求值顺序,因系统而定(实参表求值顺序,因系统而定(Turbo C 自右向左自右向左)l调用无参函数时,实参表列为空,但调用无参函数时,实参表列为空,但()不能省不能省Advanced Programming#include void main()int f(int a,int b);int i=2,p;p=f(i,+i);printf(%d,p);int f(int a,int b)int c;if(ab)c=1;else if(a=b)c=0;else c=-1;return(c);例例 参数求值顺序参数求值顺序按自右向左求值按自右向左求值函数调

17、用等于函数调用等于f(3,3)运行结果:运行结果:0按自左向右求值按自左向右求值函数调用等于函数调用等于f(2,3)运行结果:运行结果:-1为使程序有通用性:为使程序有通用性:Printf(“%d,%d”,i,i+);/*同样存在此情况同样存在此情况*/Advanced Programming2、函数调用的方式、函数调用的方式按函数在程序中出现的位置,有三种调用方式:按函数在程序中出现的位置,有三种调用方式:v函数语句:函数语句:以独立的语句去调用函数。不要求有返回值,以独立的语句去调用函数。不要求有返回值,仅完成一定的操作。仅完成一定的操作。例例 printstar();printf(“He

18、llo,World!n”);v函数表达式:函数表达式:函数返回一个确定值,以参加表达式的运算。不可用于函数返回一个确定值,以参加表达式的运算。不可用于void例例 m=max(a,b)*2;v函数参数:函数参数:函数调用作为另一个函数的参数。函数调用作为另一个函数的参数。例例 printf(“%d”,max(a,b);/*输出大数输出大数*/m=max(a,max(b,c);/*三数比大小三数比大小*/四、四、函数的调用函数的调用Advanced Programming3、函数声明、函数声明一般形式:函数类型 函数名(形参类型 形参名,.);或 函数类型 函数名();作用:告诉编译系统函数类型

19、、参数个数及类型,以便检验函数定义与函数声明不同,声明只与函数定义的第一行相同。声明可以不写形参名,只写形参类型。函数说明位置:程序的数据说明部分(函数内或外)四、四、函数的调用函数的调用Advanced Programmingv对被调用函数要求:对被调用函数要求:l必须是必须是已存在已存在的函数的函数l库函数库函数:#include l用户自定义函数:用户自定义函数:如果被调函数定义如果被调函数定义在主调函数之后,那么在主调函数之后,那么在主调函数中在主调函数中对被调函数作声明。对被调函数作声明。四、四、函数的调用函数的调用Advanced Programming#include void

20、main()float add(float x,float y);/*对被调用函数的声明对被调用函数的声明*/float a,b,c;scanf(%f,%f,&a,&b);c=add(a,b);printf(sum is%f,c);float add(float x,float y)/*函数首部函数首部*/float z;/*函数体函数体 z=x+y;return(z);float add(float,float);例例 对被调用的函数作声明对被调用的函数作声明输入:输入:3.6,6.5输出:输出:sum is 10.100000Advanced Programmingv说明:说明:l旧版本旧

21、版本C中函数声明不采用函数原型,只声明中函数声明不采用函数原型,只声明函数名函数名和和函数类型函数类型。如:。如:float add()l函数调用之前,如果未对函数作声明,则编译函数调用之前,如果未对函数作声明,则编译系统把第一次遇到的函数形式作为函数声明,系统把第一次遇到的函数形式作为函数声明,并默认为并默认为int型。即:函数类型是型。即:函数类型是int型型可以不可以不作函数声明,作函数声明,最好作声明最好作声明。l被调用函数的定义(程序)在主调函数之前,被调用函数的定义(程序)在主调函数之前,可以不加函数声明。可以不加函数声明。l在所有函数定义前,已在函数外部做了函数声在所有函数定义前

22、,已在函数外部做了函数声明,则在各主调函数中可以不加函数声明。明,则在各主调函数中可以不加函数声明。char letter(char,char);float f(float,float);int I(float,float);main()char letter(char c1,char c2)float f(float x,float y)Int I(float j,float k)四、四、函数的调用函数的调用Advanced Programming回顾:源程序Main函数 函数2 函数3 Advanced Programming要点一:如何写函数?要点一:如何写函数?确定函数完成功能;确定函

23、数完成功能;确定函数与外界数据交换方式。确定函数与外界数据交换方式。Advanced Programming例:请写一个求例:请写一个求 n!的函数。的函数。确定函数完成功能:计算确定函数完成功能:计算 n!int s=1,i;for(i=2;i=n;i+)s=s*i;Advanced Programming 确定函数与外界数据交换方式。确定函数与外界数据交换方式。I、n由形式参数传入;由形式参数传入;II、计算的结果、计算的结果n!通过返回一个值出去通过返回一个值出去nfactorial(int n)int s=1,i;for(i=2;i=n;i+)s=s*i;intreturn(s);Ad

24、vanced Programming要点二:如何调用函数?要点二:如何调用函数?函数名(实参);函数名(实参);或或 变量名变量名=函数名(实参);函数名(实参);Advanced Programming例:在例:在main中调用中调用 n!函数,函数,n由键盘输入。由键盘输入。void main()int a,b;printf(“input n:”);scanf(“%d”,&a);b=nfactorial(a);printf(“the result is%dn”,b);int nfactorial(int n)int s=1,i;for(i=2;i=n;i+)s=s*i;return(s);

25、int nfactorial(int n);Advanced Programmingmain()调调fun()结束结束fun()返回返回保存:保存:返回地址返回地址当前现场当前现场恢复:恢复:主调程序现场主调程序现场返回地址返回地址4、函数调用的执行过程、函数调用的执行过程四、四、函数的调用函数的调用Advanced Programming五、五、函数的嵌套调用函数的嵌套调用 不允许嵌套定义不允许嵌套定义,函数间的关系是平行的、独立的。,函数间的关系是平行的、独立的。C中的函数:中的函数:允许嵌套调用允许嵌套调用,即在调用某函数过程中又调用另一函数。,即在调用某函数过程中又调用另一函数。mai

26、n()调用函数调用函数a结束结束a函数函数b函数函数调用函数调用函数bAdvanced Programming例例 输入两个整数,求平方和输入两个整数,求平方和输入:输入:3 4输出:输出:The result is:25int fun2(int m)return(m*m);int fun1(int x,int y)int fun2(int m);return(fun2(x)+fun2(y);#include int fun1(int x,int y);void main(void)int a,b;scanf(“%d%d”,&a,&b);printf(“The result is:%dn”,f

27、un1(a,b);Advanced Programming#include int dif(int x,int y,int z);int max(int x,int y,int z);int min(int x,int y,int z);void main()int a,b,c,d;scanf(%d%d%d,&a,&b,&c);d=dif(a,b,c);printf(Max-Min=%dn,d);例例 求三个数中最大数和最小数的差值求三个数中最大数和最小数的差值main()调用函数调用函数dif输出输出结束结束dif函数函数max函数函数调用函数调用函数max调用函数调用函数minmin函数函

28、数int min(int x,int y,int z)int r;r=xy?x:y;return(ry?x:y;return(rz?r:z);int dif(int x,int y,int z)return max(x,y,z)-min(x,y,z);Advanced Programming例例 用弦截法求方程用弦截法求方程 的根的根08016523xxxyxf(x)0 x1x2xf(x1)f(x2)1.取取x1,x2两点,求得两点,求得f(x1),f(x2)。异号:异号:x1,x2之间必有一根。之间必有一根。同号:改变同号:改变x1,x2,直到,直到f(x1),f(x2)异号为止。异号为止。

29、)()()()(121221xfxfxfxxfxx2.连连f(x1),f(x2)两点(弦)交两点(弦)交x轴于轴于x。X点的坐标求法:点的坐标求法:求求X点的点的x坐标坐标 从从x值得值得f(x)3.若若f(x)与与f(x1)同号,同号,则根必在(则根必在(x,x2)区间,此时将区间,此时将x1=x;若若f(x)与与f(x2)同号,同号,则根必在(则根必在(x1,x)区间,此时将区间,此时将x2=x;4.重复步骤重复步骤2和和3,直到,直到|f(x)|为止为止,设设 10-6,则则 f(x)0Advanced Programming用三个函数实现各部分的功能用三个函数实现各部分的功能:函数函数

30、f(x):求求x的函数的函数:x3-5x2+16x-80 函数函数xpoint(x1,x2):求弦与求弦与x轴交点轴交点X的的x坐标坐标 函数函数root(x1,x2):求求(x1,x2)区间的实根区间的实根 求弦求弦与与x轴的交点轴的交点x输入输入x1,x2,求求f(x1),f(x2)直到直到f(x1)与与f(x2)异号异号y=f(x),y1=f(x1)y与与y1同号同号真真假假x1=xy1=yx2=x直到直到|y|root=x 输出输出 rootroot函数函数main()调用函数调用函数root输出根输出根 x结束结束root函数函数xpoint函数函数调用函数调用函数xpoint调用函

31、数调用函数ff函数函数Advanced Programming#include#include float f(float x)float y;y=(x-5.0)*x+16.0)*x-80.0;return(y);float xpoint(float x1,float x2)float y;y=(x1*f(x2)-x2*f(x1)/(f(x2)-f(x1);return(y);float root(float x1,float x2)float x,y,y1;y1=f(x1);do x=xpoint(x1,x2);y=f(x);if(y*y1 0)y1=y;x1=x;else x2=x;whi

32、le(fabs(y)=0.0001);return(x);void main()float x1,x2,f1,f2,x;do printf(“input x1,x2:n”);scanf(“%f%f”,&x1,&x2);f1=f(x1);f2=f(x2);while(f1*f2=0);x=root(x1,x2);printf(“A root of equation is%8.4f n”,x);运行情况:运行情况:Input x1,x2:2,6 A root of equation is 5.0000Advanced Programming六、六、函数的递归调用函数的递归调用递归:递归:在函数调用

33、过程中,直接或间接的调用自身。在函数调用过程中,直接或间接的调用自身。递归调用方式递归调用方式v直接递归调用:在函数体内又调用自身直接递归调用:在函数体内又调用自身 f()调调fint f(int x)int y,z;z=f(y);.return(2*z);Advanced Programmingv间接递归调用:当函数间接递归调用:当函数1去调用另一函数去调用另一函数2时时,而而另一函数另一函数2反过来又调用函数反过来又调用函数1自身。自身。调调f2调调f1f1()f2()int f1(int x)int y,z;z=f2(y);.return(2*z);int f2(int t)int a,

34、c;c=f1(a);.return(3+c);v解决无终止递归调用的方法是:确定好结束递归的条件。解决无终止递归调用的方法是:确定好结束递归的条件。条件成立,进行递归条件成立,进行递归用用if语句控制语句控制 条件不成立,结束递归条件不成立,结束递归六、六、函数的递归调用函数的递归调用Advanced Programming例例 有有5个人,第个人,第5个人比第个人比第4个人大个人大2岁,第岁,第4个人比第个人比第3个人大个人大2岁,岁,第第2个人比第个人比第1个人大个人大2岁,第岁,第1个人个人10岁,问第岁,问第5个人多大?个人多大?age(5)age(4)age(3)age(2)age(

35、1)=2+age(4)=2+age(3)=2+age(2)=2+age(1)=10=18 =16 =14 =12 10 n=1数学模型:数学模型:age(n)=age(n-1)+2 n1用函数用函数age(n)来表示第来表示第n个人的年龄个人的年龄Advanced Programming程序实现程序实现:#include age(int n)int c;if (n=1)c=10;else c=2+age(n-1);return(c);void main()printf(“%d n”,age(5);运行结果:18Advanced Programming有些问题,可以用递推,也可以用递归的方法解决

36、。有些问题,可以用递推,也可以用递归的方法解决。v递推递推:从一个已知的事实出发从一个已知的事实出发,按一定规律推出下按一定规律推出下一个事实一个事实,再从已知的新的事实再从已知的新的事实,推出下一个新的推出下一个新的事实事实.例例 用递推法求用递推法求n!,即从即从1开始开始,乘乘2,乘乘3.一直到一直到n#include void main()int i,s=1;for(i=1;i1)例例 用递归方法求用递归方法求n!5!=5 4!4!=4 3!3!=3 2!2!=2 1!1!=1 0!=1 Advanced Programming运行:运行:input a integer number:

37、1010!=3628800程序实现:程序实现:#include void main()float fac(int n);int k;float y;printf(Input a integer number:);scanf(%d,&k);y=fac(k);printf(%d!=%15f,k,y);float fac(int n)float f;if (n0)printf(n%cn,x,y);Advanced Programming#include void main()void hanoi(int n,char one,char two,char three);int m;printf(Inp

38、ut the number of diskes:);scanf(%d,&m);printf(The step to moving%3d diskes:n,m);hanoi(m,A,B,C);运行:运行:input number of diskes:3 the step to moving 3 diskes:A C A B C B A C B A B C A CAdvanced Programming七、数组作为函数参数七、数组作为函数参数15346738964232001H数组首地址数组元素函数传送Advanced Programming七、数七、数组作为函数组作为函数参数参数1、数组、数组元

39、素作函数实参元素作函数实参值传递值传递例例 输入输入10个数,要求输出其中最大的元素和该数是第几个数。个数,要求输出其中最大的元素和该数是第几个数。思路:设计一个求两数中较大数的函数,思路:设计一个求两数中较大数的函数,max(int x,int y)从首元素依次与各元素比较大小,记下大的值及其位置从首元素依次与各元素比较大小,记下大的值及其位置a0 1 2 3 4 5 6 m=a0n=0i=1依次比较:依次比较:max(m,ai)Advanced Programming#include void main()int max(int x,int y)int a10,m,n,i;printf(E

40、nter 10 integer numbers:);for(i=0;i10;i+)scanf(%d,&ai);printf(n);for(i=1,m=a0,n=0;im)m=max(m,ai);n=i;printf(“The largest number is%dn it is the%d th numbern”,m,n);int max(int x,int y)return(xy?x:y);Advanced Programming2、数组名可作函数参数、数组名可作函数参数地址传递地址传递实参和形参都应用数组名,传送是的实参和形参都应用数组名,传送是的数组首地址数组首地址(1)一维数组名作为函

41、数参数)一维数组名作为函数参数实参:实参:int score5;形参:形参:abc(int array5)或或 abc(int array)注:注:形参的数组大小可不指定形参的数组大小可不指定七、数组作为函数参数七、数组作为函数参数Advanced Programming例例 求学生的平均成绩求学生的平均成绩 float average(float array10)int i;float aver,sum=array0;for(i=1;i10;i+)sum=sum+arrayi;aver=sum/10;return(aver);.2109score562312.88arrayAdvanced

42、Programmingfloat average(float array10)int i;float aver,sum=array0;for(i=1;i10;i+)sum=sum+arrayi;aver=sum/10;return(aver);#include void main()float average(float array10);float score10,aver;int i;printf(Input 10 scores:n);for(i=0;i10;i+)scanf(%f,&scorei);printf(“n”);aver=average(score);printf(Averag

43、e is:%5.2f,aver);Advanced Programming例例 求两组学生的平均成绩,求两组学生的平均成绩,形参数组长度缺省形参数组长度缺省#include void main()float average(float array,int n);float score_15=98.5,97,91.5,60,55;float score_210=67.5,89.5,99,69.5,77,89.5,76.5,54,60,99.5;printf(“The average of clase A is%6.2fn”,average(score_1,5);printf(“The avera

44、ge of clase B is%6.2fn”,average(score_2,10);float average(float array,int n)int i;float aver,sum=array0;for(i=1;in;i+)sum=sum+arrayi;aver=sum/n;return(aver);Advanced Programmingv数组名作函数参数时,实参和形参数组名作函数参数时,实参和形参两个数组共占同一段内存单元,形两个数组共占同一段内存单元,形参数组的元素值改变会使实参数组参数组的元素值改变会使实参数组元素的值同时变化。元素的值同时变化。七、数组作为函数参数七、数组

45、作为函数参数Advanced Programming0123456789a4968573299927137688arraykjjjkjkjjjjj949i=0例例 用选择法对数组中的用选择法对数组中的10个整数按由小到大排序个整数按由小到大排序 Advanced Programmingkjjkjkjjjjj0123456789a4968573299927137688array949kk1368i=1Advanced Programming0123456789a9132732495768768899arrayi=8Advanced Programmingvoid sort(int array,i

46、nt n)int i,j,k,t;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(arrayjarrayk)k=j;t=arrayi;arrayi=arrayk;arrayk=t;Advanced Programming#include void main()void sort(int array,int n);int a10,i;printf(“enter the arrayn”);for(i=0;i10;i+)scanf(%d,&ai);sort(a,10);printf(“the sorted array:n”);for(i=0;i10;i+)printf(

47、%d,ai);printf(n);Advanced Programming(2)用多维数组名作函数参数)用多维数组名作函数参数v形参数组定义时,只能省略第一维的大形参数组定义时,只能省略第一维的大小说明。小说明。l实参数组定义:实参数组定义:int score510 形参数组定义:形参数组定义:int array310 或或 int array810l 或或 int array 10l错误的定义:错误的定义:int array ;int array3;七、数组作为函数参数七、数组作为函数参数Advanced Programming例例 求求34矩阵中各元素的最大值矩阵中各元素的最大值#incl

48、ude void main()int max_value(int array 4);int a34=1,3,5,7,2,4,6,8,15,17,34,12;printf(max value is%dn,max_value(a);多维形参数组第一维维数多维形参数组第一维维数可省略可省略,第二维必须相同第二维必须相同 int array4int max_value(int array34)int i,j,k,max;max=array00;for(i=0;i3;i+)for(j=0;jmax)max=arrayij;return(max);Advanced Programming例例 求二维数组中

49、各行元素之和求二维数组中各行元素之和31 4679asum_rowxresult1812形参形参形参形参Advanced Programmingget_sum_row(int x3,int result,int row,int col)int i,j;for(i=0;irow;i+)resulti=0;for(j=0;jcol;j+)resulti+=xij;main()int a23=3,6,9,1,4,7;int sum_row2,row=2,col=3,i;get_sum_row(a,sum_row,row,col);for(i=0;irow;i+)printf(The sum of r

50、ow%d=%dn,i+1,sum_rowi);Advanced Programming问题:变量的逻辑位置?变量的物理位置?Advanced Programming变量的逻辑位置变量的物理位置程序文件内存 void main()int a;15346738964232001HAdvanced Programming八、局八、局部变量和部变量和全局变量全局变量#include int h;float f1(int a)int b,c;.main()int m,n;int i,j;.局部变量局部变量全局变量全局变量Advanced Programming1、局部变量、局部变量内部变量内部变量v定义

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

当前位置:首页 > 办公、行业 > 常用办公文档
版权提示 | 免责声明

1,本文(第7章函数模块化设计学习培训模板课件.ppt)为本站会员(林田)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|