目录
1 课题描述及问题分析和任务定义 2
2逻辑设计 3
4详细设计 9
5程序编码 10
6 程序调试与测试 17
7总结 20
参考文献 21
1 课题描述及问题分析和任务定义
采用C语言编写一个一元多项式计算器,能将一个或两个一元多项式输入到计算机中,实现基本的加减计算功能。
实现的具体功能:
(1)输入并建立多项式a和b;
(2)输出多项式a和b;
(3)多项式a和b相加,建立并输出多项式a+b;
(4)多项式a和b相减,建立并输出多项式a-b;
(5)输入多项式中的未知数,计算多项式的结果。
最终使使用者轻松运用此计算器解决一元多项式的加减计算
本计算器主要是为了执行两个一元多项式之间进行简单的加减运算,为此我们需要正确的输入输出多项式。并能够通过他们的运算关系建立相应的函数,使其能过准确的输出结果。为此我们需要通过学过的知识写出简单又正确的c语言程序
2逻辑设计
2.1Status main 程序主函数
NO
图2.1
2.2要求其他子函数不含同类项且指数递减
NO
图2.2
2.3输出多项式的函数
NO
图2.3
2.4多项式求和函数
NO
图2.4
2.5多项式求差函数
NO
图2.5
2.6输入有误指令函数运行过程
NO
NO
图2.6
4详细设计
status CreatPoly(P_Poly*,int); //创建多项式链
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
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*); //删除并释放多项式
运用上述函数进行编程,组建成函数语句,使其正确运行达到目的
5程序编码
可依据上述程序流程设计图编写程序
#include
#include
#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 ("********************\n");
printf ("1.建立多项式\n");
printf ("2.输出多项式\n");
printf ("3.求两个多项式之和(必须先创建),建立和式并输出\n");
printf ("4.求两个多项式之差(必须先创建),建立差式并输出\n");
printf ("5.删除多项式\n");
printf ("6.退出\n");
printf ("********************\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 (;icoef),&(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 (;iexpn;i++)