




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第4章循環結構C
語言程序設計教程While語句循環控制結構引入、概述while語句的一般格式While語句的執行過程While語句的應用break和continue
語句goto語句(自學)學習內容假設一張報紙厚0.1毫米,將報紙從中間對折,報紙會有多厚?#include<stdio.h>voidmain(){floatt=0.0001;/*t表示報紙的厚度*/t=t*2;printf(“%f\n”,t);}循環結構的引入循環結構的引入假設一張報紙厚0.1毫米,將報紙從中間對折,報紙會有多厚?#include<stdio.h>voidmain(){floatt=0.0001;t=t*2;printf(“%f”,t);}0.0002循環結構的引入假設一張報紙厚0.1毫米,將報紙從中間對折3次后,報紙會有多厚?#include<stdio.h>voidmain(){floatt=0.0001;t=t*2;t=t*2;t=t*2;printf(“%f”,t);}循環結構的引入假設一張報紙厚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);}循環結構的引入假設一張報紙厚0.1毫米,將報紙從中間對折10次后,報紙會有多厚?計算機對同樣的操作可以用循環結構完成.循環結構可以使我們只寫很少的語句,而讓計算機反復執行,從而完成大量類同的操作。循環結構概述循環結構是結構化程序三種基本結構之一C語言提供了三種循環控制語句,構成了三種基本的循環結構:while語句構成的循環結構do-while語句構成的循環結構for語句構成的循環結構
while循環控制while循環控制結構一般格式while(表達式)
循環體語句
一般為關系表達式或邏輯表達式,也可以是C語言其他類型的合法表達式用來控制循環體是否執行稱為循環體語句,可以是基本語句、也可以是復合語句.是循環重復執行的部分
while語句While語句的一般格式while(表達式)
循環體語句
執行過程是:(1)先計算while后面的表達式的值,如果其值為“真”則執行循環體。(2)執行完循環體后,再次計算while后面的表達式的值,如果其值為“真”則繼續執行循環體,如果表達式的值為“假”,退出此循環結構。非0
0表達式語句注意:為了保證循環正常運行,
應該特別注意:循環控制變量的初始化
(循環的初始值)循環條件(狀態)的檢查
(確認是否進行循環)循環控制變量值的修改
(使循環趨于結束)
while循環控制結構假設一張報紙厚0.1毫米,將報紙從中間對折10次后,報紙會有多厚?#include<stdio.h>voidmain(){floatt=0.0001;}while循環控制結構假設一張報紙厚0.1毫米,將報紙從中間對折10次后,報紙會有多厚?2023/2/4#include<stdio.h>voidmain(){floatt=0.0001;
intn=0;}while循環控制結構假設一張報紙厚0.1毫米,將報紙從中間對折10次后,報紙會有多厚?#include<stdio.h>voidmain(){floatt=0.0001;intn=0;
while(n<10)
}while循環控制結構假設一張報紙厚0.1毫米,將報紙從中間對折10次后,報紙會有多厚?#include<stdio.h>voidmain(){floatt=0.0001;intn=0;while(n<10)
t=t*2;n++;
}while循環控制結構假設一張報紙厚0.1毫米,將報紙從中間對折10次后,報紙會有多厚?#include<stdio.h>voidmain(){floatt=0.0001;
intn=0;
while(n<10){t=t*2;n++;}
}while循環控制結構假設一張報紙厚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循環控制變量必須有正確的初值循環判斷條件循環控制變量值的修改while循環控制結構假設一張報紙厚0.1毫米,將報紙從中間對折多少次后,報紙高度會超過珠穆朗瑪峰?
while循環控制結構假設一張報紙厚0.1毫米,將報紙從中間對折多少次后,報紙高度會超過珠穆朗瑪峰?#include<stdio.h>voidmain(){
floatt=0.0001;intn=0;
}while循環控制結構假設一張報紙厚0.1毫米,將報紙從中間對折多少次后,報紙高度會超過珠穆朗瑪峰?#include<stdio.h>voidmain(){
floatt=0.0001;
intn=0;
while(t<=8844)}while循環控制結構假設一張報紙厚0.1毫米,將報紙從中間對折多少次后,報紙高度會超過珠穆朗瑪峰?#include<stdio.h>voidmain(){floatt=0.0001;
intn=0;
while(t<=8844){t=t*2;n++;}
}while循環控制結構假設一張報紙厚0.1毫米,將報紙從中間對折多少次后,報紙高度會超過珠穆朗瑪峰?#include<stdio.h>voidmain(){
floatt=0.0001;intn=0;
while(t<=8844){t=t*2;n++;}printf(“%d\n”,n);}while循環控制結構假設一張報紙厚0.1毫米,將報紙從中間對折多少次后,報紙高度會超過珠穆朗瑪峰?#include<stdio.h>voidmain(){
floatt=0.0001;
intn=0;
while(t<=8844){t=t*2;n++;}printf(“%3d\n”,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);}
問:程序的輸出結果是______.?程序陷入死循環狀態課堂練習#include<stdio.h>voidmain(){inta=5;while(--a);printf(“%5d\n”,a-=3);}
問:程序的輸出結果是______.?-32023/2/427do-while語句語句一般格式do語句
while(表達式);
功能:先執行內嵌語句(循環體),之后計算表達式的值,不為0(邏輯真)時,再執行循環體并判斷條件,直到表達式的值為0結束循環,轉去執行while下面的語句。2023/2/428
do-while循環的算法(2)直到型循環(do~while語句)do語句while(表達式);特點:先執行后判斷,循環體至少執行一次。適用于循環體至少執行一次,且總次數不確定的情況。零非零表達式?語句(循環體)零非零表達式?語句(循環體)至少執行一次2023/2/429說明:while和do-while都能實現循環控制,while結構程序通常都可以轉換成do-while結構區別:do-while語句先執行循環體再判斷條件,循環體至少執行一次;while語句先判斷條件再執行循環體,循環體有可能一次也不執行do—while循環體中一定要有能使表達式值趨于0的操作(如i++),否則會出現死循環。
2023/2/430舉例while和do-while循環的比較。#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(邏輯真),則執行內嵌語句(循環體),并計算表達式3;之后再去判斷表達式2,一直到其值為0時結束循環,執行后續語句。循環初始條件循環控制條件循環體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),會無限循環(死循環)注意:在省略某個表達式時,應在適當位置進行循環控制的必要操作,以保證循環的正確執行⑵省略表達式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
語句實現的循環都可以用for
語句實現。
等價于:for(表達式1;表達式2;表達式3)
語句;表達式1;while(表達式2){
語句;
表達式3;
}2023/2/436for語句的簡單應用【例5.4】求n!,即計算p=1×2×3×…×n的值。
思路:求階乘與求累加的運算處理過程類似,只要將“+”變為“*”。設置:乘數i
,初值為1,終值為n(n是循環控制終值,需要從鍵盤輸入)累乘器p
,每次循環令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幾種循環語句的比較while和do-while語句的表達式只有一個,for語句有三個。while和for先判斷循環條件后執行循環體,do-while語句先執行循環體后判斷循環條件。while語句多用于循環次數不定的情況do-while語句多用于至少要運行一次的情況for語句多用于要賦初值或循環次數固定的情況2023/2/439循環結構中的跳轉語句有如下三種語句實現跳轉:continue語句break語句goto語句在循環語句的循環體中使用,可以進行循環的流程控制2023/2/440后續語句…continue;
…YN表達式?后續語句…continue;…表達式?YNcontinue語句及應用功能:中斷循環體的本次執行(即跳過循環體中尚未執行的語句),立即開始執行下一次循環。while語句do-while語句后續語句計算表達式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整除的數,以十個數為一行的形式輸出,最后輸出一共有多少個這樣的數。
for(n=100;n<=200;n++)n能被7整除
TF終止本次循環輸出n
輸出10個數
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后續語句…break;…YN表達式?后續語句…break;…表達式?YN循環中break的應用功能:利用break語句能夠強迫終止本層循環,轉到后續語句執行。while語句do-while語句后續語句計算表達式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語句實現循環有興趣的同學自學不提倡使用goto語句注意:goto語句能實現程序無條件轉移,為編程提供了便利。但是無限制地使用,會破壞程序的結構化程度。因此應限制使用。2023/2/447循環的嵌套如果循環語句的循環體內又包含了另一條循環語句,則稱為循環的嵌套例如:
#include<stdio.h>main(){inti,j;
for(i=1;i<10;i++)for(j=1;j<=i;j++)printf("%4d",i*j);
}運行jc5_a外循環語句內循環語句2023/2/449注意:while、do-while、for循環語句可以并列,也可以相互嵌套,但要層次清楚,不能出現交叉。多重循環程序執行時,外層循環每執行一次,內層循環都需要循環執行多次。例如:for(a=1;a<=10;a++){for(b=0;b<=5;b++)
……}外循環執行了10次,內循環執行6次循環正常結束時,內循環執行了10×6=60次例4.4:輸入一行字符,分別統計其中字母、空格、數字和其他字符的個數。(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:求數列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語句實例例:判斷正整數m是否素數。
分析:素數的定義可以表達為----若m為素數,當且僅當它能分解為1和m的乘積。則可以得出判斷m是否為素數的一種方法:讓m被2到sqrt(m)除,若m能被2~sqrt(m)
之中的任何一個整數整除,則m不為素數;否則m為素數。程序如下:for語句-實例#include”math.h”/*判斷正整數m是否素數*/
main(){inti,m,k;printf(“請輸入正整數m:”);scanf(“%d”,&m);k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0){printf(“%d不是素數”,m);break;}if(i>=k+1)printf(“%d是素數”,m);}例:求水仙花數。如果一個三位數的個位數、十位數、和百位數的立方和等于該數自身,則稱該數為水仙花數。分析:一個三位數
個、十、百位數
循環結構(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:打印出以下圖形。
************************
*
程序如下:循環結構(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”);}循環結構(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”);}}循環結構(for語句)
********
*
上機中的一些問題1、循環的嵌套。例: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、按一定格式輸出某種圖形或結果。例:打印九九乘法表關鍵的問題是:學會分析數據間的聯系和規律,采用適當的控制結構,及輸出格式(%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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 管道工程未來市場需求演變趨勢與挑戰預測考核試卷
- 木結構建筑的智能家居系統集成考核試卷
- 糧食倉儲企業綠色經濟企業文化建設考核試卷
- 帶式輸送機設計
- 秋游活動方案
- 《幼兒繪畫秋天》課件
- 2025年公共營養師之二級營養師考前沖刺模擬試卷A卷含答案
- 中學生課前三分安全教育
- 蛋糕促銷活動方案
- 小學一年級文明就餐教育
- 解析:湖北省十一校2024-2025學年高三第二次聯考數學試卷(原卷版)
- 2024年江蘇省常州外國語學校中考一模語文試題(含答案)
- 畢業設計(論文)-可調節辦公椅分析與設計
- 2025年全球及中國潛孔鉆機行業發展現狀調研及投資前景分析報告
- 多模態數據交互式可視化-全面剖析
- 門診外配處方管理制度
- 中國國際大學生創新大賽(2025)職教賽道重點培育項目申報表
- 2025年骨干教師復試試題及答案
- 統計學-形考任務3-國開-參考資料
- 人要有自信+課件-+2024-2025學年統編版道德與法治七年級下冊
- (二模)新疆維吾爾自治區2025年普通高考第二次適應性檢測 英語試卷(含答案詳解)
評論
0/150
提交評論