




已阅读5页,还剩71页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1/76,第4章模块化程序设计,2/76,主要内容,4.1函数4.2变量的存储属性4.3模块的编译与链接4.4宏定义与宏替换,3/76,4.1.1设计C语言程序就是设计函数,4/76,一个管理信息系统的结构,5/76,文本菜单实例,6/76,例4.1显示菜单算法,7/76,#include例4.1一个显示菜单的主函数#includevoidmain(void)charchoice;printf(t*大学信息管理系统*n);printf(t=n);printf(t1.办公室管理2.教务管理n);printf(t3.科研管理4.人事管理n);printf(t5.财物管理6.设备管理n);printf(t7.图书资料管理8.后勤管理n);printf(t0.退出本系统n);printf(t-n);printf(t请您在上述功能中选择(08):);,8/76,dochoice=getche();switch(choice)case1:funt1();break;case2:funt2();break;case3:funt3();break;case4:funt4();break;case5:funt5();break;case6:funt6();break;case7:funt7();break;case8:funt8();break;case0:exit(0);break;default:printf(tInputerror!n);break;while(1);,9/76,4.1.2函数结构,函数头函数体,1.函数头函数类型函数名(形参列表),2.函数体(1)声明语句(2)可执行语句(3)return语句计算型函数,例sin(),返回一个计算结果完成一项具体工作,返回完成结果例printf函数,执行成功时,返回显示的字符数;失败时,返回一个负整数只执行一个过程,不产生返回值:void函数,10/76,例4.2求一个整数的绝对值,intabsolutevalue(intx)return(x0?x:-x);,11/76,例4.3输出n个空格的函数,voidspc(intn)inti;for(i=0;in;i+)printf();return;,12/76,例4.4,floaty(floatx)if(x10)return(2*n+3);elsereturn;,14/76,3.函数中变量的作用域,作用域是指一个程序段中的代码的作用范围。一个函数中所定义的变量只在本函数中有效,在其他函数中不能使用这个变量。即使在不同的函数中定义了同名变量,它们也是指不同的变量。,15/76,例4.6(错误例),#includeintfunc(intx)x=5;returnx+3;intmain(void)printf(x=%dn,x);return0;,16/76,4.空函数,voidnull(void),17/76,4.1.3函数定义与函数声明,函数定义:按照C语言的语法规则引入新的函数;函数不能嵌套定义。函数声明:对所用到的函数的特征进行必要的说明,编译系统以函数声明所给出的信息为依据,对调用表达式进行检测。,18/76,函数定义和声明举例,函数定义doublefunc(doublea,intb,charc)函数声明可以是:doublefunc(doublea,intb,charc);doublefunc(double,int,char);以下为错误的声明:doublefunc(a,b,c);func(doublea,intb,charc);,19/76,函数的显式声明风格,voidfun1(void);floatfun2(float,int);intmain(void)voidfun1(void)x=fun2(a,b);floatfun2(floatx,inty)fun1();,20/76,4.1.4虚实结合与传值调用,只有当执行函数调语句时,函数才被执行:(1)将函数调语句中的实参的值传送给函数形参。(2)将流程从调用处转到被调用函数的开头,开始执行函数体中的代码。,21/76,1.函数调用时的虚实结合,#includefloatadd(unsignedint,unsignedint);intmain(void)floatx=1.5,y=-5.7;printf(%f+%f=%fn,x,y,add(x,y);floatadd(unsignedinta,unsignedintb)printf(a=%u,b=%un,a,b);returna+b;,a=1,b=42949672911.500000+-5.700000=4294967292.000000,22/76,1.函数调用时的虚实结合(错误例),#includefloatadd();intmain(void)floatx=1.5,y=-5.7;printf(%f+%f=%fn,x,y,add(x,y);floatadd(unsignedinta,unsignedintb)printf(a=%u,b=%un,a,b);returna+b;,a=0,b=10732175361.500000+-5.700000=1073217536.000000,23/76,2.传值调用的虚实结合过程,传值调用的特点:形参与实参各占一个独立的存储空间形参的存储空间是函数被调用时才分配的函数返回时,形参存储空间被释放,24/76,例4.8交换两个变量(错误例),voidswap(intx,inty);voidmain(void)inta=3,b=5;swap(a,b);printf(a=%d,b=%dn,a,b);voidswap(intx,inty)inttemp;temp=x;x=y;y=temp;printf(x=%d,y=%dn,x,y);,x=5,y=3a=3,b=5,25/76,4.1.5递归调用,在调用一个函数的过程中调用该函数本身,称为函数的递归调用。递归调用简称递归。编写递归程序有两个要点:一是要找到正确的递归算法,这是编写递归程序的基础;二是要确定算法的递归结束条件,这是决定递归程序能否正常结束的关键。,26/76,例4.9求n的阶乘,27/76,longrfact(intn);voidmain(void)printf(%ldn,rfact(0);printf(%ldn,rfact(3);printf(%ldn,rfact(5);printf(%ldn,rfact(-1);longrfact(intn)if(n%cn,a,c);movedisk(n-1,b,a,c);,34/76,汉诺塔代码,voidmain(void)intn;printf(Pleasesinputthenumberofdiskes:);scanf(%d,35/76,运行结果,Pleasesinputthenumberofdiskes:3Thestepmoving3diskesis:A-CA-BC-BA-CB-AB-CA-C,36/76,程序分析,37/76,4.2变量的存储属性,变量是有类型的,数据类型是对变量运算属性的抽象,决定了该变量的取值范围和可施加的运算种类。除此之外,变量还有如下存储属性:(1)一个变量在程序的哪个范围内是可以使用的变量的可用域(或称可见性)(2)变量何时生成以及何时被撤销变量的生存期(3)它存储在哪种类型的存储器中以及采用何种机制进行存储变量的存储区,38/76,1.局部变量与全局变量,局部变量:也称内部变量,是在函数(或块)内定义的,其作用域仅限于函数(或块)内。全局变量:也称外部变量,是在函数外部定义的变量,它不属于任何一个函数。全局变量属于一个源程序文件,其作用域是从定义点开始到整个源程序结束,39/76,例4.11局部变量的作用域,voidmain(void)inta=3;printf(a1=%dn,a);intb=5;printf(a2=%d,b=%dn,a,b);printf(a3=%dn,a);,a1=3a2=3,b=5a3=3,40/76,例4.12局部变量的作用域,voidmain(void)inta=3;printf(a1=%dn,a);inta=5;printf(a2=%dn,a);,a1=3a2=5,41/76,课堂练习:局部变量的作用域,#includevoidf1(void),f2(intx);voidmain(void)intx=1;f1();f2(x);printf(x=%dn,x);voidf1(void)intx=3;printf(x=%dn,x+=3);voidf2(intx)printf(x=%dn,x+);,x=6x=1x=1,42/76,例4.13全局变量的作用域,voida(void)inta=1;printf(a1=%dn,a);intx=3;voidb(void)printf(x1=%dn,x);voidmain(void)a();b();printf(x2=%dn,x);,a1=1x1=3x2=3,43/76,4.14全局变量与局部变量同名,#includeintx=3;voidmain(void)intx=5;printf(x=%dn,x);,x=5,当局部变量与全局变量同名时,局部变量会屏蔽全局变量,44/76,改写例4.8:交换两个变量,voidswap(void);inta=3,b=5;voidmain(void)printf(a=%d,b=%dn,a,b);swap();printf(a=%d,b=%dn,a,b);voidswap()inttemp;temp=a;a=b;b=temp;,a=3,b=5a=5,b=3,45/76,2.动态变量与静态变量,数据区分为自动存储区、静态存储区和动态分配区自动存储区是按照栈结构组织的存储区,局部变量通常被存放在栈区,这些变量在进入所在的块时被创建,所在的块结束时被撤销。静态存储区是在程序编译时就分配的存储区。其中中的变量在程序开始执行时被创建并自动初始化(数值变量被初始化为0),当程序结束时才被撤销。所以通常称静态变量的生存期是永久的。,46/76,4.2.2C语言中变量的存储类型,C语言将可用域和生存期整合成4种存储类型。(1)自动局部类型在函数内部用标识符auto或register声明。(2)静态局部类型在函数内部用static声明。(3)静态全局类型在函数外部用static声明(4)全局类型在函数外直接声明,通称外部变量。,47/76,1auto和register存储类型,对于局部变量和函数形参:auto数据类型变量名=初值表达式register数据类型变量名=初值表达式例如:,autofloata,b,c;registerinti,j,k;func(registerinta,registerintb),48/76,2.静态局部类型.,使用static修饰局部变量,即为静态局部类型具有“永久生存期,局部可见性”优点:既避免了全局变量的值被多处修改所引起的副作用,又可以使函数基于前一次调用的值继续工作。,49/76,例4.15一个增量函数的应用,voidincreament(void);voidmain(void)increament();increament();increament();voidincreament(void)staticintx=0;x+;printf(%dn,x);,123,50/76,inti=1;voidother(void);voidmain(void)staticinta;intb=-10,c=0;printf(i=%d,a=%d,b=%d,c=%dn,i,a,b,c);c+=8;other();printf(i=%d,a=%d,b=%d,c=%dn,i,a,b,c);i+=10;other();voidother()staticinta=2,b;intc=10;a+=2;i+=4;c+=5;printf(i=%d,a=%d,b=%d,c=%dn,i,a,b,c);b=a;,i=1,a=0,b=-10,c=0i=5,a=4,b=0,c=15i=5,a=0,b=-10,c=8i=19,a=6,b=4,c=15,51/76,3.静态全局类型,在多文件程序中,未用static声明的外部变量的作用域是整个程序。用static声明的外部变量,其作用域仅限于所在文件。例如,当多个函数需要共同使用一个全局变量时,可以将这些个函数组织在同一文件中,而将该全局变量定义为静态的,保证文件的独立性。,52/76,例4.16随机数函数,staticunsignedintr;random(void)r=(r*123+59)%65536;return(r);unsignedrandom_start(unsignedintseed)r=seed;voidmain(void)inti,n;printf(Pleaseentertheseed:);scanf(%d,53/76,4.外部变量的定义与声明,对于非静态外部变量,除了可以定义一次外部变量之外,还可以多次进行声明(引用性声明)。(1)通过声明将外部变量的作用域在本文件范围内扩充向前引用(2)利用声明将作用域扩大至其他文件建立外部链接(3)全局变量的副作用,54/76,例4.17外部变量(1)向前引用,voidgx(void),gy(void);voidmain(void)externintx,y;printf(1:x=%dty=%dn,x,y);y=246;gx();gy();voidgx(void)externintx,y;x=135;printf(2:x=%dty=%dn,x,y);intx,y;voidgy(void)printf(3:x=%dty=%dn,x,y);,1:x=0y=02:x=135y=2463:x=135y=246,55/76,例4.18外部变量(2)外部链接,/111.cintx,y;charch;main()x=12;y=24;f1();printf(%cn,ch);,/222.cexternintx,y;externcharch;voidf1(void)printf(%d,%dn,x,y);ch=a;,12,24a,56/76,例4.19外部变量(4)副作用,voidprt(void);inti;voidmain(void)for(i=0;i5;i+)prt();voidprt(void)for(i=0;i=0,/文件is_digit.h#defineFALSE0#defineTRUE1externintis_digit(charch);,62/76,4.3.2用项目管理多文件程序的编译与链接过程,多文件程序的编译与链接过程是比较麻烦的。为了便于用户进行多文件程序的编译与链接,各种程序开发软件都提供了用项目(project)管理多文件程序的编译与链接过程。在C+中,用“工程工作区”来组织程序InVisualC+,youorganizeyourprojectsandtheirelementsinaprojectworkspace.Aprojectworkspacecancontainmultipleprojects.,63/76,4.3.3头文件,格式1:#include只在系统目录中寻找格式2:#include文件标识首先在指定的目录中寻找;若没找到,则按系统目录寻找头文件中一般包括:函数声明、数据声明、常量定义、宏定义和注释等;通常不包含一般函数定义、常量聚集定义。,64/76,文件包含举例,文件“aaa.h”内容为:#defineCHa#defineSTRprogram#definePRD(x)printf(%dn,x);#definePRC(x)printf(%cn,x);#definePRS(x)printf(%sn,x);,文件“bbb.c”内容为:#include#includeaaa.hvoidmain(void)inti=2;PRD(i);PRC(CH);PRS(STR);,2aprogram,65/76,4.4宏定义与宏替换,4.4.1字符串宏定义及其基本格式4.4.2使用宏定义需要注意的问题4.4.3撤销已定义的宏4.4.4带参数的宏定义,66/76,4.4.1字符串宏定义及其基本格式,#define的基本应用是将一个字符串定义为一个宏名,格式为:#define宏名宏体使用宏替换的优点提高程序的可读性提高程序的可维护性例题:已知半径r,圆柱高h,求圆柱体的侧面积x、全面积y和体积z。,67/76,#definePI3.14voidmain(void)floatr,h,x,y,z;r=1.2;h=3.5;x=2*PI*r*h;y=2*PI*r*(h+r);z=PI*r*r*h;printf(%f,%f,%fn,x,y,z);,68/76,例4.21,#include#defineBEGIN#defineENDvoidmain(void)BEGINinti,j;floatx,y;scanf(%d%d%f%f,END,69/76,4.4.3撤销已定义的宏,用#undef可以撤销已定义的宏,#include#defineBEGIN#defineENDvoidmain(void)BEGINinti,j;floatx,y;scanf(%d%d%f%f,END,#undefBEGIN#undefENDvoidspc(intn)inti;for(i=0;in;i+)printf();return;,70/76,4.4.4带参数的宏,#define宏名(形参表)宏体,71/76,#defineCHa#defineAB11#defineAB22#defineSTRprogram#defineMM(a,b)(a)*2+(b)#definePRD(x)printf(%dn,x);#definePRC(x)printf(%cn,x);#definePRS(x)printf(%sn,x);main()inti,j,k;i=2;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电玩城绩效管理办法
- 营销管理部管理办法
- 装备领域采购管理办法
- 电影院食品管理办法
- 人防工程平时管理办法
- 螯合剂结算管理办法
- 管理办法与工作规定
- 质量部培训管理办法
- 规范社保福利管理办法
- 专利集中审查管理办法
- DBJ51-T 188-2022 预拌流态固化土工程应用技术标准
- 体育产业经营管理课件第一章导论
- 临床医学晕厥课件
- 2023门球竞赛规则电子版图文并茂
- 部编人教版七年级上册初中语文 第3课 雨的四季 课前预习单
- 部编版四年级语文上册第5课《一个豆荚里的五粒豆》优秀PPT课件
- 大班社会《班级规则我遵守》课件
- DBJ51 014-2021 四川省建筑地基基础检测技术规程
- 能源概论__第一章能源概述PPT课件
- 小学一年级体育下册教案全册
- PTB220串行数字气压计用户手册
评论
0/150
提交评论