1.数据结构课程设计的需求分析怎么写

2.数据结构课程设计报告(一元多项式的计算)

数据结构课程设计的需求分析怎么写

旅游线路设计及分析报告-旅游路线规划数据结构程序设计报告

一 需求分析:

在该部分中根据设计题目的要求,充分地分析和理解问题,叙述系统的功能要求,明确问题要求做什么?以及限制条件是什么?

1.1问题描述

1.2基本要求

(1) 输入的形式和输入值的范围;

(2) 输出的形式;

(3) 程序所能达到的功能;

二 概要设计

说明本程序中用到的所有抽象数据类型的定义。主程序的流程以及各程序模块之间的层次(调用)关系。

1、 数据结构

2、 程序模块

3、各模块之间的调用关系以及算法设计

三 详细设计

实现概要设计中定义的所有数据类型,对每个操作写出伪码算法;对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);写出出函数和过程的调用关系.

四 测试与分析

测试数据,输出测试的结果,这里的测试数据应该完整和严格。并对结果进行分析。

五 总结

总结可以包括 : 课程设计过程的收获、遇到问题、遇到问题解决问题过程的思考、程序调试能力的思考、对数据结构这门课程的思考、在课程设计过程中对《数据结构》课程的认识等内容。

数据结构课程设计报告(一元多项式的计算)

问题描述

编程实现一元多项式的加法计算。

基本要求

能用链表实现一元多项式的加法计算,并能打印出计算结果。

所需知识

(1)基本编程方法和程序设计知识。

(2)链表的理解和运算与运用。

所用算法

遍历算法和递归算法。

操作平台

Visual C++

#include<stdio.h>

#include<graphics.h>

#define MAX 100

typedef struct polynode

{ float coef;

int expn;

struct polynode *next;

}node;

node * create(void) /*指针函数,返回指针类型;用尾插法建立一元多项式的链表的函数*/

{

node *h,*r,*s;

float c;

int e;

h=(node *)malloc(sizeof(node)); /*建立多项式的头结点,为头结点分配存储空间*/

r=h; /*r指针始终动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/

printf("coef:");

scanf("%f",&c); /*输入系数*/

printf("expn: ");

scanf("%d",&e); /*输入指数*/

while(c!=0.0) /*输入系数为0时,表示多项式的输入结束*/

{

s=(node *)malloc(sizeof(node)); /*申请新结点*/

s->coef=c; /*申请新结点后赋值*/

s->expn=e; /*申请新结点后赋值*/

r->next=s; /*做尾插,插入新结点*/

r=s; /*r始终指向单链表的表尾*/

printf("coef:");

scanf("%f",&c);

printf("expn: ");

scanf("%d",&e);

}

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

return(h);

}

void polyadd(node *pa, node *pb) /*一元多项式相加函数,用于将两个多项式相加,

然后将和多项式存放在多项式pa中,并将多项式pb删除*/

{

node *p,*q,*pre,*temp;

int sum;

p=pa->next; /*令p和q分别指向pa和pb多项式链表中的第一个结点*/

q=pb->next;

pre=pa; /*位置指针,指向和多项式pa*/

while(p!=NULL&&q!=NULL) /*当两个多项式均未扫描结束时,执行以下操作*/

{

if(p->expn<q->expn) /*若p指向的多项式指数小于q指的指数*/

{

pre->next=p; /*将p结点加入到和多项式中*/

pre=pre->next;

p=p->next;

}

if(p->expn==q->expn) /*若指数相等,则相应的系数相加*/

{

sum=p->coef+q->coef;

if(sum!=0)

{

p->coef=sum;

pre->next=p;pre=pre->next;p=p->next;

temp=q;q=q->next;free(temp);

}

else /*如果系数和为零,则删除结点p与q,并将指针指向下一个结点*/

{

temp=p->next;free(p);p=temp;

temp=q->next;free(q);q=temp;

}

}

if (q->expn<p->expn)

{

pre->next=q; /*将q结点加入到和多项式中*/

pre=pre->next;

q=q->next;

}

}

if(p!=NULL) /*多项式A中还有剩余,则将剩余的结点加入到和多项式中*/

pre->next=p;

else /*否则将B的结点加入到和多项式中*/

pre->next=q;

}

void print(node * p) /*输出函数,打印出一元多项式*/

{

while(p->next!=NULL)

{

p=p->next;

printf(" %f*x^%d",p->coef,p->expn);

}

}

void calculate() /*给多项式赋值并计算*/

{ float cal=1.0,mid=0.0,las;

int j;

float num, x;

int i=0;

float later=0.0;

int e[MAX];float c[MAX];

printf("Please input num:"); /*输入常数的值*/

scanf("%f",&num);

printf("Please input x:"); /*输入未知数X的值*/

scanf("%f",&x);

printf("Please input e[0]:"); /*输入数组的初值以判断是否循环*/

scanf("%d",&e[0]);

printf("Please input c[0]:");

scanf("%f",&c[0]);

while(e[i]!=0 && c[i]!=0.0 ) /*此循环用于多项式的计算*/

{ cal=1;

for(j=0;j<e[i];j++) /*表示出X的几次方*/

{

cal=cal*x;

}

i++;

mid=cal*c[i-1]; /*表示出单项*/

later+=mid;

printf("Please input e[%d] and c[%d] :",i,i);

scanf("%d%f",&e[i],&c[i]);

}

las=later+num; /*表示出完整的多项式*/

printf("The Result is :\n");

printf("%f",las); /*最终的计算结果*/

sleep(3);

}

void main()

{

node * pa,* pb,*pc,*p,*q,*pre;

int driver=VGA,mode=VGAHI;

initgraph(&driver,&mode,"c:\\tc ");

setbkcolor(BLUE);

setcolor(RED);

printf("Welcome,Let's go!\n");

printf("Next, you will see the process of computing !");

printf("\nPlease input the coef and expn of pa:\n");

pa=create(); /*调用建立链表函数,创建多项式A*/

print(pa);

printf("\nPlease input the coef and expn of pb:\n");

pb=create(); /*同理,创建B*/

print(pb);

p=pa->next; /*以下代码用于排序*/

pa->next=NULL;

while(p!=NULL)

{

if(pa->next==NULL)

{

pa->next=p;p=p->next;

pa->next->next=NULL;

}

else

{ pre=pa;q=pre->next;

while(q!=NULL && p->expn>q->expn)

{

pre=q;q=q->next;

}

q=p->next;

p->next=pre->next;

pre->next=p;

p=q;

}

}

printf("\nthe first ordered one:\n");print(pa); /*输出排序后的pa*/

p=pb->next; /*以下代码用于给pb排序*/

pb->next=NULL;

while(p!=NULL)

{

if(pb->next==NULL)

{

pb->next=p;p=p->next;

pb->next->next=NULL;

}

else

{ pre=pb;q=pre->next;

while(q!=NULL && p->expn>q->expn)

{

pre=q;q=q->next;

}

q=p->next;

p->next=pre->next;

pre->next=p;

p=q;

}

}

printf("\nthe second ordered one:\n");print(pb); /*输出排序后的pb*/

printf("\nSum of the polys is:\n");

polyadd(pa,pb); /*调用一元多项式相加函数*/

print(pa); /*调用输出函数,打印结果*/

printf("\n");

setbkcolor(RED);

calculate(); /*调用计算多项式值的函数*/

}

编后总结

本程序在逻辑设计,详细设计,程序编码和程序调试阶段时本来都城有设计se()保存函数,和load()下载函数,分别用来保存创建的多项式,和下载其它需计算的多项式数据,这样这个系统才能更加实用,void createadj()原来的函数原型为arcnode *createdj()函数中用链表结构把adjmatrix[][]的数据都保存其中,这样就能实现数据的保存,但随之要把Dijkstra中的adjmatrix[][]转换成用arcnode 指针的形式进行表示,因为只有这样,下载后的数据才能使用。但在最后的调试阶段中,发现dijkstra无法运行,但又苦于无法用se()函数保存adjmatrix[][],最后只放弃se()和load()函数,在 main()主函数中初始化该算式。从这次程序设计中我看到自己的不足之处,今后要更努力的学习和掌握好数据结构程序设计的知识。