资源预览内容
第1页 / 共49页
第2页 / 共49页
第3页 / 共49页
第4页 / 共49页
第5页 / 共49页
第6页 / 共49页
第7页 / 共49页
第8页 / 共49页
第9页 / 共49页
第10页 / 共49页
第11页 / 共49页
第12页 / 共49页
第13页 / 共49页
第14页 / 共49页
第15页 / 共49页
第16页 / 共49页
第17页 / 共49页
第18页 / 共49页
第19页 / 共49页
第20页 / 共49页
亲,该文档总共49页,到这儿已超出免费预览范围,如果喜欢就下载吧!
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,8-,*,C语言程序设计,第八章函数,1,C语言程序设计第八章函数1,主要内容,8.1 函数的定义和调用,8.2 变量的存储类型及作用域,8.3 函数的数据传递,2,主要内容8.1 函数的定义和调用2,概述,函数,函数是C语言程序的基本结构。C语言提供了许多函数。它包括:,I/O函数,数学函数,字符串函数、字符函数函数,时间(转换和操作)函数,接口函数,动态地址分配函数,目录函数,过程控制函数,字符屏幕和图形功能函数等。,用户可以根据需要选择使用。这一类函数称为库函数。库函数函数的引用的方法很简单,这里不赘述。,3,概述函数3,概述,库函数,库函数是由编译系统提供的现成函数。以前用过的scanf,printf,getchar等都是库函数。,在编写C程序时,尽可能多用库函数,以提高编程效率和质量。要调用某个库函数,需在程序的头部用包含命令(#include)将说明该函数原型的头文件包含进本程序中。使用库函数应注意以下几个问题:,函数的功能;,参数的数目、顺序和类型;,函数返回值类型;,需要使用的包含文件。,4,概述库函数4,概述,常用的库函数,函数格式,所属函数库,功能,int getchar();,stdio.h,标准输入一个字符,int getch();,conio.h,不回显从键盘直接读入一个字符,int putch(int ch);,conio.h,向屏幕直接输出一个字符,char*gets(char*);,stdio.h,标准输入一行文字,int puts(char*);,stdio.h,标准输出一行文字(自动加换行),double sin(double);,math.h,正弦函数,sin(x),double pow(double x,double y);,math.h,x,y,double exp(double x);,math.h,e,x,double log(double x);,double log10(double x);,math.h,lnx,log,10,x,void exit(int status);,tdlib.h,强制结束程序,5,概述常用的库函数函数格式所属函数库功能 int getcha,8.1 函数的定义和调用,函数的定义,函数的定义就是创造、编制函数。函数的定义过程就是编制函数的过程。,函数定义的格式,数据类型,函数名(形参类型1 形参1,形参类型n 形参n),说明语句;,可执行语句;,return(,表达式);,例如:int myfun(int x,int y),int z;,if(xy)z=x;,z=y;,return(z);,6,8.1 函数的定义和调用函数的定义数据类型 函数名(形,8.1 函数的定义和调用,函数定义的说明,函数返回类型:,若函数无返回值,或返回整型值,可省略数据类型说明。,形参:,形参是函数接收外部数据的单向通道。函数调用时,调用函数的实参将其数据传递给形参。,函数可以有多个或0个形参,各形参之间用逗号隔开。,形参可以是变量、指针或数组等;,形参不能是常量和表达式。形式参数是局部变量。作用域、生命期为函数体内。,函数名:,函数名的命名规则同标识符的命名规则,7,8.1 函数的定义和调用函数定义的说明7,8.1 函数的定义和调用,return,语句:如果函数有返回值,则函数的最后一条语句就是 return语句,。返回的意义是:,使流程返回主调函数,宣告函数的一次执行结束,在调用期间所分配的变量单元被撤消。,送函数值到调用表达式中。有些函数有返回值,有些函数没有返回值。,return,语句的使用格式是:,return;,或者 return (表达式);,或者 return 表达式;,8,8.1 函数的定义和调用return语句:如果函数有返回值,,8.1 函数的定义和调用,注意,return后的表达式的值类型必须与函数类型相同;,如果函数类型为空(void)类型,则函数体中可以不使用return语句,或使用不带参数的return。,一个函数允许有一个或多个return语句,流程执行到其中一个 return时即返回主调函数。如果有多个return语句,每个return后面的表达式的类型应相同。,如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准。对数值型数据自动进行类型转换。,被调用函数中没有return语句,则函数带回一个不确定的值。建议用void标记函数的类型,则系统可保证函数不带回任何值,即禁止在调用函数中使用被调用函数的返回值。,9,8.1 函数的定义和调用注意9,8.1 函数的定义和调用,C语言准许定义“空函数”。,例如:dummy(),调用此函数,什么工作也不做。它表明有一个函数,尚未有具体的内容,待以后将功能补充上去。一般在系统开发初期,一些没开发出来的部分用此方法。,10,8.1 函数的定义和调用C语言准许定义“空函数”。10,8.1 函数的定义和调用,函数的引用,函数定义好后,便可以在表达式中使用。,函数引用的格式,函数名(实参表列),实参的作用是在程序发生函数调用时,将其数据传递给函数的形参,即向函数传送数据。,int fun1(x1,y1),int z;,z=x1+y1;,return(z);,void main(),int s,x=2,y=6;,s=,fun1(x,y),;,printf(“%d”,s);,运行结果:,8,11,8.1 函数的定义和调用函数的引用int fun1(x1,y,8.1 函数的定义和调用,实参与形参的关系,实参与形参的个数要相等。多个实参时要用逗号隔开。,实参与形参的数据类型相一致。,实参与形参的数据的传递是单向。即实参传给形参。同时是按排列顺序依次对应传递。,实参名与形参名可以相同,也可以不相同。,函数返回,如果函数需要返回值,就用返回值带回调用函数的处理结果。返回值用赋值语句赋给主函数中的变量,以接收其返回值。,返回值和接受返回值的变量的类型必须一致。,12,8.1 函数的定义和调用实参与形参的关系12,8.1 函数的定义和调用,函数调用,实参和形参的个数、类型和顺序必须一致。,实参可以是常量、变量名、数组名、数组元素或表达式。,在,调,用函数前,必须先定义。,13,8.1 函数的定义和调用函数调用13,8.1 函数的定义和调用,函数调用的形式,在C语言中,凡是能调用变量或表达式的地方,均可调用函数。,假设,已定义了一个函数,即:,我们有如下三种形式调用:,函数,调,用语句形式,如:,a=max(s1,s2);,这就是函数,调,用语句,简称函数语句。,在表达式中引用,如:,例:y=,max(x1,x2),/,max(y1,y2),;,函数调用函数,如:,y=abs(max(,rand(),rand(),);/其中rand()为随机函数。,int max(x,y),int x,y;,int z;,z=(xy)?x:y;,return(z);,14,8.1 函数的定义和调用函数调用的形式int max(x,y,8.1 函数的定义和调用,函数的声明,如果定义的函数在使用之后,则函数必须在使用前先声明。目的是告诉编译程序该函数返回值的数据类型,以便编译程序能够检查对函数的调用是否正确,会不会发生错误的类型转换等。,函数说明的格式,数据类型 函数名(形参类型 形参,);,函数声明注意的问题,被调用函数的声明放在源文件头,则该声明对整个源文件都有效,int f1();,int f2();,main(),f1();,f2();,int f1(),.,f2();,int f2(),函数f1中没有对函数f2进行说明,其引用是错误的。,main(),int f1();,int f2();,f1();,f2();,15,8.1 函数的定义和调用函数的声明int f1();,8.1 函数的定义和调用,如果被调用函数在调用函数内部声明,则该声明仅对该调用函数有效。如果被调用函数是在函数外声明,则该声明对以后的所有调用都有效。,void main(),float max(float a,float b,float c);,float x,y,z,m;,scanf(“%f%f%f”,m=max(x,y,z);,printf(“n%f:”,m);,float max(float a,float b,float c),float result;,result=a;,if(resultb)result=b;,if(resultc)result=c;,return(result);,函数声明,float max(float a,float b,float c);,函数max()定义,float max(float a,float b,float c),float result;,result=a;,if(resultb)result=b;,if(resultc)result=c;,return(result);,函数使用,m=max(x,y,z);,16,8.1 函数的定义和调用如果被调用函数在调用函数内部声明,8.1 函数的定义和调用,如果调用函数和被调用函数是在同一个源文件中,而且程序中被调用函数是在调用函数之前已定义,此时可以省略被调用函数的声明。,float max(float a,float b,float c),/先定义,float result;,result=a;,if(resultb)result=b;,if(resulty),return x;,else,return y;,运行结果:,5.8 3.2,max is 5.8,20,8.1 函数的定义和调用例1 编制求两数最大值的程序。#,8.1 函数的定义和调用,例2 编程 计算任一输入整数的各位数字之和,请用函数的方法处理。,思路:对输入的整数,先求其绝对值,然后分解各位上的数字,边分解边累加,直到完毕。,#include,#include“math.h”,int func(int num);,void main(),int n;,printf(“请输入一个整数:);,scanf(%d,printf(“result:%dn,func(n);,int func(int num),int s=0;,num=abs(num);,do,s=s+num%10;,num=num/10;,while(num);,return s;,请输入一个整数:456,result:15,21,8.1 函数的定义和调用例2 编程 计算任一输入整数的各位,8.1 函数的定义和调用,例3 编制求n!的函数。,#include,float factorial(int n),float product;,for(product=1;n0;n-)product*=n;,return(product);,void main(),int n;,printf(“请输入一个整数:);,scanf(%d,printf(n!=%en,factorial(n);,运行结果:,请输入一个整数:,6,n!=7.200000e+002,22,8.1 函数的定义和调用例3 编制求n!的函数。#in,8.1 函数的定义和调用,函数的嵌套调用,C函数不能嵌套定义,但允许嵌套调用,即被其他函数调用的函数可以调用另一个函数。请看示意图:,void main(),int i;,i=num1();,int num2(),int num1(),int j;,j=num2();,23,8.1 函数的定义和调用函数的嵌套调用void main(),8.1 函数的定义和调用,嵌套调用示例:,计算 s=1!+2!+3!+20!=?,思路:编写一个主函数和两个子函数,嵌套调用。,#include,void main(),double sum(int n);,printf(s=%-12.5len,sum(20);,double sum(int n),
点击显示更多内容>>

最新DOC

最新PPT

最新RAR

收藏 下载该资源
网站客服QQ:3392350380
装配图网版权所有
苏ICP备12009002号-6