版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章控制結(jié)構(gòu)
C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
2011年3月教材:C++語(yǔ)言程序教程學(xué)習(xí)目標(biāo)
掌握順序結(jié)構(gòu)的概念及語(yǔ)句。掌握分支和多分支語(yǔ)句的語(yǔ)法格式及用法。理解循環(huán)的概念,掌握while,dowhile,for三種循環(huán)語(yǔ)句的語(yǔ)法格式、用法及區(qū)別。掌握選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)嵌套的含義及用法理解并掌握跳轉(zhuǎn)語(yǔ)句break、continue語(yǔ)句的語(yǔ)法和使用場(chǎng)合,能根據(jù)要求選擇合適的跳轉(zhuǎn)語(yǔ)句。重點(diǎn):掌握分支和多分支語(yǔ)句的應(yīng)用。掌握while,dowhile,for三種循環(huán)語(yǔ)句的語(yǔ)法格式、用法及區(qū)別。掌握選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)嵌套的應(yīng)用。靈活應(yīng)用相應(yīng)的控制結(jié)構(gòu)完成簡(jiǎn)單的程序設(shè)計(jì)工作。引言一個(gè)程序往往由一系列語(yǔ)句組成,程序的執(zhí)行原則是由上而下、一行一行順序執(zhí)行。但程序中往往遇到這種情況:根據(jù)不同的選擇或計(jì)算結(jié)果程序要進(jìn)行不同的處理:有的語(yǔ)句要反復(fù)執(zhí)行多次,這就需要程序要有控制轉(zhuǎn)向能力與反復(fù)執(zhí)行語(yǔ)句的能力。首先,復(fù)習(xí)一下程序的結(jié)構(gòu)和語(yǔ)句;然后,學(xué)習(xí)程序的控制結(jié)構(gòu)。C++程序的結(jié)構(gòu)C++的一個(gè)程序包含一個(gè)或多個(gè)程序單位(每個(gè)程序單位構(gòu)成一個(gè)程序文件)。每一個(gè)程序單位由以下幾個(gè)部分組成:
(1)預(yù)處理命令。如:#include命令和#define命令。(2)聲明部分。例如對(duì)數(shù)據(jù)類型和函數(shù)的聲明,以及對(duì)變量的定義。(3)函數(shù)。包括函數(shù)首部和函數(shù)體,在函數(shù)體中可以包含若干聲明語(yǔ)句和可執(zhí)行語(yǔ)句。(4)類,包括類頭和類體。#include<iostream>//預(yù)處理命令usingnamespacestd;constdoublePI=3.14159;voidmain()//函數(shù)首部{floatr,s;//變量的聲明部分r=4.5;s=PI*r*r;//執(zhí)行語(yǔ)句cout<<"
s="
<<s<<endl;//輸出結(jié)果}C++程序結(jié)構(gòu)可以用圖3.1表示。圖3.1C++程序結(jié)構(gòu)C++語(yǔ)言的語(yǔ)句C++程序中最小的獨(dú)立單位是語(yǔ)句。它相當(dāng)于一篇文章中的一個(gè)句子。C++語(yǔ)句是為完成某項(xiàng)任務(wù)而進(jìn)行相關(guān)操作的命令,它以分號(hào)“;”作為語(yǔ)句的結(jié)束標(biāo)志。C++語(yǔ)句可以分為以下6種:6種語(yǔ)句:聲明語(yǔ)句表達(dá)式語(yǔ)句空語(yǔ)句復(fù)合語(yǔ)句選擇語(yǔ)句控制語(yǔ)句循環(huán)語(yǔ)句函數(shù)和流對(duì)象調(diào)用語(yǔ)句(1)聲明語(yǔ)句
聲明語(yǔ)句又稱為說(shuō)明語(yǔ)句,它可以用來(lái)對(duì)程序中出現(xiàn)的各種名稱進(jìn)行聲明。這些名稱通常是表示變量、常量、函數(shù)、結(jié)構(gòu)、類、對(duì)象等實(shí)體的標(biāo)識(shí)符。在C++程序中,一個(gè)名稱在使用之前必須先被聲明,聲明的目的是告訴編譯器某個(gè)名稱所指代的實(shí)體類型。(2)表達(dá)式語(yǔ)句C++中任何一個(gè)表達(dá)式加上分號(hào)便是表達(dá)式語(yǔ)句。大多數(shù)表達(dá)式語(yǔ)句是賦值表達(dá)式和函數(shù)調(diào)用。格式:表達(dá)式;表達(dá)式語(yǔ)句與表達(dá)式的區(qū)別:表達(dá)式可以包含在其它表達(dá)式中,而語(yǔ)句不可以。例:if((a=b)>0)t=a;不可寫(xiě)為:if((a=b;)>0)t=a;注意:表達(dá)式不是語(yǔ)句,所以表達(dá)式不能在程序中獨(dú)立存在。(3)復(fù)合語(yǔ)句復(fù)合語(yǔ)句是由兩條或兩條以上的語(yǔ)句用花括號(hào){}括起來(lái)組成的。通常將復(fù)合語(yǔ)句看成一條語(yǔ)句進(jìn)行處理。例如:{ sum=sum+i;i++;} 復(fù)合語(yǔ)句常用在if中的分支以及for、while、dowhile語(yǔ)句的循環(huán)體等。含有說(shuō)明語(yǔ)句的復(fù)合語(yǔ)句稱為分程序。塊語(yǔ)句右花括號(hào)后邊不再需要分號(hào)。(4)控制語(yǔ)句改變程序執(zhí)行的方向的語(yǔ)句①goto(轉(zhuǎn)向語(yǔ)句)②if(條件)else(條件語(yǔ)句)③switch(多分支選擇語(yǔ)句)④break(中止執(zhí)行switch或循環(huán)語(yǔ)句)⑤continue(結(jié)束本次循環(huán)語(yǔ)句)⑥r(nóng)eturn(從函數(shù)返回語(yǔ)句)⑦while()(循環(huán)語(yǔ)句)⑧dowhile()(循環(huán)語(yǔ)句)⑨for()(循環(huán)語(yǔ)句)選擇跳轉(zhuǎn)循環(huán)結(jié)構(gòu)(5)函數(shù)和流對(duì)象調(diào)用語(yǔ)句函數(shù)調(diào)用語(yǔ)句由一次函數(shù)調(diào)用加一個(gè)分號(hào)構(gòu)成一個(gè)語(yǔ)句。
如:
sort(a,10);流對(duì)象調(diào)用語(yǔ)句(簡(jiǎn)單的輸入、輸出)向標(biāo)準(zhǔn)輸出設(shè)備(顯示器)輸出例:intx=10;
cout<<“x=“<<x;從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤(pán))輸入例:cin>>x;(6)空語(yǔ)句空語(yǔ)句是只有一個(gè)分號(hào)的語(yǔ)句。;可見(jiàn),空語(yǔ)句是一種不做任何操作的語(yǔ)句序列。該語(yǔ)句用在需要一條語(yǔ)句,但又不做任何操作的地方。例如:有些語(yǔ)句的循環(huán)體等。for(i=1;i<=10;i++)
;本章講述組成C++程序的各種語(yǔ)句。C++語(yǔ)言提供的基本控制結(jié)構(gòu)分三種類型順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)C++語(yǔ)言提供的基本控制結(jié)構(gòu)分三種類型順序結(jié)構(gòu):按照語(yǔ)句的先后順序執(zhí)行程序中的語(yǔ)句。選擇結(jié)構(gòu):按照給定的條件有選擇地執(zhí)行程序中的語(yǔ)句。循環(huán)結(jié)構(gòu):按照給定的規(guī)則重復(fù)地執(zhí)行程序中的語(yǔ)句。3.1順序結(jié)構(gòu)程序設(shè)計(jì)所謂順序控制結(jié)構(gòu),就是按照語(yǔ)句排列的先后順序執(zhí)行程序中的語(yǔ)句。順序控制語(yǔ)句是一類簡(jiǎn)單的語(yǔ)句,包括:表達(dá)式語(yǔ)句、空語(yǔ)句和輸入輸出語(yǔ)句等。在C++中最基本的順序結(jié)構(gòu)是數(shù)據(jù)的輸入和輸出。在用C++編寫(xiě)程序時(shí),實(shí)現(xiàn)順序結(jié)構(gòu)的方法非常簡(jiǎn)單,只需要將語(yǔ)句順序排列即可。例如:交換兩個(gè)整數(shù)值的程序段: t=x; x=y; y=t; 就是順序結(jié)構(gòu)。例如:用*組成一個(gè)菱形的程序?qū)儆陧樞蚪Y(jié)構(gòu)。#include<iostream>usingnamespacestd;voidmain(){cout<<"
*"
<<endl;cout<<"
***"
<<endl;cout<<"
*****"
<<endl;cout<<"
***"
<<endl;cout<<"
*"
<<endl;cout<<endl;}#include<iostream>#include<iomanip>usingnamespacestd;voidmain(){cout<<setw(16)<<"*"<<endl;cout<<setw(17)<<"***"<<endl;cout<<setw(18)<<"*****"<<endl;cout<<setw(17)<<"***"<<endl;cout<<setw(16)<<"*"<<endl;cout<<endl;}如:設(shè)計(jì)一個(gè)程序的菜單的一段程序,也屬于順序結(jié)構(gòu)?!?cout<<"這是兩個(gè)復(fù)數(shù)運(yùn)算的程序"<<endl;cout<<"********************"<<endl;cout<<"請(qǐng)根據(jù)需要選擇要進(jìn)行計(jì)算的種類:\n\n";cout<<"1.加法運(yùn)算"<<endl;cout<<"2.減加法運(yùn)算"<<endl;cout<<"3.乘法運(yùn)算"<<endl;cout<<"4.除法運(yùn)算"<<endl;cout<<"0.退出運(yùn)算"<<endl;cout<<"********************"<<endl;……..通過(guò)上面的介紹,我們可以清楚的知道:語(yǔ)句是程序中可以獨(dú)立執(zhí)行的最小單元,類似于自然語(yǔ)言中的句子。語(yǔ)句一般由分號(hào)結(jié)束。語(yǔ)句通常是由表達(dá)式構(gòu)成的,表達(dá)式尾部加上分號(hào)構(gòu)成表達(dá)式語(yǔ)句。如下列語(yǔ)句:C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
a=b+c;
i+j;;
變量的說(shuō)明必須以分號(hào)結(jié)束,所以變量的說(shuō)明也是語(yǔ)句,叫做說(shuō)明語(yǔ)句。由一對(duì)花括號(hào){}括起來(lái)的多條語(yǔ)句叫做一個(gè)塊語(yǔ)句。例如:{inti=5;i=(i+5)/2;cout<<i<<endl;}
塊語(yǔ)句也叫復(fù)合語(yǔ)句,它在語(yǔ)法上等價(jià)于一條語(yǔ)句。主要用于在程序的某處只允許存在一條語(yǔ)句,而需要執(zhí)行一項(xiàng)必須由多條語(yǔ)句才能完成的操作。注意:表達(dá)式不是語(yǔ)句,所以表達(dá)式不能在程序中獨(dú)立存在。塊語(yǔ)句右花括號(hào)后邊不再需要分號(hào)。由賦值表達(dá)式構(gòu)成的語(yǔ)句,通常稱其為賦值語(yǔ)句。由算術(shù)運(yùn)算表達(dá)式構(gòu)成的語(yǔ)句。由一個(gè)空的表達(dá)式構(gòu)成的語(yǔ)句叫做空語(yǔ)句??照Z(yǔ)句常用于在程序中某處根據(jù)語(yǔ)法要求應(yīng)該有一條語(yǔ)句,而實(shí)際上又沒(méi)有什么操作可執(zhí)行的場(chǎng)合。變量說(shuō)明語(yǔ)句。塊語(yǔ)句。3.2判斷與循環(huán)
流程圖是用來(lái)描述算法(程序)的工具,它具有簡(jiǎn)潔、直觀、準(zhǔn)確的優(yōu)點(diǎn),一些常用的流程圖符號(hào)如圖下:C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
3.3if…else…if判斷式判斷選擇結(jié)構(gòu)又稱條件分支結(jié)構(gòu),是一種基本的程序結(jié)構(gòu)類型。在程序設(shè)計(jì)中,當(dāng)需要進(jìn)行選擇、判斷和處理的時(shí)候,就要用到條件分支結(jié)構(gòu)。條件分支結(jié)構(gòu)的語(yǔ)句一般包括if語(yǔ)句、if–else語(yǔ)句、switch–case語(yǔ)句。3.3.1基本的if語(yǔ)句
一般形式:
if(表達(dá)式)語(yǔ)句;
if(i>10)i=i-5;cout<<i<<endl;
其中:表達(dá)式通常是一個(gè)關(guān)系表達(dá)式或邏輯表式,語(yǔ)句可以是一個(gè)單條語(yǔ)句,或是一個(gè)塊語(yǔ)句,甚至是一個(gè)空語(yǔ)句。它的執(zhí)行過(guò)程如右圖。在C++中,if后面實(shí)際可以跟任意一個(gè)可計(jì)算出結(jié)果的表達(dá)式,甚至可以直接用常量0代表邏輯假,用非0代表邏輯真。
執(zhí)行過(guò)程為:先對(duì)i的值進(jìn)行判斷;如果i的值大于10,則將i的值減5,然后輸出;否則直接輸出i的值。注意:關(guān)系表達(dá)式兩邊的括號(hào)必不可少。不要將關(guān)系表達(dá)式誤寫(xiě)成賦值表達(dá)式。C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
一般形式:
if(表達(dá)式)語(yǔ)句1;else語(yǔ)句2;
if(x>y)cout<<x<<endl;elsecout<<y<<endl;
首先計(jì)算表達(dá)式的值,如果表達(dá)式的值為真,則執(zhí)行語(yǔ)句1;否則就執(zhí)行語(yǔ)句2。流程如右圖所示。通常,將前者叫做if分支,將后者叫做else分支。實(shí)現(xiàn)了從x和y中選擇較大的一個(gè)輸出。
注意:盡管完整的if語(yǔ)句中存在兩個(gè)語(yǔ)句段,且有兩個(gè)表示語(yǔ)句結(jié)束的分號(hào),但整個(gè)語(yǔ)句在語(yǔ)法上只是一條語(yǔ)句。if分支后邊的分號(hào)是不可缺少的(除非這里是一條復(fù)合語(yǔ)句)。3.3.2完整的if語(yǔ)句C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
例3.1在兩個(gè)已知數(shù)中取大數(shù)輸出#include<iostream>usingnamespacestd;voidmain(){ intn1,n2,max; cout<<"輸入兩個(gè)數(shù):"; cin>>n1>>n2;max=n1;
if(max<n2)max=n2; cout<<"max="<<max<<endl;}程序運(yùn)行結(jié)果:輸入兩個(gè)數(shù):53max=5例3.2已知兩個(gè)整數(shù),按從大到小輸出#include<iostream>usingnamespacestd;
voidmain(){inta,b; cout<<"輸入a,b="; cin>>a>>b;
if(a<b)cout<<b<<"\t"<<a<<endl;else cout<<a<<"\t"<<b<<endl; }
將if語(yǔ)句用作if語(yǔ)句的語(yǔ)句段。這就是所謂的if語(yǔ)句的嵌套。if語(yǔ)句的嵌套常用于多次判斷選擇。
【例3-3】將百分制的成績(jī)按等級(jí)分輸出。分析:等級(jí)分為四等:A、B、C、D,分別對(duì)應(yīng)的分?jǐn)?shù)段為90~100、80~89、60~79、0~59,轉(zhuǎn)換時(shí)需要進(jìn)行多次判斷,要用多重選擇結(jié)構(gòu),這里我們選用嵌套的if語(yǔ)句。3.3.3if語(yǔ)句的嵌套
C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
3.3.3if語(yǔ)句的嵌套
78910111213141516171819202122intmain(){ intn; cout<<"Enterthescore:"; cin>>n;if(n>=60) if(n>=90)cout<<"ThedegreeisA"<<endl;elseif(n>=80)cout<<"ThedegreeisB"<<endl;elsecout<<"ThedegreeisC"<<endl;elsecout<<"ThedegreeisD"<<endl;return0;}C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
3.3.3if語(yǔ)句的嵌套
運(yùn)行結(jié)果Enterthescore:86↙ThedegreeisAEnterthescore:74↙ThedegreeisCEnterthescore:48↙ThedegreeisD
由于if語(yǔ)句存在兩種形式,當(dāng)發(fā)生嵌套時(shí)就面臨理解的問(wèn)題,在程序p3-1.cpp中就出現(xiàn)下列嵌套形式:if(表達(dá)式1)if(表達(dá)式2)語(yǔ)句1;else語(yǔ)句2;else解釋為屬于第1個(gè)if與屬于第2個(gè)if會(huì)有完全不同的結(jié)果。else究竟屬于哪個(gè)if?
C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
3.3.3if語(yǔ)句的嵌套
if(表達(dá)式1){if(表達(dá)式2)語(yǔ)句1;}else語(yǔ)句2;if(表達(dá)式1)if(表達(dá)式2)語(yǔ)句1;else語(yǔ)句2;
對(duì)于上述歧義,C++規(guī)定else與前面最近的沒(méi)有else的if語(yǔ)句配對(duì)。因此上述嵌套的if語(yǔ)句解釋如下:if(表達(dá)式1)
if(表達(dá)式2)語(yǔ)句1;else語(yǔ)句2;if(表達(dá)式1){if(表達(dá)式2)語(yǔ)句1;}else語(yǔ)句2;C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
注意(1)if之后的表達(dá)式,通常是邏輯式或關(guān)系式,必須用括號(hào)括起來(lái)。(2)若在條件滿足時(shí)需要執(zhí)行多條語(yǔ)句,必須用{}號(hào)把語(yǔ)句括起來(lái)組成復(fù)合語(yǔ)句。(3)注意;的位置。(4)注意多重ifelse的搭配。if總是與它上面最近的else配對(duì),如要改變,用復(fù)合語(yǔ)句{}(5)注意書(shū)寫(xiě)格式,相互配對(duì)的語(yǔ)句要對(duì)齊例3.4已知3個(gè)浮點(diǎn)數(shù)按從大到小順序輸出。#include<iostream.h>
voidmain(){floata,b,c,t;cout<<"輸入a,b,c=";cin>>a>>b>>c;if(a<b){t=a;a=b;b=t;}if(a<c){t=a;a=c;c=t;}if(b<c){t=b;b=c;c=t;}cout<<a<<"\t"<<b<<"\t"<<c<<endl; }
3.4switch…case判斷式
switch語(yǔ)句也稱開(kāi)關(guān)語(yǔ)句,用于多重選擇的場(chǎng)合,測(cè)試某一個(gè)變量具有多個(gè)值時(shí)所執(zhí)行的動(dòng)作。該語(yǔ)句的功能是根據(jù)給定表達(dá)式的不同取值來(lái)決定從多個(gè)語(yǔ)句序列中的哪一個(gè)語(yǔ)句開(kāi)始執(zhí)行。3.4switch…case判斷式
1、switch語(yǔ)句語(yǔ)法形式:switch(表達(dá)式){case常量表達(dá)式1:[語(yǔ)句塊1][break;]case常量表達(dá)式2:[語(yǔ)句塊2][break;]…case常量表達(dá)式n:[語(yǔ)句塊n][break;][default:語(yǔ)句塊n+1]}表達(dá)式可以是任意一個(gè)合法的C++表達(dá)式,但其值只能是字符型或者整型。常量表達(dá)式是由常量組成的表達(dá)式,其值也只能是字符型常量或者整型常量,各常量表達(dá)式的值不可以重復(fù)(相等)。符號(hào)[]表示其中的內(nèi)容可選,語(yǔ)句塊是可選的,它可以由一條語(yǔ)句或一個(gè)復(fù)合語(yǔ)句組成。break語(yǔ)句、default語(yǔ)句也是可選的。C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
2、switch語(yǔ)句的執(zhí)行過(guò)程:①先求出表達(dá)式的值;②將表達(dá)式的值依次與case后面的常量表達(dá)式值相比較,若與某一常量表達(dá)式的值相等,則轉(zhuǎn)去執(zhí)行該case語(yǔ)句后邊的語(yǔ)句序列,直到遇到break語(yǔ)句或switch語(yǔ)句的右花括號(hào)為止。③若表達(dá)式的值與case語(yǔ)句后的任一常量表達(dá)式的值都不相等,如果有default語(yǔ)句,則執(zhí)行其后邊的語(yǔ)句序列。如果沒(méi)有default語(yǔ)句,則什么也不執(zhí)行。注意:在使用switch-case語(yǔ)句時(shí)經(jīng)常容易丟失必要的break語(yǔ)句,這樣程序會(huì)產(chǎn)生結(jié)果的錯(cuò)誤,此類錯(cuò)誤往往不易發(fā)覺(jué)。C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
在執(zhí)行<語(yǔ)句序列>的各個(gè)語(yǔ)句時(shí),遇到break語(yǔ)句時(shí),則退出該開(kāi)關(guān)語(yǔ)句。如果遇不到break語(yǔ)句時(shí),則依次執(zhí)行其后的<語(yǔ)句序列>,直到開(kāi)關(guān)語(yǔ)句的右花括號(hào),再退出該開(kāi)關(guān)語(yǔ)句。使用開(kāi)關(guān)語(yǔ)句時(shí),應(yīng)注意如下事項(xiàng)。①開(kāi)關(guān)語(yǔ)句中case子句的表達(dá)式是整常型表達(dá)式。通常只能使用整型數(shù)值、字符型常量或枚舉型量等。②通常的<語(yǔ)句序列>中最后一條語(yǔ)句是break,表示退出該開(kāi)關(guān)語(yǔ)句。③在開(kāi)關(guān)語(yǔ)句中,default子句可以被省略,它也可以出現(xiàn)在花括號(hào)內(nèi)的任意位置。④開(kāi)關(guān)語(yǔ)句可以嵌套。⑤在開(kāi)關(guān)語(yǔ)句的<語(yǔ)句序列>中,使用break語(yǔ)句是很重要的?!纠?-5】將百分制的成績(jī)按的等級(jí)分輸出的switch-case語(yǔ)句的實(shí)現(xiàn)。789101112131415161718192021222324252627intmain(){ intn; cout<<"Enterascore:"; cin>>n;switch(n/10) {case9:case10:cout<<"ThedegreeisA"<<endl;break;case8:cout<<"ThedegreeisB"<<endl;break;case7:case6:cout<<"ThedegreeisC"<<endl;break;default:cout<<"ThedegreeisD"<<endl; }
return0;}if語(yǔ)句和switch語(yǔ)句的比較:if語(yǔ)句和switch語(yǔ)句都可以用來(lái)處理程序中的分支問(wèn)題,在許多場(chǎng)合可以互相替代。差別表現(xiàn)為:(1)if語(yǔ)句常用于分支較少的場(chǎng)合;而switch語(yǔ)句常用于分支較多的場(chǎng)合。(2)if語(yǔ)句可以用來(lái)判斷一個(gè)值是否落在一個(gè)范圍內(nèi);而switch語(yǔ)句則要求其相應(yīng)分支的常量必須與某一值嚴(yán)格相等。
C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
例3.5輸入1-7數(shù)字,轉(zhuǎn)換成星期英文表示#include<iostream>usingnamespacestd;voidmain(){ intnum; cout<<“輸入數(shù)字1-7=”;cin>>num; switch(num) { case7:cout<<“TodayisSunday\n";break; case1:cout<<"TodayisMonday\n";break; case2:cout<<"TodayisTuesday\n";break; case3:cout<<"TodayisWednesday\n";break; case4:cout<<"TodayisThursday\n";break; case5:cout<<"TodayisFriday\n";break; case6:cout<<"TodayisSaturday\n";break; default:
cout<<“error!"<<endl;break; }}注意:switch與if不同,它僅能判斷一種邏輯關(guān)系,即表達(dá)式是否等于指定的常量,而if可以計(jì)算并判斷各種表達(dá)式。case子句后必須為常量,常常是整型和字符型。default可以省略,這時(shí),不滿足條件什么也不執(zhí)行。case和default只起標(biāo)號(hào)的作用,順序可以顛倒,顛倒時(shí)注意后面的break語(yǔ)句。多個(gè)case語(yǔ)句可以共用一組程序。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)
循環(huán)是所有編程語(yǔ)言的基本工具之一。它可以使某段程序代碼被反復(fù)執(zhí)行。我們?cè)诔绦蛑?,可以設(shè)置這個(gè)反復(fù)執(zhí)行的過(guò)程,以使循環(huán)執(zhí)行指定次數(shù),或使循環(huán)執(zhí)行到滿足某個(gè)條件為止。循環(huán):能夠用來(lái)使程序反復(fù)執(zhí)行某段代碼,直到滿足給定的條件為止的C++語(yǔ)句。循環(huán)變量:循環(huán)中用于計(jì)數(shù)的變量。循環(huán)修改部分:修改循環(huán)中用作循環(huán)條件變量的值。循環(huán)控制部分:判斷循環(huán)是否結(jié)束。C++提供了三種實(shí)現(xiàn)循環(huán)的方法:
for循環(huán)、while循環(huán)、dowhile循環(huán)所有形式的循環(huán)通常都由四部分組成:(1)初始化部分主要為循環(huán)做準(zhǔn)備工作。包括建立指針,設(shè)置循環(huán)次數(shù)的計(jì)數(shù)初始值,設(shè)置其他變量的初始值等。(2)循環(huán)體在循環(huán)語(yǔ)句中,要重復(fù)執(zhí)行的操作。
循環(huán)體可以是單條語(yǔ)句、塊語(yǔ)句甚至是空語(yǔ)句。是循環(huán)程序的核心,用于完成各種具體操作。(3)修改部分
為執(zhí)行循環(huán)而修改某些參數(shù),如地址指針、計(jì)數(shù)器或某些變量,為下次循環(huán)做準(zhǔn)備。(4)控制部分判斷循環(huán)是否結(jié)束。這部分是循環(huán)程序設(shè)計(jì)的關(guān)鍵,每個(gè)循環(huán)程序必須選擇一個(gè)控制循環(huán)程序運(yùn)行和結(jié)束的條件。通常判斷循環(huán)是否結(jié)束主要有兩種方法。
通常判斷循環(huán)是否結(jié)束的兩種方法:
①計(jì)數(shù)器控制循環(huán):這種方式一般用于循環(huán)次數(shù)已知的情況。②條件控制循環(huán):用于循環(huán)次數(shù)未知的情況,根據(jù)條件決定是否結(jié)束。3.5for循環(huán)for循環(huán)的使用非常靈活,既可以用于循環(huán)次數(shù)已知的情況,也可以用于循環(huán)次數(shù)未知的情況。3.5.1for語(yǔ)句上述格式可理解為:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)循環(huán)體for是關(guān)鍵字;表達(dá)式1、表達(dá)式2和表達(dá)式3是任意表達(dá)式;語(yǔ)句為循環(huán)體,它可以是一條語(yǔ)句,也可以是復(fù)合語(yǔ)句,還可以是空語(yǔ)句。for語(yǔ)句的語(yǔ)法形式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句
for循環(huán)語(yǔ)句的執(zhí)行過(guò)程:
①計(jì)算表達(dá)式1的值。②計(jì)算表達(dá)式2的值,并進(jìn)行判斷,如果表達(dá)式2的值為0(false)則退出該循環(huán),執(zhí)該循環(huán)體后面的語(yǔ)句;如果表達(dá)式2的值為非0(true)轉(zhuǎn)(3)。③執(zhí)行循環(huán)體的語(yǔ)句。④計(jì)算表達(dá)式3的值。⑤轉(zhuǎn)②3.5.1for循環(huán)for循環(huán)語(yǔ)句執(zhí)行過(guò)程圖:C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
【例3-3】求1+3+5+7…+99分析:求1~100的之間的奇數(shù)和就是一個(gè)累加的算法,累加過(guò)程是一個(gè)循環(huán)過(guò)程,可以用for語(yǔ)句實(shí)現(xiàn):567891011121314#include<iostream>usingnamespacestd;intmain(){inti,sum=0;for(i=1;i<100;++i,++i)sum=sum+i;cout<<"sum="<<sum<<endl;return0;}運(yùn)行結(jié)果sum=2500
表達(dá)式1可以省略,此時(shí)表達(dá)式1應(yīng)出現(xiàn)在循環(huán)語(yǔ)句之前。表達(dá)式3可以省略,即將循環(huán)變量增量的操作放在循環(huán)體內(nèi)進(jìn)行。表達(dá)式1不僅可以設(shè)置循環(huán)變量的初值,同時(shí)還可以通過(guò)逗號(hào)表達(dá)式設(shè)置設(shè)置一些其它變量的值。表達(dá)式2和表達(dá)式3都可以這樣。表達(dá)式2如果省略,即不判斷其循環(huán)條件,則循環(huán)將無(wú)終止地進(jìn)行下去。要結(jié)束循環(huán),需要在循環(huán)體內(nèi)設(shè)置break語(yǔ)句,退出循環(huán)。#include<iostream>usingnamespacestd;intmain(){inti; doublesum=1;for(i=1;i<100;++i,++i)sum=sum*i;cout<<"sum="<<sum<<endl;return0;}for語(yǔ)句一般形式:for(<初始化>;<表達(dá)式1>;<表達(dá)式2>)語(yǔ)句;功能:根據(jù)給定的條件,重復(fù)執(zhí)行循環(huán)體語(yǔ)句。for常用于循環(huán)條件已知重復(fù)計(jì)算問(wèn)題。其中:
初始化語(yǔ)句:用于進(jìn)入循環(huán)之前給某些變量賦初值。
表達(dá)式1:計(jì)算表達(dá)式的值,表明循環(huán)的條件
表達(dá)式2:用于對(duì)某些變量的值進(jìn)行修正,保證循環(huán)趨向結(jié)束的語(yǔ)句。先判斷,然后再執(zhí)行循環(huán)體。條件初始化條件為真循環(huán)語(yǔ)句修改循環(huán)條件語(yǔ)句for循環(huán)執(zhí)行過(guò)程圖真假for循環(huán)
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
{語(yǔ)句組1(循環(huán)體)}執(zhí)行過(guò)程演示:
for循環(huán)語(yǔ)句應(yīng)用舉例1、打印100,99,98~1之間的整數(shù)。2、計(jì)算sum=1+2+3+4+…….1003、輸出100以內(nèi)能被3整除且各位數(shù)為6的所有整數(shù)。4、求Fibonacci數(shù)例問(wèn)題,求前20項(xiàng),每行輸出6個(gè)數(shù)。5、計(jì)算n!=1*2*3*…..n,設(shè)n=5。1、打印100,99,88~1之間的整數(shù)。#include<iostream>usingnalespacestd;voidmain(){
for(inti=100;i>=1;i--)cout<<i<<“\t”;cout<<endl;}2、計(jì)算sum=1+2+3+4+…….100。#include<iostream>usingnamespacestd;voidmain(){intsum(0),i(1); for(i=1;i<=100;i++) sum=sum+i;cout<<"i="<<i-1<<"sum="<<sum<<"\n";}3、輸出100以內(nèi)能被3整除且各位數(shù)為6的所有整數(shù)。#include<iostream>usingnamespacestd;voidmain(){inti,j;for(i=0;i<10;i++){j=i*10+6;if(j%3!=0)continue;cout<<j<<"\t";}cout<<endl;}4、求Fibonacci數(shù)例問(wèn)題,求前20項(xiàng),每行輸出6個(gè)數(shù)。#include<iostream>usingnamespacestd;voidmain(){intf1(1),f2(1),m;cout<<"m=";cin>>m;cout<<f1<<"\t"<<f2<<"\t";for(inti=2;i<m;i++){f1=f1+f2;f2=f1+f2;cout<<f1<<"\t"<<f2<<"\t";if(i%3==0)cout<<endl;}cout<<endl;}求Fibonacci數(shù)例問(wèn)題,求前20項(xiàng),每行輸出6個(gè)數(shù)#include<iostream>usingnamespacestd;voidmain(){floata=1,b=1,c;inti;cout<<a<<"\t"<<b<<"\t";for(i=3;i<=20;i++){c=b;b=a+b;a=c;cout<<b<<"\t";if(i%6==0)cout<<endl;}cout<<endl;}5、求n!#include<iostream>usingnamespacestd;voidmain(){doubler=1;inti,n;cout<<"n=";cin>>n;for(i=1;i<=n;i++)r=r*i;cout<<i-1<<"!="<<r<<endl;}
所謂循環(huán)結(jié)構(gòu)嵌套是指一個(gè)循環(huán)體內(nèi)可以包含另一個(gè)完整的循環(huán)結(jié)構(gòu),構(gòu)成多重循環(huán)結(jié)構(gòu)。3.5.2用for語(yǔ)句實(shí)現(xiàn)嵌套循環(huán)C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
【例3-4】用嵌套for語(yǔ)句顯示乘法九九表789101112131415161718intmain(){constintline=9;inti,j,k,l;for(i=0;i<line;i++)//顯示9行{for(j=0;j<=i;j++)//每一行顯示的內(nèi)容cout<<j+1<<"×"<<i+1<<"="<<(j+1)*(i+1)<<"\t";cout<<endl;}return0;}運(yùn)行結(jié)果:1×1=11×2=22×2=41×3=32×3=63×3=91×4=42×4=83×4=124×4=161×5=52×5=103×5=154×5=205×5=25用嵌套for語(yǔ)句顯示乘法九九表,用另一種方法做。#include<iostream>usingnamespacestd;voidmain(){ inti,j; for(i=1;i<=9;i++) cout<<i<<'\t';cout<<endl; for(i=1;i<=9;i++) { for(j=1;j<=i;j++) cout<<i*j<<"\t"; cout<<endl; }}
【例3-5】百錢(qián)百雞問(wèn)題:雞翁一、值錢(qián)五;雞婆一、值錢(qián)三;雞雛三,值錢(qián)一;百錢(qián)買(mǎi)百雞。問(wèn)雞翁、雞婆、雞雛各幾?分析:雞翁最多有20個(gè),雞婆最多有33個(gè),雞雛最多有100個(gè)。采用窮舉的方式,考察每一種可能,是否滿足百錢(qián)買(mǎi)百雞。C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
789101112131415161718intmain(){constintcock=20,hen=33,chick=100;//分別表示雞翁、雞婆、雞雛的最大數(shù) inti,j,k; for(i=0;i<=cock;i++) for(j=0;j<=hen;j++) for(k=0;k<=chick;k++) if((i+j+k)==100&&(5*i+3*j+k/3)==100&&k%3==0) //雞的個(gè)數(shù)與錢(qián)數(shù)必須為整數(shù) cout<<"雞翁、雞婆、雞雛各有:\t"<<i<<"\t"<<j<<"\t"<<k<<endl;
return0;}運(yùn)行結(jié)果:雞翁、雞婆、雞雛各有:02575雞翁、雞婆、雞雛各有:41878雞翁、雞婆、雞雛各有:81181雞翁、雞婆、雞雛各有:12484保證k/3是整數(shù)
循環(huán)優(yōu)化是指通過(guò)減少循環(huán)的層次以及每層循環(huán)體執(zhí)行的次數(shù),以節(jié)省系統(tǒng)資源(時(shí)間),提高程序運(yùn)行效率。百錢(qián)百雞問(wèn)題如何進(jìn)行循環(huán)優(yōu)化?百錢(qián)買(mǎi)百雞,另一方法程序#include<iostream>usingnamespacestd;voidmain(){intco,he,chi;for(co=0;co<=20;co++)for(he=0;he<=33;he++){chi=100-co-he;if(5*co+3*he+chi/3.0==100) cout<<co<<'\t'<<he<<'\t'<<chi<<endl;}}3.6while循環(huán)
有兩種循環(huán)控制語(yǔ)句實(shí)現(xiàn),while語(yǔ)句和do…while語(yǔ)句。條件表達(dá)式給出是否執(zhí)行循環(huán)體的判斷條件,常用關(guān)系表達(dá)式或邏輯表達(dá)式作為條件表達(dá)式,也可以用其他表達(dá)式或常量;語(yǔ)句是while循環(huán)的循環(huán)體,它可以是一條語(yǔ)句,也可以是復(fù)合語(yǔ)句。語(yǔ)句為循環(huán)體,它可以是一條語(yǔ)句,也可以是復(fù)合語(yǔ)句,還可以是空語(yǔ)句。3.6.1while語(yǔ)句語(yǔ)法形式:C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
while(條件表達(dá)式)語(yǔ)句while循環(huán)語(yǔ)句執(zhí)行過(guò)程格式:while(<條件>){循環(huán)語(yǔ)句;}功能:先檢查循環(huán)條件,如果為真,則執(zhí)行循環(huán)語(yǔ)句。如果條件為假,則跳過(guò)循環(huán)語(yǔ)句。執(zhí)行其后面的語(yǔ)句。
while用來(lái)實(shí)現(xiàn)“當(dāng)型”循環(huán)結(jié)構(gòu)。先判斷,后執(zhí)行循環(huán)體語(yǔ)句。真假條件初始化條件為真循環(huán)語(yǔ)句修改循環(huán)條件語(yǔ)句
循環(huán)執(zhí)行過(guò)程圖
注意:①執(zhí)行while循環(huán)語(yǔ)句時(shí),先計(jì)算<條件>給出的表達(dá)式的值。如果第一次計(jì)算的表達(dá)式值為0時(shí),一次循環(huán)體也不執(zhí)行。②如果循環(huán)語(yǔ)句中給定的表達(dá)式值永遠(yuǎn)為非0時(shí),而循環(huán)體內(nèi)又無(wú)退出循環(huán)的語(yǔ)句,則為無(wú)限循環(huán)。③該循環(huán)語(yǔ)句可以嵌套。例、計(jì)算sum=1+2+3+4+…….100#include<iostream>usingnamespacestd;voidmain(){intsum=0,i=1;//定義變量,初始化 while(i<=100)//構(gòu)造循環(huán) {sum=sum+i;//循環(huán)體,多次執(zhí)行
i++;
//修改循環(huán)控制變量}cout<<"i="<<i-1<<“sum="<<sum<<“\n”;}//輸出結(jié)果i=100s=5050
3.6.2do--while語(yǔ)句do-while也是一種循環(huán)結(jié)構(gòu),稱為“直到型”循環(huán)。do…while語(yǔ)句先執(zhí)行循環(huán)體后判斷條件表達(dá)式的值,若表達(dá)式的值為真則反復(fù)地執(zhí)行循環(huán)體,直到表達(dá)式的值為假才退出循環(huán)。因此,do…while語(yǔ)句也被叫做“直到”型循環(huán)。do語(yǔ)句的特點(diǎn)是:先執(zhí)行循環(huán)體,后判斷循環(huán)條件是否成立。條件初始化條件為真循環(huán)語(yǔ)句修改循環(huán)條件語(yǔ)句循環(huán)執(zhí)行過(guò)程圖真假do-while循環(huán)語(yǔ)句格式do{循環(huán)語(yǔ)句;}while(條件表達(dá)式);其中:條件表達(dá)式給出是否執(zhí)行循環(huán)體的判斷條件,常用關(guān)系表達(dá)式或邏輯表達(dá)式作為條件表達(dá)式,也可以用其他表達(dá)式或常量;功能:程序先執(zhí)行循環(huán)體,然后再檢查循環(huán)條件。如果條件為真,重復(fù)執(zhí)行循環(huán)語(yǔ)句。
先執(zhí)行一次循環(huán)體<語(yǔ)句>,再計(jì)算<條件表達(dá)式>中給定的表達(dá)式的值。
如果該表達(dá)式的值為非0時(shí),則再執(zhí)行循環(huán)體,直到其值為0時(shí),退出循環(huán)語(yǔ)句。
先執(zhí)行語(yǔ)句,后判斷條件。
do-while循環(huán)語(yǔ)句的執(zhí)行過(guò)程注意:①該循環(huán)語(yǔ)句的特點(diǎn)是無(wú)論<條件>如何,至少執(zhí)行一次循環(huán)體<語(yǔ)句>。當(dāng)?shù)谝淮窝h(huán)表達(dá)式的值為真時(shí),while與do—while的結(jié)果完全一樣,否則結(jié)果不相同。②該循環(huán)語(yǔ)句可以用while循環(huán)語(yǔ)句表示,其格式如下:
<語(yǔ)句;>while(<條件>)<語(yǔ)句;>③該循環(huán)語(yǔ)句可以嵌套。例、計(jì)算sum=1+2+3+4+…….100#include<iostream.h>voidmain(){intsum=0,i=1; do {sum=sum+i;
i++;
}while(i<=100)cout<<"i="<<i-1<<"sum="<<sum<<“\n”;}例、已知一個(gè)自然數(shù),編程將該自然數(shù)的每一位按其逆序輸出。#include<iostream>usingnamespacestd;voidmain(){longintn=54321,d;do{d=n%10;cout<<d; n/=10;}while(n>0);cout<<endl;}while和do…while語(yǔ)句在一定條件下,while循環(huán)可能一次都不執(zhí)行,而do…while循環(huán)在任何條件下都至少要執(zhí)行一次。這一點(diǎn)正是在程序設(shè)計(jì)中決定選擇while語(yǔ)句還是do...while語(yǔ)句的重要依據(jù)。C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
while與do…while語(yǔ)句的執(zhí)行流程:
注意:while(條件表達(dá)式)后面分號(hào)不可省去。在一定條件下,while循環(huán)可能一次都不執(zhí)行,而do…while循環(huán)在任何條件下都至少要執(zhí)行一次。這一點(diǎn)正是在程序設(shè)計(jì)中決定選擇while語(yǔ)句還是do...while語(yǔ)句的重要依據(jù)。while與do…while語(yǔ)句的執(zhí)行流程:
在一定條件下,while循環(huán)可能一次都不執(zhí)行,而do…while循環(huán)在任何條件下都至少要執(zhí)行一次。這一點(diǎn)正是在程序設(shè)計(jì)中決定選擇while語(yǔ)句還是do...while語(yǔ)句的重要依據(jù)。while與do…while語(yǔ)句的執(zhí)行流程:
在一定條件下,while循環(huán)可能一次都不執(zhí)行,而do…while循環(huán)在任何條件下都至少要執(zhí)行一次。這一點(diǎn)正是在程序設(shè)計(jì)中決定選擇while語(yǔ)句還是do...while語(yǔ)句的重要依據(jù)?!纠?-6】分別用while循環(huán)do…while循環(huán)求1+3+5+7+…+99C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
注意:應(yīng)用while語(yǔ)句與do…while語(yǔ)句時(shí)應(yīng)注意,一般來(lái)說(shuō)在循環(huán)體中,應(yīng)該包含改變循環(huán)條件表達(dá)式的語(yǔ)句,否則便會(huì)造成無(wú)限循環(huán)(死循環(huán))。37891011121314151617/*用while語(yǔ)句計(jì)算1+3+...+99*/intmain(){inti=1,sum=0;while(i<100){sum=sum+i;++i,++i;}cout<<"sum="<<sum<<endl;return0;}/*用do...while計(jì)算1+3+...+99*/intmain(){inti=1,sum=0;do {sum=sum+i;++i,++i; }while(i<100);cout<<"sum="<<sum<<endl;return0;}在本例中,改變循環(huán)條件的語(yǔ)句是++i,++i;這兩個(gè)程序在任何時(shí)候運(yùn)行結(jié)果都相同嗎?在什么時(shí)候結(jié)果不相同?3.7break,continue,goto語(yǔ)句
C++語(yǔ)言提供了三個(gè)轉(zhuǎn)移語(yǔ)句:break語(yǔ)句、continue語(yǔ)句和goto語(yǔ)句。主要用于改變程序中語(yǔ)句的執(zhí)行順序,使程序從某一語(yǔ)句有目的地轉(zhuǎn)移到另一語(yǔ)句繼續(xù)執(zhí)行。break語(yǔ)句的功能是:中斷所在循環(huán)體或switch...case語(yǔ)句塊,跳轉(zhuǎn)本層循環(huán)體外。3.7.1break語(yǔ)句break語(yǔ)句的格式:C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
【例3-8】判斷一個(gè)數(shù)是否為素?cái)?shù)。分析:素?cái)?shù)是不能被大于或等于2的數(shù)整除的數(shù)。用一個(gè)循環(huán)依次判斷此數(shù)是否被大于等于2的數(shù)整除,一旦被一個(gè)數(shù)整除,就用break跳出循環(huán),宣布此數(shù)不是素?cái)?shù)。
break;C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
7891011121314151617181920intmain(){inti,n;while(1){cout<<“n=“;cin>>n;if(n<=1)break;for(i=2;i<n;i++)if(n%i==0)break;i>=n?cout<<n<<"是素?cái)?shù)\n":cout<<n<<"不是素?cái)?shù)\n";}return0;}運(yùn)行結(jié)果:5↙5是素?cái)?shù)6↙6不是素?cái)?shù)7↙7是素?cái)?shù)0↙
當(dāng)判斷不是一個(gè)素?cái)?shù)時(shí),用break中斷循環(huán)。由于break所在的是多重循環(huán)的內(nèi)層,因此外層循環(huán)仍未中斷。break中斷了最外層循環(huán),中止了繼續(xù)從鍵盤(pán)繼續(xù)輸入數(shù)據(jù)。注意:既然break語(yǔ)句用來(lái)中斷循環(huán),它一定要用在循環(huán)體或swtich...case體中,用在其它地方就會(huì)出錯(cuò)。#include<iostream>usingnamespacestd;intmain(){inti,n;while(1){cout<<"n=";cin>>n;if(n<=1)break;for(i=2;i<n;i++)if(n%i==0)break;i>=n?cout<<n<<"是素?cái)?shù)\n":cout<<n<<"不是素?cái)?shù)\n";}return0;}continue語(yǔ)句只能用在循環(huán)語(yǔ)句的循環(huán)體內(nèi)。在循環(huán)執(zhí)行的過(guò)程中,如果遇到continue語(yǔ)句,程序?qū)⒔Y(jié)束本次循環(huán),接著開(kāi)始下一次的循環(huán)。continue語(yǔ)句的格式:C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
【例】使用continue改寫(xiě)判斷素?cái)?shù)的程序:
continue;3.7.2continue語(yǔ)句7891011121314151617181920intmain(){inti,n;while(1){cout<<“n=“;cin>>n;if(n<=1)break;for(i=2;i<n;i++)if(n%i==0)break;i>=n?cout<<n<<"是素?cái)?shù)\n":cout<<n<<"不是素?cái)?shù)\n";}return0;}continue當(dāng)不是素?cái)?shù),直接跳到第15行繼續(xù)執(zhí)行。程序結(jié)果錯(cuò)誤。程序跳到語(yǔ)句標(biāo)號(hào)位置繼續(xù)執(zhí)行。語(yǔ)句標(biāo)號(hào)屬于標(biāo)識(shí)符,格式如下:goto語(yǔ)句的格式:C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
goto語(yǔ)句標(biāo)號(hào);3.7.3goto語(yǔ)句
語(yǔ)句標(biāo)號(hào):語(yǔ)句
其中的語(yǔ)句可以是任意語(yǔ)句,如:dowhile、while()、for()...等。goto語(yǔ)句的使用限制在一個(gè)函數(shù)體內(nèi),即goto語(yǔ)句只能在一個(gè)函數(shù)范圍內(nèi)進(jìn)行語(yǔ)句轉(zhuǎn)移。在同一函數(shù)中,語(yǔ)句標(biāo)號(hào)應(yīng)該是唯一的。C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
【例3-9】使用goto語(yǔ)句改寫(xiě)判斷素?cái)?shù)的程序:3.7.3goto語(yǔ)句7891011121314151617181920voidmain(){inti,n;while(1){cout<<“n=“;cin>>n;if(n<=1)break;for(i=2;i<n;i++)if(n%i==0)break;i>=n?cout<<n<<"是素?cái)?shù)\n":cout<<n<<"不是素?cái)?shù)\n";}return0;}加上標(biāo)號(hào)goon:gotogoon;運(yùn)行結(jié)果:與原程序相同注意:盡管C++語(yǔ)言中提供了goto語(yǔ)句,但它決不鼓勵(lì)程序員使用goto語(yǔ)句。在早期的程序設(shè)計(jì)方法中,goto語(yǔ)句是控制程序流程的基本手段之一而在現(xiàn)代程序設(shè)計(jì)方法中,它則變成了程序設(shè)計(jì)高手的技巧之一。
3.8本章小結(jié)
語(yǔ)句用于完成一定功能,對(duì)程序?qū)嵭辛鞒炭刂?。一系列語(yǔ)句構(gòu)成程序。
表達(dá)式語(yǔ)句由表達(dá)式加上分號(hào)構(gòu)成,完整實(shí)現(xiàn)表達(dá)式的功能;結(jié)構(gòu)語(yǔ)句用于控制程序的結(jié)構(gòu);塊語(yǔ)句是用{}括起來(lái)的各種語(yǔ)句系列,在程序中可以看成是一條語(yǔ)句。
if語(yǔ)句有基本形式與if...else形式,由這兩種形式可以組合成各種結(jié)構(gòu),但本質(zhì)上只有這兩種形式。在兩種形式組合使用發(fā)生理解的歧義時(shí),C++規(guī)定else與前面最近的沒(méi)有else的if語(yǔ)句配對(duì)。
switch...case語(yǔ)句方便實(shí)現(xiàn)多重分支,使程序結(jié)構(gòu)更加清晰。但不能取代基本的if語(yǔ)句。
C++提供了for、while、do…while三種循環(huán)語(yǔ)句,不同場(chǎng)合、不同使用者使用不同的語(yǔ)句,一般來(lái)說(shuō):當(dāng)不知道循環(huán)次數(shù)時(shí),可以考慮使用while語(yǔ)句;當(dāng)不知道循環(huán)次數(shù)時(shí),但循環(huán)至少執(zhí)行一次時(shí),使用do...while語(yǔ)句;for語(yǔ)句最復(fù)雜也最靈活,一般在已知循環(huán)次數(shù)時(shí)可以考慮使用for語(yǔ)句。使用for語(yǔ)句時(shí)要注意,for語(yǔ)句體中其中的最后一個(gè)表達(dá)式在循環(huán)體執(zhí)行完后再執(zhí)行。
break語(yǔ)句用在循環(huán)和switch...case語(yǔ)句中,用于跳出語(yǔ)句塊。continue語(yǔ)句用在循環(huán)語(yǔ)句中,用來(lái)結(jié)束本次循環(huán),忽略后面的語(yǔ)句。C++語(yǔ)言程序設(shè)計(jì)教程第3章控制結(jié)構(gòu)
3.9程序設(shè)計(jì)舉例1、輸入圓的半徑,計(jì)算并輸出該圓的面積。2、輸入圓的半徑,計(jì)算并輸出該圓的面積。3、已知圓半徑r,求圓的周長(zhǎng)c和面積s的值。其中r的值由鍵盤(pán)輸入。4、輸入3個(gè)整數(shù)x,y,z,從大小到大排序輸出。5、編寫(xiě)一個(gè)程序輸入年、月,打印出該月的天數(shù)。6、計(jì)算PI值程序PI/4=1-1/3+1/5-1/7+….,最后一項(xiàng)絕對(duì)值小于1e-8。7、打印3—100內(nèi)的素?cái)?shù)8、輸入兩個(gè)正整數(shù)m和n,求其最大公約數(shù)9、打印圖形10、求下列分?jǐn)?shù)序列前15項(xiàng)之和。
2/1,3/2,5/3,8/5,13/8,…11、按下列公式,求e的近似值。
e=1+1/1!+1/2!+1/3!+…+1/n!12、設(shè)計(jì)輸入年、月、日,輸出到該月的總天數(shù)的程序。例1、輸入圓的半徑,計(jì)算并輸出該圓的面積。#include<iostream>usingnamaspacestd;voidmain(){floatr,s;cout<<"輸入圓的半徑:";cin>>r;s=3.14159*r*r;cout<<"半徑為"<<r<<"圓的面積="<<s<<'\n';}2、輸入圓的半徑,計(jì)算并輸出該圓的面積。#include<iostream>usingnamespacestd;floatarea(floatr) {return3.14159*r*r;}voidmain(){ floatr,s; cout<<"輸入圓的半徑:"; cin>>r;s=area(r); cout<<"半徑為"<<r<<"圓面積="<<s<<'\n'; }用函數(shù)實(shí)現(xiàn)3、已知圓半徑r,求圓的周長(zhǎng)c和面積s的值。其中r的值由鍵盤(pán)輸入。#include<iostream>usingnamaspacestd;voidmain(){floatr,s,c;cout<<"輸入圓的半徑:";cin>>r;s=3.14159*r*r;c=3.14159*r*2;cout<<"半徑為"<<r<<"圓的面積="<<s<<'\n';cout<<“周長(zhǎng)=“<<c<<endl;}1、輸入3個(gè)整數(shù)x,y,z,從大小到大排序輸出。#include<iostream>usingnamespacestd;voidmain(){intx,y,z,t;cin>>x>>y>>z;if(x>y){t=x;x=y;y=t;} //交換x,y的值if(x>z){t=z;z=x;x=t;} /交換x,z的值if(y>z){t=y;y=z;z=t;} //交換z,y的值cout<<x<<'t'<<y<<'t'<<z);}程序運(yùn)行結(jié)果:(從鍵盤(pán)輸入:675)5 6 72、編寫(xiě)一個(gè)程序輸入年、月,打印出該月的天數(shù)。解:根據(jù)立法,凡是1、3、5、7、8、10、12月,每月31天,凡是4、6、9、11月,每月是30天,2月份閏年是29天,平年是28天。閏年條件:year%4==0andyear%100!=0或者year%400==0程序(p日歷)如下:#include<iostream>usingnamespacestd;voidmain(){intyear,month,day;cout<<"inputyear,month,day=\n";cin>>year>>month;switch(month){case2:day=28;break;case4:case6:case9:case11:day=30;break;default:day=31;}if((month>=2)&&(year%4==0&&year%100!=0||year%100==0))day=29;cout<<year<<“年”<<month<<“月有”;cout<<day<<“天"<<endl;}3、計(jì)算PI值程序PI/4=1-1/3+1/5-1/7+….,最后一項(xiàng)絕對(duì)值小于1e-8#include<iostream>usingnamespacestd;voidmain(){inti;doublePI(0),f(1.0);for(i=1;i<1000;i+=2){PI=PI+f/i;f=f*(-1);if(1.0/i<1e-8)break;}PI=PI*4;cout<<"steps:"<<i<<"\tPI="<<PI<<endl;}4、打印3—100內(nèi)的素?cái)?shù)#include<iostream>usingnamespacestd;voidmain(){intm,n;cout<<"theprimenumberis:\n";for(m=3;m<100;m+=2){for(n=2;n<m;n++)if(m%n==0)break;if(n>=m)cout<<m<<"\t";}}4、打印3—100內(nèi)的素?cái)?shù)
#include<iostream>usingnamespacestd;voidmain(){intm,n;cout<<"theprimenumberis:\n";for(m=3;m<100;m+=2){for(n=2;n<=m/2;n++)if(m%n==
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年版影視制作與發(fā)行合同
- 美業(yè)門(mén)店培訓(xùn)課程設(shè)計(jì)
- 英語(yǔ)加國(guó)學(xué)課程設(shè)計(jì)理念
- 感覺(jué)統(tǒng)合課程設(shè)計(jì)大班
- 油畫(huà)初學(xué)者 課程設(shè)計(jì)
- 2024政法干警考試復(fù)習(xí)資料
- 系統(tǒng)動(dòng)力學(xué)課程設(shè)計(jì)總結(jié)
- 深圳市政府投資交通建設(shè)項(xiàng)目管理模式-第二冊(cè)
- 大班社會(huì)簽到課程設(shè)計(jì)
- 2024年羽絨家紡銷售崗位職責(zé)(共8篇)
- 2023年香港華夏杯六年級(jí)競(jìng)賽初賽數(shù)學(xué)試卷
- 高中數(shù)學(xué)放縮法
- 上海市閔行區(qū)2024-2025學(xué)年八年級(jí)(上)期末物理試卷(解析版)
- 2024年國(guó)考行測(cè)真題-言語(yǔ)理解與表達(dá)真題及完整答案1套
- 人教版三年級(jí)上冊(cè)數(shù)學(xué)期末測(cè)試卷可打印
- 醫(yī)療高級(jí)職稱評(píng)審論文答辯
- 設(shè)計(jì)服務(wù)保障措施方案
- 軟件測(cè)試方案模板(完整版)
- 建筑幕墻工程(鋁板、玻璃、石材)監(jiān)理實(shí)施細(xì)則(全面版)
- 基于課程標(biāo)準(zhǔn)的學(xué)生創(chuàng)新素養(yǎng)培育的學(xué)科教學(xué)改進(jìn)研究課題申報(bào)評(píng)審書(shū)
- 批判性思維技能測(cè)試題及答案
評(píng)論
0/150
提交評(píng)論