| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 484 人关注过本帖
标题:程序运行问题请教
取消只看楼主 加入收藏
lha7869346
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-6-20
收藏
 问题点数:0 回复次数:0 
程序运行问题请教

问题描述:设计一个一元多项式简单的计算器。
基本要求:一元多项式简单计算器的基本功能为:
(1)输入并建立多项式;
(2)输出多项式;
(3)两个多项式想加,建立并输出和多项式;
(4)两个多项式相减,建立并输出差多项式。
实现提示:可选择带头结点的单向循环链表或单链表存储多项式,头结点可存放多项式的参数,如项数等。



所写出的这个程序有问题~运行有错误 高手帮忙修改~~谢谢
#include <stdio.h>
#include <stdlib.h>
#define OK 1;
#define READ(I) while (((I)=getchar())=='\n'); //读入合法字符
typedef int status;
typedef struct PolyNode
{
float coef;
int expn;
struct PolyNode *next;
}Poly,*P_Poly;


status CreatPoly(P_Poly*,int);
void OutP_Poly(P_Poly);
void AddPoly(P_Poly*,P_Poly,P_Poly);
void DecPoly(P_Poly*,P_Poly,P_Poly);
void DelPoly(P_Poly*);

status main()
{
P_Poly PolyHead[26]={0};
char menu,name;
for (;;)
{

printf ("1.建立多项式\n");
printf ("2.输出多项式\n");
printf ("3.求两个多项式之和(必须先创建),建立和式并输出\n");
printf ("4.求两个多项式之差(必须先创建),建立差式并输出\n");
printf ("5.删除多项式\n");
printf ("6.退出\n");
printf ("请选择指令:");
READ(menu)
switch (menu)
{
case '1':
{
int n;
printf ("请输入要创建的多项式的名称(单个小写字母表示):");
READ(name)
if (NULL!=PolyHead[name-'a'])
{
printf ("此多项式已经存在!\n");
break;
}
printf ("请输入项数:");
scanf ("%d",&n);
if(CreatPoly(&PolyHead[name-'a'],n)) printf ("多项式%c创建完毕!\n",name);
break;
}
case '2':
printf ("请输入要输出的多项式的名称:");
READ(name)
if (NULL==PolyHead[name-'a'])
{
printf ("此多项式不存在!\n");
break;
}
OutP_Poly(PolyHead[name-'a']);
break;
case '3':
{
char name1,name2;
printf ("请输入加式一的名称:");
READ(name1)
if (NULL==PolyHead[name1-'a'])
{
printf ("此多项式不存在!请先创建\n");
break;
}
printf ("请输入加式二的名称:");
READ(name2)
if (NULL==PolyHead[name2-'a'])
{
printf ("此多项式不存在!请先创建\n");
break;
}
printf ("请输入要创建的和式的名称:");
READ(name)
if (NULL!=PolyHead[name-'a'])
{
printf ("此多项式已经存在!\n");
break;
}
AddPoly(&PolyHead[name-'a'],PolyHead[name1-'a'],PolyHead[name2-'a']);
OutP_Poly(PolyHead[name-'a']);
break;
}
case '4':
{
char name1,name2;
printf ("请输入被减式的名称:");
READ(name1)
if (NULL==PolyHead[name1-'a'])
{
printf ("此多项式不存在!请先创建\n");
break;
}
printf ("请输入减式的名称:");
READ(name2)
if (NULL==PolyHead[name2-'a'])
{
printf ("此多项式不存在!请先创建\n");
break;
}
printf ("请输入要创建的差式的名称:");
READ(name)
if (NULL!=PolyHead[name-'a'])
{
printf ("此多项式已经存在!\n");
break;
}
DecPoly(&PolyHead[name-'a'],PolyHead[name1-'a'],PolyHead[name2-'a']);
OutP_Poly(PolyHead[name-'a']);
break;
}
case '5':
printf ("请输入要删除的多项式名称:");
READ(name)
if (NULL==PolyHead[name-'a'])
{
printf ("此多项式不存在!\n");
break;
}
DelPoly(&PolyHead[name-'a']);
printf ("多项式%c已删除!\n",name);
break;
case '6':
return OK;
}
}
}

status CreatPoly(P_Poly* P_PolyHead,int n)
{ //为确保其他子函数正常运行,入口参数要求不含同类项、指数递减
int i=0;
P_Poly p,tail;
*P_PolyHead=(Poly*)malloc(sizeof(Poly));
(*P_PolyHead)->expn=n;
tail=*P_PolyHead;
printf ("请按照指数递减序输入最简形式的多项式\n");
for (;i<n;i++)
{
p=(Poly*)malloc(sizeof(Poly));
printf ("请输入第%d项的系数和指数(系数,指数):",i+1);
scanf ("%f,%d",&(p->coef),&(p->expn));
tail->next=p;
tail=p;
}
tail->next=NULL;
return OK;
}


void OutP_Poly(P_Poly PolyHead)
{
int i=0;
P_Poly p;
printf ("%d ",PolyHead->expn);
p=PolyHead->next;
for (;i<PolyHead->expn;i++)
{
printf ("%f,%d ",p->coef,p->expn);
p=p->next;
}
printf ("\n");
}


void AddPoly(P_Poly* P_PolyHead,P_Poly PolyHead1,P_Poly PolyHead2)
{
int i=0;
P_Poly p1,p2,p,tail;
p1=PolyHead1->next;
p2=PolyHead2->next;
*P_PolyHead=(P_Poly)malloc(sizeof(Poly));
p=tail=*P_PolyHead;
while(p1&&p2)
{
int e1,e2;
e1=p1->expn;
e2=p2->expn;
if (e1>e2)
{
p=(P_Poly)malloc(sizeof(Poly));
tail->next=p;
tail=p;
*p=*p1;
p1=p1->next;
i++;
}
else if(e1==e2)
{
float sum_c=p1->coef+p2->coef;
if (sum_c!=0.0)
{
p=(P_Poly)malloc(sizeof(Poly));
tail->next=p;
tail=p;
p->coef=sum_c;
p->expn=e1;
i++;
}
p1=p1->next;
p2=p2->next;
}
else if (e1<e2)
{
p=(P_Poly)malloc(sizeof(Poly));
tail->next=p;
tail=p;
*p=*p2;
p2=p2->next;
i++;
}
}
while (p1)
{
p=(Poly*)malloc(sizeof(Poly));
*p=*p1;
tail->next=p;
tail=p;
p1=p1->next;
i++;
}
while (p2)
{
p=(Poly*)malloc(sizeof(Poly));
*p=*p2;
tail->next=p;
tail=p;
p2=p2->next;
i++;
}
(*P_PolyHead)->expn=i;
tail->next=NULL;
}

void DecPoly(P_Poly* P_PolyHead,P_Poly PolyHead1,P_Poly PolyHead2)
{
int i=0;
P_Poly p1,p2,p,tail;
p1=PolyHead1->next;
p2=PolyHead2->next;
*P_PolyHead=(P_Poly)malloc(sizeof(Poly));
p=tail=*P_PolyHead;
while(p1&&p2)
{
int e1,e2;
e1=p1->expn;
e2=p2->expn;
if (e1>e2)
{
p=(P_Poly)malloc(sizeof(Poly));
tail->next=p;
tail=p;
*p=*p1;
p1=p1->next;
i++;
}
else if(e1==e2)
{
float dif_c=p1->coef-p2->coef;
if (dif_c!=0.0)
{
p=(P_Poly)malloc(sizeof(Poly));
tail->next=p;
tail=p;
p->coef=dif_c;
p->expn=e1;
i++;
}
p1=p1->next;
p2=p2->next;
}
else if (e1<e2)
{
p=(P_Poly)malloc(sizeof(Poly));
tail->next=p;
tail=p;
p->coef=-p2->coef;
p->expn=p2->expn;
p2=p2->next;
i++;
}
}
while (p1)
{
p=(Poly*)malloc(sizeof(Poly));
*p=*p1;
tail->next=p;
tail=p;
p1=p1->next;
i++;
}
while (p2)
{
p=(Poly*)malloc(sizeof(Poly));
*p=*p2;
tail->next=p;
tail=p;
p2=p2->next;
i++;
}
(*P_PolyHead)->expn=i;
tail->next=NULL;
}

void DelPoly(P_Poly* P_PolyHead)
{
P_Poly p,prior;
p=prior=*P_PolyHead;
while (p->next)
{
p=p->next;
free(prior);
prior=p;
}
*P_PolyHead=NULL;
}

搜索更多相关主题的帖子: 运行 
2006-06-20 19:01
快速回复:程序运行问题请教
数据加载中...
 
   



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

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