模块化程序设计实例DOCWord文档格式.docx
- 文档编号:21992696
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:17
- 大小:19.43KB
模块化程序设计实例DOCWord文档格式.docx
《模块化程序设计实例DOCWord文档格式.docx》由会员分享,可在线阅读,更多相关《模块化程序设计实例DOCWord文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
采用方式
(2)的主程序如下。
#include<
stdio.h>
#defineSIZE10
voidmain()
{
intiscore[SIZE]={0};
intkey=-1;
intiresult=0;
floatfresult=0;
intistate=0;
printf(″1:
Inputscores;
\n″);
第9章模块化程序设计143
图9-6成绩管理软件主程序流程图
printf(″2:
Outputscores;
printf(″3:
Countforthemaxscore;
printf(″4:
Countfortheminimumscore;
printf(″5:
Countforthetotalscore;
printf(″6:
Countfortheaveragescore;
printf(″-1:
Exit.\n″);
while
(1)
printf(″Pleaseinputyourchoose:
″);
scanf(″%d″,&
key);
if(key==-1)
144程序设计基础
break;
switch(key)
case1:
istate=input_all_numbers(iscore,SIZE);
case2:
if(istate==0)
printf(″ERROR:
Youmustinputscoresfirst!
\n″);
else
output_all_numbers(iscore,SIZE);
case3:
iresult=count_for_max(iscore,SIZE);
printf(″themaxscoreis%d\n″,iresult);
}
case4:
iresult=count_for_min(iscore,SIZE);
printf(″theminscoreis%d\n″,iresult);
case5:
第9章模块化程序设计145
iresult=count_for_total(iscore,SIZE);
printf(″thetotalscoreis%d\n″,iresult);
case6:
fresult=count_for_average(iscore,SIZE);
printf(″theaveragescoreis%.2f\n″,fresult);
default:
Inputerror,pleaseinputagain!
5.编写算法
为程序结构图中每个模块编写算法。
在前面的学习中,已经学过如何加分,计算平均分,以及查找最高、最低分,在这里就不再画出流程图了。
6.审查算法
最后审查整个算法,直到没有任何逻辑错误。
7.编程调试
审查算法后,即可进行编程调试。
【例9-12】成绩管理软件的完整程序。
/*name:
amanagementsystemaboutscores*/
/*creat:
stone,2004/3/8*/
146程序设计基础
/*modify:
stone,2004/3/20*/
/*version:
1.0
#defineSIZE5/*定义成绩个数的符号常量*/
intinput_all_numbers(intiscore[],intisize);
voidoutput_all_numbers(intiscore[],intisize);
intcount_for_max(intiscore[],intisize);
intcount_for_min(intiscore[],intisize);
intcount_for_total(intiscore[],intisize);
floatcount_for_average(intiscore[],intisize);
/*用于区分是否已经输入数据的标志,0表示未输入,1表示已经输入*/
/*主菜单,可以选择完成不同的成绩统计功能*/
printf(″**********************************************\n″);
printf(″Thisisamanagementsystemaboutscores.\n\t\tWELCOME!
/*根据输入选择的不同,分别进行不同的处理*/
第9章模块化程序设计147if(key==-1)
case1:
case2:
Youmustinputscoresfirst!
case3:
case4:
case5:
148程序设计基础
case6:
/*功能:
输入学生成绩*/
intinput_all_numbers(intiscore[],intisize)
intiindex=0;
printf(″pleaseinput%dscores:
\n″,isize);
for(iindex=0;
iindex
iscore[iindex]);
return1;
输出学生成绩*/
第9章模块化程序设计149voidoutput_all_numbers(intiscore[],intisize)
printf(″iscore[%2d]=%3d\n″,iindex,iscore[iindex]);
计算最高分*/
intcount_for_max(intiscore[],intisize)
intimax=iscore[0];
if(imax<
ISCORE[IINDEX])<
p>
imax=iscore[iindex];
returnimax;
计算最低分*/
intcount_for_min(intiscore[],intisize)
intimin=iscore[0];
if(imin>
iscore[iindex])
imin=iscore[iindex];
returnimin;
150程序设计基础
计算总分*/
intcount_for_total(intiscore[],intisize)
intisum=0;
isum=isum+iscore[iindex];
returnisum;
计算平均分*/
floatcount_for_average(intiscore[],intisize)
floatfaverage=0;
faverage=faverage+iscore[iindex];
faverage=faverage/isize;
returnfaverage;
由于C语言中,常用的输入语句scanf()存在缺陷,在1.0版中,输入成绩时,如
果误按了字母键,则程序会出现异常。
为此,我们给出了一个改进版,通过自定义函
数intgetdigi(inticount)进行输入,从而解决了这个问题,提高了程序的稳定性和健
壮性。
这个主程序能够灵活处理不同的分支情况,可以作为C语言程序的一个基本
框架。
程序设计中不同的风格与经验,对程序的易用性和健壮性影响很大,要设计和编写出
成功的程序,需要更深入的学习,需要丰富的经验。
第9章模块化程序设计151【例9-13】成绩管理软件程序的改进版。
stone,2004/3/30*/
1.1
1.改进了输入时误按字符导致程序失效的问题
2.采用void型函数,简化主程序
3.采用功能键退出程序,符合常例*/
#include
#defineESC27/*使用功能键控制正常退出*/
#defineMAXdigit20/*定义数据的最大字符个数*/
intinput_all_score(intiscore[],intisize);
voidoutput_all_score(intiscore[],intisize);
voidcount_for_max(intiscore[],intisize);
voidcount_for_min(intiscore[],intisize);
voidcount_for_total(intiscore[],intisize);
voidcount_for_average(intiscore[],intisize);
intgetdigi(inticount);
charckey=′a′;
/*用于区分是否已经输入了数据的标志,0表示未输入,1表示已经输入*/
do
clrscr();
printf(″**********************************************\n″);
printf(″Thisisamanagementsystemaboutscores.\n\t\tWELCOME!
152程序设计基础
Countfortheaveragescore;
printf(″Esc:
Exitsystem.\n″);
printf(″Pleaseinputyourchoose(1-6):
/*根据输入的选择的不同,分别进行不同的处理*/
ckey=getch();
if(ckey==′1′)
istate=input_all_score(iscore,SIZE);
elseif((istate==0)&
&
(ckey!
=Esc))
printf(″\nERROR:
printf(″\nPressakeytocontinue.″);
getch();
elseif(ckey==′2′)
output_all_score(iscore,SIZE);
elseif(ckey==′3′)
count_for_max(iscore,SIZE);
elseif(ckey==′4′)
count_for_min(iscore,SIZE);
elseif(ckey==′5′)
count_for_total(iscore,SIZE);
elseif(ckey==′6′)
count_for_average(iscore,SIZE);
}while(ckey!
=Esc);
intinput_all_score(intiscore[],intisize)
第9章模块化程序设计153{
printf(″\npleaseinputthe%dscores:
″,iindex);
iscore[iindex]=getdigi(3);
voidoutput_all_score(intiscore[],intisize)
voidcount_for_max(intiscore[],intisize)
printf(″\nThemaxscoreis%d″,imax);
154程序设计基础
voidcount_for_min(intiscore[],intisize)
printf(″\nTheminscoreis%d″,imin);
voidcount_for_total(intiscore[],intisize)
printf(″\nThetotalscoreis%d″,isum);
voidcount_for_average(intiscore[],intisize)
第9章模块化程序设计155
printf(″\nTheaveragescoreis%.2f″,faverage);
/*function:
输入指定个数的数字,构成一个整形数据,可以用来代替scanf*/
getdigi()*/
stone,2004/3/25*/
stone,2004/3/26*/
/*parametric:
inticount,数字个数*/
/*return:
int,整形数字*/
intgetdigi(inticount)
intiloop=0;
chardigit_str[MAXdigit]={′0′};
iloop=0;
digit_str[iloop]=getch();
if(isdigit(digit_str[iloop]))
putch(digit_str[iloop]);
iloop++;
while(iloop<
ICOUNT);
<
returnatoi(digit_str);
156程序设计基础
双语精髓
Themainline
Sinceeachmoduleperformsasinglespecifictask,amainlineroutinemustprovide
themastercontrolthattiesallthemodulestogetherandcoordinatestheiractivity.This
programmainlineshouldshowthemainprocessingfunctions,andtheorderinwhich
theyaretobeperformed.Itshouldalsoshowtheflowofdataandthemajorcontrol
structures.Themainlineshouldalsobeeasytoread,beofmanageablelengthan
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模块化 程序设计 实例 DOC