




已阅读5页,还剩71页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计 第4章 模块化程序设计 1/76 C语言程序设计 主要内容 4.1 函数 4.2 变量的存储属性 4.3 模块的编译与链接 4.4 宏定义与宏替换 2 C语言程序设计 4.1.1 设计C语言程序就是设计函数 3 C语言程序设计 一个管理信息系统的结构 4 C语言程序设计 文本菜单实例 5 C语言程序设计 例4.1 显示菜单算法 6 C语言程序设计 #include 例4.1 一个显示菜单的主函 数 #include void main(void) char choice; printf(“t *大学信息管理系统*n“); printf(“t=n“ ); printf(“t 1.办公室管理 2.教务管理n“); printf(“t 3.科研管理 4.人事管理n“); printf(“t 5.财物管理 6.设备管理n“); printf(“t 7.图书资料管理 8.后勤管理n“); printf(“t 0.退出本系统n“); printf(“t-n“); printf(“t 请您在上述功能中选择(08):“); 7 C语言程序设计 do choice=getche(); switch(choice) case 1:funt1(); break; case 2:funt2(); break; case 3:funt3(); break; case 4:funt4(); break; case 5:funt5(); break; case 6:funt6(); break; case 7:funt7(); break; case 8:funt8(); break; case 0:exit(0); break; default: printf(“tInput error!n“); break; while(1); 8 C语言程序设计 4.1.2 函数结构 函数头 函数 体 1. 函数头 函数类型 函数名(形参列表) 2. 函数体 (1)声明语句 (2)可执行语句 (3)return语句 计算型函数,例sin(),返回一个计算结果 完成一项具体工作,返回完成结果 例printf函数,执行成功时,返回显示的字 符数;失败时,返回一个负整数 只执行一个过程,不产生返回值:void函数 9 C语言程序设计 例4.2 求一个整数的绝对值 int absolutevalue(int x) return (x0?x:-x); 10 C语言程序设计例 4.3 输出n个空格的函数 void spc(int n) int i; for(i=0;i10) return(2*n+3); else return; 13 C语言程序设计 3. 函数中变量的作用域 作用域是指一个程序段中的代码的作用 范围。 一个函数中所定义的变量只在本函数中 有效,在其他函数中不能使用这个变量 。 即使在不同的函数中定义了同名变量, 它们也是指不同的变量。 14 C语言程序设计 例4.6 (错误例) #include int func(int x) x=5; return x+3; int main(void) printf(“x=%dn“,x); return 0; 15 C语言程序设计 4. 空函数 void null(void) 16 C语言程序设计4.1.3 函数定义与函数声明 函数定义:按照C语言的语法规则引入 新的函数;函数不能嵌套定义。 函数声明:对所用到的函数的特征进行 必要的说明,编译系统以函数声明所给 出的信息为依据,对调用表达式进行检 测。 17 C语言程序设计 函数定义和声明举例 函数定义 double func (double a, int b, char c) 函数声明可以是: double func (double a, int b, char c); double func (double, int, char); 以下为错误的声明: double func (a, b, c); func (double a, int b, char c); 18 C语言程序设计 函数的显式声明风格 void fun1(void); float fun2(float, int); int main(void) void fun1(void) x=fun2(a,b); float fun2(float x, int y) fun1(); 19 C语言程序设计4.1.4 虚实结合与传值调用 只有当执行函数调语句时,函数才 被 执行: (1)将函数调语句中的实参的值传送 给 函数形参。 (2)将流程从调用处转到被调用函数 的 开头,开始执行函数体中的代码。 20 C语言程序设计 1. 函数调用时的虚实结合 #include float add(unsigned int , unsigned int); int main(void) float x=1.5, y=-5.7; printf(“%f+%f=%fn“,x,y,add(x,y); float add(unsigned int a, unsigned int b) printf(“a=%u, b=%un“,a,b); return a+b; a=1, b=4294967291 1.500000+-5.700000=4294967292.000000 21 C语言程序设计 1. 函数调用时的虚实结合(错误例) #include float add(); int main(void) float x=1.5, y=-5.7; printf(“%f+%f=%fn“,x,y,add(x,y); float add(unsigned int a, unsigned int b) printf(“a=%u, b=%un“,a,b); return a+b; a=0, b=1073217536 1.500000+-5.700000=1073217536.000000 22 C语言程序设计 2.传值调用的虚实结合过程 传值调用的特点: 形参与实参各占一个独立的存储空 间 形参的存储空间是函数被调用时才 分配的 函数返回时,形参存储空间被释放 23 C语言程序设计 例4.8 交换两个变量(错误例) void swap(int x,int y); void main(void) int a=3,b=5; swap(a,b); printf(“a=%d,b=%dn“,a,b) ; void swap(int x, int y) int temp; temp=x;x=y;y=temp; printf(“x=%d,y=%dn“,x,y); x=5, y=3 a=3, b=5 24 C语言程序设计 4.1.5 递归调用 在调用一个函数的过程中调用该函数本 身,称为函数的递归调用。递归调用简 称递归。 编写递归程序有两个要点: 一是要找到正确的递归算法,这是编 写递归程序的基础; 二是要确定算法的递归结束条件,这 是决定递归程序能否正常结束的关键。 25 C语言程序设计 例4.9 求n的阶乘 26 C语言程序设计 long rfact(int n); void main(void) printf(“%ldn“,rfact(0); printf(“%ldn“,rfact(3); printf(“%ldn“,rfact(5); printf(“%ldn“,rfact(-1); long rfact(int n) if(n %cn“,a,c); else movedisk(n-1,a,c,b); printf(“%c - %cn“,a,c); movedisk(n-1,b,a,c); 33 C语言程序设计 汉诺塔代码 void main(void) int n; printf(“Pleases input the number of diskes:“); scanf(“%d“, printf(“The step moving %3d diskes is:n“,n); movedisk(n,A,B,C); 34 C语言程序设计 运行结果 Pleases input the number of diskes: 3 The step moving 3 diskes is: A - C A - B C - B A - C B - A B - C A - C 35 C语言程序设计 程序分析 36 C语言程序设计 4.2变量的存储属性 变量是有类型的,数据类型是对变量运算 属性的抽象,决定了该变量的取值范围和 可施加的运算种类。除此之外,变量还有 如下存储属性: (1) 一个变量在程序的哪个范围内是可以使 用 的变量的可用域(或称可见性) (2) 变量何时生成以及何时被撤销变量 的 生存期 (3) 它存储在哪种类型的存储器中以及采用 何 种机制进行存储变量的存储区 37 C语言程序设计 1. 局部变量与全局变量 局部变量: 也称内部变量,是在函数(或 块)内定义的,其作用域仅限于函数(或块) 内。 全局变量:也称外部变量,是在函数外部 定义的变量,它不属于任何一个函数。 全局变量属于一个源程序文件,其作用域 是从定义点开始到整个源程序结束 38 C语言程序设计 例4.11 局部变量的作用域 void main(void) int a=3; printf(“a1=%dn“,a); int b=5; printf(“a2=%d, b=%dn“,a,b); printf(“a3=%dn“,a); a1=3 a2=3, b=5 a3=3 39 C语言程序设计 例4.12 局部变量的作用域 void main(void) int a=3; printf(“a1=%dn“,a); int a=5; printf(“a2=%dn“,a); a1=3 a2=5 40 C语言程序设计 课堂练习:局部变量的作用域 #include void f1(void),f2(int x); void main (void) int x=1; f1(); f2(x); printf(“x=%dn“,x); void f1(void) int x=3; printf(“x=%dn“,x+=3); void f2 (int x) printf(“x=%dn“,x+); x=6 x=1 x=1 41 C语言程序设计 例4.13全局变量的作用域 void a(void) int a=1; printf(“a1=%dn“,a); int x=3; void b(void) printf(“x1=%dn“,x); void main(void) a(); b(); printf(“x2=%dn“,x); a1=1 x1=3 x2=3 42 C语言程序设计 4.14 全局变量与局部变量同名 #include int x=3; void main(void) int x=5; printf(“x=%dn“,x); x=5 当局部变量与全局变量同名时, 局部变量会屏蔽全局变量 43 C语言程序设计 改写例4.8:交换两个变量 void swap(void); int a=3,b=5; void main(void) printf(“a=%d,b=%dn“,a, b); swap(); printf(“a=%d,b=%dn“,a,b ); void swap() int temp; temp=a;a=b;b=temp; a=3,b=5 a=5,b=3 44 C语言程序设计 2.动态变量与静态变量 数据区分为自动存储区、静态存储区和动 态分配区 自动存储区是按照栈结构组织的存储区, 局部变量通常被存放在栈区,这些变量在 进入所在的块时被创建,所在的块结束时 被撤销。 静态存储区是在程序编译时就分配的存储 区。其中中的变量在程序开始执行时被创 建并自动初始化(数值变量被初始化为0), 当程序结束时才被撤销。所以通常称静态 变量的生存期是永久的。 45 C语言程序设计 4.2.2 C语言中变量的存储类型 C语言将可用域和生存期整合成4种存储类型 。 (1)自动局部类型 在函数内部用标识符auto或register声明 。 (2)静态局部类型 在函数内部用static声明。 (3)静态全局类型 在函数外部用static声明 (4)全局类型 在函数外直接声明,通称外部变量。 46 C语言程序设计 1 auto和register存储类型 对于局部变量和函数形参: auto 数据类型 变量名=初值表达式 register 数据类型 变量名=初值表达式 例如: auto float a,b,c; register int i,j,k; func(register int a, register int b) 47 C语言程序设计 2. 静态局部类型. 使用static修饰局部变量,即为静态局 部类型 具有“永久生存期,局部可见性” 优点:既避免了全局变量的值被多处 修改所引起的副作用,又可以使函数 基于前一次调用的值继续工作。 48 C语言程序设计 例4.15 一个增量函数的应用 void increament(void); void main(void) increament(); increament(); increament(); void increament(void) static int x=0; x+; printf(“%dn“,x); 1 2 3 49 C语言程序设计 int i=1; void other(void); void main(void) static int a; int b=-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(); void other() static int a=2,b; int c=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=0 i=5,a=4,b=0,c=15 i=5,a=0,b=-10,c=8 i=19,a=6,b=4,c=15 50 C语言程序设计 3.静态全局类型 在多文件程序中,未用static声明的外部 变量的作用域是整个程序。 用static声明的外部变量,其作用域仅限 于所在文件。 例如,当多个函数需要共同使用一个全 局变量时,可以将这些个函数组织在同 一文件中,而将该全局变量定义为静态 的,保证文件的独立性。 51 C语言程序设计 例4.16 随机数函数 static unsigned int r; random(void) r=(r*123+59)%65536; return(r); unsigned random_start(unsigned int seed) r=seed; void main(void) int i,n; printf(“Please enter the seed:“); scanf(“%d“, random_start(n); for(i=1;i #include #include “isdigit.h“ #include “two_sqrt.h“ int main(void) char c; printf(“Enter a character:“); scanf(“%c“, if(is_digit(c)=FALSE) printf(“Error: no_digit!“); exit(1); else printf(“Result: %fn“, two_sqrt(c); return 0; /文件two_sqrt.c #include double two_sqrt(int x) return(2*sqrt(x); /文件digit.c #include “isdigit.h“ int is_digit(char ch) return (ch=0 #define PRC(x) printf(“%cn“,x); #define PRS(x) printf(“%sn“,x); 文件“bbb.c”内容为 : #include #include “aaa.h“ void main(void) int i=2; PRD(i); PRC(CH); PRS(STR); 2 a program 64 C语言程序设计 4.4 宏定义与宏替换 4.4.1 字符串宏定义及其基本格式 4.4.2 使用宏定义需要注意的问题 4.4.3 撤销已定义的宏 4.4.4 带参数的宏定义 65 C语言程序设计 4.4.1 字符串宏定义及其基本格式 #define的基本应用是将一个字符串 定义为一个宏名,格式为: #define 宏名 宏体 使用宏替换的优点 提高程序的可读性 提高程序的可维护性 例题:已知半径r,圆柱高h,求圆柱 体的侧面积x、全面积y和体积z。 66 C语言程序设计 #define PI 3.14 void main(void) float r,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); 67 C语言程序设计 例4.21 #include #define BEGIN #define END void main(void) BEGIN int i,j; float x,y; scanf(“%d%d%f%f“, printf(“i=%dn“,i); printf(“j=%dn“,j); printf(“x=%fn“,x); printf(“y=%fn“,y); END 68 C语言程序设计 4.4.3 撤销已定义的宏 用#undef可以撤销已定义的宏 #include #define BEGIN #define END void main(void) BEGIN int i,j; float x,y; scanf(“%d%d%f%f“, printf(“i=%dn“,i); printf(“j=%dn“,j); printf(“x=%fn“,x); printf(“y=%fn“,y); END #undef BEGIN #undef END void spc(int n) int i; for(i=0;in;i+) printf(“ “); return; 69 C语言程序设计 4.4.4 带参数的宏 #define 宏名(形参表) 宏体 70 C语言程序设计 #define CH a #define AB1 1 #define AB2 2 #define STR “program“ #define MM(a,b) (a)*2+(b) #define PRD(x) printf(“%dn“,x); #define PRC(x) printf(“%cn“,x); #define PRS(x) printf(“%sn“,x); main() int i,j,k; i=2; j=6; k=2*MM(i,j)+5; PRD(k); PRC(CH); PRS(STR); 25 a program 71 C语言程序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 茶叶供应合同(标准版)
- 2025年绿色消费理念传播与消费者行为引导的消费者心理洞察报告
- 2025年教育游戏化在英语教学中的应用策略报告
- 2025年工业废气深度净化技术环保标准制定与行业规范分析报告001
- 湖南省邵阳市新宁县十校22024-2025学年九年级上学期10月期中考试道德与法治试卷(含答案)
- 巡管安全培训课件
- 食品安全合作协议违约赔偿及质量检测标准条款
- 智能制造项目担保费用会计审核及合规性合同
- 跨境电商担保合同:跨境电商担保协议范本
- 国际地产项目合作开发与海外市场拓展协议范本
- 四年级暑假实践作业
- 指数函数图像和性质说课
- 留疆战士考试题库
- FZ/T 13002-2014棉本色帆布
- 视频监控解码器dec6108用户手册
- CA-2100E(新机)可燃气体报警控制器使用说明书
- 2022环保检测作业指导书(HJ1237-2021机动车排放定期检验规范)
- 水泵技术规格书说明资料
- 苏科版三年级上册劳动第四课《橡皮泥塑》课件(定稿)
- 法理学-(第五版)完整版ppt全套教学教程课件(最新)
- 《峨日朵雪峰之侧》教案
评论
0/150
提交评论