《C语言程序设计》课件第八章.ppt
- 文档编号:2676974
- 上传时间:2022-11-06
- 格式:PPT
- 页数:63
- 大小:2.19MB
《C语言程序设计》课件第八章.ppt
《《C语言程序设计》课件第八章.ppt》由会员分享,可在线阅读,更多相关《《C语言程序设计》课件第八章.ppt(63页珍藏版)》请在冰豆网上搜索。
第八章函数1主要内容第一节C函数概述第二节C函数的定义第三节函数调用和参数传递第四节数组作为函数的参数第五节函数的多级调用第六节局部变量和全局变量第七节变量的存储类别第八节内部函数和外部函数2第一节C函数概述print_mess()print_mess()printfprintf(Howdoyoudo!
n);(Howdoyoudo!
n);printstarprintstar()()printfprintf(*n);(*n);main()(main()(见见ff1)ff1)printstarprintstar();();print_mess();print_mess();printstarprintstar();();3源文件1函数n函数2函数1源文件m源文件2一个C程序一个C程序的源文件.4函数的概述Functionsbreaklargecomputingtasksintosmallerone,andenablepeopletobuildonwhatothershavedoneinsteadofstartingoverfromscratch.5第二节C函数的定义无参函数的定义类型标识符函数名()说明部分语句有参函数的定义类型标识符函数名(形式参数表列)说明部分语句6例如:
intmax(intx,inty)intz;z=xy?
x:
y;returnz;对形参说明的传统方式intmax(x,y)intx,y;intz;z=xy?
x:
y;returnz;7第三节函数调用和参数传递3.1形参和实参3.2函数返回值3.3函数调用的一般形式3.4函数的调用方式3.5被调用函数的说明83.1形参和实参形式参数:
在定义函数时,函数名后面的括号中的变量称为形式参数,简称形参。
实际参数:
在调用函数时,函数名后面括号中的表达式称为实际参数,简称实参。
9例:
intmax(intx,inty)intz;if(x=y)z=x;elsez=y;return(z);main()inta,b,c;scanf(%d%d,&a,&b);c=max(a,b);printf(”%dn,c);10main()(ff2)inta,b;scanf(%d,%d,&a,&b);/*键入2,5*/printf(“a=%d,b=%dn”,a,b);/*显示a=2,b=5*/exch(a,b);printf(“a=%d,b=%dn”,a,b);/*显示a=2,b=5*/intexch(intx,inty)intt;printf(“x=%d,y=%dn”,x,y);/*显示x=2,y=5*/t=x;x=y;y=t;printf(“x=%d,y=%dn”,x,y);/*显示x=5,y=2*/11关于形参和实参的说明:
关于形参和实参的说明:
1、形参的有效作用范围是:
在其定义所在的函数内。
2、实参对形参的数据传递是值传递,即单向传递。
只由实参传给形参。
思考思考:
在主函数的最后插入:
printf(x和y是:
%d,%dn,x,y);结果?
!
结果?
!
2525abxy2552abxy123、对于有参函数,调用语句中的实参个数等于被调用函数的形参个数。
若实参个数形参个数,去掉实参表中右边的几个参数。
若实参个数=y)z=x;elsez=y;return(z);main()floata,b;intc;scanf(%f%f,&a,&b);c=max(a,b);printf(”%dn,c);153.3函数调用的一般形式函数名(实参表);例如:
exch(a,b);exch(intx,inty)实参自右向左的逐个传递与形参。
18main()ff5main()ff5intinti;i;i=1;test(i=1;test(i+,i+,i);i);i=1;test(i,i=1;test(i,i+i+););test(inttest(intx,intx,inty)y)printf(xprintf(x=%=%dtydty=%dn,x,y);=%dn,x,y);执行后执行后:
x=1y=1x=1y=1x=2y=1x=2y=1193.4函数的几种调用方式printstarprintstar();();print_mess();print_mess();c=max(a,b);c=max(a,b);1.函数调用作为语句2.表达式中的函数调用3.函数调用作为函数的实际参数。
printf(%dn,max(a,bprintf(%dn,max(a,b););203.5被调用函数的几点说明1.被调函数必须是已经存在的函数。
2.如果使用库函数,必须在本文件开头加上用#include命令将调用有关库函数时所用的信息包含到本文件中。
例如:
#include”stdio.h”3、如果是调用自己定义的函数,函数调用语句之前使用函数说明语句对该被调用函数作说明。
说明形式为:
类型标识符被调函数名(形参类型标识符);4、函数的两个操作概念函数定义函数说明21main()main()见见ff6ff6doubledoublepower(int,floatpower(int,float););intinti;i;for(i=1;i9;i+)for(i=1;i9;i+)printfprintf(“%d%fn”,i,power(i,1.5);“%d%fn”,i,power(i,1.5);doubledoublepower(intpower(intn,floatx)n,floatx)intinti;doublep=1;i;doublep=1;for(i=1;i=n;i+)p=p*x;for(i=1;i=n;i+)p=p*x;return(p);return(p);/*/*函数说明函数说明*/*/*函数调用函数调用*/*/*函数定义函数定义*/22有些情况下可以不做说明:
1.被调用函数定义在调用函数之前,可以免去说明。
doubledoublepower(intpower(intn,floatx)/*n,floatx)/*函数定义函数定义*/intinti;doublep=1;i;doublep=1;for(i=1;i=n;i+)p=p*x;for(i=1;i=n;i+)p=p*x;return(p);return(p);main()main()intinti;i;for(i=1;i9;i+)for(i=1;iave2)if(ave1ave2)return
(1);return
(1);elsereturn(-1);elsereturn(-1);main()main()见见ff7ff7intinti,k=0;floati,k=0;floata8=65,78,67,90,84,63,58,76,b8=62,79,a8=65,78,67,90,84,63,58,76,b8=62,79,65,88,80,65,60,74;65,88,80,65,60,74;for(i=0;i8;i+)for(i=0;i0)k=k+1;if(better(ai,bi)0)k=k+1;printf(printf(%dn%dn,k,k););26l数组名作为函数的实际参数数组名作为函数的实际参数C语言中的数组名代表了数组在内存中存放的起始地址,所以数组名作为函数的参数传递的是数组的起始地址,属于“传地址”。
说明:
(1)用数组名作为函数的参数,必须对实参数组先定义,形参必须说明成与实参数组类型一致的数组。
(2)形参数组和实参数组的数组名可以不一样,数组的大小也可以不一致。
由于传递的是地址,所以形参数组和实参数组在内存中实际上是共用了连续的一块地址空间。
27用函数用函数average()average()求求3030个学生英语课的平均成绩。
见个学生英语课的平均成绩。
见ff8ff8floataverage(mark,n)floataverage(mark,n)intintmark;mark;intintn;n;floatfloataveave;intintsum=0,i;sum=0,i;for(i=0;in;i+)for(i=0;in;i+)sum=sum+marki;sum=sum+marki;aveave=sum/n;=sum/n;return(avereturn(ave););main()main()intinti,score30;i,score30;printfprintf(请输入请输入3030个学生的英语成绩:
个学生的英语成绩:
nn);for(i=0;i30;i+)for(i=0;i30;i+)scanf(scanf(%d%d,&scorei,&scorei););printf(printf(%5.1fn%5.1fn,average(score,30);,average(score,30);28第五节函数的多级调用main函数的作用函数的嵌套调用函数的递归调用29主函数main的作用开始执行开始执行程序程序总控作用总控作用结束程序结束程序主函数主函数mainmain30函数的嵌套调用函数函数1函数函数2函数函数3在程序的执行过成中,当调用一个函数时,在该函数中又在调用另一个函数。
31例题例题见见ff9ff9#include#includemain()/*main()/*第一层第一层*/c();/*c();/*第二层第二层*/a()/*a()/*第三层第三层*/putchar(aputchar(a);/*);/*第四层第四层*/b();/*b();/*第四层第四层*/putchar(aputchar(a);/*);/*第四层第四层*/b()b()/*/*第四层第四层*/putchar(bputchar(b);/*);/*第五层第五层*/c()/*c()/*第二层第二层*/putchar(cputchar(c);/*);/*第三层第三层*/a();a();/*/*第三层第三层*/putchar(cputchar(c);/*);/*第三层第三层*/该程序执行后显示该程序执行后显示cabaccabac32函数的递归调用当函数被调用时,又同时调用自身,被称为函数递归调用。
见P115直接递归间接递归33例:
共计5个人,有如下关系:
见ff18age(5)=age(4)+2age(4)=age(3)+2age(3)=age
(2)+2age
(2)=age
(1)+2age
(1)=10求第五个人的年龄?
age(n)intn;intc;if(n=1)c=10;elsec=age(n-1)+2;return(c);main()printf(%d,age(5);Age函数共计调用5次,age(5)-age
(1)递归调用共计进行4次在每一次调用时,不是立即得到递归值,而是一次一次地进行递归,直到age
(1)为止。
回推-得到函数关系递推-得到函数值递归条件-已知的值34例例:
用递归方法求用递归方法求n!
。
见!
。
见ff11n!
=1n=0,1n*(n-1)!
n16!
-5!
-4!
-3!
-2!
-1!
=1(已知条件已知条件)1!
*2-2!
*3-3!
*4-4!
*5-5!
*6=720floatfac(intn)floatf;if(n=0|n=1)f=1;elsef=fac(n-1)*n;return(f);main()intn;floaty;scanf(“%d”,&n);y=fac(n);printf(“%d!
=%10.2fn”,n,y);35第六节局部变量和全局变量按照变量的作用范围,变量分为:
局部变量在一个函数或复合语句内部定义的变量,也称内部变量。
作用范围:
在定义该变量的函数或复合语句内有效。
全局变量函数外定义的变量。
作用范围:
从定义点开始到本源文件结束。
36局部变量举例:
floatf1(inta)intb,c;a,b,c有效int
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 语言程序设计 课件 第八
![提示](https://static.bdocx.com/images/bang_tan.gif)