版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第章4循環(huán)結(jié)構(gòu)程序設計C語言主要提供了4種循環(huán)語句,包括while語句、do-while語句、for語句以及if和goto語句構(gòu)成的循環(huán)。雖然各循環(huán)語句的格式不同,關鍵字不同,對循環(huán)條件判斷的先后順序不同,循環(huán)次數(shù)是否固定也有所不同,但循環(huán)控制是它們的共同點,都是由循環(huán)條件判斷和循環(huán)體兩部分組成,相互之間也可以進行轉(zhuǎn)換。—2—4.1while循環(huán)4.2do-while循環(huán)4.3for循環(huán)目錄CONTENTS4.4循環(huán)嵌套4.5goto語句4.6其他循環(huán)控制語句PARTwhile循環(huán)4.14.1while循環(huán)while循環(huán)語句的一般形式為:while(表達式)語句;/*循環(huán)體*/while循環(huán)—5—4.1while循環(huán)圓括號內(nèi)的表達式是控制表達式,語句是循環(huán)體,循環(huán)體可以是一條簡單的語句,也可以是多條語句組成的復合語句(用花括號括起來)。其執(zhí)行流程如右圖所示。語句表達式非00while循環(huán)語句的執(zhí)行流程—6—4.1while循環(huán)執(zhí)行該語句時,先計算表達式的值,如果它為真,則執(zhí)行循環(huán)體;接著再次判定表達式的值,如果它仍為真,繼續(xù)執(zhí)行循環(huán)體,依此類推,直到表達式的值為假結(jié)束循環(huán),執(zhí)行while語句后的下一條語句?!?—4.1while循環(huán)【例4.1】計算從1到100的和。#include<stdio.h>intmain(){inti,sum;sum=0;i=1;while(i<=100){/*定義變量*//*賦初值*//*循環(huán),當i>100時結(jié)束*/sum=sum+i;i=i+1;/*求和,將結(jié)果放入sum中*//*循環(huán)控制變量i加1*/}printf("1+2+3+...+99+100=%d",sum);return0;/*輸出sum的值*/}—8—4.1while循環(huán)程序運行的結(jié)果為:1+2+3+…+99+100=5050(1)變量初始化描述要完整、準確。(2)在循環(huán)體中應有使循環(huán)趨向于結(jié)束的語句。注意—9—4.1while循環(huán)【例4.2】統(tǒng)計從鍵盤輸入一行字符的個數(shù)。#include<stdio.h>intmain(){intn=0;printf("inputastring:\n");while(getchar()!='\n')/*初始化變量n*//*輸出提示信息*//*循環(huán)輸入字符,當輸入回車時結(jié)束*//*n自加1*//*輸出n的值*/n++;printf("%d",n);return0;}程序運行的結(jié)果為:inputastring:abcdef6—10—4.1while循環(huán)【例4.3】輸出1~10中各個數(shù)的平方。#include<stdio.h>intmain(){intn=10;while(n){/*初始化變量*//*當n不為0時循環(huán)*/printf("%d",n*n);n--;/*輸出n*n的值*//*n自減1*/}return0;}本例程序?qū)?zhí)行10次循環(huán),每執(zhí)行一次,n值減1。循環(huán)體輸出表達式n*n的值。程序運行的結(jié)果為:100816449362516941—11—4.1while循環(huán)【例4.4】使用格里高利公式求π的近似值,要求精確到最后一項的絕對值小于10-4。提示格里高利公式求π:π/4=1-1/3+1/5-1/7+…#include<stdio.h>#include<math.h>intmain(){intdenominator=1,flag=1;doubleitem=1.0,pi=0;while(fabs(item)>=0.0001){/*初始化變量*//*當精度大于0.0001時循環(huán)*/item=flag*1.0/denominator;pi=pi+item;flag=-flag;/*計算每一項*//*累加*//*取反*/—12—4.1while循環(huán)denominator=denominator+2;/*底數(shù)加2*/}pi=pi*4;printf("pi=%f\n",pi);return0;/*求pi的值*//*輸出pi的值*/}本例題while循環(huán)將計算精度作為循環(huán)執(zhí)行條件,用flag變量作為正負標記。程序運行的結(jié)果為:pi=3.141793—13—PARTdo-while循環(huán)4.24.2do-while循環(huán)do-while語句的一般形式為:do語句;/*循環(huán)體*/while(表達式);do-while循環(huán)—15—4.2do-while循環(huán)這個循環(huán)與while循環(huán)的不同在于:它先執(zhí)行循環(huán)中的語句,然后再判斷表達式是否為真,如果為真則繼續(xù)循環(huán);如果為假,則終止循環(huán)。因此,do-while循環(huán)至少要執(zhí)行一次循環(huán)語句。其執(zhí)行過程如右圖所示。語句表達式非00do-while語句的執(zhí)行流程—16—4.2do-while循環(huán)【例4.5】求nn!123...。#include<stdio.h>intmain(){inti=1,s=1,n;printf("pleaseinputn:");scanf("%d",&n);do{/*定義及初始化變量*//*輸出提示語*//*輸入n的值*//*開始循環(huán)*/s=s*i;i++;/*計算階乘*//*i自加1*//*當i<=n成立時循環(huán)*//*輸出*/}while(i<=n);printf("%d!=%d\n",n,s);return0;}—17—4.2do-while循環(huán)程序運行的結(jié)果為:pleaseinputn:55!=120使用do-while循環(huán)語句時,如果循環(huán)體中有多條語句,必須采用復合語句的形式。do-while語句中,條件放在while后面的圓括號中,并且最后必須加上一個分號,這是很多初學者容易遺漏的。注意—18—4.2do-while循環(huán)while語句先進行循環(huán)條件的判斷,再決定是否執(zhí)行循環(huán)體;do-while語句則先執(zhí)行一次循環(huán)體,再進行循環(huán)條件的判斷決定是否繼續(xù)循環(huán)。do-while語句至少要執(zhí)行一次循環(huán)體,而while語句在第一次條件判斷不成立時,則一次循環(huán)體都不執(zhí)行?!?9—4.2do-while循環(huán)因此,如果用這兩種語句描述同一個循環(huán)功能時,當?shù)谝淮闻袛嘌h(huán)條件表達式成立時,兩種語句的執(zhí)行結(jié)果完全一致,只有在第一次判斷循環(huán)條件表達式不成立時,二者的執(zhí)行結(jié)果才可能出現(xiàn)不同。因此,在編程時,要注意do-while語句的至少執(zhí)行一次循環(huán)體的特點?!?0—4.2do-while循環(huán)【例4.6】統(tǒng)計一個整數(shù)的位數(shù)。#include<stdio.h>intmain(){intcount=0,number;printf("Enteranumber:");scanf("%d",&number);if(number<0)/*定義及初始化變量*//*輸出提示語*//*輸入整數(shù)*//*如果輸入的為負整數(shù)則取反*/number=-number;do{number=number/10;count++;/*number整除10,即去掉最低位*//*位數(shù)加1*//*number不為0時循環(huán)*//*輸出位數(shù)*/}while(number!=0);printf("Itcontains%ddigits.\n",count);return0;}—21—4.2do-while循環(huán)程序運行的結(jié)果為:Enteranumber:456Itcontains3digits.—22—PARTfor循環(huán)4.34.3for循環(huán)在C語言中,除了可以用while和do-while語句實現(xiàn)循環(huán)外,還可以用for語句實現(xiàn)循環(huán)。其一般形式為:for(表達式1;表達式2;表達式3)語句;/*循環(huán)體*/for循環(huán)—24—4.3for循環(huán)for循環(huán)語句的執(zhí)行流程,如右圖所示。求解表達式11先求解表達式1。表達式202然后求解表達式2,若其值為真(非0),則執(zhí)行for語句中指定的循環(huán)語句,然后執(zhí)行第(3)步;若其值為假(0),則結(jié)束循環(huán),轉(zhuǎn)到第(5)步。非0語句3求解表達式3。求解表達式34返回到第(2)步繼續(xù)執(zhí)行。for語句的下一個語句5循環(huán)結(jié)束,執(zhí)行for語句下面的語句。for循環(huán)語句的執(zhí)行流程—25—4.3for循環(huán)for語句將控制循環(huán)的主要操作集中在循環(huán)語句開頭的圓括號里。圓括號中的三個表達式的作用是:表達式1表達式2表達式3通常為關系表達式或邏輯表達式,用來判斷是否繼續(xù)循環(huán)。在每次執(zhí)行循環(huán)體前先執(zhí)行此表達式,決定是否繼續(xù)執(zhí)行循環(huán)。一般被稱為“步長”環(huán)變量的修改,該表達式是在每次循環(huán)體執(zhí)行完以后、下一次循環(huán)條件判斷之前執(zhí)行的,使循環(huán)變量經(jīng)過多次循環(huán)的累積而發(fā)生改變,最終因為不滿足循環(huán)條件退出循環(huán)。,用于循通常為賦值表達式,實現(xiàn)循環(huán)控制變量的初始化,只執(zhí)行一次。—26—4.3for循環(huán)【例4.7】編程計算1到49之內(nèi)的奇數(shù)和。#include<stdio.h>intmain(){intsum=0,n;for(n=1;n<=49;n+=2)/*定義及初始化變量*//*循環(huán),當n>49時結(jié)束,步長為2*//*累加*//*輸出結(jié)果*/sum=sum+n;printf("sum=%d",sum);return0;}程序運行的結(jié)果為:sum=625—27—4.3for循環(huán)可將for循環(huán)語句改寫為如下的while循環(huán)形式:表達式1;while(表達式2){語句;表達式3;}例如:for(i=1;i<=100;i++)sum=sum+i;相當于:i=1;while(i<=100){sum=sum+i;i++;}—28—4.3for循環(huán)因此,可以將例4.7用while語句進行改寫如下:#include<stdio.h>intmain(){intsum=0,n;n=1;while(n<=49){/*定義及初始化變量*//*n的初值為1*//*循環(huán),當n>49時結(jié)束*/sum=sum+n;n+=2;/*累加*//*步長為2*/}printf("sum=%d",sum);return0;/*輸出結(jié)果*/}—29—4.3for循環(huán)使用for循環(huán)語句時,我們必須注意以下幾個問題:for循環(huán)中的“表達式1”“表達式2”和“表達式3”都是可選項,即可以缺省,但表達式之間的分號“;”絕對不能缺省。省略“表達式1”,表示不對循環(huán)控制變量賦初值。0102—30—4.3for循環(huán)例如:省略“表達式2”,表示不用判斷循環(huán)條件是否成立,循環(huán)條件總是滿足的,則如果不做其他處理,便成了死循環(huán)。for(i=1;;i++)sum=sum+i;相當于:03i=1;while(1){sum=sum+i;i++;}—31—4.3for循環(huán)例如:省略“表達式3”,則不對循環(huán)控制變量進行操作,這時可在循環(huán)體中加入修改循環(huán)控制變量的語句。for(i=1;i<=100;){04sum=sum+i;i++;}—32—4.3for循環(huán)例如:for(;;)05省略3個表達式。相當于:while(1)—33—4.3for循環(huán)表達式1和表達式3可以是一個簡單的表達式,也可以是逗號表達式,即包含一個以上的簡單表達式,中間用逗號間隔。例如:06for(i=0,j=100;i<=100;i++,jk=i+j;--)—34—4.3for循環(huán)【例4.8】含有逗號表達式的for語句。#include<stdio.h>intmain(){inti,j;for(i=1,j=1;i<=10||j<30;i++,j+=4)/*定義變量*//*循環(huán)判斷*//*輸出i*j的值*/printf("%d",i*j);return0;}程序運行的結(jié)果為:110275285126175232297370—35—4.3for循環(huán)表達式2一般是關系表達式或邏輯表達式,但也可以是數(shù)值表達式或字符表達式,只要其值非零,就執(zhí)行循環(huán)體。07—36—4.3for循環(huán)【例4.9】將用戶輸入的字符全部顯示出來,直到用戶輸入回車為止。#include<stdio.h>intmain(){charc;for(;(c=getchar())!='\n';)/*定義變量*//*當輸入不是回車時循環(huán)*/printf("%c",c);/*輸出字符c*/return0;}程序運行的結(jié)果為:asdfghjkl,123asdfghjkl,123—37—PART循環(huán)嵌套4.44.4循環(huán)嵌套一個循環(huán)語句的循環(huán)體內(nèi)包含另一個完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。嵌在循環(huán)體內(nèi)的循環(huán)稱為內(nèi)循環(huán),嵌有內(nèi)循環(huán)的循環(huán)稱為外循環(huán)。內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多重循環(huán)?!?9—2do-while循環(huán)number=number/10;循環(huán)體包括整個內(nèi)循環(huán)及退出內(nèi)循環(huán)后執(zhí)行2*1=22*2=4循環(huán)體包括整個內(nèi)循環(huán)及退出內(nèi)循環(huán)后執(zhí)行函數(shù)的內(nèi)容將會在第5章進行介紹,在此對其簡loop:if(i>=1)#include<stdio.很多初學者容易遺漏的。當用戶輸入編號1~4時,顯示相應通常為關系表達式或邏輯通常為賦值表達式,實現(xiàn)輸入其他編號,顯示價格為0。通常為賦值表達式,實現(xiàn)編程計算1到49之內(nèi)的奇數(shù)和。4.4循環(huán)嵌套【例4.10】打印九九乘法表。程序可用for循環(huán)的嵌套來實現(xiàn),用外循環(huán)控制被乘數(shù)i的變化,用內(nèi)循環(huán)控制乘數(shù)j的變化,內(nèi)循環(huán)的循環(huán)體計算i*j并輸出結(jié)果。外循環(huán)的循環(huán)體包括整個內(nèi)循環(huán)及退出內(nèi)循環(huán)后執(zhí)行的“printf("\n");”語句?!?0—4.4循環(huán)嵌套#include<stdio.h>intmain(){inti,j;for(i=1;i<=9;i++){/*定義變量*//*外循環(huán)控制被乘數(shù)*/for(j=1;j<=9;j++)/*內(nèi)循環(huán)控制乘數(shù)*//*輸出結(jié)果*//*結(jié)束一個內(nèi)循環(huán)后輸出一個回車*/printf("%d*%d=%d",i,j,i*j);printf("\n");}return0;}程序運行的結(jié)果為:1*1=11*2=21*3=31*4=41*5=51*6=61*7=71*8=81*9=92*1=22*2=42*3=62*4=82*5=102*6=122*7=142*8=162*9=18…9*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81—41—4.4循環(huán)嵌套上述程序中,輸出了很多多余項,可以通過修改程序去掉這些多余項,具體代碼如下:#include<stdio.h>intmain(){inti,j;for(i=1;i<=9;i++){/*定義變量*//*外循環(huán)控制被乘數(shù)*/for(j=1;j<=i;j++)/*內(nèi)循環(huán)控制乘數(shù),乘數(shù)小于等于被乘數(shù)*/printf("%d*%d=%d",i,j,i*j);/*輸出結(jié)果*//*結(jié)束一個內(nèi)循環(huán)后輸出一個回車*/printf("\n");}return0;}—42—4.4循環(huán)嵌套程序執(zhí)行結(jié)果為:1*1=12*1=22*2=49*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81—43—4.4循環(huán)嵌套循環(huán)嵌套時應注意以下問題:01020304or循環(huán)、while循環(huán)和do-while循環(huán)可以相互嵌套,無論如何嵌套,都必須滿足內(nèi)循環(huán)完整地包含在外循環(huán)中,不能形成循環(huán)的交叉。嵌套循環(huán)的層數(shù)沒有限制,但嵌套的層數(shù)太多,會消耗大量的內(nèi)存空間,程序的可讀性將變差。循環(huán)嵌套時,內(nèi)外層循環(huán)不能使用相同的循環(huán)變量。為了使嵌套的層次關系清晰明了,易于閱讀和糾錯,建議采用縮進格式書寫程序?!?4—PARTgoto語句4.54.5goto語句goto語句是無條件轉(zhuǎn)移語句,使用它可以使程序跳轉(zhuǎn)到函數(shù)中任何有標號的語句處。標號是放置在語句開始處的標識符,并以一個冒號“:”作為后綴,其一般形式為:標識符:語句;goto語句的一般形式為:goto標識符;通常goto語句與if條件語句連用,當滿足某一條件時,程序跳到標號處運行?!?6—4.5goto語句【例4.11】用if語句和goto語句構(gòu)成循環(huán),求5!。#include<stdio.h>intmain(){inti=5,result=1;/*初始化變量*//*若i>=1求階乘*/loop:if(i>=1){result*=i;i--;gotoloop;/*求乘積*//*i自減1*//*轉(zhuǎn)向loop*/}printf("5!=%d\n",result);return0;/*輸出結(jié)果*/}—47—4.5goto語句程序運行的結(jié)果為:5!=120(1)goto語句的跳轉(zhuǎn)只能在函數(shù)內(nèi)部,不能在不同的函數(shù)之間進行。函數(shù)的內(nèi)容將會在第5章進行介紹,在此對其簡單了解即可。(2)goto語句在早期編程語言中很常見,但在現(xiàn)在的C語言編程中卻很少用到它了,這是因為它的大量使用會破壞程序的結(jié)構(gòu)化,使程序的流程控制混亂,可讀性降低,調(diào)試困難。提示—48—PART其他循環(huán)控制語句4.64.6其他循環(huán)控制語句4.6.1break語句在幾種循環(huán)結(jié)構(gòu)中,主要是在循環(huán)次數(shù)不能預先確定的情況下使用break語句,在循環(huán)體中增加一個分支結(jié)構(gòu),當某個條件成立時,由break語句退出循環(huán)體,從而結(jié)束循環(huán)過程。其一般形式為:break;—50—4.6其他循環(huán)控制語句4.6.1break語句【例4.12】求300以內(nèi)能被19整除的最大數(shù)。#include<stdio.h>intmain(){intx;for(x=300;x>=1;x--)/*循環(huán)*/if(x%19==0)break;/*當x能被19整除時跳出循環(huán)*//*輸出x的值*/printf("x=%d\n",x);return0;}在for語句中,當x能被19整除時,執(zhí)行語句“break;”結(jié)束for循環(huán)語句;否則,進入下一次循環(huán)。程序運行結(jié)果為:x=285—51—4.6其他循環(huán)控制語句4.6.1break語句(1)break語句不能用于循環(huán)語句和switch語句之外的其他語句。提示(2)在多重循環(huán)的情況下,使用break語句時,僅退出包含break語句的那層循環(huán)體?!?2—4.6其他循環(huán)控制語句4.6.1break語句【例4.13】假設自動售貨機出售4種商品,薯片、爆米花、巧克力和可樂,售價分別是每份3.0,2.5,4.0和3.5元。在屏幕上顯示以下菜單,用戶可以連續(xù)查詢商品的價格,當查詢次數(shù)超過5次時,自動退出查詢;不到5次時,用戶可以選擇退出。當用戶輸入編號1~4時,顯示相應商品的價格;輸入0,退出查詢;輸入其他編號,顯示價格為0。[1]Selectcrisps[2]Selectpopcorn[3]Selectchocolate[4]Selectcola[0]Exit—53—4.6其他循環(huán)控制語句4.6.1break語句#include<stdio.h>intmain(){intchoice,i;doubleprice;for(i=1;i<=5;i++){/*定義變量*//*循環(huán)5次*/printf("[1]Selectcrisps\n");printf("[2]Selectpopcorn\n");printf("[3]Selectchocolate\n");printf("[4]Selectcola\n");printf("[0]Exit\n");printf("Enterchoice:");scanf("%d",&choice);if(choice==0)break;/*輸出提示信息*//*輸入數(shù)據(jù)*//*當輸入為0時跳出循環(huán)*/—54—4.6其他循環(huán)控制語句4.6.1break語句switch(choice)/*根據(jù)輸入的數(shù)值決定price的取值*/{case1:price=3.0;break;case2:price=2.5;break;case3:price=4.0;break;case4:price=3.5;break;default:price=0.0;break;}printf("price=%0.1f\n",price);/*輸出price的值*/}printf("Thanks\n");return0;/*輸出提示信息*/}—55—4.6其他循環(huán)控制語句4.6.1break語句程序運行的結(jié)果為:[1]Selectcrisps[2]Selectpopcorn[3]Selectchocolate[4]Selectcola[0]ExitEnterchoice:1price=3.0[1]Selectcrisps[2]Selectpopcorn[3]Selectchocolate[4]Selectcola[0]ExitEnterchoice:0Thanks—56—4.6其他循環(huán)控制語句4.6.1break語句【例4.14】輸入10個字符,分別統(tǒng)計出其中空格或回車、數(shù)字和其他字符的個數(shù)。#include<stdio.h>intmain(){intblank=0,digit=0,i,other=0;charch;printf("Enter10characters:");for(i=1;i<=10;i++){/*初始化變量*//*輸出提示信息*//*循環(huán)10次*//*輸入一個字符*//*判斷字符*/ch=getchar();switch(ch){case'':case'\n':blank++;break;case'0':case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':digit++;break;/*如果為空格或回車,blank自加1*//*計算數(shù)字的個數(shù)*/—57—4.6其他循環(huán)控制語句4.6.1break語句default:other++;break;/*計算其他字符的個數(shù)*/}}printf("blank=%d,digit=%d,other=%d\n",b
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐飲臨時試用合同范例
- 公司管理協(xié)議合同范例
- 電子勞動合同范例
- 策劃 營銷合同范例
- 餐飲業(yè)態(tài)合同范例
- 工裝石材拆除合同范例
- 2025年昭通下載貨運從業(yè)資格證模擬考試
- 電工技術及實訓模考試題與參考答案
- 美術基礎練習題(附參考答案)
- 互助合作項目協(xié)議書
- 化療后胃腸道反應護理
- 山西省2024-2025學年九年級上學期11月期中考試化學試題
- 商業(yè)街招商運營年終總結(jié)
- 家庭年度盤點模板
- 河南省鄭州市2023-2024學年高二上學期期末考試 數(shù)學 含答案
- 2024年男方因賭博離婚協(xié)議書
- 2024年資格考試-WSET二級認證考試近5年真題集錦(頻考類試題)帶答案
- 部編版五年級上冊道德與法治期末測試卷含答案精練
- 統(tǒng)編版(2024年新版)七年級上冊歷史期末復習課件
- 零工市場(驛站)運營管理 投標方案(技術方案)
- 無線傳感器網(wǎng)絡技術與應用 第2版習題答案
評論
0/150
提交評論