版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第七章 函数及变量存贮类型 7.1 函数基础与C程序结构7.2 函数定义和申明7.3 函数调用7.4 函数嵌套与递归7.5 变量存贮类别 第1页第1页7.1 函数基础与C程序结构 7.1.1 C程序结构化设计思想 图 7.1 C程序结构示意图 第2页第2页7.1.2 函数概述 在C程序设计中,函数是独立C程序模块,它完毕一个特定任务并可选择是否将一个值返回调用程序。在C语言中, 子程序被称为函数,它相应于其它高级语言中过程(无返回值子程序)和函数(通过函数名返回一个值子程序)。一个C程序普通由多个函数构成,其中必须有一个且仅有一个名为main主函数,其余为被main函数或其它函数调用函数,无论
2、main函数位于程序中什么位置, C程序总是从main函数开始执行。 第3页第3页 main函数可调用其它函数来实现所需功效。 被main函数调用函数分为两类:一类是由系统提供原则库函数,比如, 原则输入输出函数(scanf, printf, getche, putchar, )、数学计算函数(sin, cos, fabs, sqrt, )、 数据格式转换函数(atoi,atof,sscanf,sprintf, )、 字符串处理函数(strlen,strcpy,strcmp, )和文献读写函数(fread, fwrite, fopen, )等。 这类函数能够由用户程序直接调用; 另一类是用户在
3、自己程序中定义函数,即需要由用户自己编写函数。 第4页第4页例 7.1 用户自定义函数求数平方。 include long square(long); /* 函数申明 */void main() long in-num, result; printf(Input an integer: ); scanf(%ld, &in-num); result=square (in-num); /* 函数调用 */ printf(nThe square number of %ld is %ld, in-num, result); 第5页第5页long square (long x) /* 函数定义 */ l
4、ong x-square; /* 阐明部分 */ x-square=x*x; /* 执行部分 */ return x-square; Input an integer: 100 (输入)The square number of 100 is 10000 (输出) 第6页第6页7.2 函数定义和申明 7.2.1 函数定义例 7.2 计算xn次方,x=2,-3;(n=1, 2, 9)。 include int main(void) * 测试power函数 * int i; double power(int, int); /* 函数申明 */ for(i=1; i10; i+) printf(pow
5、er(2, %d)=%8.4f, power(-3, %d)=%11.4fn, 第7页第7页 i, power(2, i), i, power(-3, i); return 0; double power(int x, int n) /* 函数首部 */ int i; /* 阐明部分 */ double p; p=1; /* 执行部分 */ for(i=1; i=y) return(x); else return(y); main() float a, b, c; scanf(%f%f, &a, &b); c=max(a, b); printf(max=%5.2fn, c); 运营情况下列:
6、2.5 5.6max= 5.00 第24页第24页7.4 函数嵌套与递归 7.4.1 函数嵌套调用 例 7.6 输入三个数,计算以它们作为两个底半径和高所形成圆台体积。 分析:已知圆台上下底半径, 可用下式计算圆台体积 第25页第25页程序下列: include include define PI 3.1416 float area(float r) return(PI*r*r); float volume(float r1, float r2, float h) float v; v=h*(area(r1)+area(r2)+sqrt(area(r1)*area(r2)/3.0; retur
7、n(v); 第26页第26页main() float r1, r2, h; printf(Please input r1 r2 h:n); scanf(%f%f%f, &r1, &r2, &h); printf(The volume is %fn, volume(r1, r2, h); 运营结果Please input r1 r2 h: 2.5 6.8 3.3The volume is 240.140762 第27页第27页7.4.2 函数递归及条件 递归是一个特殊处理问题办法, 要用递归处理问题,应满足两个条件: (1) 函数直接或间接地调用它本身; (2) 应有使递归结束条件。 第28页第
8、28页例 7.7 用函数递归办法以字符串形式输出一个整数。 include void printd(int n) if(n0) putchar(-); n=-n; if(n/10) /* n/10=0时, 递归结束 */ printd(n/10); /* 递归调用 */ putchar(n%10+0); /* 以字符输出 */ void main() int number; scanf(%d, &number); printd(number); 第29页第29页7.5 变量存贮类别 7.5.1 变量作用域和生存期 例 7.8 变量作用域。 include int x999; /* 定义全局变量
9、x */ void print-value(void); void main() printf(%dn, x); print-value(); void print-value(void) printf(%dn, x); 输出: 999 999 第30页第30页例 7.9 变量作用域。 include void print-value(void); void main() int x=999; /* 定义局部变量x */ printf(%dn, x); print-value(); void print-value(void) printf(%dn, x); 第31页第31页7.5.2 动态存
10、贮和静态存贮 内存中供用户使用存贮空间可分为程序区、动态存贮区和静态存贮区。程序区用来存放程序代码,动态存贮区和静态存贮区用来存放数据,即数据与处理数据程序是分离,这是面向过程程序设计方法特点。 动态存贮和静态存贮是指C对数据存贮两种方式。动态存贮是指存贮一些数据存贮单元可在程序运行不同时间分派给不同数据,而静态存贮是指存贮单元在程序运行整个过程中固定地分派给一些数据。 第32页第32页7.5.3 局部变量 局部变量又称内部变量,是在一个函数内定义,其作用域限制在所定义函数中。 例 7.10 局部变量与全局变量同名。 int a=1, b=2; /* 定义全局变量a、 b */max(int
11、a, int b) /* 子函数中局部变量a、 b */ int c; c=ab?a: b; return(c); main() int a=8; /* 定义局部变量a */ printf(%d, max(a, b); 运营结果: 8 第33页第33页7.5.4 局部静态变量使用 例 7.11 静态局部变量使用。 void f() int a, b=3; static int c, d=5; a=3; c=5; a+; b+; c+; d+; printf(%d t %d t %d t %dn, a, b, c, d); main() f(); f(); 运营结果: 4 4 6 64 4 6
12、7 第34页第34页例 7.12 打印1到5阶乘。 fac(int n) static int f=1; f*=n; return(f); main() int i; for(i=1; i=5; i+) printf(%d!=%dn, i, fac(i); 第35页第35页运营结果: 1! =1 2! =2 3! =6 4! =24 5! =120 第36页第36页7.5.5 全局变量 全局变量(也称外部变量)是在所有函数、包括main函数之外定义。全局变量是存储在静态存贮区中,它作用域是从全局变量定义之后直到该源文献结束所有函数;通过用extern作引用阐明,全局变量作用域能够扩大到整个程序
13、所有文献。在定义全局变量时能够使用static存贮类型标识符,它与普通全局变量区别在于变量作用域。普通全局变量不但对文献中所有函数都是可见, 并且能被其它文献中函数所用;而static型全局变量仅对其所在文献中定义处之后函数是可见,不能被其它文献使用。这种差别适合于程序源代码包括在两个或多个文献中情况。 第37页第37页 全局变量初始化是在全局变量定义时进行,且其初始化仅执行一次,若无显式初始化,则由系统自动初始化为与变量类型相同0初值: 整型变量初始化为整数0 浮点型变量初始化为浮点数0.0 字符型变量初始化为空字符0在有显式初始化情况下,初值必须是常量表示式。全局变量存储在静态存贮区中,全
14、局变量在程序执行之前分派存贮单元, 在程序运营结束后才被收回。 第38页第38页 例7.13 输入以秒为单位一个时间值,将其转化成“时: 分:秒”形式输出。将转换工作定义成函数。 include int hh, mm, ss; void convertime(long seconds) hh=seconds/3600; mm=(seconds-hh*3600L)/60; ss=seconds-hh*3600L-mm*60; void main(void) long seconds; 第39页第39页 printf(hh=%d, mm=%d, ss=%dn, hh, mm, ss); printf(input a time in second: ); scanf(%ld, &seconds); convertime(seconds); printf(%2d: %2d: %2dn, hh, mm, ss); 执行时输出: hh0, mm0, ss0 input a time in second: 41574 (输入) 11: 32: 54 (输出) 第40页第40页7.5.6 存储器变量 例 7.14 计算 s=x1x2x3xn,x和n由终端输入。 include long sum(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 市政污水处理设施维护与保养方案
- 生产全流程风险防控管理制度
- 铁路工程资料管理规程
- 旧厂房策展商业项目可行性研究报告
- 交通运输企业管理人员安全培训课件
- 种植修复取模规范化操作培训
- 基层医疗服务质量提升实施方案
- 山地营地火灾损失统计报告模板
- 烤瓷冠修复规范化操作培训
- 基层急救人员职业防护与健康管理实施方案
- 自来水管管道工安全培训课件
- 2025-2026学年统编版语文三年级上册第三单元试卷(单元试卷)(含答案)
- 学堂在线 现代生活美学-花香茶之道 章节测试答案
- 肝胆外科教学查房
- QGDW10212-2019电力系统无功补偿技术导则
- 英语六级真题试卷及答案电子版
- 银行客户经理培训课件
- T-SZRCA 009-2024 拖链型机器人特种线缆技术规范
- GB/T 6003.2-2024试验筛技术要求和检验第2部分:金属穿孔板试验筛
- 林地茶叶种植管护培训课件
- 能源管理体系培训课件(2023年EnMS)
评论
0/150
提交评论