




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第四章循環(huán)結(jié)構(gòu)循環(huán)語句也叫重復(fù)語句。循環(huán)體——被重復(fù)執(zhí)行的部分。循環(huán)條件——控制表達(dá)式C語言提供了3種跳轉(zhuǎn)語句break語句continue語句goto語句C語言提供了3種循環(huán)語句while語句do語句for語句4.1循環(huán)結(jié)構(gòu)while語句格式:while(表達(dá)式)語句控制表達(dá)式循環(huán)體假語句表達(dá)式真執(zhí)行while語句時,先計算控制表達(dá)式的值,值不為零,則執(zhí)行循環(huán)體,接著再次判定表達(dá)式……直到控制表達(dá)式的值變?yōu)榱銜r停止。4.1while語句while語句執(zhí)行過程是:(1)計算表達(dá)式的值,如果其值不為0(即為真值),轉(zhuǎn)向(2);否則轉(zhuǎn)向(3)。(2)執(zhí)行循環(huán)體,然后轉(zhuǎn)向(1)。(3)循環(huán)過程停止,程序轉(zhuǎn)移到while語句后面的語句。特點:先判“表達(dá)式(條件)”,后執(zhí)行語句。循環(huán)體有可能一次也不執(zhí)行。循環(huán)體如果包含一個以上的語句,應(yīng)該以復(fù)合語句形式出現(xiàn).while(i>0){ printf("%d\n",i); i--; }即使沒有嚴(yán)格要求的時候,一些程序員始終使用大括號括住循環(huán)體:while(i<n){ i=i*2; }在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語句分析下列程序片段,判斷輸出結(jié)果:i=1;while(i<=128){printf("%d",i);i*=2;}【例4-1】求整數(shù)1~100的累加和sum=sum+ii=i+1i<=100假真i=1,sum=0/*程序4-1*/#include<stdio.h>intmain(){inti,sum=0;i=1;while(i<=100){sum+=i;i++;}printf("sum=%d\n",sum);return0;}【例4-2】輸入一行字符以回車鍵結(jié)束,分別統(tǒng)計出其中英文字母、空格、數(shù)字和其它字符的個數(shù)。while語句的循環(huán)體可能一次也不執(zhí)行,因為while語句是先判斷循環(huán)條件,再決定是否執(zhí)行循環(huán)體。當(dāng)讀取的第一個字符是換行符時,將不會執(zhí)行循環(huán)體。/*程序4-2*/#include<stdio.h>intmain(){charc;intletter=0,space=0,digit=0,other=0;printf("Inputastring:\n");while((c=getchar())!='\n'){if(c>='a'&&c<='z'||c>='A'&&c<='Z')letter++;elseif(c=='')space++;elseif(c>='0'&&c<='9')digit++;elseother++;}printf("letter=%d,space=%d,digit=%d,other=%d\n",letter,space,digit,other);return0;}下面的語句顯示一串“倒數(shù)計數(shù)”信息: i=10; while(i>0){ printf("%d\n",i); i--; }整個過程持續(xù)到顯示信息為“1”。while語句常??梢杂卸嘀貙懛?。更加簡明的遞減計數(shù)循環(huán)如下: while(i>0) printf("%d\n",i--);無限循環(huán)如果控制表達(dá)式的值始終是非零值的話,while語句將無法終止。例如:
while(1)…除非循環(huán)體含有跳出循環(huán)控制的語句(break,goto,return)或調(diào)用了導(dǎo)致程序終止的函數(shù),否則上述這種形式的while語句將永遠(yuǎn)執(zhí)行下去。程序:顯示平方表square.c用戶指定平方值表格的行數(shù): Thisprogramprintsatableofsquares. Enternumberofentriesintable:5 11 24 39 416 525#include<stdio.h>intmain(){inti,n; printf("Thisprogramprintsatableofsquares.\n"); printf("Enternumberofentriesintable:");
scanf("%d",&n); i=1; while(i<=n){ printf("%10d%10d\n",i,i*i); i++;} return0;}程序:數(shù)列求和編程對用戶輸入的整數(shù)數(shù)列進(jìn)行求和計算(以0作為輸入結(jié)束的標(biāo)志)程序sum.c
對用戶輸入的整數(shù)數(shù)列求和: Thisprogramsumsaseriesofintegers. Enterintegers(0toterminate):8237150 Thesumis:107程序需要使用循環(huán),循環(huán)采用scanf函數(shù)讀取用戶輸入數(shù),然后再把這個數(shù)加到運算的總和中。sum=0,輸入第一個數(shù)到nn!=0sum+=n輸入下一個數(shù)到n輸出sum假真#include<stdio.h>intmain(void){intn,sum=0; printf("Thisprogramsumsaseriesofintegers.\n"); printf("Enterintegers(0toterminate):"); scanf("&d",&n);
while(n!=0){ sum+=n; scanf("%d",&n);} printf("Thesumis:%d\n",sum); return0;}從任意n個實數(shù)中選出最大數(shù)和最小數(shù)#include<stdio.h>intmain(){intn,i=2;floatmax,min,x; printf("輸入要比較的數(shù)的個數(shù):");scanf("%d",&n);printf("輸入第一個數(shù):");scanf("%f",&x);max=x;min=x;從任意n個實數(shù)中選出最大數(shù)和最小數(shù)while(i<=n){printf("輸入第%d個數(shù)",i);scanf("%f",&x);if(x>max)max=x;elseif(x<min)min=x;i++;}printf("max=%.3f,min=%.3f\n",max,min);return0;}4.2dowhile
語句do語句本質(zhì)上就是while語句,只不過其控制表達(dá)式是在每次執(zhí)行完循環(huán)體之后進(jìn)行判定的。do語句格式如下:do語句
while
(表達(dá)式)語句條件P非00dowhile語句是在執(zhí)行完循環(huán)體之后再判斷循環(huán)條件是否成立。!注意,小括號后面的分號是必須的。do語句while(表達(dá)式);dowhile語句執(zhí)行過程如下:(1)執(zhí)行循環(huán)體(2)計算表達(dá)式的值,如果表達(dá)式的值為真,則轉(zhuǎn)向(1);否則轉(zhuǎn)向(3)。(3)循環(huán)過程終止,程序轉(zhuǎn)移到dowhile語句后面的語句。最好對所有的do語句都使用大括號包括循環(huán)體,沒有大括號的do語句容易被誤認(rèn)為while語句:
do printf("Tminus%dandcounting\n",i--); while(i>0);【例4-3】求整數(shù)1~100的累加和,使用dowhile語句實現(xiàn)。/*程序4-3*/#include<stdio.h>intmain(){inti=1,sum=0;/*定義并初始化變量*/do{sum+=i;/*累加*/i++;}while(i<=100);/*循環(huán)條件:i<=100*/printf("sum=%d\n",sum);return0;}程序:計算整數(shù)的位數(shù)程序numdigits.c
計算用戶輸入的整數(shù)的位數(shù): Enteranonnegativeinteger:60 Thenumberhas2digit(s).方法是將將用戶輸入的整數(shù)反復(fù)除以10,直到結(jié)果變?yōu)?,除的次數(shù)就是用戶輸入整數(shù)的位數(shù)。do語句比while語句更適合,因為每個整數(shù),即便是0都至少有一位數(shù)字。12345digits=012345/10=1234digits++11234/10=123digits++2123/10=12digits++312/10=1digits++41/10=0digits++5#include<stdio.h>
intmain(void){intdigits=0,n;
printf("Enteranonnegativeinteger:");scanf("%d",&n);
do{n/=10;digits++;}while(n>0);
printf("Thenumberhas%ddigit(s).\n",digits);
return0;}如果將前面程序中的dowhile語句直接改為while語句,看一下會產(chǎn)生什么結(jié)果。4.3for語句for語句適合應(yīng)用在使用“計數(shù)”變量的循環(huán)中,然而它也靈活用于許多其他類型的循環(huán)中。for語句的一般格式如下:
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句
表達(dá)式1、表達(dá)式2和表達(dá)式3全都是表達(dá)式。示例: for(i=10;i>0;i--) printf("Tminus%dandcounting\n",i);for語句的執(zhí)行流程for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
語句;循環(huán)初始條件判別循環(huán)條件修改循環(huán)條件執(zhí)行過程:(1)求表達(dá)式1;(2)求表達(dá)式2,若為“真”,執(zhí)行“語句”;若為假,轉(zhuǎn)第(5)步。(3)求表達(dá)式3。(4)轉(zhuǎn)第(2)步。(5)執(zhí)行for語句下面的語句。for(i=1;i<=100;i++)sum=sum+i;這里,循環(huán)條件由變量i設(shè)定,變量i稱為“循環(huán)變量”。這是for語句的典型用法:已知循環(huán)次數(shù)。(本例100次)?!氨磉_(dá)式1”,循環(huán)初始條件(i=1)?!氨磉_(dá)式2”,循環(huán)條件(i<=100)?!氨磉_(dá)式3”,修改循環(huán)條件(i++)。下面是一個for語句的例子:for(i=1;i<10;i++) printf(“nowiis%d\n”,i);從上面的例子,我們可以看出for語句中3個表達(dá)式的作用。表達(dá)式1用于初始化,而且僅執(zhí)行一次。通常使用賦值表達(dá)式指定循環(huán)變量的初始值。表達(dá)式2描述循環(huán)條件,用于控制循環(huán)的結(jié)束。通常使用關(guān)系表達(dá)式或邏輯表達(dá)式。每次執(zhí)行循環(huán)體前都要對表達(dá)式2進(jìn)行判斷。表達(dá)式3在每次循環(huán)體執(zhí)行后被執(zhí)行,用于修改循環(huán)變量的值。通常使用賦值表達(dá)式或自增/自減表達(dá)式?!纠壳笳麛?shù)1~100的累加和,使用for語句實現(xiàn)。#include<stdio.h>intmain(){ inti,sum=0; for(i=1;i<=100;i++)
sum=sum+i; printf("sum=%d\n",sum);
return0;}for語句和while語句關(guān)系緊密。
除了極少數(shù)情況,for循環(huán)總可以等價替換為while循環(huán):
表達(dá)式1; while(表達(dá)式2){
語句
表達(dá)式3; }表達(dá)式1是在循環(huán)開始執(zhí)行前,只執(zhí)行一次的初始化步驟。表達(dá)式2控制用于控制循環(huán)的終止(循環(huán)持續(xù)執(zhí)行,只要表達(dá)式2的值非零)。表達(dá)式3是在每次循環(huán)的最后被執(zhí)行的一個操作。for語句慣用法for語句對于向上加或向下減共有n次的情況:從0向上加到n–1:for(i=0;i<n;i++)…從1向上加到n:
for(i=1;i<=n;i++)…從n-1向下減到0:for(i=n-1;i>=0;i--)…從n向下減到1: for(i=n;i>0;i--)…常見語句錯誤:在控制表達(dá)式中用<(大于)代替>(反之亦然)。在控制表達(dá)式中使用==代替<,<=,>,或>=。編寫的控制表達(dá)式用i<=n代替i<n,會產(chǎn)生“循環(huán)次數(shù)差一次”錯誤?!纠?-14】求Fibonacci數(shù)列的前40項。每行輸出4項。Fibonacci數(shù)列的定義為:/*程序4-17*/#include<stdio.h>voidmain(){longt1,t2,t3;inti;t1=t2=1;printf("%10ld%10ld",t1,t2);
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 化妝品購銷合同細(xì)則
- 企事業(yè)單位合同簽訂環(huán)節(jié)防詐騙標(biāo)語展示
- 商業(yè)變壓器租賃合同標(biāo)準(zhǔn)格式
- 廢棄礦山治理與修復(fù)工程承包合同
- 勞務(wù)派遣合同范本
- 1 春夏秋冬 教學(xué)設(shè)計-2024-2025學(xué)年統(tǒng)編版語文一年級下冊
- Module 4 Unit 1 Did you read them(教學(xué)設(shè)計)-2023-2024學(xué)年外研版(一起)英語五年級下冊
- 制造業(yè)企業(yè)勞動合同范本
- 度鋼管供應(yīng)合同范本
- 10《吃飯有講究》教學(xué)設(shè)計-2024-2025學(xué)年道德與法治一年級上冊統(tǒng)編版
- 《急性心力衰竭的急救處理》課件
- 2025年高壓電工作業(yè)考試國家總局題庫及答案(共280題)
- 初中圖書室閱覽室建設(shè)實施方案范文(2篇)
- 2024年中國養(yǎng)老產(chǎn)業(yè)商學(xué)研究報告-銀發(fā)經(jīng)濟(jì)專題
- 印刷公司生產(chǎn)部2025年年度工作總結(jié)及2025年工作計劃
- 2025年中考語文一輪復(fù)習(xí):八年級下冊知識點梳理
- 小班孵雞蛋課程設(shè)計
- 糖尿病的麻醉管理
- 《商務(wù)溝通-策略、方法與案例》課件 第四章 非言語溝通
- 附件2:福建省建設(shè)工程造價咨詢服務(wù)收費指導(dǎo)價
- 《金融衍生品》課件
評論
0/150
提交評論