C++ 制表

2023-03-20 15:53 更新

生成表格式數(shù)據(jù)是能夠從循環(huán)機制受益的事情之一。舉個例子,在計算機成為常用設備之前,人們必須手工計算對數(shù)、正余弦以及其他常用的數(shù)學函數(shù)。為使這類工作更簡單,產(chǎn)生了一些書,包含了一些長表格,你可以查出不同函數(shù)的值。創(chuàng)建這些表的工作是緩慢而繁瑣的,而且結果容易大量出錯。

當計算機登上了歷史舞臺,人們最初的反應是:“太棒了!我們可以用計算機準確無誤的生成這些表。”這是個(大部分)正確但短視的看法。沒多久,計算機和計算器普及,數(shù)學表就過時了。

好吧,應該說基本上過時了。事實上對于某些運算,計算機使用數(shù)學表得到一個近似的答案,然后執(zhí)行計算去改進這個近似解。有些情況下,計算機背后的數(shù)學表是有誤差的,最著名的就是最初的因特爾奔騰計算浮點除法使用的表。

對數(shù)表已經(jīng)不像以前那么有用了,但它仍然是一個不錯的迭代示例。下面這段程序在左邊一欄輸出一列值,在右邊一欄輸出其對應的一列對數(shù)值:

double x = 1.0;
while (x < 10.0) {
    cout << x << "\t" << log(x) << "\n";
    x = x + 1.0;
}

字符序列\(zhòng)t表示制表符。字符序列\(zhòng)n表示換行符。這些字符序列可以出現(xiàn)在字符串的任意位置,而在此例中,字符串中只有這類字符序列。

制表符使光標右移至制表結束位置,通常是每8字節(jié)制表一次。稍后我們將看到制表符的用途—使多列文本排列整齊。

換行符的作用與endl完全一樣,即移動光標到下一行。通常情況,如果換行符單獨出現(xiàn),我就用endl;如果作為字符串的一部分出現(xiàn),我就用\n。

上面一段程序的輸出:

1    0
2     0.693147
3     1.09861
4     1.38629
5     1.60944
6     1.79176
7     1.94591
8     2.07944
9    2.19722

要是看著上面這些數(shù)很奇怪,別忘了log函數(shù)是以e為底的。計算機科學中2的冪很重要,因此我們常常要計算以2為底的對數(shù),我們可以通過以下公式實現(xiàn):

輸出語句改為:

cout << x << "\t" << log(x) / log(2.0) << endl;

輸出:

1    0
2    1
3    1.58496
4    2
5    2.32193
6    2.58496
7    2.80735
8    3
9    3.16993

可以看到,第1、2、4、8行為2的整數(shù)次冪。如果想求2的其他整數(shù)次冪,我們可以修改程序如下:

double x = 1.0;
while (x < 100.0) {
    cout << x << "\t" << log(x) / log(2.0) << endl;
    x = x * 2.0;
}

之前的循環(huán)中,我們用一個數(shù)去加x,輸出一個算術序列;現(xiàn)在我們改用一個數(shù)去乘x,輸出一個幾何級序列。輸出結果是:

1 0
2 1
4 2
8 3
16 4
32 5
64 6

由于我們在列之間使用的是制表符,所以第二列的位置也就不取決于第一列的數(shù)字位數(shù)了。

對數(shù)表也許不再有用,但對于和2的整數(shù)次冪打交道的計算機科學家而言,則是非常有用。下面出一道習題:修改上面這段程序,使之能一直輸出到65536(2^16)。把程序打出來并記住它。 
以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號