该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
实验二 一元多项式计算**
任务:能够按照指数降序排列建立并输出多项式;
能够完成两个多项式的相加、相减,并将结果输入;
在上交资料中请写明:存储结构、多项式相加的基本过程的算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;
源代码:
#include "stdio.h"
#include "string.h"
#include "conio.h"
#include "process.h"
#define maxpoly 100
//读入两个多项式的系数的函数,从屏幕输入,xs1用来保存第一个多项式系数,xs2用来保存第2个多项式系数,返回的是系数的最高次
int readinpoly(int *xs1,int *xs2,int *cs1,int *cs2)
{
memset(xs1,0,sizeof(xs1));
memset(xs2,0,sizeof(xs2));
int i;//分别表示次数1和次数2
printf("请输入多项式1的次数:\n");
scanf("%d",cs1);
printf("请输入多项式2的次数:\n");
scanf("%d",cs2);
if(*cs1>=maxpoly||*cs2>=maxpoly)
{
printf("对不起,你输入的次数已经超过了最大次数为99次的限制");
return -1;
}
printf("请输入多项式1的系数(从低次往高次):\n");
for(i=0;i<=*cs1;i++)
scanf("%d",xs1+i);
printf("请输入多项式2的系数(从低次往高次):\n");
for(i=0;i<=*cs2;i++)
scanf("%d",xs2+i);
return *cs1>=*cs2?*cs1:*cs2;
}
//根据系数和次数来输出多项式,xs保存的是系数,cs表示最高次数
void outputpoly(int *xs,int cs)
{
int i,j;
// bool flag=false;
printf("\n");
for(i=0;i<=cs;i++)
if(xs)//系数不为0
{
if(i>1)//次数大于1
printf("%dx^%d",xs,i);
else//次数小于等于1
{
if(i==1)//次数为1
{
if(xs!=1)
printf("%dx",xs);
else
printf("x");
}
else//次数为0
printf("%d",xs[0]);
}
break;
}
for(j=i+1;j<=cs;j++)
if(xs[j])//系数不为0
{
if(xs[j]==1)
{
if(j>1)
printf("+x^%d",j);
if(j==1)
printf("+x",j);
}
else
{
if(j>1)
printf("+%dx^%d",xs[j],j);
if(j==1)
printf("+%dx",xs[j]);
}
}
printf("\n");
}
char welcome()
{
char choice;
system("color d");
printf("\t*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
printf("\t| |\n");
printf("\t* 说明 *\n");
printf("\t| |\n");
printf("\t* 1.此代码来自南方飘雪计算机论坛,获取更多源码请登陆 *\n");
printf("\t| |\n");
printf("\t* http://nfpx.uu1001.com *\n");
printf("\t| |\n");
printf("\t* 2.本程序将实现100级以内一次多项式的加减法,请选择功能: *\n");
printf("\t| |\n");
printf("\t* a.加法 b.减法 c.退出 *\n");
printf("\t| |\n");
printf("\t*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
printf("===============================================================================\n");
scanf("%c",&choice);
choice=choice
return choice;
}
//多项式相加的函数,xs1和xs2分别用来保存两个多项式的系数,maxz表示多项式的最高次数,outst用来保存结果系数,
//各个系数的次数都是从低次到高次排列
int cal(int *xs1,int *xs2,int maxz,int *outrt,char bz)
{
int i;
if(bz=='a')
for(i=0;i<=maxz;i++)//实现系数相加
outrt=xs1+xs2;
if(bz=='b')
for(i=0;i<=maxz;i++)//实现系数相加
outrt=xs1-xs2;
for(i=maxz;i>=0;i--)
if(outrt)
return i;
}
void main()
{
int xs1[maxpoly]={0};
int xs2[maxpoly]={0};
int xs3[maxpoly]={0};
int cs1,cs2,maxcs;
char choice;
choice=welcome();
if(choice!='a'&&choice!='b'&&choice!='c')
{
printf("你选择了无效键!");
getchar();
return ;
}
else
{
system("cls");
system("color a");
maxcs=readinpoly(xs1,xs2,&cs1,&cs2);
if(maxcs>0)//如果最高次数不为0
{
printf("多项式1为:");
outputpoly(xs1,cs1);
printf("多项式2为:");
outputpoly(xs2,cs2);
printf("最高次数%d\n",maxcs);
maxcs=cal(xs1,xs2,maxcs,xs3,choice);
if(choice=='a')
printf("多项式1+多项式2=:\n");
else
printf("多项式1-多项式2=:\n");
outputpoly(xs3,maxcs);
}
}
getchar();
}
源代码下载:
http://nfpx.uu1001.com/read.php?tid=59
来自南方飘雪计算机论坛.