版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C語(yǔ)言程序設(shè)計(jì)吉林大學(xué)珠海學(xué)院計(jì)算機(jī)系李昱E-mail:826450556@QQ.comTEL66762)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第1頁(yè)第6章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第2頁(yè)學(xué)習(xí)意義
許多實(shí)際問(wèn)題中往往需要有規(guī)律地重復(fù)一些操作,如菜譜中能夠有:“打雞蛋直到泡沫狀”這么步驟,也就是說(shuō),在雞蛋沒(méi)有打成泡沫狀時(shí)要重復(fù)地打。對(duì)應(yīng)操作在計(jì)算機(jī)程序中就表達(dá)為一些語(yǔ)句重復(fù)執(zhí)行,這就時(shí)所謂循環(huán)。
下面來(lái)思索一個(gè)問(wèn)題:怎樣編程來(lái)計(jì)算1+2+3+…+100?程序以下:ints=0;s=s+1;s=s+2;s=s+3;
……s=s+100;printf(“s=%d”,s);重復(fù)100次,暈?。。∮袥](méi)有更加好方法來(lái)計(jì)算呢?有!就是用循環(huán)來(lái)編程。第4章已討論程序結(jié)構(gòu)次序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)本章討論第5章已討論循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第3頁(yè)學(xué)習(xí)目標(biāo)
了解循環(huán)結(jié)構(gòu)含義;掌握C語(yǔ)言三種循環(huán)結(jié)構(gòu)特點(diǎn);掌握while、do-while、for、goto、break、continue語(yǔ)句使用方法;掌握不一樣循環(huán)結(jié)構(gòu)選擇及其轉(zhuǎn)換方法;掌握混合控制結(jié)構(gòu)程序設(shè)計(jì)方法。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第4頁(yè)
While、do-while、for語(yǔ)句循環(huán)嵌套
Break、continue、goto語(yǔ)句
exit()函數(shù)循環(huán)結(jié)構(gòu)類型選擇及轉(zhuǎn)換循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例本章小結(jié)學(xué)習(xí)內(nèi)容
循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第5頁(yè)6.1循環(huán)結(jié)構(gòu)程序設(shè)計(jì)
1.while語(yǔ)句普通形式:while(表示式)
循環(huán)體語(yǔ)句;執(zhí)行流程:expr
T循環(huán)體Fwhile其中:
while后面括號(hào)()不能省。
while后面表示式能夠是任意類型表示式,但普通是條件表示式或邏輯表示式。表示式值是是循環(huán)控制條件。語(yǔ)句部分稱為循環(huán)體,當(dāng)需要執(zhí)行多條語(yǔ)句時(shí),應(yīng)使用復(fù)合語(yǔ)句。
特點(diǎn):先判斷表示式,再執(zhí)行循環(huán)體循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第6頁(yè)【例】用while語(yǔ)句求1~100累計(jì)和。
#include<stdio.h>voidmain(){inti=1,sum=0;
while(i<=100){sum+=i; i++; }printf("sum=%d\n",sum);}循環(huán)初值循環(huán)終值循環(huán)條件循環(huán)體循環(huán)變量增值運(yùn)行結(jié)果:sum=5050循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第7頁(yè)【例】顯示1~10平方
#include<stdio.h>
voidmain(){inti=1;while(i<=10){printf("%d*%d=%d\n",i,i,i*i);i++;}}運(yùn)行結(jié)果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第8頁(yè)
(1)假如while后表示式值一開始就為假,循環(huán)體將一次也不執(zhí)行。
(2)循環(huán)體中語(yǔ)句可為任意類型C語(yǔ)句。
(3)碰到以下情況,退出while循環(huán):
表示式為假(為0)。循環(huán)體內(nèi)碰到break、return或goto語(yǔ)句(break和goto語(yǔ)句將在隨即介紹)。
while語(yǔ)句注意事項(xiàng):inta=0,b=0;while(a>0)//a>0為假,b++不可能執(zhí)行
b++;intnum=0;//字符計(jì)數(shù)while(1){if(getche()=='\n')//假如輸入字符是回車符,則返回
return;num++;}循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第9頁(yè)
(4)在執(zhí)行while語(yǔ)句之前,循環(huán)控制變量必須初始化,不然執(zhí)行結(jié)果將是不可預(yù)知。
(5)要在while語(yǔ)句某處(表示式或循環(huán)體內(nèi))改變循環(huán)控制變量,不然極易組成死循環(huán)。
(6)允許while語(yǔ)句循環(huán)體又是while語(yǔ)句,從而形成雙重循環(huán)。
while語(yǔ)句注意事項(xiàng):例:計(jì)算10!#include<stdio.h>voidmain(){inti;//i應(yīng)賦初始值10longs=1;while(i>=1)s*=i--;printf("10!=%ld\n",s);}i=1;while(i<100)//死循環(huán),因?yàn)閕值沒(méi)改變,永遠(yuǎn)小于100sum+=i;printf("sum=%d\n",sum);
i=1;while(i<=9){j=1;
while(j<=9){printf("%d*%d=%d\n",i,j,i*j);j++;}i++;}循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第10頁(yè)【例】求兩個(gè)正整數(shù)最大公因子。
我們采取Euclid(歐幾里德)算法來(lái)求最大公因子,其算法是:
(1)輸入兩個(gè)正整數(shù)m和n。
(2)用m除以n,余數(shù)為r,假如r等于0,則n是最大公因子,算法結(jié)束,不然(3)。
(3)把n賦給m,把r賦給n,轉(zhuǎn)(2)。#include<stdio.h>voidmain(){intm,n,r;printf("Pleaseinputtwopositiveinteger:");scanf("%d%d",&m,&n);while(n!=0){r=m%n;//求余數(shù)
m=n;n=r;}printf("Theirgreatestcommondivisoris%d\n",m);}運(yùn)行結(jié)果:Pleaseinputtwopositiveinteger:2456↙Theirgreatestcommondivisoris8循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第11頁(yè)2.do_while語(yǔ)句普通形式:do
循環(huán)體語(yǔ)句;while(表示式);執(zhí)行流程:其中:
while后面括號(hào)()不能省。
while最終面分號(hào);不能省。
while后面表示式能夠是任意類型表示式,但普通是條件表示式或邏輯表示式。表示式值是是循環(huán)控制條件。語(yǔ)句部分稱為循環(huán)體,當(dāng)需要執(zhí)行多條語(yǔ)句時(shí),應(yīng)使用復(fù)合語(yǔ)句。
expr循環(huán)體
TFdowhile特點(diǎn):先執(zhí)行循環(huán)體,再判斷表示式循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第12頁(yè)【例】用do_while語(yǔ)句求1~100累計(jì)和。
#include<stdio.h>voidmain(){inti=1,sum=0;
do{sum+=i; i++; }while(i<=100);printf("sum=%d\n",sum);}運(yùn)行結(jié)果:sum=5050循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第13頁(yè)
do_while語(yǔ)句注意事項(xiàng):
(1)假如do-while后表示式值一開始就為假,循環(huán)體還是要執(zhí)行一次。
(2)在if語(yǔ)句、while語(yǔ)句中,表示式后面都不能加分號(hào),而在do-while語(yǔ)句表示式后面則必須加分號(hào),不然將產(chǎn)生語(yǔ)法錯(cuò)誤。
(3)循環(huán)體中語(yǔ)句可為任意類型C語(yǔ)句。
(4)和while語(yǔ)句一樣,在使用do-while語(yǔ)句時(shí),不要忘記初始化循環(huán)控制變量,不然執(zhí)行結(jié)果將是不可預(yù)知。
(5)要在do-while語(yǔ)句某處(表示式或循環(huán)體內(nèi))改變循環(huán)控制變量值,不然極易組成死循環(huán)。
(6)do-while語(yǔ)句也能夠組成多重循環(huán),而且也能夠和while語(yǔ)句相互嵌套。
inta=0,b=0;dob++;while(a>0);
循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第14頁(yè)3.for語(yǔ)句普通形式:for(表示式1;表示式2;表示式3)
循環(huán)體語(yǔ)句;執(zhí)行流程:其中:
for后面括號(hào)()不能省。
表示式1:普通為賦值表示式,給控制變量賦初值。
表示式2:關(guān)系表示式或邏輯表示式,循環(huán)控制條件。
表示式3:普通為賦值表示式,給控制變量增量或減量。表示式之間用分號(hào)分隔。語(yǔ)句部分稱為循環(huán)體,當(dāng)需要執(zhí)行多條語(yǔ)句時(shí),應(yīng)使用復(fù)合語(yǔ)句。expr2T循環(huán)體forexpr1expr3Ffor語(yǔ)句很好地表示了正確表示循環(huán)結(jié)構(gòu)應(yīng)注意三個(gè)問(wèn)題:控制變量初始化。循環(huán)條件。循環(huán)控制變量更新。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第15頁(yè)【例】用for語(yǔ)句求1~100累計(jì)和。
#include<stdio.h>voidmain(){inti,sum=0;
for(i=1;i<=100;i++)sum+=i; printf("sum=%d\n",sum);}運(yùn)行結(jié)果:sum=5050循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第16頁(yè)
for語(yǔ)句注意事項(xiàng):
(1)表示式1、表示式2、和表示式3能夠是任何類型表示式。比喻說(shuō),這三個(gè)表示式都能夠是逗號(hào)表示式,即每個(gè)表示式都可由多個(gè)表示式組成。
例:計(jì)算1*2+3*4+5*6+…+99*100。
inti,j;longsum=0;for(i=1,j=2;i<=99;i=i+2,j=j+2)sum+=i*j;printf("sum=%ld\n",sum);逗號(hào)表示式逗號(hào)表示式循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第17頁(yè)
(2)表示式1、表示式2、和表示式3都是任選項(xiàng),能夠省掉其中一個(gè)、兩個(gè)或全部,但其用于間隔分號(hào)是一個(gè)也不能省。#include<stdio.h>voidmain(){inti,sum=0;i=1;for(;i<=100;i++)sum+=i;printf("sum=%d\n",sum);}#include<stdio.h>voidmain(){inti,sum=0;i=1;for(;i<=100;)sum+=i++;printf("sum=%d\n",sum);}
for語(yǔ)句注意事項(xiàng):省掉表示式1,3省掉表示式1#include<stdio.h>voidmain(){inti,sum=0;i=1;for(;;){if(i>100)break;sum+=i++;}printf("sum=%d\n",sum);}省掉表示式1,2,3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第18頁(yè)
for語(yǔ)句注意事項(xiàng):for(a=1;;a++)printf("&d\n",a);
(3)表示式2假如為空則相當(dāng)于表示式2值是真。死循環(huán)!
(4)循環(huán)體中語(yǔ)句可為任意類型C語(yǔ)句。
(5)for語(yǔ)句也能夠組成多重循環(huán),而且也能夠和while語(yǔ)句和do-while語(yǔ)句相互嵌套。
(6)循環(huán)體能夠是空語(yǔ)句。例:計(jì)算用戶輸入字符數(shù)(當(dāng)輸入是回車符時(shí)統(tǒng)計(jì)結(jié)束)。
#include<stdio.h>voidmain(){intn=0;printf("inputastring:\n");for(;getchar()!='\n';n++);
printf("%d",n);}表示循環(huán)體為空語(yǔ)句,并非表示for語(yǔ)句結(jié)束循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第19頁(yè)三種循環(huán)可相互嵌套,層數(shù)不限外層循環(huán)可包含兩個(gè)以上內(nèi)循環(huán),但不能相互交叉嵌套循環(huán)執(zhí)行流程(1)while(){……while(){……}…...}(2)do{……do{……}while();…...}while();(3)while(){……do{……}while();…….}嵌套循環(huán)跳轉(zhuǎn)禁止:從外層跳入內(nèi)層跳入同層另一循環(huán)向上跳轉(zhuǎn)4.循環(huán)嵌套(4)for(;;){……do{……}while();……while(){……}…...}外循環(huán)內(nèi)循環(huán)內(nèi)循環(huán)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第20頁(yè)【例】循環(huán)嵌套,輸出九九表1234567891234567892468101214161836912151821242791827364554637281……………..ij#include<stdio.h>voidmain(){inti,j;for(i=1;i<10;i++)printf("%4d",i);printf("\n---------------------------------------\n");for(i=1;i<10;i++)for(j=1;j<10;j++)printf((j==9)?"%4d\n":"%4d",i*j);}循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第21頁(yè)i<10printf假(0)真(非0)i=1j++j=1j<10真(非0)假(0)i++外循環(huán)內(nèi)循環(huán)for(i=1;i<10;i++)for(j=1;j<10;j++)printf((j==9)?"%4d\n":"%4d",i*j);循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第22頁(yè)5.break與continue語(yǔ)句
break語(yǔ)句功效:在循環(huán)語(yǔ)句和switch語(yǔ)句中,終止并跳出循環(huán)體或開關(guān)體說(shuō)明:(1)break不能用于循環(huán)語(yǔ)句和switch語(yǔ)句之外任何其它語(yǔ)句之中。(2)break只能終止并跳出最近一層結(jié)構(gòu)。while(表示式1){
……if(表示式2)break;……}語(yǔ)句……do{
……if(表示式2)break;……}while(表示式1);語(yǔ)句……for(;表示式1;){……if(表示式2)break;……}語(yǔ)句……循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第23頁(yè)【例】將用戶輸入小寫字母轉(zhuǎn)換成大寫字母,直到輸入非小寫字母字符。
#include<stdio.h>voidmain(){charc;while(1){c=getchar();//讀取一個(gè)字符
if(c>='a'&&c<='z')//是小寫字母
putchar(c-'a'+'A');//輸出其大寫字母
else//不是小寫字母
break;
//循環(huán)退出
}}運(yùn)行結(jié)果:howareyou↙HOWAREYOU
循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第24頁(yè)
方法:經(jīng)過(guò)設(shè)置一標(biāo)志變量tag,然后在每層循環(huán)后加上一條語(yǔ)句:if(tag)break;
其值為1表示跳出循環(huán)體,為0則不跳出。for(…){while(…){……if(…)break;…}while循環(huán)后第一條語(yǔ)句}inttag=0;for(…){while(…){……if(…){tag=1;break;}……}if(tag)break;……}for循環(huán)后第一條語(yǔ)句
多重循環(huán)中,break使用問(wèn):在嵌套循環(huán)情況下,怎樣讓break語(yǔ)句跳出最外層循環(huán)體?循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第25頁(yè)continue語(yǔ)句功效:結(jié)束此次循環(huán),跳過(guò)循環(huán)體中還未執(zhí)行語(yǔ)句,進(jìn)行下一次是否執(zhí)行循環(huán)體判斷。說(shuō)明:(1)僅用于循環(huán)語(yǔ)句中。(2)在嵌套循環(huán)情況下,continue語(yǔ)句只對(duì)包含它最內(nèi)層循環(huán)體語(yǔ)句起作用。for(…){while(…){……if(…)continue;……}while循環(huán)后第一條語(yǔ)句}循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第26頁(yè)【例】求輸入十個(gè)整數(shù)中正數(shù)個(gè)數(shù)及其平均值。#include<stdio.h>voidmain(){inti,a,num=0;floatsum=0;for(i=0;i<10;i++){scanf("%d",&a);//輸入一整數(shù)
if(a<=0)continue;
//假如為負(fù),則輸入下一個(gè)整數(shù)
num++;//正數(shù)個(gè)數(shù)增1sum+=a;//正數(shù)和累加
}printf("%dplusinteger'ssum:%.0f\n",num,sum);printf("averagevalue:%.2f\n",sum/num);}運(yùn)行結(jié)果:8plusinteger'ssum:45averagevalue:5.63假設(shè)輸入10個(gè)整數(shù)為:123–45–678910
循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第27頁(yè)5.goto語(yǔ)句
普通形式:
goto語(yǔ)句標(biāo)號(hào);……語(yǔ)句標(biāo)號(hào):……語(yǔ)句標(biāo)號(hào):…………goto語(yǔ)句標(biāo)號(hào);或說(shuō)明:
語(yǔ)句標(biāo)號(hào)是按標(biāo)識(shí)符要求書寫符號(hào),放在某一語(yǔ)句行前面,標(biāo)號(hào)后加冒號(hào)(:)。語(yǔ)句標(biāo)號(hào)起標(biāo)識(shí)語(yǔ)句作用,與goto語(yǔ)句配合使用。
作用:
goto語(yǔ)句作用是在不需要任何條件情況下直接使程序跳轉(zhuǎn)到該語(yǔ)句標(biāo)號(hào)所標(biāo)識(shí)語(yǔ)句去執(zhí)行。
循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第28頁(yè)
(1)goto語(yǔ)句可與條件語(yǔ)句配合使用來(lái)實(shí)現(xiàn)條件轉(zhuǎn)移,組成循環(huán)。
(2)在嵌套循環(huán)情況下,利用goto語(yǔ)句能夠直接從最內(nèi)層循環(huán)體跳出最外層循環(huán)體。
goto語(yǔ)句應(yīng)用:例:求1~100累計(jì)和
#include<stdio.h>voidmain(){inti=1,sum=0;
loop:sum+=i++;if(i<=100)//假如i小于或等于100
gotoloop;
//轉(zhuǎn)到標(biāo)號(hào)為loop語(yǔ)句去執(zhí)行
printf("sum=%d\n",sum);}inttag=0;for(…){while(…){……if(…)gotostop;……}……}stop:for循環(huán)后第一條語(yǔ)句
注意:在結(jié)構(gòu)化程序設(shè)計(jì)中普通不主張使用goto語(yǔ)句,以免造成程序流程混亂,使了解和調(diào)試程序都產(chǎn)生困難。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第29頁(yè)6.exit()函數(shù)
功效:說(shuō)明:參數(shù)status為int型,status值傳給調(diào)用進(jìn)程(普通為操作系統(tǒng))。按照通例,當(dāng)status值為0或?yàn)楹瓿A縀XIT_SUCCESS時(shí),表示程序正常退出;當(dāng)status值為非0或?yàn)楹瓿A縀XIT_FAILURE時(shí),表示程序出現(xiàn)某種錯(cuò)誤后退出。
終止整個(gè)程序執(zhí)行,強(qiáng)制返回操作系統(tǒng)。
調(diào)用形式:voidexit(intstatus);頭文件
<stdlib.h>循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第30頁(yè)程序設(shè)計(jì)分析:由數(shù)學(xué)知識(shí)可知,求三角形面積公式是:其中,a、b、c是三角形三個(gè)邊長(zhǎng),s=(a+b+c)/2。所以,程序中應(yīng)該有三個(gè)float型變量用來(lái)存放a、b、c值,為了方便起見,還應(yīng)有一個(gè)變量存放s,最終有必要設(shè)置一個(gè)變量來(lái)存放三角形面積值。公式中存在求平方根操作,這要用到C語(yǔ)言數(shù)學(xué)庫(kù)函數(shù)sqrt。sqrt函數(shù)帶有一個(gè)參數(shù),它功效是返回參數(shù)平方根。程序在開始接收用戶輸入三角形三個(gè)邊長(zhǎng)后,首先要對(duì)這三邊作正當(dāng)性檢驗(yàn),如三邊中有某一邊長(zhǎng)度小于或等于0,則終止程序執(zhí)行,一樣假如s*(s-a)*(s-b)*(s-c)為負(fù),也要終止程序執(zhí)行?!纠?/p>
輸入三角形邊長(zhǎng),求三角形面積。
#include<stdio.h>#include<stdlib.h>#include<math.h>voidmain(){floata,b,c;floats,area;printf("inputthelengthofthreeedgesoftriangle:");scanf("%f%f%f",&a,&b,&c);if(a<=0||b<=0||c<=0){printf("thelengthofthreeedgesoftriangleiserror!\n");
exit(-1);}
s=(a+b+c)/2;s=s*(s-a)*(s-b)*(s-c);if(s<0){printf("thelengthofthreeedgesoftriangleiserror!\n");
exit(-1);}area=(float)sqrt(s);printf("area=%.2f\n",area);}運(yùn)行結(jié)果:inputthelengthofthreeedgesoftriangle:345↙area=6.00inputthelengthofthreeedgesoftriangle:3-45↙thelengthofthreeedgesoftriangleiserror!循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第31頁(yè)6.2循環(huán)結(jié)構(gòu)類型選擇及轉(zhuǎn)換
1.循環(huán)結(jié)構(gòu)類型選擇標(biāo)準(zhǔn)假如循環(huán)次數(shù)在執(zhí)行循環(huán)體之前就已確定,普通用for循環(huán);假如循環(huán)次數(shù)是由循環(huán)體執(zhí)行情況確定,普通用while循環(huán)或者do-while循環(huán)。當(dāng)循環(huán)體最少執(zhí)行一次時(shí),用do-while循環(huán),反之,假如循環(huán)體可能一次也不執(zhí)行,選取while循環(huán)。2.循環(huán)結(jié)構(gòu)類型之間相互轉(zhuǎn)換盡管上面對(duì)于循環(huán)結(jié)構(gòu)選擇給出了標(biāo)準(zhǔn)性指導(dǎo)意見,不過(guò)我們應(yīng)注意到其實(shí)這三種循環(huán)結(jié)構(gòu)彼此之間能夠相互轉(zhuǎn)換,象前面我們分別用while循環(huán)、do-while循環(huán)、for循環(huán)來(lái)求1~100累計(jì)和例子就說(shuō)明了這一點(diǎn)。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第32頁(yè)【例】求1~100之間全部素?cái)?shù)
問(wèn)題分析:
素?cái)?shù)是指除了能被1和它本身整除外,不能被其它任何整數(shù)整除數(shù)。比如,17就是一個(gè)素?cái)?shù),除了1和17之外,它不能被2~16之間任何整數(shù)整除。依據(jù)素?cái)?shù)這個(gè)定義,可得到判斷素?cái)?shù)方法:把m作為被除數(shù),把i=2~(m-1)依次作為除數(shù),判斷被除數(shù)m與除數(shù)i相除結(jié)果,若都除不盡,即余數(shù)都不為0,則說(shuō)明m是素?cái)?shù),反之,只要有一次能除盡(余數(shù)為0),則說(shuō)明m存在一個(gè)1和它本身以外另一個(gè)因子,它不是素?cái)?shù)。實(shí)際上,根本用不著除那么屢次,用數(shù)學(xué)方法能夠證實(shí):只需用2~之間(取整數(shù))數(shù)去除m,即可得到正確判定結(jié)果。
這一思緒算法以下:從鍵盤輸入一正整數(shù)m。計(jì)算k=i從2改變到k,依次檢驗(yàn)m%i是否為0。若m%i為0,則判定m不是素?cái)?shù),并終止對(duì)其余i值檢驗(yàn);不然,令i=i+1;并繼續(xù)對(duì)其余i值進(jìn)行檢驗(yàn),直到全部檢驗(yàn)完成為止,這時(shí)判定m是素?cái)?shù)。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第33頁(yè)#include<stdio.h>#include<math.h>voidmain(){intm,i,k;printf("inputanumber:“);scanf("%d",&m);
k=sqrt(m);i=2;
while(i<=k)
{if(m%i==0)break;i++;}if(i>k)printf("yes\n");elseprintf("no\n");}while循環(huán)#include<stdio.h>#include<math.h>voidmain(){intm,i,k;printf("inputanumber:“);scanf("%d",&m);k=sqrt(m);
for(i=2;i<=k;i++)if(m%i==0)break;if(i>k)printf("yes\n");elseprintf("no\n");}for循環(huán)#include<stdio.h>#include<math.h>voidmain(){intm,i,k;printf("inputanumber:“);scanf("%d",&m);
k=sqrt(m);i=2;
do
{if(m%i==0)break;i++;}while(i<=k);
if(i>k)printf("yes\n");elseprintf("no\n");}do_while循環(huán)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第34頁(yè)6.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例
【例1】驗(yàn)證哥德巴赫猜測(cè):任一充分大偶數(shù),能夠用兩個(gè)素?cái)?shù)之和表示。比如:4=2+2,6=3+3,98=19+79這一思緒算法以下:讀入大于3偶數(shù)n。
p=1do{p=p+1;q=n-p;p是素?cái)?shù)嗎?
q是素?cái)?shù)嗎?
}whilep、q有一個(gè)不是素?cái)?shù)。輸出n=p+q。問(wèn)題分析:讀入一個(gè)偶數(shù)n,將它分成p和q,使n=p+q。怎樣分呢?能夠令p從2開始,每次加1,而令q=n-p,假如p、q均為素?cái)?shù),則正為所求,不然令p=p+1再試。flagp=1;for(j=2;j<=(int)sqrt(p);j++)if(p除以j余數(shù)=0){flagp=0;break;}
flagq=1;for(j=2;j<=(int)sqrt(q);j++)if(q除以j余數(shù)=0){flagq=0;break;}
設(shè)置兩個(gè)標(biāo)志量flagp和flagq,0—是素?cái)?shù),1—不是素?cái)?shù)
}while(flagp*flagq==0);
循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第35頁(yè)#include<stdio.h>#include<stdlib.h>#include<math.h>voidmain(){inti,n,p,q,flagp,flagq;printf("pleaseinputn:");scanf("%d",&n);//輸入一偶數(shù)
if(n<4||n%2!=0)//假如該數(shù)不是偶數(shù)
{printf("inputdataerror!\n");exit(-1);//程序結(jié)束
}
p=1;
do{p++;q=n-p;flagp=1;for(i=2;i<=(int)sqrt(p);i++){if(p%i==0){flagp=0;break;}}flagq=1;for(i=2;i<=(int)sqrt(q);i++){if(q%i==0){flagq=0;break;}}}while(flagp*flagq==0);printf("%d=%d+%d\n",n,p,q);}判斷p是否為素?cái)?shù)
判斷q是否為素?cái)?shù)
運(yùn)行結(jié)果:pleaseinputn:98↙98=19+79pleaseinputn:9↙inputdataerror!循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第36頁(yè)
【例】利用下面公式求π近似值,要求累加到最終一項(xiàng)小于10-6為止。問(wèn)題分析:這是一個(gè)累加求和問(wèn)題,但這里循環(huán)次數(shù)是預(yù)先未知,而且累加項(xiàng)以正負(fù)交替規(guī)律出現(xiàn),怎樣處理這類問(wèn)題呢?在本例中,累加項(xiàng)組成規(guī)律可用尋找累加項(xiàng)通式方法得到,詳細(xì)表示為t=s/n;即累加項(xiàng)由分子和分母兩部分組成,分子s按+1,-1,+1,-1,…交替改變,可用賦值語(yǔ)句s=-s;實(shí)現(xiàn),s初始值取為1,分母n按1,3,5,7,…改變,用n=n+2;語(yǔ)句實(shí)現(xiàn)即可,n初始值取為1.0。#include<stdio.h>#include<math.h>voidmain(){ints=1;floatn=1.0,t=1,pi=0;while(fabs(t)>=1e-6){pi+=t;n+=2;s=-s;t=s/n;}pi*=4;printf("pi=%.6f\n",pi);}運(yùn)行結(jié)果:pi=3.141594循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第37頁(yè)
【例】打印大小可變菱形圖案(下面菱形大小是7)。
﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡問(wèn)題分析:菱形大小size其實(shí)就是中間行中*號(hào)個(gè)數(shù),也是整個(gè)菱形行數(shù),其值必須是奇數(shù)。
問(wèn)題關(guān)鍵之一是怎樣確定每行中*號(hào)個(gè)數(shù)。經(jīng)過(guò)分析得知:當(dāng)行數(shù)i(假設(shè)最上面一行為第1行)≦(size+1)/2時(shí),該行上*號(hào)個(gè)數(shù)為n=2*i-1,不然n=2*(size-i+1)-1。
問(wèn)題關(guān)鍵之二是怎樣確定每行顯示第一個(gè)*號(hào)位置,也就是顯示第一個(gè)*號(hào)之前應(yīng)顯示多少個(gè)空格。經(jīng)過(guò)分析得知:每行應(yīng)顯示空格數(shù)為m=(size-n)/2個(gè)。
#include<stdio.h>#include<stdlib.h>voidmain(){inti,j,k,m,n,size;printf("inputsize:");//輸入大小提醒
scanf(“%d”,&size);//輸入大小
//假如為小于或等于0數(shù)或?yàn)榕紨?shù)
if(size<=0||size%2==0){printf("thesizeiserror!\n");exit(-1);//程序結(jié)束
}
for(i=1;i<=size;i++)//控制行數(shù)
{n=(i<=(size+1)/2)?i:size-i+1;//每行中"*"號(hào)個(gè)數(shù)
n=2*n-1;m=(size-n)/2+15;//每行打印"*"之前應(yīng)打印空格數(shù)
for(k=1;k<=m;k++)//打印每行前面空格
printf("");for(j=1;j<=n;j++)//打印每行"*"printf("*");printf("\n");//打印一行后,回車換行
}}循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第38頁(yè)
【例】計(jì)算用戶輸入兩正整數(shù)之間全部整數(shù)中0,1,2,…,9數(shù)碼個(gè)數(shù)。比如,101~104之間總共包含四個(gè)整數(shù)101,102,103,104,其中0個(gè)數(shù)為4,1個(gè)數(shù)為5,2、3、4個(gè)數(shù)都為1,其余數(shù)碼沒(méi)出現(xiàn)都為0。問(wèn)題分析:?jiǎn)栴}關(guān)鍵是要計(jì)算某整數(shù)中包含各個(gè)數(shù)碼個(gè)數(shù),必須對(duì)該整數(shù)進(jìn)行分解,求得所包含各個(gè)數(shù)碼,其方法能夠經(jīng)過(guò)每次除以10取余數(shù)得到,然后再對(duì)商進(jìn)行一樣處理,直到商為0時(shí)為止。對(duì)所得到數(shù)碼進(jìn)行計(jì)數(shù),可采取switch語(yǔ)句來(lái)實(shí)現(xiàn)。#include<stdio.h>#include<stdlib.h>voidmain(){intnum1,num2;intn,s,r;intcount0=0,count1=0,count2=0,count3=0,count4=0;intcount5=0,count6
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版美團(tuán)騎手個(gè)人信息保護(hù)及隱私權(quán)合同4篇
- 2025年度虛擬貨幣代持協(xié)議模板4篇
- 2025年度綠色環(huán)保型土石方工程承包合同協(xié)議2篇
- 2025年度文化產(chǎn)品出口銷售合同(含版權(quán)保護(hù))4篇
- 2025年度物流倉(cāng)儲(chǔ)管理承運(yùn)商合作協(xié)議范本4篇
- 二零二五年度網(wǎng)紅餐飲店品牌授權(quán)合同4篇
- 曹縣建筑加固施工方案
- 2025年度校園食堂廚師臨時(shí)用工服務(wù)合同范本4篇
- 二零二五版建筑門窗安裝與節(jié)能減排服務(wù)協(xié)議4篇
- 基于2025年度的供應(yīng)合同標(biāo)的、供應(yīng)數(shù)量與質(zhì)量標(biāo)準(zhǔn)3篇
- 觸發(fā)點(diǎn)療法:精準(zhǔn)解決身體疼痛的肌筋膜按壓療法
- 化膿性中耳炎
- 探析小學(xué)語(yǔ)文教學(xué)中融合思政教育的課堂教學(xué)
- 醫(yī)學(xué)科研誠(chéng)信專項(xiàng)教育整治簡(jiǎn)潔工作總結(jié)范文
- 班主任班級(jí)管理經(jīng)驗(yàn)分享PPT
- 小學(xué)英語(yǔ)單詞匯總大全打印
- 衛(wèi)生健康系統(tǒng)安全生產(chǎn)隱患全面排查
- GB/T 15114-2023鋁合金壓鑄件
- 2023年考研考博-考博英語(yǔ)-武漢大學(xué)考試歷年真題摘選含答案解析
- 貨物驗(yàn)收單表格模板
- MT/T 323-1993中雙鏈刮板輸送機(jī)用刮板
評(píng)論
0/150
提交評(píng)論