📄 calculate.c
字号:
#include<stdlib.h>
#include<process.h>
#include<dos.h>
#include<conio.h>
#include"stdio.h"
typedef struct LNode{
float coef; /*系数项*/
int expn; /*指数项*/
struct LNode *next;
}LNode,*polyn;
void output(polyn p){
/*输出多项式p*/
polyn q;
printf("\nHave total %d item:\n",p->expn);
printf("The polynomial is:");
q=p->next;
while(q){
printf("(%gX^%d)",q->coef,q->expn);
if(q->next!=NULL)printf("+");
q=q->next;
}
printf("\n");
}/*output*/
void input(polyn *p){
/*输入并生成一元多项式*/
int i,min=-32768;
float f;
polyn q,r;
/*生成头结点*/
*p=(polyn)malloc(sizeof(LNode));
if (!*p) exit(-2);
(*p)->coef=0;
printf("Input Num: ");
scanf("%d",&((*p)->expn));
(*p)->next=NULL;
for(i=1;i<=(*p)->expn;i++){
q=(polyn)malloc(sizeof(LNode));
if (!q) exit(-2);
printf("No.%d coefficient: ",i);
scanf("%f",&f);
q->coef=f;
do{
printf("No.%d exponent: ",i);
scanf("%d",&(q->expn));
if (q->expn<min)
printf("\nError! Input again! \n",(*p)->next->expn);
}while(q->expn<min);
min=q->expn;
q->next=(*p)->next;
(*p)->next=q;
}/*for*/
/*合并多项式中指数值相同的项*/
q=(*p)->next;
while(q){
r=q->next;
while (r&&r->expn==q->expn){
q->coef+=r->coef;
q->next=r->next;
free(r);
r=q->next;
(*p)->expn--;
}
q=q->next;
}
}/*input*/
void add(polyn pa,polyn pb){
polyn ha,hb,hc,p;
ha=pa->next;
hb=pb->next;
hc=pa;
hc->next=NULL;
pa->expn=0;
while (ha&&hb){
if (ha->expn>hb->expn){
hc->next=ha;
hc=ha;
ha=ha->next;
hc->next=NULL;
pa->expn++;
}
else
if (ha->expn<hb->expn){
hc->next=hb;
hc=hb;
hb=hb->next;
hc->next=NULL;
pa->expn++;
}
else{
ha->coef+=hb->coef;
if (ha->coef){
hc->next=ha;
hc=ha;
ha=ha->next;
hc->next=NULL;
pa->expn++;
p=hb;
hb=hb->next;
free(p);
}
else{
p=ha;
ha=ha->next;
free(p);
p=hb;
hb=hb->next;
free(p);
}
}
}
if (ha){
hc->next=ha;
while(ha){
pa->expn++;
ha=ha->next;
}
}
if (hb) {
hc->next=hb;
while (hb){
pa->expn++;
hb=hb->next;
}
}
free(pb);
}/*add*/
void minus(polyn pa,polyn pb){
polyn ha,hb,hc,p;
ha=pa->next;
hb=pb->next;
hc=pa;
hc->next=NULL;
pa->expn=0;
while (ha&&hb){
if (ha->expn>hb->expn){
hc->next=ha;
hc=ha;
ha=ha->next;
hc->next=NULL;
pa->expn++;
}
else
if (ha->expn<hb->expn){
hb->coef*=-1;
hc->next=hb;
hc=hb;
hb=hb->next;
hc->next=NULL;
pa->expn++;
}
else{
ha->coef-=hb->coef;
if (ha->coef){
hc->next=ha;
hc=ha;
ha=ha->next;
hc->next=NULL;
pa->expn++;
p=hb;
hb=hb->next;
free(p);
}
else{
p=ha;
ha=ha->next;
free(p);
p=hb;
hb=hb->next;
free(p);
}
}
}
if (ha) {
hc->next=ha;
while(ha){
pa->expn++;
ha=ha->next;
}
}
if (hb) {
hc->next=hb;
while (hb){
hb->coef*=-1;
pa->expn++;
hb=hb->next;
}
}
free(pb);
}/*minus*/
calculate(){
char c=' ';
polyn pa=NULL,pb=NULL;
clrscr();
printf("Input first polynomial\n");
input(&pa);
output(pa);
printf("input + or -):");
while(c!='+'&&c!='-')
scanf("%c",&c);
printf("Input second polynomial\n");
input(&pb);
output(pb);
if (c=='+') {
add(pa,pb);
printf("The result of add polynomial--");
output(pa);
}
else{
minus(pa,pb);
printf("The result of minus polynomial--");
output(pa);
}
getch();
}/*main*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -