第七章 函数及变量 存储类型

上传人:豆浆 文档编号:6320009 上传时间:2017-08-31 格式:PDF 页数:81 大小:1.16MB
返回 下载 相关 举报
第七章  函数及变量 存储类型_第1页
第1页 / 共81页
第七章  函数及变量 存储类型_第2页
第2页 / 共81页
第七章  函数及变量 存储类型_第3页
第3页 / 共81页
第七章  函数及变量 存储类型_第4页
第4页 / 共81页
第七章  函数及变量 存储类型_第5页
第5页 / 共81页
点击查看更多>>
资源描述

《第七章 函数及变量 存储类型》由会员分享,可在线阅读,更多相关《第七章 函数及变量 存储类型(81页珍藏版)》请在金锄头文库上搜索。

1、第 章 函数及变量存储类型本章要求掌握函数的定义、声明和调用,学会利用函数实现程序的模块化设计。掌握局部变量和全局变量的存储方式及作用域。 函数的定义、声明 函数的调用与参数传递 函数的嵌套与递归 变量的存储类别 程序设计举例 函数是构成程序的基本模块一个C程序一般由多个函数组成,其中有且仅有一个名为main的主函数,其余为被main函数或其它函数调用的函数。C程序总是从main函数开始执行。函 数 概 述(一)D EmainCBA 被调用函数的分类(1)从使用角度:系统提供的标准函数、用户自定义函数(2)从形式:无参函数、有参函数例1 用户自定义函数求数的平方。函 数 概 述(二)例1:用户

2、自定义函数求数的平方#include long square(long);main( )long num,result;printf(input an integer:);scanf(%ld,&num);result=square(num);printf(nthe square of %ld is%ld,num,result);long square(long x) long x_square;x_square=x*x;return x_square;程序分析:函数调用结束返回main,输出结果。运行结果:Input an integer:100The square of 100 is 100

3、00函 数 概 述(三)说明:1. 一个C程序由一个或多个源程序文件组成。一个较大的程序,可分别放在若干个源文件中,分别编写、编译,提高调试效率。一个源文件可为多个C程序公用。3. C程序执行从main开始,main函数由系统定义的。2.一个文件由一个或多个函数组成。C程序是以源文件为单位进行编译,而不是以函数为单位进行编译。4. 每个函数都有唯一的名字。函数的定义是独立的、封闭的。一个函数的定义应不受程序其它部分的干扰。5. 函数不能嵌套定义,可互相调用,但不能调用main函数。6. 函数能给调用函数返回一个值。无参函数的定义函数的定义是对函数所完成功能的描述。 无参函数定义的一般形式存储类

4、型标识符 类型标识符 函数名( ) 说明部分语句部分说明: 规定函数可被调用的范围。有static和extern。static为静态函数,只能由和它在同一文件中定义的函数调用;extern或缺省则为外部函数,可被任何函数调用。无参函数的定义函数的定义是对函数所完成功能的描述。 无参函数定义的一般形式存储类型标识符 类型标识符 函数名( ) 说明部分语句部分说明:说明函数返回值的类型。无参函数的定义函数的定义是对函数所完成功能的描述。 无参函数定义的一般形式存储类型标识符 类型标识符 函数名( ) 说明部分语句部分说明:由用户自定义,但应符合标识符的命名规则。无参函数的定义函数的定义是对函数所完

5、成功能的描述。 无参函数定义的一般形式存储类型标识符 类型标识符 函数名( ) 说明部分语句部分说明:定义函数中使用的局部变量。无参函数的定义函数的定义是对函数所完成功能的描述。 无参函数定义的一般形式存储类型标识符 类型标识符 函数名( ) 说明部分语句部分说明:函数要完成的具体任务。无参函数的定义函数的定义是对函数所完成功能的描述。 无参函数定义的一般形式存储类型标识符 类型标识符 函数名( ) 说明部分语句部分示例:int mess( ) int x,y; 有参函数的定义 有参函数定义的一般形式存储类型标识符 类型标识符 函数名(形式参数表列) 说明部分语句部分说明:说明函数参数的名称、

6、类型和数目。多个参数之间用 “, ”号分隔。若无参数,可只写一对 “( )”。有参函数的定义 有参函数定义的一般形式存储类型标识符 类型标识符 函数名(形式参数表列) 说明部分语句部分示例:int max(int x,int y) 函数定义的补充说明注意:1. 函数的返回值是通过函数中的return语句获得的。4. void型函数不含return或含不带表达式的return语句。而有返回值的函数必须至少包含一个带有表达式的return语句。3. 函数类型缺省时返回int型。2. 无返回值的函数,类型标识符为void。函数 定义示例例 定义函数,求两数中的大者。int max(int x,int

7、 y) int z;z=xy?x:y;return(z);main( )int i;double power(int,int);for(i=1;ivoid swap(int x,int y) int z;z=x;x=y;y=z;main( ) int a,b;a=10;b=20;swap(a,b);printf(a=%dtb=%dn,a,b);变量跟踪main函数:a 10 b 20swap函数:运行结果:a=10 b=20例3:形参与实参的数值传递形参的改变不影响实参的值函数的返回值(一)1. 函数的返回值是通过return语句获得的。若不需要返回值可不要return语句;4. 若函数无re

8、uturn,则带回一不确定的值;3. 若函数值类型和return类型不一致,以函数类型为准;2. 定义函数时应指定函数值类型(返回值即此类型)。不加类型说明,一律按int型处理;5. 若函数类型为void,则保证不带回任何值(不可有带表达式的return语句),也禁止在调用函数中使用被调用函数的返回值。例:void printsar( ) a=printsar( ); 函数的返回值(二)例 函数的返回值。max(float x,float y) if(x=y) return(x);else return(y);main( ) 运行:2.5 5.6 float a,b,c; max= 5.00

9、scanf(%f %f,&a,&b); c=max(a,b); 注意: 函数类型决定返回printf(“max=%5.2fn”,c); 值类型。函数的嵌套嵌套 函数在被调用的过程中,还可调用其它函数。( 1)函数的定义不允许嵌套;( 2)不能调用主函数 main( )。说明:main( )调用fun1fun1调用fun2fun2结束#include#include#define PI 3.1416float area(float r) return(PI*r*r);float volume(float r1,float r2,float h) float v;v=h*(area(r1)+are

10、a(r2)+sqrt(area(r1)*area(r2)/3.0;return(v); main( )float r1,r2,h;printf(Please input r1 r2 h:n);scanf(%f %f %f,&r1,&r2,&h);printf(The volumeis %fn,volume(r1,r2,h);main volume area(1) (2) (3) (4) (5)调用volume 调用area(9) (8) (7) (6)结束例 4:计算圆台体积Please input r1 r2 h:2.2 6.8 3.3 the volume is 240.140762运行结

11、果:函数的递归 递归调用在调用一个函数的过程中又直接或间接地调用该函数自身。例5 用递归方法求n!例6 用递归方法以字符串形式输出一整数。 递归解决问题的条件1. 原问题可转化为一个新的问题,而新问题的解决方法和原问题相同,但所处理的对象不同,且有规律变化;2. 问题通过转化最终能得到解决;3. 应有使递归结束的条件。main( ) int n; long y;printf(Input a number:);scanf(%d,&n);y=fac(n);printf(%d!=%ldn,n,y);long fac(int n) long f;if (ndouble fib(int n)if(n=1

12、)|(n=2)return 1;return fib(n-1)+fib(n-2);void main( ) int n;printf(“Input n=”);scanf(“%d”,&n);printf(“%lf”,fib(n);例 6:用递归方法求Fibonacci数列fab(5) 5fab(4)+fab(3)3 2fab(3)+fab(2) fab(2)+fab(1)2fab(2)+fab(1)变 量 的存 储 类 别(一)C语言的数据有两种属性:数据类型和存储类型。 完整的变量说明形式存储类型标识符 类型标识符 变量名说明:auto(自动), extern(全局),static(静态),

13、register(寄存器)变 量 的存 储 类 别(一)C语言的数据有两种属性:数据类型和存储类型。 完整的变量说明形式存储类型标识符 类型标识符 变量名说明:如整型、实型、字符型等变 量 的存 储 类 别(一)C语言的数据有两种属性:数据类型和存储类型。 完整的变量说明形式存储类型标识符 类型标识符 变量名说明:变量的名称,符合标识符的命名规则变 量 的存 储 类 别(二)z 动态存储和静态存储用户存储区:程序区、动态存储区、静态存储区( 1)数据的存储方式。( 2)动态存储,存储单元在程序运行的不同时间分配给不同的数据;( 3)静态存储,存储单元在整个程序运行中固定分配给某些数据;( 4)

14、数据的存放区域,由变量定义时的存储类型标识符和变量定义位置决定。局部变量局部变量是函数内定义的变量,只在本函数内有效。说明:1. main中定义的变量也只在主函数内有效。2. 不同函数可使用相同名字的变量,互不干扰。3. 形式参数是局部变量。例: main( ) int a,b,x;x=f(a,b); a,b,x在此内有效int f(int m,int n) int a,b;全 局 变 量(一) 定义全局变量(外部变量)是函数外定义的变量。 有效范围从定义位置到本源文件结束。 作用增加与函数联系的渠道,从函数得到一个以上的返回值。例: int a,b; /* a,b为全局变量 */main(

15、) 全 局 变 量(二)说明:1. 尽量少用或慎用全局变量。原因: 占内存;2. 若外部与局部变量同名,则在局部变量的作用范围内,外部变量不起作用。全局变量过多,会降低程序的清晰性,难以判断每个瞬时各变量的值 ;函数通用性降低,因为函数在运行时要依赖于其所在的外部变量 ;全 局 变 量(三)例7 一维数组,内放十个学生成绩,写一函数求出平均分 , 最高分和最低分。例8 区分同名局部变量和全局变量。#includefloat max=0,min=0;main( ) float ave,score5;int i;for (i=0;imax)max=arrayi;else if(arrayiint a=3,b=5;max(a,b)int a,b;int c;c=ab?a:b;return(c);main( )

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号