Launching Devices

Description

现有一发射装置,装置可抽象为由物块A、B(不计体积)组成的简单系统,A、B在同一直线上。初始时刻启动发动机程序,发动机将持续对A、B做功。发动机对A、B做功均转化为A、B的动能。一段时间后关闭发动机程序,此时A、B均做匀速直线运动且该系统合外力为0。A、B间发生的碰撞均为完全弹性碰撞。

A、B稳定时,取出物块A,使物块B撞击发射装置边界处挡板,挡板与物块的碰撞为完全非弹性碰撞。现希望挡板所受冲量尽可能大,请设计程序求出该冲量的大小。

Input

一行,共四个数据,分别为A、B的质量与发动机对A、B所做的功。

Output

一行,一个数据,即所求冲量大小。

Sample Input

1 1 2 0.5

Sample Output

2.00

Hint

若A、B发生碰撞,由动量守恒定律与能量守恒定律可得,碰撞后A的速度为1,B的速度为2,则B动量大小为2。与挡板碰撞后B的动量为0,由动量守恒定律可得挡板受到冲量大小为2,即为所求最大冲量。

保证输入数据均为区间(0,100]内的浮点数。

输出数据保留两位小数。

# include<stdio.h>
# include<math.h>
/*现有一发射装置,装置可抽象为由物块A、B(不计体积)组成的简单系统,A、B在同一直线上。
初始时刻启动发动机程序,发动机将持续对A、B做功。发动机对A、B做功均转化为A、B的动能。
一段时间后关闭发动机程序,此时A、B均做匀速直线运动且该系统合外力为0。A、B间发生的碰撞均为完全弹性碰撞。
A、B稳定时,取出物块A,使物块B撞击发射装置边界处挡板,挡板与物块的碰撞为完全非弹性碰撞。
现希望挡板所受冲量尽可能大,请设计程序求出该冲量的大小。
Input行,共四个数据,分别为A、B的质量与发动机对A、B所做的功。
Output一行,一个数据,即所求冲量大小。
Sample Input1 1 2 0.5
Sample Output2.00
Hint
若AB发生碰撞,由动量守恒定律与能量守恒定律可得,碰撞后A的速度为1,B的速度为2,则B动量大小为2。
与挡板碰撞后B的动量为0,由动量守恒定律可得挡板受到冲量大小为2,即为所求最大冲量。
保证输入数据均为区间(0,100]内的浮点数。
输出数据保留两位小数。*/
int main()
{
	float ma, mb, wa, wb, va, vb, va1, vb1, va2, vb2, p;//直接用公式求出碰后速度,从而得出动量(相向1和同向2都算,比绝对值 
	scanf("%f %f %f %f", &ma, &mb, &wa, &wb);//故有三种情况,未碰(反向,同向碰,相向碰 
	va = pow((wa * 2 / ma), 0.5);
	vb = pow((wb * 2 / mb), 0.5);
	vb1 = ((mb - ma) * vb + 2 * ma * va) / (ma + mb);//永远以a向为正 ,这个算同向 
	vb2 = ((mb - ma) * -vb + 2 * ma * va) / (ma + mb);//相向 
	p = fabs(mb * vb1);//判断动量最大值

	if (p < fabs(mb * vb2)) 
	{
		p = fabs(mb * vb2);	
	}
	if (p < fabs(mb * vb))
	{
		p = fabs(mb * vb);//题目未说明一定会发生碰撞(反向时,所以要判断反向是动量大小 
	}
	printf("%.2f\n", p);
	
	return 0;
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值