【文档说明】C语言课件第14章.ppt,共(72)页,239.547 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44593.html
以下为本文档部分文字说明:
第14章C语言程序设计实例第14章C语言程序设计实例实例一成绩处理程序实例二电子词典程序实例三野人渡河程序第14章C语言程序设计实例实例一成绩处理程序1.问题描述进行若干个学生、若干门课程的成绩处理,要求计算:(1)每门课程的平均分和方差。(2)每个学生的总分、平均
分及方差。(3)按总分对学生由高分到低分排序。第14章C语言程序设计实例2.数据说明(1)学生人数假定不超过1000人,课程门数假定不超过30门,分别用符号常量N、M描述。(2)实际学生人数、实际课程门数分别用整型
量n、m描述。(3)M门课程名称用二维字符数组sname描述。(4)学生数据考虑学号num、姓名name、M门课程成绩,用结构体stt描述。M门课程成绩用一维数组score描述。N个学生数据用结构体数组sta描述。第14章C语言程序设计实例(5)每门课程的平均分和方差分别用一维实型数组av
s1、sus1描述。(6)每个学生的总分、平均分及方差分别用一维实型数组total、avs2和实型量sus2描述。(7)排序结果引入一序号数组sort保存。以上变量定义为全局变量,同时利用这些变量在函数之间传递数据。(8)数据
源文件、处理结果文件分别用字符指针变量ps、pt与文件指针变量fps、fpt描述。第14章C语言程序设计实例(9)引入中间整型变量i、j、k,i用于循环中控制学生,j用于循环中控制课程,k对应总分最高的学生序号。(10)数据源文件前面存放学生实际学生人数、实际课程门
数与课程名称;处理结果文件中学生数据增加总分、平均分及名次,课程的平均分和方差、学生的平均分和方差存放于文件的最后。第14章C语言程序设计实例3.算法分析(1)整个程序由主控模块main()、输入模块input()、每门课程的平均分和方差计算模块
asfun()、每个学生的平均分及方差计算模块tasfun()、排序模块sortfun()、输出模块output()六个模块组成。各模块之间顺序执行。(2)实际学生人数n、实际课程门数m、原始成绩数据由键盘输入或从磁盘数据文件读取。第14章C语言程序设计实例(3)原始成绩数据
由键盘输入时,将送磁盘文件SCORE.DAT保存。(4)方差计算公式为数据平方和的平均值减去数据平均值的平方。方差大,表示数据相互之间差别较大;方差小,表示数据相互之间差别较小。(5)排序采用选择排序方法,利用序号数组保存学生名次,无需
交换数据。(6)处理结果与原始成绩数据合并后用另一磁盘文件STUDEN.DAT保存。第14章C语言程序设计实例4.参考程序#include″stdio.h″#include″math.h″#defineN1000#defineM30voidinput();voidasfun();voidt
asfun();voidsortfun();voidoutput();第14章C语言程序设计实例intn,m;structstt{intnum;char*name;floatscore[M];}sta[N];charsname[M][16];floatavs1[M],s
vs1[M];floattotal[N],avs2[N],svs2;intsort[N];第14章C语言程序设计实例main()/*主控函数*/{clrscr();input();asfun();tasfun();sortfun();output();}第14章C语言程序设计实例voidin
put()/*获取数据*/{charch;inti,j;char*ps;FILE*fps;printf("请选择数据源(K—键盘输入F—磁盘文件读取):\n");ch=getch();switch(ch){case'K':/*数据从键盘输入*/
case'k':{printf("请输入实际学生人数:");scanf("%d",&n);printf("请输入实际课程门数:");第14章C语言程序设计实例scanf("%d",&m);if(n<=0||n>1000||
m<=0||m>30){printf("数据无效!");exit(0);}printf("请输入%d门课程名称:",m);for(j=0;j<m;j++)scanf("%s",sname[j]);for(i=0;i<n;i++){printf("请输入第%d个学生学号,姓名,%d门
课程成绩:",i+1,m);scanf("%d%s",&sta[i].num,sta[i].name);for(j=0;j<m;j++)scanf("%f",&sta[i].score[j]);}第14章C语言程序设计实例ps="SCORE.DAT";/*送磁盘
文件保存*/if((fps=fopen(ps,"wb"))==NULL){printf("文件建立错误!");exit(0);}fwrite(&n,2,1,fps);fwrite(&m,2,1,fps);fwrite(snam
e,16,m,fps);fwrite(sta,sizeof(structstt),n,fps);fclose(fps);break;}case'F':/*数据从磁盘文件读取*/case'f':第14章C语言程序设计实例{pri
ntf(“请输入数据文件名:”);scanf("%s",ps);if((fps=fopen(ps,"rb"))==NULL){printf("文件打开错误!");exit(0);}fread(&n,2,1,fps);fread(&m,2,1,fps)
;fread(sname,16,m,fps);fread(sta,sizeof(structstt),n,fps);fclose(fps);break;}第14章C语言程序设计实例defautl:{printf("数据源选择错误!
");exit(0);}}}voidasfun()/*计算每门课程的平均分和方差*/{intj;floatt[M],ts[M];for(j=0;j<m;j++){t[j]=0;ts[j]=0;for(i=0;i<n;i++)第14章C语言程序设计实例{t[j]+=sta[i]
.score[j];ts[j]+=sta[i].score[j]*sta[i].score[j];}avs1[j]=t[j]/n;sus1[j]=ts[j]/n-avs1[j]*avs1[j];}}voidtasfun()/*计算每个学生的总分、平均分和方差*/{inti,j;floatta=
0,ts=0;for(i=0;i<n;i++){total[i]=0;第14章C语言程序设计实例for(j=0;j<m;j++)total[i]+=sta[i].score[j];avs2[i]=tot
al[i]/n;ta+=avs2[i];ts+=avs2[i]*avs2[i];}sus2=ts/n?(ta/n)*(ta/n);}voidsortfun()/*按总分排序*/{inti,j,k;for(i=0;i<n
;i++){k=i;for(j=i+1;j<m;j++)if(total[j]>total[k])k=j;sort[i]=k+1;}}第14章C语言程序设计实例voidoutput()/*输出数据*/{inti,l,j;intis;char*pt;FILE
*fpt;clrscr();/*输出数据送屏幕*/printf("%d个学生%d门课程成绩数据如下:\n");printf("学号姓名");for(j=0;j<m;j++)printf("%16s",sname[j]);printf("|总分平均分名次\n");for(i=
0;i<n;i++){for(l=0;l<n;l++)第14章C语言程序设计实例if(sort[l]==i+1)is=l;printf("%8d%12s",sta[is].num,sta[is].name)
;for(j=0;j<m;j++)printf("%16.2f",sta[is].score[j]);printf("|%8.2f%8.2f%6d\n",total[is],avs2[is],sort[is]);}printf("课程平均分");for(j=0;j<m;j++)pr
intf("%16.2f",avs1[j]);printf("\n");printf("方差");for(j=0;j<m;j++)printf("%16.2f",sus1[j]);第14章C语言程序设计实例pri
ntf("%16.2\n",sus2);pt="STUDENT.DAT";/*输出数据送磁盘*/if((fpt=fopen(pt,"wb"))==NULL){printf("文件建立错误!");exit(0);}fwrite(&n,2,1,fpt);fwrite(&m,2,1,fpt);
fwrite(sname,16,m,fpt);for(i=0;i<n;i++){fwrite(&sta[i],sizeof(structstt),1,fpt);fwrite(&total[i],4,1,fpt);fwrite(&avs2[i],4,1,fpt);第1
4章C语言程序设计实例fwrite(&sort[i],2,1,fpt);}fwrite(avs1,4,m,fpt);fwrite(&sus2,4,1,fpt);fclose(fpt);}第14章C语言程序设计实例5.几点说明(1)数据源文件可用字处理软件直接建立。(2)程序的
实现可以不用数组,而用链表。(3)函数之间数据可改用参数传递。(4)处理结果还可考虑打印输出。(5)流程图请读者画出。(6)所做的数据与算法分析可转化成本程序的简单技术文档。第14章C语言程序设计实例实例二电子词典程序1.在计算机中建立有限规模的电子英汉词典(文件),利用程序实
现电子英汉词典的查找与增、删、改等维护。第14章C语言程序设计实例2.(1)对单词和释义字符串长度的限定分别为不超过20个与40个字符,词条数限定为不超过1000条。(2)单词数组words,字符串数组。释义数组expls,字符串数组。词典中词条
总数len,整型变量。(3)标志变量flag,在主函数中为0则执行菜单,为1则退出程序;在进入词典操作命令后,为1则继续执行同一命令,为0则退回到菜单。以上变量定义为全局变量。第14章C语言程序设计实例(4)命
令序号num,整型。在main()函数中用于散转执行对应操作。(5)一维字符数组(字符串)word在lookup()函数中为待查单词,在insert()函数中为r待插入单词,在delete()函数中为待删除单词,在modify()函数中为待修改单词,在display()函数
中为待显示单词。(6)一维字符数组(字符串)expl为待插入释义或待改成的释义。(7)在search1()和search2()中,正整数l,查找下限,形参;正整数r,查找上限,形参;正整数m,中点位置,计算得到。第14章C语言程序设计实例3.算法分析(1)执行该程序
要求在磁盘上有一个词典文件,可使用任何中文编辑软件生成。其内容是每行对应一个词条,每词条包括用若干空格符分开两个字符串,前一个是单词字符串(英文),后一个是释义字符串(中文),使用分号作为多个释义的分隔符(无空
格)。事实上,即使该文件内无一词条,也可用本程序在线生成所需词典,但必须有一个已存在的合乎上述格式的,哪怕是空白的文件。第14章C语言程序设计实例(2)采用菜单工作方式。在一个操作命令执行之后,程序询问是否继续执行该
命令。如输入y或Y,则重复同一操作,不退回到菜单;如输入其它信息,则回到菜单等待另一次选择。仅当选择退出操作时,程序会询问是否将修改后的词典存盘,并根据用户的选择存盘或不存盘退出。第14章C语言程序设计实例(3)除主函数之外,程序包含其它11个函数:input(file):从文件f
ile中读入词典各词条的单词和释义分别到字串数组words和expls中。对每个字符串长度进行检查,发现非法长度后会显示出错信息并退出程序。menu():显示控制菜单。lookup():查询一个单词的释义。insert():在词典中适当位置插入一个给定词条的单词和释义。
delete():从词典中删去一个词条的单词和释义。modify():修改词典中给定单词的释义。display():显示词典中在给定单词前后的部分词条的单词和释义。第14章C语言程序设计实例quit():在询问是否要存盘之后退
出程序。search1(l,r,word):在单词数组words的1~r位置中查找给定单词word的位置。查到,返回该位置;查不到返回-1。分别由lookup()、delete()、modify()和display()调用。search2(1,r,word):在单词数组words的1~r位置中查
找给定单词word的插入位置。查到,返回该位置;查不到,不必插入,返回-1。分别由insert()和display()调用。continue():询问用户是否继续执行词典的操作。除了退出,查询、插入、删除、修改、显示均调用该函数。第1
4章C语言程序设计实例4.参考程序#include″stdio.h″#include″string.h″#defineMAXLEN1000#defineSTRLEN120#defineSTRLEN240voidmenu();voidinput();voidlook
up();voidinsert();voiddelete();voidmodify();voiddisplay();voidquit();第14章C语言程序设计实例intsearch1();intsearch2()
;voidcontinue();char*words[MAXLEN],*expls[MAXLEN];intlen,flag=0;main()/*主控函数*/{char*file;intnum;printf(″请输入词典文件名:\n″
);scanf(″%s″,file);input(file);while(!flag){menu();第14章C语言程序设计实例scanf(″%d″,&num);switch(num){case1:lookup();break;case2:insert();break;case3:de
lete();break;case4:modify();break;case5:display();break;case6:qiut(file);break;default:printf(″选择错,按任一键返回菜单!″);getch();}}}第14章C语言程序设
计实例voidinput(file)/*读取词典*/charfile[];{inti;FILLE*fp;charstr[STRLEN1];if((fp=fopen(file,″r″))==NULL){printf(″不能打开文件%s!″,file);exit(0);}
i=0;fscanf(fp,″%s″,str);while(!feof(fp))第14章C语言程序设计实例{strcpy(words[i],str);fscanf(fp,″%s″,expls[i++]);fscanf(fp,″%s″,str);}len=i;fclose(fp);}voidme
nu()/*菜单*/{clrscr();printf(″电子词典程序\n″);printf(″\n\n1-单词查询\n″);printf(″2-增加词条\n″);第14章C语言程序设计实例printf(″3-删除词条\n″);printf(″4-修
改词条\n″);printf(″5-显示词条\n″);printf(″6-退出\n\n\n″);printf(″\n\n请选择(1~6)\n″);}voidlookup()/*查找单词释义*/{charword[STRLEN1];inti;flag=1;while(fl
ag){printf(″请输入查询单词:″);scanf(″%s″,word);i=search1(0,len-1,word);第14章C语言程序设计实例if(i==-1)printf(″无此单词!\n″);elseprintf(″%s
\n″,expls[i]);continue();}}voidinsert()/*插入*/{charword[STRLEN1],expl[STRLEN2];inti,j;flag=1;while(flag){printf(″请输入待插入的单词和释义:″
);scanf(″%s%s″,word,expl);第14章C语言程序设计实例i=search2(0,len,word);if(i==-1)printf(″已有此单词!\n″);else{for(j=len;j>i;j--){strcpy(words
[j],words[j-1]);strcpy(expls[j],expls[j-1]);}strcpy(words[i],word);strcpy(expls[i],expls);len++;}第14章C语
言程序设计实例continue();}}voiddelete()/*删除*/{charword[STRLEN1];inti,j;flag=1;while(flag){printf(″请输入待删除的单词:″);第14章C语言程序设计实例scanf(″%s″,word);i=search1(0,len
-1,word);if(i==-1)printf(″无此单词!\n″);else{for(j=i;j<len-1;j++){strcpy(words[j],words[j+1]);strcpy(expls[j],expls[j+1]);
}len--;}continue();}}第14章C语言程序设计实例voidmodify()/*修改*/{charword[STRLEN1],expl[STRLEN2];inti;flag=1;while(flag){printf(″请输入待修改的单词:″
);scanf(″%s″,word);i=search1(0,len-1,word);if(i==-1)printf(″无此单词!\n″);else{printf(″输入新释义:″);scanf(″%s
″,expl);第14章C语言程序设计实例strcpy(expls[i],expl);}continue();}}voidquit(file)/*退出*/charfile[];{inti;FILE*fp;charch;printf(″是否存入词典(Y/N)?″);第1
4章C语言程序设计实例ch=getch();if(ch==′Y′‖ch==′y′{if((fp=fopen(file,″w″))==NULL{printf(″不能打开文件%s!\n″,file);exit(0);}for(i=0;i<len;i++fprintf(fp,″%-20s%-40s
\n″,words[i],expls[i]);fclose(fp);}第14章C语言程序设计实例flag=1;}voiddisplay()/*显示*/{inti,i1,i2;charword[STRLEN1];flag=1;while(flag){printf(″请输入待显示的单词:″
);scanf(″%s″,word);i=search1(0,len-1,word);第14章C语言程序设计实例if(i==-1)i=search2(0,len,word);i1=i>=8?i-8:0;i2=i<=len-8?i+8:len-1;for(i=i1;i<=i2;i+
+)printf(″%-20s%-40s\n″,words[i],expls[i]);continue();}}intsearch1(1,r,word)/*查找单词位置*/intl,r;charword[];{intm;第14章C语言程序设计实例while(l<=r){
m=(l+r)/2;if(strcmp(word,words[m])==0)returnm;elseif(strcmp(word,words[m])>0)l=m+1;elser=m-1;}return(-1);}intsearch2(l,r,word)/*查找插入位置*/intl,r
;charword[];第14章C语言程序设计实例{intm;while(l<r){m=(l+r)/2;if(strcmp(word,words[m])==0)return(-1);elseif(strcmp(word,words[m])>0)l=m+1;elser=m;}
return(l);}第14章C语言程序设计实例voidcontinue()/*重复执行操作*/{charch;printf(″继续执行吗(Y/N)?″);ch=getch();if(ch==′Y′‖ch
=′y′)flag=1;elseflag=0;}第14章C语言程序设计实例5.说明(1)如果需增加单词及释义字串长度,应修改源程序中有关参数。(2)对单词除了释义外,还可增加发音、同义词、反义词等考虑。(3)流程图、简单技术文档亦请读者给
出。(4)延伸考虑电子新华字典程序。第14章C语言程序设计实例实例三野人渡河程序1.问题描述3个野人和3个传教士来到河边,打算乘一只船从右岸到左岸去。该船的负载能力为两人。在任何时候,如果野人人数超过传教士人数,野人就会把传教士吃掉。他们怎样才能用这条船安全地把所有人都渡过
河去呢?本问题是一个简单的人工智能问题,是个典型的状态图搜索问题。这个问题还可以拓展为m个野人和n个传教士,而船一次可以装下r个人的情况。第14章C语言程序设计实例2.参考程序#include<stdio.h>#include<stdlib.h>#defi
nemaxloop100//最大层数#definepristnum3//传教士默认值#defineslavenum3//野人默认值structSPQ{intsr,pr;//船运行一个来回后河右岸的野人、传教士的人数intsl
,pl;//船运行一个来回后河左岸的野人、传教士的人数intssr,spr;//回来(由左向右时)船上的人数intsst,spt;//去时(由右向左时)船上的人数intloop;//本结点所在的层数第14章C语言程序设计实例structSP
Q*upnode,*nextnode;//本结点的父结点和同层的下一个结点的地址}spq;intloopnum;//记录总的扩展次数intopenednum;//记录已扩展节点个数intunopenednum;//记录待扩展节点个数i
ntresultnum;structSPQ*opened;structSPQ*oend;structSPQ*unopened;structSPQ*uend;structSPQ*result;voidinitiate();voidreleasemem();第14章C语言程序设计实例void
showresult();voidaddtoopened(structSPQ*ntx);intsearch();voidgoon();intstretch(structSPQ*ntx);voidrecorder();voidmain(){intflag;//标记扩展是否成功for(;;){
initiate();flag=search();if(flag==1)第14章C语言程序设计实例{recorder();releasemem();showresult();goon();}else{printf("无法找到符合条件的解");releasemem();goon();}}}vo
idinitiate(){intx;charchoice;第14章C语言程序设计实例uend=unopened=(structSPQ*)malloc(sizeof(spq));if(uend==NULL){printf("\n内存不够!\n");exit(0);}unope
nednum=1;openednum=0;unopened->upnode=unopened;//保存父结点的地址以成链表unopened->nextnode=unopened;unopened->sr=slavenum;unopened->pr=pristnum;uno
pened->sl=0;unopened->pl=0;第14章C语言程序设计实例unopened->sst=0;unopened->spt=0;unopened->ssr=0;unopened->spr=0;unopened
->loop=0;printf("题目:设有n个传教士和m个野人来到河边,打算乘一只船从右岸到左岸去。\n");printf("该船的负载能力为两人。在任何时候,如果野人人数超过传教士人数,野人\n");printf("就会把传教
士吃掉。他们怎样才能用这条船安全地把所有人都渡过河去呢?\n");printf("\n默认的n、m值皆为3\n");for(;;)第14章C语言程序设计实例{printf("\n是否修改?(Y/N):");scanf("%s",&choic
e);choice=toupper(choice);if(choice=='Y'){printf("\n请输入传教士人数:");for(;;){scanf("%d",&x);if(x>0){unope
ned?>pr=x;break;}elseprintf("\n输入值应大于0!\n请重新输入");}第14章C语言程序设计实例printf("请输入野人人数:");for(;;){scanf("%d",&x);if(x>0){unopen
ed?>sr=x;break;}elseprintf("\n输入值应大于0!\n请重新输入");}break;}if(choice=='N')break;}}第14章C语言程序设计实例intsearch(){intflag;structSPQ*ntx;//提供将要扩展的结点的指针fo
r(;;){ntx=unopened;//从待扩展链表中提取最前面的一个if(ntx->loop==maxloop)return0;addtoopened(ntx);//将ntx加入已扩展链表,并将这个节点从待扩展链表中去掉flag=st
retch(ntx);//对ntx进行扩展,返回-1,0,1if(flag==1)return1;}}第14章C语言程序设计实例intstretch(structSPQ*ntx){intfsr,fpr;//在右岸上的人数intfsl
,fpl;//在左岸上的人数intsst,spt;//出发时在船上的人数intssr,spr;//返回时船上的人数structSPQ*newnode;for(sst=0;sst<=2;sst++)//讨论不同的可能性并判断是否符合条件{fsr=ntx->sr;fpr=ntx->pr;fs
l=ntx->sl;fpl=ntx->pl;if((sst<=fsr)&&((2-sst)<=fpr))//满足人数限制{spt=2-sst;fsr=fsr-sst;第14章C语言程序设计实例fpr=fpr-spt;if((fpr==0)&&(fsr==0))//搜索成功{newno
de=(structSPQ*)malloc(sizeof(spq));if(newnode==NULL){printf("\n内存不够!\n");exit(0);}newnode->upnode=ntx;//保存父结点的地址以成链表newnode->nextnode=NULL;ne
wnode->sr=0;newnode->pr=0;newnode->sl=opened?>sr;newnode->pl=opened?>pr;第14章C语言程序设计实例newnode->sst=sst;newnode->spt=spt;newnode->ssr=0;new
node->spr=0;newnode->loop=ntx?>loop+1;oend->nextnode=newnode;oend=newnode;openednum++;return1;}elseif((fpr-fsr)*fpr>=0
)//判断是否满足传教士人数大于或等于野人人数{fsl=fsl+sst;第14章C语言程序设计实例fpl=fpl+spt;for(ssr=0;ssr<=1;ssr++)//返回{intffsl,ffpl;if((ssr<=fsl
)&&((1-ssr)<=fpl)){spr=1-ssr;ffsl=fsl-ssr;ffpl=fpl-spr;if((ffpl-ffsl)*ffpl>=0)//若符合条件则分配内存并赋值{intffsr,ffpr;ffsr=fsr+ssr;ffpr=fpr+spr;newn
ode=(structSPQ*)malloc(sizeof(spq));if(newnode==NULL){printf("\n内存不够!\n");exit(0);}第14章C语言程序设计实例newnode->upnode=ntx;//保存父结点的地址newnode->sr=ff
sr;newnode->pr=ffpr;newnode->sl=ffsl;newnode->pl=ffpl;newnode->sst=sst;newnode->spt=spt;newnode->ssr=ssr;newnode->spr=spr;newnode->loop=ntx?
>loop+1;uend->nextnode=newnode;uend=newnode;unopenednum++;}}}}}}return0;}第14章C语言程序设计实例voidaddtoopened(
structSPQ*ntx){unopened=unopened?>nextnode;unopenednum??;if(openednum==0)oend=opened=ntx;oend?>nextnode=ntx;oend=ntx;openednum
++;}第14章C语言程序设计实例voidrecorder(){inti,loop;structSPQ*newnode;structSPQ*ntx;loop=oend?>loop;ntx=oend;resultnu
m=0;for(i=0;i<=loop;i++){newnode=(structSPQ*)malloc(sizeof(spq));if(newnode==NULL){printf("\n内存不够!\n");exit(0);}第14章C语言程序
设计实例newnode->sr=ntx->sr;ewnode->pr=ntx->pr;ewnode->sl=ntx->sl;ewnode->pl=ntx->pl;ewnode->sst=ntx->sst;ewno
de->spt=ntx->spt;ewnode->ssr=ntx->ssr;ewnode->spr=ntx->spr;ewnode->nextnode=NULL;tx=ntx->upnode;f(i=
=0)result=newnode;ewnode->nextnode=result;esult=newnode;esultnum++;}}第14章C语言程序设计实例voidreleasemem(){inti;structSPQ*nodefree;for(i=1;
i<openednum;i++){nodefree=opened;opened=opened?>nextnode;free(nodefree);}for(i=0;i<unopenednum;i++){nodefree=unopened;unopened=unopened?>next
node;free(nodefree);}}第14章C语言程序设计实例voidshowresult(){inti;intfsr,fpr;//在右岸上的人数intfsl,fpl;//在左岸上的人数structSPQ*nodefree;printf("\n");printf("%d个
传教士和%d个野人渡河:",result?>pr,result?>sr);for(i=1;i<resultnum;i++){nodefree=result;result=result?>nextnode;free(nodefree);prin
tf("\n\n\t左岸人数船上人数及方向右岸人数\n");第14章C语言程序设计实例printf("第%d轮\n",i);fpl=result->pl-result->spt+result->spr;fpr=result->p
r-result->spr;fsl=result->sl-result->sst+result->ssr;fsr=result->sr-result->ssr;printf("传教士%8d%8d\t<-\t%8d\n",fpl,result->spt,fpr);pr
intf("野人%8d%8d\t<-\t%8d\n",fsl,result->sst,fsr);printf("传教士%8d%8d\t->\t%8d\n",result->pl,result->spr
,result->pr-result->spr);printf("野人%8d%8d\t->\t%8d\n",result->sl,result->ssr,result->sr-result->ssr);}printf("\n全体传教士和野
人全部到达对岸!");free(result);}第14章C语言程序设计实例voidgoon(){charchoice;for(;;){printf("\n是否继续?(Y/N):");scanf("%s",&choice);choi
ce=toupper(choice);if(choice=='Y')break;if(choice=='N')exit(0);}}第14章C语言程序设计实例3.运行结果图14-1野人渡河问题的解答第14章C语言程序设计实例4.数据与算法分析本
题的数据与算法分析以及问题拓展后的情况,请读者基于上面的程序,作为本章的练习去完成。