函数与变量存储类别课件

上传人:我*** 文档编号:143694990 上传时间:2020-09-01 格式:PPT 页数:76 大小:542KB
返回 下载 相关 举报
函数与变量存储类别课件_第1页
第1页 / 共76页
函数与变量存储类别课件_第2页
第2页 / 共76页
函数与变量存储类别课件_第3页
第3页 / 共76页
函数与变量存储类别课件_第4页
第4页 / 共76页
函数与变量存储类别课件_第5页
第5页 / 共76页
点击查看更多>>
资源描述

《函数与变量存储类别课件》由会员分享,可在线阅读,更多相关《函数与变量存储类别课件(76页珍藏版)》请在金锄头文库上搜索。

1、2005年3月,1,第七章 函数与变量存储类别,C 程序设计,山西大同大学 物电学院,第7章 函数与预处理命令,7.1 概述 7.2 函数的定义与调用 7.3 数组作函数参数 7.4 函数的嵌套调用和递归调用 7.5 局部变量和全局变量及其作用域 7.6 变量的存储类别及变量的生存期 7.7 函数的存储分类 7.8 编译预处理 7.9 多文件程序的调试方法,2005年3月,2,7.1 概述, 程序结构清晰,可读性好。 减少重复编码的工作量。 可多人共同编制一个大程序,缩短程序设计周期,提高程序设计和调试的效率。,使用函数的 好处,2005年3月,3,【例7.1】求一个整数的立方。,int cu

2、be (int x) /* 函数定义 */ return (x * x * x); main( ) int f, a; printf(nEnter an integer number:); scanf(%d, ,程序运行情况如下: Enter an integer number:2 2 * 2 * 2 = 8,函数调用,程序的执行总是 从main函数开始,2005年3月,4, 一个C源程序可以由一个或多个源程序文件组成。C编译系统在对C源程序进行编译时是以文件为单位进行的。 一个C源程序文件可以由一个或多个函数组成。所有函数都是独立的。主函数可以调用其它函数,其它函数可以相互调用。 在一个C程

3、序中,有且仅有一个主函数main。C程序的执行总是从main函数开始,调用其它函数后最终回到main函数,在main函数中结束整个程序的运行。,说明,2005年3月,5, 函数的种类,从函数定义形式分: 有参函数: 在主调(用)函数和被调(用)函数之间通过参数进行数据传递, 如: int cube (int x) 无参函数: 如:getchar( ) 在调用无参函数时,主调函数不需要将数据传递给无参函数。,从使用的角度看: 标准函数(库函数) 库函数是由系统提供的。如:getchar( )、sin(x)等。在程序中可以直接调用它们。附录A列出了C的部分库函数。 用户自定义函数。 如:例7.1中

4、的cube函数。,2005年3月,6,【例7.2】无参函数的定义与调用。,void welcome ( ) printf(*n); printf( Welcome to China n); printf(*n); main( ) welcome( );,程序的输出结果如下: * Welcome to China *,2005年3月,7,7.2.1 函数的定义,函数定义的一般形式,函数类型 函数名(类型名 形式参数1, ) 说明语句 执行语句 ,例如:求两个数的最大值。 int max(int x,int y) int z; z = x y ? x : y; return( z ); ,类型省略

5、时默认为int类型,2005年3月,8,int max(x,y) int x,y; int z; z = x y ? x : y; return( z ); ,int max(x,y) int x,y; 或 int max(int x,y) ,或 int max(x,y) int x,y,z; z = x y ? x : y; return( z ); ,花括号中也可以为空,这种函数叫空函数 。 不能在函数体内定义其他函数,即函数不能嵌套定义。,形参也可以这样定义,2005年3月,9,函数名(实参表列),在C语言中,把函数调用也作为一个表达式。因此凡是表达式可以出现的地方都可以出现函数调用。例

6、如: welcome( ); if (iabs (a)max) max=iabs(a); m=max(c,max(a,b);,7.2.2 函数的调用,函数调用的一般形式:,2005年3月,10,int sum100( ) int i,t=0; for (i=1; i=100; i+) t+=i; return (t); main( ) int s; s=sum100( ); printf(%dn, s); ,程序输出结果: 5050,int sum ( int x ) int i,t=0; for (i=1; i=x; i+) t+=i; return (t); main( ) int s;

7、s=sum (100); printf(%dn, s); ,【例7.3】求1100的累加和。,思考:两个程序有何不同,程序输出结果: 5050,?,2005年3月,11,void swap(int x, int y) int z; z=x; x=y; y=z; printf(nx=%d,y=%d,x ,y); main( ) int a= 10,b=20; swap(a,b); printf(na=%d,b=%dn,a,b); ,7.2.3 函数参数与函数的返回值,1函数的形式参数与实际参数,程序输出结果: x=20,y=10 a=10,b=20,形式参数(形参),实际参数(实参),【例7.4

8、】编一程序,将主函数中的两个变量的值传递给swap函数中的两个形参,交换两个形参的值。,单向值传递,2005年3月,12,有关形参和实参的说明:, 当函数被调用时才给形参分配内存单元。调用结束,所占内存被释放。 实参可以是常量、变量或表达式,但要求它们有确定的值。 实参与形参类型要一致,字符型与整型可以兼容。 实参与形参的个数必须相等。在函数调用时,实参的值赋给与之相对应的形参。“单向值传递”。,注意:在TC中,实参的求值顺序是从右到左。,2005年3月,13,【例7.5】函数调用中实参的求值顺序。,void fun(int a,int b) printf(a=%d,b=%dn,a,b); m

9、ain( ) int m=5; fun(3+m, m+); ,程序输出结果: a=9,b=5,2005年3月,14,2.函数的类型与函数的返回值,说明: 函数的类型决定了函数返回值的类型。若省略函数的类型,系统默认其为int型。 无返回值的函数应将其类型定义为void (空)类型。, 函数的类型,【例7.6】输出两个数中的大数。,max(int x,int y) int z; z=xy?x:y; return (z); /* 返回z的值 */ main( ) int a,b,c; scanf(%d,%d, ,2005年3月,15,函数的返回值是通过return语句带回到主调函数的,功能:终止函

10、数的运行,返回主调函数,若有返回值,将返回值带回主调函数。,说明: 若函数没有返回值,return语句可以省略。 return语句中的表达式类型一般应和函数的类型一致,如果不一致,系统自动将表达式类型转换为函数类型。, 函数的返回值,return 语句格式:,return (表达式); 或 return 表达式 ; 或 return;,2005年3月,16,【例7.8】计算并输出圆的面积。,s(int r) return 3.14*r*r; main( ) int r,area; scanf(%d, ,自动转换为int型,思考: 若要得到单精度实型的圆面积,程序应如何修改,程序运行情况如下:

11、2 12,?,2005年3月,17,7.2.4 对被调函数的声明和函数原型,变量要先定义后使用,函数也如此。即被调函数的定义要出现在主调函数的定义之前。如swap函数: 允许整型函数(且参数也是整型)的定义出现在主调函数之后。如max函数: 如果非整型函数在主调函数之后定义,则应在主调函数中或主调函数之前对被调函数进行声明。,void swap(int x, int y) main( ) swap(a,b); ,main( ) c=max(a,b); max(int x,int y) ,2005年3月,18,对被调函数进行声明的一般形式,函数类型 函数名(参数类型1 参数名1,); 或 函数类

12、型 函数名(参数类型1,参数类型2,);,思考: 以下哪种情况需要在主调函数中对被调函数声明 被调函数定义在前,主调函数定义在后。 主调函数定义在前,被调函数定义在后,且被调函数的类型不是整型的。 被调函数定义在后,但被调函数的类型是整型。,第二种形式省略了参数名,此种形式也称为函数的原型。,?,2005年3月,19,main( ) void calc(float x,float y,char opr); float a,b; char opr; printf(nInput expression:); scanf(%f%c%f, ,对被调函数的声明,【例7.9】计算并输出两个数的和、差、积、商

13、。,2005年3月,20,图 7.2 验证哥德巴赫猜想,【例7.10】 哥德巴赫猜想之一是任何一个大于5的偶数都可以表示为两个素数之和。验证这一论断。,2005年3月,21,#include math.h int prime(int n); main( ) int a,b,c,n; scanf(%d, ,/* 穷举法判断素数 */ int prime(int n) int i; for (i=2; i=sqrt(n); i+) if (n%i=0) return 0; return 1; ,可以在main函数的前面对prime函数进行声明。实际上,该声明可以省略,为什么?,程序如下:,2005

14、年3月,22,7.3 数组作函数参数,7.3.1 一维数组元素作函数参数,main( ) int a5,i,m ; for (i=0; i5; i+) scanf(%d, ,【例7.11】求5个数中的最小值。,int min(int x, int y) return (xy?x:y); ,用打擂台方法求最小值。m相当于擂主,2005年3月,23,7.3.2 一维数组名作函数参数,数组名表示数组在内存中的起始地址。 例如:数组a在内存中从2000地址开始存放,则a的值为2000。2000是地址值,是指针类型的数据(第8中将介绍指针类型),不能把它看成是整型或其他类型数据。 实参是数组名,形参也应

15、定义为数组形式,形参数组的长度可以省略,但 不能省,否则就不是数组形式了。 【例7.12】用冒泡法将10个整数排序。,2005年3月,24,void sort(int b ,int n); void printarr(int b ); main( ) int a10 = 11,22,63,97,58,80,45, 32,73,36; printf(Before sort:n); printarr(a); sort(a,10); printf(After sort:n); printarr(a); ,void printarr(int b10) int i; for (i=0; i10; i+)

16、 printf(%5d,bi); printf(n);,void sort(int b , int n) int i,j,t; for (i=1; ibj+1) t=bj;bj=bj+1;bj+1=t; ,2005年3月,25,图7.3 调用sort函数,2000,b,形参 b 实际是一个 可以存放地址的变量,a:2000,实参赋给形参,2005年3月,26,#include stdio.h main( ) void scat(char str1 ,char str2 ); char s150,s250; int i,k; printf(Input s1:); gets(s1); printf(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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