




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
三、程序的三種基本結(jié)構(gòu)3.1順序結(jié)構(gòu)3.2分支結(jié)構(gòu)3.3循環(huán)結(jié)構(gòu)3.4使用string3.5其他應(yīng)用3.1順序結(jié)構(gòu)
為了提高程序設(shè)計的質(zhì)量和效率,C語言中經(jīng)常采用結(jié)構(gòu)化程序設(shè)計方法。當(dāng)然,面向?qū)ο蟪绦蛟O(shè)計方法在C++中用得更為常見。不過兩者并不矛盾,因為在面向?qū)ο蟪绦蛟O(shè)計方法中也一定包含了結(jié)構(gòu)化程序設(shè)計方法,因此,作為基礎(chǔ),必須熟練掌握結(jié)構(gòu)化程序設(shè)計的方法。結(jié)構(gòu)化程序由若干個基本結(jié)構(gòu)組成。每一個基本結(jié)構(gòu)可以包含一個或若干個語句。有三種基本結(jié)構(gòu). 采用流程圖可以較好地描述算法的思路。
當(dāng)語句之間是順序執(zhí)行的關(guān)系時,就是順序結(jié)構(gòu),這也是最簡單的結(jié)構(gòu)。3.2分支結(jié)構(gòu)
又稱選擇結(jié)構(gòu),典型的流程圖如下:分支結(jié)構(gòu)的相關(guān)知識3.2.1關(guān)系運算符和關(guān)系表達式3.2.2邏輯運算符和邏輯表達式3.2.3if語句3.2.4switch語句3.2.5條件運算符1)關(guān)系運算符及其優(yōu)先次序關(guān)系運算是邏輯運算中比較簡單的一種。所謂“關(guān)系運算”實際上是“比較運算”。將兩個值進行比較,判斷其比較的結(jié)果是否符合給定的條件。比較的結(jié)果是一個邏輯值(true,false)。6種關(guān)系運算符的優(yōu)先次序如下:<、<=、>、>=,==、!=
其中,前4個優(yōu)先級相同,后2個優(yōu)先級相同,前4種高于后2種。關(guān)系運算符的優(yōu)先級低于算術(shù)運算符,高于賦值運算符。2)關(guān)系表達式:用關(guān)系運算符將兩個表達式連接的表達式。關(guān)系表達式的值也是一個邏輯值(true,false)。 一般形式為:表達式關(guān)系運算符表達式3.2.1關(guān)系運算符和關(guān)系表達式
3.2.2邏輯運算符和邏輯表達式 1)3種邏輯運算符及其優(yōu)先次序!,&&,||&&、||為雙目運算符,左結(jié)合;!為單目運算符,右結(jié)合。優(yōu)先級如右圖: 2)邏輯表達式 用邏輯運算符將關(guān)系表達式或邏輯量連接起來的式子就是邏輯表達式。表達式的值也是一個邏輯值(true,false)。 邏輯表達式的一般形式為: 表達式邏輯運算符表達式3.2.3if語句 共有3種形式的if語句1)if(表達式)語句例如:if(x>y){ cout<<“hello”;}這種if語句的執(zhí)行過程見圖。example2)if(表達式) 語句1 else 語句2例如: if(x>y){ cout<<“firstcondition”; } else{ cout<<“secondcondition”;}3) if(表達式1) 語句1 elseif(表達式2) 語句2 elseif(表達式3) 語句3 … elseif(表達式m) 語句m else 語句n
例如:if(number>500){ cost=0.15;}elseif(number>300){ cost=0.10;}elseif(number>100){ cost=0.075;}else
if(number>50){ cost=0.05;}else{ cost=0;}4)在使用if語句應(yīng)注意的問題:if之后均為表達式。該表達式通常是邏輯表達式或關(guān)系表達式,但也可以是其它表達式,如賦值表達式等,甚至也可以是一個變量。在if語句中,條件判斷表達式必須用括號括起來,在語句之后必須加分號。在if語句中的內(nèi)嵌語句為多個語句時,必須把這多個語句用{}括起來組成一個復(fù)合語句。但要注意的是在}之后不能再加分號。if語句可以嵌套,流程圖見后頁。例:輸入三角形的3個邊長,判斷能否構(gòu)成三角形#include<iostream>#include<cmath>usingnamespacestd;intmain(){
floata,b,c;
cin>>a>>b>>c;
if(a+b>c&&a+c>b&&b+c>a)
//&&(fabs(a-b)<c&&fabs(a-c)<b&&fabs(b-c)<a)) { cout<<"Yes“<<endl; }
else { cout<<"No“<<endl; }
return0;}例:輸入3個各不相同的數(shù),輸出最大、最小值#include<iostream>usingnamespacestd;intmain(){
floata,b,c,maxVal,minVal;
cin>>a>>b>>c;
if(a>b&&a>c)maxVal=a;
elseif(b>a&&b>c)maxVal=b;
elseif(c>a&&c>b)maxVal=c;
if(a<b&&a<c)minVal=a;
elseif(b<a&&b<c)minVal=b;
elseif(c<a&&c<b)minVal=c;
cout<<“Max,Min:”<<maxVal<<“,”<<minVal<<endl;
return0;}3.2.4switch語句
switch語句是多分支選擇語句。用來實現(xiàn)多分支選擇結(jié)構(gòu)。if語句只有兩個分支可供選擇,而實際問題中常常需要用到多分支的選擇。 例如,學(xué)生成績分類(90分以上為‘a(chǎn)’等,80~89分為‘b’等,70~79分為‘c’等……);人口統(tǒng)計分類(按年齡分為老、中、青、少、兒童);工資統(tǒng)計分類;銀行存款分類……。 語法格式如下:
switch(表達式){
case常量表達式1:語句1
case常量表達式2:語句2…
case常量表達式n:語句n
default:語句n+1}例如,要求按照考試成績的等級打印出百分制分數(shù)段,可以用Switch語句實現(xiàn):
switch(grade){
case‘A'∶cout<<"85~100\n";break;
case‘B'∶cout<<"70~84\n";break;
case‘C'∶cout<<"60~69\n";break;
case‘D'∶cout<<"<60\n";break;
default∶cout<<"error\n";}說明(1)有無break語句的區(qū)別。
(2)在case后的各常量表達式的值不能相同,否則會出錯。
(3)各case和default子句的先后順序可以調(diào)換。(4)在case后,允許有多個語句,可以不用{}括起來。(5)default子句可以省略不用。(6)多個case可以共用一組執(zhí)行語句。(7)表達式允許為任何類型。流程圖:3.2.5條件運算符(了解即可)若if語句中,在表達式為“真”和“假”時,且都只執(zhí)行一個賦值語句給同一個變量賦值時,可以用簡單的條件運算符來處理。例如,若有以下if語句:if(a>b) max=a; else max=b;可以用下面的條件運算符來處理:
max=(a>b)?a∶b;其中“(a>b)?a∶b”是一個“條件表達式”。它是這樣執(zhí)行的:如果(a>b)條件為真,則條件表達式取值a,否則取值b。3.3.1while3.3.2dowhile3.3.3for3.3.4break和continue3.3.5示例3.3循環(huán)結(jié)構(gòu)3.3.1whilewhile語句用來實現(xiàn)“當(dāng)型”循環(huán)結(jié)構(gòu)。其一般形式如下:while(表達式)語句例:求sum=1+2+3+…+100intmain(){ inti=1,sum=0;
while
(i<=100)
{ sum=sum+i; i++;
}
cout<<sum<<endl;
return0;}3.3.2dowhiledowhile語句的特點是先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。一般形式為do循環(huán)體語句while(表達式);例:求sum=1+2+3+…+100intmain(){ inti=1,sum=0;
do{ sum=sum+i; i++;
}while(i<=100);cout<<sum<<endl; return0;}3.3.3for
for語句使用最為靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況,它完全可以代替while語句。一般形式為: for(表達式1;表達式2;表達式3)語句
它的執(zhí)行過程如下:(1)先求解表達式1。(2)求解表達式2,若其值為真,則執(zhí)行for語句中指定的內(nèi)嵌語句,然后執(zhí)行下面第(3)步。若為假,則結(jié)束循環(huán)。(3)求解表達式3。(4)轉(zhuǎn)回上面第(2)步驟繼續(xù)執(zhí)行。for語句最簡單的應(yīng)用形式形式:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)語句例如:for(inti=1;i<=100;i++)sum=sum+i;例:求sum=1+2+3+…+100intmain(){intsum=0;
for(inti=1;i<=100;i++){sum=sum+i;}cout<<sum<<endl;return0;}intmain(){inti,sum=0;
for(i=1;i<=100;i++){sum=sum+i;}cout<<sum<<endl;return0;}3.3.4break和continuebreak語句在前面已經(jīng)介紹過,可以使流程跳出Switch結(jié)構(gòu),繼續(xù)執(zhí)行Switch語句下面的一個語句。實際上,break語句還可以用來從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)下面的語句。continue的作用為結(jié)束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進行下一次是否執(zhí)行循環(huán)的判定。continue語句和break語句的區(qū)別是:continue語句只結(jié)束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行。而break語句則是結(jié)束整個循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立。注意:A、break語句對if-else的條件語句不起作用。
B、在多層循環(huán)中,一個break語句只向外跳一層。3.3.5示例:例:多項式如下:π/4=1-1/3+1/5-1/7+1/9...
計算的項數(shù)n由鍵盤輸入,求π。結(jié)果保留2位小數(shù)。#include<iomanip>intmain(){ intn,sign=1; doublesum=0.0;cin>>n; for(inti=1;i<=n;i+=2){ sum=sum+sign*1.0/i; sign=-sign; } //設(shè)置浮點數(shù)的小數(shù)個數(shù)2位 cout<<setioflags(ios::fixed)<<setprecision(2)<<4*sum<<endl; return0;}例:統(tǒng)計給定的n個整數(shù)中,負數(shù)、零和正數(shù)的個數(shù)。
輸入第一個數(shù)是整數(shù)n(n<100),表示需要統(tǒng)計的數(shù)值的個數(shù),然后是n個整數(shù),分別輸出給定的數(shù)據(jù)中負數(shù)、零和正數(shù)的個數(shù)。intmain(){ intn,x; cin>>n; intzero=0,positive=0,negative=0; for(inti=0;i<n;i++){ cin>>x; if(x>0) positive++; elseif(x<0) negative++; else zero++; } cout<<negative<<""<<zero<<""<<positive<<endl; return0;}例:古希臘數(shù)學(xué)家畢達哥拉斯在自然數(shù)研究中發(fā)現(xiàn),220的所有真約數(shù)(即不是自身的約數(shù))之和為:1+2+4+5+10+11+20+22+44+55+110=284。而284的所有真約數(shù)為1、2、4、71、142,加起來恰好為220。人們對這樣的數(shù)感到很驚奇,并稱之為親和數(shù)。一般地講,如果兩個數(shù)中任何一個數(shù)都是另一個數(shù)的真約數(shù)之和,則這兩個數(shù)就是親和數(shù)。編程,判斷給定的兩個數(shù)是否是親和數(shù)。Input輸入數(shù)據(jù)包含兩個整數(shù)A,B;
Output如果A和B是親和數(shù)的話輸出YES,否則輸出NO。intmain(){
inta,b,sumA=0,sumA=0;
cin>>a>>b;
for(inti=1;i<a;i++){
if(a%i==0)sumA+=i; }
for(intj=1;j<sumb;j++){
if(b%j==0)sumB+=j; }
if(sumA==b&&sumB==a)
cout<<"YES\n";
else
cout<<"NO\n";
return0;}3.4.1基本運算3.4.2示例3.4使用string #include<string> //包含頭文件 聲明變量及初始化: strings1,s2,s3="Hello"; 賦值: s2=“World”; 串加法運算s1=s2+s3; 串比較運算 if(s2>s3)cout<<“Bigger”<<endl; 輸出cout<<s3<<endl;處理串成員(字符)的方法s[序號] (其中,序號的范圍,0~length-1)3.4.1基本運算輸入string的方式:cin>>的讀入方式總是將前導(dǎo)的空格(所謂空格,即包括空格、回車、水平或垂直制表符等)濾掉,將單詞讀入,在遇到空格時結(jié)束本次輸入getline總是將行末的回車符濾掉,將其整行輸入對字串”Hello,Howareyou?”的兩種輸入方式//方法1strings;while(
cin>>s)cout<<s<<”“;cout<<endl;//方法2(優(yōu)先考慮本方法)strings;getline(cin,s);cout<<s<<endl;例:判斷回文串(HLOJ1111)intmain(){ inttotal; //表示測試總數(shù) cin>>total; for(inti=1;i<=total;i++){
strings; cin>>s; boolflag=true; //存放結(jié)果 len=s.size(); //s.size()表示串s的長度 for(intj=0;j<len/2;j++){ if(s[j]!=s[len-1-j]){ //判斷字符的范圍 flag=false; } } if(flag==true) cout<<“YES”<<endl; else cout<<“NO”<<endl; } return0;}例:對于輸入的每個字符串,查找其中的最大字母,在該字母后面插入字符串“(max)”。(HLOJ1139)intmain(){
while(true){ strings; if((cin>>s)==NULL)break; //離開測試的條件(必要) //或者if(!(cin>>s))break; //也可使用本方法 charmaxchar=s[0]; for(inti=1;i<s.size();i++){ //尋找最大字符 if(s[i]>maxchar)maxchar=s[i]; } for(intj=0;j<s.size();j++){ //按要求輸出 cout<<s[j]; if(s[j]==maxchar)cout<<"(max)"; } cout<<endl; } return0;}(HLOJ1139)的另一種方式:intmain(){ strings; while((cin>>s)!=NULL){ //離開測試的條件(必要) //或者while(cin>>s){ charmaxchar=s[0]; for(inti=1;i<s.size();i++){ //尋找最大字符 if(s[i]>maxchar)maxchar=s[i]; } for(intj=0;j<s.size();j++){ //按要求輸出 cout<<s[j]; if(s[j]==maxchar)cout<<"(max)"; } cout<<endl; } return0;}例:輸入一個只包含空格和小寫字母的英文句子,將每個單詞的第一個字母改成大寫首字母。(HDOJ2026)intmain(){
while(true){ strings; if(!getline(cin,s))break; //離開測試的條件s[0]=s[0]-‘a(chǎn)’+‘A’; //處理首字母for(inti=1;i<s.size();i++){ //小寫轉(zhuǎn)大寫 if(s[i-1]=='')s[i]=s[i]-'a'+'A';}cout<<s<<endl; }
return0;}(HDOJ2026)的另一種方式:intmain(){ strings; while(getline(cin,s)){ //離開測試的條件s[0]=s[0]-‘a(chǎn)’+‘A’; //處理首字母for(inti=1;i<s.size();i++){ //小寫轉(zhuǎn)大寫 if(s[i-1]=='')s[i]=s[i]-'a'+'A';}cout<<s<<endl; } return0;}3.5.1簡單字符圖形的雙重循環(huán)3.5.2判斷素數(shù)3.5.3百雞問題3.5.4最大公約數(shù)3.5其他應(yīng)用3.5.1簡單字符圖形的雙重循環(huán)MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM分析方法:該圖形一共10行,每一行增加一個字符,所以,應(yīng)循環(huán)10次,每次輸出一行,其循環(huán)模式為:for(inti=1;i<=10;++i){輸出第i行(循環(huán))換行}行iM的個數(shù)111222333444...101010for(inti=1;i<=10;++i){
for(intj=1;j<=i;++j)cout<<”M”;cout<<endl;}3.5.2判斷素數(shù):(利用數(shù)學(xué)定律)m=i×j假定i≤j,則i2≤i×j=m≤j2
即i2≤m≤j2
即i≤√m≤j
intm;cin>>m;boolisPrime=true;
doublesqm=sqrt(m*1.0);
for(inti=2;i<=sqm;i++){
if(m%i==0) { isPrime=false; break; }}3.5.3百雞問題本問題記載于中國古代約5-6世紀(jì)成書的《張邱建算經(jīng)》中,是原書卷下第38題,也是全書的最后一題:「今有雞翁一,值錢伍;雞母一,值錢三;雞鶵(雛)三,值錢一。凡百錢買雞百只,問雞翁、母、鶵各幾何?答曰:雞翁四,值錢二十;雞母十八,值錢五十四;雞鶵七十八,值錢二十六。又答:雞翁八,值錢四十;雞母十一,值錢三十三,雞鶵八十一,值錢二十七。又答:雞翁十二,值錢六十;雞母四、值錢十二;雞鶵八十四,值錢二十八。」該問題導(dǎo)致三元不定方程組,其重要之處在于開創(chuàng)「一問多答」的先例,這是過去中國古算書中所沒有的。100元錢買100只雞,大公雞5元1只,母雞3元1只,小雞1元3只。問公雞,母雞,小雞各多少只?分析:把三種雞的只數(shù)分別設(shè)為未知數(shù)x、y、z,然后利用總只數(shù)、總錢數(shù)兩個條件,列出兩個方程,根據(jù)雞的只數(shù)必須取整數(shù)的要求,一步一步推出各種雞的只數(shù)。解:設(shè)大公
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 水果和堅果加工的物流配送和市場銷售考核試卷
- 核果類水果種植園休閑農(nóng)業(yè)創(chuàng)新考核試卷
- 人教版(三年級起點)三年級下冊信息技術(shù)教學(xué)設(shè)計
- 拍賣行拍賣業(yè)務(wù)國際化戰(zhàn)略布局策略實施進展情況考核試卷
- 家具企業(yè)市場擴張與品牌連鎖經(jīng)營考核試卷
- 黑龍江省黑河市第三中學(xué)初中計算機教學(xué)設(shè)計:溫控風(fēng)扇
- 木本油脂在日化中的應(yīng)用考核試卷
- 第19課 社會生活的變遷-2023-2024學(xué)年八年級歷史下冊核心素養(yǎng)驅(qū)動教學(xué)設(shè)計
- 方便面品牌長期規(guī)劃與戰(zhàn)略布局考核試卷
- 橡膠制品生產(chǎn)過程中的產(chǎn)品質(zhì)量檢驗方法考核試卷
- 2025年安徽中醫(yī)藥高等??茖W(xué)校單招職業(yè)技能考試題庫帶答案
- 小學(xué)二年級下冊《勞動》教案
- 2025年河南機電職業(yè)學(xué)院單招職業(yè)技能考試題庫完整
- 2025年湖南生物機電職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫及參考答案
- 2025年深圳市高三一模英語試卷答案詳解講評課件
- 2025年黑龍江旅游職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫一套
- 山東省聊城市冠縣2024-2025學(xué)年八年級上學(xué)期期末地理試卷(含答案)
- 敲響酒駕警鐘堅決杜絕酒駕課件
- 2024年01月陜西2024年中國人民銀行陜西分行招考筆試歷年參考題庫附帶答案詳解
- 2025年濰坊工程職業(yè)學(xué)院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 2025年江西青年職業(yè)學(xué)院高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
評論
0/150
提交評論