计算机条件函数ppt,计算机二级第四章函数.ppt

a7f4a3f590493a1e451dd952a488fd7c.gif 计算机二级第四章函数.ppt

(60页)

ae919c6a527a662ac46e81d540d9b275.gif

本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

29.9 积分

第四章 函 数4.1 概述 4.2函数定义的一般形式4.3函数参数和函数的值4.4 函数的调用 4.5 函数的嵌套调用4.6函数的递归调用 4.7数组作为函数参数4.8 局部变量和全局变量4.9变量的存储类别 4.10 内部函数和外部函数一个较大的程序可分为若干个程序模块,每一个模块用来实现一个特定的功能。在高级语言中用子程序实现模块的功能。子程序由函数来完成。一个C程序可由一个主函数和若干个其他函数构成。由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。函数间的调用关系 4.1 概述# include void main(){ void printstar(); /*对printstar函数声明*/ void print_message(); /*对print_message函数声明*/ printstar(); /*调用printstar函数*/ print_message(); /*调用print_message函数*/ printstar(); /*调用printstar函数*/ }先举一个函数调用的简单例子1:void printstar() /*定义printstar函数*/{ printf("****************\n"); }void print_message() /*定义print_message函数*/{ printf("How do you do!\n"); }结果:****************How do you do!****************如果下面的函数写在main之前,函数声明可以省略#include void main( ){ int max(int x,int y);/* 对max函数的声明 */ int a,b,c; scanf("%d,%d",&a,&b); c=max(a,b); printf(“max is %d",c); } int max(int x,int y) {int z; z=x>y?x∶y;  return(z); } 另一个函数调用的简单例子2:返回值形参表说明:3 、组成C程序的各个函数彼此平行,独立定义,可以嵌套调用。但不能调用主函数main( )1、 一个C程序可以由若干个函数组成。2、 在组成C程序的所有函数中,有且只有一个主函数main( ),位置任意(在哪个源文件中都可以)但程序的运行从主函数开始。如果主函数在调用函数前,要对调用函数进行声明,如果主函数在调用函数后,函数声明可以省略。一、1.系统函数(库函数)需要在程序前包含头文件 2.用户自己定义的函数二、1.有返回值函数(注意返回值的类型) 2.无返回值函数(函数类型应定义为空类型void)4.2.1函数的分类三、1.无参函数。在调用无参函数时,主调函数不向被调 用函数传递数据。无参函数一般用来执行指定的一组操作 2.有参函数。在调用函数时,主调函数在调用被调用函数时,通过参数向被调用函数传递数据,一般情况下,执行被调用函数时会得到一个函数值,供主调函数使用。 4.2.2 函数定义 1. 无参函数的定义一般形式 定义无参函数的一般形式为:类型说明符 函数名(){ 说明语句部分; 可执行语句部分; }在定义函数时要用“类型说明符”指定函数值的类型,即函数带回来的值的类型。例1中的printstar和print_message函数为void类型,表示不需要带回函数值 为函数首部(函数头){ }内为函数体2. 有参函数定义的一般形式 定义有参函数的一般形式为:类型说明符 函数名(形式参数表) { 说明语句部分; 可执行语句部分; }例2:Int max(int x,int y) {int z; / *函数体中的声明部分*/ z=x>y?x∶y; return(z); } 形式参数表简称形参表,多个形参之间用逗号分隔形参是变量,必须进行类型说明3 .空函数 定义空函数的一般形式为:类型说明符 函数名() { }例如:void dm(){ } 调用此函数时,什么工作也不做,没有任何实际作用。在主调函数中写上“dm();”表明“这里要调用一个函数”,而现在这个函数没有起作用,等以后扩充函数功能时补充上。 括号不能省略4.2.3函数参数和函数的值 1.形式参数和实际参数 形式参数:将函数定义中的参数表称为形式参数表,简称形参表。与调用函数提供的实际参数区别。 实际参数:调用有参函数时,调用函数必须赋予这些参数实际的值,调用函数中的参数称为实际参数。实参可以为变量,常量,函数,表达式,但实参要按照形参的类型和个数对应排列。当函数调用时,调用函数把实参的值一一对应的传送给被调用函数的形参,从而实现调用函数向被调用函数的数据传送。 形参出现在函数定义中,只能在该函数体内使用(有效),调用结束,返回调用函数后,不能在使用形参变量。 #include void main( ){ int max(int x,int y);/* 对max函数的声明 */ int a,b,c; scanf("%d,%d",&a,&b); c=max(a,b); printf(“max is %d",c); } int max(int x,int y) {int z; z=x>y?x∶y;  return(z); } 例2:实参与形参的类型应相同或赋值兼容;如果a=3.5则形参x=3字符型和整形通用运行情况如下:7,8↙ max is 8 通过函数调用,使两个函数中的数据发生联系 关于形参与实参的说明:(1) 在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元。只有在发生函数调用时,函数max中的形参才被分配内存单元。在调用结束后,形参所占的内存单元也被释放。(2) 实参可以是常量、变量或表达式,如: max(3,a+b);但要求它们有确定的值。在调用时将实参的值赋给形参。(3) 在被定义的函数中,必须指定形参的类型(见例2程序中的 “c=max(a,b);” )。(4) 实参与形参的类型应相同或赋值兼容。例2中实参和形参都是整型。如果实参为整型而形参x为实型,或者相反,则按不同类型数值的赋值规则进行转换。例如实参值a为3.5,而形参x为整型,则将实数3.5转换成整数3,然后送到形参x。字符型与整型可以互相通用。(5) 在C语言中,实参向对形参的数据传递是“值传递”,单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同。省略部分。,2,1); while(k<=n) { h=a1+a2; printf("\n第%d月有%d对兔子",k,h); a1=a2; a2=h; k++; } }例9:求两个整数a,b的最大公约数#includelong int gys (int x,int y){ if(x%y==0) return y; else return gys(y, x%y);}void main( ){ int a,b; scanf(“%d,%d”,&a,&b); printf(“%d\n”,gys(a,b));}C语言中的变量:1、数据类型2、作用域 由变量定义的位置决定局部变量和全局变量3、生命期 由变量在内存中的储存方式决定静态存储类和动态存储类4.6局部变量和全局变量4.6.1局部变量在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的。这称为“局部变量”。 float f1( int a) /*函数f1 */{int b,c;… b、c有效} char f2(int x,int y) /*函数f2 */{int i,j,b; x、y、i、j, b有效} void main( ) /*主函数*/{int m,n;… m、n有效}   主函数中定义的变量(m,n)也只在主函数中有效(使用),而不因为在主函数中定义而在整个文件或程序中有效。主函数也不能使用其他函数中定义的变量。(2) 不同函数中可以使用相同名字的变量,它们代表不同的对象,互不干扰。例如, 上面在f1函数中定义了变量b和c,倘若在f2函数中也定义变量b和c,它们在内存中占不同的单元,互不混淆。(3) 形式参数也是局部变量。例如上面f1函数中的形参a,也只在f1函数中有效。其他函数可以调用f1函数,但不能引用f1函数的形参a。(4) 在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称为“分程序”或“程序块”。说明习题5void main ( ){ int i=1,j=3; printf(“%d”,i++);{ int i=0; i+=j*2; printf(“%d,%d”,i,j);} i=0在复合语句范围内有效 printf(“%d,%d\n”,i,j);} i=1在复合语句之外范围内有效  输出结果:1,6,3,2,34.6.2 全局变量在函数内定义的变量是局部变量,而在函数之外定义的变量称为外部变量,外部变量是全局变量(也称全程变量)。全局变量可以为本文件中其他函数所共用。它的有效范围为从定义变量的位置开始到本源文件结束。 注意:同一文件中,允许全局变量同名,在局部变量的作用域内,全局变量不起作用。int p=1,q=5; /*p和q 全局(外部)变量 */float f1(int a) /* 定义函数f1 */{int b,c;…}char c1,c2; /* c1,c2全局(外部)变量*/char f2 (int x, int y) /* 定义函数f2 */{int i,j; … }void main ( ) /*主函数*/{int m,n;…}   全局变量pq的作用范围全局变量c1c2的作用范围4.7 变量的存储类别 4.7.1 动态存储方式与静态存储方式 前面已介绍了从变量的作用域(即从空间)角度来分,有全局变量和局部变量。那么从变量值存在的时间(即生存期)角度来分,又可以有静态存储方式和动态存储方式。 所谓静态存储方式是指在程序运行期间由系统分配固定的存储空间的方式。而动态存储方式则是在程序运行期间根据需要进行动态的分配存储空间的方式。在C语言中每一个变量和函数有两个属性:数据类型和数据的存储类别。对数据类型,读者已熟悉(如整型、字符型等)。存储类别指的是数据在内存中存储的方式。存储方式分为两大类:静态存储类和动态存储类。具体包含四种:自动的(auto),静态的(static),寄存器的(register),外部的(extern)。4.7.2 auto变量(1)自动变量,只在定义函数内有效;函数被调用时分配存储空 间,调用结束就释放。 定义形式为:[auto] 数据类型 变量表;其中auto可以省略 动态存储变量可以是函数的形式参数、局部变量、函数调用时的返回地址。 自动变量定义时不初始化,则其值是不确定的。如果初始化,则赋初值操作是在调用时进行的,且每次调用都要重新赋一次初值。 在复合语句中定义的自动变量,只在该复合语句中有效。在不同函数或复合语句中允许使用同名的变量而不会混淆。4.7.3用static声明局部变量在函数体(或复合语句)内部,用以下定义格式定义的变量称为静态局部变量: static 数据类型 变量表; 例如:static int a=8; 静态局部变量的初始化只在编译时进行一次,每次调用它们所在的函数时,不再重新赋初值,只是保留上次调用结束时的值。若定义但不初始化,则自动赋以“0”(数值型)或'\0'(字符型)。 例13: 考察静态局部变量的值。#include void main(){int f(int); int a=2,i; for(i=0;i<3;i++) printf(″%d ″,f(a));  }int f(int a){aut int b=0; static c=3; b=b+1; c=c+1; return(a+b+c);  }运行结果:789例14: 输出1到5的阶乘值。#include void main(){int fac(int n); int i; for(i=1;i<=5;i++) printf(″%d!=%d\n″,i,fac(i));}int fac(int n){static int f=1; f=f*n; return(f); }结束 关 键 词: 第四 二级 函数 计算机

4d91c43bfc72ca913299809b07b4968f.gif  天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值