1 条题解
-
0
题目分析
该程序解决的是在封闭系统中,将一定质量、特定温度的水和冰混合后,计算最终平衡状态下冰和水的质量以及混合物温度的问题。涉及的物理知识包括比热容和熔化热,通过比较热量的大小来确定混合后的状态。
解题思路
- 输入处理:使用
scanf
函数持续读取水的质量mw
、冰的质量mi
、水的温度tw
和冰的温度ti
。当输入的四个值之和为0时,结束程序。在读取冰的温度ti
后,将其取相反数,以便后续计算。 - 热量比较与计算:
- 计算水从初始温度降温到释放的热量,以及冰从初始温度(取相反数后)升温到吸收的热量。
- 情况一:水释放的热量大于冰升温吸收的热量():
- 若,说明水释放的热量不仅能让冰升温到,还能使所有冰融化并且让混合物升温。此时,最终冰的质量,水的质量,最终温度$res_t = \frac{m_w \times t_w \times 4.19 - m_i \times t_i \times 2.09 - 335 \times m_i}{(m_i + m_w) \times 4.19}$。
- 若,说明水释放的热量只能使部分冰融化。此时,最终冰的质量$res_i = m_i - \frac{m_w \times t_w \times 4.19 - m_i \times t_i \times 2.09}{335}$,水的质量$res_w = m_w + \frac{m_w \times t_w \times 4.19 - m_i \times t_i \times 2.09}{335}$,最终温度。
- 情况二:冰升温吸收的热量大于水释放的热量():
- 若,说明冰升温吸收的热量大于水释放的热量以及水全部凝固成冰释放的热量。此时,最终冰的质量,水的质量,最终温度$res_t = -\frac{m_i \times t_i \times 2.09 - m_w \times t_w \times 4.19 - 335 \times m_w}{(m_w + m_i) \times 2.09}$。
- 若,说明冰升温吸收的热量只能使部分水凝固。此时,最终冰的质量$res_i = m_i + \frac{m_i \times t_i \times 2.09 - m_w \times t_w \times 4.19}{335}$,水的质量$res_w = m_w - \frac{m_i \times t_i \times 2.09 - m_w \times t_w \times 4.19}{335}$,最终温度。
- 结果输出:使用
printf
函数按照指定格式输出最终冰的质量、水的质量和混合物的温度,保留一位小数。
代码实现
#include<iostream> using namespace std; double mw,mi,tw,ti,resi,resw,rest; int main() { while(1) { scanf("%lf %lf %lf %lf",&mw,&mi,&tw,&ti); ti=-ti; if( mw+mi+tw+ti==0.0 ) break; if( mw*tw*4.19>mi*ti*2.09 ) { if( mw*tw*4.19>mi*ti*2.09+335.*mi ) { resi = 0; resw = mw+mi; rest = (mw*tw*4.19-mi*ti*2.09-335.*mi)/((mi+mw)*4.19); } else { resi = mi - (mw*tw*4.19-mi*ti*2.09)/335.; resw = mw + (mw*tw*4.19-mi*ti*2.09)/335.; rest = 0; } } else { if( mi*ti*2.09>mw*tw*4.19+335.*mw ) { resi = mw+mi; resw = 0; rest = -(mi*ti*2.09-mw*tw*4.19-335.*mw)/((mw+mi)*2.09); } else { resi = mi + (mi*ti*2.09-mw*tw*4.19)/335.; resw = mw - (mi*ti*2.09-mw*tw*4.19)/335.; rest = 0; } } printf("%.1f g of ice and %.1f g of water at %.1f C\n",resi,resw,rest); } return 0; }
- 输入处理:使用
- 1
信息
- ID
- 1556
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 3
- 已通过
- 1
- 上传者