2 sinat 17087475 sinat_17087475 于 2014.10.30 19:53 提问

初学者关于C++的一个疑问

今天在学校做上机课,编写了一个输入圆半径然后计算圆的周长面积以及对应球体体积的小程序。本来只是小试牛刀,没想到出了一个百思不得其解的问题,代码如下:

#include <stdio.h>
#include <iomanip>
#include <iostream>

using namespace std;

int main()
{
    const double pi = 3.14;
    double r;
    double c;
    double s;
    double v;
    cout << "Please input a number to be the radius: ";
    cin >> r;
    c = 2 * pi * r;
    s = pi * r * r;
    v = 4 / 3 * pi * r * r * r; //注意此行
    cout << c << endl;
    cout << s << endl;
    cout << v << endl;
    system("pause");
    return 0;
}

此时输出的v值似乎自动忽略了前面的 4/3……如果将4改成4.0或者3改成3.0则输出正常!百思不得其解,求大神解答~~

3个回答

qq_14840819
qq_14840819   2014.10.30 20:10
已采纳

因为没有给4和3数据类型,默认的4,3都是整形,所以相除的话,结果是1,1*任何数都是它本身,所以没用
加上4.0,或者3.0以后表示把它强制转换为浮点型,所以结果是小数

sinat_17087475
sinat_17087475 忘了采纳,不好意思~
大约 3 年之前 回复
sinat_17087475
sinat_17087475 谢谢!从来不知道数据还有这种讲究额(*^__^*)
大约 3 年之前 回复
u011651799
u011651799   2014.11.02 14:35

c++中规定整数与整数相除,结果是一个整数;浮点数与整数,整数与浮点数,浮点数与浮点数相除,结果都是浮点数。4与3都是整数,所以4/3 = 1;

sinat_17087475
sinat_17087475 谢谢!已经有答案了~~
大约 3 年之前 回复
happyparrot
happyparrot   Ds   Rxr 2014.11.05 17:14

4/3会被认为是一个整除操作,结果就是1了。
4.0/3会被认为是一个除法操作,结果会出来小数。
所以,千万不要随便让两个整数类型相除,除非你确定是需要整除。

sinat_17087475
sinat_17087475 谢谢!已经有答案了~~
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!