




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
打印輸出如以下圖案
************************************************************************************************************************************************main(){printf(“******************\n”);printf(“******************\n”);printf(“******************\n”);printf(“******************\n”);printf(“******************\n”);printf(“******************\n”);printf(“******************\n”);printf(“******************\n”);}main(){inti;for(i=1;i<=8;i++)printf(“******************\n”);}什么時(shí)候用循環(huán):就是在給定的條件成立時(shí)反復(fù)執(zhí)行某一程序段(做相似或相同的動(dòng)作
);被反復(fù)執(zhí)行的程序段稱為循環(huán)體。循環(huán)3要素:1、循環(huán)起始條件;i=12、循環(huán)推動(dòng)條件;i++3、循環(huán)結(jié)束條件;i<=82.2.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)while語(yǔ)句do-while語(yǔ)句for語(yǔ)句循環(huán)嵌套幾種循環(huán)的比較1while語(yǔ)句1、格式:
while(表達(dá)式)
循環(huán)體;
2、功能:首先計(jì)算表達(dá)式的值,假設(shè)表達(dá)式成立〔非0〕,執(zhí)行一遍循環(huán)體,再判斷表達(dá)式,假設(shè)成立再執(zhí)行循環(huán)體……當(dāng)表達(dá)式不成立〔其值為0〕時(shí)退出循環(huán),跳轉(zhuǎn)到循環(huán)體之后的語(yǔ)句執(zhí)行。表達(dá)式成立嗎?循環(huán)體真(非0)假(0)3、特點(diǎn):先判斷表達(dá)式,然后執(zhí)行循環(huán)體。假設(shè)表達(dá)式一開(kāi)始就不成立,那么循環(huán)體一次也不執(zhí)行。4、注意:(1)、循環(huán)局部為多個(gè)語(yǔ)句時(shí),必須用大括號(hào)構(gòu)成復(fù)合語(yǔ)句;(2)、循環(huán)體中應(yīng)有語(yǔ)句修改控制條件(循環(huán)3要素要在循環(huán)結(jié)構(gòu)中表達(dá)出來(lái))語(yǔ)句中應(yīng)有使表達(dá)式=0的語(yǔ)句。否那么會(huì)出現(xiàn)無(wú)限循環(huán)–––"死"循環(huán)。6注:
while后面的語(yǔ)句一般為復(fù)合語(yǔ)句,即:加{}5、例6-1:計(jì)算sum=1+2+3+…+100程序見(jiàn)課本53頁(yè)代碼:D:\教學(xué)\教學(xué)材料\c語(yǔ)言\理論\ppt\c教案修改稿---教學(xué)用稿\課本53頁(yè)-例2-13.txt注意:分析循環(huán)3個(gè)要素。例6-2寫一個(gè)程序,輸入一個(gè)班學(xué)生的成績(jī),求全班的平均成績(jī)。分析:輸入成績(jī)、計(jì)算平均成績(jī)都是一個(gè)重復(fù)性過(guò)程,因此可以用循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)。在這里,我們并不知有多少個(gè)學(xué)生,也就是說(shuō)不知循環(huán)到底有多少次,但考慮到成績(jī)沒(méi)有負(fù)數(shù),那么可把循環(huán)推動(dòng)要素定為:每當(dāng)輸入的分?jǐn)?shù)大于等于0時(shí)就繼續(xù)輸入成績(jī);而循環(huán)結(jié)束要素為:輸入的分?jǐn)?shù)小于0時(shí)就停止輸入。解題步驟如下: (1)輸入一個(gè)分?jǐn)?shù) (2)當(dāng)“分?jǐn)?shù)>=0”時(shí),做以下工作: ①累計(jì)總分; ②人數(shù)加一; ③輸入下一分?jǐn)?shù); (3)重復(fù)第(2)步,直到“分?jǐn)?shù)<0”。例6-2參考程序:#include<stdio.h>main(){floatscore,average=0; /*average存放平均成績(jī),初值為0*/intn=0; /*n用來(lái)存放學(xué)生數(shù),初值為0*/scanf(″%f″,&score); /*輸入第一個(gè)學(xué)生的分?jǐn)?shù)*/while(score>=0){average+=score; /*average先用來(lái)放總分*/n++; /*學(xué)生數(shù)增一*/scanf(″%f″,&score);/*輸入下一個(gè)學(xué)生的分?jǐn)?shù)/}if(n!=0)average=average/n; /*求平均成績(jī),average*/printf(″%6.2f″,average); /*輸出平均成績(jī)average,保存兩位小數(shù)*/} 在使用while語(yǔ)句的時(shí)候,我們要注意以下問(wèn)題:(1)循環(huán)體如果包含一個(gè)以上的語(yǔ)句,應(yīng)該用花括號(hào)括起來(lái),以復(fù)合語(yǔ)句的形式出現(xiàn)。如果不加花括號(hào),那么while語(yǔ)句的范圍只到while后面的第一個(gè)分號(hào)處。比方上例中,while語(yǔ)句中如無(wú)花括號(hào),那么while語(yǔ)句范圍只到“average+=score;”。(2)在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語(yǔ)句。比方上例中,循環(huán)結(jié)束的條件是“score>=0”,那么當(dāng)我們把這個(gè)班的成績(jī)?nèi)枯斎胪旰?,一定要輸入一個(gè)負(fù)數(shù),才能使程序往下執(zhí)行。(3)循環(huán)體語(yǔ)句有可能一次也不執(zhí)行。比方說(shuō)上例中,當(dāng)?shù)谝淮屋斎氲姆謹(jǐn)?shù)就為負(fù)數(shù)時(shí),那么循環(huán)體一次也不執(zhí)行。2do-while語(yǔ)句1、格式:
do循環(huán)體;
while(表達(dá)式);
2、功能:先執(zhí)行一遍循環(huán)體,再判斷表達(dá)式,當(dāng)表達(dá)式的值為非0〔真〕時(shí),返回重新執(zhí)行循環(huán)體;如此反復(fù),直到表達(dá)式的值為0〔假〕時(shí)退出循環(huán)。表達(dá)式成立嗎?循環(huán)體真(非0)假(0)3、特點(diǎn):先執(zhí)行循環(huán)體,后判斷循環(huán)條件〔表達(dá)式〕是否成立,即循環(huán)體至少執(zhí)行一次。4、推薦書(shū)寫格式:
do
{
……
}while(…);5、例6-3:計(jì)算sum=1+2+3+…+100見(jiàn)課本54頁(yè)對(duì)于同一個(gè)問(wèn)題既可以用while語(yǔ)句處理,也可以用do-while語(yǔ)句處理。do-while語(yǔ)句結(jié)構(gòu)可以轉(zhuǎn)換成while結(jié)構(gòu)。
do-while語(yǔ)句流程圖可以改寫為:表達(dá)式成立嗎?循環(huán)體真(非0)假(0)循環(huán)體語(yǔ)句可見(jiàn),do-while結(jié)構(gòu)是由一個(gè)語(yǔ)句加一個(gè)while結(jié)構(gòu)構(gòu)成的。一般情況下,用while語(yǔ)句和do-while語(yǔ)句處理同一問(wèn)題時(shí),假設(shè)二者的循環(huán)體一樣,那么結(jié)果也一樣。但是如果while后面的表達(dá)式一開(kāi)始就為假〔0〕時(shí),兩種循環(huán)的結(jié)果是不同的。例:計(jì)算:(見(jiàn)課本54-55頁(yè),分別用while和do-while實(shí)現(xiàn))結(jié)論:當(dāng)while后面的表達(dá)式的第一次的值為“真”時(shí),兩種循環(huán)的結(jié)果相同。否那么,二者結(jié)果不相同〔指二者具有相同的循環(huán)體的情況〕。例6-4:用do-while語(yǔ)句編寫例6-2:::程序如下:#include<stdio.h>main(){floatscore,average=0;intn=0;do{ /*不進(jìn)行判斷,先進(jìn)入循環(huán)*/scanf(″%f″,&score); /*輸入學(xué)生的分?jǐn)?shù)*/if(score>=0){average+=score;n++; }}while(score>=0);/*表達(dá)式為非0,那么繼續(xù)*/if(n!=0)average/=n;/*求平均成績(jī),average*/printf(″%6.2f″,average);/*輸出average*/例6-5編程序求1+3+5+7+9+…這樣的數(shù)之和。如果累加數(shù)大于750時(shí),那么程序終止并輸出結(jié)果。參考程序: main(){ inti=1,sum=0; while(sum<=750) {sum=sum+i;i=i+2; }printf("\n%d",sum); }
例6-6用do-while語(yǔ)句求1至1000之間滿足“用3除余2,用5除余3,用7除余2”的數(shù),且一行只打印五個(gè)數(shù)。 分析:判斷一個(gè)數(shù)被另一個(gè)數(shù)除,用取模運(yùn)算%。三個(gè)條件是“與”的關(guān)系。一行打印五個(gè)數(shù),可以通過(guò)計(jì)數(shù)到5再回車換行。 程序代碼如下:
#include<stdio.h> main() { inti=1,j=0;
do {if(i%3==2&&i%5==3&&i%7==2){printf(″%4d″,i);j=j+1;if(j%5==0)printf(″\n″);}i=i+1;}while(i<1000);}注意: 1、do-while語(yǔ)句的循環(huán)體語(yǔ)句至少要被執(zhí)行一次,因?yàn)樗沁M(jìn)入循環(huán)后再判別表達(dá)式。而while語(yǔ)句卻是首先判別表達(dá)式,如果表達(dá)式值為0,那么一次循環(huán)也不執(zhí)行。2、循環(huán)控制變量必須在循環(huán)體內(nèi)有所改變,才能使while和do-while語(yǔ)句的循環(huán)控制條件表達(dá)式的值不斷改變,直至循環(huán)結(jié)束。否那么會(huì)造成死循環(huán)。例如: i=1; while(i<=100) sum=sum+i; i++; 這個(gè)循環(huán)永遠(yuǎn)不會(huì)結(jié)束,因?yàn)椤癷++;”語(yǔ)句不屬于循環(huán)體中的語(yǔ)句,循環(huán)控制變量i沒(méi)有在循環(huán)體內(nèi)被改變。程序應(yīng)該作如下改變: i=1;
while(i<=100)
{
putchar(′*′); i++;
}
這條循環(huán)語(yǔ)句執(zhí)行的結(jié)果是輸出100個(gè)“*”。還可以將它改成do-while語(yǔ)句:
i=1;
do{
putchar(′*′); i++;
}while(i<=100); 大家可以看到,對(duì)于同一個(gè)問(wèn)題,既可以用while語(yǔ)句處理,也可以用do-while語(yǔ)句處理。那么,它們到底有什么區(qū)別呢? while語(yǔ)句與do…while語(yǔ)句的區(qū)別: 當(dāng)?shù)谝淮螆?zhí)行時(shí),假設(shè)表達(dá)式=0時(shí),那么while語(yǔ)句與dowhile有所不同,dowhile執(zhí)行一次后面的語(yǔ)句,而while不執(zhí)行。3for語(yǔ)句1、格式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)循環(huán)體;其中:表達(dá)式1規(guī)定循環(huán)控制變量的初始值
表達(dá)式2指出循環(huán)條件表達(dá)式
表達(dá)式3修改循環(huán)變量的值2、功能:①先求解表達(dá)式1,給循環(huán)控制變量賦初值②求解表達(dá)式2,假設(shè)為真〔非0〕,執(zhí)行循環(huán)體③求解表達(dá)式3,它改變了表達(dá)式2中的某個(gè)變量④返回②⑤直到條件為假〔0〕,退出循環(huán)表達(dá)式2成立嗎?求解表達(dá)式3真(非0)假(0)求解表達(dá)式1循環(huán)體語(yǔ)句for語(yǔ)句最易理解的形式:
for(循環(huán)控制變量賦初值;循環(huán)條件;循環(huán)變量增值)
循環(huán)體;分析:此題可用循環(huán)語(yǔ)句來(lái)編寫程序,循環(huán)控制變量i從1增加到100。設(shè)s的初值為0,那么循環(huán)體為: s=s+i; /*i=l,2,…,100*/程序:#include<stdio.h>main(){ints=0,i;for(i=l;i<100;i++)s=s+i; /*循環(huán)體語(yǔ)句*/printf(″s=%d″,s);}3、例6-7:計(jì)算sum=1+2+3+…+100 對(duì)于for循環(huán),有一點(diǎn)非常重要,即條件測(cè)試永遠(yuǎn)是在循環(huán)開(kāi)始時(shí)進(jìn)行,如果在循環(huán)開(kāi)始時(shí)條件為假,那么循環(huán)體語(yǔ)句就不會(huì)被執(zhí)行。如: inti=10; for(k=10;k!=i;k++)printf(″%d″,k); printf(″%d″,k); 在這個(gè)循環(huán)程序段中,循環(huán)開(kāi)始時(shí),由于i=k,所以根本不會(huì)執(zhí)行,正是由于條件表達(dá)式取值為假,循環(huán)體語(yǔ)句和循環(huán)的增量局部都不執(zhí)行,因此,k一直為10,最后屏幕上輸出的數(shù)字也是10。例6-8寫程序計(jì)算s=1-3+5-7…-99+101。 這個(gè)例子也可看成是數(shù)的累加,但與上面的例子稍有差異,就是相加的數(shù)一個(gè)為正數(shù),一個(gè)為負(fù)數(shù)。程序代碼如下:#include<stdio.h>main(){inti,t=1,sum=0,s;for(i=1;i<=101;i+=2){s=t*i;sum=sum+s;t=-t; /*正1,負(fù)1交叉*/}printf(″%d\n″,s);}{sum=sum+t*i;t=-t;}for語(yǔ)句與while語(yǔ)句的比較for語(yǔ)句等價(jià)于以下語(yǔ)句序列: 表達(dá)式1; while(表達(dá)式2) {語(yǔ)句; 表達(dá)式3; }相比之下,for語(yǔ)句顯得結(jié)構(gòu)整齊、緊湊、清晰。for(i=1;i<=100;i++)
sum=sum+i;i=1;while(i<=100)
{sum=sum+i;i++;}for語(yǔ)句的功能和執(zhí)行過(guò)程與while相似。在上例中,假設(shè)把給循環(huán)控制變量賦初值的工作放在語(yǔ)句之外,把循環(huán)變量的修改放在循環(huán)體內(nèi),那么跟while循環(huán)相同,所以for語(yǔ)句的一般形式可以用while表示成:表達(dá)式1;while(表達(dá)式2){語(yǔ)句序列;表達(dá)式3;}說(shuō)明:①、for語(yǔ)句的三個(gè)表達(dá)式都可以缺省,但兩個(gè)分號(hào)不能缺??;②、假設(shè)在for語(yǔ)句之前已經(jīng)對(duì)循環(huán)控制變量賦初值,那么表達(dá)式1可以缺省;例:i=1;for(;i<=100;i++)sum=sum+i;for(i=1;i<=100;i++)sum=sum+i;③、通常不缺省表達(dá)式2;有時(shí)缺省表達(dá)式2,即不判斷循環(huán)條件,循環(huán)將無(wú)終止的執(zhí)行,即認(rèn)為表達(dá)式2始終為真;在循環(huán)體內(nèi)用if和break控制循環(huán)結(jié)束。if(條件)break;for(i=1;;i++)sum=sum+i;i=1;while(1){sum=sum+i;i++;}i=1;for(;;i++){sum=sum+i;
if(i>101)break;}④、表達(dá)式3也可以缺省,但應(yīng)設(shè)法修改循環(huán)控制變量,保證程序正常結(jié)束。for(i=1;i<=100;){sum=sum+i;i++;}⑤、可以省略表達(dá)式1和表達(dá)式3,即只給循環(huán)條件。如:for(;i<=100;){sum=sum+i;i++;}while(i<=100){sum=sum+i;i++;}此時(shí),完全等同于while語(yǔ)句。⑥、3個(gè)表達(dá)式都可以省略,如:for(;;)
循環(huán)體;while(1)
循環(huán)體;將無(wú)終止的執(zhí)行循環(huán)。從語(yǔ)法上講是正確的,但一般沒(méi)有實(shí)際意義。for語(yǔ)句表達(dá)式的計(jì)算:①、for語(yǔ)句中的表達(dá)式1和表達(dá)式3可以由一個(gè)或多個(gè)賦值表達(dá)式組成,當(dāng)為多個(gè)表達(dá)式時(shí),各表達(dá)式之間要用逗號(hào)運(yùn)算符〔即組成逗號(hào)表達(dá)式〕。for(sum=0,i=1;i<=100;i++)sum=sum+i;for(i=0,j=100;i<=j;i++,j--)k=i+j;printf("i=%d,j=%d,k=%d\n",i,j,k);i=?j=?k=?#include"stdio.h"main(){inta,b,c;for(a=0,b=50;a<b;a++,b--)printf("a=%d,b=%d\n",a,b);c=a+b;printf("a=%d,b=%d,c=%d\n",a,b,c);}a=?b=?c=?②、for語(yǔ)句中的表達(dá)式1和表達(dá)式3通常與循環(huán)變量有關(guān),但也可以無(wú)關(guān)。eg411.c②、for語(yǔ)句中的表達(dá)式1和表達(dá)式3通常與循環(huán)變量有關(guān),但也可以無(wú)關(guān)。#include"stdio.h"main(){inti,sum;i=1;for(sum=0;i<=100;sum=sum+i)
i++;printf("sum=%d\n",sum);}i=?sum=?③、for語(yǔ)句中的表達(dá)式2通常為關(guān)系表達(dá)式或邏輯表達(dá)式,但也可以是數(shù)值或字符表達(dá)式,判斷時(shí),只要其值非0,就執(zhí)行循環(huán)體,為0那么退出循環(huán)。for(i=0;(ch=getchar())!='\n';i+=1)
;4循環(huán)嵌套一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)嵌套。內(nèi)層的循環(huán)中還可以嵌套循環(huán),構(gòu)成多重循環(huán)。
j=12345i=1*******************i=2
*******************i=3
*******************i=4
*******************
i=5
*******************i=6
*******************
i=7*******************main(){inti;for(i=1;i<8;i++)printf(“*******************\n”);}main(){inti,j;for(i=1;i<8;i++)
{for(j=1;j<20;j++)printf(“*”);printf(“\n”);}}三種循環(huán)可以相互嵌套。while(){······while(){······}
······}for(;;){······for(;;){······}
······}do{······do{······
}while();
······}while();while(){······for(;;){······}
······}for(;;){······do{······
}while();
······}while(){······do{······
}while();
······}例6-9:打印一張九九表。12436948121651015202561218243036714212835424981624324048566491827364554637281for(i=1;i<=9;i++)for(j=1;j<=;j++)iprintf("%4d",);i*jprintf("\n");{}eg414.c在設(shè)計(jì)循環(huán)嵌套時(shí)要注意:應(yīng)該“在一個(gè)循環(huán)體內(nèi)包含另一個(gè)完整的循環(huán)結(jié)構(gòu)”,不管嵌套次數(shù)多少,要遵守這個(gè)原那么。while(){············do{············
for(;;){············}············}while();
············}do{······
······
for(;;){······
······
}while();
······
······}①、C語(yǔ)言中的三種循環(huán)結(jié)構(gòu)都由表達(dá)式控制執(zhí)行一個(gè)循環(huán)體,一般情況下可以相互代替;②、while和do-while循環(huán),只在while后面指定循環(huán)條件;for循環(huán)可以在表達(dá)式3中包含使循環(huán)趨于結(jié)束的操作;③、用while和do-while循環(huán)時(shí),循環(huán)變量初始化的操作應(yīng)在while和do-while語(yǔ)句之前完成,而for語(yǔ)句可以在表達(dá)式1中實(shí)現(xiàn)循環(huán)變量的初始化;④、當(dāng)循環(huán)次數(shù)及控制條件要在程序運(yùn)行過(guò)程中確定時(shí),選用while和do-while語(yǔ)句;⑤、在初值、增量及控制條件明顯,或循環(huán)次數(shù)已經(jīng)給定的情況下,選用for循環(huán);⑥、在循環(huán)的執(zhí)行過(guò)程中,應(yīng)不斷的改變循環(huán)控制表達(dá)式的值,以便逐步形成使它為0的條件,否那么出現(xiàn)死循環(huán);⑦、三種循環(huán)可以相互嵌套,形成多重循環(huán),外循環(huán)可以包含多個(gè)或多重內(nèi)循環(huán),循環(huán)之間可以并列但不能相交,并列的循環(huán)控制變量可以同名,但嵌套的循環(huán)控制變量不能同名;⑧、不允許用其它的控制語(yǔ)句把程序流程從循環(huán)體外轉(zhuǎn)入循環(huán)體內(nèi),但必要時(shí)可以用break等語(yǔ)句把流程從循環(huán)體內(nèi)轉(zhuǎn)到循環(huán)體外。5其它語(yǔ)句1break語(yǔ)句2continue語(yǔ)句3
空語(yǔ)句1、格式:break;2、功能:在循環(huán)體或switch語(yǔ)句中,執(zhí)行到break語(yǔ)句時(shí),終止當(dāng)前語(yǔ)句的執(zhí)行,程序流程轉(zhuǎn)移到當(dāng)前循環(huán)語(yǔ)句或switch語(yǔ)句的后繼語(yǔ)句去執(zhí)行3、說(shuō)明:eg416.c①、假設(shè)是多重循環(huán),break只能使流程跳出離break最近的一層;②、break只用于switch語(yǔ)句和循環(huán)語(yǔ)句;4、例:計(jì)算r=1到r=10時(shí)的圓面積,直到面積大于100為止課本58頁(yè)例題:2-192-201break語(yǔ)句1、格式:continue;2、功能:在循環(huán)體中,當(dāng)執(zhí)行到continue語(yǔ)句時(shí),跳過(guò)循環(huán)體內(nèi)位于其后的其它語(yǔ)句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定;即“提前結(jié)束本次循環(huán)”3、說(shuō)明:eg417.c①、continue語(yǔ)句只能用于循環(huán)語(yǔ)句中,它是一種具有特殊功能的轉(zhuǎn)移語(yǔ)句;②、continue與break不同:continue語(yǔ)句只結(jié)束本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行;而break語(yǔ)句那么是結(jié)束整個(gè)循環(huán),不再判斷循環(huán)條件是否成立。4、例:把100到200之間能被3整除的數(shù)輸出課本58頁(yè)例題:2-21,222continue語(yǔ)句例6-11輸出100以內(nèi)能被9整除的數(shù)。
#include<stdio.h>main() { intn; for(n=9;n<=100;n++) {if(n%9!=0)continue;
printf(″%d″,n); }}
在本例中,對(duì)9~100的每一個(gè)數(shù)進(jìn)行測(cè)試,如該數(shù)不能被9整除,即模運(yùn)算不為0,那么由continue語(yǔ)句轉(zhuǎn)去下一次循環(huán),只有模運(yùn)算為0時(shí),才能執(zhí)行后面的printf語(yǔ)句,輸出能被9整除的數(shù)。1、格式:;〔僅由一個(gè)分號(hào)“;”組成〕2、功能:當(dāng)從語(yǔ)法上需要一個(gè)語(yǔ)句,而從語(yǔ)義上不需要任何操作時(shí),便可以用空語(yǔ)句。3、例如:在循環(huán)語(yǔ)句中提供一個(gè)不需要執(zhí)行操作的空語(yǔ)句體。for(sum=0,i=1;i<=100;sum+=i,i++)
;for(i=1;i<=10000;i++)
;3空語(yǔ)句4、注意:要將空語(yǔ)句與簡(jiǎn)單語(yǔ)句中的有效組成局部相區(qū)別,不要亂用空語(yǔ)句。for(i=1;i<=100;i++)
;sum=sum+i;if(a>b);x=a;elsex=b;例6-12顯示輸入的字符,如果按的是Esc鍵,那么退出循環(huán);如果按的是Enter鍵,那么不做任何處理,繼續(xù)輸入下一個(gè)字符。 #include″conio.h″main(){ charch;for(;;) {ch=getch(); *字符輸入函數(shù)*/if(ch==27)break; /*Esc鍵的ASCII碼為27*/if(ch==13)continue; /*按Enter鍵退出*/putch(ch); /*顯示輸入的字符*/ } getch(); /*讓程序停一下,按任意鍵繼續(xù)*/}
說(shuō)明:
getch()和putch()的作用與getchar()和putchar()相似。不同的是:
(1)getch()不顯示鍵盤輸入的字符。
(2)getchar()輸入字符時(shí),要按Enter鍵,計(jì)算機(jī)才會(huì)響應(yīng)。而用getch()時(shí),輸入字符不需要回車。程序舉例例6-13:求Fibonacci數(shù)列的前20個(gè)數(shù)。這個(gè)數(shù)列有如下特點(diǎn):第1、2兩個(gè)數(shù)為1、1;從第3個(gè)數(shù)開(kāi)始,該數(shù)是其前面兩個(gè)數(shù)之和。即:F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n≥3)eg419.c參考程序:#include“stdio.h”Voidmain(){longinti=0,n,f1=1,f2=1,f3;printf(“pleaseinputthen:”);scanf(“%d”,&n);printf(“f1f2f3\n”);while(i<n){f3=f1+f2;f1=f2;f2=f3;printf(“%d%d%d\n”,f1,f2,f3);i++;}}
計(jì)數(shù)法:預(yù)知循環(huán)的總次數(shù)。標(biāo)志法:達(dá)到某目標(biāo),結(jié)束循環(huán)。窮舉
逐一測(cè)試問(wèn)題的所有可能狀態(tài),直到解答或測(cè)試過(guò)所有可能的狀態(tài)為止。迭代:不斷用新值取代舊值,或由舊值遞推出變量的新值的過(guò)程。循環(huán)算法的兩種根本方法 例6-14下面的程序計(jì)算100至1000之間有多少個(gè)數(shù)其各位數(shù)字之和是5。參考程序:#include<stdio.h>main(){inti,s,k,count=0;for(i=100;i<=1000;i++) {s=0; k=i; while(k){s=s+k%10; /*首先取得該數(shù)的個(gè)位*/ k=k/10;}/*除10以后可以將最后一位數(shù)去掉*/ if(s!=5)continue;/*不等于5,那么判斷下一個(gè)*/ else{count++; printf(“%d”,i);}/*等于5,那么計(jì)數(shù)器加1*/ } printf(″%d″,count);} 例6-15找出3~1000中的全部素?cái)?shù)。 分析: (1)素?cái)?shù)是除1和它本身之外不能被任何—個(gè)整數(shù)所整除的自然數(shù)(1除外)。如2,3,5,7是素?cái)?shù)。1,4,6,8,10不是素?cái)?shù)。 (2)判斷某數(shù)i是否為素?cái)?shù)的一個(gè)簡(jiǎn)單方法是用2,3,4,…,i-1這些數(shù)據(jù)逐個(gè)去除i,只要被其中的一個(gè)數(shù)整除了,那么i就不是素?cái)?shù)。數(shù)學(xué)上已證明,對(duì)于自然數(shù)i只需用2,3,4,…,i/2測(cè)試。 (3)外層循環(huán)控制。 for(i=3;i<=1000;i++) (4)用j=2,…,i1/2測(cè)試i。如果i能被這些數(shù)中的某一個(gè)整除,i就不是素?cái)?shù);否那么i就是素?cái)?shù)。測(cè)試過(guò)程如下: flag=1; /*設(shè)標(biāo)志*/; for(j=2;j<=sqrt(i);j++) {if(i%j==0) /*被j整除,i不是素?cái)?shù)*/ {flag=0;break; /*標(biāo)志設(shè)為1,停止測(cè)試*/ } } /*內(nèi)循環(huán)*/程序流程圖如圖。圖
例6-15程序流程圖#include<math.h>main(){ unsignedinti,j,count,flag;/*用flag作標(biāo)志*/ count=0;/*計(jì)數(shù)器清0*/ for(i=3;i<=1000;i++) {flag=1; for(j=2;j<=sqrt(i);j++){if(i%j==0)/*能整除,不是素?cái)?shù),標(biāo)志設(shè)為1*/ {flag=0;break;} }/*內(nèi)循環(huán)結(jié)束*/ if(flag==1)/*假設(shè)flag為0,i是素?cái)?shù)*/ { printf(″%4d″,i);count++; if(count%8==0)printf(″\n″);/*每行輸出8個(gè)*/ } } /*外循環(huán)*/}
例6-16用公式,求π的近似值,直到最后一項(xiàng)的絕對(duì)值小于10-6為止。圖
例6-16程序流程圖課本63頁(yè)作業(yè)4
圖
例6-16程序流程圖 分析:這是一個(gè)累加求和問(wèn)題,顯然可用循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)。在這里由于循環(huán)的次數(shù)首先并不確定,所以我們可以用while循環(huán)語(yǔ)句。 定義變量pi存放結(jié)果。最初pi=0; 定義變量t存放當(dāng)前項(xiàng)。最初t=1; 循環(huán)控制:while(fabs(t)>1e-6) 循環(huán)累加:pi=pi+t; t由分子和分母兩局部組成。 分子用f表示,f的初值為1,每次符號(hào)交替f=-f;分母用v表示,初值為1,每次v的值增加2。即v+=2。 程序流程圖如圖5.7所示圖
例6-16程序流程圖
程序代碼:
#include<math.h> voidmain() { intf=1; floatpi=0,t
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位口腔健康講座課件
- 海安八校聯(lián)考數(shù)學(xué)試卷
- 河南省往年單招數(shù)學(xué)試卷
- 健康管理師基礎(chǔ)知識(shí)課件
- 2025年云南省硯山縣二中物理高二第二學(xué)期期末達(dá)標(biāo)測(cè)試試題含解析
- 健康管理中醫(yī)養(yǎng)生學(xué)課件
- 河北省臨西縣實(shí)驗(yàn)中學(xué)2025屆高一物理第二學(xué)期期末考試模擬試題含解析
- 綠色建筑設(shè)計(jì)標(biāo)識(shí)自評(píng)估報(bào)告范文2025版
- 2025年中國(guó)防盜器行業(yè)市場(chǎng)深度分析及發(fā)展前景預(yù)測(cè)報(bào)告
- 2025年中國(guó)汽車手動(dòng)工具行業(yè)發(fā)展監(jiān)測(cè)及發(fā)展戰(zhàn)略規(guī)劃報(bào)告
- 過(guò)氧化物酶在環(huán)境污染物降解中的應(yīng)用
- 12G614-1砌體填充墻結(jié)構(gòu)構(gòu)造
- 廣東省2024年中考數(shù)學(xué)試卷【附真題答案】
- (正式版)HGT 22820-2024 化工安全儀表系統(tǒng)工程設(shè)計(jì)規(guī)范
- 《中華民族共同體概論》考試復(fù)習(xí)題庫(kù)(含答案)
- 多發(fā)性骨髓瘤護(hù)理查房
- 外科急腹癥-李國(guó)剛
- 30題投資管理類崗位常見(jiàn)面試問(wèn)題含HR問(wèn)題考察點(diǎn)及參考回答
- 投資項(xiàng)目可行性研究報(bào)告培訓(xùn)教程課件
- 電氣設(shè)備運(yùn)行與維護(hù)-開(kāi)關(guān)電器的運(yùn)行與維護(hù)
- 決策力和執(zhí)行力教學(xué)課件
評(píng)論
0/150
提交評(píng)論