第六章循環(huán)控制結(jié)構(gòu)_第1頁
第六章循環(huán)控制結(jié)構(gòu)_第2頁
第六章循環(huán)控制結(jié)構(gòu)_第3頁
第六章循環(huán)控制結(jié)構(gòu)_第4頁
第六章循環(huán)控制結(jié)構(gòu)_第5頁
已閱讀5頁,還剩88頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

C語言程序設(shè)計第六章循環(huán)控制結(jié)構(gòu)1本章內(nèi)容6-2計數(shù)控制的循環(huán)

條件控制的循環(huán)

for語句,while語句,do-while語句continue語句,break語句

嵌套循環(huán)結(jié)構(gòu)化程序設(shè)計思想

程序調(diào)試與排錯問題提出6-3#1:2個學(xué)生#2:100個學(xué)生2個變量;2條輸入語句;1002100個變量;100條輸入語句;重復(fù):輸入成績錄入6.1循環(huán)控制結(jié)構(gòu)與循環(huán)語句6-4標(biāo)記控制計數(shù)控制1,2,3,4,……,4,3,2,1條件控制如何對循環(huán)進行控制呢?循環(huán)控制語句for語句while語句

do-while語句6-5for循環(huán):一般形式for循環(huán)一般形式:for(表達式1;表達式2;表達式3)

{

循環(huán)體語句;}6-6表達式2!=0循環(huán)體語句真假出口入口循環(huán)起始條件循環(huán)終止條件循環(huán)變量增值

當(dāng)型循環(huán)計數(shù)控制計數(shù)控制的循環(huán)6-7counter←0,sum←0counter<100sum←sum+scorefalsetruecounter++輸出sum輸入成績score結(jié)束循環(huán)體僅使用了3個變量計數(shù)控制的循環(huán)6-8counter←0,sum←0counter<100sum←sum+scorefalsetruecounter++輸出sum輸入成績score結(jié)束#include<stdio.h>main(){intcounter;floatscore,sum=0;printf("Pleaseinputsocre:");for(counter=0;counter<100;counter++){scanf("%f",&score);sum=sum+score;}printf("totalscoreis:%f",sum);}for循環(huán):靈活性1.增量可以遞減6-9/*增量可以遞減*/#include<stdio.h>main(){intsecs;

for(secs=5;secs>0;secs--){printf(“%dsecs!\n”,secs);}}

5secs!4secs!3secs!2secs!1secs!Secs=0printf(“secs=%d”,secs);2.增量可以靈活變化6-10/*for循環(huán)的靈活性*//*根據(jù)需要,增量可以是2、3…*/#include<stdio.h>main(){intn;for(n=2;n<50;n+=15){printf(“nis%d\n”,n);

}}n=2n=17n=32n=47思考:跳出循環(huán)后,n的值是??

62

for循環(huán):靈活性

printf("nis%d\n",n);for循環(huán):靈活性6-11/*for循環(huán)的靈活性*//*甚至可以讓一個或多個表達式為空(但是不要遺漏分號)*/#include<stdio.h>main(){intans,n;

ans=2;for(n=3;ans<=25;){ ans=ans*n;

printf(“n=%d\tans=%d.\n”,n,ans);}printf(“n=%d\tans=%d.\n”,n,ans);

}n=3ans=6.n=3ans=18.n=3ans=54.n=3ans=54.3.可以讓一個或多個表達式為空for循環(huán):靈活性4.第一個表達式不必初始化一個變量6-12/*for循環(huán)的靈活性*//*第一個表達式不必初始化一個變量,它可以是某種類型的printf()*/#include<stdio.h>main(){intnum=0;for(printf(“keepenteringnumbers:!\n”);num!=6;)scanf(“%d”,&num);printf(“That’stheoneIwant!\n”);

}while循環(huán)當(dāng)型循環(huán)條件或計數(shù)控制一般形式:6-13while(表達式)

{

循環(huán)體語句;}

只要表達式的值為非0,就重復(fù)執(zhí)行語句,直到表達式值為0時止控制循環(huán)的條件A真假假條件Pwhile循環(huán)while

示例:6-14n=1;while(n>5){ printf(〝Goodmorning!\n〞); n=n+1;}while循環(huán)while

的陷阱:6-15n=1;while(n<5)printf(〝Goodmorning!\n〞);n=1;while(--n<5)printf(〝Goodmorning!\n〞);循環(huán)變量無變化,無法滿足終止條件,陷入死循環(huán)n的初始值使得n永遠小于5,不幸陷入死循環(huán)while循環(huán)while

的陷阱:6-16n=10;while(n++<5)printf(〝Goodmorning!\n〞);不滿足循環(huán)起始條件,無法進入循環(huán)正確的

while使用

:n=10;while(n++<5)printf(〝Goodmorning!\n〞);n=3;6-17/*何時退出一個循環(huán)*/#include<stdio.h>main(){intn=2;while(n<5){n++;printf(〝n=%d\n〞,n);}printf(〝programover!\n〞);}n=3n=4n=5programover!while循環(huán)1.格式不規(guī)范6-18while循環(huán):幾點注意/*注意花括號的使用,拙劣的代碼產(chǎn)生了一個死循環(huán)*/#include<stdio.h>main(){

intn=0;while(n<3)printf(〝n=%d\n〞,n);n++;

printf(〝programover!〞);}{}6-19/*注意分號的使用*/#include<stdio.h>main(){

intn=0;while(n++<3);printf(〝n=%d\n〞,n);

printf(〝programover!〞);}2.亂用分號的錯誤while循環(huán):幾點注意表示while條件成立后,執(zhí)行空語句while(n++<3){;}dowhile循環(huán)直到型循環(huán)條件或計數(shù)控制dowhile循環(huán)的一般格式6-20do

{

循環(huán)體語句;

}while

(表達式);A條件P假真while語句后分號不可丟!示例程序:6-21/*退出條件循環(huán)*/#include<stdio.h>main(){intcount;count=0;do{count++;

printf(“countis%d\n”,count);}while(count<3);printf(“countis%d\n”,count);}dowhile循環(huán)countis1countis2countis3countis3當(dāng)型循環(huán)與直到型循環(huán)6-22條件PA當(dāng)型循環(huán)直到型循環(huán)真假假條件PA假真循環(huán)控制結(jié)構(gòu):一些建議三種循環(huán)選擇的一般原則:如果循環(huán)次數(shù)已知,用for如果循環(huán)次數(shù)未知,用while如果循環(huán)體至少要執(zhí)行一次,

用do-while6-23例6.2計算并輸出1+2+3+...+n的值循環(huán)次數(shù)已知6-24#include<stdio.h>main(){inti,n,sum;printf("Inputn:\n");scanf("%d",&n);sum=0;for(i=1;i<=n;i++){sum=sum+i;}printf("sum=%d\n",sum);}6_2_1.csum=55例6.2計算并輸出1+2+3+...+n的值循環(huán)次數(shù)已知6-25#include<stdio.h>main(){inti,n,sum;printf("Inputn:\n");scanf("%d",&n);sum=0;for(i=1;i<=n;i++){sum=sum+i; printf(“i=%d,sum=%d”,i,sum);}printf("sum=%d\n",sum);}6_2_1.c若把此句去掉會怎樣?例6.2計算并輸出1+2+3+...+n的值循環(huán)次數(shù)已知——利用while循環(huán)6-26#include<stdio.h>main(){inti,n,sum;printf("Inputn:\n");scanf("%d",&n);sum=0;

i=1;while(i<=n){sum=sum+i;

i++;}printf("sum=%d\n",sum);}6_2_2.c例6.2計算并輸出1+2+3+...+n的值循環(huán)次數(shù)已知—dowhile循環(huán)6-27#include<stdio.h>main(){inti,n,sum;printf("Inputn:\n");scanf("%d",&n);sum=0;

i=1;do{sum=sum+i;

i++;}while(i<=n);

printf("sum=%d\n",sum);}6_2_2.c6-28#include<stdio.h>main(){inti,n,sum;printf("Inputn:\n");scanf("%d",&n);sum=0;

i=1;while(i<=n){sum=sum+i;

i++;}printf("sum=%d\n",sum);}#include<stdio.h>main(){inti,n,sum;printf("Inputn:\n");scanf("%d",&n);sum=0;

i=1;do{sum=sum+i;

i++;}while(i<=n);

printf("sum=%d\n",sum);}例6.2計算并輸出1+2+3+...+n的值while與dowhile6-29#include<stdio.h>#include<stdlib.h>/*rand函數(shù)需要的頭文件*/main(){

intmagic,guess;magic=rand();/*利用rand函數(shù)產(chǎn)生隨機數(shù)*/

printf(“pleaseenteraguess:”);scanf(“%d”,&guess);

if(guess>magic){printf(“wrong!toohigh!\n”);}

elseif(guess<magic){printf(“wrong!toolow!\n”);}

else{printf(“right!\n”);printf(“thenumberis:%d\n”,guess);}}例5.5猜數(shù)游戲若可以嘗試多次,直到猜對為止如何實現(xiàn)?

只能猜一次產(chǎn)生一個1-100之間的數(shù),如何實現(xiàn)例6.3猜數(shù)游戲猜一個1-100之間的數(shù)隨機函數(shù)rand()產(chǎn)生[0,RAND_MAX]之間的隨機magic=rand();#include<stdlib.h>RAND_MAX在stdlib.h中定義,不大于雙字節(jié)整數(shù)的最大值32767產(chǎn)生[0,b-1]之間的隨機數(shù)magic=rand()%b;產(chǎn)生[a,a+b-1]之間的隨機數(shù)magic=rand()%b+a;產(chǎn)生[1-100]之間的隨機數(shù)

magic=rand()%100+1;6-30循序漸進編程6-31#include<stdio.h>#include<stdlib.h>main(){

intmagic,guess;

magic=rand()%100+1;

do

{

printf("Inputguess:"); scanf("%d",&guess);

if(guess>magic) { printf(“Wrong!Toohigh!\n"); }

elseif(guess<magic) { printf(“Wrong!Toolow!\n"); }

}while(guess!=magic); printf(“Right!guess=%d\n",magic);}例6.3猜數(shù)游戲6_3_0.c程序演示例6.3猜數(shù)游戲產(chǎn)生隨機數(shù)隨機函數(shù)srand為函數(shù)rand()設(shè)置隨機數(shù)種子來實現(xiàn)對函數(shù)rand所產(chǎn)生的偽隨機數(shù)的“隨機化”通過輸入隨機數(shù)種子,產(chǎn)生[0,100]之間的隨機數(shù)scanf("%u",&seed);srand(seed);magic=rand()%100+1;函數(shù)time()返回以秒計算的當(dāng)前時間值,該值被轉(zhuǎn)換為無符號整數(shù)并用作隨機數(shù)發(fā)生器的種子

#include<time.h>srand(time(NULL));magic=rand()%100+1;6-326-33#include<stdio.h>#include<stdlib.h>#include<time.h>main(){

intmagic,guess; srand(time(NULL)); magic=rand()%100+1;

do

{

printf("Inputguess:"); scanf("%d",&guess);

if(guess>magic) { printf(“Wrong!Toohigh!\n"); }

elseif(guess<magic) { printf(“Wrong!Toolow!\n"); }

}while(guess!=magic); printf(“Right!guess=%d\n",magic);}猜多次,直到猜對為止:方法1do-while循環(huán)例6.3猜數(shù)游戲6_3.c6-34#include<stdio.h>#include<stdlib.h>#include<time.h>main(){

intmagic,guess,flag=1; srand(time(NULL)); magic=rand()%100+1;

while(flag) {

printf("Inputguess:"); scanf("%d",&guess);

if(guess>magic) { printf("Toohigh!\n"); }

elseif(guess<magic) { printf("Toolow!\n"); }

else { flag=0; } } printf("OK!Right!magic=%d",magic);}猜多次,直到猜對為止:方法2利用while循環(huán),設(shè)置標(biāo)志變量例6.3猜數(shù)游戲6_3_2.c6-35#include<stdio.h>#include<stdlib.h>#include<time.h>main(){

intmagic,guess,n=0; srand(time(NULL)); magic=rand()%100+1;

do

{

n++;

printf("Inputguess:"); scanf("%d",&guess);

if(guess>magic) printf("Toohigh!\n");

elseif(guess<magic) printf("Toolow!\n");

}while(guess!=magic&&n<10);

if(guess==magic)printf(“Right!guess=%d\n",guess);}最多猜10次例6.4猜數(shù)游戲逗號表達式6-36表達式1,表達式2,…,表達式nx=a=3,6*ax=(a=3,6*a)最后一個表達式的值作為逗號表達式的值逗號運算符在所有運算符中優(yōu)先級最低多數(shù)情況下,并不使用整個逗號表達式的值,更常見的情況是要分別得到各表達式的值for(i=0,j=100;i<j;i++,j--)x=3x=18嵌套循環(huán)6-37合法的嵌套循環(huán)內(nèi)層循環(huán)內(nèi)層循環(huán)內(nèi)層循環(huán)外層循環(huán)嵌套循環(huán)6-38使用嵌套的循環(huán)體時,應(yīng)注意以下問題

在嵌套的各層循環(huán)體中,使用復(fù)合語句(即用一對大花括號將循環(huán)體語句括起來)保證邏輯上的正確性

內(nèi)層和外層循環(huán)控制變量不應(yīng)同名,以免造成混亂

嵌套的循環(huán)最好采用右縮進格式書寫,以保證層次的清晰性

循環(huán)嵌套不能交叉,即在一個循環(huán)體內(nèi)必須完整的包含著另一個循環(huán)

思考:猜數(shù)游戲6-39……do{ magic=rand()%100+1; counter=0;

do{ printf("Pleaseguessamagicnumber:"); scanf("%d",&guess); counter++;

if(guess>magic) printf("Wrong!Toohigh!\n");

elseif(guess<magic) printf("Wrong!Toolow!\n");

else printf("Right!\n"); }while(guess!=magic&&counter<10);

printf("counter=%d\n",counter);

printf("Doyouwanttocontinue(Y/Nory/n)?"); scanf("%c",&reply);

}while((reply=='Y')||(reply=='y'));猜多個數(shù)10次猜不對就猜下一個數(shù)直到用戶選擇結(jié)束為止……do{ magic=rand()%100+1; counter=0;

do{ printf("Pleaseguessamagicnumber:"); scanf("%d",&guess); counter++;

if(guess>magic) printf("Wrong!Toohigh!\n");

elseif(guess<magic) printf("Wrong!Toolow!\n");

else printf("Right!\n"); }while(guess!=magic&&counter<10);

printf("counter=%d\n",counter); printf("Doyouwanttocontinue(Y/Nory/n)?"); scanf("%c",&reply); }while((reply=='Y')||(reply=='y'));例6.4猜數(shù)游戲6-40防止非法字符輸入例6.5求1!+2!+3!+...+n!題目分析:求i!i!=1*2*...*i求sum:sum=1!+2!+…+n!初值的設(shè)定:sum=0;p=1;

6-411!+2!+3!+..+i!+..+n!sum1*2*3*…*ifor(p=1,j=1;j<=i;j++){p=p*j;}for(i=1;i<=n;i++){sum=sum+p;}6-42#include<stdio.h>main(){

inti,j,n;

longterm,sum=0;printf("Inputn:");scanf("%d",&n);

for(i=1;i<=n;i++){term=1;

for(j=1;j<=i;j++){term=term*j;}sum=sum+term;}printf("1!+2!+...+%d!=%ld\n",n,sum);}?Inputn:101!+2!+…+10!

=

4037913每次單獨計算累加項例6.56_5.c6-43#include<stdio.h>main(){

inti,j,n;

longterm,sum=0;printf("Inputn:");scanf("%d",&n);

for(i=1;i<=n;i++){

term=term*i;sum=sum+term;

}printf("1!+2!+...+%d!=%ld\n",n,sum);}Inputn:101!+2!+…+10!

=

4037913思考:用單層循環(huán)是否可以完成

6_5.c利用前項計算后項6-44/*使用嵌套循環(huán)*/#include<stdio.h>main(){inti,j,k;for(i=1;i<=4;i++){

for(j=1;j<=i;j++) {printf(“”); }

for(k=1;k<=6;k++){ printf(“*”);} printf(“\n”);}}******

******

******

******例6.6九九乘法表編程輸出如下形式的乘法九九表6-454.4應(yīng)用舉例#include<stdio.h>main(){

inti,j;

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

for(i=1;i<10;i++) printf("-"); printf("\n"); for(i=1;i<10;i++) { for(j=1;j<10;j++) { printf("%4d",i*j); } printf("\n");}}

5_10行列112123224246246810121416186-46#include<stdio.h>main(){introw;charch;for(row=1;row<7;row++){for(ch='A';ch<('A'+row);ch++){printf("%c",ch);}printf("\n");}}5_14行列的依存關(guān)系6-47例6.7九九乘法表—三角形6-486-49#include<stdio.h>main(){ inti,j; for(i=1;i<10;i++) printf("%4d",i); printf(“\n”); for(i=1;i<10;i++)

printf("-"); printf(“\n”); for(i=1;i<10;i++) {

for(j=1;j<=i;j++) { printf(“%4d”,i*j); } printf(“\n”);}}6-49例6.8馬克思手稿中有一道趣味數(shù)學(xué)題:有30個人,其中有男人、女人和小孩,在一家飯館里吃飯共花了50先令,每個男人各花3先令,每個女人各花2先令,每個小孩各花1先令,問男人、女人和小孩各有幾人?解方程組窮舉法6-504.4應(yīng)用舉例

方法1:采用三重循環(huán)窮舉x,y,z的全部可能的組合

#include<stdio.h>main(){

intx,y,z;

printf(“Man\tWomen\tChildern\n”);

for(x=0;x<=30;x++){for(y=0;y<=30;y++){for(z=0;z<=30;z++){if(x+y+z==30&&3*x+2*y+z==50)printf("%3d\t%5d\t%8d\n",x,y,z);}}}}6-514.4應(yīng)用舉例

方法2:采用雙重循環(huán)

#include<stdio.h>main(){

intx,y,z;

printf(“Man\tWomen\tChildern\n”);

for(x=0;x<=30;x++){for(y=0;y<=30;y++){

z=30–x-y;if(3*x+2*y+z==50)printf("%3d\t%5d\t%8d\n",x,y,z);

}}}X<=16;y<=25;6-52循環(huán)次數(shù):?利用計算的值。累加項的通項term:1/n(n=1,3,5,…)各項符號交替變化。用sign表示每項符號若第1項:sign=1則第2項:sign=-sign

第3項:sign=-sign

…累加項的通項term可表示成:term=sign/nsign=-sign例6.9:求圓周率問題

6-53#include<stdio.h>#include<math.h>main(){

intn;

floatsign=1.0;

doubleterm=1,sum=0;for(n=1;fabs(term)>=1e-4;n+=2){

term=sign/n;

sum=sum+term;sign=-sign;}printf(“pi=%e\n”,4*sum);}6-54例6.9:求圓周率

需要多少項?6_9_1.c#include<stdio.h>#include<math.h>main(){

intn,count=0;

floatsign=1.0;

doubleterm=1,sum=0;for(n=1;fabs(term)>=1e-4;n+=2){

term=sign/n;

sum=sum+term;sign=-sign;count++;}printf(“pi=%e\tcount=%d\n”,4*sum,count);}6-55例6.9:求圓周率問題

6_9_2.c需要多少項相加?例6.10:國王的許諾

國王的許諾。相傳國際象棋是古印度舍罕王的宰相達依爾發(fā)明的。舍罕王十分喜歡象棋,決定讓宰相自己選擇何種賞賜。位聰明的宰相指著8×8共64格的象棋盤說:陛下,請您賞給我一些麥子吧,就在棋盤的第一個格子中放1粒,第2格中放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依此放完棋盤上的64個格子,我就感恩不盡了。舍罕王讓人扛來一袋麥子,他要兌現(xiàn)他的許諾。

國王能兌現(xiàn)他的許諾嗎?試編程計算舍罕王共要多少麥子賞賜他的宰相,這些麥子合多少立方米?(已知1立方米麥子約1.42e8粒)

總粒數(shù)為:sum=20+21+22+23+…+263

term=2i6-56求和公式:=20+21+22+23+…+263

利用累加求和的通式:sum=sum+term累加項的通項:term=2i循環(huán)的初始條件:sum=0,i從0變化到63總的體積volum:sum/1.42e86-57例6.10:國王的許諾

#include<stdio.h>#include<math.h>#define

CONST1.42e8main(){

inti;

doubleterm,sum=0;for(i=0;i<64;i++){

term=pow(2,i);

sum=sum+term;}printf(“sum=%e\n”,sum);printf("volum=%e\n",sum/CONST);}方法1:

利用數(shù)學(xué)公式6-58例6.10:國王的許諾

關(guān)于累加項的通項term:term=2i(i=0,1,…,63)第1項:1第2項:1*2第3項:1*2*2第4項:1*2*2*2…規(guī)律:后一項等于前一項乘以2,即:

term=term*2term的初值為1,term=16-59例6.10:國王的許諾

#include<stdio.h>#define

CONST1.42e8main(){

inti;

doubleterm=1,sum=0;for(i=0;i<64;i++){ sum=sum+term; term=term*2;

}printf(“sum=%e\n”,sum);printf("volum=%e\n",sum/CONST);}方法2:

利用規(guī)律6-60例6.10:國王的許諾

流程的轉(zhuǎn)移控制break語句continue語句goto語句標(biāo)準(zhǔn)庫函數(shù)exit()return語句#include<stdio.h>main(){

inti,n;

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

if(n<0)

break; printf("n=%d\n",n); } printf("Programisover!\n");}n???10Pleaseentern:10↙n=10Pleaseentern:-10↙Programisover!例6.11演示break與continue

-106-62讀程序,說出程序的目的break;}后#include<stdio.h>main(){

inti,n;

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

if(n<0)

continue; printf("n=%d\n",n); } printf("Programisover!\n");}n???10Pleaseentern:10↙n=10Pleaseentern:-10↙Pleaseentern:20↙n=20Pleaseentern:-20↙Pleaseentern:30↙n=30Programisover!例6.11演示break與continue

-1020-20306-63讀程序,說出程序的目的break語句和continue語句對for、while、do-while循環(huán)進行內(nèi)部手術(shù)Break?退出一層循環(huán)或switchContinue?中斷此次循環(huán),開始下一次流程的轉(zhuǎn)移控制

6-64不能用break語句跳出多層循環(huán)!6-65#include<stdio.h>main(){

inti=0;

while(i<10) {

if(i++<1)

continue;

if(i==5)

break; i++; } printf(“i=%d\n”,i);}程序執(zhí)行結(jié)果:i=112023/2/6break

與continue

語句

break語句的作用:循環(huán)中使用break語句可提前結(jié)束整個循環(huán)。

continue語句的作用:循環(huán)中使用continue語句可提前結(jié)束本次循環(huán)開啟一次新的循環(huán)6-662023/2/6有關(guān)break

與continue的說明(1)break語句可用于switch結(jié)構(gòu),

也可用于循環(huán)中;(2)continue語句僅用于循環(huán)中;(3)break與continue均只影響包含它的結(jié)構(gòu)中;6-67例6.12素數(shù)判斷判斷一個數(shù)是否是素數(shù),若是打印“Yes”,否則打印“No”。6-68素數(shù):只能被1和它本身整除開始輸入mi<mi>=m輸出”Yes”輸出”No”結(jié)束m%i=0真假假假真真i=i+16-69例6.12素數(shù)判斷若:m不能被2——m-1之間

的所有數(shù)整除,則:m為素數(shù)4.3循環(huán)控制語句(2)/*在循環(huán)體內(nèi)使用break退出循環(huán)*/#include<stdio.h>#include<math.h>main(){inti,m;printf(“Pleaseenteranumber:”);scanf(“%d”,&m);

for(i=2;i<m;i++){if(m%i==0){

break;

}}if(i>=m)printf(“Yes!\n”);

elseprintf(“No!\n”);}6-70開始輸入mi<mi>=m輸出”Yes”輸出”No”結(jié)束m%i=0真假假假真真i=i+1

6-71例6.12素數(shù)判斷4.3循環(huán)控制語句(2)/*在循環(huán)體內(nèi)使用標(biāo)志量退出循環(huán)*/#include<stdio.h>#include<math.h>main(){inti,m,flag=1;printf(“Pleaseenteranumber:”);scanf(“%d”,&m);

for(i=2;i<m;i++){if(m%i==0){

flag=0;

}}if(flag)printf(“Yes!\n”);

elseprintf(“No!\n”);}break;i<m&&flag;i++)

i<=sqrt(m)&&flag;i++)6-72開始輸入mflag=1i<m&&flagflag=0flag!=0輸出”素數(shù)”輸出”非素數(shù)”結(jié)束真真假假i=i+1m%i=0假真6-73例6.12素數(shù)判斷例6.12素數(shù)判斷判斷一個數(shù)是否是素數(shù),若是打印“Yes”,否則打印“No”。6-74思考:如果輸入負(fù)數(shù)、0、1,用以上幾個程序是否能得到正確答案?

如不能需要怎么修改??流程的轉(zhuǎn)移控制break語句continue語句goto語句return語句標(biāo)準(zhǔn)庫函數(shù)exit()

6-75標(biāo)號舉例error:goto舉例goto

error;一般形式goto語句標(biāo)號;

……

語句標(biāo)號:……

goto與標(biāo)號(label)6-76語句標(biāo)號:……

……goto語句標(biāo)號;或2023/2/6(1)語句標(biāo)號用標(biāo)識符表示。(2)語句標(biāo)號一定為函數(shù)段中存在的。(3)該語句不可濫用。使用goto

語句要注意標(biāo)號舉例error:goto舉例goto

error;不能用整數(shù)作語句標(biāo)號6-772023/2/6使用goto語句的原則主張少用、慎用,而不是禁用使用之后,程序仍然是單入口,單出口不要使用一個以上的標(biāo)號不要用goto語句往回跳,要向下跳不要讓goto語句制造出永遠不會被執(zhí)行的代碼6-78exit()函數(shù)exit(0)作用是終止整個程序的執(zhí)行,強制返回操作系統(tǒng)調(diào)用該函數(shù)需要嵌入頭文件<stdlib.h>6-79例6.9韓信點兵6-80韓信有一隊兵,他想知道有多少人,便讓士兵排隊報數(shù)。按從1至5報數(shù),最末一個士兵報的數(shù)為1;按從1至6報數(shù),最末一個士兵報的數(shù)為5;按從1至7報數(shù),最末一個士兵報的數(shù)為4;最后再按從1至11報數(shù),最末一個士兵報的數(shù)為10。你知道韓信至少有多少兵嗎?設(shè)兵數(shù)為x,則x應(yīng)滿足:x%5==1&&x%6==5&&x%7==4&&x%11==10窮舉法,對x從1開始試驗例6.9韓信點兵6-81#include<stdio.h>main(){

intx;

for(x=1;x<5000;x++) {

if(x%5==1&&x%6==5&&x%7==4&&x%11==10) { printf("x=%d\n",x); } } }

“瞎貓碰死耗子”#include<stdio.h>main(){

intx;

for(x=1;;x++) {

if(x%5==1&&x%6==5&&x%7==4&&x%11==10) { printf("x=%d\n",x); } } }例6.9韓信點兵6-82“死循環(huán)”例6.9韓信點兵--goto6-83#include<stdio.h>main(){

intx;

for(x=1;;x++) {

if(x%5==1&&x%6==5&&x%7==4&&x%11==10) { printf("x=%d\n",x);

gotoEND;

} }END:;

}6-84#include<stdio.h>main(){

intx;

for(x=1;;x++) {

if(x%5==1&&x%6==5&&x%7==4&&x%11==10) { printf("x=%d\n",x);

break;

} } }例6.9韓信點兵--break6-85例6.9韓信點兵—exit()#include<stdio.h>#include<stdlib.h>main(){

intx;

for(x=1;;x++) {

if(x%5==1&&

溫馨提示

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

評論

0/150

提交評論