
第十二讲 C语言大作业设计思路
鹏程C语言教学网站 庆祝建站一周年 特别企划
本文技术支持网站:http://202.112.86.129
今天,我们来做C语言高级程序设计讲座的最后一讲,主要讲一下C语言大作业的设计思路。
当前,很多院校在C语言结课的时候都要求做一份大作业,作为考核的一部分,很多同学为此挠头,在这里我们将一些设计的思路,希望能给大家一点提示。
所谓大作业,其实质目的就是让学生在制作过程中体验这种设计思路,一般来说,思路有了,其他的就不在话下了。毕竟我们不是要求来做这种Windows之类的大型软件,Microsoft的精英开发了好几年,如果我们用C语言来做,恐怕也不是一朝一夕能完成的。我们要求学生能够设计出一个小型的游戏或者一个小型的数据库管理软件就很好了。
我们在设计之前,一般考虑以下几点:
1、问题定义
我们首先要知道应该做什么。
2、可行性分析
然后确定这个方案能否实施,不要做那种自己不可能完成的程序,“只有想不到,没有做不到”这句话以马克思主义哲学的观点来看是不成立的。
3、需求分析
如果这个方案可行,就要考虑这个程序需要实现什么功能。
4、系统设计
前面的都确定后,要设计出宏观的框架,例如主界面。
5、详细设计
详细的设计每一项功能。
6、编译并测试
一般来讲,我们提倡每完成一项内容都要编译测试。
7、运行维护
自己用自己的软件,用所有想到的错误操作来操作它,找出所有的内在BUG。
8、发布
如果你自己没有找到错误了,该软件就差不多可以交上去了,结合开发过程我们就可以写出论文来。
下面我们来介绍一个简单的人工智能程序。
初始化人机界面
/*exper_1.c*/
#include #include #include #define N 11 char *pre[]={ "p1 "p8 }; char *symptom[]={ "咳嗽流鼻涕怕冷打喷嚏痰多体温高血象偏高 "泛酸呕吐上腹隐痛食欲不振 }; main() { int i,j; FILE *fp; char answer; char midpre[N][5]; if((fp=fopen("c:\\\\bc\\\\bin\\\\pre.txt { printf("Can not open flie"); exit(0); } for(i=0;i printf("\\n你%s吗?\\n",symptom[i]); answer=strlwr(getch()); switch(answer) { case 'y': putchar(answer); fprintf(fp,"%s",pre[i]); fprintf(fp," "); break; case 'n': putchar(answer); break; } } fclose(fp); printf("\\n你的症状是:"); if((fp=fopen("c:\\\\bc\\\\bin\\\\pre.txt { printf("Can not open flie"); exit(0); } i=0; while(fscanf(fp,"%s",midpre[i])!=EOF) { for(j=0;j if(!strcmp(midpre[i],pre[j])) printf("%s ",symptom[j]); } } fclose(fp); printf("\\n按任意键返回\\n"); getch(); } 具体的实例程序 #include #include #include #include #define N 10 #define M 11 struct RL{ int rnum; int rpsum; char pre[N][5]; char res[5]; }; struct RL zrul[N]; char *pre[]={ "p1 "p8 }; char *symptom[]={ "咳嗽流鼻涕怕冷打喷嚏痰多体温高血象偏高 "泛酸呕吐上腹隐痛食欲不振 }; char *result[]={ "r1 }; char *diagnose[]={ "上感支气管炎胃炎" }; int have() { FILE *fp; int i,ri=-1,rs=0; char mstr[5]; char dstr[N][5]; if((fp=fopen("c:\\\\bc\\\\bin\\\\jingyan.txt { printf("Can not open flie"); exit(0); } while(fscanf(fp,"%s",mstr)!=EOF) { if((!strstr(mstr,"p"))&&(!strstr(mstr,"r"))) { ri++; zrul[ri].rnum=atoi(mstr); if(ri>0) { zrul[ri-1].rpsum=rs-1; for(i=0;i strcpy(zrul[ri-1].res,dstr[rs-1]); } rs=0; } else { strcpy(dstr[rs],mstr); rs++; } } zrul[ri].rpsum=rs-1; for(i=0;i strcpy(zrul[ri].res,dstr[rs-1]); fclose(fp); return(ri+1); } query(int n) { FILE *fp,*fpi; char lstr[N][5]; char mstr[5]; int i=0,j=0,k=0; int psum=0; int agrees=0; int m; if((fp=fopen("c:\\\\bc\\\\bin\\\\pre.txt { printf("Can not open flie"); exit(0); } if((fpi=fopen("c:\\\\bc\\\\bin\\\\reason.txt { printf("Can not open flie"); exit(0); } while(fscanf(fp,"%s",mstr)!=EOF) { strcpy(lstr[i],mstr); i++; } fclose(fp); psum=i; for(i=0;i if(zrul[i].rpsum==psum) { for(j=0;j for(k=0;k if(!strcmp(lstr[j],zrul[i].pre[k])) agrees++; } } if(agrees==zrul[i].rpsum) fprintf(fpi,"%s ",zrul[i].res); agrees=0; for(m=0;m<11;m++) { if(!strcmp(zrul[i].res,result[m])) printf("\\n对你的症状做出的诊断为:%s\\n",diagnose[m]); } } } fclose(fpi); } main() { int n; system("c:\\\\bc\\\\bin\\\\exper_1.exe"); n=have(); query(n); } 文本经验数据库 1 p1 p2 p3 p4 p5 p6 p7 r1 2 p1 p5 p6 r2 3 p8 p9 p10 p11 r3 大家可以通过对本例程的进一步完善使之成为一个专家系统,让自己的电脑成为家庭医生。 到这里,你是不是对C语言大作业的设计有了一定的思路了呢?我们这一讲就到这里了。 编后记 做这12讲的讲座,确实是一种很不寻常的经历,从8月1日到12日这12天,我几乎都是每天想着要做这件事,就算再晚,就算再有事情,也要完成,虽然水平有限,但是也力求把它做好。 从下载情况来看,这个讲座还是比较受欢迎的,这几天也经常有人来询问讲座的事情,我想这种有益的讲座我们今后还是要搞,而且要越搞越多。毕竟我们的网站要有自己的东西! 参考文献 1、《C高级实用程序设计》王士元编著,清华大学出版社,1996.3 2、《C语言程序设计实训》张高煜主编,中国水利水电出版社,2001.8 [声明]在学习本套讲座(共12讲)的过程中,请遵守以下协议: 1、讲座中难免有错误,请及时通知我们; 2、如果您发现其中某些内容含有侵权成分,请及时通知我们; 3、本套讲座仅限在鹏程C语言教学网站提供免费下载,转载一律视为侵权; 4、更不可把此讲座用于商业用途。
