您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 冶金工业 > 第三章-模块化程序设计01
济南大学-信息学院C语言程序设计第1页第三章模块化程序设计3.1模块化程序设计思想3.2函数定义3.3函数调用3.4函数的原型与声明3.5函数的嵌套与递归3.6库函数3.7变量的作用域与存储类型3.8指针与函数济南大学-信息学院C语言程序设计第2页#includestdio.hintmax(intx,inty){intz;if(xy)z=x;elsez=y;return(z);}voidmain(){inta,b,c;scanf(%d%d,&a,&b);c=max(a,b);printf(max=%d\n,c);}一个完整的函数一个完整的函数函数首部函数体教材第3页例1.3函数首部注意:①程序永远从main函数开始。②max(a,b)是什么?③自定义函数max()济南大学-信息学院C语言程序设计第3页mainabcdefghi结构化程序设计的特点:自顶向下、逐步细化、模块化C语言程序的基本单位是函数有且至少有一个函数main()结构化程序由三种基本结构组成:A模块B模块顺序结构选择结构判断条件成立吗?成立不成立A模块B模块循环结构循环体循环条件满足吗?函数-模块化程序设计的体现济南大学-信息学院C语言程序设计第4页3.1模块化程序设计的思想•什么是模块化程序设计?模块化程序设计就是将一个复杂的大问题,分解为一个个独立的简单的小问题(即模块),分别解决简单的小问题,进而解决复杂的大问题。•在C语言中,这些独立的简单的模块就是函数。•功能分解是一个自顶向下、逐步求精的过程。必须有且只能有一个名为main的主函数C程序的执行总是从main函数开始,在main中结束函数不能嵌套定义,可以嵌套调用(即使用)。济南大学-信息学院C语言程序设计第5页•阶乘模块fac(n)的实现:f=1;for(i=1;i=n;i++){f=f*i;}例3-1:计算!!!kmnfac(k)fac(m)+fac(n)mk只需实现模块fac()即可济南大学-信息学院C语言程序设计第6页#includestdio.h//普通设计voidmain(){inti,k,m,n;floatx,y,z;scanf(%d%d%d,&k,&m,&n);x=1;//fac(k)for(i=1;i=k;i++)x=x*i;y=1;//fac(m)for(i=1;i=m;i++)y=y*i;z=1;//fac(n)for(i=1;i=n;i++)z=z*i;printf(%f\n,x/(y+z));}x=fac(k);y=fac(m);z=fac(n);floatfac(intn){inti;floatf=1;for(i=1;i=n;i++)f=f*i;returnf;}模块即函数济南大学-信息学院C语言程序设计第7页3.2函数定义在C语言中,函数分为以下两种:(1)库函数是由系统提供的,用户不用定义,只需用#include包含其头文件,即可直接使用。如:printf()、scanf()、sqrt()等。(2)自定义函数:这种函数是根据具体需求按自己的意愿编写的,以完成相应的功能。本章学习的内容济南大学-信息学院C语言程序设计第8页voidmain(){intk,m,n;floatx,y,z;scanf(%d%d%d,&k,&m,&n);x=fac(k);y=fac(m);z=fac(n);printf(%f\n,x/(y+z));}函数定义格式:函数返回值类型函数名(形参表){函数体;}#includestdio.hfloatfac(intn){inti;floatf=1;for(i=1;i=n;i++)f=f*i;returnf;}函数调用格式:函数名(实参表);例如:floatfac(intn){…}例如:x=fac(k);济南大学-信息学院C语言程序设计第9页1.函数名:命名规则同变量相同;同一个文件中函数名不能重复!2.参数(形参)列表:需说明参数的个数和类型,多个参数间用逗号间隔,也可以无参数,但括号不能省。函数定义的说明书写格式:每一个形参都要写上数据类型和参数名;参数之间以逗号分隔,无参数时函数值返回值一般写上void或什么也不写。函数名后的括号一定要有。floataverage(floata1,floata2,floata3){……}形参不能写成:floata1,a2,a3×济南大学-信息学院C语言程序设计第10页函数定义的说明3.函数体:由左右花括号括起来的部分。包括说明部分和语句部分,是实现函数的核心部分说明部分:定义函数内除形参以外的其它变量等;语句部分:实现函数功能的执行语句;函数返回值类型函数名(形参表){变量说明部分;语句部分;}4.返回值类型:当函数有返回值时,在函数名前指定函数返回值的类型若省略类型标识符,默认为int若函数无返回值,函数定义时应写上void济南大学-信息学院C语言程序设计第11页C语言不允许在一个函数内定义另一个函数,即不能嵌套定义。所有函数在书写时都是平行的,通常写在main上方。main(){floata,b,s;scanf(“%f%f”,&a,&b);s=area(a,b);printf(s=%f,s);}floatarea(floata,floatb){floats;s=a*b;returns;}应为平行关系:floatarea(floata,floatb){……}main(){……}×嵌套定义注意济南大学-信息学院C语言程序设计第12页voidmain(){intk,m,n;floatx,y,z;scanf(%d%d%d,&k,&m,&n);x=fac(k);y=fac(m);z=fac(n);printf(%f\n,x/(y+z));}#includestdio.hfloatfac(intn){inti;floatf=1;for(i=1;i=n;i++)f=f*i;returnf;}主函数函数调用函数定义,通常写在main函数上方济南大学-信息学院C语言程序设计第13页例:①、编写一个函数,打印一行信息“Howdoyoudo!”printf(Howdoyoudo!\n);____print(____){}voidvoidmain(){}print();#includestdio.h经验1:数据已知或固定则不需要作为参数传递;值事先不确定则需要参数传递!经验2:不要求计算结果或没有计算出一个数值则不需要返回值。EG302.C主函数函数调用函数定义济南大学-信息学院C语言程序设计第14页3.3函数调用(函数使用)3.3.1函数调用的形式1、形式:函数名(实参表列);2、说明①、实参表列由0到多个实参名组成,实参之间用逗号分隔②、实参与形参的个数应相等,类型应一致,顺序要一一对应③、调用无参函数的格式为:函数名();#includestdio.hintmax(intx,inty){intz;if(xy)z=x;elsez=y;return(z);}voidmain(){inta,b,c;scanf(%d%d,&a,&b);c=max(a,b);printf(max=%d\n,c);}函数调用形参实参济南大学-信息学院C语言程序设计第15页3、函数调用的方式①、函数调用语句:–无返回值函数的调用由函数调用加上分号构成,在主调函数中可作为一个独立的语句;此时不要求函数带回返回值②、函数表达式:函数调用作为一个运算对象出现在表达式中,此时要求函数带回一个确定的值以参加表达式的运算c=max(a,b);y=2*pow(x,2.5);③、函数参数:函数调用作为另一个函数的实参,其值作为一个实际参数传给被调函数的形参;此时也要求函数带回一个确定值m=max(a,max(b,c));printf(%d\n,max(a,b));济南大学-信息学院C语言程序设计第16页3.3.2函数间的参数传递把需要参数的函数称为“有参函数”,不需要参数的函数称为“无参函数”。形式参数:定义函数时函数名后面括号内的变量,简称形参实际参数:调用函数时函数名后面括号内的变量,简称实参#includestdio.hintmax(intx,inty){return(xy?x:y);}voidmain(){inta,b,c;scanf(%d%d,&a,&b);c=max(a,b);printf(Max=%d.\n,c);}形参实参济南大学-信息学院C语言程序设计第17页函数调用的说明1.运行期间,只有当函数被调用时,形式参数才被分配存储空间;调用结束后,形参所占的空间将被释放;2.实参与形参一一对应。可以是常量,变量或表达式;3.实参和形参的类型应相同或赋值相容;4.实参对形参的数据传递是“值传递”,即单向传递;即函数内形参的值无法传给实参。实参行参济南大学-信息学院C语言程序设计第18页定义函数时需要解决的问题:有没有参数?即:需要从主调函数中传递数据吗?参数的个数:参数的类型:int、float、double、char或指针是否有返回值?即:是否向主调函数返回计算结果?返回值的类型:void?其它int、float?济南大学-信息学院C语言程序设计第19页例:输入圆的半径r,用自定义函数area实现圆的面积,并在主函数中输出最终的结果。也可以这样思考:floatarea(intm){}main(){intr;floata;scanf(“%d”,&r);a=3.14*r*r;printf(“theareais%f”,a);}实参,可以和形参重名floats;s=3.14*m*m;returns;a=area(r);济南大学-信息学院C语言程序设计第20页编写函数的技巧:主函数的内容:主要就是函数调用。voidmain(){}自定义函数的内容:主要就是程序功能的完成,,然后返回值。函数返回值类型函数名(形参){除形参外的其它变量定义;执行语句;函数返回语句;}变量定义输入实参处理--函数调用输出结果济南大学-信息学院C语言程序设计第21页编写函数,计算下式前n项的和。注意,n在主函数中输入,计算结果在主函数中输出。例如,当n=10时,结果为0.909091。注意:函数的命名、参数个数及每个参数的类型、返回值的类型?如何将主函数中的数据传到被调函数中?如何累加得到S?11...321211nnS#includestdio.hdoublefun(intn){}voidmain(){intn;printf(Inputn:);scanf(%d,&n);printf(%f\n,fun(n));}inti;doubles=0;for(i=1;i=n;i++)s+=1.0/(i*(i+1));return(s);济南大学-信息学院C语言程序设计第22页例3.2输入两个整数,计算其平均值。要求用函数实现平均值的计算。average函数:有没有参数:有参数的个数:2参数的数据类型:int是否有返回值:有返回值的类型:float或doublefloataverage(intx,inty){floatresult;result=(x+y)/2.0;return(result);}voidmain(){inta,b;floatave;scanf(%d%d,&a,&b);ave=average(a,b);printf(ave=%f\n,ave);}主函数:函数调用average函数:实现平均值的计算。济南大学-信息学院C语言程序设计第23页3.3.3函数的返回值intmax(intx,inty){intz;z=xy?x:y;return(z);}1、函数的返回值是通过return语句获得的。return语句的作用是终止当前函数的执行并将一个确定值带回主调函数中return语句的一般形式是:return(表达式);或:return表达式;2、函数返回值的类型:在定义函数时指定intmax(intx,inty)doublepower(intx,inty)
本文标题:第三章-模块化程序设计01
链接地址:https://www.777doc.com/doc-5723484 .html