




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第4章循環結構
C語言程序設計循環結構是指在給定條件(或表達式)成立時,反復執行某些程序語句或某個程序段,反復執行的程序段稱為循環體。C語言提供的三種循環語句(for語句、while語句和do…while語句)實現循環結構。主要內容
while循環
1do…while循環
2while語句和用do-while語句的比較
3for循環
45循環嵌套
4.1while循環問題:顯示“我要學C編程”5遍.分析程序1程序24while語句的一般形式while(表達式)
語句塊1;注意:控制循環的三個表達式執行過程:先判斷表達式的值,當表達式的值為真時,執行循環體一次,再判斷表達式的值,并重復上述操作過程,直到表達式的值為假時才結束循環,然后轉去執行循環的后繼語句。
5
4.1while循環
問題:顯示整數:1、3、5、7、...、15分析與設計
i=13=1+2i=i+25=3+2i=i+27=5+2i=i+2............15=13+2i=i+26
4.2do…while循環
問題:求和1+2+3+...+100,并輸出。4.2.1分析與設計sum=0i=1sum=sum+1sum=sum+ii++sum=sum+2sum=sum+ii++sum=sum+3sum=sum+ii++......sum=sum+100sum=sum+ii++#include"stdio.h"voidmain(){inti=1,sum=0;do
{
sum=sum+i;
++i;
}while(i<=100);printf("sum=%d\n",sum);}84.1.3實戰演練1.譯密碼。為使電文保密,往往按一定規律將其轉換成密碼,收報人再按約定的規律將其譯回原文。可以按以下的規律將電文變成密碼:將字母A變成字母E,a變成e,即變成其后的第4個字母,W變成A,X變成B,Y變成C,Z變成D。字母按上述規律轉換,非字母字符不變。2.計算1~20之間偶數之和。9
4.2.2do-while循環
do-while語句的一般形式為:
do
語句;while(表達式);執行過程:先執行一次指定的循環體語句,然后判別表達式,當表達式的值為非零(“真”)時,返回重新執行循環體語句,如此反復,直到表達式的值等于0為止,此時循環結束。
10例
輸入一個正整數,將其逆序輸出。例如,輸入12345,輸出54321。.12345/10=1234
分析:為了實現逆序輸出一個正整數,需要把該數按逆序拆開,然后輸出。在循環中要每次分離一位,分離方法是對10求余數。設x=12345,從低位開始分離,12345%10==5,為了能繼續使用求余運算分離下一位,需要改變x的值為12345/10==1234。重復上述操作:
1234%10==4;
1234/10==123;
123%10==3;
123/10==12;
12%10==2;
12/10==1;
1%10==1;
1/10==0;11當x最后變成0時,處理過程結束。經過歸納得到:(1)重復以下步驟:①x%10,分離一位。②x=x/10,為下一次分離做準備。(2)直到x==0循環結束。#include"stdio.h"voidmain(){intx;printf("輸入x:");scanf("%d",&x);/*循環開始,循環執行的條件為x!=0*/do{printf("%d",x%10);x=x/10;/*每次循環x/10*/}while(x!=0);}12
4.2.3while和do-while語句的比較
一般情況下,用while語句和用do-while語句處理同一問題時,若二者的循環體部分是一樣的,它們的結果也一樣。但是如果while后面的表達式一開始就為假(0值)時,兩種循環的結果是不同的。
13voidmain(){intsum=0,i;printf("請輸入i:");scanf("%d",&i);while(i<=10){sum=sum+i;i++;}printf("sum=%d\n",sum);}運行結果如下:請輸入i:1/*用戶輸入*/sum=55請輸入i:11/*用戶輸入*/sum=0voidmain(){intsum=0,i;printf("請輸入i:");scanf("%d",&i);do{sum=sum+i;i++;}while(i<=10);printf("sum=%d\n",sum);}運行結果如下:請輸入i:1/*用戶輸入*/sum=55請輸入i:11/*用戶輸入*/sum=11從兩段程序的運行結果可以看出:當輸入i=1時,sum=55,while語句和用do-while語句的運行結果相同;但當輸入i=11時,也就是當第一次執行循環就不滿足循環條件,while語句和用do-while語句的運行結果不同,因此對于do-while語句,先執行循環體,再判斷是否滿足循環條件,即不管是否滿足循環條件均執行一次循環體。15例
用格里高利公式求圓周率的近似值,要求精確到最后一項的絕對值小于10-4。分析:這是一個求累加和的問題。循環的算式為:sum=sum+第i項。第i項用變量item表示。本題沒有顯式地給出循環次數,只是提出了精度要求。在反復計算累加的過程中,一旦某一項的絕對值小于10-4(即|item|<10-4),就達到了給定的精度,計算終止。這說明精度要求實際上給出了循環的結束條件,還需要將其轉換為循環條件|item|≥10-4,換句話說,當|item|≥10-4時,循環累加item的值,直到|item|<10-4為止。16#include<stdio.h>main(){intflag=1,denominator=1;floatitem=1.0,pi=0;while(fabs(item)>=0.0001){item=flag*1.0/denominator; pi=pi+item; flag=-flag; denominator=denominator+2;}pi=pi*4;printf("pi=%.4f\n",pi);}17
4.2.4實戰演練
1.統計一個整數的位數。從鍵盤輸入一個整數,統計該數的位數。例如,輸入12345,輸出5;輸入-99,輸出2。18
4.3for語句
問題:找出輸入的5個整型數中的最大值。4.3.1分析與設計如輸入數據:1,2,3,4,5方法是先設置第一個數為暫時最大,然后逐一比較和交換。
max<i,max=i19例
找最大數#include<stdio.h>main(){intmax,x,i;scanf(“%d”,&max);for(i=1;i<5;i++){scanf(“%d”,&x);if(x>max)max=x;}printf(“%d”,max);}20
4.3.2for循環
for語句的一般形式為:for(表達式1;表達式2;表達式3)語句;for(初始表達式;結束表達式;修改表達式)語句;
說明:表達式1:一般為賦值表達式,為循環控制變量賦初值。表達式2:一般為關系表達式或邏輯表達式,作為控制循環結束的條件。表達式3:一般為賦值表達式,為循環控制變量增量或減量。21for語句的執行過程(1)先求解表達式1。(2)求解表達式2,若其值為真(值為非0),則執行for語句中指定的內嵌語句,然后執行下面第(3)步。若為假(值為0),則結束循環,轉到第(5)步。(3)求解表達式3。(4)轉回上面第(2)步驟繼續執行。(5)循環結束,執行for語句下面的一個語句。22例
唱歌賽有7名評委評分.記分規則為:去掉一個最高分,去掉一個最低分,再算平均分。設按百分制計分,試設計一個算分程序。方法:求出總和、最高分、最低分,然后從總和減去最高分和最低分23#include<stdio.h>main(){inti,sum=0,score,max=0,min=0;for(i=1;i<=7;i++){printf("請輸入第%d個評委的分數:",i);scanf("%d",&score);if(score>max)max=score;if(score<min)min=score;sum=sum+score;}average=(sum-max-min)/(n-2);printf("最高分:%d,最低分:%d平均分:%d\n",max,min,average);}24
4.3.4實戰演練
1.馬克思手稿里有一道有趣的數學問題:有30個人,其中有男人、女人和小孩,在一家飯館吃飯共花了50先令:每個男人花3先令,每個女人花2先令,每個小孩花1先令,問男人、女人和小孩各有幾人?2.有一對兔子,從出生后第三個月起每個月都生一對小兔子,小兔子長到第三個月后每月又生一對小兔子,假如兔子都不死,問20個月內每個月的兔子總數為多少?3.輸入一批學生的成績,找出最高分。25
4.4循環嵌套
輸出由“*”組成的5行5列的矩形,如圖4-6所示。#include"stdio.h"voidmain(){
inti,j;
for(i=1;i<=5;i++)
{
for(j=1;j<=5;j++)
printf("*");
printf("\n");
}}27
4.4循環嵌套
在循環體內又包含另一個完整的循環結構稱為循環嵌套。內層循環中再包含其它循環結構,稱為多重循環嵌套。C語言中的三種循環語句(for、while、do…while)可以互相嵌套,構成所需的多重循環結構。注意:循環嵌套時,內層循環必須被完全包含于外層循環內,不允許循環結構交叉。for(;;){
…while(){
…
}
…}do{…for(;;){
…
}
…}while(){…do{
…
}while();…}for(;;){…for(;;){
…
}…}28例
打印由“*”組成的三角形。(圖形如程序的運行結果所示)分析:該程序要輸出5行,所以外層循環和例相同,但每行的列數不同。每行的列數比上一行多一個,符合外層循環i的變化規律,可寫為:for(i=1;j<=i;j++),完整的程序如下:#include"stdio.h"voidmain(){
inti,j;
for(i=1;i<=5;i++)
{
for(j=1;j<=i;j++)
printf("*");
printf("\n");}}雙重循環的執行過程i=1時j=1輸出1個*并換行i=2時j=1,2輸出2個*并換行i=3時j=1,2,3輸出3個*并換行i=4時j=1,2,3,4輸出4個*并換行i=5時j=1,2,3,4,5輸出5個*并換行29
4.4.4實戰演練
1.計算1!+2!+3!+…+100!。要求使用嵌套循環。2.三對情侶參加婚禮,三個新郎為A,B,C,三個新娘為X,Y,Z,有人不知道誰和誰結婚,于是詢問了六位新人中的三位,但聽到的回答是這樣的:A說他將和X結婚;X說他的未婚夫是C;C說他將和Z結婚,這人聽后知道他們在開玩笑,全是假話,請編程找出誰將和誰結婚。304.5break和continue語句從鍵盤上連續輸入字符,并統計出其中非字母字符的個數,輸入“*”程序結束。分析與設計:題目要求統計非字母字符個數,當輸入的字符為字母時,將不進行計數,因此要跳過count++;這一語句,開始下一輪的循環操作,用continue語句實現跳過循環體中continue后面的語句,直接開始下一次循環體的執行。判斷字符是否為字母的邏輯表達式為:ch>=’A’&&ch<=’Z’||ch>=’a’&&ch<=’z’。當輸入的字符為“*”時要結束程序的運行,因此用break語句跳出整個循環過程。#include"stdio.h"voidmain(){charch;intcount=0;while(1){ch=getchar();if(ch>=’A’&&ch<=’Z’||ch>=’a’&&ch<=’z’)continue;if(ch=='*')break;count++;}printf("count=%d\n",count);}32
4.5.2break語句
break語句的一般形式為:
break;執行過程:終止switch語句或循環語句的執行,跳出當前break所在的控制結構,轉去執行后繼語句。33例
計算s=1+2+3…+i,直到累加到s大于5000為止,并給出s和i的值。#include"stdio.h"voidmain(){inti=1,s=0;while(1){s=s+i;if(s>5000)break;i++;}printf("s=%d,i=%d",s,i);}34break語句的使用說明:只
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年的設備租賃合同范本
- 2025年勞動合同制度的革新及其影響
- 《時尚潮流女鞋深度解析》課件
- 2025水電裝潢合同(李)
- 《社團組織創建流程》課件
- 中小學校長在教師會議上講話:教育者要“作為、善為、樂為”-
- 供應鏈優化與整合實施方案
- 2025如何制定合同:合同草案審查指南制定說明
- 2025標準版商品房買賣合同
- 2025年南寧貨運駕駛從業資格考試題庫模擬考試
- 山東省濟寧市鄒城市2024-2025學年高一下學期4月期中考試政治試題(含答案)
- 2025年浙江省杭州市蕭山區中考一模數學模擬試卷(含詳解)
- 化工企業安全演練計劃
- 2025年03月國家糧食和物資儲備局直屬聯系單位(60名)筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 2025年北師大版中考生物必背考點復習提綱
- 小學創建“五好”學校關工委實施方案
- 2022可調節負荷并網運行與控制技術規范+第4部分-數據模型與存儲
- DB15T 3516-2024野生動物救護站建設規范
- 2025-2030中國內聯pH傳感器行業市場發展趨勢與前景展望戰略研究報告
- 創傷現場急救課件
- 2025年云南德宏州宏康投資開發有限公司招聘筆試參考題庫含答案解析
評論
0/150
提交評論