资源描述:
《C语言程序设计能力教程(第二版) 赵凤芝 第7章- 应用函数设计程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第七章函数本课主要内容:函数的定义函数的调用利用函数编制程序在第一章介绍过C语言的程序设计的主要思想是结构化程序设计。结构化程序设计中心思想:自顶向下,逐步求精。编程时按一定规则,从上而下,一个结构一个结构地顺序编下来,一个结构也称一个块(一个程序单元)。如下图所示。程序象“搭积木”似的,一小块一小块地组织起来。将复杂问题分解为多个简单的子问题。初始的程序段(主程序),就象一级算法。对应一个子问题求精的程序段,作为一个单独的程序模块,称为函数。也就是说,函数是独立完成某一功能的小程序段。7.1函数的引入A块条件?B块C块D块是否C是模块化程序设计语言C程序结构C是函数式语言必须有且只能有一
2、个名为main的主函数C程序的执行总是从main函数开始,在main中结束函数不能嵌套定义,可以嵌套调用1.无参函数的定义形式:类型标识符函数名(){说明部分语句}§7.2函数定义例如:main(){inta=5,b=9;printf(“%d”,a*b*b);}说明:若不带回函数值,类型标识符也可以不写,无参函数一般用于完成指定的一组操作。2.有参函数的定义形式:类型标识符函数名(形式参数表列)形式参数说明{说明部分语句}如:intmax(x,y)intx,y;{intz;z=x>y?x:y;return(z);}空函数定义形式:类形标识符函数名(){}备以后扩充。一、形式参数和实际参
3、数形式参数:定义函数时,括号中说明的变量名;实际参数:调用函数时,括号中给定的表达式。§7.3函数参数和函数的值intmax(x,y)/*x,y为形参*/intx,y;{intz;z=x>y?x:y;return(z);}main(){inta,b,c;scanf(“%d,%d”,&a,&b);c=max(a,b);/*a,b为实参*/printf(“maxis%d”,c);}函数参数及其传递方式形参与实参形式参数:定义函数时函数名后面括号中的变量名实际参数:调用函数时函数名后面括号中的表达式c=max(a,b);(main函数)(max函数)max(intx,inty){intz;z
4、=x>y?x:y;return(z);}例比较两个数并输出大者main(){inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf("Maxis%d",c);}max(intx,inty){intz;z=x>y?x:y;return(z);}形参实参1定义函数时,形参不占内存单元;调用函数时,形参才分配内存单元;调用结束后,形参所占内存单元被释放。2实参可以是常量、变量或表达式,但必须有确切的值。3定义函数,必须指明形参类型。4实参与形参类型一致。5实参变量对形参变量的数据传递是“值传递”,即单向传递。6可在“形参表列”中说明形参类型。intmax(
5、intx,inty){}说明:说明:1通过return语句获得返回值;可以有一个以上的return语句。2定义函数时指定函数值的类型;不加类型说明的,按整型处理。3函数值的类型和return语句中表达式的值不一致时,以函数类型为准。4被调用函数中没有return语句时,带回一个不确定的值。5为了明确表示“不带回值”,可以用“void”定义“无类型”。二、函数的返回值一、函数调用的一般形式:函数名(实参表列)§7.4函数的调用调用者实在参数形式参数函数执行函数回到调用点说明:1无参函数,括号不能省;2实参表列中,各实数与形参在个数、顺序、类型上一一对应,参数间用逗号分隔。若调用无参函数,没有
6、实参表列,但括号不能省。实参表列中各参数应与形参一一对应,类型匹配,各参数间以逗号隔开。二、调用函数的方式有三种:函数语句、函数表达式、函数参数。如:printf(“******”);m=max(a,b)*20;printf(“%d”,max(a,b));1被调函数必须存在;2用#include命令包含有关库函数;3被调用函数一般应在主调函数前定义或说明其类型(整型,字符型除外);4如果在文件开头,已说明了被调函数类型,则主调函数中不必再作类型说明。三、对被调用函数的说明main(){floatadd();/*说明*/floata,b,c;.....}floatadd(x,y)floatx
7、,y;{…}例1:floatadd(x,y)floatx,y;{floatz;z=x+y;return(z);}main(){floata,b,c;scanf(“%f,%f”,&a,&b);c=add(a,b);printf(“%f”,c);}在主调函数前定义例2:charletter();floatf();inti();main(){......}/*不必在主函数中说明*/charletter(c1,c2)/*定义