C++是一门实践的编程语言(二)
正确性证明
从图形上来看,每行空格比上一行少一个,星号多两个,可知a序列满足要求,b序列也满足要求。同时,最多需要n次输出操作就可以完成。
最后用计算机语言来实现它:
void draw(int n)
{
for (int i = 1; i <= n; ++i) {
put-stars(n-i, 2*i-1);
}
}
以后,我们不讨论具体如何分析和设计,只考虑在已知算法的情况下,如何来实现它。比如:C++的习惯上,计数项从0开始到n-1结束,我们可以重新写通项为n - i - 1和2 * i + 1。代码实现为:
复制代码
1 void draw(int n)
2 {
3 for (int i = 0; i < n; ++i) {
4 put-stars(n-i-1, 2*i+1);
5
6 }
7 }
复制代码
注1:我认为好的教材有几种:有些经验编程的同学可以用简单明了的Essential C++;经验较少的同学可以用事无巨细的C++ Primer;对于零基础的初学者,按部就班用Programming:principles and practice design using C++更好。
注2:整数除法运算时,小数部分会直接丢弃,而不是通常的四舍五入。