【最新】用函数实现模块化程序设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

19
7.2.2 函数定义 P171
1.怎样定义无参函数
➢函数名后面圆括号中空的,没有参数
➢定义无参函数的一般形式为:
类型名 函数名()
{ 指定函数 函数体 值的类型 }
包括声明部分和 语句部分
2021/2/2
20
7.2.2 函数定义 P171
1.怎样定义无参函数
➢函数名后面圆括号中空的,没有参数
float score[10],aver; int i; printf("input 10 scores:\n"); for(i=0;i<10;i++)
scanf("%f",&score[i]); aver=average(score); 数组名作实参 printf("average score is %5.2f\n",aver); }
int max (int x,int y)
{int z; if(x>y) z=x; else z=y; return(z);
}
求x和y二者 中大者
2021/2/2
23
7.2.3 函数的调用 P172
1.调用无参函数的形式
函数名()
➢ 如print_star()
2. 调用无参函数的形式
函数名(实参表列) ➢如max(a,b)
2021/2/2
10
➢说明:
(2) 一个源程序文件由一个或多个函数以及其 他有关内容组成。一个源程序文件是一个编译 单位,在程序编译时是以源程序文件为单位进 行编译的,而不是以函数为单位进行编译的。
2021/2/2
11
➢说明:
(3) 不论main函数出现在什么位置,总是从 main函数开始执行。如果在main函数中调 用其他函数,在调用后流程返回到main函数 ,在main函数中结束整个程序的运行。
➢除了可以使用库函数外,还可以编写一些 本领域或本单位常用到一些专用函数, 供本领域或本单位的人员使用。、
➢在程序设计中要善于利用函数,可以减 少各人重复编写程序段的工作量,同时 可以方便地实现模块化的程序设计。
2021/2/2
9
➢说明:
(1) 一个C程序由一个或多个程序模块组成, 每一个程序模块作为一个源程序文件。对于较 大的程序,一般不把所有内容全放在一个源程 序文件中,而是将它们分别放在若干个源文件 中,由若干个源程序文件组成一个C程序。这 样便于分别编写、分别编译,提高调试效率。 一个源程序文件可以为多个C程序所调用。
2021/2/2
43
实参、形参都是float型
float average(float array[10])
{ int i;
与score共占同一存储单元
float aver,sum=array[0];
for(i=1;i<10;i++)
相当于score[0]
sum=sum+array[i];
aver=sum/10; return(aver);
用函数时向它们传递数据 ➢指定函数的功能。这是最重要的,这是
在函数体中解决的
2021/2/2
18
7.2.1 为什么要定义函数 P170
➢如果程序中要调用库函数,只需用 #include指令把有关的头文件包含到 本文件模块中即可。
➢如果想使用库函数中没有的函数,需要 程序设计者在程序中自己定义。
2021/2/2
2021/2/2
16
7.2.1 为什么要定义函数 P170
➢C语言要求,在程序中用到的所有函数, 必须“先定义,后使用”
➢指定函数名字、函数返回值类型、函数 实现的功能以及参数的个数与类型,将 这些信息通知编译系统。
2021/2/2
17
7.2.1 为什么要定义函数 P170
➢指定函数的名字,以便以后按名调用 ➢指定函数类型,即函数返回值的类型 ➢指定函数参数的名字和类型,以便在调
2021/2/2
6
7.1 函数是什么 P168
➢一个C程序可由一个主函数和若干个其 他函数构成。由主函数调用其他函数, 其他函数也可以互相调用。同一个函数 可以被一个或多个函数调用任意多次
2021/2/2
7
7.1 函数是什么
main
P168
a
b
c
de f g h
i
e
2021/2/2
8
7.1 函数是什么 P168
义而直接使用它们。应该说明,不同的C语言 编译系统提供的库函数的数量和功能会有一些 不同,当然许多基本的函数是共同的。
用户自己定义的函数。它是用以解决用户专门 需要的函数。
2021/2/2
14
➢说明:
(6) 从函数的形式看,函数分两类。 ① 无参函数。函数没有参数,一般用来执行固 定的一组操作。无参函数可以带回或不带回函 数值,但一般以不带回函数值的居多。
➢定义无参函数的一般形式为:
类vo型id名 函数名()

函数体 }
表示不需要 带回函数值
2021/2/2
21
7.2.2 函数定义 P171
2. 怎样定义有参函数 ➢定义有参函数的一般形式为:
类型标识符 函数名(形式参数表列) { 函数体 }
2021/2/2
22
7.2.2 函数定义 P171
2. 怎样定义有参函数
如果有多个 参数,用逗
号隔开
2021/2/2
24
例7.2 输入两个整数,输出二者中的 大者。要求在主函数中输入两个整 数,用一个函数max求出其中的大 者,并在主函数中输出此值。
2021/2/2
25
#include <stdio.h>
函数类型
参数类型
int max(int x,int y) 定义函数
2021/2/2
4
7.1 函数是什么 P168
➢函数就是功能(Function) ➢每一个函数用来实现一个特定的功能 ➢函数的名字应反映其代表的功能
2021/2/2
5
7.1 函数是什么 P168
➢在设计一个较大的程序时,往往把它分 为若干个程序模块,每一个模块包括一 个或多个函数,每个函数实现一个特定 的功能。
如printf (″%d″, max (a,b));
2021/2/2
33
7.2.4 对被调用函数的声明 P175 和函数原型
➢在一个函数中调用另一个函数需要具备如
下条件:
(1) 被调用函数必须是已经定义的函数(是库
函数或用户自己定义的函数)。
(2) 如果使用库函数,应该在本文件开头加相
应的#include指令。
2021/2/2
2
7.1 函数是什么 P168
➢有时程序中要多次实现某一功能,就 需要多次重复编写实现此功能的程序 代码。这使程序冗长,不精炼。
2021/2/2
3
7.1 函数是什么 P168
➢采用“组装”的办法简化程序设计过程 ➢事先编好一批函数实现各种不同的功能 ➢用到什么函数就直接装使用就可以 ➢这就是模块化的程序设计
27
#include <stdio.h>
void main()
{ int max(int x,int y); int a,b,c;
printf(”please input two number:”);
scanf(“%d,%d”,&a,&b);
c = max(a,b); 实际参数
printf(“max is %d\n”,c);
(3) 如果使用自己定义的函数,而该函数的位
置在调用它的函数后面,应该进行函数声明
2021/2/2
34
7.2.4 对被调用函数的声明 P175 和函数原型
➢函数原型的一般形式有两种:
如 int max(int x,int y); int max(int,int);
➢原型说明可以放在文件的开头,这时本文 件中所有函数都可以使用此函数
如例7.1中的“print_star();”
2021/2/2
31
调用函数的方式:
➢按函数在程序中出现的位置来分,可以有 以下3种函数调用方式 2. 函数表达式 ➢函数出现在一个表达式中,这种表达式称 为函数表达式
如例7.2中的“c=max(a,b);”
2021/2/2
32
调用函数的方式:
➢按函数在程序中出现的位置来分,可以有 以下3种函数调用方式 3. 函数参数 ➢函数调用作为一个函数的实参
② 有参函数。在调用函数时,要给出实参。主 调函数在调用被调用函数时,通过参数向被调 用函数传递数据,一般情况下,执行被调用函 数时会得到一个函数值,供主调函数使用。
2021/2/2
15
7.2 函数的定义和调用 P170
7.2.1 为什么要定义函数 7.2.2 函数定义 7.2.3 函数的调用 7.2.4 对被调用函数的声明和函数原型
相当于score[i]
}
2021/2/2
44
7.5 变量的作用域和生存期 P192
7.5.1 变量的作用域---局部变量和全局变量 7.5.2 变量的存储方式和生存期 7.5.3 作用域和生存期的小结
2021/2/2
45
7.5.1 变量的作用域 ——局部变量和全局变量 P192
1 局部变量
在函数和复合语句内定义的变量,称为内部 变量或局部变量
2021/2/2
35
P177
7.3 函数的嵌套调用和递归调用
7.3.1 函数的嵌套调用 7.3.2 函数的递归调用
2021/2/2
36
7.3.1 函数的嵌套调用 P177
➢调用一个函数的过程中,又可以调 用另一个函数
2021/2/2
37
7.3.1 函数的嵌套调用 P177
main函数


a函数 ③④
{ int z;
定义函数内
if (x>y) z=x; 使用的变量
else z=y;
return(z);
}
2021/2/2
26
c=max(a,b); (main函数)
int max(int x, int y) (max函数) {
int z; z=x>y?x:y; return(z); }
2021/2/2
➢解题思路:
在主函数中定义一个实型数组score,将输入 的10个学生成绩存放在数组中
设计函数average,用来求学生平均成绩 需要把数组有关信息传递给average函数 采取用数组名作为实参,把数组地址传给
average函数,在该函数中对数组进行处理
2021/2/2
42
#include <stdio.h> void main() { float average(float array[10]);
第7章 用函数实现 模块化程序设计 P168
7.1 函数是什么 7.2 函数的定义和调用 7.3 函数的嵌套调用和递归调用 7.4 数组作为函数参数 7.5 变量的作用域和生存期
2021/2/2
1
7.1 函数是什么 P168
➢如果程序的功能比较多,规模比较大, 把所有的程序代码都写在一个主函数 中,就会使主函数变得庞杂、头绪不 清,使阅读和维护程序变得困难。
2021/2/2
40
7.4.2 数组名作函数参数 P186
➢希望在函数中处理整个数组的元素时,可 以用数组名作为函数实参
➢注意,此时只是将数组的首元素的地址传 递给所对应的形参,因此对应的形参应当 是指针变量(见第8章)。
2021/2/2
41
例7.7 有10个学生成绩,用一个函数求全 体学生的平均成绩。
实参 a 2 3 b
形参 x 2 3 y
2021/2/2
29
函数调用的过程:
➢调用结束,形参单元被释放 ➢实参单元仍保留并维持原值,没有改变 ➢如果在执行一个被调用函数时,形参的值 发生改变,不会改变主调函数的实参的值
实参 a 2 3 b
形参 x 2 3 y
2021/2/2
30
调用函数的方式:
➢按函数在程序中出现的位置来分,可以有 以下3种函数调用方式 1. 函数语句 ➢调用没有返回值的函数,函数调用单独作 为一个语句
}
int max(int x,int y) 形式参数
{ int z;
Fra Baidu bibliotek
if (x>y) z=x;
else z=y;
return(z);
}
2021/2/2
28
函数调用的过程:
在定义函数中指定的形参,在未出现函数 调用时,它们并不占内存中的存储单元。 在发生函数调用时,函数max的形参被临 时分配内存单元。
调用a函数 调用b函数


⑦⑥
b函数 ⑤
结束
2021/2/2
38
7.4 数组作为函数参数 P184
7.4.1 数组元素作函数实参 7.4.2 数组名作函数参数
2021/2/2
39
7.4.1 数组元素作函数实参 P185
由于实参可以是表达式,而数组元素可以 是表达式的组成部分,因此数组元素可以 作为函数的实参。
2021/2/2
12
➢说明:
(4) 所有函数都是平行的,即在定义函数时是 分别进行的,是互相独立的。一个函数并不从 属于另一个函数,即函数不能嵌套定义。函数 间可以互相调用,但不能调用main函数。 main函数是由系统调用的。
2021/2/2
13
➢说明:
(5) 从用户使用的角度看,函数有两种。 库函数,它是由系统提供的,用户不必自己定
相关文档
最新文档