ImageVerifierCode 换一换
格式:PPTX , 页数:71 ,大小:453.62KB ,
资源ID:2927014      下载积分:5 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/2927014.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     索取发票    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(用函数实现模块化程序设计22222市公开课一等奖百校联赛特等奖课件.pptx)为本站上传会员【精****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

用函数实现模块化程序设计22222市公开课一等奖百校联赛特等奖课件.pptx

1、第第7章章 用函数实现模块化程序设计用函数实现模块化程序设计7.1为何要用函数为何要用函数7.2怎样定义函数怎样定义函数7.3调用函数调用函数7.4对被调用函数申明和函数原型对被调用函数申明和函数原型7.5函数嵌套调用函数嵌套调用7.6函数递归调用函数递归调用7.7数组作为函数参数数组作为函数参数7.8局部变量和全局变量局部变量和全局变量7.9变量存放方式和生存期变量存放方式和生存期7.10关于变量申明和定义关于变量申明和定义7.11内部函数和外部函数内部函数和外部函数第1页7.8局部变量和全局变量局部变量和全局变量7.8.1局部变量局部变量7.8.2全局变量全局变量第2页7.8.1 局部变量

2、局部变量定义变量可能有三种情况:定义变量可能有三种情况:u在函数开头定义在函数开头定义u在函数内复合语句内定义在函数内复合语句内定义u在函数外部定义在函数外部定义第3页7.8.1 局部变量局部变量在一个函数内部定义变量只在本函数范在一个函数内部定义变量只在本函数范围内有效围内有效在复合语句内定义变量只在本复合语句在复合语句内定义变量只在本复合语句范围内有效范围内有效在在函数内部函数内部或复合语句内部定义变量称或复合语句内部定义变量称为为“局部变量局部变量”第4页floatf1(inta)intb,c;charf2(intx,inty)inti,j;intmain()intm,n;return0

3、;a、b、c仅在仅在此函数内此函数内有效有效x、y、i、j仅在仅在此函数内此函数内有效有效m、n仅在此仅在此函数内函数内有效有效第5页floatf1(inta)intb,c;charf2(intx,inty)inti,j;intmain()inta,b;return0;类似于不一类似于不一样班同名学样班同名学生生a、b也仅在此也仅在此函数内函数内有效有效第6页intmain()inta,b;intc;c=a+b;c仅在此复合仅在此复合语句内语句内有效有效a、b仅在此复仅在此复合语句内合语句内有效有效第7页7.8.2全局变量全局变量在函数内定义变量是局部变量,而在函数在函数内定义变量是局部变量,

4、而在函数之外定义变量称为外部变量之外定义变量称为外部变量外部变量是全局变量外部变量是全局变量(也称全程变量也称全程变量)全局变量可认为本文件中其他函数所共用全局变量可认为本文件中其他函数所共用有效范围为从定义变量位置开始到根源文有效范围为从定义变量位置开始到根源文件结束件结束第8页intp=1,q=5floatf1(inta)intb,c;charc1,c2;charf2(intx,inty)inti,j;intmain()intm,n;return0;p、q、c1、c2为为全局变量全局变量第9页intp=1,q=5floatf1(inta)intb,c;charc1,c2;charf2(in

5、tx,inty)inti,j;intmain()intm,n;return0;p、q有效范围有效范围c1、c2有效范围有效范围第10页例例7.14有一个一维数组,内放有一个一维数组,内放10个学个学生成绩,写一个函数,当主函数调用此函生成绩,写一个函数,当主函数调用此函数后,能求出平均分、最高分和最低分。数后,能求出平均分、最高分和最低分。解题思路:调用一个函数可以得到一个函解题思路:调用一个函数可以得到一个函数返回值,现在希望通过函数调用能得到数返回值,现在希望通过函数调用能得到3个结果。可以利用全局变量来达到此目。个结果。可以利用全局变量来达到此目。第11页#includefloatMax

6、=0,Min=0;intmain()floataverage(floatarray,intn);floatave,score10;inti;printf(Pleaseenter10scores:n);for(i=0;i10;i+)scanf(%f,&scorei);ave=average(score,10);printf(max=%6.2fnmin=%6.2fnaverage=%6.2fn,Max,Min,ave);return0;第12页floataverage(floatarray,intn)inti;floataver,sum=array0;Max=Min=array0;for(i=1;

7、iMax)Max=arrayi;elseif(arrayiMin)Min=arrayi;sum=sum+arrayi;aver=sum/n;return(aver);第13页 ave score 10 Max Min aver array n Max Minmain函数函数average函数函数提议不在必要时不要使用全局变量提议不在必要时不要使用全局变量第14页例例7.15若外部变量与局部变量同名,分若外部变量与局部变量同名,分析结果。析结果。第15页#includeinta=3,b=5;intmain()intmax(inta,intb);inta=8;printf(“max=%dn”,ma

8、x(a,b);return0;intmax(inta,intb)intc;c=ab?a:b;return(c);a为为局局部部变量变量,仅,仅在此函数内有效在此函数内有效b为全部为全部变量变量第16页#includeinta=3,b=5;intmain()intmax(inta,intb);inta=8;printf(“max=%dn”,max(a,b);return0;intmax(inta,intb)intc;c=ab?a:b;return(c);a、b为为局局部部变量变量,仅,仅在此函数内有效在此函数内有效第17页7.9变量存放方式和生存期变量存放方式和生存期7.9.1动态存放方式与静态

9、存放方式动态存放方式与静态存放方式7.9.2局部变量存放类别局部变量存放类别7.9.3全局变量存放类别全局变量存放类别7.9.4存放类别小结存放类别小结第18页7.9.1动态存放方式与静态存放方式动态存放方式与静态存放方式从变量作用域角度来观察,变量能够分为从变量作用域角度来观察,变量能够分为全局全局变量变量和和局部变量局部变量从变量值存在时间从变量值存在时间(即生存期即生存期)观察观察,变量存变量存放有两种不一样方式:放有两种不一样方式:静态存放方式静态存放方式和和动态存动态存放方式放方式u静态存放方式是指在程序运行期间由系统静态存放方式是指在程序运行期间由系统分配固定存放空间方式分配固定存

10、放空间方式u动态存放方式是在程序运行期间依据需要动态存放方式是在程序运行期间依据需要进行动态分配存放空间方式进行动态分配存放空间方式第19页程序区程序区静态存放区静态存放区动态存放区动态存放区用户区用户区将将数据存放在数据存放在此区此区全局变量全部存放全局变量全部存放在静态存放区中在静态存放区中函数形式参数函数形式参数函函数中定义没有用关键数中定义没有用关键字字static申明变量申明变量函函数调用时现场保护和数调用时现场保护和返回地址等返回地址等存放在动存放在动态存放区态存放区程序程序开始执行时给全局开始执行时给全局变量分配存放区,程序变量分配存放区,程序执行完成就释放。在程执行完成就释放。

11、在程序执行过程中占据固定序执行过程中占据固定存放单元存放单元函数调用开始时分配,函数调用开始时分配,函数结束时释放。在程函数结束时释放。在程序执行过程中,这种分序执行过程中,这种分配和释放是动态配和释放是动态第20页每一个变量和函数都有两个属性:每一个变量和函数都有两个属性:数据类型数据类型和数据和数据存放类别存放类别u数据类型数据类型,如整型、浮点型等,如整型、浮点型等u存放类别存放类别指是数据在内存中存放方式指是数据在内存中存放方式(如静态如静态存放和动态存放存放和动态存放)u存放类别存放类别包含包含:自动、静态、存放器、外部自动、静态、存放器、外部u依据变量存放类别,能够知道变量作用域和

12、生依据变量存放类别,能够知道变量作用域和生存期存期第21页7.9.2 局部变量存放类别局部变量存放类别1.自动变量自动变量(auto变量变量)u局部变量,假如不专门申明存放类别,都局部变量,假如不专门申明存放类别,都是动态地分配存放空间是动态地分配存放空间u调用函数时,系统会给调用函数时,系统会给局部局部变量分配存放变量分配存放空间,调用结束时就自动释放空间。所以空间,调用结束时就自动释放空间。所以这类局部变量称为自动变量这类局部变量称为自动变量u自动变量用关键字自动变量用关键字auto作存放类别申明作存放类别申明第22页7.9.2 局部变量存放类别局部变量存放类别intf(inta)auto

13、intb,c=3;能够省略能够省略第23页7.9.2 局部变量存放类别局部变量存放类别2.静态局部变量静态局部变量(static局部变量局部变量)希望函数中局部变量在函数调用结束后希望函数中局部变量在函数调用结束后不消失而继续不消失而继续保留原值保留原值,即其占用存放,即其占用存放单元不释放,在下一次再调用该函数时,单元不释放,在下一次再调用该函数时,该变量已经有值该变量已经有值(就是上一次函数调用就是上一次函数调用结束时值结束时值),这时就应该指定该局部变这时就应该指定该局部变量为量为“静态局部变量静态局部变量”,用关键字,用关键字static进行申明进行申明第24页例例7.16考查静态局部

14、变量值。考查静态局部变量值。#includeintmain()intf(int);inta=2,i;for(i=0;i3;i+)printf(“%dn”,f(a);return0;intf(inta)autointb=0;staticc=3;b=b+1;c=c+1;return(a+b+c);调用三次调用三次每调用一次,开辟每调用一次,开辟新新a和和b,但,但c不是不是第25页例例7.16考查静态局部变量值。考查静态局部变量值。#includeintmain()intf(int);inta=2,i;for(i=0;i3;i+)printf(“%dn”,f(a);return0;intf(int

15、a)autointb=0;staticc=3;b=b+1;c=c+1;return(a+b+c);03bc第一次调用开始第一次调用开始第26页例例7.16考查静态局部变量值。考查静态局部变量值。#includeintmain()intf(int);inta=2,i;for(i=0;i3;i+)printf(“%dn”,f(a);return0;intf(inta)autointb=0;staticc=3;b=b+1;c=c+1;return(a+b+c);03bc第一次调用期间第一次调用期间14第27页例例7.16考查静态局部变量值。考查静态局部变量值。#includeintmain()int

16、f(int);inta=2,i;for(i=0;i3;i+)printf(“%dn”,f(a);return0;intf(inta)autointb=0;staticc=3;b=b+1;c=c+1;return(a+b+c);bc第一次调用结束第一次调用结束147第28页例例7.16考查静态局部变量值。考查静态局部变量值。#includeintmain()intf(int);inta=2,i;for(i=0;i3;i+)printf(“%dn”,f(a);return0;intf(inta)autointb=0;staticc=3;b=b+1;c=c+1;return(a+b+c);bc第二次

17、调用开始第二次调用开始04第29页例例7.16考查静态局部变量值。考查静态局部变量值。#includeintmain()intf(int);inta=2,i;for(i=0;i3;i+)printf(“%dn”,f(a);return0;intf(inta)autointb=0;staticc=3;b=b+1;c=c+1;return(a+b+c);bc第二次调用期间第二次调用期间04 51第30页例例7.16考查静态局部变量值。考查静态局部变量值。#includeintmain()intf(int);inta=2,i;for(i=0;i3;i+)printf(“%dn”,f(a);retur

18、n0;intf(inta)autointb=0;staticc=3;b=b+1;c=c+1;return(a+b+c);bc第二次调用结束第二次调用结束158第31页例例7.16考查静态局部变量值。考查静态局部变量值。#includeintmain()intf(int);inta=2,i;for(i=0;i3;i+)printf(“%dn”,f(a);return0;intf(inta)autointb=0;staticc=3;b=b+1;c=c+1;return(a+b+c);bc第三次调用开始第三次调用开始05第32页例例7.16考查静态局部变量值。考查静态局部变量值。#includein

19、tmain()intf(int);inta=2,i;for(i=0;i3;i+)printf(“%dn”,f(a);return0;intf(inta)autointb=0;staticc=3;b=b+1;c=c+1;return(a+b+c);bc第三次调用期间第三次调用期间05 61第33页例例7.16考查静态局部变量值。考查静态局部变量值。#includeintmain()intf(int);inta=2,i;for(i=0;i3;i+)printf(“%dn”,f(a);return0;intf(inta)autointb=0;staticc=3;b=b+1;c=c+1;return(

20、a+b+c);bc第三次调用结束第三次调用结束169第34页例例7.16考查静态局部变量值。考查静态局部变量值。#includeintmain()intf(int);inta=2,i;for(i=0;i3;i+)printf(“%dn”,f(a);return0;intf(inta)autointb=0;staticc=3;b=b+1;c=c+1;return(a+b+c);c整个程序结束整个程序结束6第35页例例7.16考查静态局部变量值。考查静态局部变量值。#includeintmain()intf(int);inta=2,i;for(i=0;i3;i+)printf(“%dn”,f(a)

21、;return0;intf(inta)autointb=0;staticc=3;b=b+1;c=c+1;return(a+b+c);在编译时赋初值在编译时赋初值在函数调用时赋初值在函数调用时赋初值第36页例例7.16考查静态局部变量值。考查静态局部变量值。#includeintmain()intf(int);inta=2,i;for(i=0;i3;i+)printf(“%dn”,f(a);return0;intf(inta)autointb=0;staticc=3;b=b+1;c=c+1;return(a+b+c);若不赋若不赋初值初值,是,是0若不若不赋初值赋初值,不确定,不确定第37页例例

22、7.16考查静态局部变量值。考查静态局部变量值。#includeintmain()intf(int);inta=2,i;for(i=0;i3;i+)printf(“%dn”,f(a);return0;intf(inta)autointb=0;staticc=3;b=b+1;c=c+1;return(a+b+c);仅在本函数内有效仅在本函数内有效第38页例例7.17输出输出1到到5阶乘值。阶乘值。解题思绪:能够编一个函数用来进行连乘,解题思绪:能够编一个函数用来进行连乘,如第如第1次调用时进行次调用时进行1乘乘1,第,第2次调用时次调用时再乘以再乘以2,第,第3次调用时再乘以次调用时再乘以3,依

23、此规,依此规律进行下去。律进行下去。第39页#includeintmain()intfac(intn);inti;for(i=1;i=5;i+)printf(“%d!=%dn”,i,fac(i);return0;intfac(intn)staticintf=1;f=f*n;return(f);若非必要,不要多若非必要,不要多用静态局部变量用静态局部变量第40页3.存放器变量存放器变量(register变量变量)普通情况下,变量(包含静态存放方式和普通情况下,变量(包含静态存放方式和动态存放方式)值是存放在内存中动态存放方式)值是存放在内存中存放器变量存放器变量允许将局部变量值放在允许将局部变量

24、值放在CPU中中存放器中存放器中现在计算机能够识别使用频繁变量,从而现在计算机能够识别使用频繁变量,从而自动地将这些变量放在存放器中,而不需自动地将这些变量放在存放器中,而不需要程序设计者指定要程序设计者指定第41页7.9.3 全局变量存放类别全局变量存放类别全局变量都是存放在静态存放区中。所全局变量都是存放在静态存放区中。所以它们生存期是固定,存在于程序整个以它们生存期是固定,存在于程序整个运行过程运行过程一般来说,外部变量是在函数外部定义一般来说,外部变量是在函数外部定义全局变量,它作用域是从变量定义处开全局变量,它作用域是从变量定义处开始,到本程序文件末尾。在此作用域内,始,到本程序文件

25、末尾。在此作用域内,全局变量可认为程序中各个函数所引用。全局变量可认为程序中各个函数所引用。第42页1.在一个文件内扩展外部变量作用域在一个文件内扩展外部变量作用域外部变量有效作用范围只限于定义处到外部变量有效作用范围只限于定义处到本本文件结束。文件结束。假如假如用关键字用关键字extern对对某某变量作变量作“外外部变量申明部变量申明”,则则能够从能够从“申明申明”处起,处起,正当地使用该外部变量正当地使用该外部变量第43页例例7.18调用函数,求调用函数,求3个整数中大者。个整数中大者。解题思绪:用解题思绪:用extern申明外部变量,扩展申明外部变量,扩展外部变量在程序文件中作用域。外部

26、变量在程序文件中作用域。第44页#includeintmain()intmax();externintA,B,C;scanf(“%d%d%d”,&A,&B,&C);printf(maxis%dn,max();return0;intA,B,C;intmax()intm;m=AB?A:B;if(Cm)m=C;return(m);第45页2.将外部变量作用域扩展到其它文件将外部变量作用域扩展到其它文件u假如一个程序包含两个文件,在两个文件中都假如一个程序包含两个文件,在两个文件中都要用到同一个外部变量要用到同一个外部变量Num,不能分别在两,不能分别在两个文件中各自定义一个外部变量个文件中各自定义一

27、个外部变量Numu应应在任一个文件中定义外部变量在任一个文件中定义外部变量Num,而在,而在另一文件中用另一文件中用extern对对Num作作“外部变量申外部变量申明明”u在编译和连接时,系统会由此知道在编译和连接时,系统会由此知道Num有有“外部链接外部链接”,能够从别处找到已定义外部变量,能够从别处找到已定义外部变量Num,并将在另一文件中定义外部变量,并将在另一文件中定义外部变量num作用域作用域扩展扩展到本文件到本文件第46页例例7.19给定给定b值,输入值,输入a和,求和,求a*b和和am值。值。解题思绪:解题思绪:u分别编写两个文件模块,其汉字件分别编写两个文件模块,其汉字件fil

28、e1包含包含主函数,另一个文件主函数,另一个文件file2包含求包含求am函数。函数。u在在file1文件中定义外部变量文件中定义外部变量A,在,在file2中用中用extern申明外部变量申明外部变量A,把,把A作用域扩展到作用域扩展到file2文件。文件。第47页文件文件file1.c:#includeintA;intmain()intpower(int);intb=3,c,d,m;scanf(%d,%d,&A,&m);c=A*b;printf(%d*%d=%dn,A,b,c);d=power(m);printf(%d*%d=%dn,A,m,d);return0;第48页文件文件file2

29、.c:externA;intpower(intn)inti,y=1;for(i=1;i=n;i+)y*=A;return(y);编译和运行包含多个编译和运行包含多个文件程序,可参考文件程序,可参考C程序设计学习辅导程序设计学习辅导一书一书“C语言上机指南语言上机指南”部分部分第49页3.将外部变量作用域限制在本文件中将外部变量作用域限制在本文件中有时在程序设计中希望一些外部变量只限有时在程序设计中希望一些外部变量只限于被本文件引用。这时能够在定义外部变于被本文件引用。这时能够在定义外部变量时加一个量时加一个static申明。申明。file1.cstaticintA;intmain()file2

30、.cexternA;voidfun(intn)A=A*n;只能用于本文件只能用于本文件本文件依然不能用本文件依然不能用第50页说明说明:u不要误认为对外部变量加不要误认为对外部变量加static申明后才采取申明后才采取静态存放方式,而不加静态存放方式,而不加static是采取动态存放是采取动态存放u申明局部变量存放类型和申明全局变量存放类申明局部变量存放类型和申明全局变量存放类型含义是不一样型含义是不一样u对于对于局部变量局部变量来说,申明存放类型作用是指定来说,申明存放类型作用是指定变量存放区域以及由此产生生存期问题,而对变量存放区域以及由此产生生存期问题,而对于于全局变量全局变量来说,申明

31、存放类型作用是变量作来说,申明存放类型作用是变量作用域扩展问题用域扩展问题第51页用用static申明一个变量作用是:申明一个变量作用是:(1)对对局部变量局部变量用用static申明,把它分配在静申明,把它分配在静态存放区,该变量在整个程序执行期间不释放,态存放区,该变量在整个程序执行期间不释放,其所分配空间一直存在。其所分配空间一直存在。(2)对对全局变量全局变量用用static申明,则该变量作用申明,则该变量作用域只限于本文件模块域只限于本文件模块(即被申明文件中即被申明文件中)。第52页注意:用注意:用auto、register、static申明申明变量时,是在定义变量基础上加上这些关

32、变量时,是在定义变量基础上加上这些关键字,而不能单独使用。键字,而不能单独使用。下面使用方法不对:下面使用方法不对:inta;statica;编译时会被认为编译时会被认为“重新定义重新定义”。第53页7.9.4 存放类别小结存放类别小结对一个数据定义,需要指定两种属性:对一个数据定义,需要指定两种属性:u数据类型和存放类别数据类型和存放类别,分别使用两个关键字分别使用两个关键字比如:比如:staticinta;autocharc;registerintd;u能够用能够用extern申明已定义外部变量申明已定义外部变量比如:比如:externb;静态局部整型变量或静静态局部整型变量或静态外部整型

33、变量态外部整型变量自动变量,在自动变量,在函数内定义函数内定义存放器变量,存放器变量,在函数内定义在函数内定义将已定义外部变量将已定义外部变量b作作用域扩展至此用域扩展至此第54页(1)从作用域角度分,有局部变量和全从作用域角度分,有局部变量和全局变量。它们采取存放类别以下:局变量。它们采取存放类别以下:按作用域角度分按作用域角度分局部变量局部变量全局变量全局变量自动变量自动变量静态局部变量静态局部变量存放器变量存放器变量静态外部变量静态外部变量外部变量外部变量形式参数能够定义为自形式参数能够定义为自动变量或存放器变量动变量或存放器变量第55页(2)从变量存在时间区分从变量存在时间区分,有动态

34、存放有动态存放和静态存放两种类型。静态存放是程序和静态存放两种类型。静态存放是程序整个运行时间都存在整个运行时间都存在,而动态存放则是在而动态存放则是在调用函数时暂时分配单元调用函数时暂时分配单元按生存期分按生存期分动态存放动态存放静态静态存放存放自动变量自动变量存放器变量存放器变量静态局部变量静态局部变量外部变量外部变量形式参数形式参数静态外部变量静态外部变量第56页(3)从变量值存放位置来区分从变量值存放位置来区分,可分为可分为:按变按变量值量值存放存放位置位置分分内存中静态存放区内存中静态存放区内存中动态存放区内存中动态存放区静态局部变量静态局部变量静态外部变量静态外部变量自动变量和形式

35、参数自动变量和形式参数存放器变量存放器变量外部变量外部变量CPU中存放器中存放器第57页()关于作用域和生存期概念关于作用域和生存期概念对一个变量属性能够从两个方面分析对一个变量属性能够从两个方面分析:u作用域作用域:假如一个变量在某个文件或函数范围假如一个变量在某个文件或函数范围内是有效,就称该范围为该变量内是有效,就称该范围为该变量作用域作用域u生存期生存期:假如一个变量值在某一时刻是存在,假如一个变量值在某一时刻是存在,则认为这一时刻属于该变量则认为这一时刻属于该变量生存期生存期作用域作用域是从是从空间空间角度,角度,生存期生存期是从是从时间时间角角度度二者有联络但不是同一回事二者有联络

36、但不是同一回事第58页inta;intmain()f2();f1();voidf1()autointb;f2();voidf2()staticintc;a作用域作用域b作用域作用域c作用域作用域文件文件file1.c第59页a生存期生存期b生存期生存期c生存期生存期mainf2f1mainf2f1main程序执行过程程序执行过程第60页变量存放类变量存放类别别函函 数数 内内函函 数数 外外作用域作用域存在性存在性作用域作用域存在性存在性自动变量和自动变量和存放器变量存放器变量静静态态局部局部变变量量静静态态外部外部变变量量(只限本只限本文件文件)外部外部变变量量各种各种类类型型变变量作用域和

37、存在性情况量作用域和存在性情况第61页(5)static对局部变量和全局变量作用不一样对局部变量和全局变量作用不一样u局部变量使变量由动态存放方式改变为静态存放局部变量使变量由动态存放方式改变为静态存放方式方式u全局变量使变量局部化全局变量使变量局部化(局部于本文件局部于本文件),但仍为但仍为静态存放方式静态存放方式u从作用域角度看从作用域角度看,凡有凡有static申明申明,其作用域都其作用域都是局限是局限,或者是局限于本函数内或者是局限于本函数内(静态局部变量静态局部变量),或者局限于本文件内或者局限于本文件内(静态外部变量静态外部变量)第62页7.10 关于变量申明和定义关于变量申明和定

38、义普通为了叙述方便,把建立存放空间普通为了叙述方便,把建立存放空间变变量量申明称申明称定义定义,而把不需要建立存放空,而把不需要建立存放空间申明称为间申明称为申明申明在函数中出现对变量申明在函数中出现对变量申明(除了用除了用extern申明以外申明以外)都是定义都是定义在函数中对其它函数申明不是函数定义在函数中对其它函数申明不是函数定义第63页7.11 内部函数和外部函数内部函数和外部函数7.11.1内部函数内部函数7.11.2外部函数外部函数第64页7.11.1 内部函数内部函数假如一个函数只能被本文件中其它函数假如一个函数只能被本文件中其它函数所调用所调用,它称为它称为内部函数内部函数。在

39、定义内部函数时在定义内部函数时,在函数名和函数类在函数名和函数类型前面加型前面加static,即,即:static类型名类型名函数名函数名(形参表形参表)第65页7.11.1 内部函数内部函数内部函数又称静态函数,因为它是用内部函数又称静态函数,因为它是用static申明申明通常把只能由本文件使用函数和外部变通常把只能由本文件使用函数和外部变量放在文件开头,前面都冠以量放在文件开头,前面都冠以static使使之局部化,其它文件不能引用之局部化,其它文件不能引用提升了程序可靠性提升了程序可靠性第66页7.11.2 外部函数外部函数如果在定义函数时,在函数首部最左端如果在定义函数时,在函数首部最左

40、端加关键字加关键字extern,则此函数是外部函,则此函数是外部函数,可供其他文件调用。数,可供其他文件调用。如函数首部可认为如函数首部可认为externintfun(inta,intb)如果在定义函数时省略如果在定义函数时省略extern,则默,则默认为外部函数认为外部函数第67页例例7.20有一个字符串,内有若干个字有一个字符串,内有若干个字符,今输入一个字符,要求程序将字符串符,今输入一个字符,要求程序将字符串中该字符删去。用外部函数实现。中该字符删去。用外部函数实现。解题思路:解题思路:分别定义分别定义3个函数用来输入字符串、删除字个函数用来输入字符串、删除字符、输出字符串符、输出字符

41、串按题目要求把以上按题目要求把以上3个函数分别放在个函数分别放在3个文个文件中。件中。main函数在另一文件中,函数在另一文件中,main函函数调用以上数调用以上3个函数,实现题目要求个函数,实现题目要求第68页删除空格思绪删除空格思绪Ia mh a p p y 0Ia mh a p p y 0非空非空I空空非空非空a非空非空m空空非空非空h非空非空a非空非空p非空非空p非空非空y结束结束00i=0j=01122334 546576879810第69页#includeintmain()externvoidenter_string(charstr);externvoiddelete_string

42、(charstr,charch);externvoidprint_string(charstr);charc,str80;enter_string(str);scanf(“%c”,&c);delete_string(str,c);print_string(str);return0;file1(文件(文件1)申明在本函数中将要申明在本函数中将要调用已在其它文件中调用已在其它文件中定义定义3个函数个函数第70页voidenter_string(charstr80)gets(str);voiddelete_string(charstr,charch)inti,j;for(i=j=0;stri!=0;i+)if(stri!=ch)strj+=stri;strj=0;voidprint_string(charstr)printf(%sn,str);file2(文件(文件2)file3(文件(文件3)file4(文件(文件4)第71页

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

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

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

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

gongan.png浙公网安备33021202000488号   

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

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

客服