📄 dgfd.cpp
字号:
# include<stdio.h>
# include<stdlib.h>
# define LEN sizeof (struct xiang)
struct xiang {
int a;
int nums;
struct xiang * next;
};
int n,m;
struct xiang * creat(void)
{
struct xiang *p1,*p2,*head;
n=0;
head=p1=p2=(struct xiang *)malloc(LEN);
scanf("%d %d",&p1->a,&p1->nums);
while(p1->a !=-1){
p2=(struct xiang *)malloc(LEN);
scanf("%d %d",&p2->a,&p2->nums);
p1->next=p2;
p1=p2;
n++;
}
p1->next=NULL;
return(head);
}
struct xiang * delet(struct xiang *head,struct xiang *p1)
{
struct xiang *p2,*p3;
if(head==NULL) {
printf("can't find!");
return (head);
}
p2=head;
while(p2->a != p1->a && p2->nums != p1->nums){
p3=p2;
p2=p2->next;
}
if(p2->a==p1->a && p2->nums == p1->nums){
if(p2==head) head=p2->next;
else p3->next=p2->next;
}
else printf("error!");
return(head);
}
struct xiang * range(struct xiang * head)
{
struct xiang * p1,* p2,*p3,*p4,*head2;
m=1;
p3=p4=(struct xiang *)malloc(LEN);
head2=NULL;
while(n>0){
p2=head;
p1=p2->next;
while(p1!=NULL){
if(p2->nums < p1->nums){
p2=p1;
p1=p1->next;
}
else p1=p1->next;
}
if(m==1) head2=p3;
p3->a=p2->a;
p3->nums=p2->nums;
p4=(struct xiang *)malloc(LEN);
p3->next=p4;
p3=p4;
m++;
n--;
head=delet(head,p2);
}
p3->next=NULL;
return(head2);
}
struct xiang * insert1(struct xiang *head,struct xiang *p)
{
struct xiang *p0,*p1,*p2;
p0=head;
p1=p;
if(head==NULL) {
head=p1;
p1->next=NULL;
}
else{
while((p0->nums > p1->nums) && (p0->next !=NULL)){
p2=p0;
p0=p0->next ;
}
if(p0->nums == p1->nums){
p0->a=p0->a + p1->a;
if(p0->a==0){
p2->next=p0->next;
free(p0);
}
}
else if(p0->nums < p1->nums ){
if(head==p0){
head=p1;
p1->next=p0;
}
else{
p2->next =p1;
p1->next =p0;
}
}
else{
p0->next=p1;
p1->next =NULL;
}
}
return(head);
}
struct xiang * insert2(struct xiang *head,struct xiang *p)
{
struct xiang *p0,*p1,*p2;
p0=head;
p1=p;
if(head==NULL) {
head=p1;
p1->next=NULL;
}
else{
while((p0->nums > p1->nums) && (p0->next !=NULL)){
p2=p0;
p0=p0->next ;
}
if(p0->nums == p1->nums){
p0->a=p0->a - p1->a;
if(p0->a==0){
p2->next=p0->next;
free(p0);
}
}
else if(p0->nums < p1->nums ){
if(head==p0){
head=p1;
p1->next=p0;
}
else{
p2->next =p1;
p1->next =p0;
}
}
else{
p0->next=p1;
p1->next =NULL;
}
}
return(head);
}
int jisun(int a,int nums,int x)
{
int y,sum=1,i;
for(i=0;i<=nums;i++)
sum=sum * x;
y=sum * a;
return y;
}
int main()
{
struct xiang *head1,*head2,*head3,*head4,*p1,*p2,*p;
int x=0,c,y=0,a=0,b,f,ss,as=0;
printf("请输入多项式,输入“-1 -1”结束多项式的输入\n");
printf("系数 次方\n");
head3=creat();
head1=range(head3);
p1=head1;
printf("多项式1:\n");
printf("系数 次方\n");
while(p1->next !=NULL){
printf("%-10d%-50d\n",p1->a,p1->nums );
x++;
p1=p1->next ;
}
printf("多项式1共有%d项\n",x);
printf("可以选择下列选项,进行多项式的运算:\n");
printf("1.计算多项式在x处的值,请按Y,否则,请按任意其他字母键\n");
printf("2.进行多项式的相加或相减\n");
printf("3.退出\n");
while(c !=3){
scanf("%d",&c);
if(c==1){
printf("请输入x的值:\n");
scanf("%d",&f);
p1=head1;
while(p1->next !=NULL){
ss=jisun(p1->a,p1->nums,f);
as=as+ss;
p1=p1->next;
}
printf("多项式在处的值是%d\n",as);
}
else if(c==2){
printf("系数 次方\n");
head4=creat();
head2=range(head4);
p2=head2;
printf("多项式2:\n");
printf("系数 次方\n");
while(p2->next !=NULL){
printf("%-10d%-50d\n",p2->a,p2->nums);
y++;
p2=p2->next ;
}
printf("多项式2共有%d项\n",y);
p2=head2;
p=p2->next ;
printf("如果想将两多项式相加按0;\n如果想将两多项式相减按1\n");
scanf("%d",&b);
if(b==0){
while(p2->next !=NULL){
head1=insert1(head1,p2);
p2=p ;
p=p->next;
}
p1=head1;
printf("两多项式的和为:\n");
printf("系数 次方\n");
while(p1->next !=NULL){
printf("%-10d%-50d\n",p1->a,p1->nums);
a++;
p1=p1->next ;
}
printf("此多项式共有%d项\n",a);
}
if(b==1){
while(p2->next !=NULL){
head1=insert2(head1,p2);
p2=p ;
p=p->next;
}
p1=head1;
printf("两多项式的和为\n:");
printf("系数 次方\n");
while(p1->next !=NULL){
printf("%-10d%-50d\n",p1->a,p1->nums);
a++;
p1=p1->next ;
}
printf("此多项式共有%d项\n",a);
}
}
printf("可以选择下列选项,进行多项式的运算:\n");
printf("1.计算多项式在x处的值,请按Y,否则,请按任意其他字母键\n");
printf("2.进行多项式的相加或相减\n");
printf("3.退出\n");
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -