C/C++培训
达内IT学院
400-996-5531
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。c语言中多项式求和的代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
struct dxs
{
float num; //系数
int power; //指数
struct dxs *prior;
struct dxs *next;
};
struct dxs *creat() //输入
{
struct dxs *head,*p1,*p2;
int i,n;
head=(struct dxs*)malloc(sizeof(struct dxs));
head->prior=head->next=NULL;
p1=head;
if(!head)
{
printf("内存分配失败!\a");
exit(0);
}
printf("\n输入多项式项数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
p2=(struct dxs*)malloc(sizeof(struct dxs));
if(!p1)
{
printf("内存分配失败!\a");
exit(1);
}
printf("输入第%d项系数和指数(以空格分开):",i+1);
scanf("%f%d",&p2->num,&p2->power);
p1->next=p2;
p2->prior=p1;
p1=p2;
}
p2->next=NULL;
printf("\n已创建该多项式\n\n");
return head;
}
void insert(struct dxs *head) //插入
{
char ch;
struct dxs *newItem,*temp,*p;
temp=head;
p=head->next;
newItem=(struct dxs*)malloc(sizeof(struct dxs));
system("cls");
if(!newItem)
{
printf("内存分配失败!\a");
exit(2);
}
printf("\n请输入插入项系数和指数(以空格分开):");
scanf("%f%d",&newItem->num,&newItem->power);
while(p!=NULL && p->power>newItem->power)//找到插入位置
{
temp=p;
p=p->next;
}
if(p==NULL)//插入到末尾
{
temp->next=newItem;
newItem->prior=temp;
newItem->next=NULL;
printf("插入成功!\n");
}
else
{
if(p->power==newItem->power)
{
printf("已存在该指数的项,是否替换?(Y/N):\a");
if(ch=='Y'||ch=='y')
{
p->num=newItem->num;
printf("替换成功!\n");
}
else
printf("取消插入!\n");
}
else
{
temp->next=newItem;
newItem->prior=temp;
newItem->next=p;
p->prior=newItem;
printf("插入成功!\n");
}
}
}
void dell(struct dxs *head) //按指数删除
{
int pow;
struct dxs *p=head->next;
system("cls");
if(p==NULL)
{
printf("\n多项式为空\a\n");
return;
}
printf("\n输入要删除项的指数:");
scanf("%d",&pow);
while(p!=NULL)
{
if(p->power==pow)
{
p->prior->next=p->next;
if(p->next!=NULL) //不是最后一项则将其后继结点的前驱指其前驱
p->next->prior=p->prior;
printf("删除成功!\n");
return;
}
p=p->next;
}
printf("\n无该指数的项!\a\n");
}
void find(struct dxs *head) //按指数查找
{
int pow;
struct dxs *p=head->next;
system("cls");
if(p==NULL)
{
printf("\n多项式为空!\a\n");
return;
}
printf("\n输出要查找项的指数:");
scanf("%d",&pow);
while(p!=NULL)
{
if(p->power==pow)
{
if(p->power!=0)
{
if(p->num!=1)
{
if(p->num==-1)
printf("-");
else
printf("%g",p->num); //系数不为1则输出系数
}
if(p->power!=0)//指数不为零则输出变量
{
printf("X");
if(p->power!=1)
printf("^%d",p->power); //指数不为1则输出指数
}
}
else
printf("%g",p->num);
printf("\n");
return;
}
p=p->next;
}
printf("\n无该指数的项!\a\n");
}
void output(struct dxs *head) //输出
{
struct dxs *p;
p=head->next;
printf("\n");
if(p==NULL)
{
printf("\n多项式为空!\a\n");
return;
}
while(p!=NULL)
{
if(p->num!=0)//系数不为零则输出
{
if(p->power!=0)
{
if(p->num!=1)
{
if(p->num==-1)
printf("-");
else
printf("%g",p->num); //系数不为1则输出系数
}
if(p->power!=0)//指数不为零则输出变量
{
printf("X");
if(p->power!=1)
printf("^%d",p->power); //指数不为1则输出指数
}
}
else
printf("%g",p->num);
}
p=p->next;
if(p!=NULL && p->num>0) //中间项且系数为正则输出"+"号
printf("+");
}
printf("\n");
}
void add() //求和
{
struct dxs *head1,*head2,*sum,*p1,*p2,*p;
float Result;
printf("\n输入第一个多项式:\n");
head1=creat();
printf("\n输入第二个多项式:\n");
head2=creat();
p1=head1->next;
p2=head2->next;
sum=p=(struct dxs*)malloc(sizeof(struct dxs));
sum->next=NULL;
while(p1!=NULL && p2!=NULL)
{
if(p1->power>p2->power)
{
p->next=p1;
p1=p1->next;
}
else if(p1->power<p2->power)
{
p->next=p2;
p2=p2->next;
}
else
{
Result=p1->num+p2->num;
p->next=p1;
p->next->num=Result;
p1=p1->next;
p2=p2->next;
}
p=p->next;
}
if(p1==NULL)
p->next=p2;
if(p2==NULL)
p->next=p1;
printf("\n求和结果:");
output(sum);
}
void main()
{
int choice;
struct dxs *head=(struct dxs*)malloc(sizeof(struct dxs));
head->next=NULL;//创建一个空链表
while(1)
{
printf("\n\t\t* * * * * * 多项式求和系统* * * * *\n");
printf("\t\t*\t ^-^ *\n");
printf("\t\t*\t *\n");
printf("\t\t*\t *\n");
printf("\t\t*\t 1. 输入\t\t *\n");
printf("\t\t*\t 2. 插入\t\t *\n");
printf("\t\t*\t 3. 删除\t\t *\n");
printf("\t\t*\t 4. 查找\t\t *\n");
printf("\t\t*\t 5. 输出\t\t *\n");
printf("\t\t*\t 6. 求和\t\t *\n");
printf("\t\t*\t 7. 退出\t\t *\n");
printf("\t\t* * * * * * * * ^-^ * * * * * * * * \n\n");
printf("请按键选择操作:");
scanf("%d",&choice);
switch(choice)
{
case 1:head=creat();break;
case 2:insert(head);break;
case 3:dell(head);break;
case 4:find(head);break;
case 5:output(head);break;
case 6:add();break;
case 7:exit(4);
default:printf("\n输入错误\n");break;
}
}
}
版权声明:转载文章来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。
填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved