You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用除法运算符未获预期结果,C++球体面积计算问题求助

问题分析与解决

嘿,刚看完你的代码和问题,马上就找到问题根源啦!咱们一步步来拆解:

核心错误:整数除法导致计算偏差

你得到的球体体积(你说的“面积”其实是体积哦)不对,问题出在这行代码里的(4/3)

sphr_area = (4/3) * pi * user_nbr * user_nbr * user_nbr;

在C++里,两个整数相除会执行整数除法,也就是直接舍弃小数部分。43都是整数,所以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/31.333333...,乘以3.14*3375就会得到你预期的14130啦!

代码里的其他小问题(顺便帮你指出来)

  1. 未声明变量+cin语句错误
    你写了cin >> user_nbr, sqr_len, circ_rad, sphr_rad;,但sqr_lencirc_radsphr_rad这三个变量根本没在代码里声明过!而且这里的逗号是C++的逗号运算符,cin只会读取user_nbr的值,后面的部分完全无效。直接改成:
    cin >> user_nbr;
    
  2. 术语小错误:你提到的“球体面积”其实是球体体积,球体表面积的公式是4 * pi * user_nbr * user_nbr,不过看你的预期结果是体积的计算值,这个不影响功能,只是术语上的小问题~
  3. 变量可读性优化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

火山引擎 最新活动