c课件语言基础05函数_第1页
c课件语言基础05函数_第2页
c课件语言基础05函数_第3页
c课件语言基础05函数_第4页
c课件语言基础05函数_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、东软睿道内部公开文件编号: D000-C语言基础版本:1.0.0-0.0.02015-6-1东软睿道教育(所有,)Copyright © Neusoft Educational Information Technology Co.,sV1.0文件修改V1.0修改编号版本修改条款及内容修改日期11.0.0-0.0.0创建2015-6-1C语言编程基础函数V1.0函数的 从函数的参数形式看,函数可分为两类: 无参函数; 有参函数 。 无参函数的定义形式返回值类型 函数名(部分;语句; 例如:void print_message()printf(“n Hello!”);)V1.0无参数函数

2、的 有参函数的定义形式返回值类型 函数名(形式参数列表)部分语句 例如:int max (int x, int y)/*求x和y二者中大者,x,y为形参*/int z; z=x>y?x:y; return (z);/*函数体中变量的*/*将z作为函数返回值*/V1.0函数的函数: 同变量一样,函数的调用也应该遵循“先原则。,后使用”的 函数的一般形式如下:返回值类型 函数名(类型1,类型2,); 或返回值类型函数名(类型1 形参1,类型2 形参2,);以下的2中函数方法都是合法的:float max(int, int);floatmax(int x, int y); 说明: 被调函数定义

3、在主调函数之前,可以不进行函数。V1.0函数的函数 函数和函数定义的区别的作用是把函数的名字、函数返回值类型以及形参的类型、个数和顺序通知编译器,以便于编译器检查函数调用的。 函数定义是指对函数功能的确立,包括指定函数名、函数体、返回值类型、形参及其类型等,它是一个完整的、。的函数V1.0函数的形参和实参 形式参数:在函数或,函数名后面括弧中的变量名,被称为形式参数,简称形参。 实际参数:在函数调用时,函数名后面括弧中的表 称为实际参数,简称实参。例:,被V1.001 int max( int x, int y,int z) 02 int m;03 m=x>y?x:y;04 m=m>

4、;z?m:z;05 return(m);06 实参表形参表00 #include <stdio.h>01 int max( int x, int y, int z); 02 void main( ) 03int a,b,c,m;04scanf (“%d,%d,&a,&b);05 m=max(a,b,c);06 printf(“Max is %d”,m); 07 函数的形参和实参说明: 形参调用前不占内存,调用时才占用,调用后; 形参是函数的内部变量,只能在函数;对每个形参必须指明其名字和数据类型; 实参可以是、变量或表,并且必须有确定的值; 实参个数、类型必须与对应

5、的形参一致,类型不一致会发生 类型转换; 实参对形参的数据传递是值传递,即单向传递,只由实参传递给形参,反之不可。调用结束后,只有形参单元被实参单元中的值不变。,V1.0函数的返回值 定义:通过函数调用使主调函数得到一个确定的值,称为函数的返回值。例如:c=max(3, 5);此时函数的返回值是5,因此c=5。 函数返回语句return函数返回值是通过 return语句获得的。 return语句将被调函数的确定的值交给主调函数。V1.0函数的返回值 return语句的一般形式: return(函数返回值); 说明:或return函数返回值; “函数返回值”可以用、变量或表表示。 一个函数中可以

6、有多个return语句,但是一次函数执行只能执行其中的一个。当执行到某个return语句时,则终止本次函数执行,并带回函数值。 若函数体内没有return语句,就一直将函数的语句,再返回调用函数,将一个不确定的值带回。 return后面可以无“返回值”(即 return ;),则该return语句只起到终止函数执行、返回主调函数的作用。V1.0return (x>y? x:y);z=x>y? x:y; return(z);函数的返回值函数返回值的类型 函数应该指定函数返回值的类型,该类型应与return表的类型一致。 说明: 若函数返回类型和return表的类型不一致,表数据要服从

7、函数的返回类型,服从表现为自动类型转换。即函数返回类型决定了表的类型。 若无法进行类型转换,则程序编译报错。 如果函数不返回任何值,函数定义为“无类型”void(或称“空类型”)。例:void print_star()V1.0函数调用的3种形式 函数调用的一般形式 :有参数函数:函数名(实参列表) 无参数函数:函数名( ) 说明: 实参列表要用逗号隔开; 实参列表中的参数可以是、变量或表; 实参与形参个数相等,类型应一致; 实参与形参按顺序对应,一一传递数据; 实参列表的求值顺序与具体编译器有关。V1.0函数调用的3种形式 把函数调用作为一个语句 : 一般形式:函数名(实参列表); 使用情况:

8、这种方式常用于调用一个可以忽略返回值或没有返回值的函数时。如, 的调用。对scanf函数和printf函数 函数调用出现在表(函数表)中: 一般形式: 变量名=函数表 使用情况:这种方式用于调用带返回值的函数,函数的返回值将参加所在表的运算。如:a =3+ max(num1,num2);注意:无返回值函数的调用,不能出现在表中。V1.0函数调用的3种形式 函数调用出现在函数参数中: 一般形式: 函数名(实参,函数名(实参) 使用情况:这种方式用于调用带返回值的函数,函数的返 回值将作为另一个函数的参数。如:a = max(max(num1,num2), num3);注意:无返回值函数的调用,不

9、能出现在函数参数中。V1.0数组元素做函数参数 由于表可以做实参,数组元素可以作为表,因此,数组元素可以做函数的实参,并且可以传递给形参。 例如:找出数组中的最大数int max(int a, int b)int main(void)return a > b ? a : b;int arr = 3, 4, 6, 5, 8, 10;int tmp, cnt; tmp = arr0;for(cnt = 1; cnt < 6; +cnt) tmp = max(tmp, arrcnt);printf(“Max value is : %dn”, tmp);V1.0数组名作函数参数 由于数组名

10、代表的是数组在内存中存放区域的首地址。把数 组名作为函数参数来实现大量数据的传递是绝佳的传递方法。 数组名做函数参数的具体方法: 在主调函数中定义数组; 被调函数中形参是与实参类型一致的数组; 形参数组可以不指定数组大小(这里指一维数组)。 说明: 数组名做函数的实参和形参时,不是“值传递”,而是“ 址传递”。因此,形参数组元素的值如果发生变化,会使 实参数组对应元素的值发生同样的改变。V1.0数组名作函数参数举例:用选择法对数组中10个整数按由小到大排序。 程序设计:函数sort(array, n) :对数组元素按升序排序。主程序 : 为array数组输入数据,调用 sort 函数排序,输出

11、排序后的array数组。V1.001 void sort (int array , int n) 02 int v, j, k, t;03for (i=0; i<n; i+) 04k=i;05for (j=i+1; j<n; j+)06if (arrayj<arrayk) k=j;/*找到较小者下标*/ 07t=arrayk;08 arrayk=arrayi;09 arrayi=t;1011 这是数组作形参时常使用的技巧数组名作函数参数V1.012 #include<stdio.h>13 void main ( ) 14 int a10, i;15printf(“

12、enter array: n”); 16for (i=0; i<10; i+)17scanf (“ %d ”,&ai); 18sort(a, 10);19printf(“the sorted array: n”); 20for (i=0; i<10; i+)21 printf (“ %d ”, ai);22 printf(“n”); 23 由于地址传递,数组 a已经 改变数组名作函数参数数组名做参数的好处: 由于只需向函数一个地址值,而无须全部需要处理的数据,因此既节约空间,又并提高了效率。 由于主调函数和被调函数是在相同的内存区域上对数据进行操作,因此可以实现数据的同步更

13、新。V1.0函数的嵌套调用 定义:在一个函数的执行过程中,又调用另一个函数。 在定义一个函数时,若该函数体内包含另一个函数的定义,是嵌套定义。C语言函数不能嵌套定义。函数嵌套调用图示:13245调调9876V1.0结束用B函数用A函数B函数A函数main函数void B()void A() B(); void main() A(); 函数的递归调用 定义: 在函数的执行过程中直接或间接地调用该函数本身。 C语言的特点之一就是 递归的形式可分为:直接递归调用函数递归调用。间接递归调用V1.0函数的递归调用 说明:递归应避免出现无终止的递归,因此应该给出限制递 归次数的条件。 递归调用的一般算法:

14、f(x)=终止表递归调用 两种成分的作用:递归调用:记住本次调用现场,开始下次递归调用。终止表:返回上次调用现场。V1.0函数的递归调用用递归法求n! 。分析:根据数学知识可知:n! = n* (n-1)!算法:1f(n-1)*n(n=1)(n>1)f(n)=实现:V1.0int fac(int n) int f; if(n=1)f=1;elsef=fac(n-1)*n;return f;(n-1)! = (n-1)*(n-2)!局部变量 定义:在函数内部或复合语句内部定义的变量称作局部变量。 作用域:是指变量的可用范围。局部变量的作用域:仅限于函数内或复合语句内。 注意: 主函数 ma

15、in 中定义的变量只在主函数中有效,主函数不能使用在其它函数中定义的变量。 不同函数中的同名变量互不影响,因为各自有各自的作用域。 形参也是局部变量。V1.0局部变量V1.000 #include<stdio.h>01 f1(int a)02 int b,c;03 在f1函数中a、b、c有效0405 f2(int a,int b)06 int c,d;在f2函数中 a、b、c、d有效07但与f1函数中的a、b、c不同0809void main()10 int m,n;11 在main函数中m、n有效12局部变量V1.000 #include<stdio.h>01 voi

16、dmain() 02int a,b; 03.04 int c05 c=a+b;a、b在此06c在此范围范围内有效07内有效0809.10全局变量 定义:在函数外部定义的变量称作全局变量(也称外部变量)。 作用域:可以文件中所有的函数公用。 注意:从定义变量的位置开始到本文件结束,这段数可直接使用全局变量。的函如果在定义点之前的函数想使用全局变量,则应该在该函数之前用关键字 extern 作。如果在同一源文件中,全局变量和局部变量同名,则在 局部作用范围内,全局变量不起作用。V1.0全局变量 优点:同一文件中的一些函数都可以使用全局变量,这增加了函数间数据。当某个函数改变了全局变量的值,其它函数

17、得到改变后的全局变量值。为函数增加了向外界传递数据的渠 道,如同多了返回值。 缺点:全局 变量在程序的全部执行过程中都占用单元。使用全局变量不符合程序设计中要求模块间“强内聚性、弱偶合性”的原则。会降低程序的可读性和可维护性。V1.0变量的属性及定义 C语言变量的属性包括:数据类型和 数据类型:整型,实型,字符型类型类型:用来规定数据在内存中的 auto (自动的) register(寄存器的) static (静态的) extern(外部的)分类,类型包括 定义变量的一般形式:类型 数据类型 变量名如: auto int a; static int b; register int d;V1.

18、0静态局部变量与静态全局变量 static可用于修饰局部变量和全局变量静态局部变量 定义: static修饰的局部变量称为静态局部变量 作用域:仅限于定义它的函数内部 注意: 存放在静态区,整个程序运行期间都不。 编译初值,每次调用时不再赋初值,只保留调用结束时变量的修改值。 如果静态局部变量没赋初值,编译时自动赋0。V1.0静态局部变量与静态全局变量静态全局变量定义: static修饰的全局变量称为静态全局变量作用域:只能在本文件中被使用,其他的源文件不能使用。注意: 存放在静态区,整个程序运行期间都不。 如果静态全局变量没赋初值,编译时自动赋0。V1.0寄存器变量寄存器:它是CPU的组成部分,是用来暂时存放数据的装置。寄存器变量:直接放置在CPU的寄存器中的变量称为寄存器变量。引入寄存器变量是为了提高“存取”速度。用register修饰的局部变量被称为寄存器变量 例如:register int i;i是寄存器变量,其数据类型是整型。寄存器变量并不放在栈区中,而是放在寄存器中。寄存器变量的作用域仅限于函数内或复合语句内。注意: 只有局部变量(非静态的)和形式参数可以作为寄存器变量。 由于计算机的寄存器数量有限,不宜定义太多寄存器变量。不同的计算机平台使用的寄存器个数是不同的。V1.0静态函数和全局函数静态函数 定义:如果一个函数只能被本文件中其它函数调用,称为静 态函数。 定

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论