04 模块化程序设计(函数)

合集下载

c语言第7章 用函数实现模块化程序设计

c语言第7章 用函数实现模块化程序设计
整理课件
➢说明:
(2) 一个源程序文件由一个或多个函数以及其 他有关内容(如预处理指令、数据声明与定义 等)组成。一个源程序文件是一个编译单位, 在程序编译时是以源程序文件为单位进行编译 的,而不是以函数为单位进行编译的。
整理课件
➢说明:
(3) C程序的执行是从main函数开始的,如 果在main函数中调用其他函数,在调用后流 程返回到main函数,在main函数中结束整 个程序的运行。
(1)函数的返回值是通过函数中的return语 句获得的。
一个函数中可以有一个以上的return语句, 执行到哪一个return语句,哪一个就起作用 return语句后面的括号可以不要
整理课件
7.3.4. 函数的返回值
➢通常,希望通过函数调用使主调函数能得 到一个确定的值,这就是函数值(函数的返 回值) (2) 函数值的类型。应当在定义函数时指定 函数值的类型
类型名 函数名() {
函数体 }
类型名 函数名(void) {
函数体 }
整理课件
7.2.2 定义函数的方法
2.定义有参函数 定义有参函数的一般形式为:
类型名 函数名(形式参数表列) {
函数体 }
整理课件
7.2.2 定义函数的方法
3. 定义空函数
定义空函数的一般形式为:
类型名 函数名( )


➢先用空函数占一个位置,以后逐步扩充
➢好处:程序结构清楚,可读性好,以后 扩充新功能方便,对程序结构影响不大
整理课件
7.3 调用函数
7.3.1函数调用的形式 7.3.2函数调用时的数据传递 7.3.3函数调用的过程 7.3.4函数的返回值
整理课件
7.3.1函数调用的形式

第7章_用函数实现模块化程序设计_[谭浩强_C程序设计_(第四版)]

第7章_用函数实现模块化程序设计_[谭浩强_C程序设计_(第四版)]

例7.3将例7.2稍作改动,将在max函数中定 义的变量z改为float型。函数返回值的类型 与指定的函数类型不同,分析其处理方法。 解题思路:如果函数返回值的类型与指定 的函数类型不同,按照赋值规则处理。
#include <stdio.h> int main() { int max(float x,float y); float a,b; int c; scanf("%f,%f,",&a,&b); c=max(a,b); 变为2 printf("max is %d\n",c); return 0; 1.5 2.6 } int max(float x,float y) { float z; z=x>y?x:y; return( z ) ; } 2 2.6
C语言要求,在程序中用到的所有函数, 必须“先声明,再定义,后使用”
7.2 怎样定义函数
函数名字、函数返回值类型、函数实现 的功能以及参数的个数与类型 函数名字——以便以后按名调用
函数类型——函数返回值的类型
函数参数的名字和类型——以便在调用 函数时向它们传递数据 函数的功能——函数的具体实现
实参和形参间的数据传递
在调用有参函数时,主调函数和被调用函 数之间有数据传递关系 定义函数时函数名后面的变量名称为“形 式参数”(简称“形参”) 主调函数中调用一个函数时,函数名后面 参数称为“实际参数”(简称“实参”)
在调用函数过程中,系统会把实参的值传 递给被调用函数的形参 或者说,形参从实参得到一个值,该值在 函数调用期间有效
主函数 #include <stdio.h> int main() { int max4(int a,int b,int c,int d); int a,b,c,d,max; 输入4个整数 printf(“4 interger numbers:"); scanf("%d%d%d%d",&a,&b,&c,&d); max=max4(a,b,c,d); printf("max=%d \n",max); return 0; }

C语言程序设计 第6章 函数与模块化程序设计

C语言程序设计 第6章 函数与模块化程序设计

求整数x的绝对值 求双精度实数x的绝对值 计算sin(x)的值,x的单位为弧度 计算cos(x)的值,x的单位为弧度 求ex的值 求㏑x 计算x的开方
例题
#include <stdio.h> #include <math.h> void main() { double x,y;
scanf("%lf",&x); printf("%g\n",x); y=fabs(x); printf("%g\n",y); }
s1 所指地址
返回串中字符(不计 最后的'\0')个数
四、输入输出函数
• 调用字符函数时,要求在源文件中包含下以下命令行: • #include <stdio.h>
函数原型说明
功能
返回值
int getchar(void) char *gets(char *s) int putchar(char ch)
i++; } return (m); //返回值 }
main() { printf("\n%ld",s());}
25
(2)有参函数的定义形式
long s(int n ) //类型说明符long,函数名s {
数据类型说明符 {
函数名(带类型的形式参数列表)
i=1; //变量定义语句部分 long m=1; while(i<=n)
数,当在处理复杂问题中,遇到要用这段重复性程序段时,则无 需重复编写,只需调用函数即可。
模块与函数
• 可以将一个任务划分为若干个功能模块,每一个功能模块用一个 函数来实现。功能相同的模块只编一个函数。

04 模块化程序设计(函数)

04 模块化程序设计(函数)
莆田学院现代教育技术中心 2004年3月
二分法: 设方程f(x)=0在区间(a,b)有 一个根,取其中点x0=(a+b)/2。 如果f(x0)与f(a)同号,则根在x0 右侧,取a=x0,b不变,否则取 b=x0,a不变。这样就得到一个新 的变小了的有根区间(a,b)。对 此新的有根区间进行同样的处 理,这样就可得到更小的有根 区间……当|a-b|≤e时,对应的 x0即为所求根之近似解。
results( );
/*调用结果显示函数*/
printf(“是否继续练习?(Y/N)\n”);
ans=getch ( );
}
printf(“谢谢使用,再见!”);
} 莆田学院现代教育技术中心 2004年3月
一、模块化设计与函Le数t’s try…
【例二】编写一个儿童算术能力测试软件
main()
{
莆田学院现代教育技术中心 2004年3月
一、模块化设计与函数
本章的学习首先要讨论—— ①什么是函数? ②为什么要使用函数? ③函数有哪些类型? ④如何自己定义一个函数? ⑤如何调用一个函数? ⑥函数学习的难点是什么?
莆田学院现代教育技术中心 2004年3月
一、模块化设计与函数
①什么是函数? ②为什么要使用函数?
函数?
函数部分学习的难点是什么?
⑤如何调用一个函数? ■函数的概念
⑥函数学习的难点是 什么?
■形参/实参/返回值的概念 ■递归算法 ■变量的作用域和生存期
莆田学院现代教育技术中心 2004年3月
一、模块化设计与函数
函数使用常识: P144 一个源文件由一个或多个函数组成,可为多个C程序公用。 C语言是以源文件为单位而不以函数为单位进行编译的。 一个C程序由一个或多个源(程序)文件组成——可分别

C程序设计第四章模块化程序设计

C程序设计第四章模块化程序设计

第四章模块化程序设计1. 教学内容:§4.1 函数4.1.1 C程序结构4.1.2 函数定义与函数声明4.1.3 函数的传值调用4.1.4 函数的嵌套调用4.1.5 函数的递归调用§4.2 变量的存储属性4.2.1 动态变量4.2.2 静态变量4.2.3 外部变量§4.3 编译预处理4.3.1 宏替换4.3.2 文件包含2. 教学目的及要求:1) 熟练掌握函数定义与函数声明2)熟练掌握函数传值、嵌套、递归调用3)理解变量的存储属性3. 学重点:1) 函数定义与函数声明2) 函数的传值、嵌套、递归调用第四章模块化程序设计模块化程序设计是进行大程序设计的一种有效措施,其基本思想是将一个程序按功能进行分割成一些模块,使用权每一个模块都成为功能单一、结构清晰、接口简单、容易理解的小程序。

C语言提供了一些支持模块化软件开发的功能:⑴函数式的程序结构。

⑵允许通过使用不同存储类别的变量,控制模块内部及外部的信息交换。

⑶具有编译预处理功能,为程序的高度、移植提供了方便,支持模块化程序。

§4.1 函数函数是具有独立功能的程序段。

4.1.1 C程序结构C程序结构实际上是由函数组成的结构。

所有其它函数均由主函数main()调用。

如下图所示:C程序结构设计在逻辑上遵循自顶向下、逐步细化的层次结构。

【例】:“高等院校事务管理系统”菜单设计。

P1024.1.2 函数定义与函数声明定义函数就是在程序中设定一个函数模块。

一个函数由变量声明与可执行语句组成的独立实体,用以完成一指定功能。

函数定义形式如前所述:【例】:求三个数的平均值按自顶向下的方法可写出计算平均值的主函数和自定义函数,如下:int average(x,y,z) /*声明自定义函数*/ int x,y,z; /*声明形式参数x,y,z为整型数*/ {int aver; /*声明变量aver为整型数*/ver=(x+y+z)/3; /*求x,y,z的平均值,并赋给aver变量*/ return (aver); /*将aver的值作为函数的返回值*/ }㈠函数定义函数定义的内容及形式:函数类型标识符函数名([类型标识符形式参数1],… …){函数体;}⒈函数名函数名是函数的名字。

C语言用函数实现模块化程序设计

C语言用函数实现模块化程序设计
• 指定函数的名字,以便以后按名调用 • 指定函数类型,即函数返回值的类型 • 指定函数参数的名字和类型,以便在调 用函数时向它们传递数据 • 指定函数的功能。这是最重要的,这是 在函数体中解决的
7.2.1 为什么要定义函数
• 对于库函数,程序设计者只需用 #include指令把有关的头文件包含到本 文件模块中即可 • 程序设计者需要在程序中自己定义想用 的而库函数并没有提供的函数
7.1为什么要用函数
例7.1 输出以下的结果,用函数调用实现。 ****************** How do you do! ******************
7.1为什么要用函数
• 解题思路:
– 在输出的文字上下分别有一行“*”号,显然不 必重复写这段代码,用一个函数print_star来实 现输出一行“*”号的功能。 – 再写一个print_message函数来输出中间一行文 字信息 – 用主函数分别调用这两个函数
x 2
7.3.3 函数调用的过程
调用结束,形参单元被释放 实参单元仍保留并维持原值,没有改变 如果在执行一个被调用函数时,形参的值 发生改变,不会改变主调函数的实参的值 实参 形.4. 函数的返回值
通常,希望通过函数调用使主调函数能得 到一个确定的值,这就是函数值(函数的返 回值) (1)函数的返回值是通过函数中的return语 句获得的。
#include <stdio.h> int main() { void print_star(); void print_message(); print_star(); print_message(); print_star(); return 0; } void print_star() { printf(“******************\n”); } void print_message() { printf(“ How do you do!\n”); }

C语言程序设计 用函数实现模块化程序设计

C语言程序设计 用函数实现模块化程序设计
15/73
7.3 函数参数和函数的值
二、函数的返回值
例7例8- 2 1.返回函数值的方法 #include <stdio.h> (1)函数的返回值也就是函数的 int max(int x,int y) y) int max(int x,int 值,如果一个函数有返回值, { int z; { if(x>y) return y; ; z = x > y ? x :>(x) ? x : y ); 就必须用return语句; return(x y return return((zz); ); } (2)一个函数中可以有多个 } void main() return语句,无论执行到哪 void main() { int a,b,c ; 个return语句,都将结束函 { int a,b,c ; scanf(“%d,%d”,&a,&b); 数调用,返回主调函数。 scanf(“%d,%d”,&a,&b); c=max(a,b); c=max(a,b); (3) return语句中的括号可以 printf(“The max is %d”, c); printf(“The max is %d”, c); } 省略,return后面可以是一 } 个表达式,返回的是表达式 的值。
13/73
7.3 函数参数和函数的值
一、形式参数和实际参数
说明: 1.定义函数时,必须说明形参类 型,形参只能是变量和数组; 2.函数被调用前,形参不占内存 ,函数调用结束后,内存也被释 放; 3.实参可以是常量、变量和表达 式; 4.实参和形参的类型必须一致, 字符型和整型可以相互匹配; 5.C语言中实参对形参的数据传 递是“值传递”,即单向传递 ,仅由参数的对应位置决定,与 名字无关。 例7例8- 2 #include <stdio.h> int max(int x,int y) b,int a) { int z; c; c x b a b: y; z = x > y ? x : a; return( z ); c x } void main() { int a,b,c ; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“The max is %d”, c); } 23,56 The max is 56

C语言函数-模块化程序设计实验报告

C语言函数-模块化程序设计实验报告

实验4 函数-模块化程序设计一、实验目的1.掌握C函数的定义方法、函数的调用方法、参数说明以及返回值。

掌握实参与形参的对应关系以及参数之间的“值传递”的方式;掌握函数的嵌套调用及递归调用的设计方法;2.掌握全局变量和局部变量、动态变量与静态变量的概念和使用方法;3.在编程过程中加深理解函数调用的程序设计思想。

二、实验环境PC微机Windows 操作系统VS 2019 程序集成环境三、实验内容与步骤4.编写一个计算组合数的函数combinNum(int m,int n)。

计算结果由函数返回。

计算组合数的公式是:c(m,n)=m!/(n!*(m-n)!)要求:(1)从主函数输入m和n的值。

对m>n、m<n和m=n 的情况作分别处理后调用函数combinNum(m,n),在主函数内输出结果值。

(2)对m>n、m<n和m=n 的情况各取一组数据进行测试,检查程序的正确性。

代码:#include<stdio.h>int fac(int m){int sum = 1;for (int i = m; i >= 1; i--) {sum *= i;}return sum;}int combin(int m, int n){int a = fac(m);int b = fac(n);int N = fac(m - n);return a / (b * N );}int main(){int m, n;scanf("%d %d", &m, &n);if (m == n || n == 0) printf("1");else if (m < n || m < 0 || n < 0) printf("please input right number");else printf("%d", combin(m, n));return 0;}实验结果:①m > n:②m == n:③m < n:实验分析:本题首先要将m和n的所有情况讨论清楚,然后求组合数时在combin函数里嵌套三个求阶乘的函数分别求公式中三个成分的值比递归调用combin函数来求解简单。

第四章模块化程序设计(函数)

第四章模块化程序设计(函数)

第四章模块化程序设计(函数)【计划课时】授课8课时+上机4课时(预习内容:教材第七章、第八章)一、概述回顾:·程序设计方法:自上而下,逐步细化·C语言:函数式语言在C程序设计中,通常:·将一个大程序分成几个子程序模块(自定义函数)·将常用功能做成标准模块(标准函数)放在函数库中供其他程序调用如果把编程比做制造一台机器,函数就好比其零部件。

·可将这些“零部件”单独设计、调试、测试好,用时拿出来装配,再总体调试。

·这些“零部件”可以是自己设计制造/别人设计制造/现在的标准产品而且,许多“零部件”我们可以只知道需向它提供什么(如控制信号),它能产生什么(如速度/动力)。

控制信号速度/动力【例】编写一个儿童算术能力测试软件main() {char ans = …y‟;clrscr();cover(); /*调用软件封面显示函数*/password(); /*调用密码检查函数*/while (ans ==‟y‟|| ans ==‟Y‟){ question(); /*调用产生题目函数*/answers(); /*调用接受回答函数*/marks(); /*调用评分函数*/results(); /*调用结果显示函数*/printf(“是否继续练习?(Y/N)\n”);ans=getch ();}printf(“谢谢使用,再见!”);}/*定义所用函数*/cover() { } /*软件封面显示函数*/password(){ }/*密码检查函数*/question(){ } /*产生题目函数*/answers(){ } /*接受回答函数*/marks(){ } /*评分函数*/results(){ }/*结果显示函数*/函数使用常识:P1021、C程序执行总是从main函数开始,调用其它函数后总是回到main函数,最后在 main函数中结束整个程序的运行。

模块化程序设计

模块化程序设计

模块化程序设计模块化程序设计什么是模块化程序设计?模块化程序设计是指将一个大型的软件系统划分为多个独立的模块,每个模块具有独立的功能和责任,通过模块间的接口进行相互通信和协作。

通过模块化程序设计,可以将复杂的问题拆分为多个简单的子问题,提高代码的可维护性和可重用性。

模块化程序设计的优势1. 可维护性模块化程序设计使得代码结构更加清晰,每个模块都有明确的功能和责任。

当需要修改某个模块时,只需要关注该模块,而不需要了解整个系统的细节。

这样可以降低维护的成本,提高代码的可维护性。

2. 可重用性通过模块化程序设计,可以将功能类似的代码封装为一个模块。

当需要实现类似的功能时,可以直接复用已经存在的模块,无需重复编写代码。

这样可以提高开发效率,减少代码冗余。

3. 可测试性模块化程序设计将一个大型的软件系统划分为多个小的模块,每个模块都可以独立进行测试。

这样可以提高测试的准确性和效率。

同时,当需要修复某个模块的 bug 时,只需要测试该模块,而不需要重新测试整个系统。

4. 可扩展性通过模块化程序设计,可以灵活地添加、删除或替换模块,以满足不同的需求。

当系统需要增加新的功能时,可以根据需要添加新的模块,而不需要修改已有的模块。

这样可以提高系统的可扩展性。

模块化程序设计的实践方法1. 模块设计在进行模块化程序设计时,需要合理地划分模块的功能和责任。

一个模块应该具有明确的功能和接口,使用者只需要了解模块的接口和预期行为,而不需要了解模块的具体实现。

同时,模块之间的接口设计应该尽量简单、清晰,并遵循设计原则,如单一职责原则和开闭原则等。

2. 模块间通信模块之间的通信是实现模块化程序设计的关键。

常见的模块间通信方式包括函数调用、消息传递、共享内存等。

在选择模块间通信方式时,需要根据具体的需求和模块间的关系选择合适的方式。

3. 模块测试每个模块都应该有相应的测试用例,以确保模块的正确性和稳定性。

模块测试应覆盖模块的各种情况和边界条件,以保证模块的功能的完整性。

《模块化程序设计》课件

《模块化程序设计》课件

无副作用是指函数式程序设计中函数只 依赖于输入参数,而不依赖于外部状态 或环境。
不可变性是指函数式程序设计中变量的 值是不可变的,一旦一个变量被赋值后 就不能被修改。
函数式程序设计的主要特点包括高阶函 数、不可变性、无副作用等,这些特点 有助于提高代码的可靠性和可测试性。
在函数式程序设计中,函数是一等公民 ,它们可以作为参数传递给其他函数或 作为返回值返回。
强化模块化设计的教育和 培训
随着模块化程序设计思想的普 及,未来将有更多的教育和培 训资源涌现,帮助开发者更好 地掌握模块化程序设计的方法 和技巧。
THANKS
感谢观看
事件驱动程序设计通常用于开发 图形用户界面、网络编程和实时 系统等需要快速响应和扩展性的 应用领域。
04
模块化程序设计中的常见问题与解决方案
模块间的耦合度过高
01
02
03
04
05
总结词
详细描述
1. 减少模块间的 2. 模块间解耦 数据…
3. 设计良好的模 块间…
模块间的耦合度过高会导 致模块间的依赖关系复杂 ,影响模块的独立性和可 维护性。
模块维护
模块化设计应便于模块的替换、升级和维护,提高系统的可 维护性和扩展性。
03
模块化程序设计的方法与实践
面向对象程序设计
01
面向对象程序设计是一种基于对象的编程范式,它使用对象、类和继 承等概念来组织代码。
02
面向对象程序设计的主要特点包括封装、继承和多态等,这些特点有 助于提高代码的可重用性和可维护性。
06
总结与展望
模块化程序设计的优势与局限
降低软件复杂度,提高软 件质量
提高软件可维护性和可重 用性

模块化程序设计

模块化程序设计

main()
x
3
y
4
实参
_______________________________ swap() a b) {int x=3,y=4; swap(x,y); } swap(int a,int b) {int temp; Temp=a; a=b;b=temp; }
4
3
第四章
模块化程序设计
第四章
模块化程序设计
4.1 函 数
一、模块化程序设计基本思想 是将一个大的程序按功能进行分割成一些模块,使 每一个模块都成为功能单一、结构清晰、接口简单、容 易理解的小程序。 C语言提供如下一些支持模块化软件开发的功能: ① 函数式的程序结构,每个函数都有各自独立的功能。 ② 允许使用不同存储类别的变量,为控制模块内部及外 部的信息交换。 ③ 具有编译预处理功能,为程序的调试、移植提供了 方便。
Ex4-10
汉诺塔问题(Tower of Hanoi)
1
3
a
1st sec third
a (c)
a n c
2
b
c b b
b
(b) (a)
c hanoi(n,a,b,c)
hanoi(n-1,a,c,b) hanoi(n-1,c,b,a)
4.2
变量的存储属性
一、变量: 变量是对程序中数据的存储空间的抽象。
f1函数
f2函数
main() {int a,b,c,max; max=Max3(a,b,c) printf(“max of a,b,c%d”,max); } Int max3(int x,inty,int z) {int w1,w2; w1=max2(x,y); w2=max2(w1,z); return w2; } Int max2(int u,int v) { return u>v ?u:v;

模块化程序设计

模块化程序设计

……
询询询
4/37
二 模块化程序设计的思想
自顶向下、逐步细化
5/37
二 模块化程序设计的思想
什么时候需要 模块化?
6/37
三 模块化程序的设计方法
模块分解的原则:
• 保证模块的相对独立性 高聚合、低耦合
• 模块的实现细节对外不可见 外部:关心做什么 内部:关心怎么做
设计好模块接口:
• 接口是指罗列出一个模块的所有的与外部打交道的变量等 • 定义好后不要轻易改动 • 在模块开头(文件的开头)进行函数声明
定义抓取吸盘工具的子程序
直接调用
25/37
四 带参数例行程序的设计与应用
什么是带参数的例行程序?
像上面的子程序GET_GUN2(),这种不传递参数,仅仅被直接 调用的为不带参数的例行程序。
如果一个例行程序能够传递或者引用某种参数的话,那么就为带参 数的例行程序。
格式为:GET_GUN2(N) 其中N为某种参数,可以是数字量num,位置数据量Pos,点位数 据量Robtarget,TCP数据量tooldata等等,也可以为常量或变量 或可变量。
3/37
一 模块化程序设计的概念
高校信息管理系统
人事管理 财务管理
子系统
子系统
学生管理 子系统
教学管理 子系统
设备管理 子系统
……
系统管理 学籍管理 班级管理 成绩管理 数据查询 综合测评 ……
用退录修 户出入改 管系信信 理统息息
录修 入改 信信 息息
录修 入改 信信 息息
学班成
籍 查
级 查
绩 查
30/37
四 带参数例行程序的设计与应用
带参数例行程序应用实例:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

②如机为果器什把,编函么程数要比就使做好制比用造其函一零数台部 ?
为什么要使用函数? 便于实现模块化设计
③件函。数有哪些类型? 便于团队开发
④设可如计将何、这调些自试“己、零定测部试件义好”一,单个用独 时函拿数出?来装配,再总体调
便于使用现有的或别人的 程序模块提高编程效能
⑤试如。何调用一个函数? ⑥己这函设些数计“制零学造部习/件别的”人可难设以点计是制是自
… }
float xpoint(float x1,float x2) {
y=… 调用f(x1)、f(x2) }
main() {

f1=f(x1); f2=f(x2); …
x=root(x1,x2); …
float root(float x1,float x2);
}
{
y1=f(x1)
x=xpoint(x1,x2) y=f(x)
函数?
函数部分学习的难点是什么?
⑤如何调用一个函数? ■函数的概念
⑥函数学习的难点是 什么?
■形参/实参/返回值的概念 ■递归算法 ■变量的作用域和生存期
莆田学院现代教育技术中心 2004年3月
一、模块化设计与函数
函数使用常识: P144 一个源文件由一个或多个函数组成,可为多个C程序公用。 C语言是以源文件为单位而不以函数为单位进行编译的。 一个C程序由一个或多个源(程序)文件组成——可分别
/*定义所用函数*/ cover() { } /*软件封面显示函数*/ password(){ } /*密码检查函数*/ question(){ } /*产生题目函数*/ answers(){ } /*接受回答函数*/ marks(){ } /*评分函数*/ results(){ } /*结果显示函数*/
C语言中,模块化设计的重要工具是“自定义函数”。
莆田学院现代教育技术中心 2004年3月
一、模块化设计与函数
【例一】参见 P5例1.3
#include <stdio.h>
#include <conio.h>
main( )
/*主调函数*/
{
int a,b,c;
int max(int,int); /*函数原型*/
例8.6嵌套调用关系(简化)
} 莆田学院现代教育技术中心 2004年3月
三、函数的调用
4、函数的嵌套调用 P155 例8.6嵌套调用关系(示意图)
莆田学院现代教育技术中心 2004年3月
例8.6模块划划分情况
main( ) 根据输入的x1,x2判断
是否有根 若有,调用求根函数
root( ) 输出结果
在C程序设计中,通常: ➢ 将一个大程序分成几个子
程序模块(自定义函数)
造什/现么在?的标准产品
➢ 将常用功能做成标准模块
(标准函数)放在函数库
中供其他程序调用
莆田学院现代教育技术中心 2004年3月
一、模块化设计与函数
【例二】编写一个儿童算术能力测试软件
main() {
自定义函数
char ans = 'y';
is
%d\n”,c);文件files2.c中(与file1.c同目录) extern max(int a,int b) /*extern可省*/
{ float c;
c=a>b?a:b;
return c;
} 莆田学院现代教育技术中心 2004年3月
三、函数的调用
4、函数的嵌套调用 P155例8.6
float f(float x) {
以下情况时,被调函数在主调函数中可以不先声明: P154 被调函数的返回值为整型时函数值是整型(int)或字符型 (char)时——系统自动按整型说明; 被调函数的定义出现在主调函数之前时 在所有函数定义之前,在函数的外部已做了函数声明时
调用方式同库函数。
莆田学院现代教育技术中心 2004年3月
三、函数的调用
什么是函数?
③函数有哪些类型? 一个独立的程序模块,
④如何自己定义一个 可以定义自己的变量
函数?
(仅在本函数内有效),
⑤如何调用一个函数? 拥有自己的存储空间。
⑥函数学习的难点是 什么?
可以被其他函数或自身 调用(主函数除外)。
莆田学院现代教育技术中心 2004年3月
一、模块化设计与函数
①什么是函数?
marks( );
/*调用评分函数*/
results( );
/*调用结果显示函数*/
printf("是否继续练习?(Y/N)\n");
这些函数现在不编程或还不会 编程,可先放空。
ans=getch ( );
可以多人合作,每人完成若干
}
个函数(模块化)。
printf("谢谢使用,再见!");
可在另一个源程序文件中定义。
莆田学院现代教育技术中心 2004年3月
三、函数的调用
2、自定义函数 自定义函数和变量一样,在其主调函数中也必须“先声明,
后使用”。 如例一中的 int max(int,int); /*函数原型*/ 例一中的自定义函数声明也可以用以下两种形式: P153 int max(int x,int y); (多余,因为编译系统并不检查参数名) 或 int max( );(编译系统将不检查参数类型和参数个数)
莆田学院现代教育技术中心 2004年3月
一、模块化设计与函数
本章的学习首先要讨论—— ①什么是函数? ②为什么要使用函数? ③函数有哪些类型? ④如何自己定义一个函数? ⑤如何调用一个函数? ⑥函数学习的难点是什么?
莆田学院现代教育技术中心 2004年3月
一、模块化设计与函数
①什么是函数? ②为什么要使用函数?
一、计算方法研究内容: 高次方程求根 矩阵运算求解(通常归到《线性代数》中) 常微分方程数值求解 线性方程组求解 函数插值 计算方法研究求解的算法,通过计算机程序数值 求解。
莆田学院现代教育技术中心 2004年3月
计算方法与计算机数值求解
二、高次方程求根(近似解)
基本思路
方程f(x)=0处的x称为该方程的根
莆田学院现代教育技术中心 2004年3月
三、函数的调用
1、库函数的调用 必须在源程序中用include命令将定义该库函数的头文件
“包含进来”。 调用方式:
◆独立语句 执行某项操作,如 clrscr( ), printf(“Input a,b=”) 等
◆表达式中 作运算对象,如 a=sqrt(x)+pow(r,3),c=exp(a) 等
编写、编译和调试。 C程序执行总是从main函数开始,一般情况下调用其它
函数后总是回到main函数,最后在 main函数中结束整个 程序的运行。 所有函数都是平行的、互相独立的,即在一个函数内只 能调用其他函数,不能再定义一个函数(嵌套定义)。 一个函数可以调用其他函数或其本身,但任何函数均不 可调用main函数。
3、调用外部函数(其他源文件中定义的注函:数)时
函数说明语句 extern 函数名()要;做一个 .prj
【例二】 文件file1.c中
文件才能运行。
main()
{ int x=80,y=90,c;
extern max(); /*函数说明*/
c=max(x,y)+20; /*调用max函数*/
}
printf(“Max
传统方式见P146。
莆田学院现代教育技术中心 2004年3月
二、函数的定义
把程序控制权从函数返回函数调用点有三种方法: 执行到函数结束的右花括号时(如果函数没有返回值); 执行到如下语句(如果函数没有返回值):
return; 把返回值返回调用处(见例一)
return 表达式; 形式: return (x); return (x+y); return (x>y?x:y); 语句中圆括号亦可省略。
⑥函数学习的难点是 什么?
根据使用的方式,可分为:
无参函数 有参函数(函数内需要使 用主调函数中的数据)
莆田学院现代教育技术中心 2004年3月
一、模块化设计与函数
①什么是函数?
如何自己定义一个函数?
②为什么要使用函数? (见后)
③函数有哪些类型? 如何调用一个函数?
④如何自己定义一个 (见后)
莆田学院现代教育技术中心 2004年3月
二分法: 设方程f(x)=0在区间(a,b)有 一个根,取其中点x0=(a+b)/2。 如果f(x0)与f(a)同号,则根在x0 右侧,取a=x0,b不变,否则取 b=x0,a不变。这样就得到一个新 的变小了的有根区间(a,b)。对 此新的有根区间进行同样的处 理,这样就可得到更小的有根 区间……当|a-b|≤e时,对应的 x0即为所求根之近似解。
results( );
/*调用结果显示函数*/
printf(“是否继续练习?(Y/N)\n”);
ans=getch ( );
}
printf(“谢谢使用,再见!”);
} 莆田学院现代教育技术中心 2004年3月
一、模块化设计与函Le数t’s try…
【例二】编写一个儿童算术能力测试软件
main()
{
高级语言程序设计
第四章 模块化程序设计(函数)
莆田学院现代教育技术中心
2004年3月 制作
一、模块化设计与函数
把大型软件按照规定的原则划分成一个个较小的、相 对独立但又相互关联的模块,叫做模块化设计。
1965年,ler在他的著名文章“奇妙的数字 7±2——人类信息处理能力的限度”中指出,普通 人分辨或记忆同一类信息的不同品种或等级的数量一 般不超过5~9项。这表明,要使人的智力能足以管 理好程序,应该坚持模块化设计。正如不分段的长篇 文章可能使读者感到头痛一样,大型的单模块软件不 仅可读性差,可靠性也常常难以保证。
相关文档
最新文档