C++條件及循環(huán)語句的綜合運(yùn)用實(shí)例
用下面公式求π的近似值。π/4≈1-1/3+1/5-1/7+…直到最后一項(xiàng)的絕對值小于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; }
運(yùn)行結(jié)果為
pi=3.141592
注意:不要把n定義為整型變量,否則在執(zhí)行“t=s/n;”時(shí),得到t的值為0(原因是兩個(gè)整數(shù)相除)。
【例】求Fibonacci數(shù)列前40個(gè)數(shù)。這個(gè)數(shù)列有如下特點(diǎn):第1、2個(gè)數(shù)為1、1。從第3個(gè)數(shù)開始,每個(gè)數(shù)是其前面兩個(gè)數(shù)之和。即:
F1=1 (n=1) F2=1 (n=2) Fn=Fn-1+Fn-2(n≥3)
這是一個(gè)有趣的古典數(shù)學(xué)問題:有一對兔子,從出生后第3個(gè)月起每個(gè)月都生一對兔子,小兔子長到第3個(gè)月后每個(gè)月又生一對兔子,假設(shè)所有兔子都不死,問每個(gè)月的兔子總數(shù)為多少?
根據(jù)給出的每月兔子總數(shù)的關(guān)系,可編寫程序如下:
#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; //設(shè)備輸出字段寬度為12,每次輸出兩個(gè)數(shù) if(i%2==0) cout<<endl; //每輸出完4個(gè)數(shù)后換行,使每行輸出4個(gè)數(shù) f1=f1+f2; //左邊的f1代表第3個(gè)數(shù),是第1?2個(gè)數(shù)之和 f2=f2+f1; //左邊的f2代表第4個(gè)數(shù),是第2?3個(gè)數(shù)之和 } return 0; }
【例】找出100~200間的全部素?cái)?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是否為素?cái)?shù),m由101變化到200,增量為2 { prime=true;//循環(huán)開始時(shí)設(shè)prime為真,即先認(rèn)為m為素?cái)?shù) k=int(sqrt(m)); //用k代表根號m的整數(shù)部分 for(i=2;i<=k;i++) //此循環(huán)作用是將m被2~根號m除,檢查是否能整除 if(m%i==0) //如果能整除,表示m不是素?cái)?shù) { prime=false; //使prime變?yōu)榧? break; //終止執(zhí)行本循環(huán) } if (prime)//如果m為素?cái)?shù) { cout<<setw(5)<<m; //輸出素?cái)?shù)m,字段寬度為5 n=n+1; //n用來累計(jì)輸出素?cái)?shù)的個(gè)數(shù) } if(n%10==0) cout<<endl; //輸出10個(gè)數(shù)后換行 } cout<<endl;//最后執(zhí)行一次換行 return 0; }
【例】譯密碼
為使電文保密,往往按一定規(guī)律將電文轉(zhuǎn)換成密碼,收報(bào)人再按約定的規(guī)律將其譯回原文。例如,可以按以下規(guī)律將電文變成密碼:將字母A變成字母E,a變成e,即變成其后的第4個(gè)字母,W變成A,X變成B,Y變成C,Z變成D。見圖3.20,字母按上述規(guī)律轉(zhuǎn)換,非字母字符不變,如"Wonderful!"轉(zhuǎn)換為"Asrhivjyp!"。
輸入一行字符,要求輸出其相應(yīng)的密碼。
程序如下:
#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; }
運(yùn)行結(jié)果如下:
I am going to Beijing!↙ M eq ksmrk xs Fimnmrk!
while語句中括號內(nèi)的表達(dá)式有3個(gè)作用:
從鍵盤讀入一個(gè)字符,這是用getchar函數(shù)實(shí)現(xiàn)的;
將讀入的字符賦給字符變量c;
判別這個(gè)字符是否為'\n'(即換行符)。如果是換行符就執(zhí)行while語句中的復(fù)合語句(即花括號內(nèi)的語句),對輸入的非換行符的字符進(jìn)行轉(zhuǎn)換處理。
按前面分析的思路對輸入的字符進(jìn)行處理,有一點(diǎn)請讀者注意,內(nèi)嵌的if語句不能寫成:
if (c>'Z'|| c>'z') c=c-26;
因?yàn)樗行懽帜付紳M足“c>'Z'”條件,從而也執(zhí)行“c=c-26;”語句,這就會出錯(cuò)。因此必須限制其范圍為“c>'Z' && c<='Z'+4”,即原字母為'W'到'Z',在此范圍以外的不是原大寫字母W~Z,不應(yīng)按此規(guī)律轉(zhuǎn)換。
- C++循環(huán)鏈表之約瑟夫環(huán)的實(shí)現(xiàn)方法
- 講解C++的do while循環(huán)和循環(huán)語句的嵌套使用方法
- 解析C++中的for循環(huán)以及基于范圍的for語句使用
- 如何用C++實(shí)現(xiàn)雙向循環(huán)鏈表
- C++循環(huán)隊(duì)列實(shí)現(xiàn)模型
- 詳解C++循環(huán)創(chuàng)建多級目錄及判斷目錄是否存在的方法
- C++中的while循環(huán)和for循環(huán)語句學(xué)習(xí)教程
- 用C++實(shí)現(xiàn)單向循環(huán)鏈表的解決方法
- c++中for雙循環(huán)的那些事
- C++性能剖析教程之循環(huán)展開
相關(guān)文章
Qt5.9實(shí)現(xiàn)簡單的多線程實(shí)例(類QThread)
Qt開啟多線程,主要用到類QThread。用一個(gè)類繼承QThread,然后重新改寫虛函數(shù)run()。具有一定的參考價(jià)值,感興趣的可以了解一下2021-09-09C++實(shí)現(xiàn)LeetCode(186.翻轉(zhuǎn)字符串中的單詞之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(186.翻轉(zhuǎn)字符串中的單詞之二),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08深入HRESULT與Windows Error Codes的區(qū)別詳解
本篇文章是對HRESULT與Windows Error Codes的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05kernel利用pt?regs劫持seq?operations的遷移過程詳解
這篇文章主要為大家介紹了kernel利用pt_regs劫持seq_operations進(jìn)行遷移的過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Qt GUI圖形圖像開發(fā)之QT表格控件QTableView詳細(xì)使用方法與實(shí)例
這篇文章主要介紹了Qt GUI圖形圖像開發(fā)之QT表格控件QTableView詳細(xì)使用方法與實(shí)例,需要的朋友可以參考下2020-03-03C++ 虛函數(shù)和純虛函數(shù)的區(qū)別分析
這篇文章主要介紹了C++ 虛函數(shù)和純虛函數(shù)的區(qū)別,幫助大家更好的理解和學(xué)習(xí)c++的相關(guān)知識,感興趣的朋友可以了解下2020-10-10