通关旅

softgamer 的痕迹
posts - 12, comments - 0, trackbacks - 0, articles - 1

C++体会 -- 类型

Posted on 2007-02-02 13:48 softgamer 阅读(88) 评论(0)  编辑  收藏
我在使用C++时有一些体会,相信大家都会的。我写出来也是和大家分享一下
1。在C++中数据类型float和double.
     同类型为float的变量相比,类型为double的变量可保存的值较大且较为准确,因此我比较喜欢使用double而不是float.这里有一个重要的点要说一下:比如我们定义两个变量
     int sum = 1230;
     int score = 230;
     double avrg  = 0.0f;
     如果我们用:
     avrg = sum/score;
     其中(sum/score)这个计算结果是一个整型, 因为sum和score都是整型。在这样的计算中。小数部分会
    丢失,因此C++提供了一元强制类型转换
     avrg = static_cast< double > ( sum ) / score;

    static_cast < double > (), 这位sum创建了一个临时性的浮点数副本,这就是我们说的显式转换。对比显式转换,当然就是隐式转换,例如当score 被提升为double后,开始执行浮点除法运算。
    然后我们输出
    cout << "aver is " << setprecision(2)
            <<setiosflags( ios::fixedm ios::showpoint )
            << avrg <<endl;
   setprecision(2) 是被称作参数化操作元的东西,要加一条预编译指令
   #include <iomanip>
   endl是一个非参数化操纵元,它不需要<iomanip>头文件,如果未指定精度,浮点值会采用6个精度(默认)输出。
   注意不要愚蠢的想比较两个浮点数是否相等,应该测试两个浮点数的差值的绝对值是否小于一个指定的小值。这一点在游戏的坐标跟踪中常被用到。

# include <iostream>

using std::cout;
using std::cin;
using std::endl;
using std::ios;

# include <iomanip>

using std::setprecision;
using std::setiosflags;

int main()
{
    int score = 0;
    int sum = 0;
    int count = 0;

    double avrg;

    cout<<"enter score - to end: ";
    cin>>score;
    while ( score != -1 )
    {
        sum = sum + score;
        count = count + 1;
        cout<< "enter score , -1 to end : ";
        cin>>score;
    }

    if( count != 0 )
    {
        avrg = static_cast< double > (sum ) / count;
        cout << "avrg is " << setprecision(2)
            << setiosflags(ios::fixed | ios::showpoint )
            << avrg << endl;
    }
    else
    {    cout << " NO!!!!!";

    }
    return 0;
}

enter score - to end: 75
enter score , -1 to end : 93
enter score , -1 to end : 23
enter score , -1 to end : 98
enter score , -1 to end : 43
enter score , -1 to end : 54
enter score , -1 to end : 56
enter score , -1 to end : 2334
enter score , -1 to end : 45
enter score , -1 to end : 43
enter score , -1 to end : 454
enter score , -1 to end : 232
enter score , -1 to end : -1
avrg is 295.83


 

只有注册用户登录后才能发表评论。


网站导航: