- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章C程序的结构
第9章 C程序的结构 北京联合大学信息学院 张宝森 知识点 (1) 局部变量和全局变量 (2) 动态生存期和静态生存期 (3) 编译预处理 (4) 多个文件构成的程序 9.1 全局变量与局部变量 【例9-1】经过一段时间的学习之后,学生们运用C语言编程的能力大大提高。老师给同学们提出了一个问题,针对像程 序4-10求组合数 需要计算阶乘实际问题,如 何快速地求得阶乘,而不必每次重新从1开始计算? 【编程思路】 想到的程序 #include stdio.h void main() { long jch[41]; int num=0; /* 阶乘的基数与数量 */ long order=1; /* 其他变量(省略) */ jch[num]=order; /* 存储0! */ num++; /* 下个阶乘基数,也是数组下标 */ /* 程序9-1 */ #include stdio.h long jch[41]; /* 全局数组 */ int num=0; /* 全局变量n,具有三个作用 */ void main() { long order=1; /* 其他变量(省略) */ jch[num]=order; /* 存储0! */ num++; /* 下一个阶乘存入数组元素的下标 */ 全局的概念 写在函数外面的变量num和数组jch称为全局的,全局变量和数组可以供所有函数使用,而无需在函数间传递。它的主要用途是作为函数间的共享数据,一般很少改动。 以前的所有程序的变量和数组都是在函数内部定义的,这些在函数内定义的变量称为局部变量。 1). 作用域与可见性 所谓作用域,指的是一个标识符在C程序中起作用的范围。处于作用域范围内的标识符,才有可能被程序代码所使用。 所谓可见性,指的是程序代码是否能够直接引用处于作用域内的标识符。——解决同样起作用的同名对象问题。 一般来说,当变量的名字都不相同时,处于作用域内的标识符都可以直接引用,这些变量都是可见的;但是当处于作用域内的标识符存在重名现象,即同名变量的作用域重叠时,只有代码所在的层次的变量是可见的。 全局变量作用域 (1)变量a、b、c都是在函数体外进行定义的,所以都属于全局变量。如果不赋初值,则系统默认为0。 (2)全局变量a定义在源程序的开始,它的作用域覆盖了整个源程序文件。 (3)全局变量b定义在函数sub之后、main函数之前,所以它的作用域是变量b之后,不包括函数sub。 (4)全局变量c定义在源程序的末尾,它既不能在函数sub中使用,也不能在main函数中使用。 优点:函数共享,不必传参。 缺点:可维护性极差 【例9-2】利用全局数组将小于1的十进制小数转换成二进制数码。 【编程思路】采用固定小数点二进制数表示实数的存储方法(定点数据) 。可见,二进制数小数部分各位的权是,第1位为2-1,即0.5,第2位为2-2,即0.25,……,依次类推。因此对于一个十进制的小数0.75,将是0.5与0.25之和,相应的二进制数码为11(约定小数点后的)。 于是得到将小数转换为二进制数码的方法:将十进制小数乘2,取出积的整数部分并存储起来,然后,将积的整数部分去掉,小数部分再乘以2,再取出积的整数部分并存储起来,……,如此循环直到乘积为0。将所有存储起来的数依次排列就得到了转换后的二进制数码。 /* 程序9-2 */ #include stdio.h· char binNum[300]; int n=0; void convert(double x); void main( ) { int i; double val=0.875; convert(val); printf(%f的二进制数码为:, val); for(i=0;in;i++) printf(%c ,binNum[i]); printf(\n ); } 3). 局部变量及其作用域 计算自然数1~10的累加和有奇怪现象的程序 局部变量的层次 同样是局部变量,其定义的位置决定了它的作用域范围: (1)在函数原型的声明语句中的形式参数 ——只在函数原型中起作用,称具有函数原型作用域; (2)在定义函数时,函数首部的形式参数和函数体内定义的变量、数组等 ——只在函数内起作用,称具有函数作用域; (3)在复合语句中,例如if、for等带有的复合语句中定义的变量和数组等——只在所属的复合语句中起作用,它们具有
您可能关注的文档
最近下载
- 信息处理技术员教程(第三版)第10章 计算机网络与互联网.pptx VIP
- [超分子化学与晶体工程基础]-晶体结构分析.pptx VIP
- 《中国心力衰竭诊断和治疗指南2024》解读.pptx VIP
- 中级宏观经济学知到课后答案智慧树章节测试答案2025年春浙江大学.docx VIP
- 2025-2026学年小学科学四年级上册粤教粤科版(2024)教学设计合集.docx
- [超分子化学与晶体工程基础]-超分子化学.pptx VIP
- 2013款上汽通用雪佛兰赛欧_汽车使用手册用户操作图解驾驶指南车主车辆说明书电子版.pdf
- E+H200涡街流量计说明书.pdf VIP
- 20_WD_2021001981_大坝安全监测系统验收规范.pdf VIP
- 信息处理技术员教程(第三版)第9章 数据库应用基础知识.pptx VIP
文档评论(0)