(实验六)模块化(函数)程序设计
第六章模块化程序设计的方法
程序功能需求
在屏幕中依次显示五道算术题,儿童 输入答案后,自动评判是否正确。五 道题完成之后,显示总分。
程序结构图
儿童算术能力测试软件
初始 化题
显示 题目
输入 答案
评判 结果
第11页,共15页。
程序流程图
初始化算术题 显示题目 输入答案 评判结果
还有题? true false
显示总分 结束
【拓展案例】儿童算术能力测试软件
程序流程图
初始化算术题 显示题目 输入答案 评判结果
还有题? true false
显示总分 结束
主程序(Main函数)
string question , rightAnswer;
int score = 0; for (int num=1; num<=5; num++) {
//初始化题目
GetQuestion(num,out question,out rightAnswer); //显示题目 DispalyQuestion(question); //输入答案 string childAnswer = GetAnswer(); //评判结果 score += ShowResult(childAnswer, rightAnswer); }
如何进行模块化程序设计
②划分模块(函数)的两个原则
• 功能单一
一个函数只完成一个功能(体现设计的 内聚性,即问题函数内部解决,对外只 有接口)
• 规模适中
过大过小均影响模块的粒度(太大函 数太复杂,太小接口太多系统结构太 复杂)
第5页,共15页。
引入问题
• 划分好模块之后,如何设计出完整的程序?
• 函数的定义和使用方法?
模块化程序设计
案例二:模块化设计的硬件项目
总结词
简化维护和升级
详细描述
硬件项目中的各个模块可以独立地进行维护和升级,而 不会影响整个系统的运行。这简化了维护和升级的过程 ,降低了运营成本。
案例三:模块化设计的游戏项目
总结词
提高游戏体验
详细描述
通过将游戏内容拆分成多个模块,如角色、场景、音 效等,游戏开发者可以更加灵活地设计和更新游戏内 容,以满足玩家的需求和提高游戏体验。
模块测试与调试
单元测试
对每个模块进行单元测试, 确保模块的正确性和稳定 性。
调试技巧
掌握调试技巧,以便于快 速定位和解决问题。
集成测试
对多个模块进行集成测试, 确保模块间的协调和交互。
05
模块化设计案例分析
案例一:模块化设计的软件项目
总结词
提高可维护性
VS
详细描述
模块化设计的软件项目可以将复杂的系统 拆分成多个独立的模块,每个模块具有明 确的功能和接口,便于开发和维护。通过 模块化设计,软件项目可以更加灵活地适 应需求变化,降低维护成本。
案例一:模块化设计的软件项目
总结词
提高可扩展性
详细描述
模块化设计的软件项目具有良好的可 扩展性,可以在不影响其他模块的情 况下添加新功能或修改现有功能。这 有助于提高软件的生命周期,满足不 断变化的市场需求。
案例一:模块化设计的软件项目
总结词
提高可重用性
详细描述
通过模块化设计,软件项目中的各个模块可 以独立地开发和测试,并在不同的项目中重 复使用。这有助于提高开发效率,减少代码 冗余和错误。
模块大小
模块的大小应适中,不宜过大或过小,以便于维护和 管理。
模块层级结构
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)
数,当在处理复杂问题中,遇到要用这段重复性程序段时,则无 需重复编写,只需调用函数即可。
模块与函数
• 可以将一个任务划分为若干个功能模块,每一个功能模块用一个 函数来实现。功能相同的模块只编一个函数。
c语言用函数实现模块化程序设计实验报告
c语言用函数实现模块化程序设计实验报告
1设计思想
1)、设定一个一维数组,可先按员工序号设定每位员工的工资
2)、利用While语句和Print语句完成用户菜单的设计
功能为:第1项设为员工编号和工资数据
第2项设为修改员工工资数据
第3项设为查询员工工资数据
第4项设为结束系统
3)、当用户选择1、2项时,需输入员工编号,所以需要设计编号校正功能,如果出错可输出“The error employ number”
4)、当选择2时,进行工资数据的修改,并将新数据存回该员工的工资数组中
5)、利用for循环中判断语句,将用户工资数与数组中的工资数进行比较,如相同则输出,将计数器加1,如此下去,直到把整个数组遍历一遍
6)、判断计数器是否为0, 是0表示找不到相符的工资,如果不为0,则输出共查出几比相符的工资
以上当然里面也涉及了“函数的模块化”理念,可以避免但需要重复打印头文件时重复编写打印信头的语句。
像这样的程序是多见的,这样不但降低了程序还发效率,而且耗时浪费资源“共用体”的使用简化了程序的“复杂”性,正如(4)中,学号与姓名同时表示一个人,但在函数使用了“共用体”,从而程序的简单可以便于纠错,查找问
题,避免了代码的重复,这样就给编译时带来了一定的难度与“量”的繁杂。
一般不采取这样的做法,力求“简单、明了、清晰”。
C语言模块化程序设计
C语言模块化程序设计模块化程序设计是一种将程序分解为独立模块的方法,每个模块具有明确定义和特定功能。
使用模块化程序设计可以提高程序的可维护性、可扩展性和可重用性。
本文将介绍C语言中的模块化程序设计的原则、方法和优势。
首先,要进行模块化程序设计,需要遵循以下原则:1.单一职责原则:每个模块应该只负责一个具体的功能或任务。
这样可以使模块的功能更加明确和独立,并且方便后续的维护和测试。
2.高内聚,低耦合:模块内部的各个部分应该紧密地关联在一起,形成一个功能完整的整体,同时与其他模块的耦合度应该尽量降低,以减少模块间的相互影响和依赖性。
接下来,我们将介绍几种常见的模块化程序设计的方法:1.函数模块化:将功能相似的代码封装在一个函数中,便于重复使用和集中管理。
函数模块化可以提高程序的可读性和可维护性。
2.文件模块化:将具有相关功能的函数、常量和数据结构定义放在同一个文件中,并通过头文件进行声明和引用。
文件模块化可以使代码结构清晰,提高代码的复用性。
3.类模块化:将相关的函数和数据结构封装在一个类中,并通过类的接口来访问和操作。
类模块化可以提供更高级别的封装和抽象,方便程序的组织和管理。
4.动态链接库和静态链接库:将功能模块封装为独立的动态链接库或静态链接库,以供其他程序调用和使用。
链接库模块化可以提高代码的复用性和可移植性。
以上是常见的模块化程序设计方法,可以根据具体的需求和场景选择适合的方法。
无论使用哪种方法,模块化程序设计都可以带来以下几个优势:1.可维护性:模块化的程序结构使程序的各个部分相互独立,修改和维护一个模块时,不会对其他模块造成影响,降低了维护的难度。
2.可重用性:模块化的程序结构使得代码片段可以在多个地方反复使用,提高了代码的复用性,减少了重复编写代码的工作量。
3.可扩展性:由于模块之间的低耦合性,当需要添加新的功能时,可以通过增加新的模块来实现,而不需要修改已有的模块,降低了扩展的成本和风险。
模块化程序设计
模块化程序设计
1-引言
介绍模块化程序设计的概念和背景,以及该文档的目的和范围。
2-术语和缩写
解释本文档中使用的术语和缩写,确保读者理解并正确使用。
3-模块化程序设计概述
说明模块化程序设计的原则和好处,以及为什么应该采用这种
方法来开发软件。
4-模块化程序设计流程
详细描述模块化程序设计的流程,包括以下步骤:
a-项目需求分析
b-模块设计规范的制定
c-模块划分和结构设计
d-模块之间的接口定义
e-模块的实现和测试
f-模块集成和系统测试
g-最终部署和维护
5-模块设计规范
阐明制定模块设计规范的重要性,并提供一个示例规范,包括
标识命名规则、模块函数结构、输入输出约定等。
6-模块划分和结构设计
描述如何进行模块划分和结构设计,包括依赖关系分析、模块
职责的划分、模块之间的协作等。
7-模块接口定义
详细描述如何定义模块之间的接口,包括函数签名、参数传递
方式、数据结构的定义等。
8-模块实现和测试
解释模块的实现过程,包括编码规范、单元测试、集成测试等。
9-模块集成和系统测试
描述如何将各个模块整合成系统,并进行系统级别的测试,确
保各个模块协同工作。
10-最终部署和维护
说明如何将程序部署到目标环境,并提供维护和升级的指导。
附件:
列出本文档涉及的附件,如示例代码、配置文件、演示视频等。
法律名词及注释:
提供本文档所涉及的法律名词的解释和注释,确保读者理解并遵守相关法律。
模块化程序设计
模块化程序设计模块化程序设计什么是模块化程序设计在软件开辟中,模块化程序设计是一种将软件系统划分为独立的模块或者组件的方法。
每一个模块都有自己的功能和责任,可以通过定义模块之间的接口来实现模块之间的通信和协作。
通过模块化程序设计,我们可以更加灵便地开辟、测试和维护软件系统。
为什么需要模块化程序设计1. 提高代码的复用性模块化程序设计可以将功能相似的代码封装在独立的模块中,这样可以使得这部份代码可以被多个程序共享和复用。
通过复用模块,可以减少代码的重复编写,提高开辟效率。
2. 提高代码的可维护性当一个软件系统被划分为多个模块时,每一个模块的功能和责任都较为清晰明确。
这样,当需要修改系统的某个功能时,只需要关注与该功能相关的模块,而不需要修改整个系统的代码。
这样可以提高代码的可维护性,降低修改代码时的风险和工作量。
3. 提高开辟效率将一个复杂的软件系统划分为多个模块后,每一个模块可以由不同的开辟人员独立开辟。
这样可以并行开辟不同模块,提高开辟效率。
同时,不同模块之间的接口定义也可以促进开辟人员之间的协作和沟通,减少开辟冲突。
4. 降低系统的耦合度模块化程序设计可以将系统中的各个模块解耦。
模块之间通过明确定义的接口进行通信,模块之间的依赖关系减少。
这样,当需要修改系统的某个模块时,对其他模块的影响较小,可以降低系统的耦合度,增强系统的灵便性。
实现模块化程序设计的方法1. 使用函数模块化在不少编程语言中,函数是实现模块化程序设计的基本单位。
我们可以将相关功能的代码封装在一个函数中,并通过函数的参数和返回值来实现多个函数之间的通信和协作。
例如,在Python中,我们可以定义一个计算圆面积的函数:pythondef calculate_area(radius):return 3.14 radius 22. 使用类模块化除了函数,类也是一种常用的模块化设计方法。
通过将相关的属性和方法封装在类中,可以更好地组织和管理代码。
模块化程序设计
模块化程序设计
模块化程序设计是一种将程序按照功能进行拆分成多个模块的设计方法。
每个模块负责完成特定的功能,各个模块之间通过接口进行通信和交互。
模块化程序设计的好处包括:
1. 提高代码的可复用性:将功能拆分成模块后,可以在其他项目中复用这些模块,避免重复开发。
2. 简化程序设计:将复杂的问题分解成简单的模块,每个模块负责一个简单的任务,简化了程序的设计和实现难度。
3. 提高程序的可维护性:由于每个模块相对独立,当某个模块需要修改时,只需要关注该模块的实现细节,不会对其他模块造成影响。
4. 提高开发效率:多人协作开发时,可以将不同功能的模块分配给不同的开发人员,提高开发效率。
5. 方便测试和调试:模块化程序设计可以将程序按功能进行拆分,方便单元测试和模块之间的集成测试,便于发现和修复问题。
在模块化程序设计中,通常使用接口定义模块之间的通信规范,模块之间通过接口进行调用和传递数据。
这样可以降低模块之间的
耦合性,提高程序的可扩展性和灵活性。
,模块化程序设计是一种将程序按照功能进行拆分的设计方法,可以提高代码的可复用性、简化程序设计、提高程序的可维护性和
开发效率,方便测试和调试。
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函数来求解简单。
C语言中的函数与模块化编程指南
C语言中的函数与模块化编程指南C语言作为一种广泛应用的编程语言,具有高效、灵活和可移植等特点。
在C语言中,函数是一种重要的编程概念,它可以帮助我们将程序分解为更小的模块,提高代码的可读性和可维护性。
本文将介绍C语言中的函数以及如何使用函数进行模块化编程。
1. 函数的定义和调用函数是一段具有特定功能的代码块,可以接受输入参数并返回结果。
在C语言中,函数的定义包括函数名、参数列表和函数体。
例如,下面是一个简单的函数定义:```cint add(int a, int b) {return a + b;}```在函数定义中,函数名为"add",参数列表为"a"和"b",函数体为"return a + b;"。
要调用函数,只需在代码中使用函数名和参数列表即可。
例如:```cint result = add(3, 5);```这里调用了"add"函数,并将参数3和5传递给函数。
函数执行完毕后,将返回结果8,并赋值给变量"result"。
2. 函数的返回值和参数函数可以具有返回值和参数。
返回值可以是任意数据类型,包括整数、浮点数、字符等。
参数可以是任意数据类型,可以是基本类型,也可以是自定义的结构体或指针类型。
例如,下面是一个具有返回值和参数的函数:```cfloat calculate_average(int *array, int size) {float sum = 0;for (int i = 0; i < size; i++) {sum += array[i];}return sum / size;}```这个函数接受一个整数数组和数组大小作为参数,并返回数组元素的平均值。
在函数体中,使用循环计算数组元素的总和,然后除以数组大小得到平均值。
3. 函数的作用域和生命周期函数中定义的变量具有作用域和生命周期。
c语言 实训报告 模块化程序设计
c语言实训报告模块化程序设计C语言是一门非常重要的编程语言,被广泛应用于各个领域。
而实训报告主题为模块化程序设计,模块化程序设计是一种重要的程序设计方法,可以提高代码的可读性、可维护性和可扩展性。
本文将一步一步回答有关模块化程序设计的问题,通过详细分析和实例展示,帮助读者更好地理解和应用模块化程序设计。
第一步:理解模块化程序设计的概念和意义模块化程序设计是将一个大型的复杂程序分解为若干个小的模块,每个模块完成特定的功能,并且模块之间通过接口进行通信。
模块化程序设计的目的是提高代码的可读性、可维护性和可扩展性,使得程序的开发和维护更加容易。
第二步:合理划分模块在进行模块化程序设计之前,需要对程序进行合理的划分。
划分的原则可以根据功能或者特性来进行,例如将与输入输出相关的功能划分为一个模块,将与数据处理相关的功能划分为另一个模块。
同时,需要注意模块之间的耦合度尽可能低,模块内部的功能尽可能独立。
第三步:定义模块的接口每个模块都有自己的功能和特性,需要定义相应的接口。
接口包括输入参数、输出参数、全局变量以及函数的返回值等。
定义良好的接口可以提高模块之间的耦合度,方便进行单个模块的调试和测试。
第四步:实现模块在实现模块时,可以将每个模块单独进行开发,并进行相应的单元测试。
模块之间的接口必须按照定义的方式进行通信,确保数据的正确传递和处理。
在实现过程中,需要注意对模块的封装,隐藏细节,方便其他模块对其进行调用。
第五步:模块整合与测试当每个模块都实现并通过了单元测试后,就可以进行模块的整合和测试。
模块整合需要通过模块之间的接口将各个模块连接起来,并进行综合测试。
综合测试主要是验证模块之间的通信是否正常,各个模块是否正常协作,以及整个程序是否能够按照预期完成相应的功能。
第六步:模块调试与优化在进行模块调试时,可以逐个模块进行调试,并根据调试结果对模块进行优化。
模块调试的过程中,可以通过打印输出、断点调试等方式来定位和解决问题。
模块化程序设计方法
6.3 函数与数组
数组可以作为函数的实参 有两种形式: 数组元素(下标变量)作为实参; 数组名作为函数的实参
6.3.1 数组元素作函数实参 数组元素作为实参与普通变量作为实参是 完全相同的 பைடு நூலகம் 在发生函数调用时,把作为实参的数组元 素的值传送给形参,实现单向的值传送
6.3.2 数组作为函数参数
(2)有参函数(带参函数) 函数需要外部信息,通过参数形式传递信息 可以返回或不返回函数值
主函数
每个C程序里必须有一个名为main的特殊 函数,称为主函数。 主函数规定了整个程序执行的起点(程序 入口) 程序执行从main函数开始执行,一旦它执 行结束,整个程序就执行结束。 程序不能调用主函数,它将在程序开始执 行时被自动调用。
除了主函数外,程序里的其他函数只有在 被调用时才能进入执行状态。 一个函数要在程序执行过程中起作用,要 么它是被主函数直接调用的,要么是被另 外一个被调用正在执行的函数所调用的。 没有被调用的函数在程序执行中不会起任 何作用。
C不允许函数嵌套定义。 一个函数中再定义一个函数是非法的
函数声明
函数声明:函数原型; 即 返回类型 函数名(形参表); 参数表省略变量名
int min(int a, int b); int min(int , int );
注意:
如果使用库函数,必须在源文件前部用 #include命令包含必要的头文件。 对所有未能在使用前给出定义的函数,都 应给出函数原型声明。 把函数声明放在所有函数的定义之前(不 要写在函数内部)
函数是C语言的重要的语法单位; 是C语言程序的组成单元
。
模块化程序设计
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六模块化(函数)程序设计
一、实验目的
●了解并掌握函数的定义方法
●了解并掌握函数的调用方法
●了解并掌握函数参数的单向传递
●了解并掌握函数的递归调用
二、实验环境
●个人计算机一台,PIII500(或同等性能)以上CPU,128MB以上内存,500MB以
上硬盘剩余空间。
●Windows2000、Windows XP或Win 7操作系统
●Code::Blocks(版本12.11或近似版本,英文版)
三、实验内容
1. 课本习题
完成课本P197第3题。
/*example-22.c*/
2. 年龄谜题
有5个人坐在一起,问第5个人多少岁?他说比第4个大2岁。
问第4个人多少岁?他说比第3个大2岁。
问第3个人多少岁?他说比第2个大2岁。
问第2个人多少岁?他说比第1个大2岁。
最后问第一个人,他说是10岁。
请问第5个人有多大?
编写一函数fun来用递归调用来计算第5个人的岁数,并在main函数中调用它。
/*example-23.c*/
3. 课本习题
完成课本P197第1题。
例如:输入两个整数319和377,两者的最大公约数为29,两者的最小公倍数为4147。
/*example-24.c*/
【解题提示】
两个整数a与b(a>b)的最大公约数gcd(a, b)可用辗转相除法来求得:
若a%b=0,则gcd(a, b)=b;若a%b=r≠0,则gcd(a, b)=gcd(b, r),即a与b的最大公约数等于b与r的最大公约数。
把b赋给a,把r赋给b,获得新的a和b,继续这个过程。
一定有一个时刻,b的值会为0,此时a即为原来的a和b的最大公约数。
用公式表示如下:gcd(a, b)=gcd(b, r1)=gcd(r1, r2)=gcd(r2, r3)...=gcd(r n-1, r n),当r n=0,r n-1即为a和b的最大公约数。
(a%b=r1,b%r1=r2,r1%r2=r3…r i%r i+1=r i+2)
两个整数a与b的最小公倍数lcm=a*b/gcd(a, b),即为a和b的乘积除以两者的最大公约数。
4. 结构体数据在函数之间的传递
将下列程序补充完整,练习结构体变量作为函数参数和函数返回值的方法。
在主函数中定义结构体变量s,并将其成员的初值赋为1、1.0和"example_1";在子函数fun()中,将三个成员的值分别改为20、2.0和"example_2",再传回到主函数中赋给s。
程序的输出为:20, 2.000000, example_2。
/*example-25.c*/
#include "stdio.h"
#include "string.h"
typedef struct st
{
int a;
float b;
char c[20];
} ST;
fun( )
{
}
int main()
{
s = {10, 1.0, "example1"};
printf("%d, %f, %s\n", s.a, s.b, s.c);
return 0;
}
四、总结与思考
一般而言,程序都是有多个函数组成的,因为一个函数中实现的功能会造成逻辑混乱以及阅读上的困难。
模块化的思想要求每个函数都只实现单一的功能,这也是实际的程序设计中,程序员所共同遵守的。
因此,了解和掌握函数调用方法及函数之间的数据传递方法是非常重要的。
只有掌握好了这些,才能让多个函数完美融合成一个整体。
函数调用的难点是递归调用,关键在于在某个时刻,递归要能够结束,否则程序就会陷入无穷的递归。
在完成以上实验的基础上,有兴趣的同学可以在课后思考以下问题,该题难度较大:思考题:汉诺塔问题
课本习题P198 12
/*think-4.c*/。