收藏 分销(赏)

函数与宏替换省公共课一等奖全国赛课获奖课件.pptx

上传人:快乐****生活 文档编号:4149064 上传时间:2024-08-02 格式:PPTX 页数:29 大小:139.01KB
下载 相关 举报
函数与宏替换省公共课一等奖全国赛课获奖课件.pptx_第1页
第1页 / 共29页
函数与宏替换省公共课一等奖全国赛课获奖课件.pptx_第2页
第2页 / 共29页
函数与宏替换省公共课一等奖全国赛课获奖课件.pptx_第3页
第3页 / 共29页
函数与宏替换省公共课一等奖全国赛课获奖课件.pptx_第4页
第4页 / 共29页
函数与宏替换省公共课一等奖全国赛课获奖课件.pptx_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、第6章函数与宏替换 第1页本章内容n6.1 模块化设计n6.2 函数定义与调用n6.3 函数递归调用n6.4 变量存放类型、作用域n6.5 宏替换n6.6 综合应用第2页6.1模块化设计 n模块化设计思想 把一个大问题分解成若干个比较轻易求解小问题,然后分别求解 n模块设计标准 模块独立n功效单一。n模块间联络力争简单。n数据局部化。模块规模要适当分解模块要注意层次第3页6.2函数定义与调用 n6.2.1标准库函数 math.h头文件中函数:abs()、sin()、cos()、exp()、fabs()、floor()、rand()等 stdio.h头文件中函数:fgets()、fopen()、

2、fprintf()、fputc()、gets()、puts()、fread()、getchar()、putchar()、open()、close()、printf()、scanf()等 ctype.h头文件中函数:isalnum()、isalpha()、ispunch()、isspace()、isupper()、isxdigit()等string.h头文件中函数:strcat()、strchr()、strcmp()、strcpy()、strlen()、strlwr()、strncat()、strncpy()、strstr()、strupr()等 第4页6.2.2函数定义 类型说明符 函数名称(

3、形式参数类型及说明列表)/*以下为函数体*/局部变量申明部分 语句序列int max(int n1,int n2)int t;if(n1n2)t=n1;elset=n2;return t;第5页函数申明部分 n类型说明符定义了函数中return语句返回值类型 省略类型说明符,函数返回一个整型值 函数没有返回值,能够定义为void n函数名称遵照C语言标识符命名规则 n形式参数类型及说明列表用逗号分隔形式参数列表 每个列表项均由“类型说明符”和“形式参数名称”两部分组成 没有参数,括号依然是必须要有 第6页函数体 n和main函数一样,必须将变量申明语句和其它语句序列用括起来 n假如有返回值,需

4、要经过return语句返回 nreturn语句普通形式为:return(表示式表示式);或者return 表示式表示式;nreturn语句有两个主要作用返回一个值;退出当前函数。第7页6.2.3函数调用 n调用函数定义在主调函数之前,主调函数能够直接调用 n被调用函数定义在主调函数之后,则需要在主调函数中申明被调用函数。n函数申明格式类型名 函数名称(形式参数类型列表);注意:n函数申明语句后面需加分号。n在申明函数时,函数参数名称能够省略,但参数类型不能省略,且参数类型个数、类型、次序必须保持一致。main()int max(int,int);/*申明max函数,也可改为int max(in

5、t n1,int n2);*/c=max(a,b);int max(int n1,int n2)第8页函数调用 n无参函数调用普通形式为:函数名();n有参函数调用普通形式为:函数名(实参表示式1,实参表示式2,)c=max(a,b);printf(“%d”,c);第9页函数嵌套调用 n在C语言中,允许在定义一个函数时调用另外一个函数,则在该函数被调用过程中将发生另一次函数调用 图6.2 函数嵌套调用【例6.1】验证哥德巴赫猜测。猜测内容:任何一个大于4偶数,都能够表示为两个素数和。第10页6.2.4参数传递 n形参和实参概念 函数定义时使用参数称之为形式参数,简称形参 函数调用时使用参数,称

6、之为实际参数,简称实参 在函数调用时,实参个数要和形参相等,而且类型必须一致,另外实参加形参出现次序也要一一对应。第11页程序举例n【例6.2】输入两个数,输出两个数中最大值#include stdio.hmain()int a,b,m;int max(int,int);/*申明max函数*/printf(nPlease input two numbers(a,b):);scanf(%d,%d,&a,&b);m=max(a,b);/*调用max函数*/printf(max=%dn,m);int max(int x,int y)int t;t=xy?x:y;return t;第12页形参和实参特

7、点 n形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配内存单元。所以,形参只有在函数内部有效形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。n实参能够是常量、变量、表示式、函数实参能够是常量、变量、表示式、函数等,在进行函数调用时,它们必须含有确定值,方便把这些值传送给形参。所以,应预先用赋值、输入等方法使实参取得确定值。n实参和形参在数量上,类型上,次序上应严格一致,不然会产生类型不匹配错误。同时,实参和形参含有一一对应关系实参和形参含有一一对应关系。n函数调用中发生数据传送是单向数据传送是单向。即只能把实参值传送给形参,而不能把形参值反向地传送给

8、实参。所以在函数调用过程中,形参值不论怎么改变,实参中值都不会改变。第13页6.3函数递归调用函数递归调用n函数在执行过程中对自己调用称为函数递归调用 n在使用递归方法处理问题时,需要分成两个步骤(1)递归边界条件。也就是描述问题最简单情况,它本身不需要递归定义,只需给出符合什么样条件程序中止递归及中止递归时返回值。(2)寻找问题规律。将问题转换为更简单相同问题,然后向着递归边界条件方向递归。第14页程序举例【例6.3】利用递归方法计算n!。【例6.4】有5个人坐在一起,问第5个人多少岁,他说比第4个人大2岁;问第4个人多少岁,他说比第3个人大2岁;问第3个人多少岁,他说比第2个人大2岁;问第

9、2个人多少岁,他说比第1个人大2岁;最终问第一个人多少岁,他说是30岁,请问第5个人多少岁?。【例6.5】利用递归方法计算猴子吃桃问题。有一天小猴子摘若干个桃子,当即吃了二分之一还以为不过瘾,又多吃了一个。第二天接着吃剩下桃子中二分之一,仍以为不过瘾又多吃了一个,以后小猴子都是吃尚存桃子二分之一多一个。到第10天早上小猴子再去吃桃子时候,看到只剩下一个桃子。问小猴子第一天共摘下了多少个桃子?第15页6.4变量存放类型、作用域变量存放类型、作用域n6.4.1变量作用域 局部变量 n函数内作定义说明,其作用域仅限于函数内部 n注意问题:主函数中定义变量也只能在主函数中使用,不能在其它函数中使用形参

10、变量是属于被调函数局部变量,实参变量是属于主调函数局部变量允许在不一样函数中使用相同变量名,它们代表不一样对象,分配不一样单元,互不干扰,也不会发生混同第16页全局变量 n在函数外部定义变量,也就是在程序开头申明 n全局变量定义形式为:extern 类型说明符 变量名,变量名 extern能够省去不写 比如:int a,b;等效于:extern int a,b;n注意问题:全局变量在定义时就已分配了内存单元,全局变量定义可作初始赋值,全局变量说明不能再赋初始值,只是表明在函数内要使用某全局变量全局变量可加强函数模块之间数据联络,但同时也降低了函数独立性。在同一源文件中,允许全局变量和局部变量同

11、名。在局部变量作用域内,全局变量不起作用。第17页程序举例#include stdio.hint a=8,b=4;/*定义全局变量a,b*/void fun()int a,b;/*定义局部变量a,b*/a=10;b=5;printf(fun:a+b=%dn,a+b);main()fun();printf(“main:a+b=%dn”,a+b);上例输出结果为:fun:a+b=15main:a+b=12;第18页6.4.2变量存放类型变量存放类型n静态存放在变量定义时就分配存放单元并一直保持不变,直至整个程序结束 分类n静态(static)n外部(extern)n动态存放 在程序执行过程中,使用

12、它时才分配存放单元,使用完成马上释放 第19页自动变量 n定义普通形式为:auto 类型标识符 变量列表其中,auto能够省略 n自动变量特点作用域仅限于定义该变量结构内 自动变量属于动态存放方式,只有在使用它,即定义该变量函数被调用时才给它分配存放单元,开始它生存期 不一样结构中允许使用同名变量而不会混同 第20页静态变量 n定义普通形式为:static 类型标识符类型标识符 变量列表变量列表比如:static int a;特点:程序结束前不释放内存。第21页程序举例#include int add()static int a=10;/*定义静态局部变量,并赋初值*/a+=10;return

13、 a;main()int i;for(i=1;i=5;i+)printf(%d.add=%dn,i,add();运行上面程序,输出结果为:1.add=202.add=303.add=404.add=505.add=60第22页外部变量 n申明外部变量普通形式为:extern 类型标识符 变量列表比如:/*f1.c*/#include main()extern int num;/*申明外部变量num,表明在函数中将用到外部变量num*/init();printf(num=%dn,num);/*f2.c*/int num;/*定义全局变量num*/void init()num=100;第23页6.

14、5 宏替换 n6.5.1 宏替换n6.5.2 文件包含第24页6.5.1 宏替换n宏定义功效是用一个标识符来表示一个字符串,标识符称为宏名 n无参宏 无参宏定义普通形式为:#define 比如:#define EX (x*y+z)注意事项:n在宏代换时,只是简单将宏名代换为对应表示式,注意括号使用n宏定义是用宏名来表示一个字符串,在宏代换时又以该字符串简单替换宏名,字符串中能够包含任何字符,能够是常数,也能够是表示式,预处理程序对它不作任何检验 n宏定义不是说明或语句,在行尾不能加分号n宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束 n源程序中双引号引发来字符串常量中,若出现宏名,

15、则预处理程序不对其作宏代换 n宏定义允许嵌套n习惯上宏名用大写字母表示,方便于与变量区分 第25页有参宏 n有参宏定义普通形式为:#define 宏名(形参表)字符串n有参宏调用普通形式为:宏名(实参表);n注意事项:有参宏定义中,宏名和形参表之间不能有空格出现 在有参宏定义中,形参不分配内存单元,所以无须作类型定义 在宏定义中形参是标识符,而宏调用中实参能够是表示式 在宏定义中,字符串内形参通常要用括号括起来以防止犯错 第26页程序举例#define PI 3.1415926#define S(a)PI*a*amain()float r,s;printf(nPlease input r:);

16、scanf(%f,&r);s=S(r+1);printf(s=%fn,s);#define PI 3.1415926#define S(a)PI*(a)*(a)main()float r,s;printf(nPlease input r:);scanf(%f,&r);s=1/S(r+1);printf(s=%fn,s);#define PI 3.1415926#define S(a)(PI*(a)*(a)main()float r,s;printf(nPlease input r:);scanf(%f,&r);s=1/S(r+1);printf(s=%fn,s);第27页6.5.2 文件包含文

17、件包含n文件包含命令行普通形式为:#include 文件名文件名或#include n比如:#include stdio.h#include math.h#include n注意事项:包含命令中文件名能够用双引号括起来,也能够用尖括号括起来 一个include命令只能指定一个被包含文件,若有多个文件要包含,则需用多个include命令 文件包含允许嵌套,即在一个被包含文件中又能够包含另一个文件 第28页6.6 综合应用【例6.8】假如一个5位数个位与万位相同,十位与千位相同,则称这个数为回文数,如12321。编写一个函数判断一个5位数是否为回文数。【例6.9】一个数假如恰好等于它因子之和,这个数就称为“完数”,比如6=123 编程找出31000全部完数。【例6.10】假如每对兔子每个月繁殖一对子兔,而子兔在出生后第二个月就有生殖能力,试问第一月有一对小兔子第十二月时有多少对兔子?即:1、1、2、3、5由数列规律建立数学模型。第29页

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服