第7章利用函数实现模块化程序设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

C语言程序设计地球物理与信息工程学院计算机系第7章利用函数实现模块化程序设计第7章利用函数实现模块化程序设计2地球物理与信息工程学院计算机系第7章用函数实现模块化程序设计7.1为什么要用函数7.2怎样定义函数7.3调用函数7.4对被调用函数的声明和函数原型7.5函数的嵌套调用7.6函数的递归调用7.7数组作为函数参数7.8局部变量和全局变量7.9变量的存储方式和生存期7.10关于变量的声明和定义7.11内部函数和外部函数第7章利用函数实现模块化程序设计3地球物理与信息工程学院计算机系7.1为什么要用函数复杂问题模块化程序设计函数实现一个特定的功能每个函数可以被使用多次---复用第7章利用函数实现模块化程序设计4地球物理与信息工程学院计算机系mainabcfghdeie用函数解决复杂问题学生成绩管理系统录入成绩显示成绩成绩排序成绩查找按学号排序按姓名排序按成绩排序按学号查找按姓名查找………结构化程序设计自顶向下、逐步细化、模块化设计、结构化编码第7章利用函数实现模块化程序设计6地球物理与信息工程学院计算机系可以使用哪些函数?一个C程序由两种函数构成:标准函数(库函数):系统提供的,实现各种不同的功能。如printf,scanf,sqrt,fabs,strlen,等等使用它们要包含相应的头文件自定义函数:用户自己定义的函数。用户可以把一些具有独立功能的代码定义成函数,有利于程序的模块化和代码的“重用”第7章利用函数实现模块化程序设计7地球物理与信息工程学院计算机系小结什么是函数?完成特定功能的程序段。C语言程序就是由函数构成的。函数是C语言程序的基本单位。C语言是一种函数式语言。在程序设计中要善于利用函数可以减少重复编写程序段的工作量同时可以方便地实现模块化的程序设计第7章利用函数实现模块化程序设计8地球物理与信息工程学院计算机系例题7-1例7.1输出以下的结果,用函数调用实现。****************************Howdoyoudo!****************************第7章利用函数实现模块化程序设计9地球物理与信息工程学院计算机系#includestdio.hintmain(){voidprint_star();//声明函数voidprint_message();//声明函数print_star();//调用函数print_message();//调用函数print_star();//调用函数return0;}voidprint_star()//定义函数{printf(******************\n);}voidprint_message()//定义函数{printf(Howdoyoudo!\n);}第7章利用函数实现模块化程序设计10地球物理与信息工程学院计算机系(1)一个C程序由一个或多个程序模块组成,每一个程序模块作为一个源程序文件(2)一个源程序文件由一个或多个函数以及其他有关内容(如预处理指令、数据声明与定义等)组成(3)C程序的执行是从main函数开始的,如果在main函数中调用其他函数,在调用后流程返回到main函数,在main函数中结束整个程序的运行。(4)所有函数都是平行的,即在定义函数时是分别进行的,是互相独立的。即函数不能嵌套定义说明:floatarea2(floatd){floats;s=3.14159*(d/2)*(d/2)/2;return(s);}例求右图图形的面积。#includemath.h#includestdio.hfloatarea1(floata,floatb,floatc){floats,p;p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));return(s);}voidmain(){floata,b,c,s;scanf(%f%f%f,&a,&b,&c);s=area1(a,b,c)+area2(a)+area2(b)+area2(c);printf(%f\n,s);}第7章利用函数实现模块化程序设计12地球物理与信息工程学院计算机系从用户使用的角度看,函数有两种库函数用户自己定义的函数从函数的形式看,函数分两类无参函数有参函数函数的种类第7章利用函数实现模块化程序设计13地球物理与信息工程学院计算机系7.2怎样定义函数7.2.1为什么要定义函数7.2.2定义函数的方法第7章利用函数实现模块化程序设计14地球物理与信息工程学院计算机系7.2.1为什么要定义函数C语言要求,在程序中用到的所有函数,必须先定义,后使用指定函数的名字,以便以后按名调用指定函数类型,即函数返回值的类型指定函数参数的名字和类型,以便在调用函数时向它们传递数据指定函数的功能。这是最重要的,这是在函数体中解决的第7章利用函数实现模块化程序设计15地球物理与信息工程学院计算机系对于库函数,程序设计者只需用#include指令把有关的头文件包含到本文件模块中即可#includestdio.h#includemath.h#includestring.h[函数的类型]函数名称(形式参数列表){数据说明部分可执行语句}7.2.2定义函数的方法函数首部(函数头)函数体函数定义举例:intmax(intx,inty){intz;z=xy?x:y;returnz;}函数体返回值类型函数名形式参数表第7章利用函数实现模块化程序设计18地球物理与信息工程学院计算机系1、定义无参函数定义无参函数的一般形式为:类型名函数名(void){函数体}类型名函数名(){函数体}第7章利用函数实现模块化程序设计19地球物理与信息工程学院计算机系2、定义有参函数定义有参函数的一般形式为:类型名函数名(形式参数表列){函数体}第7章利用函数实现模块化程序设计20地球物理与信息工程学院计算机系3、定义空函数定义空函数的一般形式为:类型名函数名(){}作用:先用空函数占一个位置,以后逐步扩充好处:程序结构清楚,可读性好,以后扩充新功能方便,对程序结构影响不大函数定义举例:分析:已知一个华氏温度,要求出一个摄氏温度•确定函数名:ftoc•确定形参:已知一个华氏温度,设形参temp代表f,类型为float。•确定函数类型:函数的返回值即为c的值,类型为float。floatftoc(floattemp){floatc;c=(5.0/9)*(temp–32);returnc;})32(95fc例1:编写自定义函数计算:分析:•确定函数名:jiecheng•确定形参:求n!必须知道n的大小,设形参为n,类型为int•确定函数类型:函数的返回值即为n!的值,类型为double程序:doublejiecheng(intn){inti;doublemul=1;for(i=1;i=n;i++)mul*=i;returnmul;}例2编写一个自定义函数求n!例3编写函数,功能在屏幕上输出5*5个“*”组成的方形。分析:•确定函数名:square•确定形参:不需要形参•确定函数类型:没有返回值,类型为void程序:voidsquare(){inti,j;for(i=1;i6;i++){for(j=1;j6;j++)printf(“*”);printf(“\n”);}return;}可以去掉注意:在实现函数体时,形参是代表一个已知的量intmax(intx,inty){intz;scanf(“%d%d”,&x,&y);z=xy?x:y;returnz;}x,y的值是多少呢?由该函数的使用者提供第7章利用函数实现模块化程序设计25地球物理与信息工程学院计算机系7.3调用函数7.3.1函数调用的形式7.3.2函数调用时的数据传递7.3.3函数调用的过程7.3.4函数的返回值第7章利用函数实现模块化程序设计26地球物理与信息工程学院计算机系7.3.1函数调用的形式调用一般形式函数名(实参表);按函数调用在程序中出现的形式和位置来分,可以有以下3种函数调用方式:1.函数调用语句把函数调用单独作为一个语句,如printf_star();这时不要求函数带回值,只要求函数完成一定的操作第7章利用函数实现模块化程序设计27地球物理与信息工程学院计算机系2.函数表达式函数调用出现在另一个表达式中,如c=max(a,b)+2;m=jiecheng(4)*2;这时要求函数带回一个确定的值以参加表达式的运算3.函数参数函数调用作为另一函数调用时的实参,如m=max(a,max(b,c));printf(“%f”,jiecheng(9));其中max(b,c)是一次函数调用,它的值作为max另一次调用的实参第7章利用函数实现模块化程序设计28地球物理与信息工程学院计算机系什么时候用函数调用语句当用不到函数的返回值时什么时候用函数表达式或函数参数当要使用函数的返回值时第7章利用函数实现模块化程序设计29地球物理与信息工程学院计算机系7.3.2函数调用时的数据传递1.形式参数和实际参数形参(形式参数)是函数定义时,参数表中的参数。形式参数只能是变量。例如:floatmax(floatx,floaty){···}floatftoc(floattemp){···}在函数定义时,参数表中的形参并没有具体的值,系统也不为其分配存储单元。实参(实际参数)是函数调用时主调函数传送给被调用函数形参的实际值。实参可以是常量、变量和表达式,实参必须有确定的值。例如:fabs(-2);charc=‘q’;putchar(c);floatx=3.5,b=4,c=6;sqrt((x*x+2)*(y+z));max(10,20);inta=6,b=3;max(a,b);函数调用例1:#includestdio.hintmax(intx,inty)/*被调函数*/{intn;n=xy?x:y;returnn;}x,y是形参a,b是实参函数调用voidmain()/*主调函数*/{inta,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);printf(“max=%d\n”,c);}第7章利用函数实现模块化程序设计32说明:在这个程序里有两个函数max和main,它们的定义是平行的、相互独立的。main是主函数,无论main函数放在什么位置,程序的运行都从main开始,从main结束。main又是主调函数(调用函数),它调用了max函数,从而使max函数得到运行。max是被调用函数。main()调用函数maxReturn或}max函数④⑤结束第7章利用函数实现模块化程序设计33地球物理与信息工程学院计算机系2.实参和形参间的数据传递在调用函数过程中,系统会把实参的值传递给被调用函数的形参或者说,形参从实参得到一个值该值在函数调用期间有效,可以参加被调函数中的运算从实参到形参的值传递是单向的!没有返回的过程!单向值传递!实、形参个数相同,类型应一致(相同或赋值兼容)。例:intn;n=max(4,20);n=max(3.5,7.3);转化为:n=max(3,7);第7章利用函数实现模块化程序设计34地球物理与信息工程学院计算机系7.3.3函数调用的过程在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元。在发生函数调用时,函数max的形参被临时分配内存单元。2a3bxy23实参形参第7章利用函数实现模块化程序设计35地球物理与信息工程学院计算机系调用结束,形参单元被释放实参单元仍保留并维持原值,没有改变如果在执行一个被调用函数时,形参的值发生改变,2a3bxy23实参形参不会改变主调函数的实参的值!举例:函数调用的过程#includestdio.hintmax(intx,inty){intn;n=xy?x:y;returnn;}intmain(){inta,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);printf(“max=%d\n”,c);return0;}abxyn34

1 / 185
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功