版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第5章
語句結(jié)構(gòu)-循環(huán)結(jié)構(gòu)
本章要點(diǎn)●C語言中3個基本循環(huán)結(jié)構(gòu)while、do-while、
for的特點(diǎn)和應(yīng)用?!裨鯓颖苊狻盁o限循環(huán)”?!裱h(huán)結(jié)構(gòu)的嵌套?!裱h(huán)結(jié)構(gòu)中的無條件控制語句(goto、break和
continue)的應(yīng)用。15.1概述實(shí)現(xiàn)循環(huán)的語句(三種):用while語句 用do-while語句 用for語句 循環(huán):就是在滿足一定條件時重復(fù)執(zhí)行一段程序。被重復(fù)執(zhí)行的語句或模塊,稱為循環(huán)體。注意:設(shè)計一個合理的循環(huán)結(jié)構(gòu),要使循環(huán)條件由一個狀態(tài)轉(zhuǎn)變?yōu)榱硪粋€狀態(tài),使循環(huán)正常終止。否則,這種循環(huán)就變?yōu)椤盁o限循環(huán)”,或稱“死循環(huán)”。25.2while循環(huán)用while語句實(shí)現(xiàn)當(dāng)型循環(huán):即先判斷后執(zhí)行while語句的一般形式:
while(表達(dá)式)語句流程圖:表達(dá)式語句下一語句假(0)真(非0)當(dāng)表達(dá)式的值為真(非0)時,執(zhí)行其中的循環(huán)體,然后回過頭來再判斷表達(dá)式的值,如此重復(fù);當(dāng)表達(dá)式的值為假(0)時,結(jié)束循環(huán)。3while語句的一般形式:while(表達(dá)式)語句如:intk=1,s=0; while(k<=100)
{s=s+k;k++;}循環(huán)控制表達(dá)式循環(huán)控制變量循環(huán)體注意:若循環(huán)體包含一條以上的語句,應(yīng)以復(fù)合語句出現(xiàn);循環(huán)前,必須給循環(huán)控制變量賦初值;循環(huán)體中,必須有改變循環(huán)控制變量值的語句存在。(使循環(huán)趨向結(jié)束的語句)循環(huán)體可以為空 4【例5.1】計算分析:這是一個累加求和問題
s=1+2+3s=s+k和的當(dāng)前值和的新值求和項(xiàng)當(dāng)前值s=0s=0+1s=1+2s=3+3k=1k=2k=3#include“stdio.h”main(){int
k,s;s=0;k=1;while(k<=3){s=s+k;k++;}printf("s=%d\n",s);}根據(jù)N-S圖,用while語句寫程序s=65#include"stdio.h"main(){
intc=0;
while(c<=255){
printf("%c",c++);if(c%32==0)
printf("c=%d\n",c);/*顯示已輸出字符個數(shù)*/}}【例5.2】用while循環(huán),打印ASCII表全部字符。6【例5.3】讀程序#include<stdio.h>voidmain(){int
k,s,n;
printf(“entern:”);
scanf(“%d”,&n);s=0;k=1;while(k<=n){s+=k;k++;}printf(“∑%d=%d\n”,n,s);}entern:515#include<stdio.h>voidmain(){int
k,t,n;
printf(“entern:”);
scanf(“%d”,&n);t=1;k=1;while(k<=n){t*=k;k++;}
printf(“%d!=%d\n”n,t);}entern:5120t=n!#include<stdio.h>voidmain(){int
k,t,n,s;
printf(“entern:”);
scanf(“%d”,&n);t=1;k=1;s=0;while(k<=n){t*=k;s+=t;k++;}
printf(“s=%d\n”,n,s);}s=1!+2!+…+n!entern:51537例5.4:求12+22+32+…….+1002的和。
main(){ longsum=0;
intc=1; while(c<=100) {sum+=c*c; c++; }
printf(“%d,%ld\n”,c,sum);}輸出的c=101當(dāng)c<=100時,反復(fù)執(zhí)行
c=101時,停止循環(huán)
注意:缺少了語句c++;c的值在循環(huán)中不會變,while中的條件就不會變,就成了無限循環(huán)(死循環(huán))!循環(huán)之初的c與sum值8#include"stdio.h"main(){ longfa=1,sum=0;
int
n,c=1;
scanf("%d",&n);
while(c<=n)
{
fa=fa*c; sum=sum+fa; c=c+1; }
printf("n=%d\tsum=%ld\n",n,sum);}
例5.5:求1!+2!+3!+…….+n!的和。9
例5.6:鍵盤輸入一個整數(shù)m,判斷m是不是素數(shù)。
main(){
int
m,c=2;
scanf("%d",&m);
while(m%c) c++;
if(c==m)
printf("%disaprimenumber.\n",m); else
printf("%disnotaprimenumber.\n",m);}105.3do-while循環(huán)用do-while語句用來實(shí)現(xiàn)直到型循環(huán):即先執(zhí)行后判斷條件do-while語句的一般形式:
do語句
while(表達(dá)式);注意:分號“;”不可省略!表達(dá)式語句下一語句假(0)真(非0)11#include<stdio.h>voidmain(){int
k,s;s=0;k=1;
while(k<=3){s=s+k;k++;}
printf("s=%d\n",s);}用while語句寫程序:【例5.7】計算#include<stdio.h>voidmain(){int
k,s;s=0;k=1;do{s=s+k;k++;}
while(k<=3);
printf("s=%d\n",s);}用do-while語句寫程序:先判斷后執(zhí)行先執(zhí)行后判斷12
while循環(huán)和do_while循環(huán)的比較:一般情況下,while循環(huán)和do_while循環(huán)可以用來處理同一個問題。但while循環(huán)可以一次也不執(zhí)行循環(huán)體(循環(huán)條件一開始就不滿足時),而do_while循環(huán)時,至少要執(zhí)行一次循環(huán)體。用do_while循環(huán)做的事情,都可以用while循環(huán)來做;而用while循環(huán)來做的事情,do_while循環(huán)不一定能做。所以一般用while循環(huán)比較方便。使用do_while循環(huán)結(jié)構(gòu)時,特別要注意該結(jié)構(gòu)的最后有一個分號。練習(xí):用do-while改寫判斷m是不是素數(shù)的程序。13
5.4
for循環(huán)結(jié)構(gòu)
for循環(huán)結(jié)構(gòu)的一般形式是:
for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語句(循環(huán)體)
表達(dá)式1也稱初始化表達(dá)式,用來設(shè)定循環(huán)控制變量或其他變量的初值,若有多個變量需要初始化時,表達(dá)式1要使用逗號表達(dá)式。
表達(dá)式2也稱循環(huán)條件表達(dá)式,用來決定是否執(zhí)行循環(huán)體。當(dāng)表達(dá)式值為非0時,執(zhí)行循環(huán)體,當(dāng)表達(dá)式的值為0時循環(huán)終止。
表達(dá)式3也稱增量表達(dá)式,執(zhí)行一次循環(huán)體后,求解一次表達(dá)式3的值,用來改變循環(huán)變量的值,修正表達(dá)式2。表達(dá)式3也可用逗號表達(dá)式。14for循環(huán)結(jié)構(gòu)的執(zhí)行過程如圖所示。表達(dá)式2循環(huán)體求解表達(dá)式1非00圖5.5for循環(huán)結(jié)構(gòu)流程圖求解表達(dá)式315for循環(huán)的其它形式:for循環(huán)一般形式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句(循環(huán)體)表達(dá)式1可以移到for語句的前面表達(dá)式1;for(;表達(dá)式2;表達(dá)式3)語句(循環(huán)體)表達(dá)式3可以移到循環(huán)體里面for(表達(dá)式1;表達(dá)式2;){語句表達(dá)式3;}16表達(dá)式1省略時,應(yīng)在for前給循環(huán)變量賦初值如:k=1;for(;k<=3;k++)s=s+k;
表達(dá)式3省略時循環(huán)體內(nèi)應(yīng)有使循環(huán)條件改變的語句如:for(k=1;k<=3;){s=s+k;k++;}
同時省略表達(dá)式1和表達(dá)式3,只有表達(dá)式2,此時相當(dāng)于while語句。如:
表達(dá)式2一般是關(guān)系或邏輯表達(dá)式,也可以是算術(shù)或字符表達(dá)式,只要值不為0就執(zhí)行循環(huán)體。如:for(k=1;k-4;k++)s=s+k;k=1;for(;k<=3;){s=s+k;k++;}k=1;while(k<=3){s=s+k;k++;}說明17例5.8:用for循環(huán)求解在100~200范圍內(nèi)“既能被5整除又能被6整除”的數(shù)。#include"stdio.h"main(){
inti;
for(i=100;i<=200;i++) if(i%5==0&&i%6==0)
printf("\t%d",i);}18例5.9:用for循環(huán)判斷整數(shù)m是不是素數(shù)。
main(){
int
m,c=2;
scanf("%d",&m);
while(m%c) c++;
if(c==m)
printf("%disaprimenumber.\n",m); else
printf("%disnotaprimenumber.\n",m);}#include"stdio.h"main(){
int
m,c=2;
scanf("%d",&m);
for(;m%c;c++);
if(c==m)
printf("%disaprimenumber.\n",m); else
printf("%disnotaprimenumber.\n",m);}19例5.10:用for循環(huán)輸出Fibonacci數(shù)列:
1、1、2、3、5、8…的前20個數(shù)。#include"stdio.h"main(){
int
x,y,i;
for(x=1,y=1,i=1;i<=10;i++) { printf("%12d%12d",x,y); if(i%2==0)
printf("\n"); x=y+x; y=x+y; }}20練習(xí):用while和for循環(huán)求100以內(nèi)的奇數(shù)、偶數(shù)之和。#include<stdio.h>main(){int
ou=0,ji=0,n=1;
while(n<=100){ji+=n;
ou+=n+1;n+=2;}
printf(“ji=%d,ou=%d\n",ou,ji);}用while語句寫程序#include<stdio.h>main(){int
ou=0,ji=0;for(n=1;n<=100;n+=2){ji+=n;
ou+=n+1;}
printf(“ji=%d,ou=%d\n",ou,ji);}用for語句寫程序21幾種循環(huán)的比較對比while(表達(dá)式)語句do語句while(表達(dá)式);for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句循環(huán)控制條件表達(dá)式表達(dá)式表達(dá)式2循環(huán)控制變量賦初值在while之前在do-while之前表達(dá)式1;也可以在for之前循環(huán)控制變量改變值在循環(huán)體內(nèi)在循環(huán)體內(nèi)表達(dá)式3;也可以在循環(huán)體內(nèi)22
5.5循環(huán)結(jié)構(gòu)的嵌套
自身嵌套:while循環(huán)結(jié)構(gòu)的循環(huán)體中可以包含while循環(huán);do_while循環(huán)結(jié)構(gòu)的循環(huán)體中可以包含do_while循環(huán);for循環(huán)結(jié)構(gòu)的循環(huán)體中可以包含for循環(huán)。此外,這幾種循環(huán)結(jié)構(gòu)之間還可以相互嵌套。一般循環(huán)體中的循環(huán)稱為“內(nèi)循環(huán)”,包含內(nèi)循環(huán)的循環(huán)稱為“外循環(huán)”,當(dāng)然,這只是指二重循環(huán)。另外還有多層嵌套的情況,這屬于多重循環(huán)。
23循環(huán)嵌套的說明嵌套的循環(huán)控制變量名不能相同內(nèi)循環(huán)變化快,外循環(huán)變化慢如:for(i=1;i<=9;i++){for(j=1;j<=9;j++)
printf(“%d”,i*j);
printf(“\n”);}正確確定循環(huán)體24例5.11:用for循環(huán)嵌套打印九九乘法表。#include"stdio.h"
main()
{
int
i,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=9;j++)
printf("%3d",i*j);
printf("\n");
}
}25例5.12:要付零錢19元,現(xiàn)有1元,2元和5元的紙幣10張,請問有幾種付法?
#include"stdio.h"main(){
int
x,y,z,i=1;
for(x=0;x<10;x++)
for(y=0;y<=9;y++) { z=10-x-y; if(x+2*y+5*z==19)
printf("%d:\tx=%d\ty=%d\tz=%d\n",i++,x,y,z); }}26例5.13:求50以內(nèi)的全部勾股數(shù)并打印輸出。#include"stdio.h"main(){
int
x,y,z,i=1;
for(z=5;z<=50;z++)
for(y=4;y<z;y++)
for(x=3;x<=y;x++)
if(x*x+y*y==z*z) printf("%3d:%3d%3d%3d\n",i++,x,y,z);}27
5.6無條件轉(zhuǎn)向語句
無條件轉(zhuǎn)向語句(或稱無條件控制語句)是指當(dāng)程序執(zhí)行到該語句時,程序無條件轉(zhuǎn)移到程序的某個地方執(zhí)行。C語言提供三個無條件控制語句:break語句,continue語句和goto語句。
break語句主要用于循環(huán)結(jié)構(gòu)和switch語句結(jié)構(gòu)中。continue語句主要用于循環(huán)結(jié)構(gòu)中。結(jié)構(gòu)化程序設(shè)計要求少用或盡量不用goto語句。28
1.break語句
break語句由關(guān)鍵字break后加分號“;”組成。它的一般形式是:break;例5.14:求12+22+32+…….+1002的和。#include"stdio.h"main(){ longsum=0;
int
c=1;
while(8) { sum=sum+c*c; c++;
if(c>100)break; }
printf("sum=%ld\n",sum);}29例5.15:求整數(shù)m是否是素數(shù)。#include"stdio.h"main(){
int
m,c=2;
scanf("%d",&m); for(;;) {
if(m%c==0)break; c++; }
if(c==m)
printf("%disaprimenumber.\n",m); else
printf("%disnotaprimenumber.\n",m);}30例5.16:求200~230之間的全部素數(shù)。#include"stdio.h"#include"math.h"
main()
{
int
m,c,k;
for(m=201;m<230;m=m+2)
{
k=(int)sqrt(m);
for(c=2;c<=k;c++)
if(m%c==0)break;
if(c>k)
printf("%disaprimenumber.\n",m);
}
}312.continue語句
一般形式是:continue;
作用:結(jié)束本次循環(huán)(即跳過循環(huán)體中尚未執(zhí)行的語句)。注意break語句和continue語句的區(qū)別:
break語句是跳出整個循環(huán)結(jié)構(gòu),不再在循環(huán)結(jié)構(gòu)中做任何事情。而continue語句只是結(jié)束本次循環(huán),繼續(xù)進(jìn)行循環(huán)條件的判斷,來決定循環(huán)是否繼續(xù)進(jìn)行。32對于while或do_while,循環(huán)體中執(zhí)行continue語句后直接進(jìn)行循環(huán)條件的判斷來決定循環(huán)是否繼續(xù);而對于for循環(huán),執(zhí)行continue語句后,還應(yīng)執(zhí)行增量表達(dá)式(表達(dá)式3)后再進(jìn)行循環(huán)條件的判斷來決定循環(huán)是否繼續(xù)。33例5.21:求200~230之間和400~430的全部素數(shù)。#include"stdio.h"#include"math.h"main(){
int
m,c,k;
for(m=201;m<430;m+=2) {
if(m>230&&m<400)continue; k=(int)sqrt(m);
for(c=2;c<=k;c++)
if(m%c==0)break;
if(c==k+1)
printf("%disaprimenumber.\n",m); }}343.goto語句一般形式:goto
語句標(biāo)號;程序中與之對應(yīng)的應(yīng)有:語句標(biāo)號:語句例5.22求1~100間的奇數(shù)和。#include"stdio.h"
main()
{
inti=1,sum=0;
loop:sum=sum+i;
i=i+2;
if(i<100)
gotoloop;
printf("sum=%d\n",sum);
}35
5.7應(yīng)用舉例數(shù)學(xué)上的遞推(recurence)方法在程序設(shè)計中應(yīng)用很多。遞推方法解題的關(guān)鍵是確定遞推公式和初始條件。根據(jù)初始條件的不同,遞推又可分為“順推”和“倒推”兩種形式:順推是數(shù)列后面的值要根據(jù)前面的值才能推算出來。如例5.13求Fibonacci數(shù)列屬順推。倒推是數(shù)列前面的值要根據(jù)后面的值才能推算出來。例5.23“猴子吃桃”問題屬倒推。遞推方法在程序設(shè)計中通過變量的迭代(iterate)方法來實(shí)現(xiàn)。36例5.23:猴子吃桃”問題(倒推)。
猴子第一天摘下若干個桃子,當(dāng)即吃了一半,還不過癮,又多吃了一個。第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下的一半零一個。到第十天早上想吃時,發(fā)現(xiàn)只剩一個桃子。求第一天共摘了多少桃子。分析:“猴子吃桃”問題成了倒推的問題,設(shè)第n天的桃子數(shù)為a(n)個,前一天的桃子數(shù)為a(n-1)個.則有:a(n)=a(n-1)/2-1
即:a(n-1)=2(a(n)+
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 南京工業(yè)大學(xué)浦江學(xué)院《應(yīng)用統(tǒng)計學(xué)》2022-2023學(xué)年第一學(xué)期期末試卷
- 南京工業(yè)大學(xué)浦江學(xué)院《社會統(tǒng)計學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 分?jǐn)?shù)的基本性質(zhì)說課稿
- 蹲踞式跳遠(yuǎn)說課教學(xué)反思
- 住宅樓長螺旋鉆孔CFG灌注樁基礎(chǔ)工程施工方案
- 《月是故鄉(xiāng)明》說課稿
- 南京工業(yè)大學(xué)浦江學(xué)院《合同管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 南京工業(yè)大學(xué)浦江學(xué)院《服務(wù)設(shè)計》2021-2022學(xué)年第一學(xué)期期末試卷
- 終止合作協(xié)議書(2篇)
- 提高4-5歲幼兒自我控制能力的教育策略
- 公共政策分析第一章
- 行業(yè)協(xié)會重大活動備案報告制度
- 北京市海淀區(qū)2024學(xué)年七年級上學(xué)期語文期中試卷【含參考答案】
- 2024年新人教版七年級上冊數(shù)學(xué)教學(xué)課件 5.2 解一元一次方程 第4課時 利用去分母解一元一次方程
- Unit 4 My Favourite Subject教學(xué)設(shè)計2024-2025學(xué)年人教版(2024)英語七年級上冊
- 2024新信息科技三年級第四單元:創(chuàng)作數(shù)字作品大單元整體教學(xué)設(shè)計
- 第9課《這些是大家的》(課件)-部編版道德與法治二年級上冊
- 2024年四川省南充市從“五方面人員”中選拔鄉(xiāng)鎮(zhèn)領(lǐng)導(dǎo)班子成員201人歷年高頻500題難、易錯點(diǎn)模擬試題附帶答案詳解
- 2024年母嬰護(hù)理考試競賽試題
- 人工智能算力中心項(xiàng)目可行性研究報告寫作模板-申批備案
- 2024-2030年中國空壓機(jī)(空氣壓縮機(jī))行業(yè)運(yùn)營現(xiàn)狀與可持續(xù)發(fā)展建議研究報告
評論
0/150
提交評論