a)將控制變量從1變到100,增量爲1。ios
for(int i=l;i<=100;i++)
b)將控制變量從100變到1,增量爲-1。c++
for(int i=100;i>=1; i--)
循環向下計數時若是循環條件中不使用正確的關係運算符(如在向下計算到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語句求和
儘管for前面的語句和for結構體的語句一般能夠合併到for的首部中,但最好不要這麼作,由於這樣會使程序更難閱讀。
儘量將控制結構首部的長度限制爲一行。
下列用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
這個程序必須包括math.h才能編譯。函數pow要求兩個double參數,注意year是個整數。math.h文件中的信息告訴編譯器將year值轉換爲臨時double類型以後再調用函數。這些信息放在pow的函數原型(function prototype)中。第3章將介紹函數原型並總結pow函數和其餘數學庫函數。
程序中使用數學庫函數而不包括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。
不要用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語句體中。事實上,這個計算產生的結果在每次循環時相同,所以是重複計算(是一種浪費)。
避免把不改變數值的表達式放在循環中。但即便把不改變數值的表達式放在循環中,現在的許多複雜優化編譯器也全自動地把這種表達式放到循環以外,產生優化機器語言代碼。
許多編譯器中有優化特性,能夠改進所寫的代碼,但最好一開始就編寫優化的代碼。爲了增長趣味性,本章練習中提供了一個peter Minuit問題,演示了複利計算的精彩之處。
考研專碩複習計劃http://www.kyjxy.com/zhuanshuo/
考研複試自我介紹http://www.kyjxy.com/fushi/zhinan/
數學考研複習材料http://www.kyjxy.com/shuxue/ziliao/