免费C程序设计教程5.ppt
- 文档编号:1425989
- 上传时间:2022-10-22
- 格式:PPT
- 页数:25
- 大小:97.50KB
免费C程序设计教程5.ppt
《免费C程序设计教程5.ppt》由会员分享,可在线阅读,更多相关《免费C程序设计教程5.ppt(25页珍藏版)》请在冰豆网上搜索。
1,10/22/2022,C+程序设计教程(第二版),第五章函数机制Chapter5FunctionMechanism,清华大学出版社钱能,10/22/2022,2,函数C+的函数是完成既定任务的功能(过程)体,它涵盖了数学函数和一般过程所以基于过程编程本质上就是基于函数编程函数机制一是指程序运行过程中对函数调用的数据管理和处理过程二是指编程中函数的使用规范它包括函数参数的属性和传递规则,函数返回类型的匹配与审查,函数名字的识别原则,函数体效率的选择,函数体中数据的访问权限等,10/22/2022,3,第五章内容,函数性质(FunctionCharacter)指针参数(PointerParameters)栈机制(StackMechanism)函数指针(FunctionPointers)main参数(ThemainsParameters)递归函数(RecursiveFunctions)函数重载(unctionOverload),10/22/2022,4,1.函数性质(FunctionCharacter),函数:
对输入参数负责,埋头做自己的事,最终返回结果函数组织:
通过在函数中进行函数调用来扩展运行的规模,层层叠叠的函数构成树结构做法:
将若干个函数组织成文件,又将若干个文件构成程序的办法来进行编程分工,10/22/2022,5,跨越数学函数的C+函数,有四种形态,返回类型func(参数列表);返回类型func();voidfunc(参数列表);voidfunc();,10/22/2022,6,黑盒原则:
函数使用者应关注性能,而少去左右实现细节,intcost(intn,intm)returnn*10;/运输n次m斤intcost(intn,intm)returnm*10;/运输m次n斤/选择下一个最好的intcost(intn,intm)return(nm?
m:
n)*10;/保证运输次数最少,10/22/2022,7,参数传递:
形参是对实参的克隆,克隆必须遵守类型匹配规则,voidf(Typea);/a为形参voidg()Typex;f(x);/x为实参,a实体,x实体,复制,Type类型,Type类型,10/22/2022,8,.指针参数(PointerParameters),传递指针:
指针参数也是值传递的,指针值的真正用途是进行数据间访,以达到操作数据块(大小由之)的目的传递引用:
引用参数本质上也是值传递的,它表现为名字传递,即以形参的名字来代替实参名字如果实参不是实体名而是表达式,那么其表达式所对应的临时实体取名为形参,并要求其为常量引用意义:
指针和引用参数的存在,使函数实际上可以访问非局部的数据区,函数的黑盒性便名存实亡但这并非一定坏事,指针是一把双刃剑,或灵巧或邪恶引用是为了防范指针非安全的无意操作,10/22/2022,9,voidmySort(int*b,intsize);voidf()inta=3,5,7,1,8,4,9;mySort(a,sizeof(a)/sizeof(a0);,传递指针须附带传递单位数据的个数,元素个数,传指针,10/22/2022,10,限制无意操作带来的意外副作用,vectoradd(/向量加法constvector,10/22/2022,11,3.栈机制(StackMechanism),运行时内存布局,10/22/2022,12,未初始化局部数据的不确定性,#includevoidf()intb;/未初始化std:
cout”a“n”;f();/-/8804248/2788048,10/22/2022,13,#includeinta=5;intb=6;intmain()int*ap=(int*)4202660;*ap=8;std:
couta“n”;std:
coutint(/8/4202664,指针的无约束性,5,6,4202660,4202664,a,b,4202660,ap,10/22/2022,14,4.函数指针(FunctionPointers),函数类型:
函数类型因参数类型、个数和排列顺序的不同而不同,也因返回类型的不同而不同函数指针:
指向代码区中函数体代码的指针.不同的函数类型,其函数指针也不同用法:
函数指针经常用作函数参数,以传递连函数本身都不知道的处理过程(函数),10/22/2022,15,不同的函数指针,不能相互赋值,intg(int);int(*gp)(int)=g;voidf();void(*fp)();fp=f;gp=fp;/error,不同的函数,10/22/2022,16,函数指针作为参数传递(函数名看作是函数指针),boollessThanBitSum(inta,intb)intsuma=0,sumb=0;for(intx=a;x;x/=10)suma+=x%10;for(intx=b;x;x/=10)sumb+=x%10;returnsumasumb;intmain()inta=33,61,12,19,14,71,78,59;sort(aa,aa+8,lessThanBitSum);for(inti=0;i8;+i)coutaai;coutn;/1214336171195978,10/22/2022,17,指定函数指针类型,定义函数指针数组,typedefvoid(*MenuFun)();voidf1()coutgood!
n;voidf2()coutbetter!
n;voidf3()coutbest!
n;MenuFunfun=f1,f2,f3;,指针类型名,10/22/2022,18,5.main参数(ThemainsParameters),程序运行:
操作系统读入命令以启动程序重定向命令:
操作系统读入命令后,识别并自我消化的参数main函数参数:
操作系统读入命令后,不能识别参数,将其直接传递给所启动的程序,10/22/2022,19,命令重定向,/f0509.cpp#includeusingnamespacestd;intmain()for(inta,b;cinab;)couta+b”n”;,E:
ch05f0509abc.txt1721357,10/22/2022,20,main函数参数,/f0510.cpp#includeusinganmespacestd;intmain(intargc,char*argv)for(inti=0;iargc;+i)coutargviendl;,E:
ch05f0510a1a2a3f0510a1a2a3,10/22/2022,21,6.递归函数(RecursiveFunctions),形式上:
一个正在执行的函数调用了自身(直接递归).或者,一个函数调用了另一个函数,而另一个函数却调用了本函数(间接递归)本质上:
程序在运行中调用了相同代码实体的函数,却在函数栈中重新复制了该函数的整套数据,由于每套数据中的参数也许不同,导致了计算条件发生变化,使得函数得以逐步逼近终极目标而运行,10/22/2022,22,递归函数可以转换为非递归函数例如,求最大公约数,longgcd1(inta,intb)/递归版if(a%b=0)returnb;returngcd(b,a%b);/-longgcd2(inta,intb)/非递归版for(inttemp;b;a=b,b=temp)temp=a%b;returna;/-,10/22/2022,23,7.函数重载(FunctionOverload),函数重载:
一组概念相同,处理对象(参数)不同的过程,出于方便编程的目的,用同一个函数名字来命名的技术称为函数重载参数默认:
一个函数,既可以严谨和地道的调用,也可以省略参数,轻灵地调用,达到此种方便编程目的的技术称为参数默认重载与参数默认:
它们都是通过参数的变化来分辨处理任务的不同如果参数决定了不同的处理过程,则应重载,否则参数默认更简捷一些,10/22/2022,24,重载是不同的函数,以参数的类型,个数和顺序来分辨,voidprint(double);voidprint(int);voidfunc()print
(1);/voidprint(int);print(1.0);/voidprint(double);print(a);/voidprint(int);print(3.1415f);/voidpirnt(double);,10/22/2022,25,参数默认是通过不同参数来分辨一个函数调用中的行为差异,voiddelay(inta=2);/函数声明时intmain()delay();/默认延迟秒delay
(2);/延迟秒delay(5);/延迟秒voiddelay(inta)/函数定义时intsum=0;for(inti=1;i=a;+i)for(intj=1;j3500;+j)for(intk=1;k100000;+k)sum+;,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 免费 程序设计 教程