第5 循環(huán)結構程序設計_第1頁
第5 循環(huán)結構程序設計_第2頁
第5 循環(huán)結構程序設計_第3頁
第5 循環(huán)結構程序設計_第4頁
第5 循環(huán)結構程序設計_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

會計學1第5循環(huán)結構程序設計2/715.1while語句真(非零)表達式

循環(huán)體假(零)1、while語句的形式:

while(表達式)循環(huán)體;

2、

while語句常稱為“當型”循環(huán)語句。while第1頁/共60頁3/71例用while循環(huán)求

#include<stdio.h>main(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d",sum);}循環(huán)初值循環(huán)終值循環(huán)變量增值循環(huán)條件循環(huán)體第2頁/共60頁4/71例顯示1~10的平方#include<stdio.h>main(){inti=1;while(i<=10){printf("%d*%d=%d\n",i,i,i*i);i++;}}運行結果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100第3頁/共60頁5/713、說明:先判斷表達式,后執(zhí)行語句。循環(huán)體有可能一次也不執(zhí)行表達式同if語句后的表達式一樣,可以是任何類型的表達式。循環(huán)體多于一句時,用一對{}括起。下列情況,退出while循環(huán)條件表達式不成立(為零)循環(huán)體內遇break無限循環(huán):while(1)

循環(huán)體第4頁/共60頁6/71例:分析下列程序段的循環(huán)次數(shù)i=1;while(i<=100)putchar(‘*’);i++;

第5頁/共60頁7/71#include<stdio.h>voidmain(){intx;scanf(“%d”,&x);【例】輸入一系列整數(shù),判斷其正負號,當輸入0時,結束循環(huán)。輸入數(shù)據(jù),為第一次判斷做準備while(x!=0)判斷是否結束{if(x>0)printf("+");elseprintf("-");scanf(“%d”,&x);}

判斷正負號}第6頁/共60頁8/71#include<stdio.h>voidmain(){charch;intnum=0;ch=getchar();【例】統(tǒng)計從鍵盤輸入的一行字符的個數(shù)(以回車換行鍵作為輸入結束標記)。while(ch!='\n')判斷是否輸入結束{num++;ch=getchar();}printf("num=%d\n",num);}第7頁/共60頁9/71注意表達式在判斷前,必須要有明確的值。循環(huán)體中一般有改變條件表達式的語句。while(表達式)后面沒有分號。第8頁/共60頁10/715.2do--while語句1、do--while的形式:

do{循環(huán)體;}while(表達式);2、do--while語句常稱為“直到型”循環(huán)語句。真(非零)表達式

循環(huán)體假(零)

do第9頁/共60頁11/71例用do~while循環(huán)求

#include<stdio.h>main(){inti,sum=0;i=1;do{sum+=i; i++;}while(i<=100);printf("%d",sum);}第10頁/共60頁12/71例while和do~while比較#include<stdio.h>main(){inti,sum=0;scanf("%d",&i);do{sum+=i; i++;}while(i<=10);printf("%d",sum);}main(){inti,sum=0;scanf("%d",&i);while(i<=10){sum+=i; i++;}printf("%d",sum);}第11頁/共60頁13/713、說明:先執(zhí)行語句,后判斷表達式。第一次條件為真時,while,do-while等價;第一次條件為假時,二者不同。第12頁/共60頁14/71【例】口令密碼校驗,假設預設口令為A,密碼為a,如果口令密碼不一致,則需要重新輸入,直到與預設口令密碼一致。

#include<stdio.h>voidmain(){ charc1,c2; do {c1=getchar();c2=getchar(); }while(c1!=‘A’&&c2!=‘a(chǎn)’);printf(“Pass!\n");}第13頁/共60頁15/71注意在if、while語句中,表達式后面都沒有分號,而在do-while語句的表達式后面則必須加分號。do-while和while語句相互替換時,要注意修改循環(huán)控制條件。第14頁/共60頁16/715.3for語句1、for的形式:for(初始表達式1;條件表達式2;循環(huán)表達式3){循環(huán)體;}

表達式1:用于循環(huán)開始前為循環(huán)變量設置初值。表達式2:控制循環(huán)執(zhí)行的條件,決定循環(huán)次數(shù)。表達式3:循環(huán)控制變量修改表達式。循環(huán)體語句:被重復執(zhí)行的語句。第15頁/共60頁17/71表達式3計算表達式1循環(huán)體判斷表達式2零非零for的下一條語句2、執(zhí)行過程第16頁/共60頁18/71例如:它相當于以下語句:

i=1;

while(i<=100){sum=sum+i;i++;

}

printf("%d",sum);表達式1;while(表達式2)表達式3;例用for循環(huán)求

#include<stdio.h>main(){inti,sum=0;for(i=1;i<=100;i++)sum+=i;printf("%d",sum);}第17頁/共60頁19/713、說明三個表達式都可以是逗號表達式。三個表達式都是任選項,都可以省略,但要注意省略表達式后,分號間隔符不能省略。第18頁/共60頁20/71例:#include<stdio.h>main(){inti=0;for(i=0;i<10;i++)putchar(‘a(chǎn)’+i);}運行結果:abcdefghij例:#include<stdio.h>main(){inti=0;

for(;i<10;i++)putchar(‘a(chǎn)’+i);}例:#include<stdio.h>main(){inti=0;

for(;i<10;)putchar(‘a(chǎn)’+(i++));}例:#include<stdio.h>main(){inti=0;

for(;i<10;putchar(‘a(chǎn)’+i),i++);

}第19頁/共60頁21/711、for語句中表達式省略的形式(1)for語句一般形式中的“表達式1”可以省略;如:sum=0;i=1;for(;i<=100;i++)sum=sum+i;

第20頁/共60頁22/711、for語句中表達式省略的形式(2)表達式2省略,即不判斷循環(huán)條件,循環(huán)無終止地進行下去;如:for(sum=0,i=1;;i++){if(i>100)break;sum=sum+i;}

第21頁/共60頁23/711、for語句中表達式省略的形式(3)表達式3也可以省略,但此時保證循環(huán)能正常結束如:for(sum=0,i=1;i<=100;){sum=sum+i;i++;}第22頁/共60頁24/71(4)可以省略表達式1和表達式3,只有表達式2,如:

i=1;sum=0;for(;i<=100;){sum=sum+i;i++;}1、for語句中表達式省略的形式i=1;sum=0;while(i<=100)

{sum=sum+i;i++;}相當于第23頁/共60頁25/71while(1)循環(huán)體;即不設初值,不判斷條件,循環(huán)變量不增值。無終止地執(zhí)行循環(huán)體。(5)三個表達式都可省略,如

for(;;)循環(huán)體;1、for語句中表達式省略的形式如:sum=0,i=1;for(;;){if(i>100)break;sum=sum+i;i++;}相當于第24頁/共60頁26/71(6)循環(huán)體為空語句對for語句,循環(huán)體為空語句的一般形式為:

for(表達式1;表達式2;表達式3);如:for(sum=0,i=1;i<=100;sum+=i,i++);1、for語句中表達式省略的形式要在顯示器上復制輸入的字符,輸入的字符為’.’時,結束循環(huán)。輸入abcdefg.輸出abcdefg.while(putchar(getchar())!=’.’);第25頁/共60頁27(1)在進入累加前先給累加器賦初值(一般為0);(2)用循環(huán)語句實現(xiàn)累加;for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量改變規(guī)律)(3)循環(huán)體語句的設計。累加器當前值=累加器原值+循環(huán)變量當前值;典型例題分析【例】求累加和1+2+3+…+1000基本方法:屬于“累加器”類型問題。第26頁/共60頁28累加器賦初值參考程序:voidmain(){longintk,s;s=0;for(k=1;k<=1000;k++)s=s+k;printf("s=%ld",s);}累加求偶數(shù)和2+4+6+…+100思考第27頁/共60頁29(1)給累乘器賦初值,一般為1;(2)用循環(huán)語句實現(xiàn)累乘;for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量改變規(guī)律)(3)循環(huán)體設計。累乘器當前值=累乘器原值*循環(huán)變量當前值;例:求累乘積。如:1×2×3×...×100基本方法:屬于“累乘器”類型問題。第28頁/共60頁30累乘器賦初值求n!=1×2×3×…n參考程序:voidmain(){doubles=1;intk;for(k=1;k<=100;k++)s=s*k;printf("s=%lf",s);}累乘思考整數(shù)連乘結果一定是整數(shù),而本例中結果數(shù)值相當大,用long型都無法存放,因此將存放累乘結果的變量s定義為double型。第29頁/共60頁31/71編程方法:“遞推法”或“迭代法”

所謂遞推法就是從初值出發(fā),歸納出新值與舊值間的關系,直到求出所需值為止。新值的求出依賴于舊值,不知道舊值,無法推導出新值。數(shù)學上遞推公式正是這一類問題,如前面的累加與累乘例子的循環(huán)體就是使用的“遞推法”或“迭代法”

。第30頁/共60頁32/71例:輸出100以內、個位數(shù)為6且能被3整除的自然數(shù)?

編程方法:“枚舉法”或“窮舉法”按問題本身的性質,一一列舉出該問題所有可能的解,并在逐一列舉的過程中,檢驗每個可能的解是否是問題的真正解,若是,我們采納這個解,否則拋棄它。對于所列舉的值,既不能遺漏也不能重復。第31頁/共60頁33/71#include<stdio.h>voidmain(){inti;for(i=1;x<100;i++)if(i%10==6&&i%3==0)printf("%3d",i);

}

第32頁/共60頁34/715.4break和continue語句1.break語句的功能:用于從循環(huán)體內跳出循環(huán)體,即提前結束循環(huán)。例:計算r=1到r=10的圓面積,當面積大于100時結束循環(huán),for(r=1;r<=10;r++){area=3.14159*r*r;if(area>100)break;

printf(“%f”,area);

}2、使用要點:break只能用在循環(huán)語句和switch語句中.break語句第33頁/共60頁35/71

expr……break;……假(0)真(非0)whiledo……break;…...expr假(0)真(非0)while第34頁/共60頁36/71expr2……break;…...假(0)真(非0)forexpr1expr3switchexpr語句組1break;語句組2break;語句組nbreak;語句組break;…...const1const2constndefaultcase第35頁/共60頁37/71【例】求300以內能被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ù),結束循環(huán)第36頁/共60頁38/71例break舉例:小寫字母轉換成大寫字母,直至輸入非字母字符#include<stdio.h>main(){inti,j;charc;while(1){c=getchar(); if(c>='a'&&c<='z') putchar(c-'a'+'A'); else break;}}第37頁/共60頁39/71continue語句1、功能:結束本次循環(huán),接著判定下一次是否執(zhí)行循環(huán)。2、continue與break的區(qū)別:continue只結束本次循環(huán),而break終止本層循環(huán).3、例:把100~200之間的不能被3整除的數(shù)輸出.

main(){intn;for(n=100;n<=200;n++){if(n%3==0)continue;printf(“%d”,n);}}第38頁/共60頁40/71expr……continue;……假(0)真(非0)while真(非0)do……continue;…...expr假(0)whileexpr2……continue;…...假(0)真(非0)forexpr1expr3第39頁/共60頁41/71while(條件){語句A;

break;語句B;}真語句B條件語句Abreak假結束循環(huán)6、break語句與continue語句的區(qū)別至此位置第40頁/共60頁42/71while(條件){語句A;

continue;語句B;}真語句B條件語句Acontinue假結束循環(huán)至此位置第41頁/共60頁43/71#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);}【例5】分析以下程序的運行結果。程序運行結果:4第42頁/共60頁44/71在循環(huán)體語句中又包含有另一個完整的循環(huán)結構的形式,稱為循環(huán)的嵌套。如果內循環(huán)體中又有嵌套的循環(huán)語句,則構成多重循環(huán)。5.5循環(huán)的嵌套嵌套在循環(huán)體內的循環(huán)體稱為內循環(huán),外面的循環(huán)稱為外循環(huán)。while、do-while、for三種循環(huán)都可以互相嵌套。第43頁/共60頁45/71循環(huán)語句之間的關系for(...){...for(...){...}...}內循環(huán)外循環(huán)for(....){...}for(...){...}并列循環(huán)嵌套循環(huán)交叉循環(huán)for(....){...for(...){...}}錯誤第44頁/共60頁46/71真真外循環(huán)初始條件內循環(huán)初始條件內循環(huán)體外循環(huán)條件假內循環(huán)條件假修改內循環(huán)條件修改外循環(huán)條件循環(huán)結束二重循環(huán)嵌套結構執(zhí)行流程第45頁/共60頁47例5-13:輸出圖形:****************編程分析:采用雙重循環(huán),一行一行輸出。每一行輸出步驟:一般3步。1)輸出空格例如本題:共4行,若行號用k表示,則每一行有4-k個空格。3)每輸完一行光標換行(\n)2)輸出“*”:2*k-1個*第46頁/共60頁48#include<stdio.h>main(){inti,j;for(i=1;i<=4;i++){ for(j=1;j<=4-i;j++) printf(“

”); for(j=1;j<=2*i-1;j++) printf(“*”); printf(“\n”);}}第47頁/共60頁49/715.6復合結構程序設計舉例【例】求#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;/*累加器當前值=累加器原來的值+新的要加的數(shù)據(jù)*/

f=f*(-1);t=f2;f2=f1;f1=f1+t;/*為求下一個要加的數(shù)據(jù)做準備*/}printf("s=%f\n",s);}第48頁/共60頁50/71#include<stdio.h>#include<math.h>main(){ints=1;floatn=1.0,t=1.0,pi=0;while(fabs(t)>=1e-6){pi=pi+t;n=n+2;s=-s;t=s/n;}pi=pi*4;printf("pi=%10.6f\n",pi);}第49頁/共60頁51/71例譯密碼ABCDEFGHIJKLMNOPQRSTUVWXYZ例如Hello,world!譯成密碼:Lipps,asvph!第50頁/共60頁52/71#include<stdio.h>main(){charc;while((c=getchar())!=‘\n’){if((c>=‘a(chǎn)’&&c<=‘z’)||(c>=‘A’&&c<=‘Z’)){c=c+4;if(c>’Z’&&c<=‘Z’+4||c>’z’)c=c-26;}printf(“%c”,c);}}第51頁/共60頁53/71【例】輸入任意一個整數(shù),將其逆序輸出,例如輸入1234,輸出4321。#include<stdio.h>voidmain(){ longy,n; scanf("%ld",&y) while(y!=0) {n=y%10; printf("%ld",n); y=y/10;}}第52頁/共60頁54/711、寫出程序運行結果: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);}運行結果:x=8練習第53頁/共60頁55voidmain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf(“a=%d,b

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論