C语言程序设计(第二版) 教学课件 ppt 作者 王宏志,韩志明主编 C语言程序设计7

上传人:E**** 文档编号:89383725 上传时间:2019-05-24 格式:PPT 页数:45 大小:416KB
返回 下载 相关 举报
C语言程序设计(第二版)  教学课件 ppt 作者 王宏志,韩志明主编 C语言程序设计7_第1页
第1页 / 共45页
C语言程序设计(第二版)  教学课件 ppt 作者 王宏志,韩志明主编 C语言程序设计7_第2页
第2页 / 共45页
C语言程序设计(第二版)  教学课件 ppt 作者 王宏志,韩志明主编 C语言程序设计7_第3页
第3页 / 共45页
C语言程序设计(第二版)  教学课件 ppt 作者 王宏志,韩志明主编 C语言程序设计7_第4页
第4页 / 共45页
C语言程序设计(第二版)  教学课件 ppt 作者 王宏志,韩志明主编 C语言程序设计7_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《C语言程序设计(第二版) 教学课件 ppt 作者 王宏志,韩志明主编 C语言程序设计7》由会员分享,可在线阅读,更多相关《C语言程序设计(第二版) 教学课件 ppt 作者 王宏志,韩志明主编 C语言程序设计7(45页珍藏版)》请在金锄头文库上搜索。

1、回顾: 模块化程序设计基本思想:将一个大的程序按功能分割成一些小模块, 特点: 各模块相对独立、功能单一、结构清晰、接口简单 控制了程序设计的复杂性 提高元件的可靠性 缩短开发周期 避免程序开发的重复劳动 易于维护和功能扩充 开发方法: 自上向下,逐步分解,分而治之,第七章 C语言函数,C语言程序设计,7.1 概述 7.2 函数定义的一般形式 7.3 函数的参数和函数的返回值 7.4 函数的调用 7.5 函数的嵌套调用和递归调用 7.6 局部变量和全局变量 7.7 存储类型和变量的作用域,第7章 C 语言函数,7.1 概述,C语言程序:是一个或多个函数组合而成的。,C语言函数:具有相对独立的、

2、完整功能的实体。是完成某一功能的一段程序,是程序的基本组成成分。,2019/5/24,C语言程序设计-第七章,5,函数的原型,被调用函数若为: 系统函数: 本文件开头用#include包含被调用函数信息。 用户函数: 若主调函数与被调函数不在同一文件,则主调函数中需要被调用函数的原型说明,若主函数与被调函数在同一文件中,则可不说明其函数原型。,函型原型说明形式: 存储类型 数据类型 函数名(形参类型);,注:在函数原型说明中的形参说明,只需说明形参类型和形参个数,而无需说明形参名。,例:int max(int x,int y)的函数原型是int max(int,int);,2019/5/24,

3、C语言程序设计-第七章,6,1、程序的结构:一个大的程序由许多源程序文件(也叫程序模块,通常是一些相关函数的集合)组成,而源程序文件由预编译和许多函数组成。,2、C语言程序源文件(程序模块)结构: 包含文件:#include 。 宏定义: #define PI 3.14159。 条件编译:#if#else#endif 函数预说明:定义函数的原型 全局变量说明:函数外定义的变量 函数模块定义,2019/5/24,C语言程序设计-第七章,7,例7.1函数实例。 main() int x=1; void f1(),f2(); f1(); f2(x); printf(“x=%dn“,x); void

4、f1(void) int x=3; printf(“x=%dt“,x); void f2(x) int x; printf(“x=%dt“,+x); ,7.2 函数定义的一般形式,1、函数的分类: 系统函数(库函数):由C语言函数库提供,用户可以直接引用。 用户函数(自定义函数):是用户根据需要定义的完成某一特定功能的一段程序。用户函数分为带参数的函数和不带参数的函数。,形式1: 类型名 函数名(形式参数表) 形式参数说明; 说明语句; 执行语句; ,2、函数的定义:,形式 2: 类型名 函数名(类型名 形参1,类型名 形参2,) 说明语句; 执行语句; ,2、函数的定义:,函数体:中的内容,

5、包括说明语句和执行语句。 空函数:函数体为空的函数,例,便于扩充和细化程序。 注:(1)函数的定义是平行的,不允许在一个函数的内部再定义一个函数。 (2)函数值的类型为int或char时,可省略;不需返回函数值时,可用类型名void。 (3)多个形参以逗号分隔。 (4)不同函数中的局部变量可以同名。,7.3 函数的参数和函数的返回值,一个函数与其他函数之间存在数据传递问题,可以通过函数的参数实现。 带参数函数定义的一般形式 类型说明 函数名(形式参数表) 形式参数说明; 函数体 ,7.3.1 形式参数和实际参数: 形式参数(简称形参):是指在函数定义时函数名后面括号中的变量名。 实际参数(简称

6、实参):是指在函数调用时,函数名后面括号中的表达式。,input integers a,b: 7,8 Max is 8,注:(1)形参在调用时才被分配内存空间,调用结束后释放。 (2)实参可以是常量、变量或表达式,但要求有确定值。 (3)实参与形参的类型应一致。 (4)实参向形参的单向传递,“值传递”,即只由实参传给形参,而不能由形参传回给实参。,2019/5/24,C语言程序设计-第七章,13,得到函数值的两种方式: 利用变量(如全程变量、形参等) 利用return语句 return(表达式); return 表达式; return语句的两个用途: (1) 使控制返回到主调函数;(2) 将值

7、返回给主调函数。,7.3.2 函数的返回值,注:(1)一个函数中可以有多个return语句 (2)若无return语句,则执行到函数体末尾后,返回一个不确定的值。 (3)若无值返回,则函数应定义为void类型。 (4)return语句中表达式的类型与函数类型一致。若不一致,以函数值类型为准。,7.3.3 数组作为函数的参数 1.数组元素作为函数的实参 和变量作为函数的实参一样,单向传递。,例7.4有两个数组a和b,各有10个元素,将它们对应地逐个相比(即a0与b0比,a1和b1比,)。如果a数组中的元素大于b数组中的相应元素的数目多于b数组中大于a数组中相应元素的数目,则认为a数组大于b数组。

8、,分析逐个比较,并分别统计出两个数组相应元素大于、等于和小于的次数,设为n、m和k次。最后再决定数组a和数组b的大小。,输入数组a:1 3 5 7 9 8 6 4 2 0 数组b:5 3 8 9 1 3 5 6 0 4 输出结果: aibi 4 times ai=bi 1 times aibi 5 times array a is smaller than array b.,2. 数组名作为函数参数: 实参和形参都要使用数组名,且传递的是数组的首地址,即将实参数组的首地址传递给形参数组名。,例7.5有一个一维数组score,内放10个学生成绩,求平均成绩。,Input 10 scores: 1

9、00 56 78 98.5 76 87 99 67.5 75 97 Average score is 83.40,注:(1) 分别定义实参数组和形参数组,如上例中的形参数组array和实参数组score。 (2) 实参数组和形参数组类型一致。 (3) 实参数组和形参数组长度大小可一致也可不一致。若形参数组长度=实参数组长度,则形参能得到实参全部元素值。若形参数组长度实参数组长度,则形参数组只取实参数组的一部分,其余不起作用。 (4) 若有处理数组元素个数的需要,可另设一个参数,传递元素个数。 (5) 可以实现“实形互传”,因为实参数组与形参数组是同一地址,共占同一段内存单元,形参数组中各元素的

10、值发生变化会使实参数组元素的值同时发生变化。 (6) 多维数组名作实参和形参时,形参数组可省略第一维大小说明,但第二维及以上不能省。,例7.6求两个班学生的平均成绩。 float average (array,n) float array10; int n; int i; float aver,sum=array0; for(i=1;in;i+) sum+=arrayi; aver=sum/n; return(aver); main() static float score15=98.5,97,91.5,60,55; static float score210=67.5,89.5,99,69.

11、5,77,89,76.5,54,60,99.5; printf(“the average of class A is %6.2fn“,average(score1,5); printf(“the average of class B is %6.2fn“,average(score2,10); ,例7.7用选择法对数组中10个整数按由小到大排序。,Enter the array 10 8 6 9 6 0 7 89 25 20 the sorted array: -25,-7,-6,0,6,8,9,10,20,89,例7.8有一个3*4的矩阵,求其中的最大元素。 max_value(array)

12、 int array4; int i,j,max; max=array00; for(i=0;imax) max=arrayij; return(max); main() static int a34=1,3,5,7,2,4,6,8,15,17,34,12; printf(“max value is %dn“,max_value(a); ,7.4 函数的调用,7.4.1 函数调用的一般形式 7.4.2 调用函数与被调用函数的相对位置关系与函数说明,例7.9用数组模拟堆栈程序,给出堆栈操作的函数原型定义。,How many numbers do you want to push: 5 Push

13、data to stack node.0 1 node.1 2 node.2 3 node.3 4 node.4 5 Pop data from stack 5 4 3 2 1,函数调用的一般形式: 函数名(实际参数表) 函数调用的具体方式: (1)语句方式 函数名(实际参数表); (2)表达式方式 变量=带函数的表达式;,func1(x,y,z);,c=max(a,b);,7.4.1 函数调用的一般形式,主调函数与被调函数的相对位置关系: “先定义,后调用” 函数声明形式: 类型名 函数名(类型名 形参1,类型名 形参2,); 类型名 函数名(类型名1,类型名2,); 类型名 函数名();,

14、int max(int a, int b);,int max(int, int);,int max( );,7.4.2 调用函数与被调用函数的相对位置关系与函数说明,2019/5/24,C语言程序设计-第七章,23,7.5 函数的嵌套调用和递归调用,7.5.1 函数的嵌套调用 7.5.2 函数的递归调用,7.5.1嵌套调用 在调用一个函数的过程中再调用另一个函数。,递归调用(自调用函数) 在调用一个函数的过程中,又出现直接或间接地调用该函数本身。,例7.10编写一个程序求解从m个元素选n个元素的组合数程序。计算公式:,分析:用函数f(x)求x!;cmn=f(m)/f(n)/f(m-n);,递归

15、函数:又称自调用函数,简洁但不一定高效。 三个条件:(1)递归问题的规律; (2)通过转化解决问题; (3)有终止递归的条件。,7.5.2 函数的递归调用,例7.11 阶乘的递归函数。 分析:f(n)=n*f(n-1); f(1)=1;,int f(n) int n; if (n=1) return(1); else return(n*f(n-1); main() int x=4; printf(“n!=%dn“,f(x); ,例7.12汉诺塔问题。三根针A、B、C,A上有64个盘子,大小不等,小上大下。要将所有盘子移至C针,可借助于B,每次移一盘,且移动过程中三根针上盘子保持小上大下,打印出

16、移动步骤。,分析:设hanoi(n,one,two,three)用作将n个盘子从one针移至three针,借助two针。 move(getone,putone)用作从getone移一个盘子至putone针。 则hanoi(n,A,B,C)分解为 (1)hanoi(n-1,one,three,two); (2)move(one,three); (3)hanoi(n-1,two,one,three);,Input the number of disks:3 the step to moving 3 diskes: AC AB CB AC BA BC AC,2019/5/24,C语言程序设计-第七章,28,7.6

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

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

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