数据结构课程设计(C语言版) 一元稀疏多项式的运算

作者&投稿:盛罡 (若有异议请与网页底部的电邮联系)
数据结构课程设计(严蔚敏版) 一元稀疏多项式计算器~

我刚做的课程设计,完全符合你的要求,老师给我打了A+,包你满意!!!

//头文件
#include
#include
#include

//定义多项式的项
typedef struct Polynomial{
float coef;
int expn;
struct Polynomial *next;
}*Polyn,Polynomial;

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 CreatePolyn(Polyn head,int m){
//建立一个头指针为head、项数为m的一元多项式
int i;
Polyn p;
p=head=(Polyn)malloc(sizeof(struct Polynomial));
head->next=NULL;
for(i=0;i<m;i++)
{
p=(Polyn)malloc(sizeof(struct Polynomial));//建立新结点以接收数据
printf("请输入第%d项的系数与指数:",i+1);
scanf("%f %d",&p->coef,&p->expn);
Insert(p,head); //调用Insert函数插入结点
}
return head;
}

void DestroyPolyn(Polyn p){
//销毁多项式p
Polyn q1,q2;
q1=p->next;
q2=q1->next;
while(q1->next)
{
free(q1);
q1=q2;
q2=q2->next;
}
}

void PrintPolyn(Polyn P){
Polyn q=P->next;
int flag=1;//项数计数器
if(!q)
{ //若多项式为空,输出0
putchar('0');
printf("
");
return;
}
while(q)
{
if(q->coef>0&&flag!=1) putchar('+'); //系数大于0且不是第一项
if(q->coef!=1&&q->coef!=-1)
{//系数非1或-1的普通情况
printf("%g",q->coef);
if(q->expn==1) putchar('X');
else if(q->expn) printf("X^%d",q->expn);
}
else
{
if(q->coef==1)
{
if(!q->expn) putchar('1');
else if(q->expn==1) putchar('X');
else printf("X^%d",q->expn);
}
if(q->coef==-1)
{
if(!q->expn) printf("-1");
else if(q->expn==1) printf("-X");
else printf("-X^%d",q->expn);
}
}
q=q->next;
flag++;
}
printf("
");
}

int compare(Polyn a,Polyn b){
if(a&&b)
{
if(!b||a->expn>b->expn) return 1;
else if(!a||a->expnexpn) return -1;
else return 0;
}
else if(!a&&b) return -1;//a多项式已空,但b多项式非空
else return 1;//b多项式已空,但a多项式非空
}

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;
}
}
if(qc->coef!=0)
{
qc->next=hc->next;
hc->next=qc;
hc=qc;
}
else free(qc);//当相加系数为0时,释放该结点
}
return headc;
}

Polyn SubtractPolyn(Polyn pa,Polyn pb){//求解并建立多项式a-b,返回其头指针
Polyn h=pb;
Polyn p=pb->next;
Polyn pd;
while(p)
{ //将pb的系数取反
p->coef*=-1;
p=p->next;
}
pd=AddPolyn(pa,h);
for(p=h->next;p;p=p->next) //恢复pb的系数
p->coef*=-1;
return pd;
}

int ValuePolyn(Polyn head,int x){
//输入x值,计算并返回多项式的值
Polyn p;
int i;
int sum=0,t;
for(p=head->next;p;p=p->next)
{
t=1;
for(i=p->expn;i!=0;)
{
if(i<0){t/=x;i++;}//指数小于0,进行除法
else{t*=x;i--;}//指数大于0,进行乘法
}
sum+=p->coef*t;
}
return sum;
}

Polyn Derivative(Polyn head){
//求解并建立导函数多项式,并返回其头指针
Polyn q=head->next,p1,p2,hd;
hd=p1=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点
hd->next=NULL;
while(q)
{
if(q->expn!=0)
{ //该项不是常数项时
p2=(Polyn)malloc(sizeof(struct Polynomial));
p2->coef=q->coef*q->expn;
p2->expn=q->expn-1;
p2->next=p1->next;//连接结点
p1->next=p2;
p1=p2;
}
q=q->next;
}
return hd;
}

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;
}

void main()
{
int m,n,a,x;
char flag;
Polyn pa=0,pb=0,pc;

printf(" 欢迎使用多项式操作程序

");
printf("请输入a的项数:");
scanf("%d",&m);
pa=CreatePolyn(pa,m);//建立多项式a
printf("请输入b的项数:");
scanf("%d",&n);
pb=CreatePolyn(pb,n);//建立多项式b

//输出菜单
printf(" *******************************************************
");
printf(" * 多项式操作程序 *
");
printf(" * *
");
printf(" * A:输出多项式 B:输出多项式b *
");
printf(" * *
");
printf(" * C:输出a的导数 D:输出b的导数 *
");
printf(" * *
");
printf(" * E:代入x的值计算a F:代入x的值计算b *
");
printf(" * *
");
printf(" * G:输出a+b H:输出a-b *
");
printf(" * *
");
printf(" * I:输出a*b J:退出程序 *
");
printf(" * *
");
printf(" *******************************************************
");

while(a)
{
printf("
请选择操作:");
scanf(" %c",&flag);//空格符号一定要注意
switch(flag)
{

case'A':
case'a':
{
printf("
多项式a=");
PrintPolyn(pa);
break;
}
case'B':
case'b':
{
printf("
多项式b=");
PrintPolyn(pb);
break;
}
case'C':
case'c':
{
pc=Derivative(pa);
printf("
多项式a的导函数为:a'=");
PrintPolyn(pc);
break;
}
case'D':
case'd':
{
pc=Derivative(pb);
printf("
多项式b的导函数为:b'=");
PrintPolyn(pc);
break;
}
case'E':
case'e':
{
printf("输入x的值:x=");
scanf("%d",&x);
printf("
x=%d时,a=%d
",x,ValuePolyn(pa,x));
break;
}
case'F':
case'f':
{
printf("输入x的值:x=");
scanf("%d",&x);
printf("
x=%d时,b=%d
",x,ValuePolyn(pb,x));
break;
}
case'G':
case'g':
{
pc=AddPolyn(pa,pb);
printf("
a+b=");
PrintPolyn(pc);
break;
}
case'H':
case'h':
{
pc=SubtractPolyn(pa,pb);
printf("
a-b=");
PrintPolyn(pc);
break;
}
case'I':
case'i':
{
pc=MultiplyPolyn(pa,pb);
printf("
a*b=");
PrintPolyn(pc);
break;
}
case'J':
case'j':
{
printf("
感谢使用此程序!
");
DestroyPolyn(pa);
DestroyPolyn(pb);
a=0;
break;
}
default:
printf("
您的选择错误,请重新选择!
");
}
}
}

#include #include #include #include using namespace std; typedef struct Polynode { float coef; //系数 int exp; //指数 }*Poly,Polynode; //Poly为指针类型 int n,m;//全局变量 void Sort(Poly &p,int l)//按指数的升序排序 { int i,j,small; Polynode temp; for(i=0;ia[i].exp; } cout>b[i].exp; } Sort(a,n); Sort(b,m); } void OutputList(Poly a,int l)//输出多项式 { int flag=1,i,k=0;//项数计数器 if(l==0) //若多项式为空,输出0 { printf("0
"); } for(i=0;i0&&flag!=1) //系数大于0且不是第一项 printf("+"); if(a[i].coef!=1&&a[i].coef!=-1)//系数非1或-1的普通情况,-+1要特别处理 { cout

⑵ 输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。序列按指数降序排列;
⑶ 多项式A和B相加,建立多项式A+B,输出相加的多项式;
⑷ 多项式A和B相减,建立多项式A-B,输出相减的多项式;
⑸ 设计一个菜单,上述操作要求的基本功能。

数据关系:R=约定a1为栈底,an 为栈顶。基本操作:Push(&s,e)
初始条件:栈s已经存在。
操作结果:插入元素e为新的栈顶元素
Pop(&s,&e)
初始条件:栈s已经存在且非空。
操作结果:删除s的栈顶元素,并用e返回其值


C语言课程设计 题目11:基于结构体数组的学生成绩管理系统
include \/*引用库函数*\/ include include include typedef struct \/*定义结构体数组*\/ { char num[10]; \/*学号*\/ char name[20]; \/*姓名*\/ int score; \/*成绩*\/ }Student;Student stu[80]; \/*结构体数组变量*\/ int menu_select() \/*菜单函数*\/ { char c;do{ system("cls"); \/*...

求数据结构 课程设计 背单词程序 C++
我刚写了个。。你看看符合不符合:include<iostream.h> include<stdlib.h> include<string.h> char a[1005];char b[1005];void cxjg(){ cout<<"***"<<endl;cout<<"正确 单词:"<<a<<endl;cout<<"输入的单词:"<<b<<endl;if(strcmp(a,b)==0)cout<<"you are all right!"<<endl...

c语言课程设计
我要一个完整的课程设计,三选一即可,等我那号分转过来,再加200,内容如下:1、学生成绩管理(结构体数组、函数、指针、算法、流程结构及文件等的综合应用)程序说明:有N个学生,每... 我要一个完整的课程设计,三选一即可,等我那号分转过来,再加200,内容如下:1、学生成绩管理(结构体数组、函数、指针、算法、...

C语言课程设计
C语言课程设计 75 简易通讯录使用单链表建立一个简易通讯录,要求:(1)每条记录包含姓名、电话,建立该存贮结构;(2)查找指定姓名的结点,若找到,返回该姓名的电话;(3)在指定姓名的结点之前插入... 简易通讯录使用单链表建立一个简易通讯录,要求:(1)每条记录包含姓名、电话,建立该存贮结构;(2)查找指定姓名的结点...

数据结构课程设计
这个是程序:include "string.h"define NULL 0 unsigned int key;unsigned int key2;int *p;struct node { char name[20],address[20];char num[11];struct node *next;} phone;nam;address;typedef struct node *pnode;typedef struct node *mingzi;void hash(char num[11]){ int i = 3;...

《数据结构 课程设计》表达式求值 实验报告
算术表达式求值演示 一、概述 数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。在这次的课程设计中我选择的题目是算术表达式求值演示...

C语言课程设计,贪吃蛇应该怎么做?
2.2.3程序结构(流程图) 图2.1流程图 依据所需要处理的任务要求,规划输入数据和输出结果,决定存放数据的数据结构。 C语言中数据结构集中体现在数据类型上,因此在进行C语言程序设计时,应统筹规划程序中所使用的变量,数组,指针等,以及它们的类型等。这点是很重要的,如果在此期间选择不合适的变量或者数组,将来修改就十...

关于C语言的课程设计,急呀,请各位大虾帮帮忙啊,都快哭死了
关于C语言的课程设计,急呀,请各位大虾帮帮忙啊,都快哭死了 学生成绩管理系统设计学生成绩信息包括:学号,姓名,三门课程成绩(语文、数学、英语)、总分。主要功能:1、学生信息录入功能(学生信息用文件保存)--输入;2、计算每个同学的总分... 学生成绩管理系统设计学生成绩信息包括:学号,姓名,三门课程成绩(语文、...

数据结构课程设计 问题是:给出n个学生的m门成绩,每个学生的信息由学号...
nSumChinese = 0; nSumMath = 0; nSumEnglish = 0; } void PrintAll(); void PrintAveChinese(); void PrintAveMath(); void PrintAveEnglish(); friend void Print(CStudent student); }; void CStudent::PrintAll() { cout<<"学号\\t"<<"姓名\\t"<<"语文\\t"<<"数学\\t"<<"英语...

c语言程序设计教程答案c语言程序设计练习题
c语言程序设计教程答案,c语言程序设计练习题很多人还不知道,现在让我们一起来看看吧! c语言程序设计练习题 篇一:c语言程序设计基础单元总结与练习题及答案 《C语言程序设计》单元总结与练习题 答案 单元一 程序设计宏观认识 单元总结提升 本单元中,核心内容有C语言程序框架结构、程序的构成和程序开发过程。通过本单元...

蓬江区17087459492: 数据结构课程设计(C语言版) 一元稀疏多项式的运算 -
木变利福: 数据关系:R=约定a1为栈底,an 为栈顶.基本操作:Push(&s,e) 初始条件:栈s已经存在.操作结果:插入元素e为新的栈顶元素 Pop(&s,&e) 初始条件:栈s已经存在且非空. 操作结果:删除s的栈顶元素,并用e返回其值

蓬江区17087459492: 用数据结构(C语言版)实现一元多项式的表示及相加 -
木变利福: 每个项用一个结点来表示,每个结点包含两个成员,分别表示该项的系数和次数.如果是用链表来实现线性表,那么结点还要包含next成员.此题最好用链表来实现.表示多项式,最好按照习惯,以次数的降序来排列各项.相加时,就是将其中一个链表的各结点保持降序,依次插入另一个链表.如果遇到次数相同的,就合并.如果合并后系数为0,则删除该结点.

蓬江区17087459492: 设计一个一元多项式简单的计算器(数据结构C语言版)急 -
木变利福: 除以上功能外,还有乘法和除法的计算和导数计算呢.这是我以前做的数据结构课程设计.希望能帮上你的忙.#include<stdio.h>#include<malloc.h> typedef struct Polynomial{ float coef; int expn; struct Polynomial *next; }*Polyn,Polynomial; //Polyn...

蓬江区17087459492: 数据结构(c语言)一元多项式的相加 -
木变利福: #include<stdio.h>#include<stdlib.h>#include<conio.h>#include<math.h>#include<malloc.h> typedef struct polynode { float coef; int exp; struct polynode *next; }NODE; printpoly(NODE*); NODE *createpoly(int); NODE *polyadd(NODE*,NODE*); int ...

蓬江区17087459492: 数据结构 一元多项式相乘的代码? -
木变利福: 这是数组实现,别人写的. #include void Mul(int a[],int b[],int w) {int shi[40]; int q,k,p,l; for ( k=0;k=0;q--) {for( p=w;p>=0;p--) { shi[q+p]=shi[q+p]+a[q]*b[p]; } } printf("\nP(x)*Q(x) = "); for( l=2*w;l>=0;l--) { printf("%dX^%d + ",shi[l],l); } printf("0\n"); } ...

蓬江区17087459492: 数据结构课程设计(C语言) -
木变利福: 我这个和你要的差不多吧,,我做实验用的..笔视收费#include <iostream> #include <string.h> #include <string> //字符串操作 #include <iomanip> using namespace std; #define N 50 //学生数 #define M 10 //课程数 struct student { char name[20];...

蓬江区17087459492: 数据结构课程设计报告 -
木变利福: 1、一元稀疏多项式相加详细设计4.1 程序头的设计: #include<stdio.h> #include<malloc.h> typedef struct pnode {int coef;/*系数 */ int exp;/*指数 */ struct pnode *next;/*下一个指针*/ }pnode;4.2 用头插法生成一个多项式,系数和...

蓬江区17087459492: 求一个<哈夫曼编码>数据结构课程设计(C语言版) -
木变利福: 我帮你测试了,这个可以满足你的要求! #include #include #define max 50 struct a { int weight; int parent,lchild,rchild; }; struct b { char cd[max]; int start; }; void main() { struct a ht[2*max]; struct b hcd[max],d; int i,k,n,c,s1,s2,m1,m2,f; printf("输入n:"); scanf("%d",&n); for(i=1;i

蓬江区17087459492: 数据结构C语言版:一元稀疏多项式 -
木变利福: #include<stdio.h> 声明部分:源代码含有2个文件 #include<malloc.h> typedef struct pnode // 定义指针// {int coef; //定义系数// int exp; //定义指数// struct pnode *next; }pnode;pnode * creat() //creat函数用来存放多项式// {int m,n; pnode *head,*...

蓬江区17087459492: 数据结构(C语言版)用单链表实现一元多项式加法器的设计与实现 -
木变利福: #include using namespace std;#define EPS 1E-6 typedef struct item { double coefficient; int power; struct item *next; } *POLYNOMIAL,*pItem; POLYNOMIAL Create() { // 创建多项式 pItem head,p; double coe; int pwr,iterms,i; head = p = new item; ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网