| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8267 人关注过本帖, 1 人收藏
标题:[求助]一元多项式计算
只看楼主 加入收藏
wwwwok
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2005-5-31
收藏(1)
 问题点数:0 回复次数:21 
[求助]一元多项式计算
一元多项式计算 能够按照指数降序排列建立并输出多项式; 能够完成两个多项式的相加、相减,并将结果输入;
搜索更多相关主题的帖子: 多项式 排列 指数 相加 
2005-05-31 23:07
睡觉
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2005-6-7
收藏
得分:0 
我也正想要哦。。。
2005-06-07 16:12
hanbing
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2005-6-14
收藏
得分:0 
不是吧?现在有答案了没啊??
2005-06-14 21:15
chenlulucy723
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-6-14
收藏
得分:0 
我也想要!!!!!!!!!!!!!
2005-06-14 22:46
xiaosi
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2005-6-18
收藏
得分:0 
WO  YE XIANG YAO A
2005-06-18 14:49
天边的一片云
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2005-7-12
收藏
得分:0 
我写了个,只是不在这里。没法子发给。
2005-07-20 19:00
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 

#include<stdio.h> #include<stdlib.h>

typedef struct node { int coef;

int exp;

struct node *next;

}Node;

void inarray(int x,int *end,int n);

int string_change_num(char *start,int *end);

Node *string_change_link(int *end,int n);

Node *order(Node *head);

Node *unite(Node *head);

void print (Node *head);

void main() { Node *head,*head1;

char str[255];

int i,end[255],n,x;

printf("输入字符,以'='号结束:\n\n");

printf("例如要输入 3x^3+4x^3,就要输入3x3+4x3\n\n");//注意 '+'或者'-'只是为了标记用,作用是识别指数,没有实际符号意义 for(i=0;i<255;i++) { scanf("%c",&str[i]);

if(str[i]=='=')

break; }

str[i]='\0';

n=string_change_num(str,end);

head=string_change_link(end,n);

head1=order(head);

printf("按照指数从小到大排序的多项式:\n\n");

print(head1);

printf("\n");

printf("输入要查找的系数:\n\n");

scanf("%d",&x); inarray(x,end,n);

printf("合并后的多项式是:\n");

head1=unite(head);

head=order(head1);

print(head);

printf("\n"); }

int string_change_num(char *start,int *end) { int i=0,j=0,k,sum=0,c=0,flag=1;

while(start[i]!='\0') { if(start[i]=='x'||start[i]=='+'||start[i]=='-') { if(start[i]=='x'&&start[j-1]=='-')

flag=0; if(start[i]=='x'&&start[j-1]=='+')

flag=1;

for(k=j;k<i;k++) sum=sum*10+start[k]-'0';

if(flag==0) { sum=-sum;

flag=1; } end[c++]=sum; sum=0;

j=i+1; } i++; } while(start[j]>'0'&&start[j]<'9') { sum=sum*10+start[j]-'0';

j++; }

end[c++]=sum;

return c;

} Node *string_change_link(int *end,int n) { Node *head,*p,*s;

int i=0;

head=(Node *)malloc(sizeof(Node));

head->next=NULL;

p=head;

while(i<n) { s=(Node *)malloc(sizeof(Node));

if(i%2==0)

s->coef=end[i];

i++;

if(i%2!=0)

s->exp=end[i];

p->next=s;

p=s;

i++; }

p->next=NULL;

return head; }

Node *order(Node *head) { Node *p,*q,*t,*s,*h; h=(Node *)malloc(sizeof(Node)); h->next=head; p=h; while(p->next->next!=NULL) { for(s=p,q=p->next;q->next!=NULL;q=q->next) if(q->next->exp<s->next->exp) s=q; if(s!=q) { t=s->next; s->next=t->next; t->next=p->next; p->next=t; } p=p->next; } head=h->next; free(h); return head; }

Node *unite(Node *head) { Node *p,*q,*q1,*p1;

q1=head;

p1=head;

p=head->next; q=p->next;

while(p->next!=NULL) { for(q=p->next;q!=NULL;q=q->next) { if(p->exp==q->exp) { while(q1->next!=q)

q1=q1->next;

while(p1->next!=p)

p1=p1->next;

if(p->coef+q->coef==0) { if(q==p->next) { p1->next=q->next;

free(q);

free(p);

q=p1;

p=p1; } else{ p1->next=p->next;

free(p);

p=p1;

q1->next=q->next;

free(q);

q=q1; } p1=head;

q1=head; } else{ p->coef=p->coef+q->coef; q1->next=q->next;

free(q);

q=q1;

p1=head;

q1=head; } } } if(p->next!=NULL)

p=p->next; if(p->next==NULL)

break; } return head; }

void print(Node *head) { Node *p;

p=head->next;

if(p==NULL)

printf("0"); else { if(p->exp==0) printf("%d",p->coef);

else if(p->exp==1) printf("%dx",p->coef); else

if(p->coef==1)

printf("x^%d",p->exp);

else if(p->coef==-1)

printf("-x^%d",p->exp);

else printf("%dx^%d",p->coef,p->exp); p=p->next;

while(p!=NULL) { if(p->exp==0)

printf("%d",p->coef);

else if(p->exp==1) { if(p->coef>0) printf("+%dx",p->coef);

else printf("%d",p->coef); }

else if(p->coef>0&&p->coef!=1&&p->exp!=-1)

printf("+%dx^%d",p->coef,p->exp);

else if(p->coef<0&&p->coef!=1&&p->exp!=-1)

printf("%dx^%d",p->coef,p->exp);

else if(p->coef==1)

printf("+x^%d",p->exp); else if(p->coef==-1)

printf("-x^%d",p->exp);

p=p->next; }

} }

void inarray(int x,int *end,int n) { int i;

for(i=0;i<n;i+=2) { if(end[i]==x) printf("系数是:%d 指数是:%d\n\n",end[i],end[i+1]);

}

if(i>n)

printf("没有找到!!\n");

}


c++/C + 汇编 = 天下无敌
2005-07-20 22:20
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
这是我帮一个女孩子写的数据结构期末作业,见到这里需要就发上来了,那个老师超级变态,要求的功能都式加大编程难度的,就是说那个老师要求用字符输入到一维数组,然后再转换成整形数据,凡是不实现这两个功能的就不可以及格确实是够变态。

c++/C + 汇编 = 天下无敌
2005-07-20 22:25
neo
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2005-7-13
收藏
得分:0 
支持斑竹!
2005-08-13 00:37
jiajia123
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-9-28
收藏
得分:0 
哦 斑竹很强呀  我也有一道题目想请斑竹帮忙 谢谢
 编制一个能实现演示执行集合的并,交和差运算的程序
2005-09-28 16:36
快速回复:[求助]一元多项式计算
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036365 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved