《第6章函数ppt课件.ppt》由会员分享,可在线阅读,更多相关《第6章函数ppt课件.ppt(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、在此输入您的封面副标题第6章 函数Virus中国水利水电出版社中国水利水电出版社第6章 项目6:根据条件查询学生成绩 6.5 基础知识基础知识数组参数传递数组参数传递 6.4 任务任务6.2 根据班级信息查询一门课程总分和平均分根据班级信息查询一门课程总分和平均分6.3 具体实现具体实现6.1 任务任务6.1 根据学生信息查询一门课程的分数根据学生信息查询一门课程的分数 6.6 具体实现具体实现 6.2 基础知识基础知识函数函数教学要求:v 掌握:函数定义;函数调用v 理解:函数的形参与实参的对应关系、参数传递方法及函数返回值的概念、数组作为函数参数调用的方法6.1 任务6.1 根据学生信息查
2、询一门课程的分数 v6.1.1 任务描述与分析v任务描述: 编写一个函数,实现“根据学生学号查询一门课程的分数”的功能。6.1 任务6.1 根据学生信息查询一门课程的分数 v 任务分析:1. 该功能用独立的模块来实现。2. 学生的学号和分数分别用两个数组来存储,它们之间的逻辑关系用数组下标来确定。即两个数组下标相同的值即表示是同一个学生的信息。3. 查询条件可通过键盘输入的方式随机输入,然后将随机输入的查询条件作为参数传递给负责查询的函数模块。4. 查询结束后,将查询结果返回,打印输出最后结果。6.1 任务6.1 根据学生信息查询一门课程的分数 v6.1.2 工作过程 定义一个按学生学号查询的
3、函数,查询的过程是在学号数组中查找每个学生的学号信息,与查询条件进行匹配; 如果匹配成功,则说明查询成功,返回该学生学号所在的下标。此下标所对应的分数数组的值就是学生的课程分数; 如果匹配不成功,说明该学生不在成绩管理系统中,则返回查询不成功信息。6.2 基础知识函数 在C语言中,每个程序模块的作用是由函数完成的。一个C语言程序可由一个主函数和若干个函数构成。由主函数调用其他函数,其他函数也可以调用别的函数。同一个函数可以被一个或多个函数多次调用。函数的调用 9函数的分类从参数角度分:从参数角度分: 有参函数有参函数 函数定义、函数说明和函数调函数定义、函数说明和函数调用中都有参数用中都有参数
4、 ,如:如: int cube (int x) int cube (int x) 无参函数无参函数 函数定义、函数说明和函数调函数定义、函数说明和函数调用过程中都不包含参数,如:用过程中都不包含参数,如:getchar( )getchar( )从函数定义的角度看:从函数定义的角度看: 标准函数(库函数)标准函数(库函数) 库函数是由系统提供的。库函数是由系统提供的。如:如:getchar( )getchar( )、sin(x)sin(x)等。等。只需在程只需在程序前加上它们的头文件,即可在程序前加上它们的头文件,即可在程序中直接调用它们。序中直接调用它们。 用户自定义函数用户自定义函数 由用户
5、按需要编写的函数。由用户按需要编写的函数。 10函数的分类6.2.1 函数的定义 v在使用一个函数前,需要先对其进行定义。函数定义通常由两部分组成:函数头部和函数体。函数的一般定义形式为: 类型标识符 函数名(形参表列) 声明部分 语句部分 6.2.1 无参数函数定义 类型标识符 函数名() 声明部分 语句 说明: 1. 函数头部的“类型标识符”是指函数类型,即函数返回值的数据类型。如果函数无返回值,则“类型标识符”可以使用空类型(即void类型)。如果省略函数的类型标识符,则默认的数据类型为int型。 2. “函数名”必须为有效的标识符。 3. 函数名后有一个空括号,其中无参数,但括号不可少
6、。花括号为空,但不能省略6.2.1 无参数函数定义【例6.1】定义一个显示“Welcome to Beijing!”字样的函数。 void welcome() printf (Welcome to Beijing!); 6.2.1 空函数 类型说明符 函数名() 【例6.2】定义一个空函数。 void welcome() 函数体为空6.2.1 有参数函数定义 类型标识符 函数名(形式参数表列) 声明部分 语句 说明: 1.“形式参数表列”指定函数被调用时用于接收主调函数实际值的标识符。各参数之间用逗号隔开。形参名在同一个函数中不能重名。 2.指明形参表列时必须给出每个形参的类型说明。【例6.3
7、】编写一个求两个整数中较大数的函数。 int max(int a, int b) int c; if (ab) c=a; else c=b; return c; 6.2.2 函数的调用v函数调用的一般形式 函数名(实际参数表列)v 说明: 1.如果是调用无参函数,则“实际参数表列”为空,但括号不能省略。 2.实际参数表列中的参数可以是常量、变量或表达式。 3.多个参数之间用逗号隔开。 4.实参和形参在个数、类型、顺序上必须一一对应。【例6.4】利用main函数实现函数调用。 #include void welcome() printf (Welcome to Beijing!n); void
8、main() welcome() ; 6.2.2 函数的调用v函数调用的方式 (1)函数语句)函数语句 welcome(); (2)函数表达式)函数表达式 z=max(x,y); (3)函数参数)函数参数 printf(“%dn”,sum(x,y,z); 6.2.3 函数的参数和返回值 v1.函数的形参和实参 形参:函数定义时形式参数表列中的参数,简称形参。 实参:函数调用时,主调函数传递给被调函数的实际参 数,简称实参。6.2.3 函数的参数和返回值 v1.函数的形参和实参 函数的形参和实参具有以下特点: (1)形参没有具体的值,只有在函数被调用时,编译系统才会为其分配内存单元,用于存放实参
9、传递的值。当调用结束后,即刻释放形参所分配的内存单元。 (2)实参可以是常量、变量、表达式。无论是哪种类型的数据,实参一定要有确定的值。 (3)实参和形参在数量上、类型上、顺序上都必须一一对应。 (4)实参向形参的数据传递过程是“单向值传递”。即只能实参传递给形参,反之不可。 (5)实参和形参占用不同的内存单元,所以形参值的改变不会影响实参的值。 v 【例6.5】编写一个求两个数中的较大数的函数,分析函数调用时参数的传递。 int max(int a, int b) /*有参有返回值的函数*/ int c; if (ab) c=a; else c=b; return c; void main(
10、) int c=6,d=5,m; m=max(c,d); /*函数调用*/ printf(“m=%dn”,m); 6.2.3 函数的参数和返回值 v2.函数的返回值 return语句的一般形式是: return(表达式); 或者 return 表达式; 说明: 1.该语句的功能是将“表达式”的值返回到主调函数中。 2.一个函数中可以有多个return语句,但被执行的只有一个,即程序执行到哪一 return语句,哪一个return语句就起作用。 3.函数返回值的类型必须与函数类型一致。 4.对于无返回值的函数,函数类型定义为void类型。此时,被调函数中无return语句。v 【例6.6】在例6
11、.5的基础上稍作修改,分析以下程序运行的过程。 void max(int a, int b) /*有参无返回值的函数*/ int c; if (ab) c=a; else c=b; printf(c=%dn,c); void main() int c=6,d=5; max(c,d); /*函数调用*/ 6.3 具体实现v 6.3.1 6.3.1 操作步骤操作步骤 1定义一个根据学号查询的函数Student_SearchByIndex(),实现按学生学号进行查询的功能。若查询成功,则返回匹配的学号所在的下标;若匹配不成功,则返回-1。 int Student_SearchByIndex(int
12、num) int no5=201401,201402,201403,201404,201405; int i,j=-1; for (i=0;i5;i+) if (noi=num) j=i; break; return j; 6.3 具体实现v6.3.1 6.3.1 操作步骤操作步骤 2. 主函数中,从键盘输入所要查询的学生学号信息,将学号作为实参传递给查询函数Student_SearchByIndex(),返回值赋值给变量i,判断i的值,从而可以获取所对应的学生成绩。 void main() float score5=80,60,75,45,90; int num,i; printf(请输入要
13、查询的学生学号:); scanf(%d,&num); i=Student_SearchByIndex(num); if(i=-1) printf(该学生不存在!n); else printf(该学生成绩是%8.2fn,scorei); 6.4 6.4 任务任务6.26.2:根据班级信息查询一门课程的总分和平均分:根据班级信息查询一门课程的总分和平均分v6.4.1 任务描述与分析v任务描述: 编写一个函数,完成“根据班级信息查询一门课程的总分和平均分”的功能。 6.4 6.4 任务任务6.26.2:根据班级信息查询一门课程的总分和平均分:根据班级信息查询一门课程的总分和平均分v 任务分析: 1.
14、程序中涉及班级信息和成绩信息,可分别定义两个数组来存储。定义一个一维数组来存储班级信息;定义一个二维数组来存储成绩信息。为了跟班级信息建立关系,约定二维数组的行标按顺序对应班级信息的下标,即二维数组第0行表示的是班级数组中第0个班级的所有成绩。 2.班级信息可从键盘输入,然后在班级数组中查找,找到对应的班级信息后求和。 3.编写一个求总和的函数,该函数接收从主调函数中传递的实参,求和完成后将结果返回主调函数。 4.主调函数根据返回值可求出平均值并打印输出。v6.4.2 工作过程 定义一个求和函数,将满足条件的二维数组中的成绩信息求和,并将结果返回主调函数。 主调函数中可进行查询条件的输入,如班
15、级信息,将它与班级数组中的元素一一匹配,如果匹配成功,则说明输入无误,可调用求和函数求出一门课程的总分和平均分;如果匹配不成功,则返回不成功信息。6.4 6.4 任务任务6.26.2:根据班级信息查询一门课程的总分和平均分:根据班级信息查询一门课程的总分和平均分6.5 基础知识数组参数传递v6.5.1 6.5.1 数组元素作函数参数数组元素作函数参数 数组元素作为函数参数传递时,实际传递的是下标变量的值。因此,它的使用方式与之前讲的普通变量作为参数传递是一样的。函数调用时,把作为实参的数组元素的值传递给形参,实现单向值传递。 数组元素作为函数实参进行数据传递时,形参值的改变不会影响到实参。 v
16、【例6.7】输入5个学生的成绩,如果成绩低于60分,输出-1,否则输出原分数。 #include void pass(int x) if(x60) x=-1; printf(被调函数显示:%d ,x); void main() int a5,i; for(i=0;i5;i+) scanf(%d,&ai);pass(ai);printf(主调函数显示:%dn,ai); 6.5 基础知识数组参数传递v6.5.2 6.5.2 数组名作函数参数数组名作函数参数 数组名作为函数参数进行数据传递时,要求形参和对应的实参都必须是类型相同的数组。函数调用时,实参传递的是地址,即把实参数组的首地址传递给形参数组
17、名。形参数组取得该首地址后,也有拥有了实际的数组。 实际上,数组名作为函数参数时,形参数组和实参数组指向同一个数组,它们拥有共同的存储空间。因此,形参的改变会影响到实参的改变。【例6.8】在例6.7的基础之上稍作修改,观察它们的区别。void pass(int a5) int i;printf(n被调函数显示,数组a的元素值分别是:n);for(i=0;i5;i+) if(ai60) ai=-1; printf(%8d,ai); void main() int a5,i; printf(请输入5个学生成绩:n); for(i=0;i5;i+) scanf(%d,&ai);pass(a);pri
18、ntf(n主调函数显示,数组a的元素值分别是:n); for(i=0;i5;i+) printf(%8d,ai);printf(n); 6.6 具体实现v6.6.1 6.6.1 操作步骤操作步骤 1.定义求成绩总和的函数Student_ScoreSum(),它有两个参数,一个是float score55,用来接收从主调函数传递的二维成绩数组名;一个是int i,用来接收主调函数中查询到的班级数据所在的数组下标。通过循环对要查询的班级所有成绩进行求和,并返回给主调函数。 float Student_ScoreSum(float score55,int i) float sum=0; int j;
19、 for(j=0;j5;j+) sum += scoreij; return sum; 6.3 具体实现v6.6.1 6.6.1 操作步骤操作步骤 2.主函数中,通过键盘输入要查询的班级信息,在班级数组中进行查询,若查询成功,则调用成绩求和函数Student_ScoreSum(),对班级成绩进行求和,将返回的成绩总分打印输出;若查询不成功,则输出不成功信息。 void main() float score55=80,60,75,45,90,50,62,45,82,74,81,62,54,47,65, 56,62,74,42,58,90,72,53,64,50; float sum=0; int
20、 grade5=1,2,3,4,5,i,num; /班级数组,分别表示每个班的班号 printf(请输入班级:n); scanf(%d,&num); for(i=0;i5;i+) if(gradei = num) sum=Student_ScoreSum(score,i); printf(该班的学生成绩总分为%.2f,平均分是%.2fn,sum,sum/5); break; if(i=5) printf(系统中无该班级信息n); 6.7 本章小结v 本章主要介绍了函数的定义、函数的参数和返回值、函数的调用方法,以及数组作为参数传递的基本实现方法。v 函数定义的一般形式: 类型标识符 函数名(形式参数表列) 声明部分 语句部分 v 函数可分为有参函数和无参函数。函数调用时,实参向形参传递参数。如果实参是变量,则形参值的变化不会影响实参值;如果实参是数组名,则形参值的变化会影响实参值。v 函数有无返回值函数和有返回值函数。函数的返回值是由return语句带回的。v 数组作为函数参数传递时,有两种情况:数组元素作为函数参数;数组名作为函数参数。数组元素作为函数参数传递时,形参值的变化不会影响实参值;数组名作为函数参数传递时,形参值的变化会影响实参值。Virus