C++ 制表

2023-03-20 15:53 更新

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

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

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

對數(shù)表已經(jīng)不像以前那么有用了,但它仍然是一個(gè)不錯(cuò)的迭代示例。下面這段程序在左邊一欄輸出一列值,在右邊一欄輸出其對應(yī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)在字符串的任意位置,而在此例中,字符串中只有這類字符序列。

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

換行符的作用與endl完全一樣,即移動光標(biāo)到下一行。通常情況,如果換行符單獨(dú)出現(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為底的。計(jì)算機(jī)科學(xué)中2的冪很重要,因此我們常常要計(jì)算以2為底的對數(shù),我們可以通過以下公式實(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)中,我們用一個(gè)數(shù)去加x,輸出一個(gè)算術(shù)序列;現(xiàn)在我們改用一個(gè)數(shù)去乘x,輸出一個(gè)幾何級序列。輸出結(jié)果是:

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

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號