for結構使用舉例

下面的例子顯示for結構中改變控制變量的方法。在每一個例子中.咱們都編寫相應的for結構首部。注意循環中遞減控制變量的關係運算符的改變。

a)將控制變量從1變到100,增量爲1。ios

  for(int i=l;i<=100;i++)

b)將控制變量從100變到1,增量爲-1。c++

  for(int i=100;i>=1; i--)
常見編程錯誤2.17

循環向下計數時若是循環條件中不使用正確的關係運算符(如在向下計算到1的循環中使用i<=1)一般是個邏輯錯誤,會在程序運行時產生錯誤結果。編程

c)控制變量的變化範圍爲7到77。函數

  for(int i= 7;i <= 77; i+= 7)

d)控制變量的變化範圍爲20到2。性能

  for(int i=20;i>=2;i-=2)

c)按所示數列改變控制變量值:二、‘、八、十一、1四、1七、20。優化

  for(int j=2;j<=20;j+=3)

f)按所示數列改變控制變量值:9九、8八、7七、6六、5五、4四、3三、2二、ll、O。ui

  for(int j=99; j>=O;   j-=11)

下面兩個例子提供for結構的簡單應用。圖2.20所示的程序用for結構求2到100的全部整數的總和。spa

注意圖2.20中for結構體能夠用下列逗號運算符合併成for首部的右邊部分:prototype

for(int number = 2; // initialization

number <= 100; // continuation condition
sum += number, number += 2) // total and increment

初始化sum=0也能夠合併到for的初始化部分。rest

f// Fig. 2.20: figO2_20.cpp
// Summation with for
#include < iostream.h>
int main()
{
	int sum = O;
	for (int number = 2; number <= 100; number += 2 )
	sum += number;
	cout << "Sum is "<< sum << endl;
	return O;
}

輸出結果:

sum is 2550

圖2.20 用for語句求和

編程技巧2.23

儘管for前面的語句和for結構體的語句一般能夠合併到for的首部中,但最好不要這麼作,由於這樣會使程序更難閱讀。

編程技巧1.24

儘量將控制結構首部的長度限制爲一行。

下列用for結構計算複利。考慮下列問題:

一我的在銀行存款1000.00美圓,每利率爲5%。假設全部利息留在帳號中,則計算10年間每一年年底的金額並打印出來。用下列公式求出金額:

  a=P(1+r)n

其中:

P是原存款(本金)

r是年利率

n是年數

a是年未本息

這個問題要用一個循環對10年的存款進行計算。解答如圖2.21

for結構執行循環體10次,將控制變量從1變到10,增量爲1。C++中沒有指數運算符,所以要用標準庫函數pow。函數pow(x,y)計算x的y次方值。函數pow取兩個類型爲double的參數並返回double值。類型double與float類似,但double類型的變量能存放比float精度更大的數值。C++把常量(如圖2.21中的1000.0和.05)看成double類型處理。

// Fig. 2.21: fig02_21.cpp
// Calculating compound interest
#include <iostream.h>
#include <iomanip.h>
#include <math.h> int main() { double amount, // amount on deposit principal = 1000.0, // starting principal rate = .05; // interest rate cout << "Year" << setw( 21 ) << "Amount on deposit" << endl; for ( int year = 1; year <= 10; year++ ) { amount = principal * pow{ 1.0 + rate, year ); cout << setw( 4 ) << year << setiosflags( ios::fixed I ios::showpoint ) << setw( 21 ) << setprecision( 2 ) << amount << endl; } }
輸出結果:
Year     Amount on  deposic
1                  1050.00
2                  1102.50
3                  1157.62
4                  1215.51
5                  1276.28
6                  1340.10
7                  1407.10
8                  1477.46
9                  1551.33
10                 1628.89 
圖 2.21 用for結構計算複利

這個程序必須包括math.h才能編譯。函數pow要求兩個double參數,注意year是個整數。math.h文件中的信息告訴編譯器將year值轉換爲臨時double類型以後再調用函數。這些信息放在pow的函數原型(function prototype)中。第3章將介紹函數原型並總結pow函數和其餘數學庫函數。

常見編程錯誤1.18

程序中使用數學庫函數而不包括math.h頭文件是個語法錯誤。

程序中將變量amount、principal和rate聲明爲double類型,這是爲了簡單起見,由於咱們要涉及存款數額的小數部分,要採用數值中容許小數的類型。可是,這可能形成麻煩,下面簡單介紹用float和double表示數值時可能出現的問題(假設打印時用setprecision(2)):機器中存放的兩個float類型的值多是14.234(打印14.23)和18.673(打印18.67)。這兩個值相加時,內部和爲32.907,打印32.91。結果輸出以下:

   14.23
 + 18.67
-----------
   32.91

但這個加式的和應爲32.90。

編程技巧2.25

不要用float和double表示一些貨幣值。浮點數是不精確的,可能致使錯誤,產生不許確的貨幣值。練習中將介紹用整數值進行貨幣計算。注意:c++類庫能夠用於正確地進行貨幣計算。

輸出語句:

cout<< setw(4)<< year
    << setiosflags(10s::fixed  los::showpoint)
    <<   setw(21) <<  setpreclsion(2)
    <<   amount<< endl;

用參數化流操縱算於setw、setiosflags和setprecision指定的格式打印變量year和amount的值。調用selw(4)指定下一個值的輸出域寬(field width)爲4,即至少用4個字符位置打印這個值。若是輸出的值寬度少於4個字符位,則該值默認在輸出域中右對齊(ishljustl^ed),若是輸出的值寬度大於4個字符,則該值將輸出域寬擴大到能放下這個值爲止。調用setiosflag(ios::left)能夠指定輸出的值爲左對齊(1eft justified)。

上述輸出中的其他格式表示變量amount打印成帶小數點的定點值(用setiosflags(ios::fixed | ios::showpoint)指定),在輸出域的21個字符位中右對齊(用setw(21)指定),小數點後面爲兩位(用setprecision(2)指定)。咱們將在第11章介紹C++強大的輸入/輸出格式功能。

注意計算1.o+rate做爲pow函數的參數,包含在for語句體中。事實上,這個計算產生的結果在每次循環時相同,所以是重複計算(是一種浪費)。

性能提示2.5

避免把不改變數值的表達式放在循環中。但即便把不改變數值的表達式放在循環中,現在的許多複雜優化編譯器也全自動地把這種表達式放到循環以外,產生優化機器語言代碼。

性能提示2.6

許多編譯器中有優化特性,能夠改進所寫的代碼,但最好一開始就編寫優化的代碼。爲了增長趣味性,本章練習中提供了一個peter Minuit問題,演示了複利計算的精彩之處。

考研專碩複習計劃http://www.kyjxy.com/zhuanshuo/
考研複試自我介紹http://www.kyjxy.com/fushi/zhinan/
數學考研複習材料http://www.kyjxy.com/shuxue/ziliao/

相關文章
相關標籤/搜索