问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

写个程序设计

发布网友 发布时间:2022-05-06 19:06

我来回答

1个回答

热心网友 时间:2023-10-03 21:14

给你一个作参考吧,已经编译运行确认了:
#include<stdio.h>
#include<malloc.h>

typedef struct node{//定义节点类型
float coef;
int expn;
struct node * next;
}PLOY;

void start()//用户选择界面
{
printf("请选择操作:\n");
printf("0.退出\n");
printf("1.两个一元多项式相加\n");
printf("2.两个一元多项式相乘\n");
printf("3.两个一元多项式相减\n");
printf("4.帮助\n");
}

void notice()//用户帮助界面
{
printf("\n");
printf("********************帮助*********************\n");
printf("1.以多项式每项系数和指数形式输入多项式,就像:2 3这样\n");
printf("2.输入:2 3代表多项式中一项系数是2,指数是3。\n");
printf("3.以输入:0 0结束输入该多项式;以多项式形式输出结果!");
printf("*********************************************\n");
}

void insert(PLOY *head,PLOY *inpt)//查找位置插入新链节程序
{
PLOY *pre,*now;
int signal=0;
pre=head;//pre定义为现在的前一个链节
if(pre->next==NULL) {pre->next=inpt;}
else {now=pre->next;
while(signal==0)
{
if(inpt->expn<now->expn)//当新链节小于现在的连接时向后移一个链节
{
if(now->next==NULL)
{
now->next=inpt;
signal=1;
}
else
{
pre=now;
now=pre->next;
}
}
else
if(inpt->expn>now->expn)//如果发现比现在的链节大了就插入到这个连接的前面
{
inpt->next=now;
pre->next=inpt;
signal=1;
}
else
{
now->coef=now->coef+inpt->coef;
signal=1;
free(inpt);//与当前链节相等指数
if(now->coef==0)
{
pre->next=now->next;
free(now);
}
}
}
}
}

PLOY *creat(char ch)//输入多项式
{
PLOY *head,*inpt;
float x;
int y;
head=(PLOY *)malloc(sizeof(PLOY));//创建链表头
head->next=NULL;
printf("请输入一元多项式%c:(格式是:系数 指数;以0 0 结束!)\n",ch);
scanf("%f %d",&x,&y);
while(x!=0)
{
inpt=(PLOY *)malloc(sizeof(PLOY));//创建新链节
inpt->coef=x;
inpt->expn=y;
inpt->next=NULL;
insert(head,inpt);//不然就查找位置并且插入新链节
printf("请输入一元多项式%c的下一项:(以0 0 结束!)\n",ch);
scanf("%f %d",&x,&y);
}
return head;
}

PLOY *addPLOY(PLOY *head,PLOY *pre)//多项式相加
{
PLOY *inpt;
int flag=0;
while(flag==0)
{
if(pre->next==NULL)
flag=1;//当现在指向空时跳出循环
else
{
pre=pre->next;
inpt=(PLOY *)malloc(sizeof(PLOY));//创建新链节
inpt->coef=pre->coef;
inpt->expn=pre->expn;
inpt->next=NULL;
insert(head,inpt);
}//否则把当前“g(x)”的链节插入到“y(x)”中
}
return head;
}

PLOY *minusPLOY(PLOY *head,PLOY *pre)//多项式相加
{
PLOY *inpt;
int flag=0;
while(flag==0)
{
if(pre->next==NULL)
flag=1;//当现在指向空时跳出循环
else
{
pre=pre->next;
inpt=(PLOY *)malloc(sizeof(PLOY));//创建新链节
inpt->coef=0-pre->coef;
inpt->expn=pre->expn;
inpt->next=NULL;
insert(head,inpt);
}//否则把当前“g(x)”的链节插入到“y(x)”中
}
return head;
}

PLOY *byPLOY(PLOY *head1,PLOY *head2)//多项式相乘
{
PLOY *inpt,*res,*pre;
int flag=0;
res=(PLOY *)malloc(sizeof(PLOY));//创建链表头
res->next=NULL;
head1=head1->next;
pre=head2;
while(flag==0)
{
if(pre->next==NULL)
{
pre=head2;//当现在指向空时跳出循环
head1=head1->next;
continue;
}
if(head1==NULL)
{
flag=1;//当现在指向空时跳出循环
continue;
}
pre=pre->next;
inpt=(PLOY *)malloc(sizeof(PLOY));//创建新链节
inpt->coef=pre->coef*head1->coef;
inpt->expn=pre->expn+head1->expn;
inpt->next=NULL;
insert(res,inpt);//把当前“g(x)”的链节插入到“y(x)”中
}
return res;
}

void print(PLOY *fun)//输出多项式
{
PLOY *printing;
int flag=0;
printing=fun->next;//正在被打印的链节
if(fun->next==NULL)//如果函数为空打印0
{
printf("0\n");
return;
}
while(flag==0)
{
if(printing->coef>0&&fun->next!=printing)
printf("+");//为正数时打印“+”号
if(printing->coef==1);//如果为“1”就不用打印系数了
else if(printing->coef==-1)
printf("-");//如果为“-1”就打印“-”号就行了
else
printf("%f",printing->coef);//其余情况都得打印
if(printing->expn!=0) printf("x^%d",printing->expn);//如果指数为“0”不打印指数项
else if((printing->coef==1)||(printing->coef==-1))
printf("1");
if(printing->next==NULL)
flag=1;//如果现在的链节没有下一个就结束
else
printing=printing->next;
}
printf("\n");
}

void main()
{
PLOY *f,*g;
int sign=-1;//设置标志
start();
while(sign!=0)
{
scanf("%d",&sign);
switch(sign)
{
case 0:
break;//退出
case 1:
{
printf("你选择的操作是多项式相加:\n");
f=creat('f');//输入多项式f(x)
printf("f(x)=");
print(f);
g=creat('g');//输入多项式g(x)
printf("g(x)=");
print(g);
printf("F(x)=f(x)+g(x)=");
f=addPLOY(f,g);//两个多项式相加
print(f);
sign=-1;//复位标志
start();//回复用户选择界面
break;
}
case 2:
{
printf("你选择的操作是多项式相乘:\n");
f=creat('f');//输入多项式f(x)
printf("f(x)=");
print(f);
g=creat('g');//输入多项式g(x)
printf("g(x)=");
print(g);
printf("F(x)=f(x)*g(x)=");
f=byPLOY(f,g);//两个多项式相加
print(f);
sign=-1;//复位标志
start();//回复用户选择界面
break;
}
case 3:
{
printf("你选择的操作是多项式相减:\n");
f=creat('f');//输入多项式f(x)
printf("f(x)=");
print(f);
g=creat('g');//输入多项式g(x)
printf("g(x)=");
print(g);
printf("F(x)=f(x)-g(x)=");
f=byPLOY(f,g);//两个多项式相加
print(f);
sign=-1;//复位标志
start();//回复用户选择界面
break;
}
case 4:
{
notice();
sign=-1;//复位标志
start();//回复用户选择界面
break;
}
default:
{
printf("输入有误!请重新选择操作!\n");//选择错误,返回选择界面
start();
break;
}
}
}
printf("谢谢使用!\n");
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
邯郸自驾游到青岛马壕运河遗址推荐线路 株洲自驾到青岛马壕运河遗址途径地方 梧州回青岛马壕运河遗址要几个小时 石嘴山到青岛马壕运河遗址要多少油钱 可不可以用开水敷脸 开水能不能敷脸 发动机和发电机区别?? 电音之王朴智妍MV的图片? 电音之王mv里跳舞的是谁 自己怎样开网站 怎样把一个网页设置为主页 税控盘服务费专票如何处理 江苏宿迁泗阳县裴圩镇农村养老保险服务电话查询? 个人的养老保险怎么查询?可以在网上查询吗? lg牌子的电脑笔记本那个电源线丢掉了有配套能配到吗? 笔记本电脑能配电源线吗 8台电脑电源配线,用多粗的线,用多大的空关? 吉利帝豪gs1.3t保养灯怎么归零? 吉利帝豪GS保养灯怎么消? 电脑启动不了,按下开机键。cpu风扇转一下就停、这是不是电源坏了? 电脑电源风扇转是坏了吗电脑启动不了。 吉利帝豪gs保养灯怎么归零 电脑开机,cpu 显卡风扇转速正常,电源风扇转速很慢,显示器灯闪,但黑屏无法开机,是不是电源坏了? 什么是孕妇围产保健手册? 围产手册回执是什么意思 生育保健手册怎么领取 孕妇分娩回执单去医院那个部门办 健康回执卡是什么意思 借条,欠条,哪个“效力”大 借条效力大于欠条的效力吗 借条、欠条,哪个“效力”大 c++编程,设计一个简单的程序 C语言:求写一个简单的编程。 C语言程序设计帮忙写一个 为什么女人变丑男人就变心了 结婚之后,男人让女人变丑了,是最大的败笔吗? 一个男的如果爱一个女的,那女的如果变的又肥又难看他会不会变心嫌弃她。 男人有钱了会花心吗 女人变丑了男人变心吗 男人为什么变心?会因为她有病或者变丑吗? 女朋友对我说女人善于变脸,男人善于变心。这是什么意思 老公说我最近变丑了,和我提离婚,我应该答应他吗? 海天注塑机的自动清料怎么使用? 男人会因为女人的刘海一时剪短变丑(一个月才能恢复)而对女人变心吗?男女也还没有在一起。 女人容易变心男人容易变脸是真的吗? 注塑机如何使用电眼自动? 注塑机半自动如何使用 法来克注塑机自动清料怎么操作 注塑机调摸方法与技巧 自动送料机的应用范围 关于注塑机的问题 注塑车间中央供料系统规划设计注意哪些事项?