版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章
語(yǔ)句結(jié)構(gòu)-循環(huán)結(jié)構(gòu)
本章要點(diǎn)●C語(yǔ)言中3個(gè)基本循環(huán)結(jié)構(gòu)while、do-while、
for的特點(diǎn)和應(yīng)用?!裨鯓颖苊狻盁o限循環(huán)”?!裱h(huán)結(jié)構(gòu)的嵌套。●循環(huán)結(jié)構(gòu)中的無條件控制語(yǔ)句(goto、break和
continue)的應(yīng)用。15.1概述實(shí)現(xiàn)循環(huán)的語(yǔ)句(三種):用while語(yǔ)句 用do-while語(yǔ)句 用for語(yǔ)句 循環(huán):就是在滿足一定條件時(shí)重復(fù)執(zhí)行一段程序。被重復(fù)執(zhí)行的語(yǔ)句或模塊,稱為循環(huán)體。注意:設(shè)計(jì)一個(gè)合理的循環(huán)結(jié)構(gòu),要使循環(huán)條件由一個(gè)狀態(tài)轉(zhuǎn)變?yōu)榱硪粋€(gè)狀態(tài),使循環(huán)正常終止。否則,這種循環(huán)就變?yōu)椤盁o限循環(huán)”,或稱“死循環(huán)”。25.2while循環(huán)用while語(yǔ)句實(shí)現(xiàn)當(dāng)型循環(huán):即先判斷后執(zhí)行while語(yǔ)句的一般形式:
while(表達(dá)式)語(yǔ)句流程圖:表達(dá)式語(yǔ)句下一語(yǔ)句假(0)真(非0)當(dāng)表達(dá)式的值為真(非0)時(shí),執(zhí)行其中的循環(huán)體,然后回過頭來再判斷表達(dá)式的值,如此重復(fù);當(dāng)表達(dá)式的值為假(0)時(shí),結(jié)束循環(huán)。3while語(yǔ)句的一般形式:while(表達(dá)式)語(yǔ)句如:intk=1,s=0; while(k<=100)
{s=s+k;k++;}循環(huán)控制表達(dá)式循環(huán)控制變量循環(huán)體注意:若循環(huán)體包含一條以上的語(yǔ)句,應(yīng)以復(fù)合語(yǔ)句出現(xiàn);循環(huán)前,必須給循環(huán)控制變量賦初值;循環(huán)體中,必須有改變循環(huán)控制變量值的語(yǔ)句存在。(使循環(huán)趨向結(jié)束的語(yǔ)句)循環(huán)體可以為空 4【例5.1】計(jì)算分析:這是一個(gè)累加求和問題
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語(yǔ)句寫程序s=65#include"stdio.h"main(){
intc=0;
while(c<=255){
printf("%c",c++);if(c%32==0)
printf("c=%d\n",c);/*顯示已輸出字符個(gè)數(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時(shí),反復(fù)執(zhí)行
c=101時(shí),停止循環(huán)
注意:缺少了語(yǔ)句c++;c的值在循環(huán)中不會(huì)變,while中的條件就不會(huì)變,就成了無限循環(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:鍵盤輸入一個(gè)整數(shù)m,判斷m是不是素?cái)?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語(yǔ)句用來實(shí)現(xiàn)直到型循環(huán):即先執(zhí)行后判斷條件do-while語(yǔ)句的一般形式:
do語(yǔ)句
while(表達(dá)式);注意:分號(hào)“;”不可省略!表達(dá)式語(yǔ)句下一語(yǔ)句假(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語(yǔ)句寫程序:【例5.7】計(jì)算#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語(yǔ)句寫程序:先判斷后執(zhí)行先執(zhí)行后判斷12
while循環(huán)和do_while循環(huán)的比較:一般情況下,while循環(huán)和do_while循環(huán)可以用來處理同一個(gè)問題。但while循環(huán)可以一次也不執(zhí)行循環(huán)體(循環(huán)條件一開始就不滿足時(shí)),而do_while循環(huán)時(shí),至少要執(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)時(shí),特別要注意該結(jié)構(gòu)的最后有一個(gè)分號(hào)。練習(xí):用do-while改寫判斷m是不是素?cái)?shù)的程序。13
5.4
for循環(huán)結(jié)構(gòu)
for循環(huán)結(jié)構(gòu)的一般形式是:
for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語(yǔ)句(循環(huán)體)
表達(dá)式1也稱初始化表達(dá)式,用來設(shè)定循環(huán)控制變量或其他變量的初值,若有多個(gè)變量需要初始化時(shí),表達(dá)式1要使用逗號(hào)表達(dá)式。
表達(dá)式2也稱循環(huán)條件表達(dá)式,用來決定是否執(zhí)行循環(huán)體。當(dāng)表達(dá)式值為非0時(shí),執(zhí)行循環(huán)體,當(dāng)表達(dá)式的值為0時(shí)循環(huán)終止。
表達(dá)式3也稱增量表達(dá)式,執(zhí)行一次循環(huán)體后,求解一次表達(dá)式3的值,用來改變循環(huán)變量的值,修正表達(dá)式2。表達(dá)式3也可用逗號(hào)表達(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)語(yǔ)句(循環(huán)體)表達(dá)式1可以移到for語(yǔ)句的前面表達(dá)式1;for(;表達(dá)式2;表達(dá)式3)語(yǔ)句(循環(huán)體)表達(dá)式3可以移到循環(huán)體里面for(表達(dá)式1;表達(dá)式2;){語(yǔ)句表達(dá)式3;}16表達(dá)式1省略時(shí),應(yīng)在for前給循環(huán)變量賦初值如:k=1;for(;k<=3;k++)s=s+k;
表達(dá)式3省略時(shí)循環(huán)體內(nèi)應(yīng)有使循環(huán)條件改變的語(yǔ)句如:for(k=1;k<=3;){s=s+k;k++;}
同時(shí)省略表達(dá)式1和表達(dá)式3,只有表達(dá)式2,此時(shí)相當(dāng)于while語(yǔ)句。如:
表達(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是不是素?cái)?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個(gè)數(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語(yǔ)句寫程序#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語(yǔ)句寫程序21幾種循環(huán)的比較對(duì)比while(表達(dá)式)語(yǔ)句do語(yǔ)句while(表達(dá)式);for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句循環(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張,請(qǐng)問有幾種付法?
#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)向語(yǔ)句
無條件轉(zhuǎn)向語(yǔ)句(或稱無條件控制語(yǔ)句)是指當(dāng)程序執(zhí)行到該語(yǔ)句時(shí),程序無條件轉(zhuǎn)移到程序的某個(gè)地方執(zhí)行。C語(yǔ)言提供三個(gè)無條件控制語(yǔ)句:break語(yǔ)句,continue語(yǔ)句和goto語(yǔ)句。
break語(yǔ)句主要用于循環(huán)結(jié)構(gòu)和switch語(yǔ)句結(jié)構(gòu)中。continue語(yǔ)句主要用于循環(huán)結(jié)構(gòu)中。結(jié)構(gòu)化程序設(shè)計(jì)要求少用或盡量不用goto語(yǔ)句。28
1.break語(yǔ)句
break語(yǔ)句由關(guān)鍵字break后加分號(hào)“;”組成。它的一般形式是: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是否是素?cái)?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之間的全部素?cái)?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語(yǔ)句
一般形式是:continue;
作用:結(jié)束本次循環(huán)(即跳過循環(huán)體中尚未執(zhí)行的語(yǔ)句)。注意break語(yǔ)句和continue語(yǔ)句的區(qū)別:
break語(yǔ)句是跳出整個(gè)循環(huán)結(jié)構(gòu),不再在循環(huán)結(jié)構(gòu)中做任何事情。而continue語(yǔ)句只是結(jié)束本次循環(huán),繼續(xù)進(jìn)行循環(huán)條件的判斷,來決定循環(huán)是否繼續(xù)進(jìn)行。32對(duì)于while或do_while,循環(huán)體中執(zhí)行continue語(yǔ)句后直接進(jìn)行循環(huán)條件的判斷來決定循環(huán)是否繼續(xù);而對(duì)于for循環(huán),執(zhí)行continue語(yǔ)句后,還應(yīng)執(zhí)行增量表達(dá)式(表達(dá)式3)后再進(jìn)行循環(huán)條件的判斷來決定循環(huán)是否繼續(xù)。33例5.21:求200~230之間和400~430的全部素?cái)?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語(yǔ)句一般形式:goto
語(yǔ)句標(biāo)號(hào);程序中與之對(duì)應(yīng)的應(yīng)有:語(yǔ)句標(biāo)號(hào):語(yǔ)句例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è)計(jì)中應(yīng)用很多。遞推方法解題的關(guān)鍵是確定遞推公式和初始條件。根據(jù)初始條件的不同,遞推又可分為“順推”和“倒推”兩種形式:順推是數(shù)列后面的值要根據(jù)前面的值才能推算出來。如例5.13求Fibonacci數(shù)列屬順推。倒推是數(shù)列前面的值要根據(jù)后面的值才能推算出來。例5.23“猴子吃桃”問題屬倒推。遞推方法在程序設(shè)計(jì)中通過變量的迭代(iterate)方法來實(shí)現(xiàn)。36例5.23:猴子吃桃”問題(倒推)。
猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不過癮,又多吃了一個(gè)。第二天早上又將剩下的桃子吃掉一半,又多吃了一個(gè)。以后每天早上都吃了前一天剩下的一半零一個(gè)。到第十天早上想吃時(shí),發(fā)現(xiàn)只剩一個(gè)桃子。求第一天共摘了多少桃子。分析:“猴子吃桃”問題成了倒推的問題,設(shè)第n天的桃子數(shù)為a(n)個(gè),前一天的桃子數(shù)為a(n-1)個(gè).則有:a(n)=a(n-1)/2-1
即:a(n-1)=2(a(n)+
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 護(hù)工和病人協(xié)議合同書(2篇)
- 2025年孝感b2貨運(yùn)資格證多少道題
- 2024年物業(yè)電梯緊急救援協(xié)議3篇
- 2025年臨沂貨運(yùn)資格證考試題庫(kù)
- 2024年度精準(zhǔn)崗位聘任合同范本2篇
- 2025年延邊下載貨運(yùn)從業(yè)資格證模擬考試
- 2025年西寧貨運(yùn)從業(yè)資格證網(wǎng)上考試
- 2025年運(yùn)城貨運(yùn)從業(yè)資格證網(wǎng)上考試答案
- 2025年深圳貨運(yùn)從業(yè)資格證考試模擬
- 《輪胎生產(chǎn)流程》課件
- 華為經(jīng)營(yíng)管理-華為供應(yīng)鏈管理(6版)
- 沖床吊裝施工方案
- JGT491-2016 建筑用網(wǎng)格式金屬電纜橋架
- 白蟻監(jiān)測(cè)控制裝置施工方案
- 2019北師大版高中英語(yǔ)選擇性必修三單詞表
- 音樂表演職業(yè)生涯規(guī)劃書
- (新插圖)人教版三年級(jí)上冊(cè)數(shù)學(xué)全冊(cè)期末復(fù)習(xí)知識(shí)點(diǎn)梳理課件
- 中華鱉生態(tài)養(yǎng)殖技術(shù)-中華鱉的生態(tài)養(yǎng)殖技術(shù)
- 殘疾人與特殊群體服務(wù)項(xiàng)目設(shè)計(jì)方案
- 2023中建西部建設(shè)股份限公司公開招聘上岸筆試歷年難、易錯(cuò)點(diǎn)考題附帶參考答案與詳解
- 考試中心全國(guó)計(jì)算機(jī)等級(jí)調(diào)整方案
評(píng)論
0/150
提交評(píng)論