C++條件及循環(huán)語句的綜合運用實例
用下面公式求π的近似值。π/4≈1-1/3+1/5-1/7+…直到最后一項的絕對值小于10-7為止。根據(jù)給定的算法很容易編寫程序如下:
#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定義為整型變量,否則在執(zhí)行“t=s/n;”時,得到t的值為0(原因是兩個整數(shù)相除)。
【例】求Fibonacci數(shù)列前40個數(shù)。這個數(shù)列有如下特點:第1、2個數(shù)為1、1。從第3個數(shù)開始,每個數(shù)是其前面兩個數(shù)之和。即:
F1=1 (n=1) F2=1 (n=2) Fn=Fn-1+Fn-2(n≥3)
這是一個有趣的古典數(shù)學問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第3個月后每個月又生一對兔子,假設所有兔子都不死,問每個月的兔子總數(shù)為多少?
根據(jù)給出的每月兔子總數(shù)的關系,可編寫程序如下:
#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,每次輸出兩個數(shù)
if(i%2==0) cout<<endl;
//每輸出完4個數(shù)后換行,使每行輸出4個數(shù)
f1=f1+f2;
//左邊的f1代表第3個數(shù),是第1?2個數(shù)之和
f2=f2+f1;
//左邊的f2代表第4個數(shù),是第2?3個數(shù)之和
}
return 0;
}
【例】找出100~200間的全部素數(shù)。編寫程序如下:
#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是否為素數(shù),m由101變化到200,增量為2
{
prime=true;//循環(huán)開始時設prime為真,即先認為m為素數(shù)
k=int(sqrt(m)); //用k代表根號m的整數(shù)部分
for(i=2;i<=k;i++) //此循環(huán)作用是將m被2~根號m除,檢查是否能整除
if(m%i==0) //如果能整除,表示m不是素數(shù)
{
prime=false; //使prime變?yōu)榧?
break; //終止執(zhí)行本循環(huán)
}
if (prime)//如果m為素數(shù)
{
cout<<setw(5)<<m; //輸出素數(shù)m,字段寬度為5
n=n+1; //n用來累計輸出素數(shù)的個數(shù)
}
if(n%10==0) cout<<endl; //輸出10個數(shù)后換行
}
cout<<endl;//最后執(zhí)行一次換行
return 0;
}
【例】譯密碼
為使電文保密,往往按一定規(guī)律將電文轉換成密碼,收報人再按約定的規(guī)律將其譯回原文。例如,可以按以下規(guī)律將電文變成密碼:將字母A變成字母E,a變成e,即變成其后的第4個字母,W變成A,X變成B,Y變成C,Z變成D。見圖3.20,字母按上述規(guī)律轉換,非字母字符不變,如"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;
}
運行結果如下:
I am going to Beijing!↙ M eq ksmrk xs Fimnmrk!
while語句中括號內(nèi)的表達式有3個作用:
從鍵盤讀入一個字符,這是用getchar函數(shù)實現(xiàn)的;
將讀入的字符賦給字符變量c;
判別這個字符是否為'\n'(即換行符)。如果是換行符就執(zhí)行while語句中的復合語句(即花括號內(nèi)的語句),對輸入的非換行符的字符進行轉換處理。
按前面分析的思路對輸入的字符進行處理,有一點請讀者注意,內(nèi)嵌的if語句不能寫成:
if (c>'Z'|| c>'z') c=c-26;
因為所有小寫字母都滿足“c>'Z'”條件,從而也執(zhí)行“c=c-26;”語句,這就會出錯。因此必須限制其范圍為“c>'Z' && c<='Z'+4”,即原字母為'W'到'Z',在此范圍以外的不是原大寫字母W~Z,不應按此規(guī)律轉換。
您可能感興趣的文章
- 04-02c語言沒有round函數(shù) round c語言
- 01-10深入理解C++中常見的關鍵字含義
- 01-10使用C++實現(xiàn)全排列算法的方法詳解
- 01-10深入第K大數(shù)問題以及算法概要的詳解
- 01-10c++中inline的用法分析
- 01-10用C++實現(xiàn)DBSCAN聚類算法
- 01-10深入全排列算法及其實現(xiàn)方法
- 01-10全排列算法的非遞歸實現(xiàn)與遞歸實現(xiàn)的方法(C++)
- 01-10C++大數(shù)模板(推薦)
- 01-10深入理解堆排序及其分析


閱讀排行
本欄相關
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機閱讀
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10C#中split用法實例總結
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法


