实验题10:求两个多项式的相加运算
编写一个程序,用单链表存储一元多项式,并实现两个多项式的相加运算。
#include "malloc.h"
#include "iostream"
#define MaxSize 10
using namespace std;
typedef struct
{
float coef[MaxSize];
int length;
}SqList;
void create(SqList *&L,float a[],int exp)
{
int i=0;
L=(SqList*)malloc(sizeof(SqList));
for(i=0;i<=exp;i++)
{
L->coef[i]=a[i];
}
L->length=exp+1;
}
void DispList(SqList *&L)
{
for(int i=L->length-1;i>0;i--)
{
cout<<L->coef[i]<<"x^"<<i<<"+";
}
cout<<L->coef[0];
cout<<endl;
}
void add(SqList *&L,SqList*&M)
{
if(L->length>M->length)
{
for(int i=0;i<M->length;i++)
{
L->coef[i]=L->coef[i]+M->coef[i];
}
}
else
{
for(int i=0;i<L->length;i++)
{
L->coef[i]=L->coef[i]+M->coef[i];
}
for(int i=L->length;i<M->length;i++)
{
L->coef[i]=M->coef[i];
}
L->length=M->length;
}
}
int main()
{
SqList *p;
SqList *q;
int exp1,exp2;
float a[10],b[10];
cout<<"请输入多项式1的最高项指数:";
cin>>exp1;
for(int i=0;i<=exp1;i++)
{
cout<<"请输入x^"<<i<<"的系数:";
cin>>a[i];
}
create(p,a,exp1);
cout<<"请输入多项式2的最高项指数:";
cin>>exp2;
for(int i=0;i<=exp2;i++)
{
cout<<"请输入x^"<<i<<"的系数:";
cin>>b[i];
}
create(q,b,exp2);
cout<<"多项式1:";
DispList(p);
cout<<"多项式2:";
DispList(q);
add(p,q);
cout<<"相加后:";
DispList(p);
}
实验题11:职工信息的综合运算
设有一个职工文件,每个职工记录包含职工编号、姓名、部门号和工资数等信息,设计一个程序完成以下功能:
(1)输入一个职工记录。
(2)显示所有职工记录。
(3)按编号对所有职工记录进行递增排序。
(4)按部门号对所有职工记录进行递增排序。
(5)按工资数对所有职工记录进行递增排序。
(6)删除指定职工号的职工记录。
(7)删除职工文件中的全部记录。
#include "malloc.h"
#include "iostream"
#include <string>
#include <iomanip>
using namespace std;
struct Data
{
int no;
string name;
int depno;
float salary;
};
typedef struct LNode
{
Data data;
struct LNode *next;
}LinkNode;
void Create(LinkNode *&L)
{
L=(LinkNode*)malloc(sizeof(LinkNode));
L->next=NULL;
}
void AddOne(LinkNode *&L,Data data1)//输入一个职工记录
{
LinkNode *s;
s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=data1;
s->next=L->next;
L->next=s;
}
void DispList(LinkNode *&L)//显示所有职工记录
{
LinkNode *p=L->next;
if(p==NULL)
{
cout<<"无职工记录!"<<endl;
}
else
{
cout<<"职工编号:"<<setw(8)<<"姓名:"<<setw(10)<<"部门号:"<<setw(10)<<"工资数:"<<endl;
while(p!=NULL)
{
cout<<p->data.no<<" "<<p->data.name<<setw(10)<<p->data.depno<<setw(10)<<p->data.salary<<endl;
p=p->next;
}
}
}
void Nosort(LinkNode *&L)//按编号进行递增排序
{
LinkNode *p,*pre,*q;
p=L->next->next;
L->next->next=NULL;
while(p!=NULL)
{
q=p->next;
pre=L;
while(pre->next!=NULL&&pre->next->data.no<p->data.no)
{
pre=pre->next;
}
p->next=pre->next;
pre->next=p;
p=q;
}
}
void Depnosort(LinkNode *&L)//按部门号进行递增排序
{
LinkNode *p,*pre,*q;
p=L->next->next;
L->next->next=NULL;
while(p!=NULL)
{
q=p->next;
pre=L;
while(pre->next!=NULL&&pre->next->data.depno<p->data.depno)
{
pre=pre->next;
}
p->next=pre->next;
pre->next=p;
p=q;
}
}
void Salarysort(LinkNode *&L)//按工资数进行递增排序
{
LinkNode *p,*pre,*q;
p=L->next->next;
L->next->next=NULL;
while(p!=NULL)
{
q=p->next;
pre=L;
while(pre->next!=NULL&&pre->next->data.salary<p->data.salary)
{
pre=pre->next;
}
p->next=pre->next;
pre->next=p;
p=q;
}
}
void Delete1(LinkNode *&L,int deleteno)//删除一个职工记录
{
int i=1;
LinkNode *p=L,*q=L->next;
while(q!=NULL&&q->data.no!=deleteno)
{
p=q;
q=q->next;
i++;
}
if(p==NULL)
{
cout<<"该职工未记录!"<<endl;
}
else
{
p->next=q->next;
free(q);
cout<<"删除成功!"<<endl;
}
}
void DeleteAll(LinkNode *&L)//删除全部记录
{
LinkNode*pre=L,*p=L->next;
while(p!=NULL)
{
free(pre);
pre=p;
p=pre->next;
}
cout<<"删除成功!"<<endl;
}
int main()
{
int choose,deleteno;
Data data1;
LinkNode *emp;
Create(emp);
while(1)
{
cout<<"请输入序号进行操作:"<<endl;
cout<<"1.输入一个职工记录"<<endl;
cout<<"2.显示所有职工记录"<<endl;
cout<<"3.按编号进行递增排序"<<endl;
cout<<"4.按部门号进行递增排序"<<endl;
cout<<"5.按工资数进行递增排序"<<endl;
cout<<"6.删除一个职工记录"<<endl;
cout<<"7.删除全部记录"<<endl;
cin>>choose;
if(choose==1)
{
cout<<"请输入该职工信息:"<<endl;
cout<<"职工编号:"<<endl;
cin>>data1.no;
cout<<"姓名:"<<endl;
cin>>data1.name;
cout<<"部门号:"<<endl;
cin>>data1.depno;
cout<<"工资数:"<<endl;
cin>>data1.salary;
AddOne(emp,data1);
}
else if(choose==2)
{
DispList(emp);
}
else if(choose==3)
{
Nosort(emp);
DispList(emp);
}
else if(choose==4)
{
Depnosort(emp);
DispList(emp);
}
else if(choose==5)
{
Salarysort(emp);
DispList(emp);
}
else if(choose==6)
{
cout<<"请输入要删除的职工号:";
cin>>deleteno;
Delete1(emp,deleteno);
}
else if(choose==7)
{
DeleteAll(emp);
Create(emp);
}
else
{
cout<<"格式有误,请重新输入!";
}
cout<<endl;
}
return 0;
}
仅作留档。