與大多數(shù)語言一樣,C++也提供了 if 語句 來支持條件執(zhí)行。我們可以用 if 語句寫一個(gè)程序,來統(tǒng)計(jì)在輸入中每個(gè)值連續(xù)出現(xiàn)了多少次:
#include <iostream>int main(){ //currVal 是我們正在統(tǒng)計(jì)的數(shù);我們將讀入的新值存入val int val = 0, curral = 0; //讀取第一個(gè)數(shù),并確保確實(shí)有數(shù)據(jù)可以處理 if (std::cin >> curral){ int cnt = 1; //保存我們正在處理的當(dāng)前值的個(gè)數(shù) while(std::cin>>val){ //讀取剩余的數(shù) if (val == curral) //如果值相同 ++cnt; //將cnt加一 else { //否則打印前一個(gè)值的個(gè)數(shù) std::cout<< curral << " occurs " << cnt << " times "<< std::endl; curral = val; //記住新值 cnt = 1; //重置計(jì)數(shù)器 } }//while 循環(huán)在這里結(jié)束 //記住打印文件中最后一個(gè)值的個(gè)數(shù) std::cout<< curral<<" occurs "<< cnt <<" times "<<std::endl; }//最外層的if語句在這里結(jié)束 return 0;}如果我們輸入如下內(nèi)容:
42 42 42 42 42 55 55 62 100 100 100
則輸出應(yīng)該是:
42 occurs 5 times
55 occurs 2 times
62 occurs 1 times
100 occurs 3 times
程序以兩個(gè)變量 val 和 currVal 的定義開始: currVal 記錄我們正在統(tǒng)計(jì)出現(xiàn)次數(shù)的那個(gè)數(shù);val 則保存從輸入讀取的每個(gè)數(shù)。與之前的程序相比,新的內(nèi)容就是兩個(gè) if 語句。第一條 if 語句保證輸入不為空。
if (std::cin >> currVal){ //...}//最外層的if語句在這里結(jié)束與 while 語句類似, if 也對(duì)一個(gè)條件進(jìn)行求值。第一條 if語句的條件是讀取一個(gè)數(shù)值存入 currVal 中。如果讀取成功,則條件為真,我們繼續(xù)執(zhí)行條件之后的語句塊。該語句塊以左花括號(hào)開始,以return語句之前的右花括號(hào)結(jié)束。
如果需要統(tǒng)計(jì)出現(xiàn)次數(shù)的值,我們就定義cnt,用來統(tǒng)計(jì)每個(gè)數(shù)值連續(xù)出現(xiàn)的次數(shù)。與上一小節(jié)的程序類似,我們用一個(gè)while 循環(huán)反復(fù)從標(biāo)準(zhǔn)輸入讀取整數(shù)。
while 的循環(huán)體是一個(gè)語句塊,它包含了第二條if語句:
if (val == curral) //如果值相同 ++cnt; //將cnt加一 else { //否則打印前一個(gè)值的個(gè)數(shù) std::cout<< curral << " occurs " << cnt << " times "<< std::endl; curral = val; //記住新值 cnt = 1; //重置計(jì)數(shù)器這條 if 語句中的條件使用了 相等運(yùn)算符(==)來檢測(cè) val 是否等于currVal 。如果是,我們執(zhí)行緊跟在條件之后的語句。這條語句將 cnt 增加一,表明我們?cè)俅慰吹搅薱urrVal 。
如果條件為假, 即 val 不等于currVal , 則執(zhí)行else 之后的語句。這條語句是一個(gè)由一條輸出語句和兩條賦值語句組成的語句塊。輸出語句打印我們剛剛統(tǒng)計(jì)完得值的出現(xiàn)次數(shù)。賦值語句將cnt 重置為1,將 currVal 重置為剛剛讀入的 val 。
warning:C++用=進(jìn)行賦值,用==作為相等運(yùn)算符。兩個(gè)運(yùn)算符都可以出現(xiàn)在條件中。一個(gè)常見的錯(cuò)誤是想在條件中使用 ==(相等判斷),卻誤用了=。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注