1 / 15
文档名称:

《算法竞赛入门经典》.pdf

格式:pdf   大小:1,033KB   页数:15页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

《算法竞赛入门经典》.pdf

上传人:小辰GG 2022/7/29 文件大小:1.01 MB

下载得到文件列表

《算法竞赛入门经典》.pdf

文档介绍

文档介绍:: .
的含义是不同的。
再来做 3 个实验:
实验 5:把%.1lf 中的数字 1 改成 2,结果如何?能猜想出“1”的确切意思吗?如果把
小数点和 1 都删除,%lf 的含义是什么?
实验 6:字符串%.1lf 不变,把 改成原来的 8/5,结果如何?
实验 7:字符串%.1lf 改成原来的%d, 不变,结果如何?
实验 5 并不难解决,但实验 6 和实验 7 的答案就很难简单解释了——真正原因涉及整
数和浮点数编码,相信多数初学者对此都不感兴趣。原因并不重要,重要的是规范:根据
规范做事情,则一切尽在掌握中。
·2·第 1 章 程序设计入门
提示 1-1:整数值用%d 输出,实数用%lf 输出①。
这里的“整数值”指的是 1+2、8/5 这样“整数之间的运算”。只要运算符的两边都是
整数,则运算结果也会是整数。正因为这样,8/5 的值才是 1,而不是 。
和 被看作是“实数”,或者说得更专业一点,叫“浮点数”。浮点数之间的运
算结果是浮点数,因此 = 也是浮点数。注意,这里的运算符“/”其实是“多面手”,
它既可以拿来做整数除法,又可以拿来做浮点数除法。
提示 1-2:整数/整数=整数,浮点数/浮点数=浮点数。
这条规则同样适用于加法、减法和乘法,不过没有除法这么容易出错——毕竟整数乘
以整数的结果本来就是整数。
算术表达式可以和数学表达式一样复杂,例如:
程序 1-3 复杂的表达式计算
#include<>
#include<>
int main()
{
printf("%.8lf\n", 1+2*sqrt(3)/(5-));
return 0;
}
2 3
相信读者不难把它翻译成数学表达式:1  。尽管如此,读者可能还是有一些疑
5 
惑:5- 的值是什么?“整数-浮点数”是整数还是浮点数?另外, 多出来的#inc lude<>
是做什么用的?
第 1 个问题相信读者能够“猜到”结果:整数-浮点数=浮点数。但其实这个说法并不
准确。确切的说法是:整数先“变”成浮点数,然后浮点数-浮点数=浮点数。
第 2 个问题的答案是:因为程序 1-3 中用到了数学函数 sqrt。数学函数 sqrt(x)的作用是
计算 x 的算术平方根(若不信,可输出 sqrt()的值试试)。一般来说,只要在程序中用到
了数学函数,就需要在程序最开始的地方包含头文件 ,并在编译时连接数学库。如
果你不知道如何编译并运行这段程序,可阅读附录或向指导教师求助。
变量及其输入
节的程序虽好,但有一个遗憾:计算的数据是事先确定的。为了计算 1+2 和 2+3,
我们不得不编写两个程序。可不可以让程序读取键盘输入,并根据输入内容计算结果呢?
答案是肯定的。程序如下:

① 从真正的语言规范来说,这个说法也有一点小问题,不过在算法竞赛中可以完全忽