C语言课程设计.docx

上传人:b****5 文档编号:12256445 上传时间:2023-04-17 格式:DOCX 页数:11 大小:149.75KB
下载 相关 举报
C语言课程设计.docx_第1页
第1页 / 共11页
C语言课程设计.docx_第2页
第2页 / 共11页
C语言课程设计.docx_第3页
第3页 / 共11页
C语言课程设计.docx_第4页
第4页 / 共11页
C语言课程设计.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

C语言课程设计.docx

《C语言课程设计.docx》由会员分享,可在线阅读,更多相关《C语言课程设计.docx(11页珍藏版)》请在冰豆网上搜索。

C语言课程设计.docx

C语言课程设计

二○一五~二○一六学年第二学期

信息科学与工程学院

软件综合设计报告书

课程名称:

C语言课程设计

班级:

学号:

姓名:

指导教师:

二○一六年六月

一、需求分析

用单链表实现任意两个一元多项式的加、减法运算

任务:

编程实现以下功能:

①分别输入一元多项式pn(x)和Qn(x)。

从键盘输入一元对项式中各项的系数和指数,并用单链表加以表示。

②分别对一元多项式pn(x)和Qn(x)进行升幂排序。

将一元多项式中各子项按照指数从小到大的顺序排序。

③分别输出一元多项式pn(x)和Qn(x)。

将用单链表表示的一元多项式输出,即打印多项式的系数和指数。

④任意输入一个实数x0,分别求出一元多项式pn(x0)和Qn(x0)的值。

⑤已知有两个一元多项式分别为Pn(x)和Qn(x),求出两个多项式的和

Rn(x)和差Tn(x),分别用单链表表示Rn(x)和Tn(x),并将二者输出,

(Rn(x)=Pn(x)+Qn(x),Tn(x)=Pn(x)-Qn(x))

⑥保存多项式,即分别将一元多项式pn(x)和Qn(x)各项的系数和指数保存到外部磁盘文件。

⑦由程序从所存文件中读出多项式的系数和指数,重新构建一元多项式Pn(x)和Qn(x),并可对其再次进行运算操作。

用户操作流程:

(1)进入菜单界面;

(2)根据提示输入对应功能数字,调用功能;

(3)根据提示输入参数;

(4)选择功能输出结果;

(5)退出。

二、概要设计

1、系统总体设计框架:

2、系统功能模块

(1)功能选择函数:

通过输入对应功能的数字,调用对应的函数进行多项式的运算。

(2)输入数据函数:

采用尾插法建立单链表并输入保存两个多项式的各项指数和系数。

(3)升幂函数:

通过冒泡排序法对两个多项式进行升幂排序。

(4)求和求差函数:

定义空链用来存储结果,将两个多项式相加减分别得到Rn(x)和Tn(x)。

(5)输出函数:

输出当前保存的多项式。

三、详细设计

创建一元多项式链表,链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。

对每一项的系数和指数进行相应的操作完成计算

1.定义结构体struct

使用typedef和struct定义的新类型名称,声明和初始化结构体变量;创建并根据自己的意愿初始化结构数组。

2.建立单链表并输入保存一元多项式各项的系数和指数。

单链表有两个域,data域和next域,一个是存放数据,一个是存放指针而且指向它的后继。

将表的最后一个结点的next置NULL,以示表的结束。

由于Pn(x)和Qn(x)的输入方式一样,所以在这里就只讨论Pn(x)的输入。

在输入系数和指数的时候,在最后输入0以示输入结束。

3.建立功能选择函数

通过switch来判断外界输入的数字,调用对应的函数

4.多项式相加减:

多项式相加的运算规则是:

两个多项式中所有指数相同的项的对应系数相加,若和不为零,则构成“和多项式”中的一项;所有指数不相同的的项均复抄到“和多项式”中。

以单链表作为存储结构,并且“和多项式”中的节点无需另外生成,则可看做是将多项式Q加到多项式P中,由此得到下列运算规则:

(设p、q分别是多项式Pn(x)和Qn(x)的一项,比较结点的指数项);

若p->expexp,则结点p所指的结点应是“和多项式”中的一项,令指针p后移。

若p->exp>q->exp,则结点q所指的结点应是“和多项式”中的一项,将结点q插入在结点p之前,且令指针q在原来的链表上后移。

若p->exp=q->exp,则将两个结点的系数相加,当和不为零是修改结点p的系数,释放q结点;若和为零,则“和多项式”中无此项,从P中p结点,同时释放p和q结点。

多项式相减运算规则同加法。

求和函数程序流程图:

求差函数程序流程图:

四、主要源程序代码

#include<>

#include<>

#include

typedefstructPloynode

{

intcoef;

intexp;

structPloynode*next;

}DXS;

intget()

{

intnum;

printf("输入选择功能对应的数字:

");

scanf("%d",&num);

returnnum;

}

voidfun1(DXS*PHEAD,DXS*QHEAD)

{

inte,c;lf\n",sum);

sum=0;

while(QHEAD->next!

=NULL)

{

QHEAD=QHEAD->next;

sum+=QHEAD->coef*pow(x0,QHEAD->exp);

}

printf("Q(x0)=%.0lf\n\n",sum);

}

voidfun3(DXS*PHEAD,DXS*QHEAD)别输入Pn(x)和Qn(x)。

\n");

printf("2.分别对Pn(x)和Qn(x)进行升幂排序。

\n");

printf("3.分别求出Pn(x)和Qn(x)的和差。

\n");

printf("4.任意输入一个实数x,分别求出一元多项式Pn(x)和Qn(x)的值。

\n");

printf("5.分别输出上一步运行结果的Pn(x)和Qn(x)。

\n");

printf("-----------------------------------------------\n");

printf("Ifyouwanttoexitthesystem,pleaseinput0.\n");}

intmain()

{

printf("Welcometothemenu~~\n");

menu();

intnum;

num=get();

if(num==0)

printf("\nExitthesystem,goodbye~~\n");

DXS*PHEAD,*QHEAD;

PHEAD=(DXS*)malloc(sizeof(DXS));

QHEAD=(DXS*)malloc(sizeof(DXS));

PHEAD->next=NULL;

QHEAD->next=NULL;

while(num)

{

switch(num)

{

case1:

fun1(PHEAD,QHEAD);break;

case2:

fun2(PHEAD,QHEAD);break;

case3:

fun3(PHEAD,QHEAD);break;

case4:

fun4(PHEAD,QHEAD);break;

case5:

fun5(PHEAD,QHEAD);break;

default:

printf("输入错误,请重新输入\n\n");

}

num=get();

if(num==0)

printf("\nExitthesystem,goodbye!

\n");

}

return0;

}

五、调试分析过程描述

1.进入菜单界面,调用功能1完成多项式的输入,再调用功能5显示结果。

2.调用功能2对多项式进行排序。

3.调用功能3计算Pn(x)、Qn(x)的和差Rn(x)和Tn(x)。

5.调用功能4计算当x=2时,多项式的值。

6.当Pn(x)和Qn(x)相减得到Tn(x)后,系数为0的项会直接去掉。

7.当输入其他数字比如0时,程序就会退出系统。

六、设计小结

通过这次课程设计实验,我学到了很多东西。

多项式在计算机里的存储样式并不像其在我们眼前那样直观,在计算机里,只需要多项式每一项的系数和指数就可以表示多项式了。

运行程序后,呈现在我们眼前的是简洁明了的界面,而这些画面都是由程序里的printf来输出的,从功能界面是看不到程序内部结构的。

当我输入不同的数字,内部的程序就会调用对应的函数得到想要的结果。

这次程序设计中,我只完成了前5个要求。

要求6和7设计的C语言内容我们还并未学过,虽然看了书,对fwrite函数和fread函数有了一定的了解,但很遗憾的是由于时间有限还是没能做出来。

在设计的过程中难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体。

通过这次课程设计之后,一定把以前所学过的知识重新温故。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1