函数与程序结构市公开课获奖课件_第1页
函数与程序结构市公开课获奖课件_第2页
函数与程序结构市公开课获奖课件_第3页
函数与程序结构市公开课获奖课件_第4页
函数与程序结构市公开课获奖课件_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

1、 第七章 函数第1页第1页第7章 函数7.1 函数定义 7.2 函数调用7.3 函数阐明7.4 return语句7.5 函数形参与实参7.6 递归7.7 函数变量 7.8 内部函数与外部函数 7.9 作用域规则第2页第2页一、引入 某学生成绩管理系统: 输入若干个学生姓名、某课程期中和期末成绩,并计算每个学生总评成绩; 计算总评成绩分数段情况; 输出所有学生姓名、期中、期末和总评成绩; 查询某个学生总评成绩。7.1 函数定义第3页第3页 模块化设计思想:将一个程序按照功效分解成一个一个模块。 在C语言中,一个函数就是一个模块。第4页第4页C程序有一个主函数和若干个其它函数主函数调用其它函数,其

2、它函数可互相调用函数需要定义后才干使用函数分为库函数和自定义函数注:第5页第5页例: #include stdio.h void print(); /*函数阐明*/ void main() int i; for (i=0;iy?x:y; return(z); 例 无返回值函数 void swap(int x,int y ) int temp; temp=x; x=y; y=temp; 第9页第9页 注意: 函数定义中不能包括另一个函数定义。也就是说,函数定义不能嵌套。在C语言中,函数定义是并列关系,不能一个包括另一个。 例:下面定义是错误,该程序试图在print函数定义中定义另一个函数prnl

3、ine。 void print() putchar(*); void prnline() /* 错误 */ putchar(n); 第10页第10页7.2 函数调用1、函数调用形式 调用有参函数: 被调用函数名(参数列表) 调用无参函数: 被调用函数名() 注: 其中参数表示式个数与函数定义个数、数据类型都应当匹配,若不匹配也许会出现预料不到结果。此时参数叫实际参数,简称实参。第11页第11页2、函数调用方式 函数调用形式出现在表示式中。 这种方式要求函数是带返回值。 比如,x=sum(n1,n2); 函数调用形式作为独立语句出现。 这种情况下,函数普通不带返回值。 比如:print(); 函

4、数调用形式作为另一个函数实参出现。 这时,函数必须是有返回值。 printf(sum=%d, sum(n1,n2);第12页第12页不使用自定义函数求最大值main() int a,b,c,d,m;scanf(%d%d%d%d,&a,&b,&c,&d); a=ab?a:b; c=cd?c:d; m=ac?a:c; printf(max is %d,m); 使用自定义函数求最大值int max(int x,int y) int z; z=xy?x:y; return(z); main()int a,b,c,d,m;scanf(%d%d%d%d,&a,&b,&c,&d);a=max(a,b);c=

5、max(c,d);m=max(a,c);printf(max is %d,m); 第13页第13页3、函数嵌套调用 在C语言中,函数是并列、独立一个一个模块,通过调用与被调用相关联。在一个函数定义中不能够定义另一个函数,但是允许在一个函数中调用另一个函数,这就是所谓函数定义不能够嵌套,函数调用则允许嵌套。第14页第14页#include stdio.hvoid print(); /*函数阐明*/void prnline(); /*函数阐明*/void main() int i; for (i=0;i10;i+) print(); /*函数调用*/ putchar( ); void print(

6、) /*函数定义*/ putchar(*); prnline(); /*函数调用*/ return; void prnline() /*函数定义*/ putchar(-); 例:第15页第15页调用关系图void main() int i; for (i=0;i10;i+) print(); putchar( ); void print() putchar(*); prnline(); return; void prnline() putchar(-); 调用返回返回调用第16页第16页7.3 函数阐明函数阐明其普通形式为: 函数返回值数据类型阐明符 被调用函数名(形参表); 括号内形参表能够

7、给出形参数据类型名和形参名,也能够只给出形参类型名。第17页第17页 在语言中,并不需要在任何情况下都必须对函数进行函数阐明,能够省略对被调用函数函数阐明用三种情况。 (1) 被调用函数函数定义出现在调用它函数之前。 (2) 对C编译提供库函数调用不需要再作函数阐明,但必须把该函数头文献用#include 命令包括在源程序最前面。第18页第18页#include stdio.hvoid print() /*函数定义*/ putchar(*);void main() int i; for (i=0;i10;i+) print(); /*函数调用*/ putchar(n);例:第19页第19页随堂

8、练习1、定义函数返回两个数中较大数,在主函数中通过调用该函数求三个数之中较大数并输出。编写主函数调用该函数。第20页第20页2、编写power函数实现求xn使程序完整。#include double power(double x,int n) main() int i; double p; scanf(“%d”,&); p=power(3.0,i); printf(“%f”,p);随堂练习第21页第21页7.4 return 语句函数被调用时,可使用return语句返回,当执行Return语句时,程序控制马上返回到调用环境。语法: return; 或return 表示式; 第22页第22页注意

9、:(1) return(表示式); 和return 表示式;都是正确。(2) 带返回值函数只能返回一个值。(3) 若定义函数不带返回值,可用void定义函数类型(4) return语句中表示式与函数返回值类型不匹配时,以函数定义时返回类型为准。第23页第23页7.5 函数形参与实参 函数调用时需要传递数据。调用函数要将实参值传送给被调用函数形参。若函数定义首部是 double power(double x,int n) /* 函数定义 */调用形式是能够是power(y,m), 也能够是power(3.0,5)。其中,x和n是形式参数,y和m是实际参数,3.0和5也是实际参数。第24页第24页

10、函数参数调用方式: 传值 普通变量 传(地)址 指针或数组第25页第25页 实际参数与形式参数参数个数、数据类型和次序都应该一致,假如数据类型不一致,系统将按照自动转换规则进行转换。 调用函数实参能够是0、1或多个。实参能够是常量、变量或表示式,形参只能是变量。 数据传递是单向,只能是从实参向形参传递。函数运行时,形参改变不影响实参,实参和形参占用不同内存单元。 当一个函数调用另一个函数时,被调用函数必须存在。 形参变量只有在被调用时,才分派内存单元,形参只在该函数内有效。 传值调用特点第26页第26页 形参是标识了一个存储空间变量名,这个存储空间是在函数被调用时由系统分派,被调用函数执行完毕

11、,则形参空间将被系统释放掉。假如是多次调用,每次调用系统都会重新为形参分派空间。因此,形参所占空间是没有“记忆”。被调用函数内形参值无论如何改变,都不会影响实参改变 。第27页第27页void swap(int x,int y) int temp; printf(before change x=%d,y=%dn,x,y); temp=x; x=y; y=temp; printf(changed x=%d,y=%dn,x,y);Void main() int a,b; printf(input two number:n); scanf(%d,%d,&a,&b); printf(input num

12、ber is:a=%d,b=%dn,a,b); swap(a,b); printf(input number is:a=%d,b=%dn,a,b);例:第28页第28页例:求3到100之间所有素数。用函数判断一个数是否是素数,函数返回值是1表示该数是素数,函数返回值是0,则表示该数不是素数。 #include stdio.h #include math.h int prime(int); /*函数阐明 */ void main() int i; for (i=3;i=100;i+) if (prime(i)=1) /*函数调用 */ printf(%4d,i); printf(n,i); 第2

13、9页第29页int prime(int i) /* 函数定义 */ int j,k,flag=1; k=i; i=sqrt(i); for (j=2;j=i;j+) if (k%j=0) flag=0; break; return flag; 第30页第30页作 业1、定义一个函数MYABS,求x+y绝对值,用主函数调用该函数。2、定义一个函数IS_DIGIT(ch),当ch是0-9数字,返回1,不然返回0。用主函数调用该函数。第31页第31页#include stdio.h#include stdlib.hlong factorial(int); /*函数阐明 */void main() i

14、nt i,j; long sum; sum=0; for (i=0;i=1;i-) product= product*i; return product;第33页第33页7.6 递 归 调 用 一个函数定义中使用调用形式间接或直接调用自己就称为递归调用。 含有直接或间接调用自己函数称为递归函数。语言允许函数递归调用。执行递归函数将重复调用其本身,每调用一次就进入新一层。 递归调用需要设置条件来终止自调用过程。第34页第34页 void f() printf(*); f(); 直接调用自己第35页第35页 int f1(int x) int y; f2(y); 直接调用自己 int f2(int

15、 x) int y; f1(y) 第36页第36页 void f() printf(*); f(); 假如在主函数中直接调用该函数,程序将不断地打印“*”号,无休止地调用其本身。 第37页第37页int sum(int n) if(n1) f=power(n-1)*n; else f=1; return f;main() int n; long x; printf(“input an integer number:n”); scanf(“%d”,&n); x=power(n); printf(“%d!=%ldn”,n,x); getch();第39页第39页编写递归程序关键是: (1) 结构递

16、归表示式。将n阶问题转化为比n阶小问题(当然也能够将n阶问题转化为比n阶大问题),转化以后问题与本来问题解法是相同。 (2) 寻找一个明确递归结束条件,称为递归出口。第40页第40页7.7 内部变量与外部变量 在C语言中,每个变量都有自己作用域,变量作用域是指变量作用范围。按作用域可分:内部变量和外部变量。 内部变量局部变量 定义:在函数内定义,只在本函数内有效 注意: * main中定义变量只在main中有效。 * 不同函数中同名变量,占不同内存单元。 * 形参属于局部变量。第41页第41页float f1(int a) int b,c; .char f2(int x,int y) int

17、i,j; main() int m,n; .a,b,c有效x,y,i,j有效m,n有效例题: 不同函数中同名变量main() int a,b; a=3; b=4; printf(main:a=%d,b=%dn,a,b); sub(); printf(main:a=%d,b=%dn,a,b);sub() int a,b; a=6; b=7; printf(sub:a=%d,b=%dn,a,b);第42页第42页 外部变量全局变量 定义:在函数外定义,为本文献所有函数共用 有效范围:从定义变量位置开始到本源文献结束,及有extern阐明其它源文献 阐明: extern 数据类型 变量表; 注意:

18、在一个源程序所有文献中只能定义一次 若外部变量与局部变量同名,则外部变量被屏蔽 第43页第43页例: 外部变量阐明与定义int max(int x, int y) int z; z=xy?x:y; return(z);main() extern int a,b; printf(max=%d, max(a,b);int a=13,b=-8;extern int a,b;int max() int z; z=ab?a:b; return(z);main() printf(max=%d,max();int a=13,b=-8;运营结果:max=13阐明定义第44页第44页外部变量定义与外部变量说明不

19、同 定义 阐明次数: 只能1次 可阐明多次位置: 所有函数之外 函数内或函数外分派内存: 分派内存,可初始化 不分派内存,不可初始化第45页第45页int a=3,b=5;max(int a, int b) int c; c=ab?a:b; return(c);main() int a=8; printf(max=%d,max(a,b);例: 外部变量与局部变量运营结果:max=8第46页第46页int f1(int xb) extern int xa; return(xa*xb);main() extern int xb; int xa=5; printf(“xa=%d,xb=%d,result=%d”, xa,xb,f1(xa);int xa=3,xb=4;例: 外部变量定义和使用运营结果:xa=5,xb=4,result=15第47页第47页变量属性: 数据类型 存储类型存储属性: 生存期:变量在某一时刻存在-静态变量与动态变量 作用域:变量在某区域内有效-局部变量与全局

温馨提示

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

评论

0/150

提交评论