[算法竞赛入门经典(第2版)读书笔记] ,第一章
2015-04-20 14:28
232 查看
本文是C和C++一些小tips,一部分(比如1)是语言的重要细节,这部分可以快速的浏览,对自己的知识查漏补缺;而另一部分(2-6)则是一些编程技巧,这些技巧似乎并不是那么实用,但是却相当有趣,各位看官在时间充裕的情况下可以自己思考一下实现的方法,如对笔者的方法有疑问,或者有更好的方法,欢迎大家提出和交流。
printf(“%%”)可以用来输出%
变量交换(交换a和b中的值)
经典三变量
不借助额外变量的方法
int的范围问题
当while结束后i就是int的最大值,i+1就是int的最小值
double的精度问题
在VS2013 中通过观察可以知道double的精度最多为16位(有效数字)
通过查资料可知double的精度为15-16位,能保证有15位
float的精度为6-7位,能保证有6位
double范围问题
生成可执行文件后,命令行启动,输出重定向到文本中((假设名为POJ.exe)
观察输出
Line 1023-1030
Line 2053- 2060
可以得到double能表示的最大整数和最小整数(非精确)分别为:
1.7976931348623157e+308和-1.7976931348623157e+308
又查资料可知在(WIN8-VS2013)c:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\float.h 中可以得到关于double的更多信息:
宏DBL_MAX即为double能表示的最大值,除了最后一个数字,其他与实验得到的数据均相同,但这是可以理解和接受的,因为double的精度只有15-16位,而这里的最后一位,已经是第17位有效数字
&&与||的优先级
由以上实验和资料(The C Programming Language)可知&&优先级大于||
printf(“%%”)可以用来输出%
变量交换(交换a和b中的值)
经典三变量
t = a; a = b; b = t;
不借助额外变量的方法
//法1 a = a + b; //运行结束后:a:a+b, b:b b = a - b; //a:a+b, b:a a = a - b; //a:b, b:a //法2,^为异或 a = a ^ b; b = a ^ b; a = a ^ b;
int的范围问题
int i = 0; while (i < i + 1) i++;
当while结束后i就是int的最大值,i+1就是int的最小值
double的精度问题
double x = 0.1; for (int i = 0; i < 30; i++, x *= 0.1) printf("%.30lf\n", x);
在VS2013 中通过观察可以知道double的精度最多为16位(有效数字)
通过查资料可知double的精度为15-16位,能保证有15位
float的精度为6-7位,能保证有6位
double范围问题
//如果观察不出结果,y可以设置得更大 int y = 1030; //double的精度为15-16位,为了让double足够大,应尽量取高精度,因为笔者的编译器在取17个9的时候x变为了1.00000000000....所以这里取16位 for (double x = 0.9999999999999999; y--; x *= 2) printf("%.16e\n", x); y = 1030; for (double x = -0.9999999999999999; y--; x *= 2) printf("%.16e\n", x);
生成可执行文件后,命令行启动,输出重定向到文本中((假设名为POJ.exe)
观察输出
Line 1023-1030
Line 2053- 2060
可以得到double能表示的最大整数和最小整数(非精确)分别为:
1.7976931348623157e+308和-1.7976931348623157e+308
又查资料可知在(WIN8-VS2013)c:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\float.h 中可以得到关于double的更多信息:
宏DBL_MAX即为double能表示的最大值,除了最后一个数字,其他与实验得到的数据均相同,但这是可以理解和接受的,因为double的精度只有15-16位,而这里的最后一位,已经是第17位有效数字
&&与||的优先级
cout << (false && false || true) << endl; cout << (true || false && false) << endl; cout << ((true || false) && false) << endl;
由以上实验和资料(The C Programming Language)可知&&优先级大于||
相关文章推荐
- 算法竞赛入门经典(第2版)第一章习题(Java)
- 《算法竞赛入门经典》读书笔记(第一章)
- 《算法竞赛入门经典》(第2版)第一章 部分实验题
- 《重构改善既有代码设计》读书笔记 第一章
- 读书笔记--C++程序设计(第2版)--11.6多重继承(与虚基类)
- 《数论概论》读书笔记(第一章) 什么是数论?
- Java编程思想-第一章 1.1-1.4 读书笔记
- 算法竞赛入门经典(第2版)习题4-7 RAID技术 RAID! UVa509
- 算法竞赛入门经典(第2版)习题1-1详解
- 孙鑫java读书笔记--第一章
- 《Android高级进阶》读书笔记——第一章:Android 触摸事件传递机制
- 读书笔记二——第一章《面向服务的体系架构SOA》上
- JAVA代码—算法竞赛入门经典(第2版)刘汝佳题解—习题2-4 子序列的和
- Thinking in Java第三版读书笔记-第一章:对象简介
- Professional javascript For Web Developers 第2版读书笔记第3集
- 《Learning From Data》第一章(二)读书笔记
- JavaScript DOM编程艺术(第2版)读书笔记
- 《ERP从内部集成起步》读书笔记——第一章 Garthner公司是如何提出ERP的 1.2 Gartner定义的深远影响
- 【算法】《算法竞赛入门经典》第一章 示例及答案
- 《apue》读书笔记 第一章 UNIX基础知识