用下面公式求π的近似值。π/4≈1-1/3+1/5-1/7+…直到最后一項的絕對值小于10-7為止。根據給定的算法很容易編寫程序如下:
#include <iostream>#include <iomanip>#include <cmath>using namespace std;int main( ){ int s=1; double n=1,t=1,pi=0; while((fabs(t))>1e-7) { pi=pi+t; n=n+2; s=-s; t=s/n; } pi=pi*4; cout<<"pi="<<setiosflags(ios::fixed)<<setprecision(6)<<pi<<endl; return 0;}運行結果為
pi=3.141592
注意:不要把n定義為整型變量,否則在執行“t=s/n;”時,得到t的值為0(原因是兩個整數相除)。
【例】求Fibonacci數列前40個數。這個數列有如下特點:第1、2個數為1、1。從第3個數開始,每個數是其前面兩個數之和。即:
F1=1 (n=1) F2=1 (n=2) Fn=Fn-1+Fn-2(n≥3)
這是一個有趣的古典數學問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第3個月后每個月又生一對兔子,假設所有兔子都不死,問每個月的兔子總數為多少?
根據給出的每月兔子總數的關系,可編寫程序如下:
#include <iostream>#include <iomanip>using namespace std;int main( ){ long f1,f2; int i; f1=f2=1; for(i=1;i<=20;i++) { cout<<setw(12)<<f1<<setw(12)<<f2; //設備輸出字段寬度為12,每次輸出兩個數 if(i%2==0) cout<<endl; //每輸出完4個數后換行,使每行輸出4個數 f1=f1+f2; //左邊的f1代表第3個數,是第1?2個數之和 f2=f2+f1; //左邊的f2代表第4個數,是第2?3個數之和 } return 0;}【例】找出100~200間的全部素數。編寫程序如下:
#include <iostream>#include <cmath>#include <iomanip>using namespace std;int main( ){ int m,k,i,n=0; bool prime;//定義布爾變量prime for(m=101;m<=200;m=m+2) //判別m是否為素數,m由101變化到200,增量為2 { prime=true;//循環開始時設prime為真,即先認為m為素數 k=int(sqrt(m)); //用k代表根號m的整數部分 for(i=2;i<=k;i++) //此循環作用是將m被2~根號m除,檢查是否能整除 if(m%i==0) //如果能整除,表示m不是素數 { prime=false; //使prime變為假 break; //終止執行本循環 } if (prime)//如果m為素數 { cout<<setw(5)<<m; //輸出素數m,字段寬度為5 n=n+1; //n用來累計輸出素數的個數 } if(n%10==0) cout<<endl; //輸出10個數后換行 } cout<<endl;//最后執行一次換行 return 0;}【例】譯密碼
為使電文保密,往往按一定規律將電文轉換成密碼,收報人再按約定的規律將其譯回原文。例如,可以按以下規律將電文變成密碼:將字母A變成字母E,a變成e,即變成其后的第4個字母,W變成A,X變成B,Y變成C,Z變成D。見圖3.20,字母按上述規律轉換,非字母字符不變,如"Wonderful!"轉換為"Asrhivjyp!"。
輸入一行字符,要求輸出其相應的密碼。

程序如下:
#include <iostream>using namespace std;int main( ){ char c; while ((c=getchar( ))!='/n') { if((c>='a' && c<='z') || (c>='A' && c<='Z')) { c=c+4; if(c>'Z' && c<='Z'+4 || c>'z') c=c-26; } cout<<c; } cout<<endl; return 0;}運行結果如下: