用函数实现模块化程序设计课件.ppt

上传人(卖家):晟晟文业 文档编号:4962544 上传时间:2023-01-28 格式:PPT 页数:141 大小:2.23MB
下载 相关 举报
用函数实现模块化程序设计课件.ppt_第1页
第1页 / 共141页
用函数实现模块化程序设计课件.ppt_第2页
第2页 / 共141页
用函数实现模块化程序设计课件.ppt_第3页
第3页 / 共141页
用函数实现模块化程序设计课件.ppt_第4页
第4页 / 共141页
用函数实现模块化程序设计课件.ppt_第5页
第5页 / 共141页
点击查看更多>>
资源描述

1、7.1为什么要用函数为什么要用函数 7.2怎样定义函数怎样定义函数7.3调用函数调用函数7.4对被调用函数的声明和函数原型对被调用函数的声明和函数原型7.5函数的嵌套调用函数的嵌套调用 7.6函数的递归调用函数的递归调用7.7数组作为函数参数数组作为函数参数 7.8局部变量和全局变量局部变量和全局变量7.9变量的存储方式和生存期变量的存储方式和生存期7.10 关于变量的声明和定义关于变量的声明和定义7.11 内部函数和外部函数内部函数和外部函数问题:问题:u如果程序的功能比较多,规模比较大,把所有代如果程序的功能比较多,规模比较大,把所有代码都写在码都写在main函数中,就会使主函数变得庞杂、

2、函数中,就会使主函数变得庞杂、头绪不清,阅读和维护变得困难头绪不清,阅读和维护变得困难u有时程序中要多次实现某一功能,就需要多次重有时程序中要多次实现某一功能,就需要多次重复编写实现此功能的程序代码复编写实现此功能的程序代码,这使程序冗长,这使程序冗长,不精炼不精炼解决的方法:用解决的方法:用模块化程序设计的思路模块化程序设计的思路u采用采用“组装组装”的办法简化程序设计的过程的办法简化程序设计的过程u事先编好一批实现各种不同功能的函数事先编好一批实现各种不同功能的函数u把它们保存在函数库中把它们保存在函数库中,需要时需要时直接用直接用解决的方法:用解决的方法:用模块化程序设计的思路模块化程序

3、设计的思路u函数就是功能函数就是功能u每一个函数用来实现一个特定的功能每一个函数用来实现一个特定的功能u函数的名字应反映其代表的功能函数的名字应反映其代表的功能mainabcfghdeie在设计一个较大的程序时,往往把它分为若干个在设计一个较大的程序时,往往把它分为若干个程序模块,每一个模块包括一个或多个函数,每程序模块,每一个模块包括一个或多个函数,每个函数实现一个特定的功能个函数实现一个特定的功能程序可由一个主函数和若干个其他函数构成程序可由一个主函数和若干个其他函数构成主函数调用其他函数,其他函数也可以互相调用主函数调用其他函数,其他函数也可以互相调用同一个函数可以被一个或多个函数调用任

4、意多次同一个函数可以被一个或多个函数调用任意多次可以使用库函数可以使用库函数可以使用自己编写的函数可以使用自己编写的函数在程序设计中要善于利用函数,可以减少在程序设计中要善于利用函数,可以减少重复编写程序段的工作量,同时可以方便重复编写程序段的工作量,同时可以方便地实现模块化的程序设计地实现模块化的程序设计例例7.1 输出以下的结果,用函数调用实现。输出以下的结果,用函数调用实现。*How do you do!*解题思路:解题思路:u在输出的文字上下分别有一行在输出的文字上下分别有一行“*”号,显然不号,显然不必重复写这段代码,用一个函数必重复写这段代码,用一个函数print_star来来实现

5、输出一行实现输出一行“*”号的功能。号的功能。u再写一个再写一个print_message函数来输出中间一函数来输出中间一行文字信息行文字信息u用主函数分别调用这两个函数用主函数分别调用这两个函数#include int main()void print_star();void print_message();print_star();print_message();print_star();return 0;void print_star()printf(“*n”);void print_message()printf(“How do you do!n”);输出输出16个个*输出一行文字输出

6、一行文字#include int main()void print_star();void print_message();print_star();print_message();print_star();return 0;void print_star()printf(“*n”);void print_message()printf(“How do you do!n”);声明函数声明函数定义函数定义函数#include int main()void print_star();void print_message();print_star();print_message();print_st

7、ar();return 0;void print_star()printf(“*n”);void print_message()printf(“How do you do!n”);函数首部函数首部(函数头函数头)函数体函数体函数举例函数举例:int max(int x,int y)int z;z=xy?x:y;return z;函数体函数体返回值类型返回值类型函数名函数名形式参数表形式参数表int max(int x,int y)int z;z=xy?x:y;return z;函数名函数名:u格式格式:通常是一个标识符通常是一个标识符,要符合标要符合标识符的定义规则识符的定义规则u作用作用:唯

8、一的标识一个函数唯一的标识一个函数 u说明说明:要选择一个简洁的有意义要选择一个简洁的有意义的名字作为函数名。的名字作为函数名。从函数名可以反映出函数从函数名可以反映出函数的功能。的功能。形式参数表(简称形参):形式参数表(简称形参):u 格式格式:(类型名类型名 变量名变量名,类型名类型名 变量名变量名)u作用作用:指明要实现指定的功能所操作的指明要实现指定的功能所操作的数据数据 例:已知两个整数例:已知两个整数x,yx,y,要求求,要求求出其中的最大值出其中的最大值u 说明说明:一个函数也可以没有形参一个函数也可以没有形参,但括号但括号必须有必须有,称为无参函数称为无参函数int max(

9、int x,int y)int z;z=xy?x:y;return z;void printstar()printf(“*n”);函数类型函数类型(返回值类型返回值类型):u作用作用:指明函数的类型,指明函数的类型,函数实现功函数实现功能后得到的结果值的类型。能后得到的结果值的类型。其中函数实现功能后得到的结其中函数实现功能后得到的结果称为果称为函数返回值函数返回值。例:已知两个整数例:已知两个整数x,y,要求求出,要求求出其中的最大值其中的最大值u说明说明:可省略可省略,则默认为则默认为intint型。型。可用可用voidvoid,表示函数无返回值表示函数无返回值int max(int x,

10、int y)int z;z=xy?x:y;return z;void printstar()printf(“*n”);函数体:函数体:u作用作用:实现某种功能、完成某种任务。实现某种功能、完成某种任务。通常是对形参的操作通常是对形参的操作u格式格式:用用括起来的内容,由括起来的内容,由数据说数据说明部分明部分和和可执行语句可执行语句组成组成u说明说明:函数体内可以无任何语句,称函数体内可以无任何语句,称为为空函数空函数,作为接口使用作为接口使用.int max(int x,int y)int z;z=xy?x:y;return z;void dummy()2、函数的返回值:、函数的返回值:re

11、turn语句的使用语句的使用 分析:分析:已知一个华氏温度,要求出一个已知一个华氏温度,要求出一个摄氏温度摄氏温度 确定函数名:确定函数名:ftoc 确定形参:确定形参:已知一个华氏温度,设形参已知一个华氏温度,设形参temp代表代表f,类型为,类型为float。确定函数类型:确定函数类型:函数的返回值即为函数的返回值即为 c 的值,类的值,类型为型为float。float ftoc(float temp)float c;c=(5.0/9)*(temp 32);return c;)32(95fc 例例1:程序:程序:double jiecheng(int n )int i;double mul

12、=1;for(i=1;i=n;i+)mul*=i;return mul;程序:程序:void square()int i,j;for(i=1;i6;i+)for(j=1;jy?x:y;return z;x x,y y的值是多少呢?的值是多少呢?由该函数的使用者提供由该函数的使用者提供1、调用一般形式、调用一般形式 函数名函数名(实参表实参表);2、调用方式、调用方式 函数语句:函数语句:例例 square();函数表达式:函数表达式:例例 m=jiecheng(4)*2;函数参数:函数参数:例例 int n=6;printf(“%lf”,jiecheng(n);三、三、函数的调用函数的调用当用

13、不到函数的返回值时,用函数调用语句。当用不到函数的返回值时,用函数调用语句。当要使用函数的返回值时,用函数表达式或函数当要使用函数的返回值时,用函数表达式或函数参数参数函数调用例函数调用例1:#include int max(int x,int y)/*被调函数被调函数*/int n;n=xy?x:y;return n;x,y 是形参是形参a,b是实参是实参函数调用函数调用void main()/*主调函数主调函数*/int a,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);printf(“max=%dn”,c);说明:说明:u 在这个程序里有两个函数在这个程序里有两个

14、函数max和和main,它们的定义是平它们的定义是平行的、相互独立的。行的、相互独立的。u main是主函数是主函数,无论无论main函数放在什么位置,程序的运函数放在什么位置,程序的运行都从行都从main开始,从开始,从main结束。结束。u main又是又是主调函数(调用函数),主调函数(调用函数),它调用了它调用了max函数,函数,从而使从而使max函数得到运行。函数得到运行。u max是是被调用函数。被调用函数。main()调用函数调用函数maxreturn或或max函数函数结束结束已知求已知求n!的函数:的函数:double jiecheng(int n)int i;double m

15、ul=1;for(i=1;i=n;i+)mul*=i;return mul;编写程序,求出编写程序,求出6!、15!、!、28!#include void main()printf(“6!=%.0lfn”,jiecheng(6);printf(“15!=%.0lfn”,jiecheng(15);printf(“28!=%.0lfn”,jiecheng(28);函数调用例函数调用例2:代码复用代码复用3 3、形参与实参形参与实参4 4、函数调用的过程、函数调用的过程#include int max(int x,int y)int n;n=xy?x:y;return n;void main()in

16、t a,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);printf(“max=%dn”,c);abxyn34344main函数函数max函数函数 函数返回后,形参的空间被释放函数返回后,形参的空间被释放int sushu(int n)int i;for(i=2;in;i+)if(n%i=0)return 0;return 1;一个函数可包含多个一个函数可包含多个return语句语句以下关于以下关于return语句的叙述中正确的是语句的叙述中正确的是 A)一个自定义函数中必须有一条一个自定义函数中必须有一条return语句语句 B)一个自定义函数中可以根据不同情况设置多一

17、个自定义函数中可以根据不同情况设置多条条return语句语句 C)定义成定义成void类型的函数中可以有带返回值类型的函数中可以有带返回值的的return语句语句 D)没有没有return语句的自定义函数在执行结束语句的自定义函数在执行结束时不能返同到调用时不能返同到调用 以下关于以下关于return语句的叙述中正确的是语句的叙述中正确的是 A)一个自定义函数中必须有一条一个自定义函数中必须有一条return语句语句 B)一个自定义函数中可以根据不同情况设置多一个自定义函数中可以根据不同情况设置多条条return语句语句 C)定义成定义成void类型的函数中可以有带返回值类型的函数中可以有带返

18、回值的的return语句语句 D)没有没有return语句的自定义函数在执行结束语句的自定义函数在执行结束时不能返同到调用时不能返同到调用 main()调用函数调用函数maxreturn或或max函数函数结束结束运行结果是:运行结果是:x=4,y=3 x=4,y=3 a=3,b=4 a=3,b=4abxyt3434343若函数调用时的实参为变量时,下列关于函数形参若函数调用时的实参为变量时,下列关于函数形参和实参的叙述中正确的是(和实参的叙述中正确的是()。)。A)函数的实参和其对应的形参共占同一存储单元)函数的实参和其对应的形参共占同一存储单元B)形参只是形式上的存在,不占用具体存储单元)形

19、参只是形式上的存在,不占用具体存储单元C)同名的实参和形参占同一存储单元)同名的实参和形参占同一存储单元D)函数的形参和实参分别占用不同的存储单元)函数的形参和实参分别占用不同的存储单元若函数调用时的实参为变量时,下列关于函数形参若函数调用时的实参为变量时,下列关于函数形参和实参的叙述中正确的是(和实参的叙述中正确的是()。)。A)函数的实参和其对应的形参共占同一存储单元)函数的实参和其对应的形参共占同一存储单元B)形参只是形式上的存在,不占用具体存储单元)形参只是形式上的存在,不占用具体存储单元C)同名的实参和形参占同一存储单元)同名的实参和形参占同一存储单元D)函数的形参和实参分别占用不同

20、的存储单元)函数的形参和实参分别占用不同的存储单元6 6、函数声明、函数声明(函数原型函数原型)#include void main()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);编译出编译出错错#include void main()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

21、z;z=x+y;return(z);float add(float x,float y);float add(float,float);编译编译通过通过在主调函数内部在主调函数内部进行函数声明进行函数声明#include void main()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 x,float y);float add(float,float);在所有函数之前在所有函数之前进行函

22、数声明进行函数声明#include float add(float x,float y)float z;z=x+y;return(z);void main()float a,b,c;scanf(%f,%f,&a,&b);c=add(a,b);printf(sum is%f,c);语言的函数定义是互相平行、独立的语言的函数定义是互相平行、独立的即即函数不能嵌套定义函数不能嵌套定义但可以嵌套调用函数但可以嵌套调用函数即即调用一个函数的过程中,又调用一个函数的过程中,又可以可以调用另调用另一个函数一个函数main函数函数调用调用a函数函数结束结束a函数函数调用调用b函数函数b函数函数 例例7.5 输

23、入输入4个整数,找出其中最大的数。个整数,找出其中最大的数。用函数的嵌套调用来处理。用函数的嵌套调用来处理。解题思路:解题思路:umain中调用中调用max4函数,找函数,找4个数中最大者个数中最大者umax4中再调用中再调用max2,找两个数中的大者找两个数中的大者umax4中多次调用中多次调用max2,可找,可找4个数中的大个数中的大者,然后把它作为函数值返回者,然后把它作为函数值返回main函数函数umain函数中输出结果函数中输出结果#include int main()int max4(int a,int b,int c,int d);int a,b,c,d,max;printf(“

24、4 interger numbers:);scanf(%d%d%d%d,&a,&b,&c,&d);max=max4(a,b,c,d);printf(max=%d n,max);return 0;主函数主函数对对max4 函数声明函数声明#include int main()int max4(int a,int b,int c,int d);int a,b,c,d,max;printf(“4 interger numbers:);scanf(%d%d%d%d,&a,&b,&c,&d);max=max4(a,b,c,d);printf(max=%d n,max);return 0;主函数主函数输入

25、输入4个整数个整数#include int main()int max4(int a,int b,int c,int d);int a,b,c,d,max;printf(“4 interger numbers:);scanf(%d%d%d%d,&a,&b,&c,&d);max=max4(a,b,c,d);printf(max=%d n,max);return 0;主函数主函数调用后肯定是调用后肯定是4个数中最大者个数中最大者输出最大者输出最大者int max4(int a,int b,int c,int d)int max2(int a,int b);int m;m=max2(a,b);m=m

26、ax2(m,c);m=max2(m,d);return(m);max4函数函数对对max2 函数声明函数声明int max4(int a,int b,int c,int d)int max2(int a,int b);int m;m=max2(a,b);m=max2(m,c);m=max2(m,d);return(m);max4函数函数a,b中较大者中较大者a,b,c中较大者中较大者a,b,c,d中最大者中最大者int max4(int a,int b,int c,int d)int max2(int a,int b);int m;m=max2(a,b);m=max2(m,c);m=max2(

27、m,d);return(m);max4函数函数int max2(int a,int b)if(a=b)return a;else return b;max2函数函数找找a,b中较大者中较大者int max4(int a,int b,int c,int d)int max2(int a,int b);int m;m=max2(a,b);m=max2(m,c);m=max2(m,d);return(m);max4函数函数int max2(int a,int b)if(a=b)return a;else return b;max2函数函数return(ab?a:b);int max4(int a,i

28、nt b,int c,int d)int max2(int a,int b);int m;m=max2(a,b);m=max2(m,c);m=max2(m,d);return(m);max4函数函数int max2(int a,int b)return(ab?a:b);int max4(int a,int b,int c,int d)int max2(int a,int b);int m;m=max2(a,b);m=max2(m,c);m=max2(m,d);return(m);max4函数函数m=max2(max2(a,b),c);int max2(int a,int b)return(ab

29、?a:b);int max4(int a,int b,int c,int d)int max2(int a,int b);int m;m=max2(a,b);m=max2(m,c);m=max2(m,d);return(m);max4函数函数m=max2(max2(max2(a,b),c),d);int max2(int a,int b)return(ab?a:b);int max4(int a,int b,int c,int d)int max2(int a,int b);int m;m=max2(a,b);m=max2(m,c);m=max2(m,d);return(m);max4函数函数

30、ruturn max2(max2(max2(a,b),c),d);int max2(int a,int b)return(ab?a:b);int max4(int a,int b,int c,int d)int max2(int a,int b);ruturn max2(max2(max2(a,b),c),d);int max2(int a,int b)return(ab?a:b);#include int main()max=max4(a,b,c,d);在调用一个函数的过程中又出现直接或间在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的接地调用该函数本身,称为函数的递归调递

31、归调用用。语言的特点之一就在于允许函数的递归语言的特点之一就在于允许函数的递归调用。调用。f2函数函数调用调用f1函数函数 int f(int x)int y,z;z=f(y);return(2*z);f函数函数调用调用f函数函数 f1函数函数调用调用f2函数函数应使用应使用if语句控制结束调用语句控制结束调用直接调用本函数直接调用本函数间接调用本函数间接调用本函数 例例7.6 有有5个学生坐在一起个学生坐在一起u问第问第5个学生多少岁?他说比第个学生多少岁?他说比第4个学生大个学生大2岁岁u问第问第4个学生岁数,他说比第个学生岁数,他说比第3个学生大个学生大2岁岁u问第问第3个学生,又说比第

32、个学生,又说比第2个学生大个学生大2岁岁u问第问第2个学生,说比第个学生,说比第1个学生大个学生大2岁岁u最后问第最后问第1个学生,他说是个学生,他说是10岁岁u请问第请问第5个学生多大个学生多大解题思路:解题思路:u要求第个年龄,就必须先知道第个年龄要求第个年龄,就必须先知道第个年龄u要求第个年龄必须先知道第个年龄要求第个年龄必须先知道第个年龄u第个年龄又取决于第个年龄第个年龄又取决于第个年龄u第个年龄取决于第个年龄第个年龄取决于第个年龄u每个学生年龄都比其前个学生的年龄大每个学生年龄都比其前个学生的年龄大解题思路:解题思路:age(5)=age(4)+2age(4)=age(3)+2age

33、(3)=age(2)+2age(2)=age(1)+2age(1)=10)1(2)1()()1(10)(nnagenagennage age(5)=age(4)+2 age(4)=age(3)+2 age(3)=age(2)+2 age(2)=age(1)+2 age(1)=10 age(2)=12 age(3)=14 age(4)=16 age(5)=18 回溯阶段回溯阶段 递推阶段递推阶段 age(5)=age(4)+2 age(4)=age(3)+2 age(3)=age(2)+2 age(2)=age(1)+2 age(1)=10 age(2)=12 age(3)=14 age(4)=

34、16 age(5)=18 回回溯溯阶段阶段 递推阶段递推阶段结束递归的条件结束递归的条件#include int main()int age(int n);printf(NO.5,age:%dn,age(5);return 0;int age(int n)int c;if(n=1)c=10;else c=age(n-1)+2;return(c);age(5)输出输出age(5)mainc=age(4)+2age函数函数n=5c=age(3)+2age函数函数n=4c=age(1)+2age函数函数n=2c=age(2)+2age函数函数n=3c=10age函数函数n=1age(1)=10age

35、(2)=12age(3)=14age(4)=16age(5)=1818例例7.7 用递归方法求!。用递归方法求!。解题思路:解题思路:u求!可以用递推方法求!可以用递推方法:即从开始,乘,即从开始,乘,再乘再乘一直乘到。一直乘到。u递推法的特点是从一个已知的事实递推法的特点是从一个已知的事实(如如1!=1)出发,按一定规律推出下一个事实出发,按一定规律推出下一个事实(如如2!=1!*2),再从这个新的已知的事实出发,再从这个新的已知的事实出发,再向下推出一个新的事实再向下推出一个新的事实(3!=3*2!)。n!=n*(n-1)!。例例7.7 用递归方法求!。用递归方法求!。解题思路:解题思路:

36、u求!也可以用递归方法,即!等于!求!也可以用递归方法,即!等于!,而!,而!,!,!u可用下面的递归公式表示:可用下面的递归公式表示:)1()1()1,0(1!nnnnnn#include int main()int fac(int n);int n;int y;printf(input an integer number:);scanf(%d,&n);y=fac(n);printf(%d!=%dn,n,y);return 0;int fac(int n)int f;if(n0)printf(n0,data error!);else if(n=0|n=1)f=1;else f=fac(n-1

37、)*n;return(f);注意溢出注意溢出fac(5)输出输出fac(5)mainf=fac(4)5fac函数函数n=5f=fac(3)4fac函数函数n=4f=fac(1)2fac函数函数n=2f=fac(2)3fac函数函数n=3f=1fac函数函数n=1fac(1)=1fac(2)=2fac(3)=6fac(4)=24fac(5)=1201207.7.1数组元素作函数实参数组元素作函数实参7.7.2数组名作函数参数数组名作函数参数7.7.3多维数组名作函数参数多维数组名作函数参数 例例7.9 输入输入10个数,要求输出其中值个数,要求输出其中值最大的元素和该数是第几个数。最大的元素和该

38、数是第几个数。解题思路:解题思路:u定义数组定义数组a,用来存放,用来存放10个数个数u设计函数设计函数max,用来求两个数中的大者,用来求两个数中的大者u在主函数中定义变量在主函数中定义变量m,初值为,初值为a0,每次调用每次调用max函数后的返回值存放在函数后的返回值存放在m中中u用用“打擂台打擂台”算法,依次将数组元素算法,依次将数组元素a1到到a9与与m比较,最后得到的比较,最后得到的m值值就是就是10个数中的最大者个数中的最大者#include int main()int max(int x,int y);int a10,m,n,i;printf(“10 integer number

39、s:n);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(“largest number is%dn,m);printf(“%dth number.n“,n+1);int max(int x,int y)return(xy?x:y);除了可以用数组元素作为函数参数外除了可以用数组元素作为函数参数外,还可以用数组名作函数参数,还可以用数组名作函数参数(包括实包括实参和形参参和形参)用数组元素作实参时,向形参变量传用数组元素作实参时,向形参变量传递的是数组元素的值递的是数组元素的值,

40、单向单向值传值传递递用数组名作函数实参时,向形参用数组名作函数实参时,向形参 传传递递的是数组首元素的地的是数组首元素的地址址 例例7.10 有一个一维数组有一个一维数组score,内放,内放10个学生成绩,求平均成绩。个学生成绩,求平均成绩。解题思路:解题思路:u用函数用函数average求平均成绩,用数组名求平均成绩,用数组名作为函数实参,形参也用数组名作为函数实参,形参也用数组名u在在average函数中引用各数组元素,求函数中引用各数组元素,求平均成绩并返回平均成绩并返回main函数函数#include int main()float average(float array10);fl

41、oat score10,aver;int i;printf(input 10 scores:n);for(i=0;i10;i+)scanf(%f,&scorei);printf(n);aver=average(score);printf(%5.2fn,aver);return 0;定义实参数组定义实参数组实参用数组名实参用数组名float average(float array10)int i;float aver,sum=array0;for(i=1;i10;i+)sum=sum+arrayi;aver=sum/10;return(aver);定义形参数组定义形参数组相当于相当于score0

42、相当于相当于scorei.2109score562312.88array实参实参形参形参at343例:数组名做实参,双向传递例:数组名做实参,双向传递运行结果:运行结果:a0=4,a1=3axyt3434343例:数组元素做实参,单向值传递例:数组元素做实参,单向值传递运行结果:运行结果:a0=3,a1=4 例例7.11 有两个班级,分别有有两个班级,分别有35名和名和30名学生,调用一个名学生,调用一个average函数,分别求函数,分别求这两个班的学生的平均成绩。这两个班的学生的平均成绩。解题思路:解题思路:u需要解决怎样用同一个函数求两个不同长度的需要解决怎样用同一个函数求两个不同长度的

43、数组的平均值的问题数组的平均值的问题u定义定义average函数时不指定数组的长度,在函数时不指定数组的长度,在形参表中增加一个整型变量形参表中增加一个整型变量iu从主函数把数组实际长度从实参传递给形参从主函数把数组实际长度从实参传递给形参iu这个这个i用来在用来在average函数中控制循环的次数函数中控制循环的次数u为简化,设两个班的学生数分别为为简化,设两个班的学生数分别为5和和10#include int main()float average(float array,int n);float score15=98.5,97,91.5,60,55;float score210=67.5

44、,89.5,99,69.5,77,89.5,76.5,54,60,99.5;printf(“%6.2fn”,average(score1,5);printf(“%6.2fn”,average(score2,10);return 0;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);调用形式为调用形式为average(score1,5)时时相当于相当于score10相当于相当于score1i相当于相当于5float ave

45、rage(float array,int n)int i;float aver,sum=array0;for(i=1;in;i+)sum=sum+arrayi;aver=sum/n;return(aver);调用形式为调用形式为average(score2,10)时时相当于相当于score20相当于相当于score2i相当于相当于10例例7.12void sort(int arr,int n)int i,j,k,t;/arr i将存放本趟最小数将存放本趟最小数 for(i=0;in-1;i+)/k记录扫描中的最小数下标,初值假设为记录扫描中的最小数下标,初值假设为i k=i;/j扫描数据扫描数

46、据 for(j=i+1;jn;j+)if(arrjarrk)k=j;t=arr k;arrk=arr i;arri=t;#include void sort(int arr,int n);void main()int a10,I;printf(“input 10 integers:”);for(i=0;i10;i+)scanf(“%d”,&ai);sort(a,10);for(i=0;i10;i+)printf(“%5d”,ai);printf(“n”);例例7.13 有一个的矩阵,求所有有一个的矩阵,求所有元素中的最大值。元素中的最大值。解题思路:先使变量解题思路:先使变量max的初值等于的

47、初值等于矩阵中第一个元素的值,然后将矩阵矩阵中第一个元素的值,然后将矩阵中各个元素的值与中各个元素的值与max相比,每次比相比,每次比较后都把较后都把“大者大者”存放在存放在max中,全中,全部元素比较完后,部元素比较完后,max 的值就是所有的值就是所有元素的最大值。元素的最大值。#include int main()int max_value(int array4);int a34=1,3,5,7,2,4,6,8,15,17,34,12;printf(“Max value is%dn”,max_value(a);return 0;可以省略可以省略不能省略不能省略要与要与形参数组第形参数组第

48、二二维大小维大小相同相同int max_value(int array4)int i,j,max;max=array00;for(i=0;i3;i+)for(j=0;jmax)max=arrayij;return(max);要与实参要与实参数组第数组第二二维大小维大小相同相同7.8.1 局部变量局部变量7.8.2 全局变量全局变量定义变量可能有三种情况:定义变量可能有三种情况:u在函数的开头定义在函数的开头定义u在函数内的复合语句内定义在函数内的复合语句内定义u在函数的外部定义在函数的外部定义在一个函数内部定义的变量只在本函数在一个函数内部定义的变量只在本函数范围内有效范围内有效在复合语句内定

49、义的变量只在本复合语在复合语句内定义的变量只在本复合语句范围内有效句范围内有效在在函数内部函数内部或复合语句内部定义的变量或复合语句内部定义的变量称为称为“局部变量局部变量”局部变量(内部变量):在一个函数内部定义的变量,只在局部变量(内部变量):在一个函数内部定义的变量,只在本函数内部有效。即只能在本函数内部使用本函数内部有效。即只能在本函数内部使用.或者说局部变量的或者说局部变量的作用域作用域是定义它的函数是定义它的函数float f1(int a)int b,c;char f2(int x,int y)int i,j;int main()int m,n;return 0;a、b、c仅在仅

50、在此函数内此函数内有效有效x、y、i、j仅在仅在此函数内此函数内有效有效m、n仅在此仅在此函数内函数内有效有效float f1(int a)int b,c;char f2(int x,int y)int i,j;int main()int a,b;return 0;类似于不同类似于不同班同名学生班同名学生a、b也仅在此也仅在此函数内函数内有效有效int main()int a,b;int c;c=a+b;c仅在此复合仅在此复合语句内语句内有效有效a、b在此复合在此复合语句内也语句内也有效有效int max(int x,int y)int z;z=xy?x:y;return z;void mai

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

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


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

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


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