⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 addandsub.cpp

📁 一次课程设计
💻 CPP
字号:
#include<stdio.h>               /*该文件包含printf()、scanf()等文件*/



typedef struct
{
	int key;                    /*多项式的项次数*/
	signed int num;             /*多项式的项系数*/
}exp;                           /*多项式的项的存储结构*/

/*-------------------多项式的输入函数-------------------------------*/
void cins(exp a[])
/*由多项式指数的降幂建立多项式*/
{
	int i,n;
	printf("-------------------------\n最高次项的次数:");
	scanf("%d",&a[0].key);     /*输入多项式最高次项的系数*/
    printf("-------------------------\n");
	
	n=a[0].key;
	for(i=0;i<=n;i++)          /*输入多项式每一项的系数*/
	{
		a[i].key=n-i;          /*项次数赋值*/
		printf("%d次项系数: ",n-i);
		scanf("%d",&a[i].num); /*项系数赋值*/
		
	}
	printf("\n");
}

/*-------------------多项式的输出函数-------------------------------*/
void couts(exp a[])
/*由多项式指数的降幂输出多项式a[]的表达式*/
{
	int i,b=-1;                         /*标志位b初始值为-1,用于判断结果是否为0*/
	for(i=0;i<=a[0].key;i++)
	{
		if(a[i].num==0) continue;         /*系数为0的项不输出*/
		if(i!=0&&a[i].num>0) printf("+"); /*第一项后,系数为正,则输出加号*/
		if(a[i].key>=2) printf("%d*X^%d",a[i].num,a[i].key);    /*系数输出*/
		else  
			if(a[i].key==1) printf("%d*X",a[i].num); 
			else printf("%d",a[i].num);
		b=1;                              /*置标志位为1*/
	}
	if(b==-1) printf("%d",0);             /*若各项系数均为0,则最后输出0*/
	printf("\n");
}

/*-------------------多项式的加法函数-------------------------------*/
void adds(exp a[],exp b[],exp c[])
/*多项式a和b相加,和存放在c中*/
{
	int i,m,n;                            /*m存放二者最高次数较小的次数,n存放较大的次数*/
	exp A[100],B[100];                    /*A存放最高次数较大的多项式,B存放较小的多项式*/

	if(a[0].key==b[0].key)                /*a、b次数相同时*/
	{
		for(i=0;i<=a[0].key;i++)
		{
			c[i].key=a[i].key;            /*c各项系数为指数相同的各项系数之和*/
			c[i].num=a[i].num+b[i].num;
		}
		return;
	}
	
	if(a[0].key>b[0].key)                 /*a的最高次数大于b时*/
	{
		m=b[0].key;n=a[0].key;            
		for(i=0;i<=n;i++)                 /*A=a*/
			A[i]=a[i];
		for(i=0;i<=m;i++)                 /*B=b*/
			B[i]=b[i];
	}
	else                                  /*b的最高次数大于a时*/
	{
		n=b[0].key;m=a[0].key;
		for(i=0;i<=m;i++)                 /*B=a*/
			B[i]=a[i];
		for(i=0;i<=n;i++)                 /*A=b*/
			A[i]=b[i];
	}

	for(i=0;i<n-m;i++)                    /*c的前(n-m)项为A的前(n-m)项*/
	{
		c[i].key=A[i].key;
		c[i].num=A[i].num;
	}
	for(i=0;i<=m;i++)                     /*c的后m项为A、B之和*/
	{
		c[n-m+i].key=B[i].key;
		c[n-m+i].num=A[n-m+i].num+B[i].num;
	}
}

/*-------------------多项式的减法函数-------------------------------*/
void subs(exp a[],exp b[],exp c[])
/*多项式a和b相减,差存放在c中*/
{
	int i,m,n;                            /*m存放二者最高次数较小的次数,n存放较大的次数*/

	if(a[0].key==b[0].key)                /*a、b次数相同时*/      
	{
		for(i=0;i<=a[0].key;i++)          /*c各项系数为指数相同的各项系数之差*/
		{
			c[i].key=a[i].key;
			c[i].num=a[i].num-b[i].num;
		}
		return;
	}

	if(a[0].key>b[0].key)                 /*a的最高次数大于b时*/
	{
		m=b[0].key;
		n=a[0].key;
		
		for(i=0;i<n-m;i++)                /*c的前(n-m)项为a的前(n-m)项*/
		{
			c[i].key=a[i].key;
		    c[i].num=a[i].num;
		}

		for(i=0;i<=m;i++)                 /*c的后m项为a、b之差*/
		{
		    c[n-m+i].key=b[i].key;
	        c[n-m+i].num=a[n-m+i].num-b[i].num;
		}
	}
	else                                  /*a的最高次数小于b时*/
	{
		n=b[0].key;
		m=a[0].key;
		
		for(i=0;i<n-m;i++)                /*c的前(n-m)项系数为a的前(n-m)项系数的相反数*/
		{
			c[i].key=b[i].key;
		    c[i].num=0-b[i].num;
		}
		for(i=0;i<=m;i++)                 /*c的后m项为a、b之差*/
		{
		    c[n-m+i].key=a[i].key;
	        c[n-m+i].num=a[i].num-b[n-m+i].num;
		}
	}
	
}

/*############################主函数################################*/
void main(void)
{
	int i,n;
	char d;
	exp a[100],b[100],c[100];             /*a存放第一个多项式,b存放第二个多项式,c存放结果*/

	printf("*************************\n  一元多项式的加减计算\n*************************\n\n第一个多项式输入:\n");       
	cins(a);                              /*第一个多项式输入*/
	printf("第二个多项式输入:\n");
	cins(b);                              /*第二个多项式输入*/
	printf("执行的运算(+/-):");
	scanf("%s",&d);                       /*选择执行的运算*/
	printf("=========================\n\n");

	if(d=='+') adds(a,b,c);               /*输入“+”,执行加法*/
	else 
		if(d=='-') subs(a,b,c);           /*输入“-”,执行减法*/
		else                              /*否则,输入错误*/
		{
			printf("输入错误!\n");return;
		}
	
	printf("\n运算结果输出:\n");
	printf("-------------------------\n");
	printf("各项系数:\n");
	printf("-------------------------\n");
	n=c[0].key;
	for(i=0;i<=n;i++)                     /*输出运算结果的各项系数*/         
		printf("%d次项系数: %d\n",n-i,c[i].num);
	printf("\n-------------------------\n");
	printf("表达式:\n");
	printf("-------------------------\n");
	printf("第一个多项式:");
	couts(a);                             /*输出第一个多项式的表达式*/
	printf("第二个多项式:");
	couts(b);                             /*输出第二个多项式的表达式*/
	printf("执 行  运 算:%c\n",d);	
	printf("运 算  结 果:");
	couts(c);                             /*输出运算结果的表达式*/
	printf("\n继续进行多项式计算(Y/N) ?");
	scanf("%s",&d);
	if(d=='Y'||d=='y')
	{
		printf("\n\n\n");
		main();
	}
	else return;
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -