IT計算機課件第六章循環(huán)結(jié)構(gòu)_第1頁
IT計算機課件第六章循環(huán)結(jié)構(gòu)_第2頁
IT計算機課件第六章循環(huán)結(jié)構(gòu)_第3頁
IT計算機課件第六章循環(huán)結(jié)構(gòu)_第4頁
IT計算機課件第六章循環(huán)結(jié)構(gòu)_第5頁
已閱讀5頁,還剩94頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第一節(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的連加,怎么編程?

回答:這個,寫1+2+3…+100+???o

第一節(jié)糖環(huán)的基本就念

分析:讓我們換一個角度來看待這些問題。

找出哪些是重復(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:計數(shù)器,sum:存放累加和*/

i=l;

sum=0;

while(i<=100)/*循環(huán)控制條件*/

{sum+=i;/*循環(huán)體*/

i++;

)

printf("Sum=%d\n〃,sum);

丁儂/診

例:分析程序的運行結(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ù)量,只知道

停止條件是輸入字母a,則只能將循環(huán)控制條件

設(shè)為ch!二匕屋

循環(huán)體

ttinclude<stdio.h>為空語

main()句

{charch;

while((ch=getch())!=’a');

例C6_202

第二節(jié)以&語句

例:對輸入的行和字符進行計數(shù)。

分析:\n作為行結(jié)束標記的,DOS中有[CTRL+Z作為文

件結(jié)束標記

#defineEOF-1/*定義文件結(jié)束標記*/

ttinclude<stdio.h>

main()

{intc,nl=0,nc=0;/*nl行計數(shù)器、nc字符計數(shù)器*/

while((c=getchar())!=EOF)

{++nc;/*進行字符計數(shù)*/

if(c二二'\n)

++nl;/*如果找到\n,則行計數(shù)*/

printf(z/chars=%d,lines=%d\n”,nc,nl);

例C6.203

第二節(jié)以&語句

Bwhile使用注意事項

while(0){???.}由于循環(huán)的條件表達

式恒等于0,循環(huán)體永遠也不會執(zhí)行,是編程

者的錯誤。

while(1){???.}由于循環(huán)的條件表達

式恒等于1,所以不可能通過循環(huán)控制條件來

結(jié)束循環(huán)體的執(zhí)行,稱為“死循環(huán)”。

3.為了保證循環(huán)正常運行,應(yīng)該特別注意:

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

>控制條件的初始狀態(tài)(初始值)

>循環(huán)體內(nèi)部對控制條件的影響

第三節(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)體部分有

可能一次也不會執(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-小/語句

例:輸入一個正整數(shù),要求以相反的順序輸出該

數(shù)。例如:輸入12345,則輸出為54321。

基本思路:從個位開始,按位輸出整數(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ī)則進行分類計數(shù)。

第一類:

'0','1','2','3','4','5','6','7'

J8、9,

第二類:

,,,/,/U,

第三類:

其它字符

當輸入字符'\'時先計數(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;/*對分類1計數(shù)*/

case+:case-:case*:case/:

case‘:case---?*

class2++;break;/*對分類2計數(shù)*/

defaul:class3++;break;/*對分類3計數(shù)*/

)

}while(ch!=’\\');

printf(z,classl=%d,class2=%d,class3=%d\r/z,

classl,class2,class3);

例:求1到10的階乘。

遞推公式:n!=1當n=0時

n!=(nT)1*n當n〉l時

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.省略表達式2:

for(表達式1;;表達式3)

形成死循環(huán)。

2.省略表達式1和表達式3:

for(;表達式2;)

等同于:while(表達式)

3.表達式1、2、3全省略:

for(;;)

等同于:while(1)

注意:分號不能省略。

例:求菲波那奇數(shù)列第N項的值。

數(shù)列遞推通項公式為:

5=U2=1

JL乙

Un=UnT+Un_2(n>=3)

即:1、1、2、3、5、8、13、21、...

根據(jù)遞推通項公式,可用遞推法編寫程序,計

算第N項的值。

第四節(jié)您語句

位遞推法:

由初始的已知條件,先計算出第(N—1)步的

結(jié)果,再利用前面已知的(N—1)項結(jié)果,按照遞

推公式(或遵照遞推規(guī)則),推出第N步結(jié)果。

遞推法是程序設(shè)計中最常用的方法之一,使

用遞推法必須有明確的遞推初始值和遞推公式。

第一項:1s第六項:8S第H^一項:=

第二項:1]第七與,所./r

第三項:2I第夕爾21

第四項:3H項:3^L/..?…JL

第五項:5V-十項: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++)/*用遞推法計算第N項的值*/

{uni=un2;un2=un;un=uni+un2;

printf(〃No.%dis%d\n〃,n,un);

第五節(jié)成、韜*句

break、continue、goto是轉(zhuǎn)移語句,作用是

改變程序的運行流程。

一、break語句

Gbreak語句格式

break;

Gbreak語句功能

在switch語句中結(jié)束case子句,使控制轉(zhuǎn)到switch

語句之外。

2?在循環(huán)語句的循環(huán)體中使用,結(jié)束循環(huán)過程,使控

制轉(zhuǎn)移到整個循環(huán)語句之外的下一條語句處。

C(MtbMe>外的語句

用break語句的注意事項

1■.在嵌套循環(huán)中,break語句僅能退出一層(當

前)循環(huán)。

2.若在循環(huán)語句中包含了switch語句,那么

switch語句中的break語句僅能使控制退出

switch語句。

3.break語句并不是程序設(shè)計中必不可少的語

句,可以通過改變程序的結(jié)構(gòu)去掉。

修改例C6_501

C(MtbMe>外的語句

二、continue語句

^continue語句格式

continue;

Bcontinue語句的功能

只能在循環(huán)語句中使用。它的作用不是結(jié)

束循環(huán),而是開始一次新的循環(huán)。

對于for語句,將控制轉(zhuǎn)到表達式3,對于

while和do-while語句,將控制轉(zhuǎn)到條件測

試部分。

C(MtbMe>外的語句

Rcontinue語句的流程]

|表一式1

不成立.

------

表達式3

執(zhí)行后續(xù)語句

第五節(jié)版成、語句

例:輸入10個整數(shù),求其中正數(shù)的個數(shù)及平均值,精

確到小數(shù)點后兩位。

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)/*若為負數(shù)*/

-continue;/*則結(jié)束本次循環(huán),不進行后續(xù)逐作*/

count++;/*計數(shù)器*/

sum+=j;/*求累加和*/

if(count)

printf("Plusnumer:%d,averagevalue:%.2fz,,

count,1.O*sum/count);

elseprintf(,zPlusnumer:0,averagevalue:0");

第五節(jié)版成、語句

A從邏輯上講,改變if語句的條件表達式所表示

的條件,就可以不需要使用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標號;

Bgoto語句的功能

將程序控制轉(zhuǎn)移到標號所指定的語句處繼續(xù)

執(zhí)行。標號的唯一功能就是作為goto語句的目

標。標號的作用域是它所在的整個函數(shù)。

注意:為了保證程序的結(jié)構(gòu)化,不允

許使用向上GOTO語句

第五節(jié)成、韜*句

例:已知一個首項大于0的等差數(shù)列的前四項和為26,

前四項的積為880,求這數(shù)列。

E分析

設(shè)數(shù)列的第一項為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

則可以推出,首項a和公差d的取值范圍為:

1<=a<=51<=d<=3

可以使用窮舉的方法,在首項a和公差d的取值

范圍內(nèi)進行判斷。

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);/*前四項的和*/

c=a*(a+d)*(a+2*d)*(a+3*d);/*前四項的積*/

if(b==26&&c==880)/*若滿足條件*/

gotoout;/*退出二重循環(huán)*/

:for(i=0;i<=20;++i)/*輸出運行結(jié)果*/

printf("%d,〃,a+i*d);

第益節(jié)幾種循球語句比較

eC語言三種循環(huán)語句的特點如下:

1.for和while先判斷循環(huán)條件后執(zhí)行循環(huán)體,

do-while語句先執(zhí)行循環(huán)體后判斷循環(huán)條件。

2.while和do-while語句的條件表達式只有一個,

for語句有三個表達式。

3.while、do-while>for可以相互替換使用。

4.while語句多用于不需要賦初值的或循環(huán)次數(shù)不定的

情況。

for語句多用于要賦初值或循環(huán)次數(shù)固定的情況。

do-while語句多用于至少要運行一次的循環(huán)控制。

5.循環(huán)語句可以嵌套,循環(huán)可以并列,但不能交叉。

第益節(jié)幾種循球語句比較

G為了保證循環(huán)體正常運行,應(yīng)該特別注意:

循環(huán)控制條件

控制條件的初始狀態(tài)(初始值)

循環(huán)體內(nèi)部對控制條件的影響

以上三個方面相互配合,相互影響,共同完成

循環(huán)控制。

第七節(jié)循環(huán)的嵌套

G循環(huán)嵌套

在循環(huán)體中,又包含有循環(huán)語句,構(gòu)成循環(huán)嵌套。

例:輸出下三角形乘法九九表。

123456789

1輸出項沏和行⑴、列⑴的關(guān)系

24

369

481216i二6

510152025j=5

6121824306i*j

7142128354249

816243240485664

91827364554637281

假設(shè):行號為i(l<=i<=9),列號為j(1〈=j〈二i)

貝U:第i行中要輸出j個乘積

第七節(jié)循環(huán)的嵌套

ttinclude<stdio.h>例]C6_70i

main()

{int=1,j;/*::;計數(shù)器j:列計數(shù)器*/

while(i<=9)/*控制打印表頭*/

printf(〃%4d〃,i++);

printf(〃\n-------------------------------\n〃);

i=1;

.while(<=9)/*控缶1J*/

>{j=1;/*列計數(shù)器置1*/

while(j<=)/*嵌套的二重循環(huán)。輸出第i行*1

,{printf(〃%4d〃,i*j);

、j++;/*列計數(shù)器+1*/

printf(〃\n〃);/*一行輸出結(jié)束后,輸出\n*/

|i++;/*行計數(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元,請通過計算選擇一種存錢方

案,使得錢存入銀行二十年后得到的息最多(假定銀行

對超過存款期限的那部分時間不付利息)。

第七節(jié)循環(huán)的嵌套

G問題分析與算法設(shè)計

由于存款的利率不同,所以不同的存款方

法(年限組合)得到的利息也是不一樣的。

2000元存20年,則:

1年存il次,

2年存i2次,

3年存i3次,

5年存i5次,

8年存i8次。

到期時本息合計:

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

的組合,代入求本利的公式計算出最大值,就

是最佳存款方案。

第七節(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è)計的一般步驟

1.分析題意,明確問題的性質(zhì)

數(shù)值問題/非數(shù)值問題

2.建立問題的描述模型

數(shù)學(xué)模型/過程模型

3.設(shè)計/確定算法

數(shù)學(xué)問題:數(shù)值分析

非數(shù)學(xué)問題:

數(shù)據(jù)結(jié)構(gòu)/算法分析與設(shè)計

一般方法:窮舉/遞推/遞歸/

4,編程調(diào)試

5.分析運行結(jié)果

第,?節(jié)程格舉例

第,?節(jié)程格舉例

例:判斷輸入的整數(shù)是否是素數(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)化

對于來說,為了提高程序的效率,就要減少

ttinclude''math.h〃15=3*5;

main()嘗試15%3以后,沒有

{intm,i,k;必要再嘗試15%5。

scanf(、'%d匕@0X4k是嘗試的中點。

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é)程格舉例

例:如何判斷一個整數(shù)是另一個整數(shù)的平方

從鍵盤上任意輸入一個正整數(shù),要求判斷該

正整數(shù)是否是另一個整數(shù)的平方。

?問題分析與算法設(shè)計

設(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ī)則,撞人后逃跑?,F(xiàn)場有三人目

擊事件,但都沒有記住車號,只記下車號的一些特征:

甲說:牌照的前兩位數(shù)字是相同的;

乙說:牌照的后兩位數(shù)字是相同的,但與前兩位不同;

丙是位數(shù)學(xué)家,說:四位的車號剛好是一個整數(shù)的平方。

請根據(jù)以上線索求出車號。

?問題分析與算法設(shè)計

按照題目的要求造出一個前兩位數(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:車號前二位的取值*/

for(j=0;j<=9;j++)Aj:車號后二位的取值*/

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);

?運行結(jié)果:Lorry_No.is.

第,?節(jié)程格舉例

例:百錢百雞問題

中國古代數(shù)學(xué)家張丘建在他的《算經(jīng)》中提出了著

名的“百錢百雞問題”:

雞翁一,值錢五;雞母一,值錢三;雞雛三,值錢

一;百錢買百雞,翁、母、雛各幾何?

?問題分析與算法設(shè)計

設(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);

運行結(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);

)

?運行程序,正確的結(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é)模型

■適宜進行窮舉的數(shù)學(xué)模型

■決定程序是否正確

?窮舉的范圍

■明確的窮舉終止條件

■決定窮舉的效率,范圍過大,則效率太低。

第,?節(jié)程格舉例

圖形

第,?節(jié)程格舉例

例:打印邊長為m的正方型

要求:從鍵盤輸入值,輸出行每行個*號。

例:輸入=4,輸出的圖形如下:

****

****

****

****

⑴屏幕輸出一個字符?

⑵屏幕輸出一行n個字符?

⑶屏幕輸出n行字符?

第,?節(jié)程格舉例

for(k=0;k<n;k++)

for(j=0;j<n;j++)

printf("*");

?分析

逐步求精法。對于復(fù)雜問題,不可能一下得

到程序,可以先將簡單的部分明確出來,再逐

步對復(fù)雜部分進行細化,一步一步推出程序。

第,?節(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個*號*/

printf("*”);

printf("\n");

第,?節(jié)程格舉例

例:打印平行四邊形要求:從鍵盤輸入值,

輸出行用*號組成平行四邊形。

例:輸入二,輸出的圖形如下:

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,字符的個數(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é)程格舉例

例:打印回形方陣:

要求:從鍵盤輸入邊長,輸出回形方陣。

例:輸入,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);號小于列號,輸出

for(i=1;i<=m;i++)與行號一致

{for(j=1;j—

printf(u%z

輸出數(shù)字是12346

printf(“\n");I

111111

22222

1333

下三角元素的行124

號大于列號,輸出5123

與列號一致61234

第,?節(jié)程格舉例

main()

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論