使用除法运算符未获预期结果,C++球体面积计算问题求助
问题分析与解决
嘿,刚看完你的代码和问题,马上就找到问题根源啦!咱们一步步来拆解:
核心错误:整数除法导致计算偏差
你得到的球体体积(你说的“面积”其实是体积哦)不对,问题出在这行代码里的(4/3):
sphr_area = (4/3) * pi * user_nbr * user_nbr * user_nbr;
在C++里,两个整数相除会执行整数除法,也就是直接舍弃小数部分。4和3都是整数,所以4/3的结果是1,而不是你期望的1.333...。用1去计算的话:1 * 3.14 * 15*15*15 = 3.14 * 3375 = 10597.5,正好是你得到的错误结果。
解决办法
把4/3改成浮点数除法,只要其中一个数是浮点数就行:
- 写成
4.0/3 - 或者
4/3.0 - 也可以直接写
1.333333(但用4.0/3更准确)
修正后这行代码变成:
sphr_area = (4.0/3) * pi * user_nbr * user_nbr * user_nbr;
再计算的话,4.0/3是1.333333...,乘以3.14*3375就会得到你预期的14130啦!
代码里的其他小问题(顺便帮你指出来)
- 未声明变量+cin语句错误:
你写了cin >> user_nbr, sqr_len, circ_rad, sphr_rad;,但sqr_len、circ_rad、sphr_rad这三个变量根本没在代码里声明过!而且这里的逗号是C++的逗号运算符,cin只会读取user_nbr的值,后面的部分完全无效。直接改成:cin >> user_nbr; - 术语小错误:你提到的“球体面积”其实是球体体积,球体表面积的公式是
4 * pi * user_nbr * user_nbr,不过看你的预期结果是体积的计算值,这个不影响功能,只是术语上的小问题~ - 变量可读性优化:
user_nbr这个名字有点模糊,改成radius或者input_num会更清晰,别人看代码的时候一眼就知道这个变量是用来存半径的。
修正后的完整代码
// HW1, Q2 #include <iostream> using namespace std; int main() { // declare variables for radius, length and formulas. int radius; double pi = 3.14, sqr_area, circ_area, sphr_volume; cout << "Hi, enter an integer: " << endl; // write in user data into declared variables cin >> radius; sqr_area = radius * radius; circ_area = pi * radius * radius; sphr_volume = (4.0/3) * pi * radius * radius * radius; // displays answers to user cout << "\nThe area of a square with length " << radius << " is " << sqr_area << "." << " The area of a circle with radius " << radius << " is " << circ_area << "." << " Lastly, the volume of a sphere with radius " << radius << " is " << sphr_volume << "."; return 0; }
内容的提问来源于stack exchange,提问作者RoiMinuit




