1第5讲函数函数的定义及调用2主要内容函数无参无返回值函数有参无返回值函数有参有返回值函数函数间数据传递整数类型整数变量的定义整数的运算整数的输入和输出整数在函数间传递P84~P95第4章函数用户自定义函数4.2.1函数定义函数是指完成一个特定工作的独立程序模块。库函数:由C语言系统提供定义。如scanf()等函数自定义函数:用户根据需要定义。如cylinder()函数main()是一个主函数,C程序由一个main()或多个函数构成程序中一旦调用了某个函数,该函数就会完成特定功能,然后返回到调用它的地方。除主函数外一般函数都不能单独运行。函数经过运算,得到一个明确结果,并需要回送该结果--有返回值函数。例,函数cylinder()返回圆柱的体积。函数完成一系列操作步骤,不需要回送任何运算结果--无返回值函数:1.无参无返回值函数2.有参无返回值函数P25一般有参用户自定义函数函数定义:编制独立功能的程序函数声明:主调函数调用前声明函数调用:主调函数调用被调用函数函数执行:运行被调用函数注:不能独立运行45写自己的函数--用户自定义函数voidtriangle(void){printf(*\n);printf(***\n);printf(*****\n);}无返回值函数void函数的作用仅仅是执行一系列的指令打印1.无参无返回值函数定义p87一般形式void函数名(void){函数体}6void函数名(){函数体}voidtriangle(void){printf(*\n);printf(***\n);printf(*****\n);}voidtriangle(){printf(*\n);printf(***\n);printf(*****\n);}或P4无参无返回值的函数的声明p87一般形式:void函数名(void);voidtriangle(void);主调函数告诉编译系统用户自定义函数的存在编译系统在检查被调函数时要知道调用信息包括:函数名,参数,返回类型。仅仅声明了“函数名”7P4无参无返回值的函数的调用一般形式:函数名();上例:triangle();写一个主函数,调用“triangle”函数,打印图形。#includestdio.hvoidmain(void){voidtriangle();/*函数声明*/triangle();}voidtriangle(){printf(*\n);printf(***\n);printf(*****\n);}8P4/*aprogramtooutputatriangle*/#includestdio.hvoidtriangle(void);main(){printf(Abouttoprintatriangle\n);triangle();printf(Thatwasit!\n);}voidtriangle(void){printf(*\n);printf(***\n);printf(*****\n);}9例:sample01_04.c函数声明(主函数前)p84(2)函数调用函数定义调用自定义函数,()中可不包括任何内容,但()一定要写。可放在main函数之前,也可放在main函数的后面。但不能放在main函数的函数体中,函数和函数之间地位是平等的,没有嵌套关系。只有嵌套调用。告诉编译器,存在这样一个用户自定义的函数,及它的调用方法:名称、参数、返回值。主调函数被调函数预处理10执行流程程序的执行顺序从main函数开始执行,执行完main函数即结束执行。遇到调用函数,转向执行被调函数,执行完被调函数后,返回调用函数的调用处,继续向下执行。程序的书写顺序与执行顺序有关--顺序执行。分支或循环会改变顺序函数的书写顺序与执行顺序无关函数定义若写在函数调用之前,函数声明可省略,但不主张。#includestdio.hvoidmain(void){voidtriangle();triangle();}voidtriangle(){printf(*\n);printf(***\n);printf(*****\n);}#includestdio.hvoidtriangle(){printf(*\n);printf(***\n);printf(*****\n);}voidmain(void){triangle();}11完成画简图(女孩)的程序打印图形女孩房子男孩12sample01_03.c完成画基本组件的函数画一个圆画一个横线画一个平行线画一个交叉线完成画三角形的函数画一个交叉线画一个横线在main函数中调用子函数完成画小女孩画一个圆画三角形画一个交叉线13完成画基本组件的函数/*Drawacircle*/voiddraw_circle(void){printf(*\n);printf(**\n);printf(**\n);}Draw绘画Circle圆/*Drawintersectinglines*/voiddraw_intersect(void){/*Use2\'stoprint1\*/printf(/\\\n);printf(/\\\n);printf(/\\\n);}intersectinglines相交线14完成画基本组件的函数/*Drawsabaseline*/voiddraw_base(void){printf(-------\n);}baseline基(横)线/*Drawaparallel*/voiddraw_parallel(void){printf(||\n);printf(||\n);}Parallel平行线15完成画三角形的函数/*Drawsatriangle*/voiddraw_triangle(void){draw_intersect();/*画相交线*/draw_base();/*画横线*/}画小女孩#includestdio.h/*functionprototypes*/voiddraw_circle(void);//圆voiddraw_intersect(void);//相交线voiddraw_base(void);//横线voiddraw_triangle(void);//三角形intmain(void){/*Drawacircle*/draw_circle();/*Drawatriangle*/draw_triangle();/*Drawintersectinglines*/draw_intersect();return0;}Function函数Prototype原型17执行示例main(画女孩)画圆画三角形画交叉线画交叉线画横线18思考main函数中三条语句功能还不明显,可增加一个函数draw_girl画小女孩请修改程序画女孩画圆画三角形画交叉线画交叉线画横线main19画小女孩函数/*Drawsagirl*/voiddraw_girl(void){/*Drawacircle.*/draw_circle();/*Drawatriangle.*/draw_triangle();/*Drawintersectinglines.*/draw_intersect();}20完成画小女孩程序#includestdio.h/*functionprototypes*/voiddraw_circle(void);voiddraw_intersect(void);voiddraw_base(void);voiddraw_triangle(void);voiddraw_girl(void);intmain(void){draw_girl();return0;}21改错题error1_6.cvoidmain(){printstar;sayHello(void);printstar;}voidprintStar(void){printf(“*******”);}voidsayHello(void){printf(“helloworld!”);}P2#includestdio.hvoidmain(){voidprintStar(void);voidsayHello(void);printStar();sayHello();printStar();}voidprintStar(void){printf(*******);}voidsayHello(void){printf(helloworld!);}2.有参无返回值函数定义P87void函数名(形参表)/*函数首部*/{函数实现过程/*函数体*/return;/*可以省略return*/}注:这类函数通常用于屏幕输出等表示不返回结果不能省略否则,函数类型被默认定义为int参数参数的作用——实现值的传递主调函数向被调函数传递值——实际参数(实参),被调函数处理所需要的数据。函数调用被调函数向主调函数传递值——形式参数(形参),被调函数向主调函数传递被调函数运行结果的数据。函数定义3.有参有返回值函数定义程序解析-计算圆柱体积【例】输入圆柱体的高h和半径r,求圆柱体积,volume=π*r2*h。要求定义并调用函数cylinder(r,h)计算圆柱体的体积。cylinder圆柱体volume体积/*计算圆柱体积*/1.#includestdio.h2.intmain(void)3.{4.doubleheight,radius,volume;5.doublecylinder(doubler,doubleh);/*函数声明*/6./*函数类型函数名类型名称类型名称*/7./*实参表*/8.printf(Enterradiusandheight:);9.scanf(%lf%lf,&radius,&height);10./*调用函数,返回值赋给volume*/11.volume=cylinder(radius,height);12.printf(Volume=%.3f\n,volume);13.return0;14.}【例】源程序Cylinder函数/*函数定义:求圆柱体积*/doublecylinder(doubler,doubleh)/*函数类型函数名类型名称类型名称*//*形参表*/{doubleresult;result=3.1415926*r*r*h;/*计算体积*/returnresult;/*返回结果*/}Enterradiusandheight:3.010Volume=282.743注:主函数完成输入输出1.返回运算结果的函数定义函数类型函数名(形参表)/*函数首部*/{函数实现过程/*函数体*/return表达式;}将函数运算的结果回送给主调函数注:只能返回一个值函数返回值的类型注:没有分号doublecylinder(doubler,doubleh){doubleresult;result=3.1415926*r*r*h;returnresult;}函数定义--形参类型1参数1,类型2参数2,……,类型n参数n参数之间用逗号分隔,每个参数前面的类型都必须分别声明函数类型函数名(形参表){函数实现过程return表达式;}不能写成doubler,hdoublecylinder(doubler,doubleh){doubleresult;result=3.1415926*r*r*h;returnresult;}P2课堂练习:定义判断奇偶数的函数even(n)inteven(intn)/*函数首部*/{if(n%2==0)/*判别奇偶数*/return1;/*偶数返回1*/elsereturn0;/*奇数返回0*/}分析:功能:判断奇偶数形式参数:整数n返回值:当n为偶数时返回1,否则返回0。函数类型函数名(参数表);voidtriangle(void);voidpyramid(intn);doublecylinder(doubler,doub