版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、函数与程序结构课件第1页,共42页,2022年,5月20日,9点24分,星期一5.1 C程序的一般结构5.1.1 模块化程序设计一个较大的程序一般应分为若干个程序模块,每一个模块用来实现一个特定的功能。C语言中,模块使用函数实现的。第2页,共42页,2022年,5月20日,9点24分,星期一5.1.2 C程序的一般结构 函数: 构成C语言程序的基本功能模块,是一段程序,它完成一项相对独立的任务。 例如: printf( );mainabcdefhg第3页,共42页,2022年,5月20日,9点24分,星期一一个c程序由一个主函数和若干个函数组成 C程序的执行总是从主函数开始,又从主函数结束,其
2、他函数只有通过调用关系发生作用。 函数相互独立,不能嵌套定义 。第4页,共42页,2022年,5月20日,9点24分,星期一 从用户使用的角度看,函数有两种:(1)标准函数,即库函数(2)用户自己定义的函数从函数的形式看,函数分两类:(1) 无参函数 一般用来执行指定的一组操作。 (2) 有参函数 例: e5-1.c e5-1-2.c第5页,共42页,2022年,5月20日,9点24分,星期一5.2 函数的定义与调用5.2.1 函数的定义函数定义的一般形式为 类型标识符 函数名(形参表列) 说明部分 语句部分 没有形式参数为无参函数 第6页,共42页,2022年,5月20日,9点24分,星期一
3、在定义C函数时要注意以下几点。(1)函数类型标识符同变量类型说明符,它表示返回的函数值类型。 (2)如果省略函数的类型标识符,则默认为是int型。 (3)C语言允许定义空函数。如 dummy() (4)如果“形参表列”中有多个形式参数,则它们之间要用“,”分隔。 (5) C函数不能嵌套定义。第7页,共42页,2022年,5月20日,9点24分,星期一(6)函数中返回语句的形式为return(表达式);或return 表达式; 注:如函数不需要有返回值时,函数名前最好加一个void,此时return后的表达式可以省略。例:e5-1-1.c e5-2.c第8页,共42页,2022年,5月20日,9
4、点24分,星期一5.2.2 函数的调用 函数调用的一般形式为: 函数名(实参表列);例: e5-2-1.c sum=1!+2!+3!+6!第9页,共42页,2022年,5月20日,9点24分,星期一说明:(1)调用函数时,函数名称必须与自定义函数名称完全一致。如果是调用无参函数则实参表列可以没有,但括弧不能省略。(2)实参可以是常数、变量或表达式。如果实参不止1个,则相邻实参之间用逗号分隔。(3)实参的个数、类型和顺序,应该与被调用函数所要求的参数个数、类型和顺序一致(4)对实参表求值的顺序并不是确定的。Turbo C规定是自右至左顺序求值。 第10页,共42页,2022年,5月20日,9点2
5、4分,星期一被调用函数的说明和函数原型在调用自定义函数之前,应对该函数进行说明,一般格式如下:函数类型 函数名(数据类型1 参数名1 , 数据类型2 参数名2); 例 e5-4.c第11页,共42页,2022年,5月20日,9点24分,星期一 但C语言规定,在以下几种情况下可以不在调用函数中对被调用函数作类型说明: 被调用函数为整型或字符型,自动按整型处理。 被调用函数的定义出现在调用函数之前。 第12页,共42页,2022年,5月20日,9点24分,星期一5.2.3 函数的参数传递 Sub(x,y)s=a+b;return s;调用函数main()被调用函数sub(a,b)数值传递: 一个模
6、块调用另一个模块时,直接将实参值传送给形参被存放在形参地址中第13页,共42页,2022年,5月20日,9点24分,星期一【例】调用函数时的数据传递。#include void main()int max(int,int); int a,b,c; printf(input integer a,b:); scanf(%d,%d,&a,&b); c=max(a,b); printf(max is %dn,c); int max(int x,int y) int z; z=xy?x:y; return(z); 第14页,共42页,2022年,5月20日,9点24分,星期一说明: 当函数被调用时才给形
7、参分配内存单元。调用结束,所占内存被释放。 实参可以是常量、变量或表达式,但要求它们有确定的值。 实参与形参类型要一致,字符型与整型可以兼容。 实参与形参的个数必须相等。在函数调用时,实参的值赋给与之相对应的形参。“单向值传递”。因此,在执行一个被调用函数时,形参的值如果发生改变,并不会改变主调函数的实参的值。第15页,共42页,2022年,5月20日,9点24分,星期一例 分析下列C程序:void swap(x,y)int x,y; int t; tx; xy; yt; return; #include stdio.hmain() int x,y; scanf(x%d,y%d,&x,&y);
8、 swap(x,y); printf(x%d,y%dn,x,y);第16页,共42页,2022年,5月20日,9点24分,星期一5.3 局部变量与全局变量5.3.1 局部变量 在函数内部定义的变量称为局部变量。函数内部定义的变量只在该函数范围内有效,不同函数中的局部变量可以重名,互不混淆。第17页,共42页,2022年,5月20日,9点24分,星期一float f1(int a) int b,c; .Char f2(int x ,int y)int i,j;main()int m,n;a,b,c作用范围x,y,i,j作用范围m,n作用范围第18页,共42页,2022年,5月20日,9点24分,
9、星期一5.3.2 全局变量 在函数外定义的变量称为全局变量(或外部变量)。作用范围:从定义变量位置开始到本源文件结束第19页,共42页,2022年,5月20日,9点24分,星期一int p=1,q=5;float f1(int a) int b,c; .char c1,c2;char f2(int x ,int y)int i,j;main()int m,n;c1,c2作用范围p,q作用范围第20页,共42页,2022年,5月20日,9点24分,星期一int x,y ;void swap() int t; t=x; x=y; y=t; return;#include stdio.hmain()
10、 printf(Please input x and y:); scanf(x=%d,y=%d,&x,&y); swap(); printf(x=%d,y=%dn,x,y);第21页,共42页,2022年,5月20日,9点24分,星期一说明:如果定义点之前的函数需要引用这些外部变量,需要在函数内对被引用的外部变量进行说明 。 extern 类型说明符 变量名1,变量名2,; 2.同一源文件中,允许全局变量和局部变量同名。但在局部变量的作用域内,全局变量被“屏蔽”不起作用. 例 e5-4-1.c第22页,共42页,2022年,5月20日,9点24分,星期一5.4 变量的存储类型5.4.1 存储类
11、型区分符 静态存储变量 动态存储变量变量生存时间第23页,共42页,2022年,5月20日,9点24分,星期一其中: 程序区用于存放程序; 静态存储区是在程序开始执行时就分配的固定存储单元,如全局变量; 动态存储区是在函数调用过程中进行动态分配的存储单元,如函数形参、自动变量、函数调用时的现场保护和返回地址等。第24页,共42页,2022年,5月20日,9点24分,星期一变量的属性:数据类型和存储类型。 自动类型(auto)、静态类型(static)、寄存器类型(register)、外部类型(extern)。 存储类别 数据类型 变量名1, , 变量名n ;静态存储类型: static、ext
12、ern动态存储类型:auto、register第25页,共42页,2022年,5月20日,9点24分,星期一变量的属性数据类型:决定为变量分配内存单元的长度,数据的存放形式,数的范围。存储类别:决定了变量的生存期,给它分配在哪个存储区。第26页,共42页,2022年,5月20日,9点24分,星期一5.4.2 自动变量 函数中的局部变量,如不做专门的说明(说明为静态的存储类别),都是动态分配存储空间的,存储在动态存储区中。 例: auto int x; 第27页,共42页,2022年,5月20日,9点24分,星期一 内存分配调用函数或执行分程序时在动态存储区为其分配存储单元,函数执行结束,所占内
13、存空间即刻释放。 变量的初值定义变量时若没赋初值,变量的初值不确定;如果赋初值则每次函数被调用时执行一次赋值操作。(e5-1-2.c) 生存期 在函数执行期间。 作用域自动变量所在的函数内。第28页,共42页,2022年,5月20日,9点24分,星期一5.4.3 静态变量static说明的局部变量为局部静态变量* 局部静态变量在函数调用结束后其值不消失而保留原值,下次调用时的值为上次调用结束时的值。例 e5-4-2.c e5-4-3.c 1! 2! 5!static说明的全局变量为全局静态变量第29页,共42页,2022年,5月20日,9点24分,星期一 内存分配编译时,将其分配在内存的静态存
14、储区中,程序运行结束释放该单元。 静态变量的初值若定义时未赋初值,在编译时,系统自动赋初值为0;若定义时赋初值,则仅在编译时赋初值一次,程序运行后不再给变量赋初值 。 生存期整个程序的执行期间。 作用域局部静态变量的作用域是它所在的函数或分程序。全局静态变量的作用域是从定义处开始到本源文件结束。第30页,共42页,2022年,5月20日,9点24分,星期一5.5.1 函数的嵌套调用C语句不能嵌套定义函数,但可以嵌套调用函数 例:e5-7.c5.5 函数的嵌套与递归调用第31页,共42页,2022年,5月20日,9点24分,星期一main函数 调用函数f2; 函数 f2 调用函数 f1; 函数
15、f1 第32页,共42页,2022年,5月20日,9点24分,星期一5.5.2 函数的递归调用 递归:函数直接或间接调用本身。 递归分为直接递归与间接递归两种。 所谓直接递归,是指直接调用函数本身。 间接递归: 是指通过别的函数调用自身。第33页,共42页,2022年,5月20日,9点24分,星期一例:用递归法求n! n!=1 (n=0,1) n*(n-1)! (n1)float fac(int n) float f; if (n=0|n=1) f=1; else f=fac(n-1)*n; return f;y=fac(3)f=fac(2)*3Return ff=fac(1)*2Return
16、 ff=1Return fmainfac(3)fac(2)fac(1)Ed.c第34页,共42页,2022年,5月20日,9点24分,星期一应用递归算法能求解的问题一般应符合下面三个条件:可以把一个问题转化为新的问题,而这个新问题的解决方法仍与原问题的解法相同,只是所处理的对象有所不同,但它们只是有规律的递增或递减。可以通过转化过程使问题得到解决。必须有一个明确的结束递归的条件,否则递归将无止境的进行下去。例: fib.c第35页,共42页,2022年,5月20日,9点24分,星期一5.7 编译预处理编译预处理是指在系统对源程序进行编译之前,对程序中某些特殊的命令行的处理,预处理程序根据源代码
17、中的预处理命令修改程序。 例:#include “stdio.h” #define PI 3.1415926第36页,共42页,2022年,5月20日,9点24分,星期一#define 宏名 字符串功能: 在进行编译前,用字符串原样替换程序中的宏名。 1符号常量(不带参数)的宏定义命令的一般格式:5.7.1 宏定义第37页,共42页,2022年,5月20日,9点24分,星期一例如:#define PI 3.14main() float r,s,c; scanf(“%f”,&r); s = r * r * PI; c = 2 * r * PI; printf(“s=%f, c=%f”,s,c);替换3.143.14第38页,共42页,2022年,5月20日,9点24分,星期一2带参数的宏定义命令的一般形式#define 宏名(形参表) 字符串例:#define M(y) y*y+3*y void main() k=M(5); 第39页,共42页,2022年,5月20日,9点24分,星期一【例】 #define SQ (x*x) #define CUBE(x) (SQ(x)*x) #define FIFTH(CUBE(x)*SQ(x) void main() y=FIFTH(a); 第40页,共42页,2022年,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026经济师-高级经济师-高级经济师(建筑与房地产经济)历年参考题库含答案详解
- 2026注册会计师-会计(官方)-第九章职工薪酬参考试题库历年考点答案详解
- 2026教师职称-海南-海南教师职称(基础知识、综合素质、初中美术)历年参考题库含答案详解
- 安徽省六安市霍邱县2027届九上数学期末经典模拟试题含解析
- 海南省三亚市名校2027届数学七年级第一学期期末达标检测模拟试题含解析
- 2027届河北省石家庄市名校七年级数学第一学期期末教学质量检测模拟试题含解析
- 黑龙江省大庆市第五十七中学2027届数学七年级第一学期期末调研试题含解析
- 2027届山东济宁任城区九年级数学第一学期期末质量检测模拟试题含解析
- 2026年青海妇联招聘考试练习试卷(含答案)
- 2026年招聘安检员试题及答案
- 河北省石家庄市第四十三中学2025-2026学年上学期期中考试九年级数学试题(含答案)
- 2026年新疆中考语文真题及答案解析
- 简析量子定位技术及应用前景
- 2026年中医内科医师高频面试题包含详细解答
- 2026年全国两会解读:基层治理能力提升
- 装配错装漏装考核制度
- 感染性心内膜炎课件
- 2025年绿色农业农业资源保护与利用研究报告
- 浙江精诚联盟2025-2026学年高二上学期10月联考物理(含答案)
- 人工肝护士进修学习汇报
- 第二单元混合运算单元测试卷(含答案) 2025-2026学年人教版三年级数学上册
评论
0/150
提交评论