一个C++菜鸟的问题 float double和float的精度是多少含小数点

通常,当我们需要用到数字时,我们会使用原始的数据类型,如 int、short、long、float 和 double 等等。这些用于数字的数据类型,其可能的值和数值范围,我们已经在 C++ 数据类型一章中讨论过。
我们已经在之前章节的各种实例中定义过数字。下面是一个 C++ 中定义各种类型数字的综合实例:
#include &iostream&
using namespace std;
int main ()
l = 1000000;
f = 230.47;
d = 30949.374;
cout && &short s :& && s && endl;
cout && &int i :& && i && endl;
cout && &long l :& && l && endl;
cout && &float f :& && f && endl;
cout && &double d :& && d && endl;
当上面的代码被编译和执行时,它会产生下列结果:
l :1000000
double d :30949.4
在 C++ 中,除了可以创建各种函数,还包含了各种有用的函数供您使用。这些函数写在标准 C 和 C++ 库中,叫做内置函数。您可以在程序中引用这些函数。
C++ 内置了丰富的数学函数,可对各种数字进行运算。下表列出了 C++ 中一些有用的内置的数学函数。
为了利用这些函数,您需要引用数学头文件 &cmath&。
序号函数 & 描述
1double cos(double);该函数返回弧度角(double 型)的余弦。
2double sin(double);该函数返回弧度角(double 型)的正弦。
3double tan(double);该函数返回弧度角(double 型)的正切。
4double log(double);该函数返回参数的自然对数。
5double pow(double, double);假设第一个参数为 x,第二个参数为 y,则该函数返回 x 的 y 次方。
6double hypot(double, double);该函数返回两个参数的平方总和的平方根,也就是说,参数为一个直角三角形的两个直角边,函数会返回斜边的长度。
7double sqrt(double);该函数返回参数的平方根。
8int abs(int);该函数返回整数的绝对值。
9double fabs(double);该函数返回任意一个十进制数的绝对值。
10double floor(double);该函数返回一个小于或等于传入参数的最大整数。
下面是一个关于数学运算的简单实例:
#include &iostream&
#include &cmath&
using namespace std;
int main ()
short s = 10;
int i = -1000;
long l = 100000;
float f = 230.47;
double d = 200.374;
cout && &sin(d) :& && sin(d) && endl;
cout && &abs(i) :& && abs(i) && endl;
cout && &floor(d) :& && floor(d) && endl;
cout && &sqrt(f) :& && sqrt(f) && endl;
cout && &pow( d, 2) :& && pow(d, 2) && endl;
当上面的代码被编译和执行时,它会产生下列结果:
sin(d) :-0.634939
floor(d) :200
sqrt(f) :15.1812
pow( d, 2 ) :40149.7
在许多情况下,需要生成随机数。关于随机数生成器,有两个相关的函数。一个是 rand(),该函数只返回一个伪随机数。生成随机数之前必须先调用 srand() 函数。
下面是一个关于生成随机数的简单实例。实例中使用了 time() 函数来获取系统时间的秒数,通过调用 rand() 函数来生成随机数:
#include &iostream&
#include &ctime&
#include &cstdlib&
using namespace std;
int main ()
srand( (unsigned)time( NULL ) );
for( i = 0; i & 10; i++ )
j= rand();
cout &&&随机数: & && j && endl;
当上面的代码被编译和执行时,它会产生下列结果:
11个月前 (08-29)
感谢您的支持,我会继续努力的!
扫码打赏,你说多少就多少
记住登录状态
重复输入密码我是c语言菜鸟,请问c++和c=c+1有什么区别啊_百度知道
我是c语言菜鸟,请问c++和c=c+1有什么区别啊
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
White_MouseYBZ
White_MouseYBZ
采纳数:10312
获赞数:20147
单独的c++;和c=c+1;在效果上没有区别。二者的区别有以下几点:1.在表达式中,c++;有两个值,而c=c+1;只有一个值。比如c=3时,c++;在原值3参与表达式运算,运算结束后才使c+1=4,而c=c+1;若在运算前出现,则以c=4参与运算。2.在机器码实现上,c++;效率比c=c+1;高;c++;只读一次内存直接对其中的操作数增1,c=c+1;两读两次c,编译器并不认为等号两边的变量c是同一个变量……
google_loveyou
google_loveyou
采纳数:224
获赞数:485
可以看做是等价的,只不过c++是一种简写语法。c++ 的含义就是 c=c+1;
为你推荐:
其他类似问题
您可能关注的内容
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。【C++】C++语法的一些小问题
最近使用C++开发时,遇到一些小问题,特此记录
自己定义了一个双重vector,就一直报错,例如vector&vector&int&&vec,一直提示cannot appear in
a constant-expression。但是这句话在Visual studio 2010 中却能正常运行。
原因:在Linux下,或者C++的某些编译器或者某些版本的C++标准里(具体是因为哪个引起的,暂时没兴趣去追溯),即嵌套的模板中,最后面的两个尖括号不能挨着写。
思考:为什么?其实理由很简单,因为&&是一个运算符,它是可以被重载的,那么很可能会引起歧义,所以部分标准里就禁止这么做了。以后不论是否会报错,都应该避免这种写法,多打个空格就好啦~
修改:vector& vector&int& &vec
使用ofstream时,会报错no matching function for call to std::basic_ofstream&char,
std::char_traits&char& &::basic_ofstream(std::string&)。
string path = "1.txt";
ofstream out(path);
同样在Visual studio 2010 中能正常运行。
原因:在C++11标准下才支持 ofstream(std::string&)
解决:ofstream out(path.c_str())
不要使用using namespace std在你的代码里。因为std里实现了很多常见的函数,名字也非常普通,比如sort,list等,也许有一天你自己也实现了一个类似的函数,到时候就很容易出现混乱。所以尽量自己写代码加上命名空间,也不要使用类似using namespace std这种省事的写法。
&&符合作为输入输出流时,如果对象是string类型,必须添加头文件#incude&sstream&才不会报错
while (!file.eof()) {
float value_
std::string word_
file && word_tmp && value_
value.push_back(value_tmp);
word.push_back(word_tmp);
5. 要对vector中的自定义类型进行排序,首先需要提供一个函数bool comp(const Interval & a, const Interval & b)来定义类型的排序准则 .然后调用std::sort(intervals.begin(),intervals.end(),comp)写了几个小的测试用例也都通过了,但是当集成在类中的时候编译遇到问题,
Line 30: no matching function for call to 'sort(std::vector&Interval&::iterator, std::vector&Interval&::iterator, &unresolved overloaded function type&)'
刚开始以为是类型不对,改用指针也不行,换用qsort进行排序也不行,折腾了好长时间终于找到资料
原来当comp作为类的成员函数时,默认拥有一个this指针,这样和sort函数所需要使用的排序函数类型不一样。解决方法是将comp改为非成员函数,或者改用静态函数。
6. C++11新增的 to_string函数,使用非常方便,简单查了下:C++11标准增加了全局函数std::to_string,以及std::stoi/stol/stoll等等函数(这几个就是string转int,long,以及long long啦~)
to_string这个函数还是很强大的!
string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val)
不仅int可以转换成string,这些都可以哦~
在使用map时,需要注意,如果使用auto来遍历,如下所示,只是这样操作,改变不了map_samples的值
for (auto sample : map_samples) {
samples.second = 10;;
如果需要修改,则应该加上引用,如下所示
for (auto &sample : map_samples) {
samples.second = 10;;
C++基础::为什么不能cout一个string?
【C++】C++11知识点串讲
【C++】int转换为string的两种方法(to_string、字符串流)
C++ string大小写转换以及transform,tolower,toupper,用法
C++数值类型与string的相互转换
没有更多推荐了,Posts - 70,
Articles - 0,
Comments - 514
更专注、更自由!
09:47 by ☆Ronny丶, ... 阅读,
最近在看C++Primer第5版,先前已经看过第4版,但是发现第5版在整个知识布局与个别知识的讲解上跟第4版差别还是挺大的,尤其是新增了C++11的内容,正如孟岩老师在第5版前言中所讲:&现在能够以新的C++11风格开发实践的人是凤毛麟角,如果能够纯熟的运用C++11的新特征、新机制,那么就能够形成一种简洁优雅的C++编程风络,开发会变得更高效,更高质&。
所以正好借助第5版来重新学习巩固C++的知识。《C++的那些事》这个系列,将会以知识碎片的形式记录我在学习过程中一些知识重点。
二、关于C++的学习
个人身为C++菜鸟,自然是没有任何经验之谈,这里摘录C++Primer5ED前言里一些个人以为很有道理的观点。
1,学习语言的一个境界是把自己想象成编译器。
2,使用C++语言的&两面性&观点。C++正在走向完美,所以,C++语言值得学习(甚至研究)。这些知识可以成为一切编程的基础。然而在实践中,不必全面地使用C++语言的各种特性,而应根据工程项目实际情况,适当取舍(譬如动态类型信息、虚拟继承、异常等特性的使用)。通常只鼓励使用C++语言的一个子集。
关于第2点,个人是相当的认同,C++的一些高级特性,确实只有在一些库例程中才有体现,一般工程开发中很少能用得上。所以在学习C++的时候,开始不必对一些语法细节或高级技法过于追求完美,可以先知其大概,在以后工作学习中再逐渐加深认识。
三、数据与类型
1,任何一门编程语言都是由一些基本组件来构成,C++也是一样。
整型、字符型等内置类型
变量,用来为对象命名
表达式和语句,用于操纵上述数据类型的具体值
if或while等控制结构,这些结构允许我们有选择地执行一些语句或者重复地执行一些语句
函数,用于定义可供随时调用的计算单元
自定义数据类型:比如:类
C++的另外一点就是编程思想,通过类引入了面向对象编程的思想,再通过模板等技术引入了通用或泛型编程的思想。
这本篇文章中,主要是关于前2点的内容:对象和对象的类型。
2,类型是程序设计中最基本的概念,一种类型不仅定义了数据元素的内容,还定义了这类数据上可以进行的运算。内置的数据类型如此,用户自定义的类型也是如此,C++的一个很重要的任务就是让用户设计的类型像语言内置类型一样好用。
3,程序所处理的数据都保存在变量中,而每个变量都有自己的类型。
4,执行算术运算时,数据类型的选择
short 一般很少使用,容易产生越界。
char类型在一些实现中有时作为signed处理,而有时作为unsigned处理,所以只用char来表示字符是明智之举。
在大多数的时候使用int就没有问题,在很多机器上int用4个字节存储,足够满足大部分计算的要求。
浮点型的选择就很简单了,使用double类型基本不会有什么错误,而且有可能会比float计算代价低。
5,在使用无符号数作为循环的索引时,注意unsinged int 与 int类型间的隐式数据转换,如下面的程序,可能实际并不是你想要的结果。
1 // error 变量u永远也不会小于0,循环条件一直成立
2 for (unsigned u = 10; u & = 0; -- - u)
std::cout && u && std::
6,C++11定义了一种新的指针字面值nullptr,用于取代C语言中预编译常量NULL
7,注意C++中初始化与赋值的区别,这一点在类的定义中更为明显。初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来替代。
8,引用和指针都是C++定义的复合类型,引用与指针的定义是由一个基本数据类型和紧随其后的一个声明符列表组成。
1)引用是给变量另起了一个名字,当定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始化拷贝给引用。一旦初始化完成,程序把引用和它的初始值对象一直绑定在一起。因为无法令引用重新绑定到另外一个对象,因此引用必须初始化。
实际上引用的本质是指针,而且是一个常量指针,占用4个字节的空间。
2)与引用不同的是,指针本身是一个对象,允许指针拷贝和赋值,而且在指针的生命周期内,它可以先后指向几个不同的对象。
9,常量表达式是指值不会改变并且在编译过程中就能得到计算结果的表达式。
在一个复杂的系统中,很难分辨一个初始值到底是不是常量表达式。C++11允许将变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量表达式。声明constexpr的变量一定是一个常量,而且必须用常量表达式初始化:
1 constexpr int mf = 20;
2 constexpr int limit = mf + 1;
3 constexpr int sz = size(); // 只有当size是一个constexpr函数时才是一条正确的声明语句
用constexpr修饰的指针说明是常量指针,它本身在定义初始化后不可以再更改指向,但是所指的对象可以是个变量。
10,注意指针、常量和类型别名在一块的时候:
1 typedef char* // pstring是一指向字符的指针
2 const pstring cstr=0; // cstr是一个指向字符的常量指针
3 const pstring * // ps是一个指针,它的对象是指向char的常量指针。
11,auto类型
C++11引入auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型。编译器是通过初始值来推算变量的类型,显然,auto定义的变量必须有初始值。
如果我们用一个引用类型去初始化一个auto类型时,得到的类型将是引用对象的类型:
1 int i = 0, &r =
2 auto a =
// a是一个整数
其次auto一般会忽略掉顶层的const,同时底层的const则会保留下来。
1 const int ci = i, &cr =
2 auto b = // b是一个整数
3 auto c = // cr是一个整数(ci的顶层const特征被忽略了)
4 auto d =
&i; // d是一个指针(指针是指向整数的指针)
5 auto e =
& // e是一个指向整数常量的指针
如果希望auto推断出的是auto类型是一个顶层的const,需要明确指出:
1 const auto f =
12,decltype类型指示符
有的时候想从表达式的类型推断出要定义的变量的类型,但是不想用该表达式的值初始化变量,为些C++11引入了第二种类型说明符decltype,它的作用是选择并返回操作数的数据类型。
decltype(f()) sum = // sum的类型就是f的返回值类型,编译器并不调用f
decltype在处理顶层const和引用的方式与auto不同。
1 const int ci = 0, &cj =
2 decltype(ci) x = 0;
// x的类型是const int
3 decltype(cj) y =
// y的类型是const int&, y绑定到变量x
4 decltype(cj) //error, z是一个引用,必须初始化
引用从来都是作为其所指对象的同义词出现,只有用在decltype处是个例外。
delctype((variable))(注意是双层括号)的结果永远是引用,而decltype(variable)结果只有当variable本身就是一个引用时才是引用。
13,标准库定义了2种非常重要的抽象类型,一种是string用来支持可变长的字符串;另一种是vector表示可变长的集合。
14,对于string和vector对象都可以有多种方式初始化,这取决于类的定义,但一般直接初始化和拷贝初始化都是存在的。如果使用等号&=&初始化一个变量,实际上执行的是拷贝初始化,编译器把等号右侧的初始值拷贝到新创建的对象中去。与之相反,如果不使用等号,则执行的是直接初始化。
1 string s1 = "hiya";
// 拷贝初始化
2 string s2("hiya"); // 直接初始化
3 string s3(10, 'c');
// 直接初始化
15,string类型和标准库容器类型都提供了一种size_type类型,它是一个无符号的值,而且足够存放下任何容器或string对象的大小。而在C++11中,我们可以用auto或decltype来让编译器自动推断出这种类型,而不用写很长的代码,比如:
1 vector&vector&double&&::size_ // 原来的方法
2 decltype(dvv.size()) // C++11用decltype
3 auto i = dvv.size();
// C++11用auto
16,C++11中另外为vector对象提供了一种列表初始化的方法,此时,用花括号括起来的0个或多个初始化元素值被赋予vector对象。但是值得注意的是:如果用的是花括号,可以表述成我们想列表初始化该vector对象。也是就是,初始化过程会尽可能地把花括号内的值当成是元素初始化的列表来处理,只有在无法执行列表初始化时才会考虑其他初始化方式。
1 vector&string& v1{"hi"};
//v1有一个元素
2 vector&string& v2("hi");
3 vector&string& v3{10};
//v3本来想用10来初始化vector,但是发现10不是strring对象,所以把v3初始化为10个元素。
4 vector&string& v4{10,"hi"};
//v4本来想用10和&hi&初始化vector,但发现10不是string对象,所以就把v4定义为10个元素的vector
17,数组,与vector类似,数组也是存放类型相同的对象的容器,这些对象本身没有名字,需要通过其所在的位置访问。而且数组是在定义的时候就分配了大小,中间不能变化,这就给使用时带来很大的不便。
18,指针其实与迭代器具有相同的功能,在遍历数组的情况下,用指针操作就像在容器上使用迭代器一样。类似于容器类型的begin和end迭代器,C++11定义了两个函数begin和end用来获取序列的首指针和尾指针,这两个函数定义在iterator头文件中。
1 int ia[]={0,1,2,3,4,5,6,7,8,9};
2 int *beg = begin(ia);
// 指向ia首元素的指针
3 int *end = end(ia);
// 指向ia尾元素的下一位置的指针当前位置:
一个菜鸟级问题!
一个菜鸟级问题!
来源:网络整理&&&&&时间: 5:30:15&&&&&关键词:
关于网友提出的“ 一个菜鸟级问题!”问题疑问,本网通过在网上对“ 一个菜鸟级问题!”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 一个菜鸟级问题!
在c++中如何先输入多组数据,再依次输出结果。
例如求a+b=c;
先输入多组a,b;再依次输出c值。解决方案1:
对啊~使用循环就行~!
解决方案2:
解决方案3:
解决方案4:
int&main(double&x,double&y,double&m,double&n,double&k,double&l)&
main函数参数好象不是这么传递的&-&-!
int&main(int&argc,&char&**argv)
解决方案5:
你的程序编译连接时在内存里已经给a,b,c,p,s赋值了
我运行时是这样子,有问题
解决方案6:
解决方案7:
数组,估计你也还没学到数组。
解决方案8:
使用数组啊
解决方案9:
下面是个例子:
#include&&iostream&
#include&&stdlib.h&
using&namespace&
int&main()
&&&&int&a=1&,&b=1&,&c;
&&&&while(a!=0&&&&b!=0)
&&&&&&&&cin&&&&a&&&&b;
&&&&&&&&c&=&a&+&b;
&&&&&&&&cout&&&&a&&&&"+"&&&&b&&&&"="&&&&c&&&&
&&&&system("puase");
&&&&return&0;
以上介绍了“ 一个菜鸟级问题!”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2265845.html
上一篇: 下一篇:

我要回帖

更多关于 double float 的文章

 

随机推荐