为什么会出错,样例都过了

梯形面积(普及B)
今天数学课上,M教同学们计算梯形面积,定义哥打算用计算机来算梯形面积,请你帮他实现程序。已知:梯形面积=(上底+下底)*高/ 2。

输入数据:三个正整数a, b, h,用一个空格隔开,分别表示梯形的上底、下底和高
输出数据:一个实数(保留一位小数),表示梯形的面积。

输入样例:2 7 4
输出样例:18.0

#include<iostream>
using namespace std;

int a,b,h;
int sum;
int main()
{
    freopen("area.in","r",stdin);
      freopen("area.out","w",stdout);
      cin >> a >> b >> h;
      sum=(a+b)*h/2;
      printf("%.1f",sum);
      return 0;
}

关键在这一步:

sum=(a+b) * h/2;

改成

float  sum=(a+b) * h/2.0;

或改成:

float  sum=(a+b) * h * 0.5;

原因:
在c/c++语言中,加、减、乘运算都和小学数学没什么区别
除法就有个特殊之处:两个整型相除,结果是整型!比如3/2结果是1而不是1.5。但整型与浮点型相除,结果是浮点型。如3.0/2或者3/2.0结果都是1.5
所以在除法运算时,一定要考虑好参与运算的两个数是否均为整数。