




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
在C語言中可以用以下語句來實現(xiàn)循環(huán):1.用while語句;2.用do--while語句;3.用for語句。循環(huán):就是在給定的條件成立時反復(fù)執(zhí)行某一程序段,被反復(fù)執(zhí)行的程序段稱為循環(huán)體。2023/1/131aS=1+2+3+…+1000S12100S+1SS+2SS+100S作100次加法S+iS累加器計數(shù)器2023/1/132a1while語句真(非零)表達(dá)式
循環(huán)體假(零)1、while語句的形式:
while(表達(dá)式)循環(huán)體;
2、
while語句常稱為“當(dāng)型”循環(huán)語句。2023/1/133a3、說明:先判斷表達(dá)式,后執(zhí)行語句。表達(dá)式同if語句后的表達(dá)式一樣,可以是任何類型的表達(dá)式。循環(huán)體多于一句時,用一對{}括起。while循環(huán)結(jié)構(gòu)常用于循環(huán)次數(shù)不固定,根據(jù)是否滿足某個條件決定循環(huán)與否的情況。2023/1/134ai=1;s=0;while(i<=100){s=s+i;i++;
}printf(“\n1+2+3+…+100=%d”,s);
循環(huán)變量的初始化計數(shù)器的初始化累加器的初始化循環(huán)控制條件累加修改循環(huán)變量循環(huán)語句的三要素循環(huán)次數(shù)固定的循環(huán)語句2023/1/135a#include"stdio.h"intmain(){floatx;scanf("%f",&x);【例1】輸入一系列整數(shù),判斷其正負(fù)號,當(dāng)輸入0時,結(jié)束循環(huán)。輸入數(shù)據(jù),為第一次判斷做準(zhǔn)備while(x!=0)判斷是否結(jié)束{if(x>0)printf("+");elseprintf("-");
scanf("%f",&x);}return0;}判斷正負(fù)號2023/1/136a#include"stdio.h"intmain(){charch;intnum=0;ch=getchar();【例2】統(tǒng)計從鍵盤輸入的一行字符的個數(shù)(以回車鍵作為輸入結(jié)束標(biāo)記)。while(ch!='\n')判斷是否輸入結(jié)束{num++;ch=getchar();}printf(“%d\n”,num);return0;}2023/1/137a注意表達(dá)式在判斷前,必須要有明確的值。循環(huán)體中一般有改變條件表達(dá)式的語句。while(表達(dá)式)后面沒有分號。#include"stdio.h"intmain(){charch;intnum=0;
ch=getchar();while(ch!='\n'){num++;
ch=getchar();}printf(“%d\n”,num);}2023/1/138a2do--while語句1)、do--while的形式:
do{循環(huán)體;}
while(表達(dá)式);2)、do--while語句常稱為“直到型”循環(huán)語句。真(非零)表達(dá)式
循環(huán)體假(零)2023/1/139a3)、說明:先執(zhí)行語句,后判斷表達(dá)式。第一次條件為真時,while,do-while等價;第一次條件為假時,二者不同。2023/1/1310a【例3】用do-while語句編寫程序統(tǒng)計從鍵盤輸入的一行非空字符的個數(shù)(以回車鍵作為輸入結(jié)束標(biāo)記)。#include"stdio.h"intmain(){charch;intnum=0;ch=getchar();do{num++;ch=getchar();}while(ch!='\n');printf("num=%d\n",num);}2023/1/1311a注意在if、while語句中,表達(dá)式后面都沒有分號,而在do-while語句的表達(dá)式后面則必須加分號。do-while和while語句相互替換時,要注意修改循環(huán)控制條件。2023/1/1312a3for語句for的形式:for(初始表達(dá)式1;條件表達(dá)式2;循環(huán)表達(dá)式3){循環(huán)體;}
表達(dá)式1:用于循環(huán)開始前為循環(huán)變量設(shè)置初始值。表達(dá)式2:控制循環(huán)執(zhí)行的條件,決定循環(huán)次數(shù)。表達(dá)式3:循環(huán)控制變量修改表達(dá)式。循環(huán)體語句:被重復(fù)執(zhí)行的語句。2023/1/1313a表達(dá)式3計算表達(dá)式1循環(huán)體判斷表達(dá)式2零非零for的下一條語句執(zhí)行過程2023/1/1314a
for(i=1;i<=100;i++)sum=sum+i;
例如:它相當(dāng)于以下語句:
i=1;
while(i<=100){sum=sum+i;i++;
}表達(dá)式1;while(表達(dá)式2)表達(dá)式3;2023/1/1315a3、說明三個表達(dá)式都可以是逗號表達(dá)式。三個表達(dá)式都是任選項,都可以省略,但要注意省略表達(dá)式后分號間隔符不能省略。2023/1/1316afor語句中表達(dá)式省略的形式(1)for語句一般形式中的“表達(dá)式1”可以省略;如:sum=0;i=1;for(;i<=100;i++)sum=sum+i;
2023/1/1317a(2)表達(dá)式2省略,即不判斷循環(huán)條件,循環(huán)無終止地進行下去;如:for(sum=0,i=1;;i++){if(i>100)break;sum=sum+i;}
2023/1/1318a(3)表達(dá)式3也可以省略,但此時保證循環(huán)能正常結(jié)束如:for(sum=0,i=1;i<=100;){sum=sum+i;i++;}2023/1/1319a(4)可以省略表達(dá)式1和表達(dá)式3,只有表達(dá)式2,如:
i=1;sum=0;for(;i<=100;){sum=sum+i;i++;}i=1;sum=0;while(i<=100)
{sum=sum+i;i++;}相當(dāng)于2023/1/1320awhile(1)循環(huán)體;即不設(shè)初值,不判斷條件,循環(huán)變量不增值。無終止地執(zhí)行循環(huán)體。(5)三個表達(dá)式都可省略,如
for(;;)循環(huán)體;如:sum=0,i=1;for(;;){if(i>100)break;sum=sum+i;i++;}相當(dāng)于2023/1/1321a(6)循環(huán)體為空語句對for語句,循環(huán)體為空語句的一般形式為:
for(表達(dá)式1;表達(dá)式2;表達(dá)式3);如:for(sum=0,i=1;i<=100;sum+=i,i++);要在顯示器上復(fù)制輸入的字符,輸入的字符為’.’時,結(jié)束循環(huán)。輸入abcdefg.輸出abcdefg.while(putchar(getchar())!=’.’);2023/1/1322a(1)在進入累加前先給累加器賦初值(一般為0);(2)用循環(huán)語句實現(xiàn)累加;for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量改變規(guī)律)(3)循環(huán)體語句的設(shè)計。累加器當(dāng)前值=累加器原值+循環(huán)變量當(dāng)前值;典型例題分析【例4】求累加和1+2+3+…+1000基本方法:屬于“累加器”類型問題。2023/1/1323a累加器賦初值求偶數(shù)和?奇數(shù)和?2+4+6+…+…1+3+5+…+…參考程序:voidmain(){longintk,s;s=0;for(k=1;k<=1000;k++)s=s+k;printf("s=%ld",s);}累加思考for(s=0,k=1;k<=1000;k++,s=s+k);2023/1/1324a(1)給累乘器賦初值,一般為1;(2)用循環(huán)語句實現(xiàn)累乘;for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量改變規(guī)律)(3)循環(huán)體設(shè)計。累乘器當(dāng)前值=累乘器原值*循環(huán)變量當(dāng)前值;例5:求累乘積。如:1×2×3×...×100基本方法:屬于“累乘器”類型問題。2023/1/1325a累乘器賦初值求n!=1×2×3×…n參考程序:voidmain(){doubles=1;intk;for(k=1;k<=100;k++)s=s*k;printf("s=%lf",s);}累乘思考整數(shù)連乘結(jié)果一定是整數(shù),而本例中結(jié)果數(shù)值相當(dāng)大,用long型都無法存放,因此將存放累乘結(jié)果的變量s定義為double型。2023/1/1326a例6判斷一個數(shù)是否為素數(shù)?一個數(shù)x在[2,sqrt(x)]范圍內(nèi)沒有因子,我們就稱其為素數(shù)(質(zhì)數(shù))主要編程方法:循環(huán)變量終值法、標(biāo)記變量法2023/1/1327a#include"math.h"voidmain(){intx,k;scanf("%d",&x);排除法:如果有因子,不再往下判斷是否是素數(shù)循環(huán)變量終值法for(k=2;k<=sqrt(x);k++)if(x%k==0)break;if(k>sqrt(x))printf("%disaprime",x);elseprintf("%disnotaprime",x);}在判斷范圍內(nèi)無因子,程序正常終止有因子,程序非正常終止2023/1/1328a#include"math.h"voidmain(){intx,k,f=1;scanf("%d",&x);排除法:如果有因子,不再往下判斷是否是素數(shù)for(k=2;k<=sqrt(x);k++)if(x%k==0){f=0;break;}if(f==1)printf("%disaprime",x);elseprintf("%disnotaprime",x);}在判斷范圍內(nèi)無因子,程序正常終止有因子,程序非正常終止標(biāo)記變量法2023/1/1329a例7用0--9這十個數(shù)字可以組成多少無重復(fù)的三位數(shù)?
編程方法:“枚舉法”按問題本身的性質(zhì),一一列舉出該問題所有可能的解,并在逐一列舉的過程中,檢驗每個可能解是否是問題的真正解,若是,我們采納這個解,否則拋棄它。對于所列舉的值,既不能遺漏也不能重復(fù)。2023/1/1330a#include"stdio.h"voidmain()/*a,b,c代表百位、十位、個位*/{intx,a,b,c,num=0;/*num存放滿足條件的數(shù)的個數(shù),注意num要賦初值*/
for(x=100;x<=999;x++)
{a=x/100;b=x/10%10;c=x%10;if(a!=b&&a!=c&&b!=c)
{
num++;printf("%5d",x);}
}printf("\nnumber=%d",num);}2023/1/1331a編程方法:“遞推法”
例8
裴波那契數(shù)列的第1、2項分別為1、1,以后各項的值均是其前兩項之和。求前30項菲波那契數(shù)。所謂遞推法就是從初值出發(fā),歸納出新值與舊值間的關(guān)系,直到求出所需值為止。新值的求出依賴于舊值,不知道舊值,無法推導(dǎo)出新值。數(shù)學(xué)上遞推公式正是這一類問題。2023/1/1332af1--第一個數(shù)
f2--第二個數(shù)
f3--第三個數(shù)
f1=1;f2=1;f3=f1+f2;
以后只要改變f1,f2的值,即可求出下一個數(shù).f1=f2;f2=f3;f3=f1+f2;遞推2023/1/1333avoidmain(){longf1=1,f2=1,f3;intk;參考程序:printf("%ld\t%ld\t",f1,f2);for(k=3;k<=30;k++){f3=f1+f2;printf("%ld\t",f3);f1=f2;f2=f3;}}遞推2023/1/1334a問題:如果要求每行輸出5項,且每項的輸出寬度等寬,程序應(yīng)如何改寫?#include<stdio.h>voidmain(){longf1=1,f2=1,f3;intk;printf("%12ld%12ld",f1,f2);for(k=3;k<=30;k++){f3=f1+f2;printf("%12ld",f3);f1=f2;f2=f3;}}if(k%5==0)printf(“\n”);2023/1/1335a
4.循環(huán)語句的選擇if(循環(huán)次數(shù)已知) 使用for語句else /*循環(huán)次數(shù)未知*/
if(循環(huán)條件在進入循環(huán)時明確) 使用while語句
else /*循環(huán)條件需要在循環(huán)體中明確*/ 使用do-while語句2023/1/1336a1).break語句(1)語句形式:
break;(2)作用:結(jié)束break所在的switch語句。結(jié)束當(dāng)前循環(huán),跳出break所在的循環(huán)結(jié)構(gòu)。5.break語句和continue語句2023/1/1337a【例10】求300以內(nèi)能被17整除的最大的數(shù)。#include"stdio.h"voidmain(){intx,k;for(x=300;x>=1;x--)if(x%17==0)break;printf("x=%d\n",x);}找到滿足條件的最大數(shù),結(jié)束循環(huán)2023/1/1338a(1)語句形式:
continue;(2)語句作用:結(jié)束本次循環(huán)。2)、continue語句(3)語句執(zhí)行流程:
continue語句可以結(jié)束本次循環(huán),即不再執(zhí)行循環(huán)體中continue語句之后的語句,轉(zhuǎn)入下一次循環(huán)條件的判斷與執(zhí)行。
2023/1/1339a【例11】求300以內(nèi)能被17整除的所有整數(shù)。#include"stdio.h"voidmain(){intx,k;for(x=1;x<=300;x++){if(x%17!=0)continue;printf("%d\t",x);}}2023/1/1340awhile(條件){語句A;
break;語句B;}真語句B條件語句Abreak假結(jié)束循環(huán)語句與continue語句的區(qū)別至此位置2023/1/1341awhile(條件){語句A;
continue;語句B;}真語句B條件語句Acontinue假結(jié)束循環(huán)至此位置2023/1/1342a#include"stdio.h"voidmain(){inta,b;for(a=1,b=1;a<=10;a++){if(b>=10)break;if(b%3==1){b+=3;continue;}}printf("%d\n",a);}【例12】分析以下程序的運行結(jié)果。程序運行結(jié)果:42023/1/1343a在循環(huán)體語句中又包含有另一個完整的循環(huán)結(jié)構(gòu)的形式,稱為循環(huán)的嵌套。如果內(nèi)循環(huán)體中又有嵌套的循環(huán)語句,則構(gòu)成多重循環(huán)。7.循環(huán)的嵌套嵌套在循環(huán)體內(nèi)的循環(huán)體稱為內(nèi)循環(huán),外面的循環(huán)稱為外循環(huán)。while、do-while、for三種循環(huán)都可以互相嵌套。2023/1/1344a循環(huán)語句之間的關(guān)系for(...){...for(...){...}...}內(nèi)循環(huán)外循環(huán)并列循環(huán)for(....){...}for(...){...}嵌套循環(huán)錯誤2023/1/1345a真真外循環(huán)初始條件內(nèi)循環(huán)初始條件內(nèi)循環(huán)體外循環(huán)條件假內(nèi)循環(huán)條件假內(nèi)循環(huán)循環(huán)條件外循環(huán)循環(huán)條件循環(huán)結(jié)束二重循環(huán)嵌套結(jié)構(gòu)執(zhí)行流程2023/1/1346a例13:輸出圖形:
****************編程分析:采用雙重循環(huán),一行一行輸出。每一行輸出步驟:一般3步。1)光標(biāo)定位3)每輸完一行光標(biāo)換行(\n)2)輸出圖形。例如本題:共4行,若行號用k表示,則每一行有2*k-1個*號。2023/1/1347a
#include"stdio.h“voidmain(){intk1,k2;for(k1=1;k1<=4;k1++){putchar(‘\t’);for(k2=1;k2<=k1;k2++)putchar(‘\b’);for(k2=1;k2<=k1*2-1;k2++)putchar(‘*’);putchar(‘\n’);}}定位(還可以用空格的方法)輸出2023/1/1348a#include"stdio.h"voidmain(){intk1,k2,k3;for(k1=1;k1<=4;k1++){for(k2=1;k2<=8-k1*2;k2++)printf("");
for(k3=1;k3<=k1*2-1;k3++)printf("*");printf("\n");}for(k1=3;k1>=1;k1--){for(k2=1;k2<=8-2*k1;k2++) printf(""); for(k3=1;k3<=k1*2-1;k3++)printf("*");printf("\n");}}控制行數(shù)控制每行的起始位控制每行要輸出的個數(shù)
************************
*2023/1/1349a8.循環(huán)結(jié)構(gòu)程序設(shè)計舉例【例14】求#include"stdio.h"voidmain(){floats=0,f1=2,f2=1,f=1,t,n;/*累加器賦初值*/
for(n=1;n<=10;n++){s=s+f*f1/f2;/*累加器當(dāng)前值=累加器原來的值+新的要加的數(shù)據(jù)*/
f=f*(-1);t=f2;f2=f1;f1=f1+t;/*為求下一個要加的數(shù)據(jù)做準(zhǔn)備*/}printf("s=%f\n",s);}2023/1/1350a循環(huán)程序設(shè)計循環(huán)程序的實現(xiàn)要點:歸納出哪些操作需要反復(fù)執(zhí)行?循環(huán)體這些操作在什么情況下重復(fù)執(zhí)行?循環(huán)條件選用合適的循環(huán)語句forwhiledo-while循環(huán)具體實現(xiàn)時考慮(循環(huán)條件):事先給定循環(huán)次數(shù),首選for通過其他條件控制循環(huán),考慮while或do-while2023/1/1351a#include<stdio.h>voidmain(){inti,mark,max,n;
printf("Entern:");
scanf("%d",&n);printf("Enter%dmarks:",n);scanf("%d",&mark); /*讀入第一個成績*/
max=mark;/*假設(shè)第一個成績是最高分*/
for(i=1;i<n;i++){
scanf("%d",&mark);
if(max<mark)
max=mark;}
printf("Max=%d\n",max);}【例15】輸入一批學(xué)生的成績,求最高分(for)markmaxmaxmarkEntern:5Enter5maks:6788735482Max=88Entern:02023/1/1352a#include<stdio.h>voidmain(){intmark,max;
printf(“Entermarks:");
scanf("%d",&mark);/*讀入第一個成績*/
max=mark;/*假設(shè)第一個成績最高分*/
while(mark>=0)
{if(max<mark)
max=mark;
scanf("%d",&mark);}
printf("Max=%d\n",max);}輸入一批學(xué)生的成績,求最高分(while)Entermarks:6788735482-1Max=88Entermarks:-12023/1/1353a【例16】將一個正整數(shù)逆序輸出確定:循環(huán)條件和循環(huán)體(循環(huán)不變式)
123455432112345%10=512345/
10=
1234
1234%
10=4
1234
/
10=
123
123
%
10=3
123
/
10=
12
12
%
10=2
12
/
10=
1
1
%
10
=
1
1
/
10
=
0
結(jié)束循環(huán)體x%10x=x/10循環(huán)結(jié)束條件x==0scanf(“%d”,&x);while(x!=0){
digit=x%10;x=x/10;printf("%d",digit);}用do-while實現(xiàn)?2023/1/1354a循環(huán)程序設(shè)計-習(xí)題
輸入一個整數(shù),從高位開始逐個數(shù)字輸出。12345/10000=112345%10000=23452345/1000=22345%1000=345345/100=3345%100=4545/10=445%10=55/1=55%1=0(1)如何得到10000找輸入數(shù)據(jù)對應(yīng)的冪
pow=1;temp=x;
while(x!=0){
pow=pow*10;x=x/10;}pow=pow/10;(2)
每次循環(huán)pow縮小1/10(3)pow=0結(jié)束2023/1/1355a#include<stdio.h>voidmain(){intx,pow,temp,y;scanf("%d",&x);pow=1;temp=x;while(x!=0) {pow=pow*10;x=x/10;}pow=pow/10; while(pow!=0) {y=temp/pow; temp=temp%pow; printf("%d\n",y); pow=pow/10; }}參考程序:2023/1/1356a【例17】古典算術(shù)問題-搬磚頭某地需要搬運磚塊,已知男人一人搬3塊,女人一人搬2塊,小孩兩人搬一塊。問用45人正好搬45塊磚,有多少種搬法?for(men=0;men<=45;men++)for(women=0;women<=45;women++)for(child=0;child<=45;child++)
if((men+women+child==45)&&(men*3+women*2+child*0.5==45))printf("men=%dwomen=%dchild=%d\n",men,women,child);}2023/1/1357afor(men=0;men<=15;men++)for(women=0;women<=22;women++){
child=45–women–men;
if(men*3+women*2+child*0.5==45)printf("men=%dwomen=%dchild=%d\n",men,women,child);}for(men=0;men<=45;men++)for(women=0;women<=45;women++)for(child=0;child<=45;child++)
if((men+women+child==45)&&(men*3+women*2+child*0.5==45))printf("men=%dwomen=%dchild=%d\n",men,women,child);}比較循環(huán)次數(shù)2023/1/1358a1、寫出程序運行結(jié)果:(1)voidmain(){inti,j,x=0;for(i=0;i<2;i++){x++;for(j=0;j<=3;j++){if(j%2)continue;x++;}x++;}printf(“x=%d\n”,x);}運行結(jié)果:x=8練習(xí)2023/1/1359a(2)voidmain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子文檔訪問權(quán)限管理策略
- 2025年機房溫控節(jié)能項目建議書
- 通信信息保密協(xié)議
- 2025年玩具加工設(shè)備項目發(fā)展計劃
- 電商倉庫運作流程
- 5-1-4-Bipiperidin-1-yl-2-2-4-dimethylphenylsulfonamido-benzoic-acid-dihydrochloride-生命科學(xué)試劑-MCE
- 2025年工業(yè)用橡膠制品:膠管項目合作計劃書
- 工作進度管理計劃書
- 確保顧客滿意培訓(xùn)
- 智慧城市建設(shè)運營管理協(xié)議
- 總經(jīng)理助理培訓(xùn)課件
- 公安校園安全工作培訓(xùn)課件
- 煙草制品購銷員(三級)復(fù)核理論知識試題
- 關(guān)于中小企業(yè)“融資難”問題的對策研究-基于臺灣經(jīng)驗和啟示
- 固體廢棄物管理培訓(xùn)
- 硬件工程師職業(yè)生涯規(guī)劃
- 長相思·其二李白
- 提升管理層領(lǐng)導(dǎo)力的酒店管理培訓(xùn)課程
- 兒科早產(chǎn)兒“一病一品”
- 膀胱過度活動癥的護理-控制尿頻尿急提高生活質(zhì)量
- 2022年春新教科版科學(xué)六年級下冊第4單元《物質(zhì)的變化》教案
評論
0/150
提交評論