while循環(huán)語句分析_第1頁
while循環(huán)語句分析_第2頁
while循環(huán)語句分析_第3頁
while循環(huán)語句分析_第4頁
while循環(huán)語句分析_第5頁
已閱讀5頁,還剩66頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章循環(huán)結構C

語言程序設計教程While語句循環(huán)控制結構引入、概述while語句的一般格式While語句的執(zhí)行過程While語句的應用break和continue

語句goto語句(自學)學習內容假設一張報紙厚0.1毫米,將報紙從中間對折,報紙會有多厚?#include<stdio.h>voidmain(){floatt=0.0001;/*t表示報紙的厚度*/t=t*2;printf(“%f\n”,t);}循環(huán)結構的引入循環(huán)結構的引入假設一張報紙厚0.1毫米,將報紙從中間對折,報紙會有多厚?#include<stdio.h>voidmain(){floatt=0.0001;t=t*2;printf(“%f”,t);}0.0002循環(huán)結構的引入假設一張報紙厚0.1毫米,將報紙從中間對折3次后,報紙會有多厚?#include<stdio.h>voidmain(){floatt=0.0001;t=t*2;t=t*2;t=t*2;printf(“%f”,t);}循環(huán)結構的引入假設一張報紙厚0.1毫米,將報紙從中間對折3次后,報紙會有多厚?2023/2/4#include<stdio.h>voidmain(){floatt=0.0001;

t=t*2;t=t*2;t=t*2;printf(“%f”,t);}循環(huán)結構的引入假設一張報紙厚0.1毫米,將報紙從中間對折10次后,報紙會有多厚?計算機對同樣的操作可以用循環(huán)結構完成.循環(huán)結構可以使我們只寫很少的語句,而讓計算機反復執(zhí)行,從而完成大量類同的操作。循環(huán)結構概述循環(huán)結構是結構化程序三種基本結構之一C語言提供了三種循環(huán)控制語句,構成了三種基本的循環(huán)結構:while語句構成的循環(huán)結構do-while語句構成的循環(huán)結構for語句構成的循環(huán)結構

while循環(huán)控制while循環(huán)控制結構一般格式while(表達式)

循環(huán)體語句

一般為關系表達式或邏輯表達式,也可以是C語言其他類型的合法表達式用來控制循環(huán)體是否執(zhí)行稱為循環(huán)體語句,可以是基本語句、也可以是復合語句.是循環(huán)重復執(zhí)行的部分

while語句While語句的一般格式while(表達式)

循環(huán)體語句

執(zhí)行過程是:(1)先計算while后面的表達式的值,如果其值為“真”則執(zhí)行循環(huán)體。(2)執(zhí)行完循環(huán)體后,再次計算while后面的表達式的值,如果其值為“真”則繼續(xù)執(zhí)行循環(huán)體,如果表達式的值為“假”,退出此循環(huán)結構。非0

0表達式語句注意:為了保證循環(huán)正常運行,

應該特別注意:循環(huán)控制變量的初始化

(循環(huán)的初始值)循環(huán)條件(狀態(tài))的檢查

(確認是否進行循環(huán))循環(huán)控制變量值的修改

(使循環(huán)趨于結束)

while循環(huán)控制結構假設一張報紙厚0.1毫米,將報紙從中間對折10次后,報紙會有多厚?#include<stdio.h>voidmain(){floatt=0.0001;}while循環(huán)控制結構假設一張報紙厚0.1毫米,將報紙從中間對折10次后,報紙會有多厚?2023/2/4#include<stdio.h>voidmain(){floatt=0.0001;

intn=0;}while循環(huán)控制結構假設一張報紙厚0.1毫米,將報紙從中間對折10次后,報紙會有多厚?#include<stdio.h>voidmain(){floatt=0.0001;intn=0;

while(n<10)

}while循環(huán)控制結構假設一張報紙厚0.1毫米,將報紙從中間對折10次后,報紙會有多厚?#include<stdio.h>voidmain(){floatt=0.0001;intn=0;while(n<10)

t=t*2;n++;

}while循環(huán)控制結構假設一張報紙厚0.1毫米,將報紙從中間對折10次后,報紙會有多厚?#include<stdio.h>voidmain(){floatt=0.0001;

intn=0;

while(n<10){t=t*2;n++;}

}while循環(huán)控制結構假設一張報紙厚0.1毫米,將報紙從中間對折10次后,報紙會有多厚?#include<stdio.h>voidmain(){floatt=0.0001;

intn=0;

while(n<10){t=t*2;n++;}printf(“%f\n”,t);}0.1024循環(huán)控制變量必須有正確的初值循環(huán)判斷條件循環(huán)控制變量值的修改while循環(huán)控制結構假設一張報紙厚0.1毫米,將報紙從中間對折多少次后,報紙高度會超過珠穆朗瑪峰?

while循環(huán)控制結構假設一張報紙厚0.1毫米,將報紙從中間對折多少次后,報紙高度會超過珠穆朗瑪峰?#include<stdio.h>voidmain(){

floatt=0.0001;intn=0;

}while循環(huán)控制結構假設一張報紙厚0.1毫米,將報紙從中間對折多少次后,報紙高度會超過珠穆朗瑪峰?#include<stdio.h>voidmain(){

floatt=0.0001;

intn=0;

while(t<=8844)}while循環(huán)控制結構假設一張報紙厚0.1毫米,將報紙從中間對折多少次后,報紙高度會超過珠穆朗瑪峰?#include<stdio.h>voidmain(){floatt=0.0001;

intn=0;

while(t<=8844){t=t*2;n++;}

}while循環(huán)控制結構假設一張報紙厚0.1毫米,將報紙從中間對折多少次后,報紙高度會超過珠穆朗瑪峰?#include<stdio.h>voidmain(){

floatt=0.0001;intn=0;

while(t<=8844){t=t*2;n++;}printf(“%d\n”,n);}while循環(huán)控制結構假設一張報紙厚0.1毫米,將報紙從中間對折多少次后,報紙高度會超過珠穆朗瑪峰?#include<stdio.h>voidmain(){

floatt=0.0001;

intn=0;

while(t<=8844){t=t*2;n++;}printf(“%3d\n”,n);}循環(huán)控制變量必須有正確的初值循環(huán)判斷條件循環(huán)控制變量值的修改課堂練習#include<stdio.h>voidmain(){inta=5;while(--a)printf(“%5d\n”,a-=3);}

問:程序的輸出結果是______.1課堂練習#include<stdio.h>voidmain(){inta=5;while(a--)printf(“%5d\n”,a-=3);}

問:程序的輸出結果是______.?程序陷入死循環(huán)狀態(tài)課堂練習#include<stdio.h>voidmain(){inta=5;while(--a);printf(“%5d\n”,a-=3);}

問:程序的輸出結果是______.?-32023/2/427do-while語句語句一般格式do語句

while(表達式);

功能:先執(zhí)行內嵌語句(循環(huán)體),之后計算表達式的值,不為0(邏輯真)時,再執(zhí)行循環(huán)體并判斷條件,直到表達式的值為0結束循環(huán),轉去執(zhí)行while下面的語句。2023/2/428

do-while循環(huán)的算法(2)直到型循環(huán)(do~while語句)do語句while(表達式);特點:先執(zhí)行后判斷,循環(huán)體至少執(zhí)行一次。適用于循環(huán)體至少執(zhí)行一次,且總次數(shù)不確定的情況。零非零表達式?語句(循環(huán)體)零非零表達式?語句(循環(huán)體)至少執(zhí)行一次2023/2/429說明:while和do-while都能實現(xiàn)循環(huán)控制,while結構程序通常都可以轉換成do-while結構區(qū)別:do-while語句先執(zhí)行循環(huán)體再判斷條件,循環(huán)體至少執(zhí)行一次;while語句先判斷條件再執(zhí)行循環(huán)體,循環(huán)體有可能一次也不執(zhí)行do—while循環(huán)體中一定要有能使表達式值趨于0的操作(如i++),否則會出現(xiàn)死循環(huán)。

2023/2/430舉例while和do-while循環(huán)的比較。#include<stdio.h>voidmain(){inti,sum=0;scanf(“%d”,&i);while(i<=100)

{

sum=sum+i;i++;

}printf(“sum=%d\n”,sum);}#include<stdio.h>voidmain(){inti,sum=0;scanf(“%d”,&i);do

{

sum=sum+i;i++;

}while(i<=100);printf(“sum=%d\n”,sum);}輸入:1輸入:101sum=5050輸出:sum=5050sum=0輸出:sum=101此程序的功能?什么情況下兩者結果相同?二、do-while語句2023/2/4315.3for語句語句一般格式for(表達式1;表達式2;表達式3)語句功能:計算表達式1的值,再判斷表達式2,如果其值為非0(邏輯真),則執(zhí)行內嵌語句(循環(huán)體),并計算表達式3;之后再去判斷表達式2,一直到其值為0時結束循環(huán),執(zhí)行后續(xù)語句。循環(huán)初始條件循環(huán)控制條件循環(huán)體2023/2/432for語句的算法N-S結構圖for(表達式1;表達式2;表達式3)語句NY流程圖計算表達式1語句計算表達式3表達式2為真?例如:main(){inti,sum;sum=0;

for(i=1;i<=100;i++)sum=sum+i;

printf("sum=%d\n",sum);}可部分或全部省略,但“;”不可省略2023/2/433省略for語句的表達式⑴表達式1、2、3全省略,即:for(;;)

就等同于:while(1),會無限循環(huán)(死循環(huán))注意:在省略某個表達式時,應在適當位置進行循環(huán)控制的必要操作,以保證循環(huán)的正確執(zhí)行⑵省略表達式1和表達式3,即:for(;表達式2;)

就等同于:while(

表達式2)⑶省略表達式2,即:

for(表達式1;;表達式3)

就等同于:表達式1;while(1){…表達式3;}2023/2/434例如:⑴i=1;for(;i<=100;i++)sum+=i;⑵for(i=1;;i++){…if(i>100)……}⑶for(i=1;i<=100;){…i++;…}⑷i=1;for(;;){…if(i>100)…

i++;…}2023/2/435說明:所有用while

語句實現(xiàn)的循環(huán)都可以用for

語句實現(xiàn)。

等價于:for(表達式1;表達式2;表達式3)

語句;表達式1;while(表達式2){

語句;

表達式3;

}2023/2/436for語句的簡單應用【例5.4】求n!,即計算p=1×2×3×…×n的值。

思路:求階乘與求累加的運算處理過程類似,只要將“+”變?yōu)椤?”。設置:乘數(shù)i

,初值為1,終值為n(n是循環(huán)控制終值,需要從鍵盤輸入)累乘器p

,每次循環(huán)令p=p*i2023/2/437程序:main(){inti,n;longp;

p=1;

printf("Entern:");scanf("%d",&n);for(i=1;i<=n;i++)

p=p

*

i;printf("p=%ld\n",p);}思考:如何輸出1!,2!,…,n!?如何求s=1!+2!+…+n!?2023/2/438幾種循環(huán)語句的比較while和do-while語句的表達式只有一個,for語句有三個。while和for先判斷循環(huán)條件后執(zhí)行循環(huán)體,do-while語句先執(zhí)行循環(huán)體后判斷循環(huán)條件。while語句多用于循環(huán)次數(shù)不定的情況do-while語句多用于至少要運行一次的情況for語句多用于要賦初值或循環(huán)次數(shù)固定的情況2023/2/439循環(huán)結構中的跳轉語句有如下三種語句實現(xiàn)跳轉:continue語句break語句goto語句在循環(huán)語句的循環(huán)體中使用,可以進行循環(huán)的流程控制2023/2/440后續(xù)語句…continue;

…YN表達式?后續(xù)語句…continue;…表達式?YNcontinue語句及應用功能:中斷循環(huán)體的本次執(zhí)行(即跳過循環(huán)體中尚未執(zhí)行的語句),立即開始執(zhí)行下一次循環(huán)。while語句do-while語句后續(xù)語句計算表達式3計算表達式1…continue;…表達式2?YNfor語句2023/2/441例如:⑴intx,n=0,s=0;while(n<10){scanf("%d",&x);

if(x<0)continue;

s+=x;n++;};

⑵intx,n=0,s=0;do{scanf("%d",&x);

if(x<0)continue;

s+=x;n++;}while(n<10);

⑶for(n=0,s=0;n<10;n++){scanf("%d",&x);

if(x<0)continue;

s+=x;}2023/2/442應用舉例把100~200之間能被7整除的數(shù),以十個數(shù)為一行的形式輸出,最后輸出一共有多少個這樣的數(shù)。

for(n=100;n<=200;n++)n能被7整除

TF終止本次循環(huán)輸出n

輸出10個數(shù)

TF

換行2023/2/443算法和程序main(){intn,j=0;for(n=100;n<=200;n++){if(n%7!=0)continue; printf("%6d",n);

j++;

if(j%10==0)printf("\n");

}printf("\nj=%d\n",j);}運行jc5_72023/2/444后續(xù)語句…break;…YN表達式?后續(xù)語句…break;…表達式?YN循環(huán)中break的應用功能:利用break語句能夠強迫終止本層循環(huán),轉到后續(xù)語句執(zhí)行。while語句do-while語句后續(xù)語句計算表達式3計算表達式1…break;…表達式2?YNfor語句2023/2/445例如:⑴intx,n=0,s=0;while(n<10){scanf("%d",&x);

if(x<0)break;s+=x;n++;};⑵intx,n=0,s=0;do{scanf("%d",&x);

if(x<0)break;s+=x;n++;}while(n<10);⑶for(n=0,s=0;n<10;n++){scanf("%d",&x);

if(x<0)break;s+=x;}2023/2/446用goto語句實現(xiàn)循環(huán)有興趣的同學自學不提倡使用goto語句注意:goto語句能實現(xiàn)程序無條件轉移,為編程提供了便利。但是無限制地使用,會破壞程序的結構化程度。因此應限制使用。2023/2/447循環(huán)的嵌套如果循環(huán)語句的循環(huán)體內又包含了另一條循環(huán)語句,則稱為循環(huán)的嵌套例如:

#include<stdio.h>main(){inti,j;

for(i=1;i<10;i++)for(j=1;j<=i;j++)printf("%4d",i*j);

}運行jc5_a外循環(huán)語句內循環(huán)語句2023/2/449注意:while、do-while、for循環(huán)語句可以并列,也可以相互嵌套,但要層次清楚,不能出現(xiàn)交叉。多重循環(huán)程序執(zhí)行時,外層循環(huán)每執(zhí)行一次,內層循環(huán)都需要循環(huán)執(zhí)行多次。例如:for(a=1;a<=10;a++){for(b=0;b<=5;b++)

……}外循環(huán)執(zhí)行了10次,內循環(huán)執(zhí)行6次循環(huán)正常結束時,內循環(huán)執(zhí)行了10×6=60次例4.4:輸入一行字符,分別統(tǒng)計其中字母、空格、數(shù)字和其他字符的個數(shù)。(ctrl+z結束輸入)#include”stdio.h”elseif(c==‘‘)main()s++;{charc;intk=0,s=0,d=0,o=0;elseif(c>=‘0’&&c<=‘9’)printf(“inputstring:\n”);d++;while((c=getchar())!=EOF)elseo++;}{if(c>=‘a’&&c<=‘z’||printf(“%d%d%d%d”,

c>=‘A’&&c<=‘Z’)k,s,d,o);k++;}while語句-實例例4.6:求數(shù)列2/1,3/2,5/3,8/5,13/8,21/13,…….前20項的和.

main() {inti=1,t;floata=2,b=1,sum=0;do{sum=sum+a/b;t=a;a=a+b;b=t;i++;}while(i<=20);printf(“sum=%10.6f”,sum);}do-while語句實例例:判斷正整數(shù)m是否素數(shù)。

分析:素數(shù)的定義可以表達為----若m為素數(shù),當且僅當它能分解為1和m的乘積。則可以得出判斷m是否為素數(shù)的一種方法:讓m被2到sqrt(m)除,若m能被2~sqrt(m)

之中的任何一個整數(shù)整除,則m不為素數(shù);否則m為素數(shù)。程序如下:for語句-實例#include”math.h”/*判斷正整數(shù)m是否素數(shù)*/

main(){inti,m,k;printf(“請輸入正整數(shù)m:”);scanf(“%d”,&m);k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0){printf(“%d不是素數(shù)”,m);break;}if(i>=k+1)printf(“%d是素數(shù)”,m);}例:求水仙花數(shù)。如果一個三位數(shù)的個位數(shù)、十位數(shù)、和百位數(shù)的立方和等于該數(shù)自身,則稱該數(shù)為水仙花數(shù)。分析:一個三位數(shù)

個、十、百位數(shù)

循環(huán)結構(for語句)------定義變量i------定義變量a、b、ci==a*a*a+b*b*b+c*c*ci=100;i<=999;i++a=?b=?c=?結構嵌套的練習main()

lianxi1.c{intk,s,j;for(k=2;k<6;k++,k++){s=1;for(j=k;j<6;j++)s+=j;}printf(“%d\n”,s);}

問:程序的輸出結果是______.10結構嵌套的練習2、main(){intk=5,n=0;while(k>0){switch(k){default:break;case1:n+=k;case2:case3:n+=k;}k--;}printf(“%d\n”,n);}問:程序的輸出結果是______.73、main(){inta=1,b;for(b=1;b<=10;b++){if(a>=8)break;if(a%2==1){a+=5;continue;}a-=3;}printf(“%d\n”,b);}

問:程序的輸出結果是______.結構嵌套的練習4例4.9:打印出以下圖形。

************************

*

程序如下:循環(huán)結構(for語句)

main(){inti,j,k;for(i=1;i<=4;i++)/*上三角(1-4行)的打印*/{for(j=1;j<=4-i;j++)printf(“”);for(k=1;k<=2*i-1;k++)printf(“*”);printf(“\n”);}循環(huán)結構(for語句)

****************

for(i=1;i<=3;i++)/*下三角的打印*/{for(j=1;j<=i;j++)printf(“”);for(k=1;k<=7-2*i;k++)printf(“*”);printf(“\n”);}}循環(huán)結構(for語句)

********

*

上機中的一些問題1、循環(huán)的嵌套。例:main(){inta,b,s=0;for(a=1;a<=5;a++)for(b=1;b<=4;b++)s=a+b;printf(“s=%4d\n”,s);}

s=s+b;{s=0;s=s+b;}程序的結果為什么?上機中的一些問題2、按一定格式輸出某種圖形或結果。例:打印九九乘法表關鍵的問題是:學會分析數(shù)據間的聯(lián)系和規(guī)律,采用適當?shù)目刂平Y構,及輸出格式(%4d,\t,\n)的正確使用。程序如下:#include“stdio.h”main(){inti,j;clrscr();printf(“*”);for(i=1;i<=9;i++)printf(“%4d”,i);printf(“\n”);for(i=1;i<=9;i++){printf(“%4d”,i);for(j=1;j<=i;j++)printf(“%4d”,i*j);printf(“\n”);}}S3-4.c#include“stdio.h”main(){int

溫馨提示

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

評論

0/150

提交評論