版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
會計學1C語言程序設計教程--第5章2023/1/1725.1while循環(huán)控制語句一般格式while(表達式)
語句
一般為關系表達式或邏輯表達式,也可以是C語言其他類型的合法表達式
用來控制循環(huán)體是否執(zhí)行稱為內(nèi)嵌語句,可以是基本語句、控制語句,也可以是復合語句是循環(huán)重復執(zhí)行的部分第1頁/共43頁2023/1/173功能:計算表達式的值,為非0(邏輯真)時,重復執(zhí)行內(nèi)嵌語句,每執(zhí)行一次,就判斷一次表達式的值,直到表達式的值為0時結(jié)束循環(huán),轉(zhuǎn)去執(zhí)行while后面的語句。
當表達式為真語句N-S結(jié)構圖NY流程圖表達式非0?語句循環(huán)控制條件循環(huán)體第2頁/共43頁2023/1/174例如:【例5.1】編寫程序,求100個自然數(shù)的和即:
s=1+2+3+…+100
思路:尋找加數(shù)與求和的規(guī)律
加數(shù)i——從1變到100,每循環(huán)一次,使i增1,直到i的值超過100。i的初值設為1。求和——設變量
sum存放和,循環(huán)求sum=sum+i,直至i超過100。
第3頁/共43頁2023/1/175算法和程序:main(){inti,sum;i=1;sum=0;while(i<=100)
{sum=sum+i;i++;
}printf("sum=%d\n",sum);}運行jc5_1程序輸出結(jié)果:sum=5050i:循環(huán)控制變量sum:累加器
i=1,sum=0當i<=100sum=sum+ii++輸出sum第4頁/共43頁2023/1/176注意:如果while的(表達式)值為0,則循環(huán)體一次也不執(zhí)行
(例如當i的初值=101)。在循環(huán)體中必須有使循環(huán)趨向結(jié)束的操作,否則循環(huán)將無限進行(死循環(huán))。在循環(huán)體中,語句的先后位置必須符合邏輯,否則會影響運算結(jié)果。思考程序段的輸出?
……while(i<=100){i++;sum=sum+i;}運行后,輸出:sum=5150原因是什么?
第5頁/共43頁2023/1/177注意(續(xù)):為了保證循環(huán)正常運行,應該特別注意:循環(huán)控制條件的描述
控制條件的初始狀態(tài)(初始值)
循環(huán)體內(nèi)部對控制條件的影響第6頁/共43頁2023/1/1785.2do-while語句語句一般格式do語句
while(表達式);
功能:先執(zhí)行內(nèi)嵌語句(循環(huán)體),之后計算表達式的值,不為0(邏輯真)時,再執(zhí)行循環(huán)體并判斷條件,直到表達式的值為0結(jié)束循環(huán),轉(zhuǎn)去執(zhí)行while下面的語句。第7頁/共43頁2023/1/179
do-while循環(huán)的算法循環(huán)體當表達式為真N-S結(jié)構圖NY循環(huán)體表達式非0?流程圖main(){inti=1,sum=0;do{sum=sum+i;i++;}while(i<=100);printf("%d\n",sum);}用do-while語句求100個自然數(shù)的和第8頁/共43頁2023/1/1710說明:while和do-while都能實現(xiàn)循環(huán)控制,while結(jié)構程序通常都可以轉(zhuǎn)換成do-while結(jié)構區(qū)別:do-while語句先執(zhí)行循環(huán)體再判斷條件,循環(huán)體至少執(zhí)行一次;while語句先判斷條件再執(zhí)行循環(huán)體,循環(huán)體有可能一次也不執(zhí)行do—while循環(huán)體中一定要有能使表達式值趨于0的操作(如i++),否則會出現(xiàn)死循環(huán)。
第9頁/共43頁2023/1/1711do-while語句的簡單應用【例5.3】用輾轉(zhuǎn)相除法求m和n的最大公約數(shù)定義m、n、rm<nTFm和n交換r=m%nm=nn=r當r!=0時輸出最大公約數(shù)m第10頁/共43頁2023/1/1712算法和程序:main(){intm,n,r;scanf("%d,%d",&m,&n);if(m<n){r=m;m=n;n=r;}
do{r=m%n;m=n;n=r;}while(r!=0);printf("%d\n",m);}運行jc5_3程序運行情況如下:24,6012第11頁/共43頁2023/1/17135.3for語句語句一般格式for(表達式1;表達式2;表達式3)語句功能:計算表達式1的值,再判斷表達式2,如果其值為非0(邏輯真),則執(zhí)行內(nèi)嵌語句(循環(huán)體),并計算表達式3;之后再去判斷表達式2,一直到其值為0時結(jié)束循環(huán),執(zhí)行后續(xù)語句。循環(huán)初始條件循環(huán)控制條件循環(huán)體第12頁/共43頁2023/1/1714for語句的算法N-S結(jié)構圖for(表達式1;表達式2;表達式3)語句NY流程圖計算表達式1語句計算表達式3表達式2為真?例如:main(){inti,sum;sum=0;
for(i=1;i<=100;i++)sum=sum+i;
printf("sum=%d\n",sum);}可部分或全部省略,但“;”不可省略第13頁/共43頁2023/1/1715省略for語句的表達式⑴表達式1、2、3全省略,即:for(;;)
就等同于:while(1),會無限循環(huán)(死循環(huán))注意:在省略某個表達式時,應在適當位置進行循環(huán)控制的必要操作,以保證循環(huán)的正確執(zhí)行⑵省略表達式1和表達式3,即:for(;表達式2;)
就等同于:while(
表達式2)⑶省略表達式2,即:
for(表達式1;;表達式3)
就等同于:表達式1;while(1){…表達式3;}第14頁/共43頁2023/1/1716例如:⑴i=1;for(;i<=100;i++)sum+=i;⑵for(i=1;;i++){…if(i>100)……}⑶for(i=1;i<=100;){…i++;…}⑷i=1;for(;;){…if(i>100)…
i++;…}第15頁/共43頁2023/1/1717說明:所有用while
語句實現(xiàn)的循環(huán)都可以用for
語句實現(xiàn)。
等價于:for(表達式1;表達式2;表達式3)
語句;表達式1;while(表達式2){
語句;
表達式3;
}第16頁/共43頁2023/1/1718for語句的簡單應用【例5.4】求n!,即計算p=1×2×3×…×n的值。
思路:求階乘與求累加的運算處理過程類似,只要將“+”變?yōu)椤?”。設置:乘數(shù)i
,初值為1,終值為n(n是循環(huán)控制終值,需要從鍵盤輸入)累乘器p
,每次循環(huán)令p=p*i第17頁/共43頁2023/1/1719程序:main(){inti,n;longp;
p=1;
printf("Entern:");scanf("%d",&n);for(i=1;i<=n;i++)
p=p
*
i;printf("p=%ld\n",p);}思考:如何輸出1!,2!,…,n!?如何求s=1!+2!+…+n!?運行jc5_4第18頁/共43頁2023/1/1720熟悉幾個循環(huán)語句while(!x)x++;
當x=0
時,執(zhí)行循環(huán)體x++;while((c=getchar())!='\n')n=n+1;n稱為計數(shù)器,作用是統(tǒng)計輸入字符的個數(shù)while(num++<=2);printf("%d\n",num);循環(huán)體是空語句,退出循環(huán)后輸出num的值dox*=-3;while(x>5);先執(zhí)行循環(huán)體x*=-3,再判斷條件(x>5)for(n=0;n<26;n++)printf("%c",n+'A');作用是輸出26個大寫字母for(sum=0,i=1;i<=100;sum=sum+i,i+=2);作用是計算100以內(nèi)的奇數(shù)和
第19頁/共43頁2023/1/1721幾種循環(huán)語句的比較while和do-while語句的表達式只有一個,for語句有三個。while和for先判斷循環(huán)條件后執(zhí)行循環(huán)體,do-while語句先執(zhí)行循環(huán)體后判斷循環(huán)條件。while語句多用于循環(huán)次數(shù)不定的情況do-while語句多用于至少要運行一次的情況for語句多用于要賦初值或循環(huán)次數(shù)固定的情況第20頁/共43頁2023/1/17225.4用goto語句實現(xiàn)循環(huán)有興趣的同學自學不提倡使用goto語句注意:goto語句能實現(xiàn)程序無條件轉(zhuǎn)移,為編程提供了便利。但是無限制地使用,會破壞程序的結(jié)構化程度。因此應限制使用。第21頁/共43頁2023/1/17235.5循環(huán)結(jié)構中的跳轉(zhuǎn)語句有如下三種語句實現(xiàn)跳轉(zhuǎn):continue語句break語句goto語句在循環(huán)語句的循環(huán)體中使用,可以進行循環(huán)的流程控制第22頁/共43頁2023/1/1724后續(xù)語句…continue;
…YN表達式?后續(xù)語句…continue;…表達式?YN5.5.1continue語句及應用功能:中斷循環(huán)體的本次執(zhí)行(即跳過循環(huán)體中尚未執(zhí)行的語句),立即開始執(zhí)行下一次循環(huán)。while語句do-while語句后續(xù)語句計算表達式3計算表達式1…continue;…表達式2?YNfor語句第23頁/共43頁2023/1/1725例如:⑴intx,n=0,s=0;while(n<10){scanf("%d",&x);
if(x<0)continue;
s+=x;n++;};
⑵intx,n=0,s=0;do{scanf("%d",&x);
if(x<0)continue;
s+=x;n++;}while(n<10);
⑶for(n=0,s=0;n<10;n++){scanf("%d",&x);
if(x<0)continue;
s+=x;}第24頁/共43頁2023/1/1726應用舉例【例5.7】把100~200之間能被7整除的數(shù),以十個數(shù)為一行的形式輸出,最后輸出一共有多少個這樣的數(shù)。
for(n=100;n<=200;n++)n能被7整除
TF終止本次循環(huán)輸出n
輸出10個數(shù)
TF
換行第25頁/共43頁2023/1/1727算法和程序main(){intn,j=0;for(n=100;n<=200;n++){if(n%7!=0)continue; printf("%6d",n);
j++;
if(j%10==0)printf("\n");
}printf("\nj=%d\n",j);}運行jc5_7第26頁/共43頁2023/1/1728后續(xù)語句…break;…YN表達式?后續(xù)語句…break;…表達式?YN5.5.2循環(huán)中break的應用功能:利用break語句能夠強迫終止本層循環(huán),轉(zhuǎn)到后續(xù)語句執(zhí)行。while語句do-while語句后續(xù)語句計算表達式3計算表達式1…break;…表達式2?YNfor語句第27頁/共43頁2023/1/1729例如:⑴intx,n=0,s=0;while(n<10){scanf("%d",&x);
if(x<0)break;s+=x;n++;};⑵intx,n=0,s=0;do{scanf("%d",&x);
if(x<0)break;s+=x;n++;}while(n<10);⑶for(n=0,s=0;n<10;n++){scanf("%d",&x);
if(x<0)break;s+=x;}第28頁/共43頁2023/1/17305.6循環(huán)的嵌套如果循環(huán)語句的循環(huán)體內(nèi)又包含了另一條循環(huán)語句,則稱為循環(huán)的嵌套例如:
#include<stdio.h>main(){inti,j;
for(i=1;i<10;i++)for(j=1;j<=i;j++)printf((j==i)?"%4d\n":"%4d",i*j);
}運行jc5_a外循環(huán)語句內(nèi)循環(huán)語句第29頁/共43頁2023/1/1731注意:while、do-while、for循環(huán)語句可以并列,也可以相互嵌套,但要層次清楚,不能出現(xiàn)交叉。多重循環(huán)程序執(zhí)行時,外層循環(huán)每執(zhí)行一次,內(nèi)層循環(huán)都需要循環(huán)執(zhí)行多次。例如:for(a=1;a<=10;a++){for(b=0;b<=5;b++)
……}外循環(huán)執(zhí)行了10次,內(nèi)循環(huán)執(zhí)行6次循環(huán)正常結(jié)束時,內(nèi)循環(huán)執(zhí)行了10×6=60次第30頁/共43頁2023/1/17325.7循環(huán)結(jié)構程序設計【例5.5】按每行輸出5個數(shù)的形式輸出Fibonacci數(shù)列的前20項
。思路:Fibonacci數(shù)列的前幾項是:1、1、2、3、5、8、13、21、34、…。此數(shù)列的變化規(guī)律是:1(n=1)1(n=2)fn-1+fn-2(n>2)fn=設變量f1、f2和f3,并為f1和f2賦初值1,令f3=f1+f2得到第3項;將f1←f2,f2←f3,再求f3=f1+f2得到第4項;依此類推求第5項、第6項…這是一種遞推算法應采用循環(huán)實現(xiàn)第31頁/共43頁2023/1/1733算法和程序#defineN20main(){inti,f1,f2,f3;f1=f2=1;printf("\n%8d%8d",f1,f2);for(i=3;i<=N;i++)
{f3=f1+f2;f1=f2;f2=f3;printf("%8d",f3);
if(i%5==0)printf("\n");
}
}f1=1,f2=1并輸出for(i=3;i<=20;i++)f3=f2+f1f1=f2,f2=f3
輸出f3
輸出5個數(shù)
TF
換行運行jc5_5第32頁/共43頁2023/1/1734舉例2【例5.12】判斷輸入的某個數(shù)m是否為素數(shù)。若是素數(shù),輸出“YES”,若不是,輸出“NO”。
思路:素數(shù)是指只能被1和它本身整除的數(shù),如5、7、11、17、…等。
分別用2、3、…,m-1嘗試能否整除整數(shù)m。如果m能被某個數(shù)整除,則m就不是素數(shù)。這是一種窮舉算法設除數(shù)為j,從2循環(huán)到m-1第33頁/共43頁2023/1/1735算法和程序:#include"math.h"main(){intj,m,k;printf("Enteranintegernumber:");scanf("%d",&m);for(j=2;j<=m-1;j++)
if(m%j==0)break;printf("%d",m);if(j>=m)printf("YES\n");elseprintf("NO\n");}
輸入一個數(shù)mfor(j=2;j<=m-1;j++)m%j==0TF
退出循環(huán)
j>=mTF輸出"YES“輸出"NO"運行jc5_12第34頁/共43頁2023/1/1736程序的優(yōu)化對于窮舉法來說,為了提高程序的效率,就要減少嘗試次數(shù)。#include"math.h"main(){intj,m,k;printf("Enteranintegernumber:");scanf("%d",&m);
k=sqrt(m);for(j=2;j<=k;j++)
if(m%j==0)break;printf("%d",m);if(j>=k+1)printf("YES\n");elseprintf("NO\n");}思考:如何輸出100~200中所有的素數(shù)
第35頁/共43頁2023/1/1737舉例3【例5.13】用牛頓迭代法求方程
2x3+4x2-7x-6=0在x=1.5附近的根。
思路:設xn為一個接近xa的近似根,過(xn,f(xn))點做切線,切線方程為:即:xnxn+1xy0f(x)(xn,f(xn))(xn+1,f(xn+1))xa
方程的根—牛頓迭代公式第36頁/共43頁2023/1/1738算法基本步驟:①
先設一個方程近似根x0,求出方程f的值和方程導數(shù)f1的值;f=2x03+4x02-7x0-6f1=6x02+8x0-7②
用迭代公式x=x0-f/f1進行迭代,求出x比x0要接近方程真實的根;③
當|x-x0|大于某個很小的數(shù)時(如10-6),認為未找到,此時將x→x0,再次求f、f1,并迭代,又求出一個新的更接近方程根的x;④
一直到|x-x0|≤10-6時得到方程近似根:x或x0。這是一種迭代算法用循環(huán)實現(xiàn)第37頁/共43頁2023/1/1739算法和程序:#include"math.h"main(){floatx,x0,f,f1;
x=1.5;do{x0=x;f=2*x0*x0*x0+4*x0*x0-7*x0-6;f1=6*x0*x0+8*x0-7;
x=x0-f/f1;}while(fabs(x-x0)>1e-6);printf("%f\n",x);}x賦初值x0=x計算f計算f1計算x=x0-f/f1當|x-x0|>10-6時輸出x運行jc5_13第38頁/共43頁2023/1/1740舉例4【例5.11】編程序求2~10000以內(nèi)的完全數(shù)。
完全數(shù):一個數(shù)的因子(除了這個數(shù)本身)之和等于該數(shù)本身。思路:設定i從2變到10000,對每個i找到其因子和s;判定i=s?若相等,則i為完全數(shù),否則不是。
例如:6的因子是1、2、3,因子和1+2+3=6因此6是完全數(shù)使用窮舉算法用雙層循環(huán)實現(xiàn)第39頁/共43頁2023/1/1741算法和程序:main(){inti,j,s;
for(i=2;i<=10000;i++)
{s=0;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大理州強制隔離戒毒所公開招聘輔警5人備考題庫及一套答案詳解
- 2025年監(jiān)獄戒毒系統(tǒng)招聘475人備考題庫及參考答案詳解1套
- 2025年肇慶市德慶縣教育局所屬公辦幼兒園公開招聘合同制工作人員備考題庫完整參考答案詳解
- 上海海事局2026年關于加強春節(jié)期間車輛安全管理的通知
- 建筑施工項目部黨支部工作職責
- 推動高質(zhì)量發(fā)展專題研討發(fā)言
- 2025年云南大學附屬中學星耀學校招聘備考題庫及一套完整答案詳解
- 2025年首都醫(yī)科大學附屬北京朝陽醫(yī)院石景山醫(yī)院派遣合同制職工招聘備考題庫完整參考答案詳解
- 2025年鳳岡縣人民政府行政執(zhí)法協(xié)調(diào)監(jiān)督局關于選聘行政執(zhí)法人民監(jiān)督員的備考題庫及1套參考答案詳解
- 2025年中國科學院力學研究所SKZ專項辦公室人員招聘備考題庫帶答案詳解
- 道路運輸從業(yè)人員安全培訓內(nèi)容
- DB33∕T 2099-2025 高速公路邊坡養(yǎng)護技術規(guī)范
- 2025版合規(guī)管理培訓與文化深化試卷及答案
- 超星爾雅學習通《科學計算與MATLAB語言(中南大學)》2025章節(jié)測試附答案
- 綠色簡約風王陽明傳知行合一
- 重精管理培訓
- 2023-2024學年廣東省深圳市南山區(qū)七年級(上)期末地理試卷
- 《無機及分析化學》實驗教學大綱
- 2023巖溶塌陷調(diào)查規(guī)范1:50000
- JJG 548-2018測汞儀行業(yè)標準
- 二年級【語文(統(tǒng)編版)】語文園地一(第二課時)課件
評論
0/150
提交評論