c语言函数章节经典教案ppt课件.ppt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 函数 章节 经典 教案 ppt 课件
- 资源描述:
-
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,.,*,C语言程序设计,Lec,4,函数,1,.,引言,例:求一些圆盘的面积,圆盘半径分别为:,3.24,、,2.13,、,0.865,、,3.746,、,12.3364,、,8.421,/,设圆周率为,3.1416,,可写出下面程序:,#include,int main(),printf(radius:%f,area:%fn,3.24,3.24*3.24*3.1416);,printf(radius:%f,area:%fn,2.13,2.13*,2.12,*,3.1415,);,繁琐的东西很容易弄错,不易修改,标准函数有限,需求无限。,2,.,引言,如果有求圆面积的函数,double c_area(double r),如果有打印圆面积的函数,pc_area(double r),int main(),printf(radius:%f,area:%fn,3.24,c_area(3.24),);,printf(radius:%f,area:%fn,2.13,c_area(2.13),);,函数能使程序变短,,变得易写,/,易理解,/,易修改,int main(),pc_area(3.24);,pc_area(2.13);,3,.,引言,半径,3.24,高,2.4,的圆锥体积:,外半径,5.3,,内半径,3.07,,高,4.2,的空心圆柱体积:,2.4*,c_area(3.24),/3.0,(,c_area(5.3)-c_area(3.07),)*4.2,4,.,目标,学会把常用的代码定义为函数,学会在程序中使用函数,掌握C语言提供的常用库函数,了解递归的基本原理,5,.,主要内容,函数定义,函数调用,C语言常用函数,函数与递归,变量作用域,6,.,4.1 函数定义,将实现某个功能的代码变成函数,7,.,函数定义,把一段,计算,定义成函数并给以命名,定义后就可以,在任何需要的地方通过名字调用,。,/,定义函数,c_area,的程序片段:,double c_area(double r),return r*r*3.1416;,8,.,定义函数的要素,函数头,函数名:使用函数需要的名称,合法标识符,返回值类型,函数计算结果的数据类型,参数表,完成计算需要的数据(,数量和类型,),函数体,double c_area (double r),return r*r*3.1416;,返回值类型,函数名,参数表,函数体,函数头,实现函数功能的代码,,由一对大括号包围,9,函数返回值,函数返回值表示函数内代码计算的结果,一个函数,最多只能有一个,返回值,返回值通常是计算结果或者表示计算状态的信息,,由调用者使用,如果函数有返回值函数,必须指定返回值类型,,如果函数不需要返回值,必须,使用,void,作为函数返回值类型。,函数返回值通过,return,语句返回,,return,语句一旦执行,整个函数就结束。,10,.,函数返回值,一个函数中可以有多条,return,语句,但,只会执行其中一条,。,return,语句形式:,return,表达式,;,return,语句中表达式求值的类型应该和函数返回值类型一致,如果不一致会自动进行类型转换,返回值类型为,void,时,不需要,return,语句或者写成,return;,11,.,函数定义示例,void pc_area(double r),printf(r=%f,S=%fn,r,3.14159265*r*r);,double c_area(double r),return r*r*3.1416;,int max(int a,int b),if(ab)return a;,return b;,int compare(int x,int y),if(x=y)return 0;,else if(x y),return,1;,else return-1;,12,关于return语句,double c_area(double r),return r*r*3.1416;,int main(),double v=2.4*,c_area(3.24),/3.0;,printf(v=%fn,v);,int main(),double s=,c_area(3.24);,double v=2.4*,s,/3.0;,printf(v=%fn,v);,需要注意返回值类型为,void,的函数不能放在表达式中参与运算,13,函数参数表,函数可以有,0,个或多个参数,这些参数称为,形式参数,每个参数必须指明,类型,和,参数名称,函数参数是函数内的,局部变量,,只在函数体内有效,函数参数只有在函数被调用时才有效,函数参数的初始值由调用者传入(通过实际参数以值拷贝的方式传入),14,.,形参和实参,形参:在函数定义中括号内的标识符,与函数调用时的实参一一对应,实参:在调用函数的括号中使用的表达式,它的值被传入函数并赋值给函数的对应形参。,15,.,形参和实参,#include,/,定义函数,double c_area(double,r,),return r*r*3.1416;,int main(),double v,radius=3.24;,/,调用函数,v=2.4*,c_area(,radius,),/3.0;,return 0;,形参,实参,函数调用时,,实参,radius,的值,(3.24),传递给形参,r,16,.,函数定义不能嵌套,#include,#include,double c_area(double r),return,pow(r,2),*3.1416;,int main(),double v;,v=2.4*,c_area(3.24),/3.0;,return 0;,#include,#include,int main(),double c_area(double r),return,pow(r,2),*3.1416;,double v;,v=2.4*,c_area(3.24),/3.0;,return 0;,17,.,4.2 函数调用,18,.,调用系统函数,包含必要的头文件,其本质是将,函数原型,添加到程序中,在需要的地方使用函数,传入类型和数量正确的实际参数,函数返回值可以作为表达式的一部分,#include,#include,int main(),double sum=0;,int n=1;,while(n=100),sum=sum+,sin(1.0/n);,n=n+1;,printf(sum=%fn,sum);,return 0;,函数原型就是,函数头部加上分号,,,其作用是告诉编译器函数应该以什么形式调用,19,.,调用,自定义,函数,方法,1,(函数定义放在调用函数之前):,在需要的地方使用函数,传入类型和数量正确的实际参数,函数返回值可以作为表达式的一部分,#include,/c_area,函数在调用前定义,double c_area(double r),return r*r*3.1416;,int main(),double v;,printf(radius:%f,area:%fn,3.24,c_area(3.24),);,v=2.4*,c_area(3.24),/3.0;,return 0;,20,.,调用,自定义,函数,方法,2,(函数定义放在调用函数之后):,在,函数调用之前,给出,函数原型,在需要的地方使用函数,传入类型和数量正确的实际参数,函数返回值可以作为表达式的一部分,#include,/,函数原型在调用之前,double c_area(double r);,int main(),double v;,printf(radius:%f,area:%fn,3.24,c_area(3.24),);,v=2.4*,c_area(3.24),/3.0;,return 0;,/,函数定义在调用之后,double c_area(double r),return r*r*3.1416;,21,.,函数调用的若干问题,C,语言是一个函数式语言,所有可执行语句都必须放在某个函数体内,调用函数的函数称为,主调函数,,被调用的函数称为,被调函数,当函数调用发生时,主调函数暂停,程序控制转入被调函数,被调函数执行结束后,主调函数继续,22,.,函数调用的若干问题,#include,#include,double c_area(double r),return,pow(r,2),*3.1416;,int main(),double v;,v=2.4*,c_area(3.24),/3.0;,return 0;,main,函数,c_area,函数,pow,函数,c_area(3.24),pow(r,2),23,.,参数传递机制,形式参数在函数调用时才分配存储空间,并接受实际参数的值,实际参数可以为复杂的表达式,在函数调用前获得计算,形式参数与实际参数可同名,也可不同名,24,.,参数传递机制,参数较多时,实际参数值逐一赋值,它们必须保持数目、类型、顺序的一致,参数的赋值过程单向不可逆,函数内部对形式参数值的修改不会反映到实际参数中,函数参数一般为函数输入集的一部分,函数输出集一般使用返回值表示,只有使用特殊的手段,(,指针,/,数组,),才可以将函数参数作为函数输出集的一部分,25,.,参数传递机制,void swap(int a,int b),int t;,t=a;a=b;b=t;,int main(),int a=5,b=3;,printf(before swap:a=%d;b=%dn,a,b);,swap(a,b);,printf(after swap:a=%d;b=%dn,a,b);,return 0;,swap,函数中的,a,和,b,与,main,函数中的,a,和,b,是什么关系?,两个,printf,输出的结果是什么?,26,.,swap,函数数据区,main,函数数据区,void swap(int a,int b),int t;,/2,t=a;a=b;b=t;,/3,int main(),int a=5,b=3;,/1,swap(a,b);,/4,return 0;,5,a,0 x0012ff24,内存地址,值,变量,3,b,0 x0012ff28,3,a,0 x0012ff24,5,b,0 x0012ff28,5,a,0 x0012ff7c,3,b,0 x0012ff78,内存地址,值,变量,5,a,0 x0012ff7c,3,b,0 x0012ff78,27,.,函数示例,1.,请写一个程序,给出指定整数范围,1,,,10000,内的所有完数。判断是不是完数用一个函数完成。,int isPerfectNumber(int n),int i;,for(i=1,sum=0;i=n/2;i+),if(n%i=0),sum+=i;,return sum=n;,28,.,函数示例,2.写一个函数求两个整数的最大公约数,int gcd(int m,int n),int i;,int min=m1;i-),if(m%i=0&n%i=0),break;,return i;,29,.,函数示例,3.写一个函数判断一个数是不是素数,用函数返回值表示判断结果(非0表示是素数,0 表示不是素数),int isPrime(int n),int i,isprime=1;,for(i=2;in;i+),if(n%i=0),isprime=0;,break;,return i=n;,30,.,课堂练习,写一个函数判断传入的整数,n(100n=1,返回值表示正确转换并赋值的字段数,经常用来判断输入格式是否正确,40,.,scanf,返回值示例,(,scanf.c,),#include,int main(),int n=0;,int a=0,b=0;,n=scanf(%d%d,printf(n=%dn,n,);,printf(a=%d b=%dn,a,b);,return 0;,输入,1,:,3 4,输入,2,:,3 4.5,输入,3,:,3 a,输出,1,:,n=2,a=3 b=4,输出,2,:,n=2,a=3 b=4,输出,1,:,n=1,a=3 b=0,41,.,输入输出函数,int getchar(),从标准输入流(,stdin,)读取一个字符,缓冲输入,需要按下回车后才能获取到值,正常情况下,返回值表示读入的字符,如果返回值是,EOF,(,-1,)表示读错误或到了流结束位置,int putchar(int ch),将字符,ch,写入标准输出流(,stdout,),示例:将输入的一行小写字符转换成大写字符。(,chario.c,),42,.,时间函数,#include,time_t time(time_t*timer),获得从,1970/1/1,至今的秒数,time_t,可以看作整数类型,clock_t clock();,获得从程序开始运行至今处理器经过的时钟数,clock_t,可以看作整数类型,CLOCKS_PER_SEC,表示每秒有多少个时钟的常数,43,.,时间函数,(,time.c,),#include,#include,int main(),int start,finish;,double time;,start=clock();,.,finish=clock();,time=(finish-start)*1.0/CLOCKS_PER_SEC;,.,return 0;,对这一段程序计时,44,.,随机数函数,#include,int,rand(),产生一个,0,RAND_MAX,范围内的伪随机数,RAND_MAX,是一个系统常数,可以直接使用,void,srand,(unsigned,int,seed),设置伪随机数序列的种子,如果不设定随机数系列的种子,同一个程序两次运行得到的随机数完全相同,通常以时间作为随机数种子,45,.,随机数函数,产生,5,个随机数,(,rand1.c,),#include,#include,int main(),int i;,printf(RAND_MAX is%d.n,RAND_MAX,);,printf(Five numbers generated as follows:n);,for(i=0;i 5;i+),printf(“%d,rand(),);,printf(n);,return 0;,46,.,随机函数,用时间做种子产生,5,个随机数,(,rand2.c,),#include,#include,#include,int main(),int i;,printf(Five numbers generated as follows:n);,srand(int)time(NULL);,for(i=0;i 5;i+),printf(%d;,rand(),);,printf(n);,return 0;,47,.,随机函数,生成,5,个,low,high,范围内的随机数,(,rand3.c,),#include,#include,#include,int main(),int i,low=10,high=20;,srand(int)time(NULL);,for(i=0;i 1,,考虑,n 1,个圆盘,如果能将,n-1,个圆盘移动到某个塔座上,则可以移动第,n,个圆盘,策略:首先将,n 1,个圆盘移动到塔座,Y,上,然后将第,n,个圆盘移动到,Z,上,最后再将,n-1,个圆盘从,Y,上移动到,Z,上,57,.,汉诺塔(,hanoi,)问题,void MoveHanoi(unsigned int n,/,圆盘数量,char from,/,起始位置,char tmp,/,中转位置,char to),/,目标位置,if(n=1),/,递归结束条件,将圆盘,1,从,from,移动到,to,else,将,n 1,个圆盘从,from,以,to,为中转移动到,tmp;,/,递归,将圆盘,n,从,from,移动到,to,将,n-1,个圆盘从,tmp,以,from,为中转移动到,to;,/,递归,58,.,递归的缺点,函数调用需要额外的空间(栈)来完成,在调用次数很多的情况下会降低程序效率,递归调用中的重复计算,59,.,Fibonacci数列的两种求解方法(fib.c),/,使用递归求,Fibonacci,数列,int fib_recursion(int n),if(n=0|n=1),return 1;,return fib_recursion(n-1),+fib_recursion(n-2);,/,使用循环求,Fibonacci,数列,int fib_loop(int n),int fn,fn_1=1,fn_2=1,i;,if(n=0|n=1)return 1;,for(i=2;i=n;i+),fn=fn_1+fn_2;/,计算,f(n),fn_2=fn_1;/,更新,f(n-2),fn_1=fn;/,更新,f(n-1),return fn;,递归到循环的转换常常需要借助于高级的程序设计技术和一定的数据结构才能完成,60,.,兔子繁殖问题(Fibonacci数列),假设有一对兔子,一个月后成长为大兔子,从第二个月开始,每对大兔子生一对小兔子。不考虑兔子的死亡,求第,n,个月的兔子总数,月份,小兔子,大兔子,总数,0,1,0,1,1,0,1,1,2,1,1,2,3,1,2,3,4,2,3,5,5,3,5,8,61,兔子繁殖问题(Fibonacci数列),递推过程,F(n-1)=M2+,(M2+M1),F(n)=(M2+M1)+(M2+M1+M2),F(n)=F(n-2)+F(n-1),F(0)=1,F(1)=1,/,初始条件,F(n-2)=M1+,M2,/,设第,n-2,个月有,M1,对小兔子,,/M2,对小兔子,62,.,走楼梯(Fibonacci数列),楼梯有,n,阶台阶,上楼可以一步上,1,阶,也可以一步上,2,阶,编一程序计算共有多少种不同的走法,.,63,.,用递归方法解决求一个整数各位数字之和,假设整数为,n,,各位数字之和为,sum,递归结束条件:,n10,,,sum=,个位数,+,去掉个位数之后各位数字之和,64,.,#include,int sum(int n),if(n10),return n;,else,return n%10+sum(n/10);,int main(),int n;,scanf(%d,printf(sum=%dn,sum(n);,return 0;,65,.,小结,定义函数的要素,函数头,函数名,使用函数需要的名称,合法的标识符,返回值类型,函数计算结果的类型,参数表,完成计算需要的数据(,数量和类型,),函数体,double c_area (double r),return r*r*3.1416;,返回值类型,函数名,参数表,函数体,函数头,66,.,小结,函数定义中的形参和函数调用中的实参,#include,#include,double c_area(double r),return,pow(r,2),*3.1416;,int main(),double v;,v=2.4*,c_area(3.24),/3.0;,return 0;,形参,实参,实参,实参,形参是定义函数时用来表示函数输入数据类型和名称的变量定义,实参是调用函数时实际传入的数据,可以是变量、常数、表达式或其他函数调用返回的值,67,小结,局部变量,在函数内部定义的变量、形式参数、复合结构内定义的变量,全局变量,在所有函数之外定义的变量,递归函数,函数直接或间接调用自己形成递归,68,.,作业,P,76,P,77,:,8,,,15,P,129,P,130,:,5,,,20,69,.,展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




c语言函数章节经典教案ppt课件.ppt



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/12609231.html