版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
C++程序設(shè)計主講:王金湘第三章流程控制語句結(jié)構(gòu)化程序設(shè)計的特點是任何程序都可由三種根本結(jié)構(gòu)及其組合來描述。本章將介紹C++選擇結(jié)構(gòu)結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的設(shè)計方法。這兩種結(jié)構(gòu)分別用C++提供的兩類流程控制語句選擇結(jié)構(gòu)語句和循環(huán)語句來實現(xiàn)。
所謂流程控制語句,是專門用來控制程序執(zhí)行流程的語句,也稱為過程化語句。在介紹選擇結(jié)構(gòu)語句、循環(huán)語句及其程序設(shè)計的同時,還將介紹一些常用算法,并通過實例實踐結(jié)構(gòu)化程序設(shè)計的方法。VC++程序設(shè)計王金湘3選擇結(jié)構(gòu)程序設(shè)計對程序的運行流程進行控制,主要通過執(zhí)行專門用來控制流程的語句來實現(xiàn)。流程控制語句也稱為過程化語句。選擇結(jié)構(gòu)語句是三種根本流程控制語句之一。C++提供以下三種分支語句:if語句條件運算符“?:〞swith語句VC++程序設(shè)計王金湘4if語句if語句有兩種根本格式為:1、if(<表達式>)<語句1>2、if(<表達式>)<語句1>else <語句2>VC++程序設(shè)計王金湘5if語句【例】輸入一個年份,判斷是否閏年。算法分析:假定年份為year,閏年的條件是:year%4==0&&year%100!=0||year%400==0。#include<iostream.h>voidmain(){ intyear; cout<<“輸入年份:〞<<endl; cin>>year; if(year%4==0&&year%100!=0||year%400==0) cout<<year<<“是閏年〞<<endl; elsecout<<year<<“不是閏年〞<<endl;}VC++程序設(shè)計王金湘6分析:讀入三個數(shù),先求出兩個數(shù)中較大者,再將該大數(shù)與第三個數(shù)比較,求出最大數(shù)。#include<iostream.h>voidmain(){inta,b,c,max;cout<<“輸入三個正數(shù):〞;cin>>a>>b>>c;cout<<"a="<<a<<'\t'<<"b="<<b<<'\t'<<"c="<<c<<endl;if(a>b)max=a; elsemax=b;//先求出兩個數(shù)的較大者if(c>max)cout<<“最大數(shù)為:〞<<c<<endl;//與第三個數(shù)比較elsecout<<“最大數(shù)為:〞<<max<<endl;}if語句【例】從鍵盤上輸入三個整數(shù),輸出其中的最大數(shù)。VC++程序設(shè)計王金湘7if語句中,如果內(nèi)嵌語句又是if語句,就構(gòu)成了嵌套if語句。if語句可實現(xiàn)二選一分支,而嵌套if語句那么可以實現(xiàn)多項選擇一的多路分支情況。嵌套有兩種形式:第一種是嵌套在else分支中:if(<表達式1>)<語句1>elseif(<表達式2>)<語句2>elseif…else<語句n>第二種是嵌套在if分支中為:if(<表達式1>)if(<表達式2>)<語句1>else<語句2>if語句——嵌套VC++程序設(shè)計王金湘8//方法1:采用else中嵌套形式#include<iostream.h>voidmain(){ inta,b,c,max; cout<<"輸入三個正數(shù):"; cin>>a>>b>>c; cout<<"a="<<a<<'\t'<<"b="<<b<<'\t'<<"c="<<c<<endl;
if(a>b&&a>c)max=a;
elseif(b>a&&b>c)max=b;
elsemax=c; cout<<"最大數(shù)為:max="<<max;}
if語句【例】用嵌套if語句完成【上例】的任務(wù)。VC++程序設(shè)計王金湘9//方法2:采用if中嵌套形式#include<iostream.h>voidmain(){
inta,b,c,max; cout<<"輸入三個正數(shù):"; cin>>a>>b>>c; cout<<"a="<<a<<'\t'<<"b="<<b<<'\t'<<"c="<<c<<endl;
if(a>b)if(a>c)max=a; //a>b且a>c
elsemax=c; //a>b且a<c
elseif(b>c)max=b; //a<=b且b>c
elsemax=c; //a<=b且b<c cout<<"最大數(shù)max="<<max;}if語句【例】用嵌套if語句完成【上例】的任務(wù)。VC++程序設(shè)計王金湘10C++規(guī)定了if和else的“就近配對〞原那么,即相距最近且還沒有配對的一對if和else首先配對。按上述規(guī)定,上例第二種嵌套形式中的else應(yīng)與第二個if配對。如果根據(jù)程序的邏輯需要改變配對關(guān)系,那么要將屬于同一層的語句放在一對“{}〞中。例如第二種嵌套形式中,如果要讓else和第一個if配對,語句必須寫成:if(<表達式1>){ if(<表達式2>)<語句1>}else<語句2>else和if的配對關(guān)系注意:第二種嵌套形式較容易產(chǎn)生邏輯錯誤,而第一種形式配對關(guān)系那么非常明確,因此從程序可讀性角度出發(fā),建議盡量使用第一種嵌套形式。VC++程序設(shè)計王金湘11請看以下兩個語句://語句1:if(n%3==0) if(n%5==0)cout<<n<<″是15的倍數(shù)″<<endl;elsecout<<n<<″是3的倍數(shù)但不是5的倍數(shù)″<<endl;//語句2:if(n%3==0){ if(n%5==0)cout<<n<<″是15的倍數(shù)″<<endl;} elsecout<<n<<″不是3的倍數(shù)″;兩個語句的差異只在于一個“{}〞,但表達的邏輯關(guān)系卻完全不同。else和if的配對關(guān)系VC++程序設(shè)計王金湘12【例】某商場優(yōu)惠活動規(guī)定,某種商品單價為80元,一次購置5件以上〔包含5件〕10件以下〔不包含10件〕打9折,一次購置10件以上〔包含10件〕打8折。設(shè)計程序根據(jù)客戶的購置量計算總價。if語句VC++程序設(shè)計王金湘13算法輸入購置件數(shù)count,設(shè)置單價price=80(元)根據(jù)count值確定折扣discount;實際售價amount=price*count*discount;輸出amount的值。算法細化:if〔count<5〕discount=1;if〔count>=5&&count<10〕discount=0.9;if〔count>=10〕discount=0.8;VC++程序設(shè)計王金湘14#include<iostream.h>voidmain(){ floatprice=80,discount,amount; //單價、折扣、總價 intcount; //購置件數(shù) cout<<"輸入購置件數(shù):"<<endl; cin>>count; if(count<5)discount=1; elseif(count<10)discount=0.9; elsediscount=0.8; amount=price*count*discount; cout<<"購置件數(shù):"<<count<<endl; cout<<"單價:"<<price<<'\t'<<“折扣:〞 <<discount<<endl; cout<<"總價:"<<amount<<endl;}請將該程序在VC++平臺上運行,輸入不同的件數(shù),使程序所有分支都可以被執(zhí)行一次。if語句VC++程序設(shè)計王金湘15【例】求一元二次方程 ax2+bx+c=0的根。其中系數(shù)a(a≠0)、b、c的值由鍵盤輸入。分析:輸入系數(shù)a(a≠0)、b、c后, 令delta=b2–4ac,結(jié)果有三種情況:假設(shè)delta=0,方程有兩個相同實根;假設(shè)delta>0,方程有兩個不同實根;假設(shè)delta<0,方程無實根。if語句VC++程序設(shè)計王金湘16算法輸入系數(shù)a(a≠0)、b、c;令delta=b2–4ac;根據(jù)delta的值求方程的根;輸出方程的根;算法細化:if〔delta==0〕方程有兩個相同實根;計算…if〔delta>0〕方程有兩個不同實根;計算…if〔delta<0〕方程無實根;計算…VC++程序設(shè)計王金湘17#include<iostream.h>#include<math.h>voidmain(){
floata,b,c;
floatdelta,x1,x2;
constfloatzero=0.0001;//定義一個很小的常數(shù)
cout<<"輸入三個系數(shù)a(a!=0),b,c:"<<endl; cin>>a>>b>>c; cout<<"a="<<a<<'\t'<<"b="<<b<<‘\t’ <<"c="<<c<<endl; delta=b*b-4*a*c;求一元二次方程的根源程序VC++程序設(shè)計王金湘18 if(fabs(delta)<zero){//絕對值很小的數(shù)即被認為是0 cout<<"方程有兩個相同實根:"; cout<<"x1=x2="<<-b/(2*a)<<endl; } elseif(delta>0){ delta=sqrt(delta); x1=(-b+delta)/(2*a); x2=(-b-delta)/(2*a); cout<<"方程有兩個不同實根:"; cout<<"x1="<<x1<<'\t'<<"x2=“ <<x2<<endl; }
else //delta<0 cout<<"方程無實根!"<<endl;}VC++程序設(shè)計王金湘19條件運算符“?:〞if語句在某些情況下可以用條件運算符“?:〞來簡化表達?!?:〞是一個三元運算符,其構(gòu)成的表達式格式為:<表達式1>?<表達式2>:<表達式3>執(zhí)行邏輯:先計算表達式1,假設(shè)其值為真〔或非0〕,那么計算表達式2〔不計算表達式3〕,并將該值作為整個表達式的值;反之,即表達式1的值為假或為0,那么計算表達式3〔不計算表達式2〕,并將該值作為整個表達式的值。例如:inta=6,b=7,min=a<b?a:b; min=a<b?++a:++b;min=a<b?a++:b++;//min=6 //min=7a=7b=7//min=6a=7b=7VC++程序設(shè)計王金湘20switch語句用嵌套if語句可以實現(xiàn)多項選擇一的情況(選項多的時候嵌套很復(fù)雜)。另外C++中還提供了一個switch語句,稱為開關(guān)語句,也可以用來實現(xiàn)多項選擇一:switch(<表達式>){case<常量表達式1>:?<語句序列1>??break;?……case<常量表達式n>:?<語句序列n>??break;?
?default:<語句序列>?}//該表達式只能是字符型或整型VC++程序設(shè)計王金湘21
switch語句格式〔1〕各個case〔包括default〕分支出現(xiàn)的次序可以任意,但通常將default放在最后?!?〕break語句可選。 如果沒有break語句,每一個case分支都只作為開關(guān)語句的執(zhí)行入口,執(zhí)行完該分支后,還將接著執(zhí)行其后的所有分支。 因此,為保證邏輯的正確實現(xiàn),通常每個case分支都與break語句聯(lián)用?!?〕每個常量表達式的取值必須各不相同,否那么將引起歧義。VC++程序設(shè)計王金湘22〔4〕允許多個常量表達式對應(yīng)同一個語句序列。例如:charscore;cin>>score;switch(score){case′A′:case′a′: cout<<″excellent″; break;case′B′:case′b′: cout<<″good″; break;default:cout<<″fair″;}
switch語句格式〔5〕從形式上看,switch語句的可讀性比嵌套if語句好,但不是所有多項選擇一的問題都可由開關(guān)語句完成,這是因為開關(guān)語句中限定了條件表達式的取值類型。VC++程序設(shè)計王金湘23
switch語句格式VC++程序設(shè)計王金湘24switch語句例子【例】運輸公司對所運貨物實行分段計費。設(shè)運輸里程為s,那么運費打折情況如下: s<250 不打折扣 250<=s<500 2%折扣 500<=s<1000 5%折扣 1000<=s<2000 8%折扣 2000<=s<3000 10%折扣 3000<=s 15%折扣設(shè)每公里每噸的根本運費為p,貨物重量為w,折扣為d,那么總運費f為:f=p*w*s*(1-d)設(shè)計程序,當(dāng)輸入p、w和s后,計算運費f。VC++程序設(shè)計王金湘25算法1、輸入每噸運費p、貨物重量w、運輸里程s;2、根據(jù)運輸里程s計算折扣d;3、計算總運費f=p*w*s*(1-d);4、輸出計算結(jié)果;算法細化:根據(jù)運輸里程s計算折扣d分析:如果用switch語句,必須使表達式符合語法要求,分析發(fā)現(xiàn),里程s的分段點均是250的倍數(shù),因此,將里程s除以250,取整數(shù)商,便得到假設(shè)干整數(shù)值。VC++程序設(shè)計王金湘26switch(c=s/250){case0:d=0;break;
case1:d=0.02;break;case2:case3:d=0.05;break;case4:case5:case6:case7:d=0.08;break;case8:case9:case10:case11:d=0.1;break;default:d=0.15;}s<250 不打折扣250<=s<500 2%折扣500<=s<1000 5%折扣1000<=s<2000 8%折扣2000<=s<3000 10%折扣3000<=s15%折扣VC++程序設(shè)計王金湘27#include<iostream.h>voidmain(){int
c,s;floatp,w,d,f; cout<<"輸入運輸單價p,重量w和里程s:"<<endl; cin>>p>>w>>s;c=s/250;
switch(c){
case0:d=0;break;
case1:d=0.02;break;
case2:case3:d=0.05;break;
case4:case5:case6:case7:d=0.08;break;
case8:case9:case10:case11:d=0.1;break;
default:d=0.15;} f=p*w*s*(1-d); cout<<"運輸單價為"<<p<<'\t'<<"重量為"<<w<<'\t’ <<"里程為"<<s<<endl; cout<<"折扣為"<<d<<endl; cout<<"運費為"<<f<<endl;}VC++程序設(shè)計王金湘28【例】設(shè)計一個計算器程序,實現(xiàn)加、減、乘、除運算。分析:讀入兩個操作數(shù)和運算符,根據(jù)運算符完成相應(yīng)運算。#include<iostream.h>voidmain(){floatnum1,num2;charop;cout<<"輸入操作數(shù)1,運算符,操作數(shù)2:"<<endl;cin>>num1>>op>>num2;switch(op){
case'+':cout<<num1<<op<<num2<<"="<<num1+num2<<endl;break;case'-':cout<<num1<<op<<num2<<"="<<num1-num2<<endl;break;case'*':cout<<num1<<op<<num2<<"="<<num1*num2<<endl;break;
case'/':cout<<num1<<op<<num2<<"="<<num1/num2<<endl;break;
default:cout<<op<<"是無效運算符!";}}VC++程序設(shè)計王金湘29循環(huán)控制語句是三種根本流程控制語句之一。C++提供以下三種循環(huán)語句:while語句
do-while語句
for語句循環(huán)結(jié)構(gòu)程序設(shè)計VC++程序設(shè)計王金湘30
循環(huán)結(jié)構(gòu)程序設(shè)計
——知識要點while語句
循環(huán)的嵌套
for語句
do-while語句
VC++程序設(shè)計王金湘31while語句while語句也稱為當(dāng)循環(huán)。語句格式為:while(<表達式>) <循環(huán)體語句>
while語句的執(zhí)行流程圖求表達式的值表達式值為真?是否執(zhí)行循環(huán)體語句VC++程序設(shè)計王金湘32while語句【例】求1+2+3+4+…+N的值。N個連續(xù)整數(shù)相加算法1、設(shè)置變量i用來放被加數(shù),變量sum用來放和值,并初始化;2、從第一個數(shù)開始,依次將被加數(shù)賦給i,并進行操作sumsum+i;3、輸出sum;細化算法:
while(還有被加數(shù)){ i=當(dāng)前被加數(shù);
sum+=i;i準(zhǔn)備接受下一個被加數(shù);
}VC++程序設(shè)計王金湘33源程序如下:#include<iostream.h>voidmain(){
constintN=10;inti=1,sum=0; //循環(huán)初始條件
while(i<=N){ sum+=i; i++; //修改循環(huán)條件
}cout<<"sum="<<sum<<endl;
}在VC++平臺上運行,試一試是否正確VC++程序設(shè)計王金湘34while語句注意:在有循環(huán)語句的程序中,通常循環(huán)開始前對循環(huán)條件進行初始化;而在循環(huán)體語句中要包含修改循環(huán)條件的語句,否那么循環(huán)將不能終止而陷入死循環(huán)。C++表達方式靈活,上例中的循環(huán)語句還可以寫成:while(i<=N)sum+=i++;或者while(sum+=i++,i<=N);//循環(huán)體為空語句修改程序后在VC++平臺上運行,看是否正確VC++程序設(shè)計王金湘35do-while語句do-while語句稱為直到循環(huán),格式為:
do
<循環(huán)體語句>
while(<表達式>
)
否是表達式的值為真?執(zhí)行循環(huán)體語句求表達式的值do-while語句的執(zhí)行流程圖VC++程序設(shè)計王金湘36#include<iostream.h>voidmain(){
inti,sum;
i=1;sum=0;
do{sum=sum+i;i++;}while(i<=100);
cout<<"1到100之和是:"<<sum<<endl;
return;}【例】求1+2+3+…+100的值
定義循環(huán)控制變量i,i=1定義變量sum,sum=0sum=sum+ii++輸出sum的值i<=100VC++程序設(shè)計王金湘37do-while語句do/while語句和while語句的區(qū)別:多數(shù)情況下可以互相替代。區(qū)別是do/while語句至少執(zhí)行一次循環(huán)體后再判斷循環(huán)條件是否滿足;while語句先判斷條件是否滿足,然后才執(zhí)行循環(huán)體。VC++程序設(shè)計王金湘38for語句for循環(huán)語句的格式為:for(<表達式1>;<表達式2>;<表達式3>)<循環(huán)體語句>for語句的執(zhí)行流程圖否是求表達式1的值求表達式2的值表達式2值為真?執(zhí)行循環(huán)體語句求表達式3的值VC++程序設(shè)計王金湘39for語句、while語句、do/while語句實現(xiàn)相同的功能:1+2+3+4inti=1,sum=0;//循環(huán)初始條件while(i<=4)
{sum+=i;i++;
//修改循環(huán)條件
}inti=1,sum=0;//循環(huán)初始條件do
{ sum+=i; i++;//修改循環(huán)條件
}while(i<=4);for(inti=1,sum=0;i<=4;i++) sum+=i;/*習(xí)慣上:表達式1:循環(huán)初始條件;表達式2:循環(huán)終止條件;表達式3:修改循環(huán)條件*/VC++程序設(shè)計王金湘40for語句的應(yīng)用for語句的幾點說明:1、是先判斷型的,同while語句;2、使用更為靈活:三個表達式可以是任意表達式,因此他們就可以實現(xiàn)循環(huán)初始化、計算、修改循環(huán)條件等任務(wù),而不一定非在循環(huán)體中進行;如上例:
for(inti=1,sum=0;i<=4;i++)sum+=i;可寫成:
for(inti=1,Sum=0;i<=N;Sum+=i,i++);
VC++程序設(shè)計王金湘41for語句本卷須知:例:計算1*2+3*4+5*6+…+99*100。
inti,j,sum=0;for(i=1,j=2;i<=99;i=i+2,j=j+2)sum+=i*j;(1)表達式1、表達式2、和表達式3可以是任何類型的表達式。比方說,這三個表達式都可以是逗號表達式,即每個表達式都可由多個表達式組成。逗號表達式逗號表達式VC++程序設(shè)計王金湘42#include<iostream.h>voidmain(){inti,sum=0;i=1;for(;i<=100;i++)sum+=i;cout<<sum<<endl;}#include<iostream.h>voidmain(){inti,sum=0;i=1;for(;i<=100;)sum+=i++;
cout<<sum<<endl;}for語句本卷須知:省掉表達式1,3省掉表達式1(2)表達式1、表達式2、和表達式3都是任選項,可以省掉其中的一個、兩個或全部,但其用于間隔的分號是一個也不能省的。#include<iostream.h>voidmain(){
inti=1,sum=0;
for(;;){if(i>100)break; sum+=i++;}cout<<sum<<endl;}省掉表達式1,2,3VC++程序設(shè)計王金湘43for語句本卷須知:for(a=1;;a++)cout<<a<<endl;(3)表達式2如果為空那么相當(dāng)于表達式2的值是真。死循環(huán)!(4)循環(huán)體中的語句可為任意類型的C語句。
(5)循環(huán)體可以是空語句。如:for(inti=1,Sum=0;i<=N;Sum+=i,i++);(6)for語句也可以組成多重循環(huán),而且也可以和while語句和do-while語句相互嵌套。
VC++程序設(shè)計王金湘44
三種循環(huán)可互相嵌套,層數(shù)不限外層循環(huán)可包含兩個以上內(nèi)循環(huán),但不能相互交叉嵌套循環(huán)的執(zhí)行流程:(1)while(){……while(){……}…...}(2)do{……do{……}while();…...}while();(3)while(){……do{……}while();…….}
嵌套循環(huán)的跳轉(zhuǎn)禁止:從外層跳入內(nèi)層跳入同層的另一循環(huán)向上跳轉(zhuǎn)循環(huán)嵌套——循環(huán)體里面又有循環(huán)語句
(4)for(;;){……do{……}while();……while(){……}…...}外循環(huán)內(nèi)循環(huán)內(nèi)循環(huán)VC++程序設(shè)計王金湘45循環(huán)的嵌套【例】打印九九表。打印格式為:*123456789
112243369…991827364554637281嵌套層次一般不超過3層,以保證可讀性。VC++程序設(shè)計王金湘46
循環(huán)的嵌套分析:1、計算機的輸出是按行進行的,因此可以先用一個循環(huán)語句輸出第一行表頭。2、表中各行數(shù)據(jù)的輸出可以用下面的算法描述:for(i=1;i<10;i++){cout<<i;
//輸出行號輸出第i行數(shù)據(jù);//Acout<<endl;//準(zhǔn)備輸出下一行
}VC++程序設(shè)計王金湘473、第A行需要進一步細化。由于第i行數(shù)據(jù)是一組有規(guī)律的數(shù)列,用另一個變量j來控制該行輸出的列數(shù),變量的取值從1~i〔即:第i行有i個數(shù)〕。每個數(shù)的值是其所在行與列的乘積: for(j=1;j<=i;j++)cout<<i*j;將此語句放到頂層算法的A行即可。
循環(huán)的嵌套VC++程序設(shè)計王金湘48算法:1、輸出表頭,用一個循環(huán)語句即可;2、輸出表體://需要循環(huán)嵌套for(i=1;i<10;i++){cout<<i; //輸出行號
輸出第i行數(shù)據(jù);
//Acout<<endl;//準(zhǔn)備輸出下一行
}3、A行細化:
for(j=1;j<=i;j++)cout<<i*j;
循環(huán)的嵌套VC++程序設(shè)計王金湘49#include<iostream.h>voidmain(void){ inti,j; cout<<“*〞; for(i=1;i<10;i++) cout<<i<<“〞;//輸出表頭(乘數(shù)) cout<<‘\n’; for(i=1;i<10;i++){ cout<<i<<“〞; //輸出行號(被乘數(shù)) for(j=1;j<=i;j++) cout<<i*j<<“〞;cout<<‘\n’;}}循環(huán)嵌套
——打印九九表*123456789
112243369…991827364554637281VC++程序設(shè)計王金湘50轉(zhuǎn)向語句——控制執(zhí)行順序的語句break語句
continue語句
VC++程序設(shè)計王金湘51break
語句
break語句只能用在switch語句和循環(huán)語句中,用來跳出switch語句或提前終止循環(huán),轉(zhuǎn)去執(zhí)行switch語句或循環(huán)語句之后的語句。在for循環(huán)中可以用break結(jié)束循環(huán):
for(;;){ …
if(<表達式>)break; … }
VC++程序設(shè)計王金湘52continue
語句continue語句只能用在循環(huán)語句中,用來終止本次循環(huán)。當(dāng)程序執(zhí)行到continue語句時,將跳過其后尚未執(zhí)行的循環(huán)體語句,開始下一次循環(huán)。下一次循環(huán)是否執(zhí)行仍然取決于循環(huán)條件的判斷。
continue語句與break語句的區(qū)別在于:continue語句結(jié)束的只是本次循環(huán),break
語句結(jié)束的是整個循環(huán)。
VC++程序設(shè)計王金湘53例:輸出1~100內(nèi)3的倍數(shù)。分析:設(shè)置整型變量i從1變化到100,依次測試i是否3的倍數(shù),算法屬于窮舉法。
for(i=1;i<=100;i++){if(i%3!=0)continue;//i不是3的倍數(shù),不輸出,繼續(xù)下一個i;
輸出i的值;//i是3的倍數(shù)才輸出
}continue
語句VC++程序設(shè)計王金湘54#include<iostream.h>voidmain(void){inti;for(i=100;i<200;i++){if(i%3!=0)continue; cout<<i<<“〞;}}輸出:102105108112…198continue
語句VC++程序設(shè)計王金湘55#include<iostream.h>voidmain(void){inti;for(i=100;i<200;i++){if(i%3==0)break; cout<<i<<“〞;}}輸出什么?100101【例1】輸入一段文本,統(tǒng)計文本的行數(shù)、單詞數(shù)及字符數(shù)。假定單詞之間以空格或跳格或換行符間隔,且文本開始沒有空行。分析:①逐個讀入文本中的字符,直到讀到一個輸入結(jié)束符EOF〔如可以用‘#’〕為止。在讀入過程中,②每讀到一個非間隔符,ch=ch+1,③每讀到一個′\n′,line=line+1;④另設(shè)一個變量isword,讀到字符時isword=1,讀到間隔符時isword=0,如果讀到一個字符而此時isword值為0時,那么word=word+1。VC++程序設(shè)計王金湘56#include<iostream.h>voidmain(){ charch;
int nline=0,nword=0,nch=0;
int isword=0;
do{ ch=cin.get();
if(ch=='\n’||ch==‘#’) nline++;
if(ch!=‘’&&ch!=‘\t’&&ch!=‘\n’) //非間隔符 { nch++; isword=1;
if(isword==0)nword++;//之前是間隔 }
else isword=0;//間隔符 }while(ch!='#'); cout<<"行數(shù):"<<nline<<endl; cout<<"單詞數(shù):"<<nword<<endl; cout<<"字符數(shù):"<<nch<<endl;}VC++程序設(shè)計王金湘57例2:求2~300之間所有素數(shù)求素數(shù)的方法:除自然數(shù)2之外的所有素數(shù)都是奇數(shù),因此,在求300以內(nèi)的所素數(shù)時,只需要從其中的奇數(shù)中尋找;設(shè)x是一個奇數(shù),判斷x是否素數(shù)時,用3、4...x-1這些自然數(shù)一個一個地分別去除x就是一個簡單的方法,只要x能被其中任一個自然數(shù)整除,就證明x不是素數(shù)。而x-1是其中最大一個除數(shù)。但這種方法比較費事,數(shù)論中可以證明,最大一個除數(shù)可以用sqrt(x)的整數(shù)局部代替,即,用3、4...sqrt(x)分別去除x即可判定x是否素數(shù)。VC++程序設(shè)計王金湘58VC++程序設(shè)計王金湘59i=5;i<300;i+=2j=sqrt(i)2<=n<=jTFbreakn++TF
輸出i求出最大一個除數(shù)判斷i是不是素數(shù)求2~300之間所有素數(shù)N-S圖i%n==0n>=j+1由于例題中用到求平方根的函數(shù)sqrt()和指定輸出項格式符setw(),所以,在程序的開頭還分別參加了兩個包含頭文件:#include<math.h>#include<iomanip.h>因演示版面有限,故下面舉例時略去了三個頭文件。現(xiàn)在來看該程序的結(jié)構(gòu)和運行。VC++程序設(shè)計王金湘60
求2~300之間所有素數(shù)voidmain(){ inti,j,k,n; cout<<setw(8)<<2<<setw(8)<<3;
for(k=2,i=5;i<300;i+=2) { j=sqrt(i);
for(n=3;n<=j;n++) if(i%n==0)break;
if(n>=j+1)
{ cout<<setw(8)<<i; k++;
if(k%5==0)cout<<‘\n’;} }cout<<‘\n’;}VC++程序設(shè)計王金湘61判斷是否素數(shù)輸出素數(shù)voidmain(){ inti,j,k,n; cout<<setw(8)<<2<<setw(8)<<3;
for(k=2,i=5;i<300;i+=2) { j=sqrt(i);
for(n=3;n<=j;n++) if(i%n==0)break;
if(n>=j+1)
{ cout<<setw(8)<<i; k++;
if(k%5==0)cout<<‘\n’;} }cout<<‘\n’;}VC++程序設(shè)計王金湘62//在3~sqrt(i)之間沒有能和i整除的數(shù)
//找到能和i整除的數(shù)
//在3~sqrt(i)之間搜索//五個一行//輸出素數(shù)//計數(shù)考察后一個奇數(shù)控制大循環(huán)結(jié)束標(biāo)志控制流程語句結(jié)束VC++程序設(shè)計王金湘63第五周上機題1.把華氏溫度轉(zhuǎn)換為攝氏溫度的公式為C=(5/9)(F-23),要求輸入攝氏溫度,10℃,0℃,37℃,100℃,要求逐行輸出攝氏溫度,華氏溫度對照情況,溫度取兩位小數(shù)。VC++程序設(shè)計王金湘64#include<iostream.h>#include<iomanip.h>voidmain(){ floatf1,f2,f3,f4,c1,c2,c3,c4; cout<<"輸入四個攝氏溫度值:"; cin>>c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房屋買賣協(xié)議范本2024年規(guī)范格式
- 2024年定制演出代理協(xié)議文件
- 2024年工程中介服務(wù)費率協(xié)議樣本
- 本年度個人向企業(yè)借款協(xié)議模板
- 網(wǎng)絡(luò)融資合同范本
- 電梯裝潢工程承包協(xié)議(2024年度)
- 標(biāo)準(zhǔn)出租合同范本
- 建造售樓合同范本
- 新房合作合同范本
- 密云公路運輸業(yè)務(wù)合同范本
- 銀行紀(jì)檢委員紀(jì)檢工作報告
- 2022版小學(xué)道德與法治課程標(biāo)準(zhǔn)測試題
- GB/T 27021.1-2017合格評定管理體系審核認證機構(gòu)要求第1部分:要求
- GB/T 22796-2021床上用品
- 中國聯(lián)通LAN工程施工及驗收規(guī)范
- 中間表模式接口相關(guān)-住院與his-adt方案
- 臨床PCR檢驗的室內(nèi)質(zhì)控方法課件
- 計算機解決問題的過程-優(yōu)質(zhì)課課件
- 作文講評-“忘不了……”課件
- 深基坑安全管理(安全培訓(xùn))課件
- 12月4日全國法制宣傳日憲法日憲法知識科普宣教PPT教學(xué)課件
評論
0/150
提交評論