模块化程序设计.ppt_第1页
模块化程序设计.ppt_第2页
模块化程序设计.ppt_第3页
模块化程序设计.ppt_第4页
模块化程序设计.ppt_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

* * 济南大学济南大学 信息学院信息学院 第三章第三章 模块化程序设计模块化程序设计 3.1 3.1 模块化程序设计思想模块化程序设计思想 3.2 3.2 函数定义函数定义 3.3 3.3 函数调用函数调用 3.4 3.4 函数的原型与声明函数的原型与声明 3.5 3.5 函数的嵌套与递归函数的嵌套与递归 3.6 3.6 库函数库函数 3.7 3.7 变量的作用域与存储类型变量的作用域与存储类型 3.8 3.8 指针与函数指针与函数 * * 济南大学济南大学 信息学院信息学院 上节内容回顾 主函数main的内容: 主要就是函数调用及输出。 void main( )void main( ) 自定义函数的内容: 主要就是程序主功能的完成,然 后返回值。 函数返回值类型 函数名 (形参) 除形参外的其它变量定义; 功能完成语句; 函数返回语句return; 变量定义 实参赋值 函数调用 输出结果printf * * 济南大学济南大学 信息学院信息学院 定义函数时需要解决的问题:定义函数时需要解决的问题: qq有没有参数?即:需要有没有参数?即:需要从主函数中传递数据吗?从主函数中传递数据吗? 参数的个数:参数的个数: 参数的类型:参数的类型:intint、floatfloat、doubledouble、charchar或指针或指针 qq是否有返回值?是否有返回值?即:是否向主函数返回计算结果?即:是否向主函数返回计算结果? 返回值的类型:返回值的类型:voidvoid?其它?其它intint、floatfloat? * * 济南大学济南大学 信息学院信息学院 intint max(int x, int y) max(int x, int y) voidvoid main( ) main( ) 2 2、 函数调用的形式函数调用的形式函数名 函数名( (实参实参); ); 3 3、 函数间的参数传递函数间的参数传递实参实参 形参形参 平行定义 3.3.3 3.3.3 函数的返回值函数的返回值 济南大学信息学院济南大学信息学院C C语言程序设计语言程序设计第5页 int max(int max(int xint x, , int yint y) ) int z; int z; z=xy?x:y; z=xy?x:y; return(z);return(z); 1 1、函数的返回值是通过、函数的返回值是通过returnreturn语句语句获得的。获得的。 returnreturn语句的作用是语句的作用是终止当前函数的执行并将一个确定值带回终止当前函数的执行并将一个确定值带回 主调函数中主调函数中 returnreturn语句的一般形式是:语句的一般形式是: returnreturn( (表达式表达式) ); ;或:或:returnreturn 表达式表达式; ; 2 2、函数返回值的类型:在定义函数时指定、函数返回值的类型:在定义函数时指定 int max(int x, int y)int max(int x, int y)double power(int x, int y)double power(int x, int y) 语言规定,凡不指定类型的函数,自动按语言规定,凡不指定类型的函数,自动按整型整型( (intint) )处理。处理。 max(int x, int y)max(int x, int y)intint max(int x, int y) max(int x, int y) 济南大学信息学院济南大学信息学院C C语言程序设计语言程序设计第6页 函数值的类型函数值的类型与与returnreturn语句中表语句中表 达式的类型达式的类型应一致应一致;若不一致,则;若不一致,则 以函数类型为准以函数类型为准(自动转换)。(自动转换)。 intint max(double x, double y) max(double x, double y) return(xy?x:y); return(xy?x:y); 3 3、一个函数可以有多个、一个函数可以有多个returnreturn语句,但每次调用语句,但每次调用只有一个只有一个 returnreturn语句被执行,语句被执行,因此因此函数的返回值只有一个。函数的返回值只有一个。 4 4、对于、对于有返回值的函数有返回值的函数,若,若returnreturn语句后面语句后面没有表达式没有表达式,或,或 没有没有returnreturn语句语句,此时,此时带回一个不确定的返回值。带回一个不确定的返回值。 return;return; 5 5、为了明确表示、为了明确表示“ “不带回值不带回值” ”,用,用voidvoid定义定义 “ “无类型无类型” ”(或称(或称“ “空类型空类型” ”,即无返回值),即无返回值) 。 void void main( )main( ) * * 济南大学济南大学 信息学院信息学院 无参数、无返回值的函数定义及调用无参数、无返回值的函数定义及调用 、编写一个函数,打印一行信息、编写一个函数,打印一行信息“ “How do you do!”How do you do!” printf(“How do you do!n“);printf(“How do you do!n“); _ dayin( dayin( _ _ ) ) voidvoid void main( )void main( ) dayin( );dayin( ); #include #include 自定义函数:自定义函数: qq有没有参数:有没有参数:无无 不需要从主函数中传递数据。不需要从主函数中传递数据。 qq是否有返回值:是否有返回值:无无 不需要向主函数返回结果。不需要向主函数返回结果。 * * 济南大学济南大学 信息学院信息学院 输入圆的半径r,用自定义函数area实现圆的面积,并在 主函数中输出最终的结果。 float area(int m) #include /普通设计 void main() int r; float a; scanf(“%d”, a=3.14*r*r; printf(“the area is %f”,a); 实参,可以和形参重名 float s; s=3.14*m*m; return s; a=area(r); 得到的信息: 函数有返回值,类 型为float; 函数有参数,个数 为1个,类型为int。 济南大学信息学院济南大学信息学院C C语言程序设计语言程序设计第9页 例例3.2 3.2 输入两个整数,计算其平均值。要求用函数实现平均值输入两个整数,计算其平均值。要求用函数实现平均值 的计算。的计算。 averageaverage函数:函数: qq有没有参数:有有没有参数:有 参数的个数:参数的个数:2 2 参数的数据类型:参数的数据类型:intint qq是否有返回值:有是否有返回值:有 返回值的类型:返回值的类型:float float 或或 doubledouble floatfloat average( average(int x,int yint x,int y) ) float result; float result; result=(x+y)/2.0; result=(x+y)/2.0; return(result);return(result); void main( )void main( ) int a,b; int a,b; float avefloat ave; ; scanf(“%d%d“, scanf(“%d%d“, aveave= =average(a,b)average(a,b); ; printf(“ave=%fn“,ave); printf(“ave=%fn“,ave); qq主函数:函数调用主函数:函数调用 qqaverageaverage函数:实现平均函数:实现平均 值的计算。值的计算。 使用函数计算使用函数计算 1+1/3+1/5+1/n1+1/3+1/5+1/n(n n为奇数)的和。其中,为奇数)的和。其中,n n 是从键盘上随机输入的一个整数。是从键盘上随机输入的一个整数。 int i,n;int i,n; floatfloat sum; sum; sum=0;sum=0; printf(“input n:n”)printf(“input n:n”) scanf(“%d”,scanf(“%d”, for(i=1;i#include void main( )void main( ) funfun函数:函数: qq有没有参数:有没有参数:? ? 参数的个数:参数的个数:? ? 参数的数据类型:参数的数据类型:? ? qq是否有返回值:是否有返回值:? ? 返回值的类型:返回值的类型:? ? * * 济南大学济南大学 信息学院信息学院 #include #include float fun(int n)float fun(int n) void main( )void main( ) int n; int n; printf(“Input n:“); printf(“Input n:“); scanf(“%d“, scanf(“%d“, printf(“%fn“, printf(“%fn“,fun(n);fun(n); int i;int i; float sum=0;float sum=0; for (i=1; i#include void main( )void main( ) * * 济南大学济南大学 信息学院信息学院 编写函数,计算下式前编写函数,计算下式前n n项的和。注意,项的和。注意,n n在主函数中输入,计在主函数中输入,计 算结果在主函数中输出。例如,算结果在主函数中输出。例如,当当n=10n=10时,结果为时,结果为 0.9090910.909091。 #include #include double fun(int m)double fun(int m) void main( )void main( ) int n; int n; printf(“Input n:“); printf(“Input n:“); scanf(“%d“, scanf(“%d“, printf(“%fn“, printf(“%fn“,fun(n);fun(n); int i;int i; double s=0;double s=0; for (i=1; i#include void main()void main() int x; int x; printf(“please input a num:n”); scanf(“%d”, if ( if (isPrime(x) ) )或或 isPrime(x)=1 printf(“n printf(“n%d %d is a sushun”,is a sushun”,x x); ); else else printf(“n printf(“n%d%d isnot a sushun”, isnot a sushun”,x x); ); * * 济南大学济南大学 信息学院信息学院 例例2 2:定义一个函数,判断某一年是否闰年,是则返回:定义一个函数,判断某一年是否闰年,是则返回1 1 ,不是返回,不是返回0. 0. leap( ) leap( ) int yearint yearintint if (year%4=0 return(1); elseelse return(0); return(0); EG307.CEG307.C 实验实验8 8的一个题目:编写函数,判断指定的字符是否数的一个题目:编写函数,判断指定的字符是否数 字字符,如果是返回字字符,如果是返回1 1,否则返回,否则返回0 0。 * * 济南大学济南大学 信息学院信息学院 说明:说明: 、被调用的函数必须已经存在;、被调用的函数必须已经存在; 、使用库函数时,应在文件开头用、使用库函数时,应在文件开头用#include#include命令将有关头文命令将有关头文 件包含进来;件包含进来; #include #include #include #include #include #include 、若用户自己定义的函数、若用户自己定义的函数在主调在主调mainmain函数之后函数之后,则应在,则应在mainmain 函数之前对被调用的函数作函数之前对被调用的函数作声明。声明。 声明声明:将函数的名字、函数类型以及形参的类型、个数和顺序:将函数的名字、函数类型以及形参的类型、个数和顺序 通知编译系统。通知编译系统。 - - 即由函数定义时的函数首部加分号构成即由函数定义时的函数首部加分号构成 。 * * 济南大学济南大学 信息学院信息学院 3.4 3.4 函数的原型与声明函数的原型与声明 在函数调用之前应当对所调用的函数进行在函数调用之前应当对所调用的函数进行声明声明,指出该函,指出该函 数的返回值的类型以及形参的个数和类型,数的返回值的类型以及形参的个数和类型,编译器据此对函数编译器据此对函数 调用进行语法检查,保证函数使用的正确性。调用进行语法检查,保证函数使用的正确性。 1 1、函数声明的格式:、函数声明的格式: 函数类型函数类型 函数名函数名( ( 形参表形参表 ) ); ; 例:例: float fun(double a, int b, float c)float fun(double a, int b, float c); ; float fun(double, int, float)float fun(double, int, float); ; float fun(double x, int y, float z)float fun(double x, int y, float z); ; 即函数首部即函数首部 加加” ”;” ” * * 济南大学济南大学 信息学院信息学院 2 2、说明:、说明: 、函数声明的位置:、函数声明的位置:是在所是在所 有函数(包括有函数(包括mainmain函数)的外函数)的外 部进行函数声明(推荐)。部进行函数声明(推荐)。 、如果自定义函数出现在主调函如果自定义函数出现在主调函 数之前,可以不必进行声明。数之前,可以不必进行声明。- -(推(推 荐)荐) #include int max(int x, int y); void main( ) int max(int x, int y) #include int max(int x, int y) void main( ) * * 济南大学济南大学 信息学院信息学院 3.5 3.5 函数的嵌套与递归函数的嵌套与递归 3.5.1 函数的嵌套调用 语言的函数定义都是互相平行的、独立的,语言的函数定义都是互相平行的、独立的,即不允许嵌即不允许嵌 套定义函数套定义函数(即在一个函数内部定义另一个函数);(即在一个函数内部定义另一个函数); 但是,但是,可以嵌套调用函数,可以嵌套调用函数,即程序在调用一个函数的过程即程序在调用一个函数的过程 中,该被调函数又可以调用其它函数。中,该被调函数又可以调用其它函数。 void main( )void main( ) : : fun( );fun( ); : : void void funfun( )( ) : : g( ); g( ); : : main函数 fun函数 g函数 调用 调用 嵌套 调用 * * 济南大学济南大学 信息学院信息学院 例例3.4 3.4 编程求编程求 , 输入输入k k和和n n的值的值 分析分析: : 假设输入假设输入k=3, n=5, k=3, n=5, 即求即求1 1 3 3 +2+2 3 3 +3+3 3 3 +4+4 3 3 +5+5 3 3 ,累加题。,累加题。 可分为以下可分为以下4 4步求解:步求解: 输入输入n n和和k k的值的值 乘方运算,即计算乘方运算,即计算x x k k 求和运算,即计算求和运算,即计算1 1 k k +2+2 k k + +n n k k 输出结果输出结果 需要编写三个函数:需要编写三个函数:乘方函数、求和函数、乘方函数、求和函数、main main 函数函数 注意:注意: mainmain函数调用求和函数,而求和函数又调用乘方函数函数调用求和函数,而求和函数又调用乘方函数 mainmain函数中将函数中将n n和和k k作为实际参数作为实际参数, , 把它们的值传给求和函把它们的值传给求和函 数数 在这里重点掌在这里重点掌 握乘方函数。握乘方函数。 * * 济南大学济南大学 信息学院信息学院 #include void main( ) /*主函数*/ int k, n; float sum; /* 为什么用float型定义变量?*/ printf(“input:k,n “); /*提示信息*/ scanf(“%d%d“, sum=sigma(n, k); /调用求和函数。 printf(“%.0fn“, sum); * * 济南大学济南大学 信息学院信息学院 /*求和函数 1 1 t t +2+2 t t +m+m t t */ float sigma( int m, int t) int i; float sum, p; sum=0; for (i=1; i 完整程序: 参数值的传递过程: main sigma power n m k t q i p * * 济南大学济南大学 信息学院信息学院 函数在被调用的过程中,函数在被调用的过程中,又直接或间接地调用自身,又直接或间接地调用自身,则称则称 函数的递归调用。这种函数也被称为递归函数。语言允许函函数的递归调用。这种函数也被称为递归函数。语言允许函 数的递归调用。数的递归调用。 3.5.2 函数的递归调用 例3.5 用递归方法求整数n的阶乘n!。 分析:一般来说,分析:一般来说,n!n!描述成为:描述成为: n!n!= =1*2*3*(n-1)*n1*2*3*(n-1)*n 但是,变换一下,就可以将其描述成为:但是,变换一下,就可以将其描述成为: n!n!= =n*(n-1)*3*2*1n*(n-1)*3*2*1= =n*(n-1)!n*(n-1)! * * 济南大学济南大学 信息学院信息学院EG807.CEG807.C long int fact(int n)long int fact(int n) long int f; long int f; if (n=0) if (n=0) f=1; f=1; else else f=n*fact(n-1);f=n*fact(n-1); return(f); return(f); main( )main( ) int n;long int result; int n;long int result; long int fact( ); long int fact( ); while(1) while(1) printf(“Input a data”); printf(“Input a data”); scanf(“%d”, scanf(“%d”, if (n=0) if (n=0) break; break; result=fact(n); result=fact(n); printf(“Result=% pr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论