首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

c'x'x0030异常求解答

2013-09-04 
c'x'x0030错误求解答在线等#includestdio.h#includemalloc.h//**************创建结构体***

c'x'x0030错误求解答在线等
#include<stdio.h>
#include<malloc.h>


//**************创建结构体*************************
typedef struct Node
{
float a;         //系数
int b;           //指数
struct Node *next;//指针域
}*No,Node; // No为指针类型


//**************构造多项式*************************
void Insert(No p,No h)
{
No q1,q2;
if(p->a==0)
free(p);
else
{
q1=h;
q2=h->next;
while(q2&&p->b<q2->b)
{
q1=q2;
q2=q2->next;
}
if(q2&&p->b==q2->b)
{
q2->b=q2->b+p->b;
    free(p);
if(q2->a==0)
{
q1->next=q2->next;
    free(q2);
}
}
else
{
p->next=q2->next;
q1->next=p;
}
}
}//多项式构造函数
No ConstructNode(No head,int d)
{
int i;
No p;
p=(No)malloc(sizeof(struct Node));
p=head;
head->next=NULL;//显示在这出错
for(i=0;i<d;i++)
{
p=(No)malloc(sizeof(struct Node));
printf("请输入第%d项的系数和指数",i+1);
scanf("%f %d",&p->a,&p->b);//获得数据
Insert(p,head);//调用函数
}
return head;
}





//****************输出多项式***********************
void PrintfNode(No p)
{
No q;
q=p->next;
int flag=1;     //项数计数
if(!q)
{
putchar('0');
printf("\n");
}
while(q)
{
if(q->a>0&&flag!=1)putchar('+');

if(q->a==1)
{
if(q->b==0)putchar('1');
else if(q->b==1)putchar('X');
else printf("X^%d",q->b);
}
else
{
if(q->a==-1)
{
if(q->b==0)putchar('-1');
else if(q->b==1)putchar('-X');
else printf("-X^%d",q->b);
}
else
{
if(q->b==0)printf("%f",q->a);
else if(q->b==1)printf("%fX",q->a);
else printf("%fX^%d",q->a,q->b);
}
q=q->next;
flag++;
}
}
printf("\n");
}//输出




//******************情况分析**************************
int compare(No pa,No pb)
{
if(pa&&pb)
{
if(!pb||pa->b>pb->b)return 1;
else if(!pa||pa->b<pb->b)return -1;
else return 0;


}
else if (!pa&&pb)return -1;
else return 1;
}



//******************多项式加减法***********************
No AddNode(No x,No y)
{
No m=x->next;
No n=y->next;
No headc,hc,z;
hc=(No)malloc(sizeof(struct Node));
hc->next=NULL;//建立头结点
headc=hc;
while(m||n)
{
z=(No)malloc(sizeof(struct Node));
switch (compare(m,n))
{
case 1://x不等于0,y等于0
{
z->a=x->a;
        z->b=x->b;
x=x->next;
break;
}
case -1://x等于0;y不等于0
{
z->a=y->a;
z->b=y->b;
y=y->next;
break;
}
case 0://xy均不等于0
{
z->a=x->a+y->a;
z->b=x->b;
x=x->next;
y=y->next;
break;
}
}
if(z->a!=0)
{
z->next=hc->next;
hc->next=z;
hc=z;
}//相加系数为0
else free(z);
}
return headc;
}


No subNode(No x,No y)
{
No m=x->next;
No n=y->next;
No headc,hc,z;
hc=(No)malloc(sizeof(struct Node));
hc->next=NULL;//建立头结点
headc=hc;
while(m||n)
{
z=(No)malloc(sizeof(struct Node));
switch (compare(m,n))
{
case 1://x不等于0,y等于0
{
z->a=x->a;
        z->b=x->b;
x=x->next;
break;
}
case -1://x等于0;y不等于0
{
z->a=-y->a;
z->b=y->b;
y=y->next;
break;
}
case 0://xy均不等于0
{
z->a=x->a-y->a;
z->b=x->b;
x=x->next;
y=y->next;
break;
}
}
if(z->a!=0)
{
z->next=hc->next;
hc->next=z;
hc=z;
}//相减系数为0
else free(z);
}
return headc;
}
//***************删除多项式*************************

void Destroy(No p)
{
if (p->next==NULL)
free(p);
else
{
No q1,q2;
    q1=p->next;
    q2=q1->next;
while(q1->next)
{
free(q1);
q1=q2;
q2=q2->next;
}
}
}       //删除


//***************测试函数*****************************

void main()
{
int i,j,flag=0;


No na=0,nb=0,nc,nd;
printf("输入多项式a的项数:");
scanf("%d",&i);
na=ConstructNode(na,i);

printf("输入多项式b的项数:");
scanf("%d",&j);
na=ConstructNode(nb,j);


printf("多项式a为:");PrintfNode(na);
printf("多项式b为:");PrintfNode(nb);

nc=AddNode(na,nb);
printf("多项式a+b为:");PrintfNode(nc);
nd=subNode(na,nb);
printf("多项式a-b为:");PrintfNode(nc);

Destroy(na);
Destroy(nb);


}


C
[解决办法]
你这个是java的吧?发去java问问
[解决办法]
My God!我仿佛看见了C语言。请转到专区提问。

热点排行