模块化程序设计.ppt

上传人:牧羊曲112 文档编号:5992381 上传时间:2023-09-12 格式:PPT 页数:27 大小:307KB
返回 下载 相关 举报
模块化程序设计.ppt_第1页
第1页 / 共27页
模块化程序设计.ppt_第2页
第2页 / 共27页
模块化程序设计.ppt_第3页
第3页 / 共27页
模块化程序设计.ppt_第4页
第4页 / 共27页
模块化程序设计.ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《模块化程序设计.ppt》由会员分享,可在线阅读,更多相关《模块化程序设计.ppt(27页珍藏版)》请在三一办公上搜索。

1、2023年9月12日星期二,济南大学信息学院,第三章 模块化程序设计,3.1 模块化程序设计思想3.2 函数定义3.3 函数调用3.4 函数的原型与声明3.5 函数的嵌套与递归3.6 库函数3.7 变量的作用域与存储类型3.8 指针与函数,2023年9月12日星期二,济南大学信息学院,上节内容回顾,主函数main的内容:主要就是函数调用及输出。,void main(),自定义函数的内容:主要就是程序主功能的完成,然后返回值。,函数返回值类型 函数名(形参)除形参外的其它变量定义;功能完成语句;函数返回语句return;,变量定义实参赋值函数调用输出结果printf,2023年9月12日星期二,

2、济南大学信息学院,定义函数时需要解决的问题:有没有参数?即:需要从主函数中传递数据吗?参数的个数:参数的类型:int、float、double、char或指针是否有返回值?即:是否向主函数返回计算结果?返回值的类型:void?其它int、float?,2023年9月12日星期二,济南大学信息学院,int max(int x,int y)void main(),2、函数调用的形式,函数名(实参);,3、函数间的参数传递,平行定义,3.3.3 函数的返回值,济南大学信息学院,C语言程序设计,第5页,int max(int x,int y)int z;z=xy?x:y;return(z);,1、函数

3、的返回值是通过return语句获得的。return语句的作用是终止当前函数的执行并将一个确定值带回主调函数中,return语句的一般形式是:,return(表达式);,或:return 表达式;,2、函数返回值的类型:在定义函数时指定,int max(int x,int y),double power(int x,int y),语言规定,凡不指定类型的函数,自动按整型(int)处理。,max(int x,int y),int max(int x,int y),济南大学信息学院,C语言程序设计,第6页,函数值的类型与return语句中表达式的类型应一致;若不一致,则以函数类型为准(自动转换)。,

4、int max(double x,double y)return(xy?x:y);,3、一个函数可以有多个return语句,但每次调用只有一个return语句被执行,因此函数的返回值只有一个。,4、对于有返回值的函数,若return语句后面没有表达式,或没有return语句,此时带回一个不确定的返回值。,return;,5、为了明确表示“不带回值”,用void定义“无类型”(或称“空类型”,即无返回值)。,void main(),2023年9月12日星期二,济南大学信息学院,无参数、无返回值的函数定义及调用,、编写一个函数,打印一行信息“How do you do!”,printf(How d

5、o you do!n);,_ dayin(_),void,void main(),dayin();,#include,自定义函数:有没有参数:无不需要从主函数中传递数据。是否有返回值:无不需要向主函数返回结果。,2023年9月12日星期二,济南大学信息学院,输入圆的半径r,用自定义函数area实现圆的面积,并在主函数中输出最终的结果。,float area(int m),#include/普通设计void main()int r;float a;scanf(“%d”,float s;s=3.14*m*m;return s;,a=area(r);,得到的信息:函数有返回值,类型为float;函数

6、有参数,个数为1个,类型为int。,济南大学信息学院,C语言程序设计,第9页,例3.2 输入两个整数,计算其平均值。要求用函数实现平均值的计算。,average函数:有没有参数:有参数的个数:2参数的数据类型:int是否有返回值:有返回值的类型:float 或 double,float average(int x,int y)float result;result=(x+y)/2.0;return(result);,void main()int a,b;float ave;scanf(%d%d,主函数:函数调用average函数:实现平均值的计算。,使用函数计算 1+1/3+1/5+1/n(n

7、为奇数)的和。其中,n是从键盘上随机输入的一个整数。,int i,n;float sum;sum=0;printf(“input n:n”)scanf(“%d”,#include void main(),fun函数:有没有参数:?参数的个数:?参数的数据类型:?是否有返回值:?返回值的类型:?,2023年9月12日星期二,济南大学信息学院,#include float fun(int n)void main()int n;printf(Input n:);scanf(%d,int i;float sum=0;for(i=1;i=n;i+=2)sum+=1.0/i;return(sum);,in

8、t i,n;float sum=0;printf(“input n:n”)scanf(“%d”,不使用函数的做法#include void main(),2023年9月12日星期二,济南大学信息学院,编写函数,计算下式前n项的和。注意,n在主函数中输入,计算结果在主函数中输出。例如,当n=10时,结果为0.909091。,#include double fun(int m)void main()int n;printf(Input n:);scanf(%d,int i;double s=0;for(i=1;i=m;i+)s=s+1.0/(i*(i+1);return(s);,2023年9月12

9、日星期二,济南大学信息学院,例1:定义一个函数,判断整数m是否是素数。是素数返回整数1,不是返回0。,isPrime(),int m,int,int i,k;k=sqrt(m);for(i=2;i=k;i+)if(m%i=0)return(0);return(1);,判断m是否是素数可以让m被2、3、4 去除,若 能被其中的任何一个数整除,则证明不是素数。,#include void main()int x;printf(“please input a num:n”);scanf(“%d”,2023年9月12日星期二,济南大学信息学院,例2:定义一个函数,判断某一年是否闰年,是则返回1,不是返

10、回0.,leap(),int year,int,if(year%4=0,EG307.C,实验8的一个题目:编写函数,判断指定的字符是否数字字符,如果是返回1,否则返回0。,2023年9月12日星期二,济南大学信息学院,说明:、被调用的函数必须已经存在;,、使用库函数时,应在文件开头用#include命令将有关头文件包含进来;,#include#include#include,、若用户自己定义的函数在主调main函数之后,则应在main函数之前对被调用的函数作声明。,声明:将函数的名字、函数类型以及形参的类型、个数和顺序通知编译系统。-即由函数定义时的函数首部加分号构成。,2023年9月12日星

11、期二,济南大学信息学院,3.4 函数的原型与声明,在函数调用之前应当对所调用的函数进行声明,指出该函数的返回值的类型以及形参的个数和类型,编译器据此对函数调用进行语法检查,保证函数使用的正确性。,1、函数声明的格式:,函数类型 函数名(形参表);,例:float fun(double a,int b,float c);float fun(double,int,float);float fun(double x,int y,float z);,即函数首部加”;”,2023年9月12日星期二,济南大学信息学院,2、说明:、函数声明的位置:是在所有函数(包括main函数)的外部进行函数声明(推荐)。

12、,、如果自定义函数出现在主调函数之前,可以不必进行声明。-(推荐),#include int max(int x,int y);void main()int max(int x,int y),#include int max(int x,int y)void main(),2023年9月12日星期二,济南大学信息学院,3.5 函数的嵌套与递归,3.5.1 函数的嵌套调用,语言的函数定义都是互相平行的、独立的,即不允许嵌套定义函数(即在一个函数内部定义另一个函数);但是,可以嵌套调用函数,即程序在调用一个函数的过程中,该被调函数又可以调用其它函数。,void main():fun();:,voi

13、d fun():g();:,main函数,fun函数,g函数,2023年9月12日星期二,济南大学信息学院,例3.4 编程求,输入k和n的值,分析:假设输入k=3,n=5,即求13+23+33+43+53,累加题。可分为以下4步求解:输入n和k的值 乘方运算,即计算xk 求和运算,即计算1k+2k+nk 输出结果需要编写三个函数:乘方函数、求和函数、main 函数,注意:main函数调用求和函数,而求和函数又调用乘方函数 main函数中将n和k作为实际参数,把它们的值传给求和函数,2023年9月12日星期二,济南大学信息学院,#include void main()/*主函数*/int k,n

14、;float sum;/*为什么用float型定义变量?*/printf(input:k,n);/*提示信息*/scanf(%d%d,2023年9月12日星期二,济南大学信息学院,/*求和函数1t+2t+mt*/float sigma(int m,int t)int i;float sum,p;sum=0;for(i=1;i=m;i+)p=power(i,t);sum=sum+p;return(sum);,/*乘方函数pq-重点掌握p*p*p*.p*/float power(int p,int q)int i;float product;product=1;for(i=1;i=q;i+)pro

15、duct=product*p;return(product);,调用乘方函数,2023年9月12日星期二,济南大学信息学院,void main()int k,n;float sum;printf(input:k,n);scanf(%d%d,float sigma(int m,int t)int i;float sum,p;sum=0;for(i=1;i=m;i+)p=power(i,t);sum=sum+p;return(sum);,float power(int p,int q)int i;float product;product=1;for(i=1;i=q;i+)product=prod

16、uct*p;return(product);,#include,完整程序:,参数值的传递过程:main sigma power n m k t q i p,2023年9月12日星期二,济南大学信息学院,函数在被调用的过程中,又直接或间接地调用自身,则称函数的递归调用。这种函数也被称为递归函数。语言允许函数的递归调用。,3.5.2 函数的递归调用,例3.5 用递归方法求整数n的阶乘n!。,分析:一般来说,n!描述成为:n!=1*2*3*(n-1)*n但是,变换一下,就可以将其描述成为:n!=n*(n-1)*3*2*1=n*(n-1)!,2023年9月12日星期二,济南大学信息学院,EG807.C

17、,2023年9月12日星期二,济南大学信息学院,n=5result=fact(5),result=120,递推,回溯,递归过程图示,2023年9月12日星期二,济南大学信息学院,3.6 库函数,库函数:即系统已经定义好、具有特定功能的函数。这些函数可以直接使用,不必重新定义,但使用时需要用#include命令把相应的头文件包含进来。,输入输出函数(头文件:stdio.h):printf()scanf()getchar()putchar(),数学函数(头文件:math.h):sqrt()pow()fabs()log10()log(),字符串函数(头文件:string.h):strcpy()strcat()strcmp()strlen(),各函数的功能见附录,使用时注意参数个数及类型、函数的返回值。,2023年9月12日星期二,济南大学信息学院,E N D,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号