C语言课程设计

发布 2022-09-30 19:10:28 阅读 7678

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

信息科学与工程学院。

软件综合设计报告书。

课程名称: c语言课程设计。

班级:学号:

姓名:指导教师:

二○一六年六月。

一、需求分析。

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

任务:编程实现以下功能:

分别输入一元多项式pn (x)和q n (x)。

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

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

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

分别输出一元多项式pn (x)和q n (x)。

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

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

已知有两个一元多项式分别为pn (x)和qn (x),求出两个多项式的和。

r n (x)和差t n (x),分别用单链表表示r n (x)和t n (x),并将二者输出,r n (x)=p n (x)+q n (x),t n (x)=p n (x)-q n (x))

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

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

用户操作流程:

1) 进入菜单界面;

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

3) 根据提示输入参数;

4) 选择功能输出结果;

5) 退出。

2、概要设计。

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

typedef struct ploynode

intcoef;

intexp;

struct ploynode *next;

dxs; intget()

intnum;

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

scanf("%d", num);

return num;

void fun1( dxs *phead, dxs *qhead )

int e, c;//定义指数系数。

printf("请输入p(x)中各项的系数和指数");

scanf("%d %d", c, &e);

while( c !=0 ||e !=0 ) 若c=0,则代表多项式的输入结束*/

dxs *p = dxs*) malloc(sizeof(dxs));申请新的结点。

p->coef = c;

p->exp = e

phead->next = p;/*在当前表尾做插入。

p->next = null; /将表的最后一个结点的next置null,以示表结束。

phead = phead->next

scanf("%d %d", c, &e);

printf("请输入q(x)中各项的系数和指数");

scanf("%d %d", c, &e);

while( c !=0 ||e !=0 ) 若c=0,则代表多项式的输入结束*/

dxs *p = dxs*) malloc(sizeof(dxs));申请新的结点。

p->coef = c

p->exp = e

qhead->next = p; /在当前表尾做插入。

p->next = null; /将表的最后一个结点的next置null,以示表结束*/

qhead = p

scanf("%d %d", c, &e);

printf("输入5显示结果");

void fun2( dxs *phead, dxs *qhead )/升幂排序。

dxs *p, *q;//链表的冒泡排序。

p = phead->next;

for( p; p !=null; p = p->next )

for( q = p->next; q !=null; q = q->next

if( p->exp> q->exp

int temp

temp = p->coef

p->coef = q->coef

q->coef = temp

temp = p->exp

p->exp = q->exp

q->exp = temp

p = qhead->next;

for( p; p !=null; p = p->next )

for( q = p->next; q !=null; q = q->next

if( p->exp> q->exp

int temp

temp = p->coef

p->coef = q->coef

q->coef = temp

temp = p->exp

p->exp = q->exp

q->exp = temp

printf("输入5显示结果。");

void fun5( dxs *phead, dxs *qhead )

printf("当前保存的p(x),q(x)序列如下:

printf("p(x

while( phead->next !=null )

phead = phead->next

printf("%dx^%d", phead->coef, phead->exp

if( phead->next !=null

printf

printf("");

printf("q(x

while( qhead->next !=null )

qhead = qhead->next

printf("%dx^%d", qhead->coef, qhead->exp);

C语言课程课程设计

课程设计报告。课程名称 c语言程序设计 系别 xxx 专业班级 xxx班 学号 xxxxxxxxxx 姓名 xxx 课程题目 10或100以内儿童加减乘除算术游戏。完成日期 2013.6.14 19 指导老师 xxx 2013年 6月 21日。附件 一 程序模块图。二 源程序。include inc...

C语言课程设计

目录。1 c语言程序课程设计教学大纲。2 c语言程序课程设计说明书。3 c语言程序课程设计报告 模板 4 c语言程序课程设计成绩评定表。xx xx学院。课程教学大纲。课程名称 c语言程序课程设计。适用专业 课程类别 专业基础课。制订时间 2010年11月 计算机科学与技术系制。c语言程序课程设计教学...

C语言课程设计

目录。1 c语言程序课程设计教学大纲。2 c语言程序课程设计说明书。3 c语言程序课程设计报告 模板 4 c语言程序课程设计成绩评定表。珠海学院。课程教学大纲。课程名称 c语言程序课程设计。适用专业 2010级计算机科学与技术系各专业。课程类别 专业基础课。制订时间 2010年11月 计算机科学与技...