欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    C程序设计华中科技大学课件第三章.ppt

    • 资源ID:6503610       资源大小:4.44MB        全文页数:61页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C程序设计华中科技大学课件第三章.ppt

    C+程序设计 第三章,授课教师:李战春,2,本章内容,3,引例,编程计算输出33+4.63+433,double p=1,x=3;int n=3;while(n-)p*=x;coutpendl;,33,?4.63,?xn,4,调用power(3.0,3),函数power(3.0,3),return 27.0,主程序后续语句,double power(double x,int n)/求x的n次幂double p=1;while(n-)p*=x;return p;int main()int n=3;double x1=3,x2=4.6,x3=43;double s;s=power(x1,n)+power(x2,n)+power(x3,n);cout“s=s endl;return 0;,定义,5,数据类型 函数名(形式参数表),语句序列,定义函数返回值的数据类型。,函数返回值由 return 语句给出,3.1.2 函数的定义,函数运行时需要的数据,由主调函数提供。,函数体可以为空,称为空函数。,“做什么”,“拿什么来做”,“结果是什么”,“怎么做”,6,3.1.2 函数的定义,/返回两个整数中的较大值 int Max(int a,int b)int t;if(ab)t=a;else t=b;return t;,函数头,函数数据类型=返回值数据类型,7,3.1.2 函数的定义,无参函数,/打印一个表头void TableHead()cout*endl;cout*example*endl;cout*endl;,函数头,函数数据类型=返回值数据类型,int input()/输入满足要求的数据int n;coutn;while(n=5);return n;,8,return 语句,return语句的作用:返回函数值 不再执行后续语句,程序控制返回调用点 一个函数体内可以有多个return 语句 表达式返回值的类型与函数类型不相同时,自动强制转换成函数的类型,return语句的格式:return 表达式;,【例3.3】设计函数,根据三角形的三边长求面积。如果不能构成三角形,给出提示信息。分析:函数为计算三角形面积,一般三角形返回面积值,若不能构成三角形则返回-1。设计一个主函数完成函数测试。根据返回值情况输出相应结果。,9,【例3.3】程序:,float TriangleArea(float a,float b,float c)if(a+babc;area=TriangleArea(a,b,c);if(area=-1)cout(a,b,c)不能构成三角形!endl;elsecout三角形(a,b,c)面积为:areaendl;return 0;,return 语句,10,讨论:-函数可以有返回值,也可以没有返回值。对于没有返回值的函数,功能只是完成一定操作,应将返回值类型定义为void,函数体内可以没有return语句,当需要在程序指定位置退出时,可以在该处放置一个:return;,return 语句,11,数据类型 函数名(形式参数表),语句序列,定义函数返回值的数据类型。,函数返回值由 return 语句给出,3.1.2 函数的定义,函数运行时需要的数据,由主调函数提供。,“做什么”,“拿什么来做”,“结果是什么”,“怎么做”,12,3.1.3 函数的调用,函数调用所谓函数调用,就是使程序转去执行函数体。,无参函数的调用格式:函数名()有参函数的调用格式:函数名(实际参数表)实际参数简称实参,用来将实际参数的值传递给形参,因此可以是常量、具有值的变量或表达式。,在C+中,除了主函数外,其他任何函数都不能单独作为程序运行。任何函数功能的实现都是通过被主函数直接或间接调用进行的。,13,【例3.1】输入两个实数,输出其中较大的数。其中求两个实数中的较大数用函数完成。,程序如下:#include using namespace std;float max(float a,float b)return(a=b?a:b);int main()float a,b;coutab;coutab 中较大数为max(a,b)endl;return 0;,main()函数,调用max(2.5,4.7),函数max(2.5,4.7),return 4.7,主程序后续语句,14,编写函数把华氏温度转化为摄氏温度,公式为:C=(F-32)5/9;在主函数中计算输出30、35、40、45、50、55、60华氏温度对应的摄氏温度对照表。某大桥按照车辆的类型收取过桥费用,自行车免费,摩托车2元,小汽车5元,大客车8元,大货车10元。请编写函数按照车辆的类型计算相应的过桥费用,在主函数中输入车辆的类型然后计算输出费用。,15,3.2 函数的参数传递、返回值及函数声明,函数的参数传递及传值调用 函数返回值 函数声明,16,【例3.2】实参和形参对应关系的示例。,调用power(4.6,3),函数power(4.6,3),return 97.336,主程序后续语句,float power(float x,int n)/求x的n次幂float p=1;while(n-)p*=x;return p;int main()int n=3;float x=4.6;char c=a;coutpower(x,n)=power(x,n)endl;coutpower(c,n)=power(c,n)endl;coutpower(n,x)=power(n,x)endl;return 0;,17,【例3.2】实参和形参对应关系的示例。,调用power(a,3),函数power(97,3),return 912673,主程序后续语句,float power(float x,int n)/求x的n次幂float p=1;while(n-)p*=x;return p;int main()int n=3;float x=4.6;char c=a;coutpower(x,n)=power(x,n)endl;coutpower(c,n)=power(c,n)endl;coutpower(n,x)=power(n,x)endl;return 0;,18,调用power(3,4.6),函数power(3,4),return 81,主程序后续语句,float power(float x,int n)/求x的n次幂float p=1;while(n-)p*=x;return p;int main()int n=3;float x=4.6;char c=a;coutpower(x,n)=power(x,n)endl;coutpower(c,n)=power(c,n)endl;coutpower(n,x)=power(n,x)endl;return 0;,【例3.2】实参和形参对应关系的示例。,19,函数声明,语法上对程序文件中函数的排列次序要求满足先定义后使用。对于函数,只要在调用之前作函数声明(Function Declaration),则函数定义放在任何位置程序都能正确编译运行。,函数声明的引入:,函数声明的格式:,函数声明是一条以分号结束的语句:数据类型 函数名(形式参数表);,20,例如【例3.3】中求三角形面积的函数声明为:float TriangleArea(float a,float b,float c);或float TriangleArea(float,float,float);但下面的函数原型是错误的:int TriangleArea(float,float,float);/错误,返回值类型不同float TriangleArea(int,int,int);/错误,参数类型不同float TriangleArea(float,float);/错误,参数个数不同,float TriangleArea(float a,float b,float c)if(a+b=c)|(a+c=b)|(b+c=a)return-1;float s;s=(a+b+c)/2;return sqrt(s*(s-a)*(s-b)*(s-c);,21,函数声明,【例3.4】输出所有满足下列条件的正整数m:10m1000且m、m2、m3均为回文数。,分析:回文指左右对称的序列。如121、353等就是回文数。判断整数是否回文数用函数实现,其思想是将该数各位拆开后反向组成新的整数,如果该整数与原数相等则为回文数。,m m*m m*m*m11 121 1331101 10201 1030301111 12321 1367631,运行结果:,22,bool palindrome(int);/函数声明int main()int m;coutsetw(10)msetw(20)m*m“setw(20)m*m*mendl;for(m=11;m1000;m+)if(palindrome(m),【例3.4】输出回文数,23,bool palindrome(int n)/判断回文数int digit10;int m=n,i=0,j;do digiti=n%10;n/=10;i+;while(n0);for(j=0;ji;j+)n=n*10+digitj;return(n=m);,【例3.4】输出回文数,24,3.3 全局变量和局部变量,全局变量 局部变量,25,3.3.2 全局变量,在所有函数之外定义的变量称为全局变量。,全局变量存放在全局数据区,因编译器自动将该区清为全0,如果用户在定义时不显式给出初始化值,则等效初始化为全0。,全局变量可定义在程序开头,也可定义在中间位置,该全局变量在定义处之后的任何位置都是可以访问的,称为可见的。,全局变量引入:,26,打印200,调用func(),函数func(),200*2=400,打印400,n=100,n=100*2=200,【例3.5】多个函数使用全局变量的例子。int n=100;void func()n*=2;int main()n*=2;coutnendl;func();coutnendl;return 0;,27,3.3.3 局部变量,定义在函数内或块内的变量称为局部变量。,程序中使用的绝大多数变量都是局部变量。,局部变量在程序运行到它所在的块时建立在栈中,该块执行完毕局部变量占有的空间即被释放。故亦称为自动变量。,局部变量在定义时可加修饰词auto,但通常省略。局部变量在定义时若未初始化,其值为随机数。,局部变量引入:,28,打印main()中的t=3.5,调用fun(),函数fun(),打印fun()中的t=5,打印main()中的t=3.5,t=5,void fun()auto int t=5;/fun()中的局部变量,auto可省略coutfun()中的t=tendl;int main()float t=3.5;/main()函数中的局部变量coutmain()中的t=tendl;fun();coutmain()中的t=tendl;return 0;,【例3.6】使用局部变量的例子。,29,3.5 作用域与标识符的可见性,块域 函数声明域 文件域,30,作用域:指标识符能够被使用的范围。只有在作用域内标识符才可以被访问(称为可见)。,本节重点讨论局部域和文件域(全局域),其中局部域包括块域和函数声明域。任何标识符作用域的起始点均为标识符说明处。,作用域与标识符的可见性,31,函数中定义的标识符,包括形参和函数体中定义的局部变量,作用域都在该函数内,也称作函数域。,块指一对大括号括起来的程序段。块中定义的标识符,作用域在块内。,复合语句是一个块。,函数也是一个块。,复合语句中定义的标识符,,作用域仅在该复合语句中。,块的引入:,3.5.1 块域,32,3,5,a=3 b=5,a=5 b=3,【例3.7】输入两数,按从大到小的顺序保存,并输出结果。,结果,栈,t,=3,int main()int a,b;/具有函数域 coutab;cout=a)int t;/具有块域 t=a;a=b;b=t;/交换a,b的值 couta=atb=bendl;return 0;,上述程序若在最后一个cout语句处增加:couttendl;则编译时会提示错误,因为变量t的作用域只在if语句中,其它地方不可见。,3.5.1 块域,33,由VC+运行,结果如下:输入两整数:3 5调用前:实参a=3,b=5调用中交换前:形参a=3,b=5交换后:形参a=5,b=3调用后:实参a=3,b=5 交换失败,3.5.1 块域,局部变量具有局部作用域,使得程序在不同块中可以使用同名变量。这些同名变量各自在自己的作用域中可见,在其它地方不可见,【例3.8】设计函数完成两数交换,用主函数进行测试。,34,200 300,内 i=500,内 j=600,内n=500+600=1100,1100 500 600,100,200+300=500,500,500 200 300,外部 i=200,外部 j=300,【例3.9】显示同名变量可见性。int n=100;#include using namespace std;int main()int i=200,j=300;cout ntitjendl;/内部块 int i=500,j=600,n;n=i+j;cout ntitj endl;/输出局部变量n cout:nendl;/输出全局变量n n=i+j;/修改全局变量cout ntitj endl;return 0;,35,3.6 存储类型与标识符的生命期,存储类型 生命期,36,自动存储类型自动变量为用auto说明的变量,通常auto缺省。局部变量都是自动变量,生命期开始于块的执行,结束于块的结束,其原因是自动变量的空间分配在栈中,块开始执行时系统自动分配空间,块执行结束时系统自动释放空间。故自动变量的生命期和作用域是一致的。,3.6.1 存储类型,37,3.6.1 存储类型,静态存储类型static说明的变量称为静态变量。位置不同区别局部静态变量和全局静态变量,也称内部静态变量和外部静态变量。静态变量均存储在全局数据区,如果程序未显式给出初始化值,则等效初始化为全0。静态变量占有的空间要到整个程序执行结束才释放,故静态变量具有整个程序执行期间的生命期。,38,局部静态变量是定义在块中的静态变量,编译系统在全局数据区为其开辟空间并保存数据,如果显式给出初始化值,则在该块第一次执行时完成,且只进行一次。,【例3.10】自动变量与局部静态变量的区别,3.6.1 存储类型,39,【例3.10】自动变量与局部静态变量的区别 int st()static int t=100;/局部静态变量 t+;return t;int at()int t=100;/自动变量 t+;return t;int main()int i;for(i=0;i5;i+)coutat()t;coutendl;for(i=0;i5;i+)coutst()t;coutendl;return 0;,1,2,3,4,5,101,101,101,101,101,3.6.1 存储类型,40,1,2,101,3,4,5,102,103,104,105,【例3.10】自动变量与局部静态变量的区别 int st()static int t=100;/局部静态变量 t+;return t;int at()int t=100;/自动变量 t+;return t;int main()int i;for(i=0;i5;i+)coutat()=t;coutendl;for(i=0;i5;i+)coutst()t;coutendl;return 0;,3.6.1 存储类型,41,3.7 函数的递归调用,自己调用自己,42,可以看出是用阶乘定义阶乘,这种自己定义自己的方法称为递归定义。,递归的引入,递归是一种描述问题的方法,或称算法。递归的思想可以简单地描述为“自己调用自己”。例如用如下方法定义阶乘:,43,递归定义的阶乘函数:int fac(int n)int y;if(n=0|n=1)y=1;else y=n*fac(n-1);return y;只要设计主函数调用阶乘函数,即可实现计算阶乘。,递归的引入,递归函数必须定义递归终止条件(Stopping condition),避免无穷递归(Infinite Recursion)。,44,#include int fac(int n)int y;coutnt;if(n=0|n=1)y=1;else y=n*fac(n-1);coutyt;return y;int main()coutn4!=fac(4)endl;return o;,n=4,cout4;y=4*fac(3);,fac(4)=,cout2;y=2*fac(1);,n=2,cout1;y=1;cout1;return 1;,n=1,n=3,cout3;y=3*fac(2);,cout24;return 24;,cout6;return 6;,cout2;return 2;,24,递归的引入,【例3.12】求4!,45,递归过程分析,递归函数的执行分为“递推”和“回归”两个过程这两个过程由递归终止条件控制,即逐层递推,直至递归终止条件,然后逐层回归。每次调用发生时都首先判断递归终止条件,46,3.8 函数的一些高级议题,3.8.1 函数重载 3.8.2 默认参数3.8.3 内联函数,47,3.8.1 函数重载,重载的引入C+中,如果需要定义几个功能相似,而参数类型不同的函数,那么这样的几个函数可以使用相同的函数名,这就是函数重载,48,因此在定义重载函数时必须保证参数类型不同,仅仅返回值类型不同是不行的。函数重载的好处在于,可以用相同的函数名来定义一组功能相同或类似的函数,程序的可读性增强。,3.8.1 函数重载,重载匹配规则(1)如果有严格匹配的函数,就调用该函数;(2)参数内部转换后如果匹配,调用该函数;(3)通过用户定义的转换寻求匹配。,49,3.8.1 函数重载,3+5=,调用sum(3,5),函数sum(3,5),return 8,2.2+5.6=,调用sum(2.2,5.6),函数double sum(2.2,5.6),return 7.8,3.5+4+8=,调用sum(3.5,4,8),函数float sum(3.5,4.0,8.0),return 15.5,结束,8,7.8,15.5,int sum(int a,int b)return a+b;Double sum(double a,double b)return a+b;float sum(float a,float b,float c)return a+b+c;int main()cout3+5=sum(3,5)endl;cout2.2+5.6=sum(2.2,5.6)endl;cout3.5+4+8=sum(3.5,4,8)endl;return 0;,【例3.16】重载函数的应用。,50,3.8.2 默认参数,默认参数的引入默认参数指在定义函数时为形参指定默认值(缺省值)。这样的函数在调用时,对于默认参数,可以给出实参值,也可以不给出参数值。如果给出实参,将实参传递给形参进行调用,如果不给出实参,则按默认值进行调用,51,void delay(int loops=5);void delay(int loops)/延时函数,默认延时5个时间单位for(;loops0;loops-);int main()delay(3);cout延时3个时间单位endl;delay();/等同于delay(5)cout延时5个时间单位endl;return 0;,1,2,3,延时3个时间单位,1,2,3,4,5,延时5个时间单位,3.8.2 默认参数,【例3.1 7】默认参数,52,使用要点:默认参数可以有多个,但所有默认参数必须放在参数表的右侧,即先定义所有的非默认参数,再定义默认参数。这是因为在函数调用时,参数自左向右逐个匹配,当实参和形参个数不一致时只有这样才不会产生二义性。在同一个作用域中一个参数只能被指定一次默认值,不可以在声明和定义中同时指定默认值,即使默认值一样也不行。,3.8.2 默认参数,53,int fun2(int,int=10,int=20);/函数声明中给出缺省值。参数名也可省略void fun1()int fun2(int a,int b,int c)/定义中不再给出缺省值习惯上,缺省参数在公共头文件包含的函数声明中指定,否则缺省实参只能用于包含该函数定义的文件中的函数调用。,3.8.2 默认参数,54,3.8.3 内联函数,内联函数的引入:为了协调好效率和可读性之间的矛盾,C+提供了另一种方法,即定义内联函数,方法是在定义函数时用修饰词inline。,55,3.8.3 内联函数,因使用频度很高,说明为内联函数。,请看如下程序段,读入一行字符串,逐个判断是否为数字字符:inline int IsNumber(char ch)return ch=0,56,数据类型 函数名(形式参数表),语句序列,3.1.2 函数的定义,“做什么”,“拿什么来做”,“结果是什么”,“怎么做”,57,函数声明,函数声明的格式:,函数声明是一条以分号结束的语句:数据类型 函数名(形式参数表);,58,编写函数把华氏温度转化为摄氏温度,公式为:C=(F-32)5/9;在主函数中计算输出30、35、40、45、50、55、60华氏温度对应的摄氏温度对照表。,59,某大桥按照车辆的类型收取过桥费用,自行车免费,摩托车2元,小汽车5元,大客车8元,大货车10元。请编写函数按照车辆的类型计算相应的过桥费用,在主函数中输入车辆的类型然后计算输出费用。,例题,1.试编程求给定的日期是那年的第几天。2.试编程判断给定的两个正整数是否互质。3.电文加密的算法是:将字母A变成G,a变成g,B变成H,b变成h,依次类推,U变成A,V变成B,等等。其他字符不变。从键盘输入一串电文,用函数将其加密,再在主函数中输出加密后的串。4.试编程求给定的一个正整数的位数。,例题,5.编写有字符型参数C和整形参数N的函数,让他们显示出由字符C组成的三角形。其方式为第1行有1个字符C,第2行有2个字符C,等等。,

    注意事项

    本文(C程序设计华中科技大学课件第三章.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开