(高职)C语言程序设计模块五模块化程序设计训练ppt课件.pptx
《(高职)C语言程序设计模块五模块化程序设计训练ppt课件.pptx》由会员分享,可在线阅读,更多相关《(高职)C语言程序设计模块五模块化程序设计训练ppt课件.pptx(56页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C语言程序设计模块五模块化程序设计训练ppt课件模块五模块五 模块化程序设计训练模块化程序设计训练能力目标 掌握函数的定义方法及各种函数的调用方法; 掌握函数的形参,实参,以及函数调用时函数参数间的值传递和地址传递; 了解嵌套调用,递归调用,函数的存储属性; 理解局部变量和全局变量,以及函数和局部变量、全局变量之间的关系。知识准备知识准备引例任务 使用函数调用,求多个数的平均值。使用函数调用,求多个数的平均值。include #define N 5float aver(int b,int n);void main() int i,a5; float ave; printf(请输入5个整型数据:
2、n); for(i=0;iN;i+) scanf(%d,&ai); ave=aver(a,N); printf(n平均值为:%4.2fn,ave);float aver(int b,int n) int i; float s=0; for(i=0;ib?a:b; return m; /*该语句将m的值作为函数的返回值返回*/程序清单程序清单5.1 函数的定义及调用当用户需要利用函数来完成某项特定功能,又没有相应的库函数可以使用时,就必须自己定义函数来完成相应功能。知识点 有参函数定义的一般形式: extern/static类型说明符 函数名 (类型 形参1,类型 形参2,) 说明部分 语句 v
3、 说明l extern/static只能取其中之一,如无说明,为externl 类型说明符是函数返回值的类型。返回值为int类型时,类型说明符可以省略。l 函数名是由用户定义的标识符。l 形参说明部分用以说明形式参数的类型。l 中的内容称为函数体,在函数体中也有类型说明。 无参函数定义的一般形式: extern/static类型说明符 函数名( ) 说明部分 语句 v 无参函数通常用来完成一项指定的功能,函数没有参数。 如,void wellcome() printf(“nWellcom to China!n”); 空函数v C语言允许定义一个空函数,即函数什么也不做。如:void empty
4、() v 一般在程序设计初期阶段只设计基本框架,可将一些函数定义为空函数,细节和功能等程序设计后期再完善。v 在C语言程序中,函数要先声明后调用。函数的定义不能放在main函数之内。 函数的值v 函数调用结束后向调用函数返回一个执行结果,该结果称为函数的返回值。一般形式为 return 表达式;或者 return (表达式);该语句的功能是计算表达式的值,并返回给调用函数。v 说明l 在函数中允许有多个return语句,只能有一个return语句被执行,只能返回一个函数值。l 如果函数有返回值,就必须指定函数的返回值的类型。如果定义函数时没有指定函数的类型,将自动定义为int型。l 如果函数不
5、需返回任何值,函数类型可定义为void类型。l 一般地,定义函数的类型与return语句后表达式的类型保持一致。如果两者不一致,则以函数类型为准,系统自动进行类型转换。即函数的类型将决定函数返回值的类型。l 不能在函数体内定义其他函数,即函数不能嵌套定义。做中学做中学5-2 5-2 使用函数求三个数的平均值。使用函数求三个数的平均值。5.1.2 函数的调用程程序序清清单单#include “stdio.h”float average(float ,float ,float ); /*函数声明*/void main() float a=1.0f,b=2.0f,c=3.0f,m;m=average
6、(a,b,c);printf(“average=%f”,m);float average(float x,float y,float z) float ave;ave=(x+y+z)/3.0f; return ave; 知识点 函数调用的形式 函数名(实参列表); v 在C语言中,把函数调用也作为一个表达式。因此凡是表达式可以出现的地方都可以出现函数调用。v 说明l 调用有参函数,就必须给出实参列表;l 实参列表的在类型、顺序、个数上应该与形参严格一致;l 如果是无参函数,就没有实参列表。但调用无参函数时函数名后的圆括号不能省略。 函数声明v 被调用函数必须是已经存在的函数(库函数或自定义函数
7、);v 调用库函数时必须在文件开头使用#include命令将其相应的头文件包含进来;v 如调用用户自定义函数,在调用之前必须对其进行显式声明;v 函数的声明位置: 可以声明在调用函数之内,也可声明在程序开始。如果程序中一个函数被多个函数调用,可在程序开始处进行函数声明。v 函数的声明格式为: 类型说明符 被调用函数名(类型1 形参1,类型2 形参2,类型n 形参n);或者为: 类型说明符 被调用函数名(类型1,类型2,类型);v 以下几种情况可以省略对被调用函数的函数声明:l 当被调用函数的函数定义出现在本调用函数之前时,可以不对被调用函数再声明而直接调用;l 调用库函数时不需要再声明,只把该
8、函数的头文件用include命令包含在源文件前面即可。 函数的调用方式v 和库函数一样,自定义函数通常也有以下三种调用方式:l 函数语句:直接使用函数名,调用格式为:函数名( );例如:wellcom();l 函数调用出现在表达式中。调用格式为:变量名=函数名(实参列表);例如m=average(a,b,c);l 函数调用还可作为函数参数。例如:printf(“average=%f”,average(a,b,c);做中学做中学5-3 5-3 定义一个函数,该函数的功能是求定义一个函数,该函数的功能是求 的值。的值。5.1.3 函数的参数传递程程序序清清单单#include int sum(in
9、t); /*函数声明*/void main() int n=10,retun; retun=sum(n); /*调用函数sum(),把实参n的值传递形参n*/ printf(1+2+%d=%dn,n,retun); printf(形参n改变后实参n的值:%dn,n);int sum(int n) /*定义函数sum()*/ int i,s=0; for (i=1;i=n;i+) s+=i; n+=10; printf(形参n加10后的值:%dn,n); return s;101ii形参与实参形参与实参输出结果输出结果形参n加10后的值:201+2+10=55形参n改变后实参n的值:10 本例的
10、形参变量和实参变量的标示符都为n,但这是两个不同的变量,各自的作用域不同,只在各自的函数内有效,占用不同的内存单元。v 说明:l 本例的形参变量和实参变量的标识符都为n,但这是两个不同的变量,各自的作用域不同,只在各自的函数内有效,占用不同的内存单元。l 实参的值不随形参的变化而变化。知识点 函数的形参和实参具有以下特点:v 形参变量只有在函数调用时才分配存储单元,在调用结束后,即刻释放所分配的存储单元。因此,形参只有在函数内部有效;v 无论实参是何种类型的变量,在进行函数调用时,它必须具有确定的值,以便把这些值传送给形参;v 实参和形参在数量、类型、顺序上应严格一致,否则会发生“类型不匹配”
11、的错误。v函数调用中发生的数据传送是单向的。做中学做中学5-4 5-4 数组数组a a中存放了一个学生中存放了一个学生5 5门课程的成绩,求平门课程的成绩,求平 均成绩。均成绩。程程序序清清单单#define N 5#include float aver(float a,int n) /*n表示形参数组要处理的元素个数*/ int i; float s=0; printf(n形参-输出某学生%d门成绩:n,N);for (i=0;in;i+) printf(“%4.1f ”,ai); for (i=0;in;i+) s+=ai;printf(n形参-输出修改之后某学生%d门成绩:n,N);fo
12、r (i=0;in;i+) ai+=10;printf(“%4.1f ”,ai); return s/n; 数组作为函数参数数组作为函数参数void main() int i; float scoreN= 34.5f,67.8f,88.0f,93.0f,78.0f,ave; printf(实参-输出某学生%d门成绩:n,N); for(i=0;iN;i+) printf(%4.1f ,scorei); ave= aver(score,N); printf(n实参-输出函数调用之后某学生%d门成绩:n,N); for(i=0;iN;i+) printf(%4.1f ,scorei); print
13、f(n平均成绩为:%4.2fn,ave);输出结果输出结果 实参实参-输出某学生输出某学生5 5门成绩:门成绩:34.5 67.8 88.0 93.0 78.034.5 67.8 88.0 93.0 78.0形参形参-输出某学生输出某学生5 5门成绩:门成绩:34.5 67.8 88.0 93.0 78.034.5 67.8 88.0 93.0 78.0形参形参-输出修改之后某学生输出修改之后某学生5 5门成绩:门成绩:44.5 77.8 98.0 103.0 88.044.5 77.8 98.0 103.0 88.0实参实参-输出函数调用之后某学生输出函数调用之后某学生5 5门成绩:门成绩:
14、44.5 77.8 98.0 103.0 88.044.5 77.8 98.0 103.0 88.0平均成绩为:平均成绩为:72.2672.26v 说明:l 函数aver()的形参为数组a,包含的元素个数为n,主函数中实参为数组score,长度为5;l 在调用时将实参score,N的值传递给形参a,n;l 函数aver的主要功能是求平均值;l 实参数组和形参数组为同一数组。改变形参数组a的各元素的值也就是改变实参数组score的各元素的值。注 意 形参数组和实参数组的类型必须一致,否则将引起错误; 形参数组和实参数组的长度可以不相同; 在函数形参表中,可以不给出形参数组的长度,用另一个形参变量
15、来表示数组元素的个数。知识点 数组可以作为函数的参数使用,进行数据传送。数组用作函数参数有两种形式:v 数组元素作为参数使用 数组元素与普通变量并无区别。在发生函数调用时,把实参数组元素的值传送给形参,实现单向的值传送。v 数组名作为函数的形参和实参使用 数组名作函数参数时,把实参数组的首地址传递给形参数组。形参数组取得该首地址之后,它和实参数组为同数组,共用一段内存空间。在发生参数传递时,如果形参的值改变了,返回到调用函数时,实参数组的值也发生了改变。 做中学做中学5-5 5-5 编程计算编程计算1-1/2+2/3-3/4+4/5-1-1/2+2/3-3/4+4/5-。算法设计算法设计 第一
16、项为加1,从第二项开始存在偶数项加-1.0*(p-1)/p,奇数项加1.0*(p-1)/p的情况。为了方便,定义两个函数来实现,一个函数add1(int k)用来计算前k项之和,在add1()中又调用一个函数get_num(int p),此函数用来计算每次所加项的值。5.2 函数的嵌套调用程程序序清清单单#include float add1(int);float get_num(int);void main( ) int n=7;printf(计算结果如下:%5.2fn,add1(n);float add1(int k)float x,sum=0;int i;for(i=0;ik;i+)x=
17、get_num(i+1); sum+=x;return sum;float get_num(int p)if (p=1)return 1.0f; if (p%2) return 1.0f*(p-1)/p;else return -1.0f*(p-1)/p;输出结果输出结果 计算结果如下: 1.24知识点函数的嵌套调用:在被调用的函数中又调用另外一个函数。做中学做中学5-6 5-6 用递归函数来实现求用递归函数来实现求“n n!=n=n(n-1) (n-1) (n-2) (n-2) (n-3)(n-3)2 21 1”。算法设计算法设计 分析式子规律可理解为, 5.3 函数的递归调用 一个函数直接
18、地或间接地调用它自身称为函数的递归调用,这种函数称为递归函数。1)!1(1101!nnnnnn程程序序清清单单#include long fac(int k)long f;printf(求%d!-,k);if (k=0|k=1) /递归结束条件return 1;else return k*fac(k-1);void main( ) int n; printf(请输一个正整数n:);scanf(%d,&n); printf(n计算结果如下:%ldn,fac(n);程序运行程序运行 请输一个正整数n:8 求8!-求7!-求6!-求5!-求4!-求3!-求2!-求1!- 计算结果如下:40320通过
19、本例可知:一个递归过程分为“递推”和“回推”两个过程。为了防止递归调用无终止的进行,在函数内必须有终止递归调用的方法。常用的办法是加条件判断,满足某种条件后就不再作递归调用,然后逐层返回。本例中的“1!=1”就是递归结束条件。 局部变量也称为内部变量,它是在函数内部定义的。其作用域仅限于函数内。v 说明:l main函数中定义的变量只能在main函数中使用,也不能使用其它函数中定义的变量。l 形参变量是局部变量,只能在定义该变量的函数内有效l 允许在不同的函数中使用相同的变量名。l 在复合语句中定义的变量,其作用域只在复合语句范围内有效。5.4 局部变量和全局变量 函数中的变量按照作用域(即指
20、变量在程序中的有效范围),可以分为局部变量和全局变量。 5.4.1 局部变量float f1(int a) int b=3,c=9; /*形参变量a,局部变量b,c的作用域*/ char f2(int x1,float x2) int i,j; /*形参变量x1,x2,局部变量i,j作用域*/ void main() int a,b; /*局部变量a,b作用域*/ 函数f1和函数main中均有局部变量a,b,但它们的作用域不同,只在定义自己的函数内部有意义,编译时分配不同的存储单元,所以不会相互干扰。如:5.4.2 全局变量是在函数外部定义的变量。v 它不属于某一个函数,而属于一个源程序文件。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高职 语言程序设计 模块 模块化 程序设计 训练 ppt 课件
限制150内