请哪位C语言高手帮下忙啦!偶实在是不会啊,C语言程序设计!谢谢拉!!!

C语言程序设计:1.题目描述编写一个程序实现多项式的求和,例如:多项式2X5+3X2-5.1X+6与多项式X4-3X2+X-2求和的结果为:2X5+X4-4.1X+4。系... C语言程序设计: 1. 题目描述
编写一个程序实现多项式的求和,例如:多项式2X5+3X2-5.1X+6与多项式X4-3X2+X-2求和的结果为:2X5+X4-4.1X+4。系统能实现以下功能:
输入:输入一个多项式;
插入:在一个多项式中插入一项;
删除:在一个多项式中删除一项;
查找:在一个多项式中查找某一项;
合并:多项式求和;
输出:输出多项式。
3. 设计提示
1)先确定多项式的数据结构。如确定每一项由哪些数据组成,每个数据项各用什么数据类型;
2)明确功能模块:如主菜单、输入数据、删除数据、查询、合并和输出等功能,并确定各功能模块的实现算法。
3)画出各模块的流程图或S-R图;
4)选择C语言的技术:普通数组、结构体数组、函数、指针、单链表或文件等。
5)编写程序代码。
不能运行哦!但我不懂是哪里出问题啦、我用的是c-free哦
展开
 我来答
passion_wu128
推荐于2016-05-14 · TA获得超过1168个赞
知道小有建树答主
回答量:370
采纳率:0%
帮助的人:587万
展开全部
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

//定义项的结构
struct INode
{
float num; //系数
int power; //指数(简单的定义为int)
struct INode *prior;
struct INode *next;
};

//创建一个降次排序的n项多项式
struct INode *creat()
{
struct INode *head,*p1,*p2;
int i,n;
head=(struct INode*)malloc(sizeof(struct INode));
head->prior=head->next=NULL;
p1=head;
if(!head)
{
printf("内存分配失败");
exit(0);
}
printf("\n输入多项式项数:");
scanf("%d",&n); //没有检测输入的项数合法性
for(i=0;i<n;i++)
{
p2=(struct INode*)malloc(sizeof(struct INode));
if(!p1)
{
printf("内存分配失败");
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");
return head;
}

//输出多项式
void output(struct INode *head)
{
struct INode *p;
p=head->next;
printf("\n");
if(p==NULL){
printf("多项式为空\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 findItem(struct INode *head)
{
int pow;
struct INode *p=head->next;
if(p==NULL){
printf("\n多项式为空\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无该指数的项\n");
}

//删除某一项,按指数删除
void delItem(struct INode *head)
{
int pow;
struct INode *p=head->next;
if(p==NULL){
printf("\n多项式为空\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无该指数的项\n");
}

//插入某一项
void insertItem(struct INode *head)
{
char ch=getch();
struct INode *newItem,*temp,*p;
temp=head;
p=head->next;
newItem=(struct INode*)malloc(sizeof(struct INode));
if(!newItem)
{
printf("内存分配失败");
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):");
fflush(stdin); //清除缓冲区

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 addPolyItem()
{
struct INode *head1,*head2,*headSum,*p1,*p2,*p;
float addResult;
printf("\n输入第一个多项式:\n");
head1=creat();
printf("输入第二个多项式:\n");
head2=creat();
p1=head1->next;
p2=head2->next;
headSum=p=(struct INode*)malloc(sizeof(struct INode));
headSum->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
{
addResult=p1->num+p2->num;
p->next=p1;
p->next->num=addResult;
p1=p1->next;
p2=p2->next;
}
p=p->next;
}
if(p1==NULL)
p->next=p2;
if(p2==NULL)
p->next=p1;
printf("求和结果:");
output(headSum);
}

void main()
{
char choice;
struct INode *head=(struct INode*)malloc(sizeof(struct INode));
head->next=NULL;//创建一个空链表
printf("\n\n*******************************\n");
printf("1,输入一个多项式\n");
printf("2,插入某一项\n");
printf("3,删除某一项\n");
printf("4,查找某一项\n");
printf("5,输出多项式\n");
printf("6,多项是求和\n");
printf("7,退出\n");
printf("*******************************\n");
while(1)
{
printf("请按键选择操作:");
fflush(stdin); //清除缓冲区
choice=getch();
switch(choice)
{
case '1':
head=creat();
break;
case '2':
insertItem(head);
break;
case '3':
delItem(head);
break;
case '4':
findItem(head);
break;
case '5':
output(head);
break;
case '6':
addPolyItem();
break;
case '7':
exit(4);
default:
printf("输入错误\n");
break;
}
}

}
hewengao401
2011-01-09 · TA获得超过103个赞
知道小有建树答主
回答量:97
采纳率:0%
帮助的人:101万
展开全部
用我这个,看能行不。行就采纳我吧
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

//定义项的结构
struct INode
{
float num; //系数
int power; //指数(简单的定义为int)
struct INode *prior;
struct INode *next;
};

//创建一个降次排序的n项多项式
struct INode *creat()
{
struct INode *head,*p1,*p2;
int i,n;
head=(struct INode*)malloc(sizeof(struct INode));
head->prior=head->next=NULL;
p1=head;
if(!head)
{
printf("内存分配失败");
exit(0);
}
printf("\n输入多项式项数:");
scanf("%d",&n); //没有检测输入的项数合法性
for(i=0;i<n;i++)
{
p2=(struct INode*)malloc(sizeof(struct INode));
if(!p1)
{
printf("内存分配失败");
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");
return head;
}

//输出多项式
void output(struct INode *head)
{
struct INode *p;
p=head->next;
printf("\n");
if(p==NULL){
printf("多项式为空\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 findItem(struct INode *head)
{
int pow;
struct INode *p=head->next;
if(p==NULL){
printf("\n多项式为空\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无该指数的项\n");
}

//删除某一项,按指数删除
void delItem(struct INode *head)
{
int pow;
struct INode *p=head->next;
if(p==NULL){
printf("\n多项式为空\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无该指数的项\n");
}

//插入某一项
void insertItem(struct INode *head)
{
char ch=getch();
struct INode *newItem,*temp,*p;
temp=head;
p=head->next;
newItem=(struct INode*)malloc(sizeof(struct INode));
if(!newItem)
{
printf("内存分配失败");
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):");
fflush(stdin); //清除缓冲区

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 addPolyItem()
{
struct INode *head1,*head2,*headSum,*p1,*p2,*p;
float addResult;
printf("\n输入第一个多项式:\n");
head1=creat();
printf("输入第二个多项式:\n");
head2=creat();
p1=head1->next;
p2=head2->next;
headSum=p=(struct INode*)malloc(sizeof(struct INode));
headSum->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
{
addResult=p1->num+p2->num;
p->next=p1;
p->next->num=addResult;
p1=p1->next;
p2=p2->next;
}
p=p->next;
}
if(p1==NULL)
p->next=p2;
if(p2==NULL)
p->next=p1;
printf("求和结果:");
output(headSum);
}

int main()
{
char choice;
struct INode *head=(struct INode*)malloc(sizeof(struct INode));
head->next=NULL;//创建一个空链表
printf("\n\n*******************************\n");
printf("1,输入一个多项式\n");
printf("2,插入某一项\n");
printf("3,删除某一项\n");
printf("4,查找某一项\n");
printf("5,输出多项式\n");
printf("6,多项是求和\n");
printf("7,退出\n");
printf("*******************************\n");
while(1)
{
printf("请按键选择操作:");
fflush(stdin); //清除缓冲区
choice=getch();
switch(choice)
{
case '1':
head=creat();
break;
case '2':
insertItem(head);
break;
case '3':
delItem(head);
break;
case '4':
findItem(head);
break;
case '5':
output(head);
break;
case '6':
addPolyItem();
break;
case '7':
exit(4);
default:
printf("输入错误\n");
break;
}
}
return 0;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式