![IT計(jì)算機(jī)課件第六章循環(huán)結(jié)構(gòu)_第1頁](http://file4.renrendoc.com/view11/M02/3F/21/wKhkGWWOSOyAOmwUAAEC209jJaM190.jpg)
![IT計(jì)算機(jī)課件第六章循環(huán)結(jié)構(gòu)_第2頁](http://file4.renrendoc.com/view11/M02/3F/21/wKhkGWWOSOyAOmwUAAEC209jJaM1902.jpg)
![IT計(jì)算機(jī)課件第六章循環(huán)結(jié)構(gòu)_第3頁](http://file4.renrendoc.com/view11/M02/3F/21/wKhkGWWOSOyAOmwUAAEC209jJaM1903.jpg)
![IT計(jì)算機(jī)課件第六章循環(huán)結(jié)構(gòu)_第4頁](http://file4.renrendoc.com/view11/M02/3F/21/wKhkGWWOSOyAOmwUAAEC209jJaM1904.jpg)
![IT計(jì)算機(jī)課件第六章循環(huán)結(jié)構(gòu)_第5頁](http://file4.renrendoc.com/view11/M02/3F/21/wKhkGWWOSOyAOmwUAAEC209jJaM1905.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第一節(jié)循環(huán)的基本概念
第二節(jié)while語句
第三節(jié)do-whi1e語句
第四節(jié)for語句
第五節(jié)break、continue>goto語句
第六節(jié)幾種循環(huán)語句比較
第七節(jié)循環(huán)的嵌套
第八節(jié)程序舉例
第一節(jié)循環(huán)的基本槐念
提出問題
提問:求整數(shù)I到10的連加,怎么編程?
回答:在程序中寫入1+2+3+.......+10o
提問:求整數(shù)1到10000的連加,怎么編程?
回答:這個(gè),寫1+2+3…+100+???o
第一節(jié)糖環(huán)的基本就念
分析:讓我們換一個(gè)角度來看待這些問題。
找出哪些是重復(fù)的,哪些是變化的。
1+2+3+...+100=?
加法(操作)是重復(fù)的,
加數(shù)是有規(guī)律地變化的。
解決這樣的問題可以采用循環(huán)語句。
用循環(huán)
反復(fù)執(zhí)行同一段程序,直到滿足一定的條
件后才停止執(zhí)行該段程序。
BC語言中控制循環(huán)的語句:
while語句
for語句
do-while語句
e與循環(huán)相關(guān)的控制程序流程的語句:
break語句
continue語句
goto語句
例:求1到100的連加。
ttinclude<stdio.h>例C6_2oi
main()
{inti,sum;/*i:計(jì)數(shù)器,sum:存放累加和*/
i=l;
sum=0;
while(i<=100)/*循環(huán)控制條件*/
{sum+=i;/*循環(huán)體*/
i++;
)
printf("Sum=%d\n〃,sum);
丁儂/診
例:分析程序的運(yùn)行結(jié)果
例C6-201b
ttinclude<stdio.h>
main()
{inti=l,sum=O;
while(i<=100)
printf("i=%d,sum=%d,\i,sum+=i);
i++;
printf("Sum二%d\n〃,sum);
結(jié)果:程序?qū)⒉煌5拇蛴 癷=1,sum=?.丁。
?無法正常終止的程序,稱為“死循環(huán)”。
結(jié)論:在while語句循環(huán)體中,一定要有能夠?qū)ρh(huán)控制
條件產(chǎn)生影響的語句。避免出現(xiàn)“死循環(huán)”現(xiàn)象。
第二節(jié)以&語句
例:從鍵盤中讀入一系列字符,直到輸入字母a
時(shí)才停止。
由于不知道要輸入的字符數(shù)量,只知道
停止條件是輸入字母a,則只能將循環(huán)控制條件
設(shè)為ch!二匕屋
循環(huán)體
ttinclude<stdio.h>為空語
main()句
{charch;
while((ch=getch())!=’a');
例C6_202
第二節(jié)以&語句
例:對(duì)輸入的行和字符進(jìn)行計(jì)數(shù)。
分析:\n作為行結(jié)束標(biāo)記的,DOS中有[CTRL+Z作為文
件結(jié)束標(biāo)記
#defineEOF-1/*定義文件結(jié)束標(biāo)記*/
ttinclude<stdio.h>
main()
{intc,nl=0,nc=0;/*nl行計(jì)數(shù)器、nc字符計(jì)數(shù)器*/
while((c=getchar())!=EOF)
{++nc;/*進(jìn)行字符計(jì)數(shù)*/
if(c二二'\n)
++nl;/*如果找到\n,則行計(jì)數(shù)*/
printf(z/chars=%d,lines=%d\n”,nc,nl);
例C6.203
第二節(jié)以&語句
Bwhile使用注意事項(xiàng)
while(0){???.}由于循環(huán)的條件表達(dá)
式恒等于0,循環(huán)體永遠(yuǎn)也不會(huì)執(zhí)行,是編程
者的錯(cuò)誤。
while(1){???.}由于循環(huán)的條件表達(dá)
式恒等于1,所以不可能通過循環(huán)控制條件來
結(jié)束循環(huán)體的執(zhí)行,稱為“死循環(huán)”。
3.為了保證循環(huán)正常運(yùn)行,應(yīng)該特別注意:
>循環(huán)控制條件
>控制條件的初始狀態(tài)(初始值)
>循環(huán)體內(nèi)部對(duì)控制條件的影響
第三節(jié)4-小/語句
Rdo-while與while的區(qū)別:
do-while語句先執(zhí)行循環(huán)體然后再判斷
循環(huán)控制條件,而while是先判斷條件之后再
執(zhí)行循環(huán)體。
使用do-while循環(huán),循環(huán)體部分至少要
執(zhí)行一次;而采用while循環(huán),循環(huán)體部分有
可能一次也不會(huì)執(zhí)行。
第三節(jié)4-小/語句
main()
{inti=l,sum=O;
do
{sum+=i;
i++;
}while(i<=100)
main()printf("Sum二%d\n〃,sum);
{inti=l,sum=O;
while(i<=100)
sum+=i;
i++;
printf("Suin=%d\n〃,sum);
第三節(jié)4-小/語句
例:輸入一個(gè)正整數(shù),要求以相反的順序輸出該
數(shù)。例如:輸入12345,則輸出為54321。
基本思路:從個(gè)位開始,按位輸出整數(shù)的每一位
main()例C6_301
{unsignedintnumber;
printf("Inputthenumber:,z);
scanf(〃%d〃,&number);
doo
o
\printf(〃%d〃,number%10);
1234)^>number/=10;/*number縮小10倍*/
}while(number!=0);
第三節(jié)4-小/語句
例:從鍵盤輸入任意的字符,按下列規(guī)則進(jìn)行分類計(jì)數(shù)。
第一類:
'0','1','2','3','4','5','6','7'
J8、9,
第二類:
,,,/,/U,
第三類:
其它字符
當(dāng)輸入字符'\'時(shí)先計(jì)數(shù)然后停止接收輸入。
第三節(jié)4-小/語句
main()
intclassl=O,class2=0,class3=0;charch
例C6_302
do
putchar(ch=getch());
switch(ch)
{case'O':case1:case2:case3:
case'4':case,5匚,:.caseb:case7:
case’8':case'9':
classl++;break;/*對(duì)分類1計(jì)數(shù)*/
case+:case-:case*:case/:
case‘:case---?*
class2++;break;/*對(duì)分類2計(jì)數(shù)*/
defaul:class3++;break;/*對(duì)分類3計(jì)數(shù)*/
)
}while(ch!=’\\');
printf(z,classl=%d,class2=%d,class3=%d\r/z,
classl,class2,class3);
例:求1到10的階乘。
遞推公式:n!=1當(dāng)n=0時(shí)
n!=(nT)1*n當(dāng)n〉l時(shí)
ttinclude<stdic循環(huán))
條件A循環(huán)
main()增量
初始-intn=l;
■o
條件I1;______
1orli=u1<=10jCi++)
n=n*i;/*求N!*/
printf(〃%2d!=%ld\n〃,i,n);
例C6.401
Bfor語句的變化形式
1.省略表達(dá)式2:
for(表達(dá)式1;;表達(dá)式3)
形成死循環(huán)。
2.省略表達(dá)式1和表達(dá)式3:
for(;表達(dá)式2;)
等同于:while(表達(dá)式)
3.表達(dá)式1、2、3全省略:
for(;;)
等同于:while(1)
注意:分號(hào)不能省略。
例:求菲波那奇數(shù)列第N項(xiàng)的值。
數(shù)列遞推通項(xiàng)公式為:
5=U2=1
JL乙
Un=UnT+Un_2(n>=3)
即:1、1、2、3、5、8、13、21、...
根據(jù)遞推通項(xiàng)公式,可用遞推法編寫程序,計(jì)
算第N項(xiàng)的值。
第四節(jié)您語句
位遞推法:
由初始的已知條件,先計(jì)算出第(N—1)步的
結(jié)果,再利用前面已知的(N—1)項(xiàng)結(jié)果,按照遞
推公式(或遵照遞推規(guī)則),推出第N步結(jié)果。
遞推法是程序設(shè)計(jì)中最常用的方法之一,使
用遞推法必須有明確的遞推初始值和遞推公式。
第一項(xiàng):1s第六項(xiàng):8S第H^一項(xiàng):=
第二項(xiàng):1]第七與,所./r
第三項(xiàng):2I第夕爾21
第四項(xiàng):3H項(xiàng):3^L/..?…JL
第五項(xiàng):5V-十項(xiàng):55丫/……V
ttinclude<stdio.h>
main()例C6-4O2
{intn,i,uni,un2,un;
for(;;)
{printf(z,Inputn=?〃);scanf(〃%d〃,&n);
if(n>=3)break;
elseprintf("\nlnputniserror!\n〃);
}/*控制輸入正確的N值*/
un=un2=1;/*設(shè)置遞推初始值*/
for(i=3;i<=n;i++)/*用遞推法計(jì)算第N項(xiàng)的值*/
{uni=un2;un2=un;un=uni+un2;
printf(〃No.%dis%d\n〃,n,un);
第五節(jié)成、韜*句
break、continue、goto是轉(zhuǎn)移語句,作用是
改變程序的運(yùn)行流程。
一、break語句
Gbreak語句格式
break;
Gbreak語句功能
在switch語句中結(jié)束case子句,使控制轉(zhuǎn)到switch
語句之外。
2?在循環(huán)語句的循環(huán)體中使用,結(jié)束循環(huán)過程,使控
制轉(zhuǎn)移到整個(gè)循環(huán)語句之外的下一條語句處。
C(MtbMe>外的語句
用break語句的注意事項(xiàng)
1■.在嵌套循環(huán)中,break語句僅能退出一層(當(dāng)
前)循環(huán)。
2.若在循環(huán)語句中包含了switch語句,那么
switch語句中的break語句僅能使控制退出
switch語句。
3.break語句并不是程序設(shè)計(jì)中必不可少的語
句,可以通過改變程序的結(jié)構(gòu)去掉。
修改例C6_501
C(MtbMe>外的語句
二、continue語句
^continue語句格式
continue;
Bcontinue語句的功能
只能在循環(huán)語句中使用。它的作用不是結(jié)
束循環(huán),而是開始一次新的循環(huán)。
對(duì)于for語句,將控制轉(zhuǎn)到表達(dá)式3,對(duì)于
while和do-while語句,將控制轉(zhuǎn)到條件測(cè)
試部分。
C(MtbMe>外的語句
Rcontinue語句的流程]
|表一式1
不成立.
------
表達(dá)式3
執(zhí)行后續(xù)語句
第五節(jié)版成、語句
例:輸入10個(gè)整數(shù),求其中正數(shù)的個(gè)數(shù)及平均值,精
確到小數(shù)點(diǎn)后兩位。
main()
{inti,count=0,j,sum=0;例C6_502
for(i=1;i〈=10;i++)
{printf(/zInputinteger:z,);
scanf(z/%dz/,&j);
if(j<=0)/*若為負(fù)數(shù)*/
-continue;/*則結(jié)束本次循環(huán),不進(jìn)行后續(xù)逐作*/
count++;/*計(jì)數(shù)器*/
sum+=j;/*求累加和*/
if(count)
printf("Plusnumer:%d,averagevalue:%.2fz,,
count,1.O*sum/count);
elseprintf(,zPlusnumer:0,averagevalue:0");
第五節(jié)版成、語句
A從邏輯上講,改變if語句的條件表達(dá)式所表示
的條件,就可以不需要使用continue語句。
for(i=l;i<=10;i++)
{printf("Inputinteger:,z);
scanf(〃%d”,&j);
if(j<=0)
continue;
count++;°o
sum+=j;if(j>0)
count++;
C(MtbMe>外的語句
二、goto語句
Bgoto語句格式
goto標(biāo)號(hào);
Bgoto語句的功能
將程序控制轉(zhuǎn)移到標(biāo)號(hào)所指定的語句處繼續(xù)
執(zhí)行。標(biāo)號(hào)的唯一功能就是作為goto語句的目
標(biāo)。標(biāo)號(hào)的作用域是它所在的整個(gè)函數(shù)。
注意:為了保證程序的結(jié)構(gòu)化,不允
許使用向上GOTO語句
第五節(jié)成、韜*句
例:已知一個(gè)首項(xiàng)大于0的等差數(shù)列的前四項(xiàng)和為26,
前四項(xiàng)的積為880,求這數(shù)列。
E分析
設(shè)數(shù)列的第一項(xiàng)為a(a〉0),公差為d(d〉O)。則該
數(shù)列滿足條件:
a+(a+d)+(a+2*d)+(a+3*d)=4*a+6*d=26
a*(a+d)*(a+2*d)*(a+3*d)=880
則可以推出,首項(xiàng)a和公差d的取值范圍為:
1<=a<=51<=d<=3
可以使用窮舉的方法,在首項(xiàng)a和公差d的取值
范圍內(nèi)進(jìn)行判斷。
C(MtbMe>外的語句
main()
例C6.503
{inta,b,c,d,i;
for(a=l;a<=5;++a)/*在a的范圍內(nèi)窮舉*/
for(d=l;d<=3;++d)/*在d的范圍內(nèi)窮舉*/
{b=a+(a+d)+(a+2*d)+(a+3*d);/*前四項(xiàng)的和*/
c=a*(a+d)*(a+2*d)*(a+3*d);/*前四項(xiàng)的積*/
if(b==26&&c==880)/*若滿足條件*/
gotoout;/*退出二重循環(huán)*/
:for(i=0;i<=20;++i)/*輸出運(yùn)行結(jié)果*/
printf("%d,〃,a+i*d);
第益節(jié)幾種循球語句比較
eC語言三種循環(huán)語句的特點(diǎn)如下:
1.for和while先判斷循環(huán)條件后執(zhí)行循環(huán)體,
do-while語句先執(zhí)行循環(huán)體后判斷循環(huán)條件。
2.while和do-while語句的條件表達(dá)式只有一個(gè),
for語句有三個(gè)表達(dá)式。
3.while、do-while>for可以相互替換使用。
4.while語句多用于不需要賦初值的或循環(huán)次數(shù)不定的
情況。
for語句多用于要賦初值或循環(huán)次數(shù)固定的情況。
do-while語句多用于至少要運(yùn)行一次的循環(huán)控制。
5.循環(huán)語句可以嵌套,循環(huán)可以并列,但不能交叉。
第益節(jié)幾種循球語句比較
G為了保證循環(huán)體正常運(yùn)行,應(yīng)該特別注意:
循環(huán)控制條件
控制條件的初始狀態(tài)(初始值)
循環(huán)體內(nèi)部對(duì)控制條件的影響
以上三個(gè)方面相互配合,相互影響,共同完成
循環(huán)控制。
第七節(jié)循環(huán)的嵌套
G循環(huán)嵌套
在循環(huán)體中,又包含有循環(huán)語句,構(gòu)成循環(huán)嵌套。
例:輸出下三角形乘法九九表。
123456789
1輸出項(xiàng)沏和行⑴、列⑴的關(guān)系
24
369
481216i二6
510152025j=5
6121824306i*j
7142128354249
816243240485664
91827364554637281
假設(shè):行號(hào)為i(l<=i<=9),列號(hào)為j(1〈=j〈二i)
貝U:第i行中要輸出j個(gè)乘積
第七節(jié)循環(huán)的嵌套
ttinclude<stdio.h>例]C6_70i
main()
{int=1,j;/*::;計(jì)數(shù)器j:列計(jì)數(shù)器*/
while(i<=9)/*控制打印表頭*/
printf(〃%4d〃,i++);
printf(〃\n-------------------------------\n〃);
i=1;
.while(<=9)/*控缶1J*/
>{j=1;/*列計(jì)數(shù)器置1*/
while(j<=)/*嵌套的二重循環(huán)。輸出第i行*1
,{printf(〃%4d〃,i*j);
、j++;/*列計(jì)數(shù)器+1*/
printf(〃\n〃);/*一行輸出結(jié)束后,輸出\n*/
|i++;/*行計(jì)數(shù)器+1*/
]外層循環(huán)體執(zhí)行1次,內(nèi)層循環(huán)要輸出1行
第七節(jié)循環(huán)的嵌套
例:怎樣存錢利最大
假設(shè)銀行整存整取存款不同期限的月息利率分別為:
0.315%期限=一年
0.330%期限=二年
0.345%期限=三年
0.375%期限=五年
0.420%期限=八年
利息=本金X月息利率X12X存款年限
現(xiàn)在某人手中有2000元,請(qǐng)通過計(jì)算選擇一種存錢方
案,使得錢存入銀行二十年后得到的息最多(假定銀行
對(duì)超過存款期限的那部分時(shí)間不付利息)。
第七節(jié)循環(huán)的嵌套
G問題分析與算法設(shè)計(jì)
由于存款的利率不同,所以不同的存款方
法(年限組合)得到的利息也是不一樣的。
2000元存20年,則:
1年存il次,
2年存i2次,
3年存i3次,
5年存i5次,
8年存i8次。
到期時(shí)本息合計(jì):
2000*(1+rl)(l+r2)i2*(l+r3)i3*(l+r5)i5*(l+r8)i8
第七節(jié)循環(huán)的嵌套
G根據(jù)題意還可得到以下限制條件:
0<=18<=2
0<=i5<=(20-8*18)/5
0<=13<=(20-8*i8-5*i5)/3
0<=i2<=(20-8*i8-5*i5-3*i3)/2
0<=il=20-8*i8-5*i5-3*i3-2*i2
G可用窮舉法窮舉所有的i8、i5、i3、i2和il
的組合,代入求本利的公式計(jì)算出最大值,就
是最佳存款方案。
第七節(jié)循環(huán)的嵌套
ttinclude<math.h>
main()
{inti8,i5,i3,12,il,n8,n5,n3,n2,nl;
floatmax=0,term;
for(18=0;i8<3;i8++)/*窮舉全部可能的存款方式*/
for(i5=0;i5<=(20-8*i8)/5;i5++)
for(i3=0;i3<=(20-8*i8-5*i5)/3;i3++)
for(i2=0;i2<=(20-8*i8-5*i5-3*i3)/2;i2++)
{i1=20-8*i8-5*i5-3*i3-2*i2;
term=2000.0*pow(l+0.00315*12,(double)il)
*pow(l+0.00330*12,(double)i2)
*pow(l+0.00345*12,(double)i3)
*pow(l+0.00375*12,(double)i5)
*pow(l+0.00420*12,(double)i8);
if(term>)/*若為最大值,記錄存款方式*/
=term;nl=i1;n2=i2;n3=i3;n5=i5;n8=i8;
printf(z/%d,%d,%d,%d,%d\n〃,n8,n5,n3,n2,nl);
printf(/zTotal:%.2f\n〃,max);/*輸出存款方式*/
第七節(jié)循環(huán)的城套
for(i8=0;18<3;i8++)/*窮舉全部可能的存款方式*/
for(i5=0;i5<=(20-8*i8)/5;i5++)例C6」O2
for(i3=0;i3〈二(20-8*i8-5*i5)/3;i3++)
for(i2=0;i2<=(20-8*i8-5*i5-3*i3)/2;i2++)
{il=20-8*i8-5*i5-3*i3-2*i2;
term=2000.0*pow(l+0.00315*12,(double)il)
*pow(l+0.00330*12,(double)i2)
*pow(l+0.00345*12,(double)i3)
*pow(l+0.00475*12,(double)i5)
*pow(l+0.00420*12,(double)i8);
if(term>max)/*若為最大值,記錄存款方式*/
{max=term;nl=il;n2=i2;n3=i3;n5=i5;n8=i8;
第,?節(jié)程格舉例
程序設(shè)計(jì)的一般步驟
1.分析題意,明確問題的性質(zhì)
數(shù)值問題/非數(shù)值問題
2.建立問題的描述模型
數(shù)學(xué)模型/過程模型
3.設(shè)計(jì)/確定算法
數(shù)學(xué)問題:數(shù)值分析
非數(shù)學(xué)問題:
數(shù)據(jù)結(jié)構(gòu)/算法分析與設(shè)計(jì)
一般方法:窮舉/遞推/遞歸/
4,編程調(diào)試
5.分析運(yùn)行結(jié)果
第,?節(jié)程格舉例
第,?節(jié)程格舉例
例:判斷輸入的整數(shù)是否是素?cái)?shù)
?算法使用,從2開始嘗試能否整除整數(shù)m。
ttinclude''stdio.h〃
main()
{intm,i;
scanf&m);
for(i=2;i<m;i++)
if(m%i==0)
break;
if(i>=m)
printf(AX%disaprinmenumber.\n〃,m);
else
printf(、'%disnotaprinmenumber.\nz,,m);
第,?節(jié)程格舉例
?程序的優(yōu)化
對(duì)于來說,為了提高程序的效率,就要減少
ttinclude''math.h〃15=3*5;
main()嘗試15%3以后,沒有
{intm,i,k;必要再嘗試15%5。
scanf(、'%d匕@0X4k是嘗試的中點(diǎn)。
k=sqrt(m);
for(i=2;i<=k;i++)例C6.801
if(m%i==0)break;
if(i>=k+l)printf('x%disaprimenumber.\n,A,m);
elseprintf(Ay%disnotaprimenumber.\nff,m);
}
第,?節(jié)程格舉例
例:如何判斷一個(gè)整數(shù)是另一個(gè)整數(shù)的平方
從鍵盤上任意輸入一個(gè)正整數(shù),要求判斷該
正整數(shù)是否是另一個(gè)整數(shù)的平方。
?問題分析與算法設(shè)計(jì)
設(shè):輸入的正整數(shù)為i,若i滿足:
i==m*m(m為整數(shù)〉0)
貝Ui為整數(shù)m的平方。
main()
{inti,m;
scanf(“%d",&i);
for(m=1;m++);
if(i==m*m)
printf("%d*%d=%d\n",i,i,m);
第,?節(jié)程格舉例
例:抓交通肇事犯
一輛卡車違犯交通規(guī)則,撞人后逃跑。現(xiàn)場(chǎng)有三人目
擊事件,但都沒有記住車號(hào),只記下車號(hào)的一些特征:
甲說:牌照的前兩位數(shù)字是相同的;
乙說:牌照的后兩位數(shù)字是相同的,但與前兩位不同;
丙是位數(shù)學(xué)家,說:四位的車號(hào)剛好是一個(gè)整數(shù)的平方。
請(qǐng)根據(jù)以上線索求出車號(hào)。
?問題分析與算法設(shè)計(jì)
按照題目的要求造出一個(gè)前兩位數(shù)(i)相同、后兩位數(shù)
(j)相同且相互間又不同的整數(shù)。得到:
(1)0<i<=90<=j<=9
(2)i!=j
(3)1100*i+11*j=m*m(m為整數(shù)〉二31)
第,?節(jié)程格舉例
main()
{inti,j,k,m;
for(i=l;i<=9;i++)/*i:車號(hào)前二位的取值*/
for(j=0;j<=9;j++)Aj:車號(hào)后二位的取值*/
if(i!=j)/*判斷兩位數(shù)字是否相異*/
{k=i*1000+i*100+j*10+j;
for(m=31;m*m<;m++)
if(m*m=)/*判斷是否為整數(shù)的平方*/
printf(/zLorry_No.is%d?\n〃,k);
?運(yùn)行結(jié)果:Lorry_No.is.
第,?節(jié)程格舉例
例:百錢百雞問題
中國古代數(shù)學(xué)家張丘建在他的《算經(jīng)》中提出了著
名的“百錢百雞問題”:
雞翁一,值錢五;雞母一,值錢三;雞雛三,值錢
一;百錢買百雞,翁、母、雛各幾何?
?問題分析與算法設(shè)計(jì)
設(shè):要買X只公雞,y只母雞,Z只小雞,可得到方程:
x+y+z=100①
5x+3y+z/3=100②
取值范圍:0〈二x、y、z<=100
可以采用窮舉法求解。
第,?節(jié)程格舉例
main()
{intx,y,z,j=0;
for(x=0;x<=100;x++)
for(y=0;y<=100;y++)
for(z=0;z<=100;z++)
if(x+y+z==100&&5*x+3*y+z/3==100)
printf(z,%2d:cock=%2dhen=%2dchicken=%2d\n〃,
++j,x,y,z);
運(yùn)行結(jié)果:
1:cock=0hen=25chicken=75
2:cock=3hen=20chicken=77
7:cock=12hen=4chicken=84
第,?節(jié)程格舉例
?丟失重要條件:應(yīng)該能夠被
main()
{intx,y,z,j=0;
for(x=0;x<=100;x++)
for(y=0;y<=100;y++)
for(z=0;z<=100;z++)
if(z%3==0&&x+y+z==l00&&5*x+3*y+z/3==100)
printf(z/%2d:cock=%2dhen=%2dchicken=%2d\n/z,
++j,x,y,z);
)
?運(yùn)行程序,正確的結(jié)果:
1:cock=0hen=25chicken=75
2:cock=4hen=18chicken=78
3:cock=8hen=llchicken=81
4:cock=12hen=4chicken=84
第,?節(jié)程格舉例
?優(yōu)化程序:
main()
{intx,y,z,j=0;
for(x=0;x<=20;x++)
for(y=0;y<=33;y++)
for(z=0;z<=100;z++)
if(z%3==0&&x+y+z==100&&5*x+3*y+z/3=100)
printf(z,%2d:cock=%2dhen=%2dchicken=%2d\nz/,
}++j,x,y,z);
?再優(yōu)化程序:例C6_804
for(x=0;x<=20;x++)
for(y=0;y<=(100-5*x)/3;y++)
{z=100-x-y;
if(z%3==0&&5*x+3*y+z/3=100)
printf(,z%2d:cock=%2dhen=%2dchicken=%2d\n〃,
++j,x,y,z);
第,?節(jié)程格舉例
x=0y=0z=01
2
3
二^
JV-z0
1
2
3
二
:二?
TO
X--JVz0
I1
2
3
二^
JV-Z0
1
2
3
第,?節(jié)程格舉例
窮舉法的關(guān)鍵
?數(shù)學(xué)模型
■適宜進(jìn)行窮舉的數(shù)學(xué)模型
■決定程序是否正確
?窮舉的范圍
■明確的窮舉終止條件
■決定窮舉的效率,范圍過大,則效率太低。
第,?節(jié)程格舉例
圖形
第,?節(jié)程格舉例
例:打印邊長(zhǎng)為m的正方型
要求:從鍵盤輸入值,輸出行每行個(gè)*號(hào)。
例:輸入=4,輸出的圖形如下:
****
****
****
****
⑴屏幕輸出一個(gè)字符?
⑵屏幕輸出一行n個(gè)字符?
⑶屏幕輸出n行字符?
第,?節(jié)程格舉例
for(k=0;k<n;k++)
for(j=0;j<n;j++)
printf("*");
?分析
逐步求精法。對(duì)于復(fù)雜問題,不可能一下得
到程序,可以先將簡(jiǎn)單的部分明確出來,再逐
步對(duì)復(fù)雜部分進(jìn)行細(xì)化,一步一步推出程序。
第,?節(jié)程格舉例
ttinclude<stdio.h>
main()
{intk,n,j;
scanf("%d",&n);
for(k=l;k<=n;k++)/*控制打印m行*/
{for(j=l;j<=n;j++)/*打印一行中的m個(gè)*號(hào)*/
printf("*”);
printf("\n");
第,?節(jié)程格舉例
例:打印平行四邊形要求:從鍵盤輸入值,
輸出行用*號(hào)組成平行四邊形。
例:輸入二,輸出的圖形如下:
sixvizsi*
>rS^T%
sixsixsixvtz
?r%>Tx#TS^T%XT%
sixviz>1^six
?r%#T%xjx?Tx
vlzsixviz
*xjxXJXZTX
第,?節(jié)程格舉例
ttinclude<stdio.h>*****
main()*****
{inti,j,n;*****
scanf("%d",&n);*****
for(i=l;i<=n;*****
{for(j=l;j<i;j++)printf("
for(j=l;j<=n;j++)
printf("*");
printf\n");
第,?節(jié)程格舉例
ttinclude<stdio.h>*****
main()*****
{inti,j,n;*****
scanf("%d",&n);*****
for(i=l;i<=n;*****
{for(j=l;j<n-i;j++)
printf(,,
for(j=l;j<=n;j++)
printf("*");
printf\n");
第,?節(jié)程格舉例
ttinclude<stdio.h>*
main()***
**,
{inti,j,n;***
scanf("%d",&n);*******
for(i=l;i<=n;i++)I!*********
{for(j=l;j<n-i;j++)
“,,
printf(9
for(j=l;j<=2*i-l;j++)
printf("*");
printf("\n");
第,?節(jié)程格舉例
ttinclude<stdio.h>*********
main()*******
{inti,j,n;*****
scanf("%d",&n);***
for(i=l;i<=n;i++)*
{for(j=l;j<1j++)
“,,
printf(9
for(j=l;j<=2*(n-i)+l;j++)
printf("*");
printf("\n");
第,?節(jié)程格舉例
上下部
分規(guī)律不一*
致的圖形分***
開處理m行
^TX^JX^TX^TX^TX^TX^TX
^TS^TX^TX^TXXT^^T%XT^
XTX^T%^TX
]
*********
*******
*****
***>m?l行
*
第,?節(jié)程格舉例
打印字符圖形總結(jié)
外層循環(huán)控制打
main()
匚口閔必的片麻r7由鉉
{intk,m,j;
scanf(〃%d”一種連續(xù)字符用一
—■
for(k,7,字符的個(gè)數(shù)用
特殊情況特O
殊處理
prinw
for(j二N
printf
printf(u\n,J);循環(huán)體內(nèi)
循環(huán)體內(nèi)最后二條語句是回車換
行,決定以上內(nèi)容為一行。
第,?節(jié)程格舉例
main()
{intk,m,j;
scanf(“%d",&m);
for(k=1;k<=m;k++)
{if(k==l||k==m)
for(j=l;j<=2*k-l;j++)printf("*");
else
for(j=l;j<=m-k;j++)printf(u“);
printf(“*");
for(j=l;j<=2*k-1-2;j++)
printf("*
printf(“*");**
**
)**
printf("\n");**
***vtz
第,?節(jié)程格舉例
例:打印回形方陣:
要求:從鍵盤輸入邊長(zhǎng),輸出回形方陣。
例:輸入,1=6,輸出的圖形如下:
1111111111
1222122221
12321123321
12221n=5123321m=6
11111122221
111111
G分析:關(guān)鍵是找出小j與行i和列j的關(guān)系
第,?節(jié)程格舉例
main()
{inti,j,m;
scanf(“%d",&m);
第,?節(jié)程格舉例
main()
{inti,j,m;上三角元素的行
scanf("%d",&m);號(hào)小于列號(hào),輸出
for(i=1;i<=m;i++)與行號(hào)一致
{for(j=1;j—
printf(u%z
輸出數(shù)字是12346
printf(“\n");I
111111
22222
1333
下三角元素的行124
號(hào)大于列號(hào),輸出5123
與列號(hào)一致61234
第,?節(jié)程格舉例
main()
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度冰淇淋品牌代理經(jīng)營(yíng)數(shù)據(jù)監(jiān)測(cè)與分析合同
- 2025年度高科技農(nóng)業(yè)項(xiàng)目墊資合同樣本
- 2025年度純凈水電商平臺(tái)運(yùn)營(yíng)合作協(xié)議范本
- 2025年度網(wǎng)絡(luò)安全風(fēng)險(xiǎn)評(píng)估與整改合同
- 醫(yī)院文化建設(shè)宣傳與落實(shí)方案計(jì)劃
- 小班社會(huì)性技能培養(yǎng)計(jì)劃
- 完美家庭學(xué)期班級(jí)家庭教育計(jì)劃
- 優(yōu)化項(xiàng)目周期管理的工作總結(jié)計(jì)劃
- 制定多層次績(jī)效激勵(lì)方案計(jì)劃
- 2025年金屬制衛(wèi)生、烹飪、餐飲器具項(xiàng)目建議書
- 跨境電商B2B數(shù)據(jù)運(yùn)營(yíng)高職PPT全套完整教學(xué)課件
- 鎖骨遠(yuǎn)端骨折伴肩鎖關(guān)節(jié)脫位的治療
- 2023年中國煤化工行業(yè)全景圖譜
- 小學(xué)美術(shù) 四年級(jí) 人教版《造型?表現(xiàn)-色彩表現(xiàn)與創(chuàng)作》“色彩”單元美術(shù)作業(yè)設(shè)計(jì)《色彩的明與暗》《色彩的漸變》《色彩的情感》
- 2015年新版《中華人民共和國職業(yè)分類大典》
- 中國心臟重癥鎮(zhèn)靜鎮(zhèn)痛專家共識(shí)專家講座
- 企業(yè)生產(chǎn)制造部門預(yù)算編制模板
- 新概念英語第二冊(cè)單詞默寫表
- 教育心理學(xué)智慧樹知到答案章節(jié)測(cè)試2023年浙江師范大學(xué)
- 川教版七年級(jí)生命生態(tài)安全下冊(cè)第1課《森林草原火災(zāi)的危害》教案
- 食品檢驗(yàn)檢測(cè)機(jī)構(gòu)能力建設(shè)計(jì)劃方案
評(píng)論
0/150
提交評(píng)論