课程名称: 指导教师: 姓名性别学号班级计科综合成绩成绩等级程序运行情况(占总成绩20%)□能正确运行 □基本能正确运行 □能运行但结果不完善(20分) (15分) (10分)程序功能的完善程度(占总成绩10%)□完善 □基本完善 □不完善(10分) (8分) (5分)程序结构的合理性(占总成绩10%)□合理 □基本合理 □不太合理(10分) (8分) (5分)对问题的答辩情况(占总成绩40%)□概念正确有创新 □能正确回答所有问题 □基本能正确回答(40分) (35分) (30分)□部分问题回答概念不清晰(20分)学生的工作态度与独立工作能力(占总成绩10%)□工作态度认真能独立完成任务 □工作态度认真但独立性较差(10分) (8分)□工作态度基本认真但缺乏独立性(5分)设计报告的规范性(占总成绩10%)□符合规范 □基本符合规范 □规范性较差(10分) (8分) (5分)优秀:90分~100分 良好:80分~89分 中等:70~79分 及格:60~69分 不及格0分~59分 武汉科技大学计算机科学与技术学院制表数据结构课程设计任务书 【设计目的】数据结构是计算机专业的核心课程,是一门实践性很强的课程。
课程设计是加强学生实践能力的一个强有力手段,要求学生掌握数据结构的应用、算法的编写、类C语言的算法转换成C(C++)程序并上机调试的基本方法,还要求学生在完成程序设计的同时能够写出比较规范的设计报告严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用设计要求】1、课程设计题目共二题,每个学生必须独立完成;2、课程设计时间为1.5周;3、设计语言C(C++)不限;4、课余时间完成源程序和课程设计报告等文档书写工作,上机时间只能做调试工作5、上机任务1)选择合适的数据结构,并定义数据结构的结构体;2)根据程序所要完成的基本要求,设计出完整的算法;3)设计出主程序(main函数),使其成为完整的程序6、上机时间:上午8:20~11:50,下午2:10~5:407、无论在校外、校内,都要严格遵守学校和所在单位的学习和劳动纪律、规章制度,学生有事离校必须请假课程设计期间,无故缺席按旷课处理;缺席时间达四分之一以上者,其成绩按不及格处理特别说明:数据结构、算法、输入输出方式、其他功能均可自行设计,鼓励思路创新课程设计一:一元多项式计算器1) 需求分析①设计一个一元多项式的计算器,功能包括(1)输入并建立多项式(一个多项式最多不超过20项),可以从文件中读取相关数据;(2)输出多项式,输出形式可以是图形方式,也可以是文本方式;(3)实现两个多项式相加,并输出和多项式;(4)实现两个多项式相减,并输出差多项式;(5)实现两个多项式相乘,并输出乘积多项式; (6)计算并输出多项式在指定x处的值。
②程序设计的任务:设计出一个一元多项式计算器,该计算器可以根据用户需求构建一元多项式并进行两个一元多项式之间的加、减和乘的运算,还可以根据用户指定的未知数的值计算单个一元多项式的值2)详细设计①数据及其数据结构的定义:typedef struct Polynomial//定义结构Node用于存储多项式每一项的数据{ float coef; //存储一个项的系数信息 int expn; //存储一个项的指数信息 struct Polynomial *next;//指向下一个结点}*Polyn,Polynomial;Node* head;//head为一元多项式链表的头指针bool flag1;//标识多项式中是否存在非正数的指数bool flag2;//标识多项式中是否存在非整数的指数②基本操作及伪码算法:Polyn CreatePolyn(Polyn head,int m){//建立一个头指针为head、项数为m的一元多项式 int i; Polyn p; p=head=(Polyn)malloc(sizeof(struct Polynomial)); head->next=NULL; for(i=0;icoef,&p->expn); Insert(p,head); //调用Insert函数插入结点 } return head;}----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------void Insert(Polyn p,Polyn h){ if(p->coef==0) free(p); //系数为0的话释放结点 else{ Polyn q1,q2; q1=h;q2=h->next; while(q2&&p->expnexpn){ //查找插入位置 q1=q2; q2=q2->next; } if(q2&&p->expn==q2->expn){ //将指数相同相合并 q2->coef+=p->coef; free(p); if(!q2->coef){ //系数为0的话释放结点 q1->next=q2->next; free(q2); } } else{ //指数为新时将结点插入 p->next=q2; q1->next=p; } }}----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Polyn AddPolyn(Polyn pa,Polyn pb){//求解并建立多项式a+b,返回其头指针 Polyn qa=pa->next; Polyn qb=pb->next; Polyn headc,hc,qc; hc=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点 hc->next=NULL; headc=hc; while(qa||qb){ qc=(Polyn)malloc(sizeof(struct Polynomial)); switch(compare(qa,qb)){ case 1: { qc->coef=qa->coef; qc->expn=qa->expn; qa=qa->next; break; } case 0: { qc->coef=qa->coef+qb->coef; qc->expn=qa->expn; qa=qa->next; qb=qb->next; break; } case -1: { qc->coef=qb->coef; qc->expn=qb->expn; qb=qb->next; break; } }//switch if(qc->coef!=0){ qc->next=hc->next; hc->next=qc; hc=qc; } else free(qc);//当相加系数为0时,释放该结点 }//while return headc;} 多项式减号的重载跟加号的重载类似,这里不再累述----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Polyn MultiplyPolyn(Polyn pa,Polyn pb){//求解并建立多项式a*b,返回其头指针 Polyn hf,pf; Polyn qa=pa->next; Polyn qb=pb->next; hf=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点 hf->next=NULL; for(;qa;qa=qa->next){ for(qb=pb->next;qb;qb=qb->next){ pf=(Polyn)malloc(sizeof(struct Polynomial)); pf->coef=qa->coef*qb->coef; pf->expn=qa->expn+qb->expn; Insert(pf,hf);//调用Insert函数以合并指数相同的项 } } return hf;}----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------③主程序及其主要模块的伪码流程int main(){ int m,n,flag=0; float x; Polyn pa=0,pb=0,pc,pd,pe,pf;//定。