C++ 使用除数运算符时未获得预期结果

C++ 使用除数运算符时未获得预期结果,c++,C++,我发现调试这行代码很困难。正确的结果应该是14130,但当输入是球体面积的15时,我得到的是10597.5。代码如下: // HW1, Q2 #include <iostream> using namespace std; int main() { // declare variables for radius, length and formulas. int user_nbr; double pi, sqr_area, circ_area, sphr_

我发现调试这行代码很困难。正确的结果应该是14130,但当输入是球体面积的15时,我得到的是10597.5。代码如下:

// HW1, Q2
#include <iostream>
using namespace std;
int main() {

    // declare variables for radius, length and formulas.

    int user_nbr;
    double pi, sqr_area, circ_area, sphr_area;
    pi = 3.14;

    cout<<"Hi, enter an integer: "<<endl;

    // write in user data into declared variables
    cin >> user_nbr, sqr_len, circ_rad, sphr_rad;
    sqr_area = user_nbr * user_nbr;
    circ_area = pi * user_nbr * user_nbr;
    sphr_area = (4/3) * pi * user_nbr * user_nbr * user_nbr;

    // displays answers to user
    cout<<"\nThe area of a square with length "
        <<user_nbr<<" is "<<sqr_area<<". The area "
        <<"of a circle with radius "<<user_nbr
        <<" is "<<circ_area<<". Lastly, the area "
        <<"of a sphere with radius "<<user_nbr
        <<" is "<<sphr_area<<".";

return 0;
}
//HW1,Q2
#包括
使用名称空间std;
int main(){
//声明半径、长度和公式的变量。
int user_nbr;
双pi、sqr_区、circ_区、sphr_区;
pi=3.14;

难道这就是你所期望的吗

[cling]$ double sphr_area = 4/3;
[cling]$ sphr_area
(double) 1.0000000
否则就是类型的误用,而不是操作顺序问题


同样对于π,您希望使用
math.h
常量,如果可用(请参见)

这是您所期望的吗

[cling]$ double sphr_area = 4/3;
[cling]$ sphr_area
(double) 1.0000000
否则就是类型的误用,而不是操作顺序问题


同样对于π,您希望使用
math.h
常数,如果可用(请参见)

4/3
的结果是
int
,因此它是
1
,使用:

sphr_area = (4.0/3.0) * pi * user_nbr * user_nbr * user_nbr;

当整数被除时,
/
运算符的结果是丢弃任何小数部分的代数商。如果商
a/b
是可表示的,则表达式
(a/b)*b+a%b
应等于
a


注:这通常称为“向零截断”


ISO/IEC 9899:TC3

4/3
的结果是一个
int
,因此它是
1
,使用:

sphr_area = (4.0/3.0) * pi * user_nbr * user_nbr * user_nbr;

当整数被除时,
/
运算符的结果是丢弃任何小数部分的代数商。如果商
a/b
是可表示的,则表达式
(a/b)*b+a%b
应等于
a


注:这通常称为“向零截断”


< >强> ISO/IEC 9899:TC3

你知道C++中的“4/3”是1吗?你还期望“CIN > UrSynBR,SqryLeN,CycCyrad,SpRyrad”。该做什么?这不是编程问题的核心,但仍然相关:球体的面积是4*pirr。你的公式,正如下面的答案所修正的,给出了体积。@SamVarshavchik现在你提出了它,是的。它变成了1,而不是1.33,因为操作是两个整数。对于你的第二个问题,我希望用户输入被写入n进入变量>右边@ RealStimeMeNIC-ZE-谢谢你的指导,我的教授这样问,所以我会把它原封不动。也许她犯了一个错误。不,这不是C++如何工作的。应该是“CIR> UrSnBR>>SqryLe>>CrcSrRad>SPRYRAD;”你知道C++中的“4/3”是1吗?“cin>>用户编号、sqr\U len、circ\U rad、sphr\U rad"该做什么?这不是编程问题的核心,但仍然相关:球体的面积是4*pirr。你的公式,正如下面的答案所修正的,给出了体积。@SamVarshavchik现在你提出了它,是的。它变成了1,而不是1.33,因为操作是两个整数。对于你的第二个问题,我希望用户输入被写入n进入变量>右边@ RealStimeMeNIC-ZE-谢谢你的指导,我的教授这样问我,所以我会把它原封不动。也许她犯了一个错误。不,这不是C++如何工作的。应该是“CIR> UrnBNBR> SqryLe> > CycRrad > SpRyrad;。它不是隐式转换的,除法只是作为整数除法进行。结果也将是

1
,而不是
0
。这也不是OP的唯一错误。@anastaciu没有真正的转换,因为除法不是先计算1.333…然后通过对其进行加层来进行转换。整数除法的规则是直接进行除法给出1。我不确定这个区别实际上是必要的,但是有一种可能性,C++标准中的一些规则取决于这里没有转换。@ AnasaCuu的放置。00后面的4和3修复了这个问题!谢谢!但是我怎么能通过添加手动转换操作数来解决这个问题?教授明确地要求用户输入是一个整数。最后,通过C++规则,整个公式应该转换成一个双,因为在操作中至少有一个加倍,对吗?我不明白为什么4/3没有屈服1.33而不是1。@ YokoKoko,你很欢迎我的朋友,你可以看到你帮助火花DIS。关于整数除法的讨论。@YokoKoko The
/
就是这样一个运算符。它的操作数是
4
3
,这两个操作数的类型都是
int
(因为它们不包含使其成为双
的点)因此,
/
的计算是在
int
类型中进行的。在计算中如何进一步使用结果并不重要。它不是隐式转换的,除法只是作为整数除法进行。结果也是
1
,而不是
0
。这也不是OP唯一的错误。@anastaciu并不是真正的转换,因为除法不首先计算1.333…然后通过它来转换它。整数除法的规则直接给出1。我不确定这个区别实际上是必要的,但是有可能在C++标准中的一些规则取决于这里没有转换。ING。00后面4和3修正了这个问题!谢谢!但是我怎么能解决这个问题,增加手动转换操作数?教授还明确要求用户输入是一个整数。最后,通过C++规则,整个公式应该转换成一个双,因为在操作中至少有一个加倍,R。是吗?我只是不明白为什么4/3不能产生1.33而不是1。@YokoKoko,非常欢迎你,我的朋友,因为你可以看到你帮助引发了一场关于整数除法的讨论。@YokoKoko The
/
就是这样一个运算符。它的操作数是
4
3
,这两个都有类型