




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)
學(xué)習(xí)的意義
語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C
許多實(shí)際問題中往往需要有規(guī)律地重復(fù)某些操作,如菜譜中可以有:“打雞蛋直到泡沫狀”這樣的步驟,也就是說,在雞蛋沒有打成泡沫狀時(shí)要反復(fù)地打。相應(yīng)的操作在計(jì)算機(jī)程序中就體現(xiàn)為某些語句的重復(fù)執(zhí)行,這就時(shí)所謂的循環(huán)。
下面來思考一個(gè)問題:如何編程來計(jì)算1+2+3+…+100?程序如下:ints=0;s=s+1;s=s+2;s=s+3;
……s=s+100;printf(“s=%d”,s);有沒有更好的方法來計(jì)算呢?有!就是用循環(huán)來編程。While、do-while、for語句循環(huán)嵌套
Break、continue語句循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例本講小結(jié)學(xué)習(xí)目標(biāo)
理解循環(huán)結(jié)構(gòu)的含義;掌握C語言三種循環(huán)結(jié)構(gòu)的特點(diǎn);掌握while、do-while、for、break、continue語句的使用方法;握混合控制結(jié)構(gòu)程序設(shè)計(jì)的方法。
學(xué)習(xí)內(nèi)容
語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C循環(huán)結(jié)構(gòu)的程序設(shè)計(jì)
1.while語句語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C
一般形式:while(表達(dá)式)
循環(huán)體語句;
執(zhí)行流程:F
T表達(dá)式循環(huán)體while其中:
while后面的括號(hào)()不能省。
while后面的表達(dá)式可以是任意類型的表達(dá)式,但一般是條件表達(dá)式或邏輯表達(dá)式。表達(dá)式的值是循環(huán)的控制條件。語句部分稱為循環(huán)體,當(dāng)需要執(zhí)行多條語句時(shí),應(yīng)使用復(fù)合語句。
特點(diǎn):先判斷表達(dá)式,再執(zhí)行循環(huán)體語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C【例】用while語句求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【例】顯示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語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C(1)如果while后的表達(dá)式的值一開始就為假,循環(huán)體將一次也不執(zhí)行。
(2)循環(huán)體中的語句可為任意類型的C語句。
(3)遇到下列情況,退出while循環(huán):
表達(dá)式為假(為0)。循環(huán)體內(nèi)遇到break語句。語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)Cwhile語句注意事項(xiàng):inta=0,b=0;while(a>0)//a>0為假,b++不可能執(zhí)行
b++;(4)在執(zhí)行while語句之前,循環(huán)控制變量必須初始化,否則執(zhí)行的結(jié)果將是不可預(yù)知的。
(5)要在while語句的某處(表達(dá)式或循環(huán)體內(nèi))改變循環(huán)控制變量,否則極易構(gòu)成死循環(huán)。
(6)允許while語句的循環(huán)體又是while語句,從而形成雙重循環(huán)。
語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)Cwhile語句注意事項(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)閕的值沒變化,永遠(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++;}【例】求兩個(gè)正整數(shù)的最大公因子。
我們采用Euclid(歐幾里德)算法來求最大公因子,其算法是:
(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語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C2.do_while語句語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C
一般形式:do
循環(huán)體語句;while(表達(dá)式);
執(zhí)行流程:其中:
while后面的括號(hào)()不能省。
while最后面的分號(hào);不能省。
while后面的表達(dá)式可以是任意類型的表達(dá)式,但一般是條件表達(dá)式或邏輯表達(dá)式。表達(dá)式的值是循環(huán)的控制條件。語句部分稱為循環(huán)體,當(dāng)需要執(zhí)行多條語句時(shí),應(yīng)使用復(fù)合語句。
F
T表達(dá)式循環(huán)體dowhile特點(diǎn):先執(zhí)行循環(huán)體,再判斷表達(dá)式語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C【例】用do_while語句求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語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)Cdo_while語句注意事項(xiàng):inta=0,b=0;dob++;while(a>0);
(1)如果do-while后的表達(dá)式的值一開始就為假,循環(huán)體還是要執(zhí)行一次。
(2)在if語句、while語句中,表達(dá)式后面都不能加分號(hào),而在do-while語句的表達(dá)式后面則必須加分號(hào),否則將產(chǎn)生語法錯(cuò)誤。
(3)循環(huán)體中的語句可為任意類型的C語句。
(4)和while語句一樣,在使用do-while語句時(shí),不要忘記初始化循環(huán)控制變量,否則執(zhí)行的結(jié)果將是不可預(yù)知的。
(5)要在do-while語句的某處(表達(dá)式或循環(huán)體內(nèi))改變循環(huán)控制變量的值,否則極易構(gòu)成死循環(huán)。
(6)do-while語句也可以組成多重循環(huán),而且也可以和while語句相互嵌套。3.for語句語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C
一般形式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
循環(huán)體語句;
執(zhí)行流程:其中:
for后面的括號(hào)()不能省。
表達(dá)式1:一般為賦值表達(dá)式,給控制變量賦初值。
表達(dá)式2:關(guān)系表達(dá)式或邏輯表達(dá)式,循環(huán)控制條件。
表達(dá)式3:一般為賦值表達(dá)式,給控制變量增量或減量。表達(dá)式之間用分號(hào)分隔。語句部分稱為循環(huán)體,當(dāng)需要執(zhí)行多條語句時(shí),應(yīng)使用復(fù)合語句。FT表達(dá)式2循環(huán)體for表達(dá)式1表達(dá)式3for語句很好地體現(xiàn)了正確表達(dá)循環(huán)結(jié)構(gòu)應(yīng)注意的三個(gè)問題:控制變量的初始化。循環(huán)的條件。循環(huán)控制變量的更新。語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C【例】用for語句求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語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)Cfor語句注意事項(xiàng):例:計(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);(1)表達(dá)式1、表達(dá)式2、和表達(dá)式3可以是任何類型的表達(dá)式。比方說,這三個(gè)表達(dá)式都可以是逗號(hào)表達(dá)式,即每個(gè)表達(dá)式都可由多個(gè)表達(dá)式組成。
逗號(hào)表達(dá)式逗號(hào)表達(dá)式#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);}語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)Cfor語句注意事項(xiàng):省掉表達(dá)式1,3省掉表達(dá)式1
(2)表達(dá)式1、表達(dá)式2、和表達(dá)式3都是任選項(xiàng),可以省掉其中的一個(gè)、兩個(gè)或全部,但其用于間隔的分號(hào)是一個(gè)也不能省的。#include<stdio.h>voidmain(){inti,sum=0;i=1;for(;;){if(i>100)break;sum+=i;
i++;}printf("sum=%d\n",sum);}省掉表達(dá)式1,2,3語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)Cfor語句注意事項(xiàng):for(a=1;;a++)printf("&d\n",a);(3)表達(dá)式2如果為空則相當(dāng)于表達(dá)式2的值是真。死循環(huán)!(4)循環(huán)體中的語句可為任意類型的C語句。
(5)for語句也可以組成多重循環(huán),而且也可以和while語句和do-while語句相互嵌套。
(6)循環(huán)體可以是空語句。例:計(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)體為空語句,并非表示for語句結(jié)束【例】循環(huán)嵌套,輸出九九乘法表語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C#include<stdio.h>voidmain(){inti,j;for(i=1;i<10;i++)
{
for(j=1;j<=i;j++)printf(“%d*%d=%d”,i,j,i*j);
printf(“\n”);
}}語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C5.break與continue語句
break語句功能:在循環(huán)語句和switch語句中,終止并跳出循環(huán)體或開關(guān)體說明:(1)break不能用于循環(huán)語句和switch語句之外的任何其它語句之中。(2)break只能終止并跳出最近一層的結(jié)構(gòu)。while(表達(dá)式1){
……if(表達(dá)式2)break;……}語句……do{
……if(表達(dá)式2)break;……}while(表達(dá)式1);語句……for(;表達(dá)式1;){……if(表達(dá)式2)break;……}語句……語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C【例】將用戶輸入的小寫字母轉(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
語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C
方法:通過設(shè)置一標(biāo)志變量tag,然后在每層循環(huán)后加上一條語句:if(tag)break;
其值為1表示跳出循環(huán)體,為0則不跳出。for(…){while(…){……if(…)break;…}while循環(huán)后的第一條語句}inttag=0;for(…){while(…){……if(…){tag=1;break;}……}if(tag)break;……}for循環(huán)后的第一條語句
多重循環(huán)中,break的使用問:在嵌套循環(huán)的情況下,如何讓break語句跳出最外層的的循環(huán)體?語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)Ccontinue語句功能:結(jié)束本次循環(huán),跳過循環(huán)體中尚未執(zhí)行的語句,進(jìn)行下一次是否執(zhí)行循環(huán)體的判斷。說明:(1)僅用于循環(huán)語句中。(2)在嵌套循環(huán)的情況下,continue語句只對(duì)包含它的最內(nèi)層的循環(huán)體語句起作用。for(…){while(…){……if(…)continue;……
}while循環(huán)后的第一條語句}語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C【例】求輸入的十個(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
語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C【例】求1~100之間的所有素?cái)?shù)
問題分析:
素?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,則說明m是素?cái)?shù),反之,只要有一次能除盡(余數(shù)為0),則說明m存在一個(gè)1和它本身以外的另一個(gè)因子,它不是素?cái)?shù)。事實(shí)上,根本用不著除那么多次,用數(shù)學(xué)的方法可以證明:只需用2~之間(取整數(shù))數(shù)去除m,即可得到正確的判定結(jié)果。
這一思路的算法如下:從鍵盤輸入一正整數(shù)m。計(jì)算k=i從2變化到k,依次檢查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ù)。#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)語言程序設(shè)計(jì)第三章之循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C#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ì)舉例
語言程序設(shè)計(jì)第三章之循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C【例1】驗(yàn)證哥德巴赫猜想:任一充分大的偶數(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。問題分析:讀入一個(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,1—是素?cái)?shù),0—不是素?cái)?shù)
}while(flagp*flagq==0);
語言程序設(shè)計(jì)第三章之循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C#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");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!語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C【例】利用下面的公式求π的近似值,要求累加到最后一項(xiàng)小于10-6為止。問題分析:這是一個(gè)累加求和的問題,但這里的循環(huán)次數(shù)是預(yù)先未知的,而且累加項(xiàng)以正負(fù)交替的規(guī)律出現(xiàn),如何解決這類問題呢?在本例中,累加項(xiàng)的構(gòu)成規(guī)律可用尋找累加項(xiàng)通式的方法得到,具體表示為t=s/n;即累加項(xiàng)由分子和分母兩部分組成,分子s按+1,-1,+1,-1,…交替變化,可用賦值語句s=-s;實(shí)現(xiàn),s的初始值取為1,分母n按1,3,5,7,…變化,用n=n+2;語句實(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語言程序設(shè)計(jì)第三章之循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C【例】打印大小可變的菱形圖案(下面菱形的大小是7)。
﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡問題分析:菱形的大小size其實(shí)就是中間行中*號(hào)的個(gè)數(shù),也是整個(gè)菱形的行數(shù),其值必須是奇數(shù)。
問題的關(guān)鍵之一是如何確定每行中*號(hào)的個(gè)數(shù)。經(jīng)過分析得知:當(dāng)行數(shù)i(假設(shè)最上面的一行為第1行)≦(size+1)/2時(shí),該行上的*號(hào)個(gè)數(shù)為n=2*i-1,否則n=2*(size-i+1)-1。
問題的關(guān)鍵之二是如何確定每行顯示的第一個(gè)*號(hào)的位置,也就是顯示第一個(gè)*號(hào)之前應(yīng)顯示多少個(gè)空格。經(jīng)過分析得知:每行應(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");//打印一行后,回車換行
}}語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C【例】計(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ù)碼沒出現(xiàn)都為0。問題分析:?jiǎn)栴}的關(guān)鍵是要計(jì)算某整數(shù)中包含的各個(gè)數(shù)碼的個(gè)數(shù),必須對(duì)該整數(shù)進(jìn)行分解,求得所包含的各個(gè)數(shù)碼,其方法可以通過每次除以10取余數(shù)得到,然后再對(duì)商進(jìn)行同樣的處理,直到商為0時(shí)為止。對(duì)所得到的數(shù)碼進(jìn)行計(jì)數(shù),可采用switch語句來實(shí)現(xiàn)。#include<stdio.h>voidmain(){intnum1,num2;intn,s,r;intcount0=0,count1=0,count2=0,count3=0,count4=0;intcount5=0,count6=0,count7=0,count8=0,count9=0;printf("inputtwointeger:");scanf("%d%d",&num1,&num2);if(num1<0||num2<0||num1>num2)printf("inputerror!\n");for(n=num1;n<=num2;n++){s=n;do{r=s%10;switch(r){case0:count0++;break;case1:count1++;break;case2:count2++;break;case3:count3++;break;case4:count4++;break;case5:count5++;break;case6:count6++;break;case7:count7++;break;case8:count8++;break;case9:count9++;break;}s=s/10;}while(s!=0);}//forprintf("0--%-4d1--%-4d2--%-4d3--%-4d\n",count0,count1,count2,count3);printf("4--%-4d5--%-4d6--%-4d7--%-4d\n",count4,count5,count6,count7);printf("8--%-4d9--%-4d\n",count8,count9);}運(yùn)行結(jié)果:inputtwointeger:15003000↙0–4031–9002–14003–4014–4005–5006–5007–5008–5009–500語言程序設(shè)計(jì)第三章之循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C
本講小結(jié)
本章主要討論了循環(huán)結(jié)構(gòu)程序設(shè)計(jì)的有關(guān)方法,重點(diǎn)介紹了與C語言三種循環(huán)控制結(jié)構(gòu)有關(guān)的while語句、do-while語句及for語句。本章所涉及到的主要關(guān)鍵字有:while、do、for、break、continue。C語言提供了三種循環(huán)語句。三種循環(huán)語句可以相互嵌套組成多重循環(huán),循環(huán)之間可以并列但不能交叉。三種循環(huán)結(jié)構(gòu)可以相互轉(zhuǎn)換??捎棉D(zhuǎn)移語句把流程轉(zhuǎn)出循環(huán)體外,但不能從外面轉(zhuǎn)向循環(huán)體內(nèi)。在循環(huán)程序中應(yīng)避免出現(xiàn)死循環(huán),即應(yīng)保證循環(huán)控制變量的值在運(yùn)行過程中可以得到修改,并使循環(huán)條件逐步變?yōu)榧?,從而結(jié)束循環(huán)。
break、continue都可用于流程控制。其中,break語句用于退出switch或一層循環(huán)結(jié)構(gòu),continue語句用于結(jié)束本次循環(huán)。語言程序設(shè)計(jì)作業(yè)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C1、若有語句intx=2;下面程序段的輸出結(jié)果是___________。for(x=3;x<6;x++){printf((x%2)?”**%d”:”##%d\n”,x);}A)**3B)##3C)##3D)**3##4##4**4**4##5**5**5##5一、選擇題二、寫出下面程序段的輸出結(jié)果。(1)main(){inta=2,b=3,c=1;if(a>b)if(a>c)printf("%d\n",a);elseprintf("%d\n",b);printf("It'sOK!\n");}DIt'sOK!語言程序設(shè)計(jì)作業(yè)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C(2)若從終端上由第一列開始輸入數(shù)據(jù):right?,則程序的輸出結(jié)果是__________。#include"stdio.h"main(){charc;c=getchar();while(c!='?'){putchar(c);c=getchar();}}(3)若從終端上由第一列開始輸入數(shù)據(jù):right?,則程序的輸出結(jié)果是__________。#include”stdio.h”main(){charc;while((c=getchar())!=’?’){putchar(c);}}rightright語言程序設(shè)計(jì)作業(yè)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C(4)若從終端上由第一列開始輸入數(shù)據(jù):right?,則程序的輸出結(jié)果是__________。#include”stdio.h”main(){charc;while((c=getchar())!='\n')putchar(c);printf("End!\n");}(5)下面程序的運(yùn)行結(jié)果是_______________________。#include<stdio.h>main(){inti,j,k;charspace='';for(i=1;i<=4;i++){for(j=1;j<=i;j++)printf("%c",space);for(k=1;k<=6;k++)printf("*");printf("\n");}}right?End!************************語言程序設(shè)計(jì)作業(yè)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C(6)下面程序的運(yùn)行結(jié)果是_______________________。#include<stdio.h>main(){intn;
for(n=1;n<=5;n++){if(n%2)printf("*");elsecontinue;printf("#");}printf("$\n");}*#*#*#$語言程序設(shè)計(jì)作業(yè)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C1、編程計(jì)算1-2+3-4+5-6+7+…+99-100的值。2、編程計(jì)算3×4×5+…+99×100×101的值。3
、編程計(jì)算1!+3!+5!+7!+9!+11!的值。4
、利用泰勒級(jí)數(shù)cos(x)≈計(jì)算cos(x)的值。要求最后一項(xiàng)的絕對(duì)值小于10-6,并統(tǒng)計(jì)出此時(shí)累加了多少項(xiàng)。5、打印所有的“水仙花數(shù)”。所謂“水仙花數(shù)”,是指一個(gè)三位數(shù),其各位數(shù)字的立方和等于該數(shù)本身。例如,153是“水仙花數(shù)”,因?yàn)?53=13+33+53。三、編寫以下的程程序語言程序設(shè)計(jì)作業(yè)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C6、從鍵盤上輸入任意正整數(shù),編程判斷該數(shù)是否為回文數(shù)。所謂回文數(shù)就是從左到右
讀這個(gè)數(shù)與從右到左讀這個(gè)數(shù)是一樣的。例如,12321、4004都是回文數(shù)。
【設(shè)計(jì)思想】將該整數(shù)按照從最低位到最高位進(jìn)行分離,然后重新組合成一整數(shù),再將該整數(shù)與原來的整數(shù)比較,如果相等,則為回文數(shù),否則不是。7、一張10元票面的紙鈔兌換成1元、2元或5元的票面,問共有多少種不同的兌換方法?思考題:1.有1020個(gè)西瓜,第一天賣了一半多兩個(gè),以后每天賣剩下的一半多兩個(gè),問幾天以后能賣完。編寫程序求解。2.
有一車西瓜,第一天賣了一半多兩個(gè),以后每天賣剩下的一半多兩個(gè),賣了8天剛好賣完,問共有多少個(gè)西瓜。編寫程序求解。語言程序設(shè)計(jì)作業(yè)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C1、編程計(jì)算1-2+3-4+5-6+7+…+99-100的值。四、編寫以下的程程序#include"stdio.h"main(){intn,s=0;for(n=1;n<=100;n++){if(n%2)s+=n;elses-=n;}printf("1+2+....+99-100=%d\n",s);}語言程序設(shè)計(jì)作業(yè)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C2、編程計(jì)算3×4×5+…+99×100×101的值。#include"stdio.h"main(){longn,s=0;for(n=3;n<=99;n=n+3){s+=n*(n+1)*(n+2);printf("n=%ld\n",n);}printf("3×4×5+6×7×8....+99×100×101=%ld\n",s);}語言程序設(shè)計(jì)作業(yè)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C3、編程計(jì)算1!+3!+5!+7!+9!+11!的值。main(){longk,n,s=0;for(n=1;n<=11;n=n+2){longs1=1;for(k=1;k<=n;k++)s1=s1*k;s+=s1;}printf("1!+3!+5!5+....+11!=%ld\n",s);}語言程序設(shè)計(jì)作業(yè)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C4、利用泰勒級(jí)數(shù)cos(x)≈計(jì)算cos(x)的值。要求最后一項(xiàng)的絕對(duì)值小于10-6,并統(tǒng)計(jì)出此時(shí)累加了多少項(xiàng)。#include"stdio.h"#include"math.h"main(){doublecos=1,x,term=1;intcount=1,n=0; printf("EnteraValueintox,please!");scanf("%lf",&x);printf("x=%lf\n",x);do{term=-term*x*x/((n+1)*(n+2));cos=cos+term;count++;n=n+2;}while(fabs(term)>=1E-6);printf("cos(%lf)=%lf,count=%d\n",x,cos,count);}語言程序設(shè)計(jì)作業(yè)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C5、打印所有的“水仙花數(shù)”。所謂“水仙花數(shù)”,是指一個(gè)三位數(shù),其各位數(shù)字的立方和等于該數(shù)本身。例如,153是“水仙花數(shù)”,因?yàn)?53=13+33+53。#include"stdio.h"main(){inti,j,k,n;for(n=100;n<1000;n++){i=n/100;j=n/10%10;k=n%10;if(i*i*i+j*j*j+k*k*k==n) printf("n=%d\n",n);}}#include"stdio.h"main(){inti,j,k,n;for(i=1;i<10;i++)for(j=0;j<10;j++)for(k=0;k<10;k++){n=i*100+j*10+k;if(i*i*i+j*j*j+k*k*k==n)
printf("n=%d\n",n);}}語言程序設(shè)計(jì)作業(yè)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C6、從鍵盤上輸入任意正整數(shù),編程判斷該數(shù)是否為回文數(shù)。所謂回文數(shù)就是從左到右讀這個(gè)數(shù)與從右到左讀這個(gè)數(shù)是一樣的。例如,12321、4004都是回文數(shù)。#include"stdio.h"main(){longx,y=0,t;printf("inputavalueofx,please!\n");scanf("%ld",&x);t=x;while(t){y=y*10+t%10;t=t/10;}if(x==y)printf("yes\n");elseprintf("No!\n");}語言程序設(shè)計(jì)作業(yè)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C7、一張10元票面的紙鈔兌換成1元、2元或5元的票面,問共有多少種不同的兌換方法?#include"stdio.h"main(){inti,j,k,count=0;for(i=0;i<=10;i++)for(j=0;j<=5;j++)for(k=0;k<=2;k++)if((i+2*j+5*k)==10){printf("i=%d,j=%d,k=%d\n",i,j,k);count++;}printf("cont=%d\n",count);}語言程序設(shè)計(jì)作業(yè)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C思考題:1.有1020個(gè)西瓜,第一天賣
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 財(cái)務(wù)課題申報(bào)書范文
- 課題申報(bào)書高校
- 申報(bào)課題的項(xiàng)目書
- 人文社科研究課題申報(bào)書
- 畜牧養(yǎng)殖課題申報(bào)書
- 課題申報(bào)書項(xiàng)目?jī)?nèi)容
- 課題申報(bào)書人員分工
- 婦科課題立項(xiàng)申報(bào)書
- 橫向科研課題申報(bào)書
- 單縣新房購房合同范例
- 羽毛球比賽對(duì)陣表模板
- 三級(jí)安全培訓(xùn)考試題附答案【滿分必刷】
- 四年級(jí)下冊(cè)語文第二單元 快樂讀書吧:十萬個(gè)為什么 導(dǎo)讀課件
- GB/T 44057-2024回轉(zhuǎn)窯回收次氧化鋅裝備運(yùn)行效果評(píng)價(jià)技術(shù)要求
- 文創(chuàng)產(chǎn)品設(shè)計(jì)-課件
- 風(fēng)電場(chǎng)葉片無人機(jī)巡檢作業(yè)技術(shù)導(dǎo)則
- 工業(yè)廢鹽及副產(chǎn)鹽深度資源化利用項(xiàng)目可行性研究報(bào)告
- 制度機(jī)制風(fēng)險(xiǎn)點(diǎn)及防控措施3篇
- 管道鈍化方案
- “小小科學(xué)家”廣東省少年兒童科學(xué)教育體驗(yàn)活動(dòng)+生物試題4
- 《研學(xué)旅行課程設(shè)計(jì)》課件-了解研學(xué)旅行概念
評(píng)論
0/150
提交評(píng)論