logo资料库

C语言设计一元稀疏多项式课程设计+代码.docx

第1页 / 共25页
第2页 / 共25页
第3页 / 共25页
第4页 / 共25页
第5页 / 共25页
第6页 / 共25页
第7页 / 共25页
第8页 / 共25页
资料共25页,剩余部分请下载后查看
一、问题描述
二、 需求分析
三、概要设计
四、详细设计
五、 源代码
六 、程序测试
七、 使用说明
八、 课设总结
九、参考文献
学号 2016-2017 学年 第二学期 《网络工程》 课程设计报告 题 目 : 用 C 语言设计一元稀疏多项式 专 业 : 网络工程 班 级 : 姓 名 : 指导教师: 成 绩 :
《C 语言课程设计》课程实验报告 一、问题描述 ............................................................................................................................ 3 二、 需求分析 .......................................................................................................................... 3 三、概要设计 ............................................................................................................................ 4 四、详细设计 ............................................................................................................................ 5 五、 源代码.............................................................................................................................. 6 六 、程序测试 .......................................................................................................................... 6 七、 使用说明 ........................................................................................................................ 23 八、 课设总结 ........................................................................................................................ 24 第 2 页 共 23 页
《C 语言课程设计》课程实验报告 一、问题描述 1.1 基本要求 (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列:n,c1,e1, c2,e2,,,,,,, cn,en,其中 n 是多项式的项数,ci,ei,分别是第 i 项的系数和指数,序列按指数降序排序; (3)多项式 a 和 b 相加,建立多项式 a+b; (4)多项式 a 和 b 相减,建立多项式 a-b; (5)计算多项式在 x 处的值。 (6)计算器的仿真界面。 1.2 设计目的 数据结构是实践性很强的课程。课程设计是加强学生实践能力的一个 强有力手段。课程设计要求学生在完成程序设计的同时能够写出比较规范 的设计报告。严格实施课程设计这一环节,对于学生基本程序设计素养的 培养和软件工作者工作作风的训练,将起到显著的促进作用 二、 需求分析 2.1 设计开发环境: 软件方面:系统 windows 7 2.2 思路分析: ①一般情况下的一元 n 次多项式可写成 pn(x)=p1xe1+p2xe2+……+pmxem 其中,p1 是指数为 ei 的项的非零系数,且满足 0≦e1
《C 语言课程设计》课程实验报告 三、概要设计 菜单 输入 Insert( Polyn p,Poly n h) 乘法 Multip lyPoly n(ma, mb) 输出 deskto p() 加法 AddPo lyn(ma ,mb) 减法 Subtra ctPoly n(ma, mb) 除法 Device Polyn( ma,mb ) 求值 ValueP olyn( ma,x) 图 3-1 功能模块图 为实现上述程序功能,用带表头结点的单链表存储多项式。元素类型,节 点类型,和指针类型:typedef struct Polynomial{ int coe; //系数 int exp;//指数 第 4 页 共 23 页
《C 语言课程设计》课程实验报告 struct Polynomial *next; }*Polyn,Polynomial; 各个模块之间的调用如图 3-1 所示,调用 insert()函数将输入的多项式按 降幂排列,通过主函数 main()中 swith 语句,选择用户所选择的对应的 模块,然后又模块对应的功能函数对用户输入的数据进行相应的操作,最 后通过 desktop()模块将最后结果输出。 四、详细设计 开始运行 多项式加法计算器 输入多项式 求和(差) 求积、商 退出 建立2个多项式 多项式相加求和 (差) 多项式求积、商 关闭运行 输出求和(差) 结果 输出结果 按任意键退出 图 4-1 功能实现流程图 4.1 输入模块 用户可通过本模块来输入一个多项式,在每次输入一个多项式时,本 模块会先判断谁否是第一次输入,如果是,创建节点,如果不是则模块会 通过判断本次输入的数的指数与第一项输入的指数的大小,如果第一项的 第 5 页 共 23 页
《C 语言课程设计》课程实验报告 指数较大,则刚输入的这一项继续与第二项比较指数,以此类推,如果发 现刚输入的这一项的指数比比较的这一项的指数要大,则插入比较项的前 面。 4.2 求和、差模块 用户通过本模块可以实现两个多项式的求和或差值,此模块先调用输 入模块,进行对两个要运算的多项式进行初始化,并按降幂排列。然后将 两个多项式的幂进行一个对比,如果第一个数的第一项的系数大于第二个 多项式的第一个项的系数,那么直接将第一项赋值于刚开始创建的链表的 第一项,作为答案的最后一项,反之亦然,如果第一个数的第一项,与第 二个数的第一项的系数相同,那么将两个数的系数与指数分别相加或者相 减并将对应值赋值给答案相对应的项。以此类推。最后有输出模块输出最 后答案。 4.3 求积、商模块 用户可通过该模块实现两个多项式的相乘(相除),此模块先调用输 入模块,进行对两个要运算的多项式的初始化,并按降幂排列。然后将第 一个数的系数、指数与第二个数的系数、指数分别相乘(相除),相加(相 减),并且赋值给答案相应的系数、指数。完成后执行第一个数的第一项 与第二个数的第二项进行相应的操作…….执行完之后最后调用输出模块将 结果输出到屏幕上。 4.4 求值模块 用户可通过此模块实现多项式的求值,此模块调用输入模块,完成相 对应的操作,然后需要用户输入此时变量的值,并且将变量的值赋值给变 量,最后将答案通过输出模块输出到屏幕上。 #include #include #include #include #define maxlen 10 #define large 999 五、 源代码 第 6 页 共 23 页
《C 语言课程设计》课程实验报告 typedef struct Linklistomial{ float coef; int expn; struct Linklistomial *next; }Linklistomial,*Linklist; void Insert(Linklist p,Linklist h){ if(p->coef==0) free(p);//系数为 0 的话释放结点 else { Linklist 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; } } } } } } Linklist CreateLinklist(Linklist head,int m){ //建立一个头指针为 head、项数为 m 的一元多项式 int i; 第 7 页 共 23 页
《C 语言课程设计》课程实验报告 Linklist p; p=head=(Linklist)malloc(sizeof(struct Linklistomial)); head->next=NULL; for(i=0;icoef,&p->expn); Insert(p,head); //调用 Insert 函数插入结点 } } return head; void DestroyLinklist(Linklist p){ //销毁多项式 p Linklist q1,q2; q1=p->next; q2=q1->next; while(q1->next) { free(q1); q1=q2; q2=q2->next; } } void PrintLinklist(Linklist P){ Linklist q=P->next; int flag=1; //项数计数器 if(!q) { //若多项式为空,输出 0 putchar('0'); printf("\n"); return; } { while(q) if(q->coef>0&&flag!=1) putchar('+'); //系数大于 0 且不是第一项 if(q->coef!=1&&q->coef!=-1) { //系数非 1 或-1 的普通情况 printf("%g",q->coef); 第 8 页 共 23 页
分享到:
收藏