内容正文:
课程单元教案
本课编号
17
本课课时
2学时
内容提要
项目6 函数应用
任务2 函数调用
教学目的
1、理解函数的形参和实参。
2、理解函数的返回值。
3、掌握函数简单调用的形式。
4、掌握函数如何声明。
知识能力
结构
理解函数的参数和返回值;掌握如何调用函数和声明函数。
教学重点
难点
重点:函数参数;函数返回值;函数调用形式。
难点:函数调用形式。
教学手段
方法
教学方法:项目任务驱动教学法、提问式、启发式
教学手段:课堂讲授法、操作演示法、多媒体教学
思考题与
习题
1、函数参数间如何传递。
2、利用自定义函数求三个数中的大数。
教学内容进程设计
项目导入:综合实践6 学生成绩管理系统功能模块化设计
项目描述:利用自定义函数将学生成绩管理系统中的功能独立出来,进行模块化设计。
问题导入:如何实现学生成绩信息系统功能模块化设计?
根据课前预习及搜集的资料,对函数的概念有一个初步的了解,以方便进行下面知识内容的学习。
任务2 函数调用
2.1函数参数
假设定义了一个函数max,功能是求两个数中的大数。而实际要比较大小的数在主函数中进行输入,那如何能在主函数中利用max函数来比较输入的两个数呢?即函数之间如何进行数据的传送呢?
例:使用自定义函数比较两个数的大小并输出大数。
#include<stdio.h>
void max(int x,int y)
{int z;
if(x>y) z=x; else z=y;
printf(“max=%d
”,z);}
main( )
{int a,b;
printf(“请输入两个数字:
”);
scanf(“%d,%d”,&a,&b);
max(a,b);}
main()函数中的实参a和b将实际数值传递给max函数的形参x和y,如图所示:
说明:
(1)形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。
(2)实参可以是常量、变量、表达式等,在进行函数调用时,把确定的值传送给形参。
(3)实参和形参在数量、类型和顺序上应严格一致 。
(4)函数调用中发生的数据传送是单向的。
2.2 函数返回值
函数的返回值是指函数被调用之后,返回给主调函数的值。
return语句一般形式:
return 表达式;或return(表达式);
例:使用自定义函数比较两个数的大小并输出大数。
#include<stdio.h>
int max(int x,int y)
{int z;
if(x>y) z=x; else z=y;
return(z); }
main( )
{int a,b,c;
printf(“请输入两个数字:
”);
scanf(“%d,%d”,&a,&b);
c=max(a,b);
printf(“max=%d
”,c);}
说明:(1)在函数中允许有多个return语句,但每次调用只能有一个return语句被执行。 (2)函数返回值的类型和函数定义中函数类型应保持一致。如果不一致,以函数类型为准。
(3)函数中不带return时,其右大括号将流程返回调用函数。
(4)不返回函数值的函数,可以明确定义为“空类型”,类型说明符为“void”。如果类型说明缺省,则系统默认为整型。
2.3 函数调用形式
函数调用的一般形式:
函数名(实际参数表)
功能:使程序流程转向被调用函数,执行被调函数,完成被调函数的功能。
说明:(1)如果是调用无参函数,格式为:函数名()。
(2)实际参数表中的参数可以是常数、变量或表达式,各实参之间用逗号分隔。
(3)实参与形参的个数应该相等,类型一致,顺序要一一对应。
三种调用方式:
将函数作为表达式调用
c=max(a,b);要求函数有返回值
将函数作为语句调用
max(a,b);不要求函数有返回值
将函数作为实参调用
printf("%d",max(a,b)); 要求函数有返回值
2.4 函数声明
与使用变量之前要先进行变量声明一样,在调用某函数之前也应对该被调函数进行声明。
函数声明的一般形式为:
函数类型 函数名(类型 形参1,类型 形参2…);
函数类型 函数名(参数类型1,参数类型2…);
说明:(1)被调用函数必须是已经定义的函数(库函数或用户自定义函数)。
(2)如果使用库函数,需要在文件开头用#include命令将库函数的信息包含到本文件中。例如,标准输入/输出头文件“stdio.h”,数学头文件“math.h”和字符串头文件“string.h”。
(3)如果使用用户自定义函数,该函数的位置可以放在主调函数的后面,但要在主调函数中对被调用函数作声明,即函数定义声明。
(4)如果被调函数的定义写在主调函数之前,可以省略函数声明。
(5)如果被调函数的返回值是整型或字符型时,可以省略函数声明。
(6)调用库函数时可以省略函数声明,但必须在源文件开头包含该函数的头文件。
(7)如在所有函数定义之前,在函数外预先说明了各个函数的类型,则在以后的各主调函数中,可不再对被调函数作说明。
例:用自定义函数求两个整数之和。(对比两种函数声明方法)
方法1:主调函数在前,被调用函数在后。
#include<stdio.h>
main()
{ int x,y;
printf(“请输入两个数字:
”);
scanf("%d%d",&x,&y);
printf("s=%d
",sum(x,y));}
int sum(int a,int b ){
return a+b;}
编译错误为:‘sum’:undeclared identifier,即sum是未定义标识符。改写为方法2.
方法2:主调函数在后,被调用函数在前。
#include<stdio.h>
int sum(int a,int b ){
return a+b;}
main()
{ int x,y;
printf(“请输入两个数字:
”);
scanf("%d%d",&x,&y);
printf("s=%d
",sum(x,y));}
方法3:主调函数在前,被调用函数在后,添加函数定义声明。
#include<stdio.h>
main()
{ int x,y;
int sum(int a,int b );
printf(“请输入两个数字:
”);
scanf("%d%d",&x,&y);
printf("s=%d
",sum(x,y));}
int sum(int a,int b ){
return a+b;}
说明:(1)如果被调函数的定义写在主调函数之前,可以省略函数声明。
(2)如果被调函数的返回值是整型或字符型时,可以省略函数声明。
(3)调用库函数时可以省略函数声明,但必须在源文件开头包含该函数的头文件。
随堂实训练习:
1、利用自定义函数求三角形面积。
2、输入一个正整数,判断是否是素数,是返回1,否则返回0。
教学小结
1.理解函数形参和实参的概念以及参数间如何传递。
2.理解函数返回值的含义。
3.掌握函数简单调用的三种形式。
4.掌握函数声明的格式和用法。
学科网(北京)股份有限公司
$$