《高级语言程序设计教学课件》第7章

上传人:xiao****1972 文档编号:71734991 上传时间:2019-01-21 格式:PPT 页数:71 大小:2.02MB
返回 下载 相关 举报
《高级语言程序设计教学课件》第7章_第1页
第1页 / 共71页
《高级语言程序设计教学课件》第7章_第2页
第2页 / 共71页
《高级语言程序设计教学课件》第7章_第3页
第3页 / 共71页
《高级语言程序设计教学课件》第7章_第4页
第4页 / 共71页
《高级语言程序设计教学课件》第7章_第5页
第5页 / 共71页
点击查看更多>>
资源描述

《《高级语言程序设计教学课件》第7章》由会员分享,可在线阅读,更多相关《《高级语言程序设计教学课件》第7章(71页珍藏版)》请在金锄头文库上搜索。

1、1,第7章 函数,2,第7章 函数,7.1 函数的概念 7.2 函数的简单调用 7.3 数组作为函数参数的调用 7.4 函数的嵌套调用 7.5 函数的递归调用 7.6 变量的作用域 7.7 变量的存储类别,3,学习目标,函数定义和函数调用 掌握数组作为参数的函数调用 掌握函数的嵌套和递归调用 掌握变量作用域 了解变量存储类别,4,7.1 函数的概念,1、C是模块化程序设计语言 C是函数式语言 必须有且只有一个名为main的主函数 C程序的执行总是从main函数开始,在main中结束 所有函数是平行的,函数不能嵌套定义,可以嵌套调用,#include “stdio.h“ void main (

2、void ) float x, y, z; float average (float a, float b); printf(“输入2个数值:“); scanf(“%f %f“, ,5,5,【例7-1】 计算两个数的平均值。,主函数,子函数,函数声明,函数调用,函数定义,函数返回值,6,简单的函数举例,main() printf(“* * * * * * * * * *n”); printf(“ How do you do!n”); printf(“* * * * * * * * * *n”); ,要求在屏幕上输出下列的图形 * * * * * * * * * * How do you do!

3、 * * * * * * * * * *,7,简单的函数举例,#include void printstar(int num); main() printstar(10); printf(“ How do you do!n”); printstar(10); ,函数声明,函数调用,void printstar(int num) int i; for(i=0; inum; i+) printf(“* ”); printf(“n”); ,函数定义(无返回值),8,int max( int x , int y ) int z; z = x y ? x : y ; return z ; main( )

4、 int a=5, b=9, c; c = max( a , b ); printf(“Max = %d”, c); ,例:求两个数中的最大值,函数定义,函数调用,函数返回值,9,2、函数分类 从用户角度 标准函数(库函数):由系统提供 用户自定义函数 printstar(int num) 从函数形式 无参函数 有参函数strlen(字符数组名),10,使用库函数应注意的问题,1、函数功能 2、函数参数的数目和顺序,及各参数意义和类型 3、函数返回值的意义和类型 4、需要使用的包含头文件,strlen(str),11,例 有参函数 int max(int x, int y) int z; z=

5、xy?x:y; return(z); ,例 无参函数 printstar( ) printf(“*n”); 或 void printstar(void) printf(“*n”); ,7.2 函数的定义,1、函数定义的一般格式,存储类别 函数类型 函数名(形参列表) 说明部分 语句部分 ,例 有参函数 int max(int x, y) int z; z=xy?x:y; return(z); ,函数带回来的值的类型 若缺省为:int整型 函数没有返回值定义为void,12,2、函数的返回值 返回语句的形式: 功能:使程序控制从被调用函数返回到调用函数中,同时把返回值带给调用函数 说明:只能返回

6、一个值,而不能返回多个值。 return(x,y);,return (表达式); return 表达式; return;,13,函数语句 printstar(10); 表达式方式 函数调用出现在表达式中,函数的返回值参加表达式的运算。 c=5*max(a,b); 作为函数的参数 printf(“max=%d”, max(a,b) ); c=max(k,max(i,j);,函数的调用方式,int max(int x,int y) int z; z = x y ? x : y; return(z); ,14,【例7-3】 输出数字金字塔,#include void main(void) int n

7、um; void pyramid(int n); printf(“请输入金字塔的层数:“); scanf(“%d“, ,请输入金字塔的层数:5 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 Press any key to continue,15,void pyramid(int n) int i, j; for(i=1; i=n; i+) for(j=1; j=n-i; j+) /*输出左侧空格*/ printf(“ “); for(j=1; j=i; j+) /*输出数字*/ printf(“%d “,i); printf(“n”); /*换行*/ ,请输入金字塔的层数:5

8、1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 Press any key to continue,16,【例7-4】 判断素数,#include “stdio.h“ #include “math.h“ int prime(int n) int k, i, result; k = sqrt(n); for(i = 2; i k) result = 1; else result = 0; return result; ,【例4-16】判断n是否为素数 P75 for( i=2; isqrt(n) printf(“%d is a prime number!n “, n); else p

9、rintf(“%d is not a prime number!n“, n);,17,void main(void) int a = 1777, b = 1991; if( prime(a) ) printf(“%d是素数n“,a); else printf(“%d不是素数n“,a); if( prime(b) ) printf(“%d是素数n“,b); else printf(“%d不是素数n“,b); ,1777是素数 1991不是素数,18,说明: 函数中可有多个return语句, 但是,当程序执行到第一个return语句时,函数执行完毕,后面的程序不再执行,返回到函数调用处 若无ret

10、urn语句,遇 时自动返回调用函数 void型函数没有返回值的函数 若return返回值的类型和函数类型不一致,系统自动转换成函数类型后返回,void printstar(int n) for(i=0; in; i+) printf(“* “); printf(“n”); ,int max(int x, int y) if (xy) return x; else return y; ,int fun() return 10; int a = 5; return a; ,#include “stdio.h“ int average(float a, float b) float c; c = (

11、a+b)/2; return c; int main(void) float x, y, z; x = 10.0; y = 5.0; z = average(x, y); printf(“%.2fn“, z); ,7.00 Press any key to continue,19,【例7-5】编写函数,交换两个变量的数值,#include “stdio.h“ void swap(int x, int y); void main(void) int a, b; printf(“请输入交换的数值:“); scanf(“%d%d“, ,请输入交换的数值:7 11 交换前a=7,b=11 交换后a=7

12、,b=11,20,为什么没有实现数值的交换? 函数间的参数传递,形式参数和实际参数 形参:定义函数时,函数名后括号内的变量。 形式参数只有在函数被调用时才分配变量空间(产生),并在函数调用结束后,释放变量空间(消失)。 实参:调用函数时,函数名后括号内的表达式。 形式参数与实际参数的关系 形参与实参类型一致,个数相同。 若类型不一致,自动按形参类型转换。,main() int a,b,c; scanf(“%d,%d“, ,21,【例7-5】编写程序,交换两个变量的数值,#include “stdio.h“ void swap(int x, int y); void main(void) int

13、 a, b; printf(“请输入交换的数值:“); scanf(“%d%d“, ,7,11,调用前,调用时,调用结束,22,结论,参数“值”传递方式 方式: 函数调用时,为形参分配单元,并将实参的值复制到形参中 调用结束,形参单元被释放,实参单元仍保留并维持原值 特点: 形参与实参占用不同的内存单元 单向值传递(形参的改变并不影响实参),23,函数的声明,对被调用函数要求必须是已存在的函数 1)库函数: #include 2)用户自定义函数: 进行函数声明 函数声明 一般形式,函数类型 函数名(形参类型 形参名, ); 函数类型 函数名();,24,例如: int max( int x ,

14、 int y ) ; int max(int , int ) ;,int max(int x ,int y) int z; z = x y ? x : y; return(z); ,可以省略形参的名称,函数的声明,25,函数声明的位置 函数的数据说明部分 在预编译命令之后(建议使用),26,函数的声明举例,void main(void) int a, b; printf(“请输入交换的数值:“); scanf(“%d%d“, ,void swap(int x, int y);,void swap(int x, int y);,void swap(int x, int y) int temp;

15、temp = x; x = y; y = temp; void main(void) int a, b; printf(“请输入交换的数值:“); scanf(“%d%d“, ,27,7.3 数组作为参数的函数调用,当形式参数是一维数组时,可以说明数组长度或不说明数组的长度 形参数组与实参数组公用一块内存空间,main() int b6=, c; c = fun(b); int fun( int a6 ) ,int a,b,a,调用前,调用时,调用后,28,参数的“地址”传递方式 方式:函数调用时,将数据的存储地址作为参数传递给形参 函数调用后,形式参数数组a并没有像实际参数数组b一样再次申请一块连续的空间,而是使得数组a与数组b首地址相同。这样,在函数中访问数组a中的元素实际上等同于访问数组b中的元素,从而实现数组参数传递,29,特点: 本质上仍然是“值”传递,只是传递的值是“地址” 形参与实参指向同样的存储单元 实参和形参必须是地址常量或地址变量 “双向”传递形参的改变影响实参,30,函数中如何知道数组的长度呢?,C语言没有为函数提供任何简便的方法来确定传递给它的数组的长度。但是,处理数组,长度是必须的,所以通常要把数组长度也作

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

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

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