C语言程序设计教案第八章函数Word下载.docx
《C语言程序设计教案第八章函数Word下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计教案第八章函数Word下载.docx(22页珍藏版)》请在冰豆网上搜索。
这样可以分别编写、分别编译,提高调度效率。
3、C程序的执行从函数开始,在函数中结束整个程序的运行。
4、所有函数都是平行的,即函数不能嵌套定义,函数可以互相调用,但不能调用函数。
5、从用户使用的角度看,函数有两种:
标准函数(库函数)和用户自己定义的函数
6、从函数的形式看,函数分为两类:
无参函数和有参函数
8.2函数定义的一般形式
(一)无参函数的定义形式
类型标识符函数名()
{
函数体(包括声明部分和执行部分)
例:
()
(二)有参函数定义的一般形式
类型标识符函数名(形式参数表)
例如:
(x,y)
{z;
>
;
(z);
(三)一个函数可以是空函数
如(){}
8.3函数参数和函数的值
(一)形式参数和实际参数
形式参数:
定义函数时函数名后括号中的变量名,简称形参;
实际参数:
调用函数时函数名后括号中的表达式,简称实参。
{;
(“”);
c=(a,b);
/*调用函数*/
(xy)/*定义函数*/
:
y;
关于形参和实参的说明:
形参在未出现函数调用时,并不占内存中的存储单元。
只有在发生函数调用时,函数中的形参才被分配内存单元。
在调用结束后,形参所占的内存单元也被释放。
2、实参可以是常量、变量或表达式,如:
c=(3);
但要求它们有确定的值。
在调用时将实参的值赋给形参(如果形参是数组名,则传递的是数组的首地址,而不是变量的值。
)
3、在被定义的函数中,必须指定形参的类型;
4、实参与形参的类型应一致。
5、C语言规定,实参对形参的数据传递是“值传递”,即单向传递。
在内存中,实参单元与形参单元是不同的单元。
(二)函数的返回值
1、语句
(表达式);
或:
表达式;
函数执行到最后遇到“}”
语句的用途有二:
(1)用于结束函数的执行并返回到调用者;
(2)用来向调用者传递一个返回值。
注意:
该语句对非函数适用。
2、函数值的类型
如:
()
(c1,c2)
(x,y)
C语言默认函数返回值为型。
3、函数值的类型和语句中表达式的值不一致,则以函数类型为准;
{a,b;
c;
();
(“\n”);
{z;
z=x>
y?
x:
}
若输入的数据情况为:
1.5,2.5
则输出的结果为:
2
4、如果被调函数中没有语句,则函数带回一个不确定值。
5、为了明确表示“不带回值”,可以用“”定义“无类型”(或称“空类型”)。
如:
()
\n”);
8.4函数的调用
要正确实现函数间的相互调用需满足下列条件:
第一,被调用函数必须存在且允许调用;
第二,必须给出满足函数运行时要求的参数;
第三,在调用一个函数之前一般应该对被调用函数进行声明。
(一)函数声明的一般形式
函数类型函数名(参数类型1,参数类型2,…,参数类型n);
或:
函数类型函数名(参数类型1参数名1,参数类型2…);
(,…);
2(i,p1);
(,);
注意:
函数声明与函数定义不同!
(二)函数调用的一般方法
函数调用形式:
函数名(实参表列);
1.函数语句
前述例子中的();
2.函数表达式
();
3.函数参数
(a,());
(“”,());
f(a,b)
{c;
(a>
b)1;
()0;
1
(c);
{2,p;
(i,);
环境下,按自右而左的顺序
求值。
此例f(i,)~f(3,3)
计算组合C()(n!
()!
()
{m,n;
;
(“”);
(m);
(n);
;
(“\n”);
步骤三课堂小结
1、有参函数的定义形式
2、形参和实参的区别
3、函数的声明和调用
步骤四布置作业
书面作业:
(第八章课后练习)8.1
5~§
7
教学目的:
1、掌握函数的嵌套调用和递归调用
2、掌握虚实结合
嵌套和递归调用、数组作为函数参数
递归调用、虚实结合
(x1,x2)
{i;
1;
y1(x1);
{(x12);
(x);
(y*y1>
0)
{y1;
x1;
{y2;
x2;
}((y)>
=0.0001);
步骤二、讲授新课
8.6函数的递归调用
直接或间接调用自身的函数为递归函数。
一个问题采用递归方法来解决时必须符合以下条件:
(1)可将一个问题转化为具有同样解法的规模较小的问题;
(2)必须有明确的结束条件。
[例8.7]:
有5个人坐在一起,问第5个人多少岁,他说比第4个人大2岁,问第4个人的岁数,他说比第3个人大2岁,问第3个人的岁数,他说比第2个人大2岁,问第2个人,他说比第1个人大2岁,问第一个人,他说是10岁。
请问第5个人的岁数?
(P158)
分析:
显然这是一个递归问题。
即:
(5)(4)+2
(4)(3)+2
(3)
(2)+2
(2)
(1)+2
(1)=10
程序:
(n)
(=1)10;
(1)+2;
{(“”(5));
[例8.8]:
利用递归求n!
(P160)
数列已在前面定义过,用递归函数求此数列的第n项。
{f;
(=0=1)1;
(1)
(2);
(f);
[习题8.13]:
用递归方法求n阶勒让德多项式的值,递归公式为:
1(0)
(x)=x
(1)
((21)1(x)-
(1)2(x))(n>
1)
{x,n;
p();
(“\nn&
”);
(“()6.2f”());
p(n,x)
{(=0)
(1);
(=1)(x);
(((2*1)*(
(1))-
(1)*p(
(2))));
双递归。
这段程序的结果是
f(b,t)
{m;
(b<
t)
{()/2;
f
(1);
(){f(1,6);
8.7数组作为函数参数
虚实结合(哑实结合)
一、数组元素作函数实参
值传递:
用赋值的方法,把实在参数的值赋给被调函数对应的形式参数。
不希望破坏调用函数中作为实在参数对象的值时,使用“值传递”方式;
数组元素作为函数实参时如同简单变量。
二、数组名作函数参数
地址传递:
指形参与实参结合的不是数据本身,而是把数据的地址传递给被调用函数。
结合后的形参与实参都指向同一个存储区。
在函数间传递一批数据时,一般采用“地址传递”方式。
[例8.13]:
用选择法对数组中10个整数按由小到大排序。
{a[10];
(0;
i<
10;
)
(“”[i]);
(a,10);
(“:
三、多维数组名作函数参数
{a[3][4]={{1,3,5,7},
{2,4,6,8},{15,17,34,12}};
(“%\n”,
(a));
函数的嵌套调用和递归调用,注意调用的过程
数组作为函数参数有两种情况:
传递数组元素的值、传递数组名
(第八章课后练习)8.2、8.17、15
8-§
10
1、掌握局部变量和全局变量的作用范围
2、掌握变量的存储类别,了解内部函数和外部函数
局部变量和全局变量、变量的存储类别
变量的作用域和生存期
步骤一、复习引导
在函数调用过程中,不仅要注意实参和形参的数据结合,而且要注意各个变量的作用域和生存期。
8.8局部变量和全局变量
一、局部变量
在一个函数内部定义的变量是内部变量,它只在本函数范围内有效。
二、全局变量
在函数之外定义的变量称为外部变量,即全局变量(全程变量)。
全局变量可以为本文件中其他函数所共用。
它的有效范围为从定义变量的位置开始到本源文件结束。
●使用全局变量可以增加函数间的数据联系;
[例8.15]:
有一个一维数组,内放10个学生成绩,写一函数,求出平均分,最高分和最低分。
00;
([]n)
[0];
(1;
n;
{([i]>
)[i];
([i]<
[i];
{[10];
i;
(0<
10)(“”[i]);
(,10);
(“6.2f6.2f6.2f”);
●在同一源文件中,如果外部变量与局部变量同名,则在局部变量的作用范围内外部变量不起作用;
[例8.16]:
外部变量与局部变量同名
35;
/*外部变量*/
(a,b);
/*局部变量*/
{8;
/*a局部变量*/
(“”());
8.9变量的存储类别
从变量的作用域(空间)来分,为全局和局部变量。
从变量值存在的(生存期)时间来分,可以分为:
一、动态存储方式与静态存储方式
静态存储方式:
指在程序运行期间分配固定的存储空间的方式。
动态存储方式:
在程序运行期间根据需要进行动态的分配存储空间的方式。
二、变量
调用函数时系统自动分配存储空间,在函数调用结束时自动释放这些存储空间,称这类局部变量为自动变量。
自动变量用关键字作存储类别的声明。
它也可省。