C语言程序设计 教学课件 ppt 作者 王煜 等 第7章 函数和变量存储结构

上传人:E**** 文档编号:89422801 上传时间:2019-05-25 格式:PPT 页数:58 大小:154KB
返回 下载 相关 举报
C语言程序设计 教学课件 ppt 作者 王煜 等 第7章 函数和变量存储结构_第1页
第1页 / 共58页
C语言程序设计 教学课件 ppt 作者 王煜 等 第7章 函数和变量存储结构_第2页
第2页 / 共58页
C语言程序设计 教学课件 ppt 作者 王煜 等 第7章 函数和变量存储结构_第3页
第3页 / 共58页
C语言程序设计 教学课件 ppt 作者 王煜 等 第7章 函数和变量存储结构_第4页
第4页 / 共58页
C语言程序设计 教学课件 ppt 作者 王煜 等 第7章 函数和变量存储结构_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《C语言程序设计 教学课件 ppt 作者 王煜 等 第7章 函数和变量存储结构》由会员分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 王煜 等 第7章 函数和变量存储结构(58页珍藏版)》请在金锄头文库上搜索。

1、第7章 函数和变量存储结构,7.1 函数的定义 7.2 函数调用 7.3 函数的递归调用 7.4 变量的作用域 7.5 变量的存储类别 7.6 内部函数和外部函数,7.1 函数的定义,函数的基本概念 C程序中有一个函数是必须存在的,这个函数就是main函数(又称为主函数)。main函数是唯一的。main函数是C程序执行的入口,即程序开始执行时,系统首先调用main函数执行。 C程序中所有函数的定义是平行的,函数之间不存在嵌套或从属的关系,但是函数之间可以相互调用。除main函数不能被其他函数调用外,其他函数是一个可以反复使用的程序段。函数是通过被调用而执行的。 【例7.1】编写程序计算两个整数

2、绝对值阶乘之差。 #include “math.h“ #include “stdio.h “,7.1 函数的定义,int fac(int n) /*计算一个整数绝对值的阶乘*/ int i,f=1; n=abs(n); for(i=1;i=n;i+) f=f*i; return(f); main( ) int x,y,c1,c2; printf(“please enter x, y : “); scanf(“%d%d“, /*输出结果*/ ,7.1 函数的定义,在输入为-7、2时,程序运行结果为: please enter x, y : -7 2 the outcome is 5038 函数类

3、别 C系统的系统函数或库函数:可以直接使用,它们是由C系统提供的。 用户自定义函数:是用户必须定义后才能使用的函数。 函数的定义 函数定义的一般形式如下: 类型标识符 函数名(形式参数表列) 声明部分 执行部分 ,7.1 函数的定义,【例7.2】求两个整数的之和。 #include “stdio.h“ void start_information( ) printf(“ The program begin!n“); int sum(int x1,int x2) /*定义函数的返回值类型,函数名,形参*/ int s; s=x1+x2; /*计算x1和x2之和,放到s中*/ return(s);

4、 /*返回运算结果*/ void end_information( ) printf(“ The program end!n“); ,7.1 函数的定义,main( ) int x,y,z,s; start_information( ); printf(“ enter x y : “); scanf(“%d%d“, 输入23、4时,程序运行结果为: enter x y:23 4 the sum is 27 the program end!,7.1 函数的定义,说明: 函数名前面的类型标识符用来说明函数返回值的类型,函数返回值通过return语句得到。若函数无返回值,可省略这一部分,或用类型标识

5、符“void”表示。 函数名要符合标识符的命名规则。 函数定义时的参数称为形式参数,简称形参。形式参数列表说明的是函数间要传递的数据。调用函数与被调用函数之间的数据传递就是依靠形式参数在调用时接收数据来完成的。 形式参数列表由各个参数的名字和类型说明组成。形参列表中若有多个形参,则形参之间用逗号分隔。,7.1 函数的定义,如果在形式参数列表中只列出参数名,则需要在其后说明每个参数的类型,则函数定的形式变为: 类型标识符 函数名(形式参数表列) 形式参数类型说明; 声明部分 执行部分 例如,sum函数可以写成: int sum(x1,x2) /*定义函数的返回值类型,函数名,形参*/ int x

6、1,x2; int s; s=x1+x2; /*计算x1和x2之和,放到s中*/ return(s); /*返回运算结果*/ ,7.1 函数的定义,如果函数不需要数据传递,形式参数表为空,但“()”不能省略。 花括弧内的内容称为“函数体”。声明部分对函数内使用变量定义和声明,以及对被调用函数声明。执行部分是实现函数功能的语句序列。 return 语句 return 语句格式为: return(); return 语句有两个功能: return 语句将表达式的计算结果返回给调用函数。 结束return 语句所在函数的执行,返回到调用该函数的函数中继续执行。,7.1 函数的定义,【例7.3】编程序

7、求两个浮点数的积。 float product(float x,float y) /*计算两个浮点数的积*/ float s; s=x*y; return(s); main( ) float a,b,p; printf(“nplease enter(a,b): “); /*输出信息提示输入两个实数*/ scanf(“%f,%f“, ,7.1 函数的定义,说明: 函数返回值的类型应为定义函数时的函数值类型。若函数值类型与return语句中表达式值的类型不一致,则以函数值类型为准进行类型转换。例如, double product(float x,float y) /*计算两个浮点数的积*/ flo

8、at s; s=x*y; return(s); 没有返回值的函数,用void定义其函数值类型。否则,函数即使不用return语句返回值,函数仍将返回一个不确定的值。 如果return语句中没有返回值,语句格式为: return;,7.1 函数的定义,return 语句可以出现多次,但是每次执行只能有一条return语句被执行。例如, double example(float x,float y) float s; if (x0 ,7.2 函数调用,函数的声明 在C程序中,一个函数可以被调用需要两个前提: 函数已存在。或者函数是系统函数,或者函数是用户已定义完成的函数。 对于库函数,只要在调用函

9、数所在文件用include命令包含相应的头文件即可;而对于用户定义的函数,除三种情况外都需要在调用函数前对其进行声明,或者在调用函数所在文件用include命令包含被调用函数所在文件。 函数定义是建立函数,即编写不存在的函数,函数定义只能一次。而函数声明是对存在的调函数进行声明,让编译系统可以在编译阶段对函数的调用进行合法性检查,判断形参与实参的类型及个数是否一致,函数声明可以多次。 函数声明格式就是照写已定义的函数首部,再加上分号,即: 类型标识符 函数名(形式参数表列);,7.2 函数调用,【例7.4】编程序求两个浮点数的积。 main( ) float a,b,p; float prod

10、uct(float x, float y); /*函数product的声明语句*/ printf(“nplease enter(a,b): “); scanf(“%f,%f“, ,7.2 函数调用,C语言规定,在下列三种情况下,调用函数前可以不对被调用函数进行声明: 被调函数的返回值类型是整型或字符型。 在函数的外部已对该函数声明,且声明在函数的前面。 【例7.5】编程序求两个浮点数的积。 float product(float x, float y); /*函数product的声明语句*/ main( ) float a,b,p; printf(“nplease enter(a,b): “)

11、; scanf(“%f,%f“, ,7.2 函数调用,float product(float x,float y) /*计算两个浮点数的积*/ float s; s=x*y; return(s); 被调用函数的定义和调用函数在同一个文件内,且出现在调用函数之前。例如例7.3,函数product出现在函数main之前,则main函数没有对product函数声明而直接调用。,7.2 函数调用,函数的调用 函数的调用就是调用函数通过数据传递使用被调用函数的功能。数据传递是通过形参和实参完成的。 函数调用的一般形式是: 函数名(实际参数表列) 说明: 调用函数时的参数称为实际参数,简称实参。实参可以是

12、变量、常量或表达式,是有确定值的参数。 函数的形参与实参要求个数相等,并且对应的形参和实参的类型相同。若被调函数是无参函数,则实参表列为空。 数据传递是通过形参接收实参的数值完成的。函数调用时,形参被分配内存单元,并接收对应实参传来的值。,7.2 函数调用,【例7.6】将三个实数按由小到大顺序输出。 #include “stdio.h“ void start_information( ) printf(“The program begin!n“); void end_information( ) printf(“The program end!n“); float sort(float x1,

13、float x2,float x3) /*定义函数的返回值类型,函数名,形参*/ float t; printf (“x1=%6.2f x2=%6.2f x3= %6.2f n“,x1,x2,x3); if (x1x2) t=x1;x1=x2; x2=t; if (x1x3) t=x1;x1=x3; x3=t; if (x2x3) t=x2;x2=x3; x3=t;,7.2 函数调用,printf (“x1=%6.2f x2=%6.2f x3= %6.2f n“,x1,x2,x3); return(x3+x2+x1); main( ) float a,sum; start_informatio

14、n( ); printf(“please enter data(a): “); /*输出提示信息,要求输入数据*/ scanf(“%f“, ,7.2 函数调用,如果输入4.0,程序运行结果为: The program begin! please enter data(a): 4.0 x1= 5.00 x2= 3.00 x3= 4.00 x1= 3.00 x2= 4.00 x3= 5.00 sum is 12.00 The program end! 完整的函数调用过程 函数调用方式 具有返回值的函数可参加表达式的计算。 具有返回值的函数可作为其他函数的实参。 只完成一定功能、没有返回值的函数可单

15、独成为一个语句,7.2 函数调用,【例7.7】注意函数调用方式。 float max(float x,float y) /*返回两个数中较大的值*/ if (xy) return(x); else return(y); void end_information( ) printf(“ The program end!n”); main( ) float x,y,z,t; printf(“please enter x y z:“); /*输出信息提示输入三个实数*/ scanf(“%f%f %f“, ,7.2 函数调用,注意:不同的编译系统在函数调用时,对实参的求值顺序不同。有的系统自右向左顺次求实参的值,有的系统自左向右顺次求实参的值。 【例7.8】注意以下程序的执行结果,确定编译系统的实参求值顺序。 void test(int a,int b) printf(“n%d %d“,a,b); main( ) int z=4; test(z,z-); 若是按自左向右顺序求值的系统,输出结果是: 4 4 若是按自右向左顺序求值的系统,则输出结果是: 3 4,7.2 函数调用,函数调用的数

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

当前位置:首页 > 高等教育 > 大学课件

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