当前位置:文档之家› 模块化程序设计实例

模块化程序设计实例

模块化程序设计实例
模块化程序设计实例

9 .5 模块化程序设计实例

《程序设计基础》(基于C语言讲解)石光华编著—北京: 清华大学出版社

下面以设计一个简单的成绩管理软件为例,一步一步地按模块化程序设计方法进行设计。

1 .定义问题

设计一个成绩管理软件,其基本功能包括:输入成绩,成绩加分,计算平均成绩,找出最高分,找出最低分,输出成绩等。

2 .确定组成程序的模块

根据成绩管理软件的功能,确定软件的基本模块包括:输入模块,加分模块,平均分模块,最高分模块,最低分模块,输出模块等。

142 程序设计基础

3 .绘制程序结构图

成绩管理软件的结构图如图9-5所示。

图9-5 成绩管理软件结构图

4 .流程图

用流程图确定主程序的逻辑结构,如图9-6所示。

在流程图中,istate 的作用是记录是否已经输入成绩。istate 的使用有如下两种

方式。

(1) 作为全局变量使用。此时istate可以在所有模块中改变其值,主程序更简洁,但

可能产生边际效应。

(2) 作为主程序的局部变量使用。此时istate只能在主程序中改变其值。在主程序

中可以直观地看到其变化,能够防止边际效应。

采用方式(2)的主程序如下。

#include < stdio .h>

#define SIZE 10

void main()

{

int iscore[SIZE] ={0};

int key= - 1;

int iresult=0;

float fresult=0;

int istate=0;

printf(″1:Input scores;\n″);

第9章模块化程序设计 143

图9-6 成绩管理软件主程序流程图

printf(″2:Output scores;\n″);

printf(″3:Count for the max score;\n″); printf(″4:Count for the minimum score;\n″); printf(″5:Count for the total score;\n″); printf(″6:Count for theaverage score;\n″); printf(″- 1:Exit .\n″);

while(1)

{

printf(″Please input your choose:″);

scanf(″%d″,&key);

if (key = = - 1)

144 程序设计基础

switch(key)

{

case1:

istate=input_all_numbers(iscore,SIZE);

break;

case2:

if (istate = =0)

printf(″ERROR:You must input scoresfirst ! \n″); else

output_all_numbers(iscore,SIZE);

break;

case3:

if (istate = =0)

printf(″ERROR:You must input scoresfirst ! \n″); else

{

iresult=count_for_max(iscore,SIZE);

printf(″the max score is %d\n″,iresult);

}

break;

case4:

if (istate = =0)

printf(″ERROR:You must input scoresfirst ! \n″);

{

iresult=count_for_min(iscore,SIZE);

printf(″the min score is %d\n″,iresult);

}

break;

case5:

if (istate = =0)

printf(″ERROR:You must input scoresfirst ! \n″); else

第9章模块化程序设计 145

{

iresult=count_for_total(iscore,SIZE);

printf(″the total score is %d\n″,iresult);

}

break;

case6:

if (istate = =0)

printf(″ERROR:You must input scoresfirst ! \n″); else

{

fresult=count_for_average(iscore,SIZE);

printf(″the average score is % .2f\n″,fresult); }

default:

printf(″ERROR:Input error,please input again! \n″);

}

}

}

5 .编写算法

为程序结构图中每个模块编写算法。

在前面的学习中,已经学过如何加分,计算平均分,以及查找最高、最低分,在这里就不再画出流程图了。

6 .审查算法

最后审查整个算法,直到没有任何逻辑错误。

7 .编程调试

审查算法后,即可进行编程调试。

【例9-12】成绩管理软件的完整程序。

/ *name:a management system about scores*/

/ *creat:stone,2004/ 3/ 8*/

146 程序设计基础

/ *modify:stone,2004/ 3/ 20*/

/ *version:1 .0

#include < stdio .h>

#define SIZE 5 / *定义成绩个数的符号常量*/

int input_all_numbers(int iscore[],int isize);

void output_all_numbers(int iscore[],int isize);

int count_for_max(int iscore[],int isize);

int count_for_min(int iscore[],int isize);

int count_for_total(int iscore[],int isize);

floatcount_for_average(int iscore[],int isize);

void main()

{

int iscore[SIZE] ={0};

int key= - 1;

int iresult=0;

float fresult=0;

/ *用于区分是否已经输入数据的标志,0表示未输入,1表示已经输入*/

int istate=0;

/ *主菜单,可以选择完成不同的成绩统计功能*/

printf(″**********************************************\n″);

printf(″This is a management system about scores .\n\t\tWELCOME ! \n″); printf(″**********************************************\n″);

printf(″1:Input scores;\n″);

printf(″2:Output scores;\n″);

printf(″3:Count for the max score;\n″);

printf(″4:Count for the minimum score;\n″);

printf(″5:Count for the total score;\n″);

printf(″6:Count for theaverage score;\n″);

printf(″- 1:Exit .\n″);

while(1)

printf(″Please input your choose:″);

scanf(″%d″,&key);

/ *根据输入选择的不同,分别进行不同的处理*/

第9章模块化程序设计 147if (key = = - 1)

break;

switch(key)

{

case 1:

istate=input_all_numbers(iscore,SIZE);

break;

case 2:

if (istate = =0)

printf(″ERROR:You must input scores first ! \n″); else

output_all_numbers(iscore,SIZE);

break;

case 3:

if (istate = =0)

printf(″ERROR:You must input scoresfirst ! \n″); else

{

iresult=count_for_max(iscore,SIZE);

printf(″the max score is %d\n″,iresult);

break;

case 4:

if (istate = =0)

printf(″ERROR:You must input scores first ! \n″); else

{

iresult=count_for_min(iscore,SIZE);

printf(″the min score is %d\n″,iresult);

}

break;

case 5:

if (istate = =0)

printf(″ERROR:You must input scores first ! \n″); 148 程序设计基础

else

{

iresult=count_for_total(iscore,SIZE);

printf(″the total score is %d\n″,iresult);

}

break;

case 6:

if (istate = =0)

printf(″ERROR:You must input scores first ! \n″);

else

{

fresult=count_for_average(iscore,SIZE);

printf(″the average score is % .2f\n″,fresult);

}

break;

default:

printf(″ERROR:Input error,please input again! \n″); }

}

}

/ *功能: 输入学生成绩*/

int input_all_numbers(int iscore[],int isize)

{

int iindex=0;

printf(″please input %d scores:\n″,isize);

for(iindex=0; iindex

{

scanf(″%d″,&iscore[iindex]);

}

return1;

}

/ *功能: 输出学生成绩*/

第9章模块化程序设计 149void output_all_numbers(int iscore[],int isize)

{

int iindex=0;

for(iindex=0; iindex

{

printf(″iscore[%2d] = %3d\n″,iindex,iscore[iindex]);

}

}

/ *功能: 计算最高分*/

int count_for_max(int iscore[],int isize)

{

int imax=iscore[0];

int iindex=0;

for(iindex=0; iindex

{

if (imax

imax=iscore[iindex];

}

return imax;

}

/ *功能: 计算最低分*/

int count_for_min(int iscore[],int isize)

{

int imin=iscore[0];

int iindex=0;

for(iindex=0; iindex

{

if (imin>iscore[iindex])

imin=iscore[iindex];

}

return imin;

150 程序设计基础

}

/ *功能: 计算总分*/

int count_for_total(int iscore[],int isize) {

int iindex=0;

int isum=0;

for(iindex=0; iindex

{

isum=isum+iscore[iindex];

}

return isum;

}

/ *功能: 计算平均分*/

floatcount_for_average(int iscore[],int isize) {

int iindex=0;

float faverage=0;

for(iindex=0; iindex

{

faverage=faverage+iscore[iindex];

}

faverage=faverage/ isize;

returnfaverage;

}

由于 C语言中,常用的输入语句 scanf()存在缺陷,在1 .0 版中,输入成绩时,如

果误按了字母键,则程序会出现异常。为此,我们给出了一个改进版,通过自定义函

数 int getdigi(int icount)进行输入,从而解决了这个问题,提高了程序的稳定性和健

壮性。这个主程序能够灵活处理不同的分支情况,可以作为 C语言程序的一个基本

框架。

程序设计中不同的风格与经验,对程序的易用性和健壮性影响很大,要设计和编写出

成功的程序,需要更深入的学习,需要丰富的经验。

第9章模块化程序设计 151【例9-13】成绩管理软件程序的改进版。

/ *name:a management system about scores*/

/ *creat:stone,2004/ 3/ 8*/

/ *modify:stone,2004/ 3/ 30*/

/ *version:1 .1

1 .改进了输入时误按字符导致程序失效的问题

2 .采用void 型函数,简化主程序

3 .采用功能键退出程序,符合常例*/

#include < stdio .h>

#include

#define ESC 27 / *使用功能键控制正常退出*/

#define SIZE 5 / *定义成绩个数的符号常量*/

#define MAXdigit 20 / *定义数据的最大字符个数*/

int input_all_score(int iscore[],int isize);

void output_all_score(int iscore[],int isize);

voidcount_for_max(int iscore[],int isize);

voidcount_for_min(int iscore[],int isize);

voidcount_for_total(int iscore[],int isize);

voidcount_for_average(int iscore[],int isize);

int getdigi(int icount);

void main()

{

int iscore[SIZE] ={0};

char ckey=′a′;

/ *用于区分是否已经输入了数据的标志,0表示未输入,1表示已经输入*/ int istate=0;

/ *主菜单,可以选择完成不同的成绩统计功能*/

do

{

clrscr();

printf(″********************************************** \n″);

printf(″This is a management system about scores .\ n\ t \ tWELCOME ! \n″);

printf(″**********************************************\n″);

152 程序设计基础

printf(″1:Input scores;\n″);

printf(″2:Output scores;\n″);

printf(″3:Count for the max score;\n″);

printf(″4:Count for the minimum score;\n″);

printf(″5:Count for the total score;\n″);

printf(″6:Count for the average score;\n″);

printf(″Esc:Exit system .\n″);

printf(″Please input your choose(1-6):\n″);

/ *根据输入的选择的不同,分别进行不同的处理*/

ckey=getch();

if(ckey= =′1′)

istate=input_all_score(iscore,SIZE);

else if((istate= =0)&&(ckey !=Esc))

{

printf(″\nERROR:You must input scores first !″);

printf(″\nPress a key tocontinue .″);

getch();

}

else if (ckey= =′2′)

output_all_score(iscore,SIZE);

else if(ckey= =′3′)

count_for_max(iscore,SIZE);

else if(ckey= =′4′)

count_for_min(iscore,SIZE);

else if(ckey= =′5′)

count_for_total(iscore,SIZE);

else if(ckey= =′6′)

count_for_average(iscore,SIZE);

}while(ckey !=Esc);

}

/ *功能: 输入学生成绩*/

int input_all_score(int iscore[],int isize)

第9章模块化程序设计 153{

int iindex=0;

printf(″please input %d scores:\n″,isize);

for(iindex=0; iindex

{

printf(″\nplease input the %d scores:″,iindex); iscore[iindex] =getdigi(3);

}

return1;

}

/ *功能: 输出学生成绩*/

void output_all_score(int iscore[],int isize)

{

int iindex=0;

for(iindex=0; iindex

{

printf(″iscore[%2d] = %3d\n″,iindex,iscore[iindex]); }

getch();

}

/ *功能: 计算最高分*/

voidcount_for_max(int iscore[],int isize)

{

int imax=iscore[0];

int iindex=0;

for(iindex=0; iindex

{

if (imax

imax=iscore[iindex];

}

printf(″\nThe max score is %d″,imax);

154 程序设计基础

getch();

}

/ *功能: 计算最低分*/

voidcount_for_min(int iscore[],int isize) {

int imin=iscore[0];

int iindex=0;

for(iindex=0; iindex

{

if (imin>iscore[iindex])

imin=iscore[iindex];

}

printf(″\nThe min score is %d″,imin); getch();

}

/ *功能: 计算总分*/

voidcount_for_total(int iscore[],int isize) {

int iindex=0;

int isum=0;

for(iindex=0; iindex

{

isum=isum+iscore[iindex];

}

printf(″\nThe total score is %d″,isum); getch();

}

/ *功能: 计算平均分*/

voidcount_for_average(int iscore[],int isize)

{

第9章模块化程序设计 155

int iindex=0;

float faverage=0;

for(iindex=0; iindex

{

faverage=faverage+iscore[iindex];

}

faverage=faverage/ isize;

printf(″\nThe average score is % .2f″,faverage);

getch();

}

/ *function:输入指定个数的数字,构成一个整形数据,可以用来代替scanf*/ / *name:getdigi() */

/ *creat:stone,2004/ 3/ 25*/

/ *modify:stone,2004/ 3/ 26*/

/ *parametric:int icount,数字个数*/

/ *return:int,整形数字*/

int getdigi(int icount)

{

int iloop=0;

char digit_str[MAXdigit] ={′0′};

iloop=0;

do

{

digit_str[iloop] =getch();

if (isdigit(digit_str[iloop]))

{

putch(digit_str[iloop]);

iloop+ + ;

}

}

while(iloop

returnatoi(digit_str);

}

156 程序设计基础

双语精髓

The mainline

Since each module performs a single specific task,a mainline routine must provide

the master control that tiesall themodules together andcoordinates their activity .This

program mainline should show the main processing functions,and the order in which

theyare to be performed . It should also show the flow of data and the major control

structures .The mainline should alsobeeasy to read,be of manageable length and show

sound logic structure .

主程序

由于每个模块完成一个特定的任务,因此需要一个主程序或主模块进行总体控制,把

所有的模块组合在一起并协调它们之间的活动。主程序显示了程序的主要功能,以及这

些功能完成的顺序,还显示了数据流向和主要的控制结构。另外,主程序应该容易阅读,

从程序长度上易于管理,并有合理的逻辑结构。

Module

A module must be large enough to perform its task,and must include only the

operations thatcontribute tothe performanceof that task .It shouldhaveasingleentry,

anda single exit with a top - to - bottom sequence of instructions . The name of the

module shoulddescribe thework tobedoneasa single

specificfunction .Theconvention

of naming a module by using a verb,followed by a two - word object,is particularly

important here, as it helps to identity the separate task that the module has been

designed to perform .Also,the careful naming of modules using this convention makes

the algorithm and resultant code easier to follow . For example, typical module names

might be:

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

第7章用函数实现模块化程序设计 习题与思考 2.在C语言中,函数的隐含存储类别是_____A_____. A)auto B)static C)extern D)无存储类别 要点分析:本习题考察变量的存储类别。C语言规定,如不指定变量的存储类别,系统默认为自动类型的,即auto型。 3.以下所列的各函数首部中,正确的是_____C_____. A)void play(var:Integer,var b:Integer) B)void play(int a,b) C)void play(int a,int b) D)Sub play(a as integer,b as integer) 要点分析:本习题考察函数的定义。要求函数首部的各个形式参数应分别指出其数据类型。 4.以下程序的输出结果是_____C_____. fun(int x,int y,int z) { z=x*x+y*y;} void main( ) { int a=31; fun(5,2,a); printf("%d",a);} A)0 B)29 C)31 D)无定值要点分析:本习题考察形参和实参的关系。函数一旦发生传值调用,把实参的值传递给形参后,实参的值仍保留原值。 5.以下程序的输出结果是_____A_____. f( int b[ ],int m, int n ) { int i,s=0; for(i=m;i

return s; } void main( ) { int x,a[ ]={1,2,3,4,5,6,7,8,9}; x=f(a,3,7); printf("%d\n",x); } A) 10 B) 18 C) 8 D) 15 要点分析:本习题考察数组做函数的参数,此时实参为数组名,形参数组不再重新分配存储空间,形参数组共占实参数组所在的存储空间。数组做函数参数是学生出错误比较多的知识点。 7.以下程序的输出结果是_____D_____. int f( ) { static int i=0; int s=1; s+=i;i++; return s;} void main( ) { int i,a=0; for(i=0;i<5;i++)a+=f(); printf("%d\n",a); } A) 20 B) 24 C) 25 D) 15 要点分析:本习题考察静态局部变量。静态局部变量的值在调用结束后仍保持结束后的值。静态局部变量是变量的存储类别的重点,学生应该掌握并应用。 8. 以下程序的功能是调用函数fun计算:m=1-2+3-4+…+9-10,并输出结果。请填空。 int fun( int n) { int m=0,f=1,i; for(i=1; i<=n; i++) { m+=i*f; f= _____-f_____ ; } return m; } void main( ) { printf("m=%d\n", _____fun(10)_____ ); } 要点分析:本习题考察函数的调用。通过编写fun函数求得累加和。

模块化设计方法的设计流程

BJ-EPM240T100学习板实验教程 模块化设计方法的设计流程 将这种模块化设计思路运用于FPGA/CPLD设计,将大规模复杂系统按照一定规则划分成若干模块,然后对每个模块进行设计输入、综合,并将实现结果约束在预先设置好的区域内,最后将所有模块的实现结果有机地组织起来,就能完成整个系统的设计。 (1)顶层模块的设计:项目管理者需要完成顶层模块的设计输入与综合,为进行Modular Design实现阶段的第一步—初始预算阶段(Initial Budgeting Phase)做准备。 (2)子模块的设计:每个项目成员相对独立地并行完成各自子模块的设计输入和综合,为进行Modular Design实现阶段的第二步—子模块的激活模式实现(ActiveModule Implementation)做准备。 模块化设计的实现步骤是整个模块化设计流程中最重要、最特殊的,它包含: (1)初始预算–本阶段是实现步骤的第一步,对整个Modular Design起着指导性的作用。在初始预算阶段,项目管理者需要为设计的整体进行位置布局,只有布局合理,才能够在最大程度上体现Modular Design的优势;反之,如果因布局不合理而在较后的阶段需要再次进行初始预算,则需要对整个实现步骤全面返工。 (2)子模块的激活模式实现(Active ModuleImplementation)--在该阶段,每个项目成员并行完成各自子模块的实现。 (3)模块的最后合并(Final Assembly)--在该阶段项目管理者将顶层的实现结果和所有子模块的激活模式实现结果有机地组织起来,完成整个设计的实现步骤。 模块化设计中模块划分的基本原则为: 子模块功能相对独立,模块内部联系尽量紧密,而模块间的连接尽量简单。

模块化设计方法及其在机械设计中的应用

模块化设计方法及其在机械设计中的应用 摘要:随着社会经济的发展,为了提高企业生产效率,模块化设计理念在机械设计领域日益广泛,其对于整合市场、优化结构具有重要意义。我们要树立创新意识,加强其在机械设计中的研究运用,实现模块化的转变。 关键词:模块化;设计方法;机械设计 随着技术的发展和经验的总结,在机械设计中,越来越多的设计方相继出现,并逐渐得到广泛的运用。在实际工作中传统的机械包装方法的弊端日益显现,越来越多不适应机械设计的需要,而模块化设计方法逐渐得到广泛的运用。 1 机械产品模块化涵义 模块化就是以它的观点去对产品或者系统进行策划和生产方案,在某个限度内的一样或者存在差异的功能、相异规格的产品探究讨论,区分并设计。机械产品的模块化主要可从以下几方面进行分析: (1)功能需求集,指的是市场和客户对模块化产品基本功能要求的合集。产品的功能需求是进行产品模块化的重要内容,是产品发展的重要方向。 (2)功能模块,强调的为产品里所能够充分发挥其性能因素的作用. (3)结构模块,指的是功能模块的具体结构,一般由部件或子结构模块组成。 (4)模块接口,指的是描述结构模块组合时相互间的几何、物理关系的结合面,模块接口是模块组合的重要依据。 (5)基础模块,通用型接口模块,能够满足基本功能,而得以实现的定向模块功能演进的模块形式。 2 模块化设计 2.1 模块划分标准 为了让人们对模块化设计方法在机械设计中运用有更为详细的了解,对模块化的设计进行划分,在数控立式车床设计中,运用模块化设计方法,其中最为关键的内容是进行功能与结构分析,这是决定设计效果的关键内容。因此,设计开始前,要对模块进行处理,详细划分模块。当前,还没有任何一种标准可以作为模块划分原则。这里,依据不同侧重点,对不同模块进行划分。模块具有独立性,

模块化程序设计实例

9 .5 模块化程序设计实例 《程序设计基础》(基于C语言讲解)石光华编著—北京: 清华大学出版社 下面以设计一个简单的成绩管理软件为例,一步一步地按模块化程序设计方法进行设计。 1 .定义问题 设计一个成绩管理软件,其基本功能包括:输入成绩,成绩加分,计算平均成绩,找出最高分,找出最低分,输出成绩等。 2 .确定组成程序的模块 根据成绩管理软件的功能,确定软件的基本模块包括:输入模块,加分模块,平均分模块,最高分模块,最低分模块,输出模块等。 142 程序设计基础 3 .绘制程序结构图 成绩管理软件的结构图如图9-5所示。 图9-5 成绩管理软件结构图 4 .流程图 用流程图确定主程序的逻辑结构,如图9-6所示。 在流程图中,istate 的作用是记录是否已经输入成绩。istate 的使用有如下两种 方式。 (1) 作为全局变量使用。此时istate可以在所有模块中改变其值,主程序更简洁,但 可能产生边际效应。 (2) 作为主程序的局部变量使用。此时istate只能在主程序中改变其值。在主程序 中可以直观地看到其变化,能够防止边际效应。 采用方式(2)的主程序如下。

#include < stdio .h> #define SIZE 10 void main() { int iscore[SIZE] ={0}; int key= - 1; int iresult=0; float fresult=0; int istate=0; printf(″1:Input scores;\n″); 第9章模块化程序设计 143 图9-6 成绩管理软件主程序流程图 printf(″2:Output scores;\n″); printf(″3:Count for the max score;\n″); printf(″4:Count for the minimum score;\n″); printf(″5:Count for the total score;\n″); printf(″6:Count for theaverage score;\n″); printf(″- 1:Exit .\n″); while(1) { printf(″Please input your choose:″); scanf(″%d″,&key); if (key = = - 1) 144 程序设计基础

模块化程序设计练习题及答案

第四章模块化程序设计练习题及参考答案 一、填空题 1、以下程序的运行结果是(111),把x定义为静态变量运行结果是(123)。void increment(void) { int x=0; x+=1; printf("%d",x);} main() { increment(); increment(); increment(); } 2、若输入的值是-125,以下程序的运行结果是(-125=-5*5*5) #include "" main() { int n; void f(int n); scanf("%d",&n); printf("%d=",n); if(n<0) printf("-"); n=fabs(n); fun(n); } void fun(int n) { int k,r; for(k=2;k<=sqrt(n);k++) { r=n%k; while(r==0) { printf("%d",k); n=n/k; if(n>1)printf("*"); r=n%k; } } if(n!=1) printf("%d\n",n); } 3、设有以下宏定义: #define WIDTH 80 #define LENGTH WIDTH+40 则执行赋值语句:v=LENGTH*20;(v为int型)后,v的值是(880) 4、设有以下宏定义: #define WIDTH 80 #define LENGTH (WIDTH+40)

则执行赋值语句:k=LENGTH*20;(k为int型变量)后,k的值是(2400) 5、下面程序的运行结果是(5) #define DOUBLE(r) r*r main() { int x=1,y=2,t; t=DOUBLE(x+y); printf("%d\n",t);} 6、下面程序的运行结果是(36) #define MUL(z) (z)*(z) main() { printf("%d\n",MUL(1+2)+3); } 7、下面程序的运行结果是(212) #define POWER(x) ((x)*(x)) main() { int i=1; while(i<=4) printf("%d,",POWER(i++)); } 8、下面程序的运行结果是(9) #define MAX(a,b) (a>ba:b)+1 main() { int i=6,j=8,k; printf("%d\n",MAX(i,j)); } 二、选择题 1、以下正确的说法是(D)建立自定义函数的目的之一是: A)提高程序的执行效率 B)提高程序的可读性 C)减少程序的篇幅 D)减少程序文件所占内存 2、以下正确的说法是(B) A)用户若需调用标准库函数,调用前必须重新定义 B)用户可以重新定义标准库函数,若如此,该函数将失原有含义。 C)系统根本不允许用户重新定义标准库函数。 D)用户若需调用标准函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动去调用。 3、以下正确的函数定义形式是(C) A)double fun(int x,int y) B)double fun(int x;int y) C)double fun(int x,int y); D)double fun(int x,y) 4、以下正确的说法是(D)。在C语言中: A)实参与其对应的形参各占用独立的存储单元。 B)实参和与其对应的形参共占用一个存储单元。 C)只用当实参和与其对应的形参同名时才共占用存储单元。

产品模块化设计

当今制造业企业一方面必须利用产品的批量化、标准化和通用化来缩短上市周期、降低产品成本、提高产品质量,另一方面还要不断地进行产品创新使产品越来越个性化,满足客户的定制需求。这样,如何平衡产品的标准化、通用化与定制化、柔性化之间的矛盾,成为赢得竞争的关键能力。平台化、模块化的产品设计和生产可以在保持产品较高通用性的同时提供产品的多样化配置,因此平台化、模块化的产品是解决定制化生产和批量化生产这对矛盾的一条出路。 以下总结了推行模块设计过程需要关注的要点: 1 产品模块化设计各个部门远景目标: 1)产品开发:产品开发过程分解为平台开发和产品开发过程,专门的团队进行平台的设计和优化,新产品的开发由平台通过 变量配置实现; 2)产品制造:产品制造部门按照产品平台分配产线和装配资源; 3)供应链管理:实现零库存,根据模块的要求选择能够承接模块设计和开发的供应商; 4)市场部门:实现按订单制定产品开发和制造计划。 2 模块化实施过程: 1)产品系列平台划分,采用“产品型号组方法”则是对整个目标 市场划分所进行的全部变型型号的规划和开发。新产品规划要

定义一组变型型号。配置应当与市场定位关联,其实际定义应 当与产品性能的部分关联,并体现出不同变型型号之间的差异。 2)产品模块划分,可以采用MFD方法进行模块划分,步骤包括: a 定义客户需求,利用卡诺模型区分客户需求与满意度关 系、使用QFD方法定义客户需求与产品性能的对应关系; b 选择技术方法,定义产品功能树,使用波氏方法选择 技术方法;使用DPM矩阵描述技术方法与产品性能的对 应关系; c 产生模块概念,定义模块驱动与技术解决方案的对应关 系,最理想的模块技术解决方法是可以自己组合成一个模 块,至少可以作为一个模块的基础; 不够优化的技术解决 方法应该和其他技术解决方法整合在一起组成模块。 d 评估模块概念,定义模块接口,优化模块接口。 e 模块优化,创建模块规格说明,进行模块优化,进行 经济和技术上的评价。 3)选项变量定义;在一个平台上定义许可的选项/选项集,定义选项之间的关系和约束。 3 模块化设计考核指标 1)部署通用产品结构的型号组/ 全部型号组; 2)通用模块实例/ 全部的模块实例; 3)CAD/PDM系统中零部件族的利用率;

家具模块化设计方法实例分析

家具模块化设计方法实例分析 1前言 当前,消费者对家具的个性化需求日益凸显,如何满足这种需求已经成为越来越多家具企业发展的关键。要做到既符合现代机械化生产的发展主流,又节约成本,且能提高产品的市场竞争力。这确实为难了不少的家具企业。有一坐企业尝试通过从销售终端满足个性化,但众多形态各异、尺寸繁多的家具定单从销售端传送至生产和设计部门,却带来了新的矛盾:设计任务艰巨、生产设计难排、产品质量难以保证,甚至由于部件尺寸的相近导致出错率增加、生产效率低下。有一些敢于吃螃蟹的企业尝试从设计入手,通过标准零部件的设计、组合成新产品来满足这种“个性化”“的需求。但遗憾的是,这种做法并未带来预期的效果,单一的产品导致了销售客额和顾客满意率的下降。所以,如何实现产品的个性化?是从销售端,还是从设计与生产端着手呢?这是家具企业必须根据企业现状做出回答的问题。定制是从销售端解决问题,而模块化设计是从设计端解决问题,旨在通过设计具有标准性和通用性的功能模块,达到组合成多样化的家具的目的。毫无疑问,模块化设计在家具业具有很大的发展潜力,它既能解决个性化需求的问题,还能做到低成本与高效率。 模块化设计属于方法学的范畴,在其他工业行业中已经得到了长足的发展。由于家具消费环塘和制造环境的变化,模块化设计以其特有的优势,开始在家具行业尤其是办公家具中应用。而对于民用家具,

近年来个性化需求与家具企业的生产矛盾日益突出,有关模块化设计的探索才刚刚开始。鉴于国内尚无系统的家具模块化设计理论来指导企业的实践,本文着重以衣橱为例,详细具体地分析单个家具的非模块化设计过程,以进一步明确家具模块化设计的必要性和可操作性。 2 设计概念及设计方法 家具模块化设计指的是在对家具进行功能分析的基础上,划分并设计出一系列的家具功能模块,通过功能模块的选择与组合构成不同的家具,以满足市场多样化需求的设计方法。与传统的设计方法相比较,家具模块化设计呈现出许多新特征。首先,它是针对模块和家具产品系统的设计,既要设计模块,又要设计家具成品。其次,它以标准化、通用化的零部件快速组合成家具,能实现家具的多样化。模块化设计不同于标准化设计,标准化设计带来的是单一的产品,而模块化设计则不然,在设计之初就考虑模块可组合成产品的多样性。因此模块化设计是在标准化设计基础之上,实现产品多样化的一种方法。 根据家具模块化设计的概念,笔者提出从三个层次展开家具的模块化设计。第一层次是家具模块化总体设计。这个阶段主要是进行模块化系统的总体策划,确定模块化实施的范围。良好的模块化总体设计,是模块化设计得以实现的基础。第二层次是家具模块设计,这是模块化设计系统具体化的过程,是承上启下的环节。模块化设计的好坏,直接影响到模块化家具组合的最终效果。第三层次是家具模块化产品设计。这个阶段主要是选择模块,评价模块可能组合方式的合理

实验七 用函数实现模块化程序设计

河南工业大学C语言实验报告 专业班级:生物11级1班学号:201112910118姓名:l刘路路指导老师:朱红莉评分: 实验题目:用函数实现模块化程序设计 实验目的:熟练掌握函数的定义、调用、声明 实验内容:P218-219 习题1、2、4 实验步骤:(具体程序及运行结果) 7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。 #include int main() {int hcf(int,int); int lcd(int,int,int); int u,v,h,l; scanf("%d,%d",&u,&v); h=hcf(u,v); printf("H.C.F=%d\n",h); l=lcd(u,v,h); printf("L.C.D=%d\n",l); return 0; } int hcf(int u,int v) {int t,r; if (v>u) {t=u;u=v;v=t;} while ((r=u%v)!=0) {u=v; v=r;} return(v); } int lcd(int u,int v,int h) { return(u*v/h); } 7.3写一个判素数的函数,在主函数输入一个整数,输出是否为素数的信息。 #include int main() {int prime(int); int n; printf("input an integer:"); scanf("%d",&n);

if (prime(n)) printf("%d is a prime.\n",n); else printf("%d is not a prime.\n",n); return 0; } int prime(int n) {int flag=1,i; for (i=2;i #define N 3 int array[N][N]; int main() { void convert(int array[][3]); int i,j; printf("input array:\n"); for (i=0;i

模块化程序设计

第四章模块化程序设计 教学目的:模块程序设计是C程序合作编程序的方法,通过这一章的学习使学生能自己编C 程序中的函数,正确地调用函数,熟悉函数调用时形式参数和实在参数的关系。通过变量的存储类型,能正确使用各种不同存储类型的变量编程序。 重点难点:函数的嵌套调用及函数的递归调用。 前面各几章的学习,大家已有了编制小程序的经验。如果想编制大程序,在C语言下就得用模块化程序设计,其基本思想是将一个大的程序按功能分割成一些模块,使每一个模块都成为功能单一、结构清晰、接口简单、容易理解的小程序。 C语言提供了支持模块化软件开发的功能: 1 函数式的程序结构。程序由一个或多个函数组成,每个函数都有各自独立的功能和界面。 2 允许通过使用不同的存储类别的变量,控制模块内部和外部的信息交换。 3具有预编译处理功能,为程序的调试、移植提供方便,支持模块化程序设计。 本章介绍这些功能及进行程序开发的基本方法。 4.1 函数 C程序结构 无论涉及的问题是复杂还是简单,规模是大还是小,用C语言设计程序,任务只有一种,就是编写函数,至少要编写一个主函数main(),C程序的执行就是执行相应的main()函数。即从它的main()函数的第一个花括号开始,依次执行后面的语句,直到最后的花括号为止。其它函数只有在执行了main()函数的过程中被调用时才执行。 高级语言中“函数”的概念和数学中“函数”的概念不完全相同。英语单词function有“函数”和“功能”两种介绍,高级语言中的函数实际上是功能的意思。当要完成某一个功能时,就用一个函数去实现它。在程序设计时首先要考虑main()函数中的算法,当main()中需要使用某一功能时,就用一个具有该功能的函数表达式表示。这时的函数,我们只知道它具有什么功能,其它先不作处理。设计完main()的算法并检验无误后,这时开始考虑它所调用的函数。如果在库函数中能找到,就可直接使用,否则再动手设计这些函数。这种设计方法称为自顶向下、逐步细化的程序设计方法。这种方法设计出来的程序在功率高,程序层次分明、结构清晰。复杂程序的层次可从以下图形中看出: 许多大型软件系统包含了相当丰富的,可供从事某一领域工作人员选用,如一个高等学校的信息管理系统就包含了教务、科研、人事、财务,设备、图书、后勤、办公室等子系统。每一个子系统以可分为许多子子系统。 这种软件为了方便用户大都采用菜单(menu)方式,这种形式的软件,大家都用过。用户

汇编语言实验报告 模块化程序设计

汇编语言实验报告 Assembly Language Programming Lab Reports ______________________________________________________________________________ 班级:姓名:学号:实验日期: 学院:专业: 实验顺序:原创:___ 实验名称:模块化程序设计 实验分数:_______ 考评日期:________ 指导教师: ______________________________________________________________________________ 一.实验目的 1、掌握宏定义的相关内容。 (1)伪指令: MACRO,ENDM。 (2)掌握宏定义时的哑元,变元,&分割符的使用。变元可以是操作数,操作码,操作码的一部分和&联合使用,存储单元,字符串。 (3)掌握宏调用时的实元和宏的展开。 2.掌握宏运算 (1)&替换运算符 (2)<>传递运算符 (3)!转义运算符号 (4)%表达式运算符 (5);;宏注释符 3、其它宏功能 (1)宏标号LOCAL (2)宏删除purge (3)宏嵌套,宏展开中的数字1代表插入的程序是宏定义实体中的。宏嵌套在展开时里层被嵌套调用的宏会显示嵌套调用的层次,待验证。 (4)宏库的建立和调用 4、结构伪操作 (1)结构定义 结构名 STRUG 结构体 结构名 ENDS (2)结构预置 (3)结构引用 5、重复汇编和条件汇编。 6、多模块结构程序设计 (1)全局符号定义PUBLIC

(2)外部符号说明EXTRN (3)段属性与段组合 (4)参数传递 7、宏指令和子程序的区别 (1)工作方式的区别,在多次调用时,使用宏指令占用较大空间但速度较快。使用子程序占用空间小但执行时间长。 (2)参数传递的方便性。 (3)参数的多样性和灵活性,宏指令的实参数可以是常数,寄存器,内存变量,操作码或操作码的一部分,操作数的一部分等,子程序是不可以比拟的。 鉴于以上区别,编程时应该扬长避短地使用宏指令和子程序,通常宏指令被用在代码较短且参数较多的场合,子程序被用在代码较长的场合。 8、模块连接 (1)外部引用与全局符号说明 (2)使用公用数据段实现通信过程 段定义伪指令在定义组合类型时定义为COMMON类型,这样在连接时会把多个程序的同名数据段连接时重叠形成一个段,产生段覆盖。允许各模块使用不同的变量名,但是主模块和子模块的数据在定义这些变量上应当有对应的结构。 (3)使用寄存器或者堆栈实现过程通信。 ______________________________________________________________________________二.实验环境 操作系统:windows 8 编译程序:masm 5.0 ______________________________________________________________________________三.实验原理 1、宏库的建立和调用 2、多模块结构程序设计 _______________________________________________________________________ 四.实验步骤及结果分析 1、宏库的建立和调用 宏库的建立: ;8-1.mac input macro mov ah,01h int 21h endm output macro x mov dl,x

家具模块化设计方法实例分析(1).doc

家具模块化设计方法实例分析 1 前言 当前,消费者对家具的个性化需求日益凸显,如何满足这种需求已经成为越来越多家具企业发展的关键。要做到既符合现代机械化生产的发展主流,又节约成本,且能提高产品的市场竞争力。这确实为难了不少的家具企业。有一坐企业尝试通过从销售终端满足个性化, 但众多形态各异、尺寸繁多的家具定单从销售端传送至生产和设计部门,却带来了新的矛盾:设计任务艰巨、生产设计难排、产品质量难以保证,甚至由于部件尺寸的相近导致出错率增加、生产效率低下。 有一些敢于吃螃蟹的企业尝试从设计入手,通过标准零部件的设计、组合成新产品来满足这种个性化”的需求。但遗憾的是,这种做法并未带来预期的效果,单一的产品导致了销售客额和顾客满意率的下降。所以,如何实现产品的个性化?是从销售端,还是从设计与生产 端着手呢?这是家具企业必须根据企业现状做出回答的问题。定制是从销售端解决问题,而模块化设计是从设计端解决问题,旨在通过设计具有标准性和通用性的功能模块,达到组合成多样化的家具的目的。毫无疑问,模块化设计在家具业具有很大的发展潜力,它既能解决个性化需求的问题,还能做到低成本与高效率。 模块化设计属于方法学的范畴,在其他工业行业中已经得到了长足的发展。由于家具消费环塘和制造环境的变化,模块化设计以其特 有的优势,开始在家具行业尤其是办公家具中应用。而对于民用家具, 近年来个性化需求与家具企业的生产矛盾日益突出,有关模块化设计的探索才刚刚开始。鉴于国内尚无系统的家具模块化设计理论来指导企业的实践,本文着重以衣橱为例,详细具体地分析单个家具的非模块化设计过程,以进一步明确家具模块化设计的必要性和可操作性。 2 设计概念及设计方法 家具模块化设计指的是在对家具进行功能分析的基础上,划分并设计出一系列的家具功能模块,通过功能模块的选择与组合构成不同的家具,以满足市场多样化需求的设计方法。与传统的设计方法相比较,家具模块化设

模块化产品设计的一些思考和体会-王志华

模块化产品设计的一些思考和体会 一、产品开发工作的挑战 在剧烈变动的3C时代(客户Customer、竞争Compete和变化Change),要想赢得竞争的胜利,企业必须通过优化整个产品开发来缩短产品上市时间、提高产品质量、降低成本,同时还要不断通过研发创新来满足客户的变化需求。技术的飞速进步,引起产品越来越复杂,随着客户对教学产品个性化需求程度的增加,也导致产品定制化趋势越来越明显,企业必须创建数量庞大的产品系列来满足学校不断变化的需求。随着现代科技的发展,模块化已成为工程产品的主要发展趋势之一,作为标准化的新形式,模块化被视为实现产品多样化的主要途径。 二、模块化产品设计概念 1、模块的历史来源 模块并不是一个新的概念,早在20世纪初期的建筑行业中,将建筑按照功能分成可以自由组合的建筑单元的概念就已经存在,这时的建筑模块强调在几何尺寸上可以实现连接和互换。然后,模块被引入机械制造业,人们进一步将模块与物理产品的功能联系到了一起,模块具有了明确的功能定义特征、几何连接接口,以及功能输入、输出接口特征。 2、现代模块化的诞生 模块的演变过程是从单纯的几何结构单元,发展到集成功能单元,又演变成为非物理实体的载体,如知识和软件等。 1965年之前,计算机都是整机制造的,当时的设计是相互依赖的,之所以这样是因为计算机系统太复杂了。在这种复杂性灾难之下,不可能像现在这样按照某种标准,遵照通用化原则,设计具有兼容性的可以实现工业化大生产的产品,使得计算机在当时非常昂贵。 比如1944年在美国国防部的资助下,由J.Presper Eckert Jr 和W.Mauchly领导的小组在宾夕法尼亚大学建造了一台名为ENIAC(电子数字积分计算机Electronic Numerical Integrator And Calculator)的计算机。生产完全是在试错过程中进行,应用完全是实验性的。 1945年当ENIACt投入使用之后,设计者累积的知识使他们明白了如何建造一台性能更好的机器。他们把想象中的机器命名为ENVAC,并把计算机系统界定为一种“组合式”制品。标明其关键组成部分是基本存储器、控制单元、运算“器官”、输入/输出和辅助存储器(IBM360电脑)。 随着计算机软件技术的发展,模块的概念又被用到了非物理产品领域,在软件行业模块的概念被广泛的实践着,大型的软件系统(比如PTC公司的Windchill系统)的模块化趋势越来越明显。 3、模块设计的案例 平台化、模块化的产品战略已经有很多成功的案例在世界很多的著名公司中应用。日本索尼公司在20世纪80年代仅利用4个基础平台的Walkman产品,生产出250余种录音机随身听。这250种随身听无论在价位、功能和款式上都有很大的区别,可以满足用户的各种不同需求,但是这4个基础平台却存在着大量的重用模块。 “平台”概念最早由大众集团提出并实践,并在PQ34平台上获得了巨大的成功。PQ24,PQ25,PQ34,PQ35,PQ46,PL45,PQ2,PQ3。 P*4等。大众现在基本上已经逐渐放弃平台的概念,而采取更抽象的“模

C语言 实验三 模块化程序设计

实验三模块化程序设计 (3学时) 【实验目的】 1. 掌握一维数组和二维数组的定义、赋值和输入输出的方法。 2. 掌握字符数组和字符串函数的使用。 3. 掌握与数组有关的算法。 4. 掌握函数定义的方法。 5. 掌握函数实参与形参的传递方式。 6. 掌握函数的嵌套调用和递归调用的方法。 7. 了解全局变量和局部变量、动态变量、静态变量的概念和使用方法。 【实验内容】 任务1 数组的基本定义与应用 1. 定义一个10个元素的int数组a,输入10个数,并输出。 参考程序: main() {int i,a[10]; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++) printf("%5d",a[i]); printf("\n"); } 运行结果: 2. 寻找整数数组num中的最大值及其所在的下标。 参考程序:main() {int i,max,p,a[10]; printf("please enter 10 data:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); max=a[0];p=0; for(i=1;i<10;i++) 淮南师范学院电气信息工程学院 1

if(a[i]>max) {max=a[i];p=i;} printf("max is:%d\n",max); printf("point is:%d\n",p+1); } 运行结果: 3. 实现对n个数的数列从小到大排序。(比较交换法、选择法、冒泡法) 参考程序:冒泡法 #include main() {int i,j,n,a[100];int temp;clrscr(); printf("enter the number:\n"); scanf("%d",&n); for(i=0;ia[j+1]) {temp=a[j];a[j]=a[j+1];a[j+1]=temp;} printf("\n output the sorted array\n"); for(i=0;i

家具模块化设计

技术:家具模块化设计方法实例分析 1前言 当前,消费者对家具的个性化需求日益凸显,如何满足这种需求已经成为越来越多家具企业发展的关键。要做到既符合现代机械化生产的发展主流,又节约成本,且能提高产品的市场竞争力。这确实为难了不少的家具企业。有一坐企业尝试通过从销售终端满足个性化,但众多形态各异、尺寸繁多的家具定单从销售端传送至生产和设计部门,却带来了新的矛盾:设计任务艰巨、生产设计难排、产品质量难以保证,甚至由于部件尺寸的相近导致出错率增加、生产效率低下。有一些敢于吃螃蟹的企业尝试从设计入手,通过标准零部件的设计、组合成新产品来满足这种“个性化”“的需求。但遗憾的是,这种做法并未带来预期的效果,单一的产品导致了销售客额和顾客满意率的下降。所以,如何实现产品的个性化?是从销售端,还是从设计与生产端着手呢?这是家具企业必须根据企业现状做出回答的问题。定制是从销售端解决问题,而模块化设计是从设计端解决问题,旨在通过设计具有标准性和通用性的功能模块,达到组合成多样化的家具的目的。毫无疑问,模块化设计在家具业具有很大的发展潜力,它既能解决个性化需求的问题,还能做到低成本与高效率。 模块化设计属于方法学的范畴,在其他工业行业中已经得到了长足的发展。由于家具消费环塘和制造环境的变化,模块化设计以其特有的优势,开始在家具行业尤其是办公家具中应用。而对于民用家具,近年来个性化需求与家具企业的生产矛盾日益突出,有关模块化设计的探索才刚刚开始。鉴于国内尚无系统的家具模块化设计理论来指导企业的实践,本文着重以衣橱为例,详细具体地分析单个家具的非模块化设计过程,以进一步明确家具模块化设计的必要性和可操作性。 2设计概念及设计方法 家具模块化设计指的是在对家具进行功能分析的基础上,划分并设计出一系列的家具功能模块,通过功能模块的选择与组合构成不同的家具,以满足市场多样化需求的设计方法。与传统的设计方法相比较,家具模块化设计呈现出许多新特征。首先,它是针对模块和家具产品系统的设计,既要设计模块,又要设计家具成品。其次,它以标准化、通用化的零部件快速组合成家具,能实现家具的多样化。模块化设计不同于标准化设计,标准化设计带来的是单一的产品,而模块化设计则不然,在设计之初就考虑模块可组合成产品的多样性。因此模块化设计是在标准化设计基础之上,实现产品多样化的一种方法。 根据家具模块化设计的概念,笔者提出从三个层次展开家具的模块化设计。第一层次是家具模块化总体设计。这个阶段主要是进行模块化系统的总体策划,确定模块化实施的范围。良好的模块化总体设计,是模块化设计得以实现的基础。第二层次是家具模块设计,这是模块化设计系统具体化的过程,是承上启下的环节。模块化设计的好坏,直接影响到模块化家具组合的最终效果。第三层次是家具模块化产品设计。这个阶段主要是选择模块,评价模块可能组合方式的合理性,然后根据消费者的需求组合成家具。从这三个层次可看出,家具模块化设计自上而下,从总到细,各个层次的设计环环相扣。 3设计实例

模块化产品开发的基本思路

●模块化产品开发的基本思路 ▲把产品族分解为模块,建立模块体系。不同模块组合构成柔性的、可变的、多样化的产品。 ▲实现“以不变(模块系列)应多变(用户需求)的产品开发模式。 ●系统分解为模块的基本原则 ▲以功能为核心、结合组装结构进行分解。 ▲系统通用要素的提取和分离,相似要素的简化、归并、统一,经典型化处理,形成模块。 ▲分解点的选择:高内聚,低耦合。 ?模块化产品开发模式 ●模块化设计的基本方法 ▲模块组合法: 新产品=不变部分(通用模块)+准通用部分(改型模块) +专用部分(新功能模块) ▲基本型派生法:研制一种基本型,通过变型(某些零部件的附加、替换、再加工),构成派生型产品,以满足不同需求。 ▲组合法+基本型派生法 ?标准化、模块化对企业的价值 ●现代模块化设计方法——“设计规则” ▲“设计规则”包含模块的三要素。 ——模块“结构规则”:又称“划分规则”。确定构成系统的模块的轮廓(界线),即系统是由哪些模块组成的,它们是怎样发挥作用的。这实际上就是,系统分解(为模块)的规则、或系统要素组合(为模块)的规则。 ——模块间“接口规则”:规定模块如何相互作用,模块间的位置安排、联系,如何交换信息。通过“接口规则”,固化模块间接口特征。 ——模块“评定规则”:即系统集成与检测的规则。它是模块接口的检验、测定“标准”,以保证系统集成质量。 ▲设计规则的价值:把“由上而下”的设计原则,具体化为确立设计规则。即系统设计之前需首先确定设计规则;突出了“接口”(界面)在模块体系建设中的作用。 ?模块化产品开发模式 ●模块化设计特点:与整体式设计方法有原则上的区别 ▲面向产品族:一种模块能通用于多种产品。 ——传统设计:面向某一具体产品; ——模块化设计:是面向整个产品族系统。 ▲三个设计层次: ——模块化系统总体设计。 ——模块系统设计。 ——模块化产品设计。 ▲由上而下设计: ——传统设计:由下而上着眼于功能设计、详细设计。 ——模块化设计:首先着眼于产品族系统分解,由上而下建立通用模块体系,最后由模块组合构成的产品。

第5章_模块化程序设计

第5章模块化程序设计 5.1 简答题 (1)指令“CALL EBX”采用了指令的什么寻址方式? 寄存器间接寻址 (2)为什么MASM要求使用proc定义子程序? (这个问题不好回答,是不是作者写错了?我猜测可能的原因:在汇编语言中,函数、子程序等都称为过程,所以使用proc定义子程序) (3)为什么特别强调为子程序加上必要的注释? 便于程序员调用时使用,而不必关注子程序的内部实现。 (4)参数传递的“传值”和“传址”有什么区别? 传值是传递参数的拷贝,传址是传递参数的地址 (5)子程序采用堆栈传递参数,为什么要特别注意堆栈平衡问题? 保证正确返回;释放传递参数占用的堆栈空间,避免多次调用可能导致的堆栈溢出(6)INCLUDE语句和INCLUDELIB有什么区别? INCLUDE语句包含的是文本文件、是源程序文件的一部分;INCLUDELIB语句包含的是子程序库文件 (7)什么是子程序库? 子程序库就是子程序模块的集合,其中存放着各子程序的名称、目标代码以及有关定位信息,便于子程序的管理和调用 (8)调用宏时没有为形参提供实参会怎样? 缺少的实参,形参会做“空”处理。 (9)宏定义体中的标号为什么要用local为指令声明? 为了避免宏展开后出现标示符不唯一的情况,定义为局部。 (10)条件汇编不成立的语句会出现在可执行文件中吗? 不会。 5.2 判断题 (1)过程定义proc是一条处理器指令。 错,proc是伪指令 (2)CALL指令的执行并不影响堆栈指针ESP。 错,要改变,因为返回地址要压入堆栈 (3)call指令本身不能包含子程序的参数。 对。 (4) call指令用在调用程序中,如果被调用程序中也有call指令,说明出现了嵌套。 对。 (5)子程序需要保护寄存器,包括保护传递入口参数和出口参数的通用寄存器。 错,不能保护传递出口参数的寄存器 (6)利用INCLUDE包含的源文件实际上只是源程序的一部分。 对 (7)宏调用与子程序调用一样都要使用CALL指令实现。 错,宏调用是通过宏展开实现的调用,不用CALL指令 (8)宏定义与子程序一样一般书写与主程序之后。

(实验六)模块化(函数)程序设计

实验六模块化(函数)程序设计 一、实验目的 ●了解并掌握函数的定义方法 ●了解并掌握函数的调用方法 ●了解并掌握函数参数的单向传递 ●了解并掌握函数的递归调用 二、实验环境 ●个人计算机一台,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; }

相关主题
文本预览
相关文档 最新文档