PTA 02-线性结构2 一元多项式的乘法与加法运算 (20分)

本文介绍了一种使用C语言实现的一元多项式乘法与加法运算的方法。通过定义结构体来存储多项式的系数和指数,并实现了读取输入、计算多项式加法和乘法的功能。

原题地址

https://pta.patest.cn/pta/test/15/exam/4/question/710

 

5-2 一元多项式的乘法与加法运算   (20分)

设计函数分别求两个一元多项式的乘积与和。

输入格式:

输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

输出格式:

输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0

输入样例:

4 3 4 -5 2  6 1  -2 0
3 5 20  -7 4  3 1

输出样例:

15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0


/*
评测结果
时间	结果	得分	题目	编译器	用时(ms)	内存(MB)	用户
2017-07-08 15:53	答案正确	20	5-2	gcc	3	1	
测试点结果
测试点	结果	得分/满分	用时(ms)	内存(MB)
测试点1	答案正确	12/12	3	1
测试点2	答案正确	4/4	2	1
测试点3	答案正确	2/2	2	1
测试点4	答案正确	2/2	1	1

框架
-	读入
-	处理
	-- 处理加法
	-- 处理乘法
-	输出

结构:结构数组

	系数
	幂数
	当前下标
	最大下标

量
	存第一行
	存第二行
	存第一行第二行的和
	存当前乘法结果
	存之前的结果
*/
#include<stdio.h>
#define MAXLEN 10000
struct item{
	int coefficient;
	int index;
};

typedef struct multinomial{
	struct item data[MAXLEN];
	int len;
}MN;

MN mulA,mulB,mulSum,mulProduct;

void MnCopyFirstToSecond(MN *a,MN *b)
{
	int i,j;
	b->len=a->len;
	for(i=0;i<a->len;i++)
	{
		b->data[i].coefficient=a->data[i].coefficient;
		b->data[i].index=a->data[i].index;
	}
}
void CalcPlus( MN mA,MN mB,MN *mSum)
{
	int i=0,j=0;
	mSum->len=0;
	while(i<mA.len && j<mB.len) //两个串都没结束 
	{
		if(mA.data[i].index>mB.data[j].index){
			if(mA.data[i].coefficient==0){//提防0系数 
				i++;
				continue;
			}
			mSum->data[mSum->len].coefficient=mA.data[i].coefficient;
			mSum->data[mSum->len].index=mA.data[i].index;
			mSum->len++;
			i++;
		}
		else if(mB.data[j].index>mA.data[i].index){
			if(mB.data[j].coefficient==0){//提防0系数 
				j++;
				continue;
			}
			mSum->data[mSum->len].coefficient=mB.data[j].coefficient;
			mSum->data[mSum->len].index=mB.data[j].index;
			mSum->len++;
			j++;
		}
		else if(mA.data[i].index==mB.data[j].index){
			if(mA.data[i].coefficient+mB.data[j].coefficient==0){//考虑相加得0的情况 
				i++;
				j++;
				continue;	
			} 
			mSum->data[mSum->len].coefficient=mA.data[i].coefficient+mB.data[j].coefficient;
			mSum->data[mSum->len].index=mA.data[i].index;
			mSum->len++;
			i++;
			j++;
		}
	}
	
	while(i<mA.len){//B结束A没结束 
			if(mA.data[i].coefficient==0)
			{
				i++;
				continue;
			}
			mSum->data[mSum->len].coefficient=mA.data[i].coefficient;
			mSum->data[mSum->len].index=mA.data[i].index;
			mSum->len++;
			i++;
	}	
	
	while(j<mB.len){//A结束B没结束 
			if(mB.data[j].coefficient==0){
				j++;
				continue;
			}
			mSum->data[mSum->len].coefficient=mB.data[j].coefficient;
			mSum->data[mSum->len].index=mB.data[j].index;
			mSum->len++;
			j++;
	}	
	
}


void CalcMultiply(MN a,MN b,MN *res)
{
	MN currentResult,tempSum;
	currentResult.len=0;
	tempSum.len=0;
	int i=0,j=0;
	while(i<a.len){//多项式逐项相乘 
		while(j<b.len){
			currentResult.data[currentResult.len].coefficient=a.data[i].coefficient*b.data[j].coefficient;
			currentResult.data[currentResult.len].index=a.data[i].index+b.data[j].index;
			currentResult.len++;
			j++;
		}
		CalcPlus(currentResult,tempSum,res);
		MnCopyFirstToSecond(res,&tempSum);//CalcPlus()函数中第二个参数与第三个不能相同,故把最近一次累加的结果复制到tempSum中去。 
		currentResult.len=0;
		i++;
		j=0;
		
	}

}


void GetInput()
{
	int i;
	
	scanf("%d",&i);
	mulA.len=i;
	for(i=0;i<mulA.len;i++)
		scanf("%d %d",&mulA.data[i].coefficient,&mulA.data[i].index);
		
	scanf("%d",&i);
	mulB.len=i;
	for(i=0;i<mulB.len;i++)
		scanf("%d %d",&mulB.data[i].coefficient,&mulB.data[i].index);
}

void PrintResult(MN m)
{
	if(m.len==0)
	{
		printf("0 0");
		return;
	}
	int i;
	for	(i=0;i<m.len;i++)
	{			
			printf("%d %d",m.data[i].coefficient,m.data[i].index);
			if(i!=m.len-1)
				putchar(' ');
			
	}
}

int main()
{
	GetInput();
	CalcMultiply(mulA,mulB,&mulProduct);
	PrintResult(mulProduct);
	putchar('\n');
	CalcPlus(mulA,mulB,&mulSum);
	PrintResult(mulSum);
}

  

转载于:https://www.cnblogs.com/gk2017/p/7140508.html

在车辆工程中,悬架系统的性能评估和优化一直是研究的热点。悬架不仅关乎车辆的乘坐舒适性,还直接影响到车辆的操控性和稳定性。为了深入理解悬架的动态行为,研究人员经常使用“二自由度悬架模型”来简化析,并运用“传递函数”这一数学工具来描述悬架系统的动态特性。 二自由度悬架模型将复杂的车辆系统简化为两个独立的部:车轮和车身。这种简化模型能够较准确地模拟出车辆在垂直方向上的运动行为,同时忽略了侧向和纵向的动态影响,这使得工程师能够更加专注于优化垂直动态相关的性能指标。 传递函数作为控制系统理论中的一种工具,能够描述系统输入和输出之间的关系。在悬架系统中,传递函数特别重要,因为它能够反映出路面不平度如何被悬架系统转化为车内乘员感受到的振动。通过传递函数,我们可以得到一个频率域上的表达式,从中析出悬架系统的关键动态特性,如系统的振幅衰减特性和共振频率等。 在实际应用中,工程师通过使用MATLAB这类数学软件,建立双质量悬架的数学模型。模型中的参数包括车轮质量、车身质量、弹簧刚度以及阻尼系数等。通过编程求解,工程师可以得到悬架系统的传递函数,并据此绘制出传递函数曲线。这为评估悬架性能提供了一个直观的工具,使工程师能够了解悬架在不同频率激励下的响应情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值