2014級(jí)程序設(shè)計(jì)語(yǔ)言課件第3章循環(huán)結(jié)構(gòu)_第1頁(yè)
2014級(jí)程序設(shè)計(jì)語(yǔ)言課件第3章循環(huán)結(jié)構(gòu)_第2頁(yè)
2014級(jí)程序設(shè)計(jì)語(yǔ)言課件第3章循環(huán)結(jié)構(gòu)_第3頁(yè)
2014級(jí)程序設(shè)計(jì)語(yǔ)言課件第3章循環(huán)結(jié)構(gòu)_第4頁(yè)
2014級(jí)程序設(shè)計(jì)語(yǔ)言課件第3章循環(huán)結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩62頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)知識(shí)點(diǎn)體系問(wèn)題的提出三種基本循環(huán)結(jié)構(gòu)循環(huán)控制語(yǔ)句循環(huán)嵌套循環(huán)應(yīng)用一、問(wèn)題的提出?如何計(jì)算1+2+3+…+10的和并輸出結(jié)果?讀者應(yīng)該已經(jīng)想到,將這10個(gè)數(shù)直接加起來(lái),輸出即可。那如何計(jì)算1+2+3+……+100這樣前100個(gè)自然數(shù)的和呢?void

main(){printf(“10自然數(shù)的和=%d”,1+2+3+4+5+6+7+8+9+10);}循環(huán)結(jié)構(gòu)一、問(wèn)題的提出?我們之所以感到計(jì)算機(jī)無(wú)所不能,是因?yàn)橛?jì)

算機(jī)能不厭其煩地重復(fù)執(zhí)行大量枯燥的工作。計(jì)數(shù)控制標(biāo)記控制循環(huán)結(jié)構(gòu)術(shù)語(yǔ)循環(huán)條件——結(jié)構(gòu)中的測(cè)試表達(dá)式循環(huán)體——每個(gè)循環(huán)周期均要執(zhí)行的語(yǔ)句序列循環(huán)控制變量——控制條件真/假值的變量。對(duì)循環(huán)控制變量應(yīng)做如下處理:賦初值;將其代入正確的循環(huán)條件;更新/調(diào)整【累加型】計(jì)算1+2+3+……+nsi

=

si-1

+

i【累乘型】計(jì)算n!=1

·

3

·

… ·

npi

=

pi-1

·is=0;for(i=1;i<=n;i++)s

=

s

+

i

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

=

p

*

i

;注意:整型定義為long

或unsigned

long

型智人之法:歸納法(遞推法)循環(huán)結(jié)構(gòu)的應(yīng)用場(chǎng)合1*1+2*2+3*3=?s=1*1+2*2+…s=1*1+2*2+3*3…+100*1001*1+2*2+……+99*99+100*100=?for(i=1,s=0;i<=100;i++)s

+=

i*i

;二、循環(huán)結(jié)構(gòu)的分類循環(huán)的概念:條件成立,重復(fù)執(zhí)行某些步驟。C語(yǔ)言循環(huán)結(jié)構(gòu)分成三種:當(dāng)型循環(huán)

直到型循環(huán)for循環(huán)(本質(zhì)上也屬于當(dāng)型循環(huán))二、當(dāng)型循環(huán)結(jié)構(gòu)的流程圖假循環(huán)條件真AcD循環(huán)體二、當(dāng)型循環(huán)結(jié)構(gòu)的語(yǔ)法格式while(循環(huán)條件){循環(huán)體;}while(i<=5){sum=sum+i;i=i+1;}i<=5sum=sum+ii=i+1NOYES二、當(dāng)型循環(huán)結(jié)構(gòu)(1+2+3+4+5)while(i<=5){sum=sum+i;i=i+1;

}

void

main(){int

i,sum;sum=0;i=1;printf(“%d”,sum);}輸出sum開(kāi)始sum=0i=1i<=5sum=sum+ii=i+1YES結(jié)束NOi為循環(huán)變量二、當(dāng)型循環(huán)結(jié)構(gòu)_循環(huán)執(zhí)行過(guò)程#include

<stdio.h>void

main(){int

i,sum;sum=0;i=1;while(i<=5){sum=sum+i;i=i+1;}printf(“%d”,sum);}sumi循環(huán)前:01第1次循環(huán)后:12第2次循環(huán)后:33第3次循環(huán)后:64第4次循環(huán)后:105第5次循環(huán)后:156如何求解1+4+7+10+13+16;三、直到型循環(huán)結(jié)構(gòu)的流程圖件PAc假條真D循環(huán)條件循環(huán)體三、直到型循環(huán)結(jié)構(gòu)的語(yǔ)法格式do{循環(huán)體;}while(循環(huán)條件);i<=5sum=sum+ii=i+1NOYESdo{sum=sum+i;i=i+1;}

while(i<=5);三、直到型循環(huán)結(jié)構(gòu)(1+2+3+4+5)開(kāi)始sum=0i=1sum=sum+ii=i+1輸出sum結(jié)束NOi<=5YES#include

<stdio.h>void

main(){int

i,sum;sum=0;i=1;do{sum=sum+i;i=i+1;}

while(i<=5);printf(“%d”,sum);}四、for循環(huán)結(jié)構(gòu)的流程圖句假表達(dá)式2真語(yǔ) 塊ScD表達(dá)式1表達(dá)式3for

(表達(dá)式1;

表達(dá)式2;表達(dá)式3){語(yǔ)語(yǔ)句句;;}首先執(zhí)行表達(dá)式1。如果表達(dá)式2的值為非0,就重復(fù)執(zhí)行語(yǔ)句和表達(dá)式3,直到表達(dá)式2的值為0時(shí)止循環(huán)起始條件循環(huán)結(jié)束條件循環(huán)增量四、for循環(huán)結(jié)構(gòu)的語(yǔ)法格式四、for循環(huán)結(jié)構(gòu)的語(yǔ)法格式for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句塊S;表達(dá)式1表達(dá)式2語(yǔ)句塊S表達(dá)式3YESNOfor(i=1;i<=5;i++){sum=sum+i;}i=1i<=5sum=sum+i;i++四、for循環(huán)結(jié)構(gòu)(1+2+3+4+5)輸出sum開(kāi)始sum=0i=1i=i+1i<=5YESsum=sum+i結(jié)束NOfor(i=1;i<=5;i=i+1){sum=sum+i;}#include

<stdio.h>void

main(){int

i,sum;sum=0;printf(“%d”,sum);}四、for循環(huán)語(yǔ)句與while循環(huán)語(yǔ)句的區(qū)別(1+2+3+4+5)i=1;while(i<=5){sum=sum+i;i=i+1;}#include

<stdio.h>void

main(){int

i,sum;sum=0;printf(“%d”,sum);}for(i=1;i<=5;i++){sum=sum+i;}#include

<stdio.h>void

main(){int

i,sum;sum=0;printf(“%d”,sum);}真正的累加算法并沒(méi)有改變,只是表達(dá)方式有點(diǎn)區(qū)別。for循環(huán)語(yǔ)句是

C的特色,表達(dá)方式簡(jiǎn)潔。for循環(huán)結(jié)構(gòu)本質(zhì)上也是當(dāng)型循環(huán)結(jié)構(gòu)。for循環(huán)說(shuō)明:最簡(jiǎn)單的應(yīng)用形式:

for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)語(yǔ)句例如:for(i=1;i<=10;i++)s=s*i;三個(gè)表達(dá)式均可缺省,但起分割作用的兩個(gè)分號(hào)不可省。例如:for(

;

;

)

等效于

while(1)表達(dá)式1省略,應(yīng)在for之前對(duì)循環(huán)變量賦初值i=1;for(;i<=5;i++)printf(“%d\n”,i);for(i=1;i<=5;i++)printf(“%d\n”,i);表達(dá)式2省略,則不判斷條件,循環(huán)無(wú)終止進(jìn)行下去表達(dá)式3省略,則應(yīng)另設(shè)法保證循環(huán)的結(jié)束此功能一定在循環(huán)體中完成例:for(i=1;i<=5;)

{printf(“%d\n”,i);i++;}(3)表達(dá)式1和表達(dá)式3可為逗號(hào)表達(dá)式,因此可以對(duì)多個(gè)變量賦初值及修改例如:for(i=1,j=10;i<=j;i++,j--)k=i+j;原則上表達(dá)式2不可省略,若省略需要在循環(huán)體中用其它手段(break、goto等)結(jié)束循環(huán)。(4)for語(yǔ)句的循環(huán)體還可為另一個(gè)循環(huán)語(yǔ)句for(i=1;i<=2;i++)for(j=1;j<=2;j++){printf(“%3d”,i+j);printf(“\n”);}output:

2334例如:【例】while和do-while循環(huán)的比較(1)

void

main(){int

i,sum=0;scanf("%d",&i);while(i<=10){sum=sum+i;i++;}printf(“sum=%d\n”,sum);}(2)void

main(){int

i,sum=0;scanf("%d",&i);do{sum=sum+i;i++;}while(i<=10);printf("sum=%d\n",sum);}循環(huán)至少執(zhí)行一次循環(huán)沒(méi)有被執(zhí)行輸入:12輸出:

sum=12輸入:12輸出:

sum=0三種循環(huán)語(yǔ)句的比較for

語(yǔ)句與while語(yǔ)句執(zhí)行過(guò)程相同,但for語(yǔ)句簡(jiǎn)潔、清晰,它將初始條件、判斷條件和循環(huán)變量的在一行書寫,顯得直觀、明了。while和do-while語(yǔ)句的循環(huán)控制變量初始化是在循環(huán)語(yǔ)句之前完成,而for語(yǔ)句循環(huán)變量的初始化是在for中(表達(dá)式1)中,也可以在for語(yǔ)句前實(shí)現(xiàn)。for語(yǔ)句和while語(yǔ)句是判斷條件后執(zhí)行循環(huán)體;而do-while是先執(zhí)行循環(huán)體后判斷條件,無(wú)論條件是否滿足都要執(zhí)行一次循環(huán)體。選擇三種循環(huán)的一般原則如果循環(huán)次數(shù)已知,用for如果循環(huán)次數(shù)未知,用while如果循環(huán)體至少要執(zhí)行一次,用do-while這只是“一般”原則,不是“原則”注意在for和while語(yǔ)句之后一般沒(méi)有分號(hào)有分號(hào)表示循環(huán)體就是分號(hào)之前的內(nèi)容(空循環(huán)體)while

(i

<

100);i++;for

(i

=

0;

i

<

100;

i++);printf("%d",

i);for通常有一個(gè)循環(huán)變量控制循環(huán)的次數(shù),不要在循環(huán)體內(nèi)改變這個(gè)變量四、啟發(fā)式教學(xué)for(i=1;i<=5;i++){sum=sum+i;}printf(“%d”,sum);#include

<stdio.h>void

main(){int

i,sum;sum=0;}for(i=1;i<=100;i++)問(wèn)題1:程序功能是什么?for(i=1;i<=100;i+=2)問(wèn)題2:程序功能是什么?for(i=30;i<=100;i+=2)問(wèn)題3:程序功能是什么?問(wèn)題4:循環(huán)體一共執(zhí)行了多少次?四、循環(huán)知識(shí)點(diǎn)總結(jié)分析:①

在解決問(wèn)題前,首先需要找出前后通項(xiàng)之間的遞推關(guān)系;②

在循環(huán)中,寫出遞推表達(dá)式,然后累加或累乘到結(jié)果變量中。對(duì)于如下的表達(dá)式:①累加和表達(dá)式:x1+x2+x3+…+xn②累乘表達(dá)式:t1*t2*t3*…*tn說(shuō)明:①其中需要累加的項(xiàng)xi或累乘的項(xiàng)ti稱為通項(xiàng)。②上述問(wèn)題通常采用循環(huán)算法解決。③累加和的循環(huán)表達(dá)式通常寫成:sum=sum+xi④累乘的循環(huán)表達(dá)式通常寫成:term=term*ti四、啟發(fā)式教學(xué)①如何求2+22+222+……(p94_13)term=1;for(m=1;m<=k;m++)term=term*m;此程序段的功能是什么?假真break表達(dá)式1真表達(dá)式2假循環(huán)語(yǔ)句的下一條語(yǔ)句循環(huán)語(yǔ)句的下一條語(yǔ)句假表達(dá)式1真表達(dá)式2假真continue五、循環(huán)輔助語(yǔ)句break

statementprintf(“Input

a

value

between

1

7:

”);scanf(“%d”,&value);for

(i =

1;

i

<=

7;

i++){if

(

i

==

value

)break;printf(“\n%d”,i);}printf(“I’m

out

of

the

loop!\n”);value???ii

<=

7i

==

valueInput

a

value

between

1-7:

_Input

a

value

between

1-7:

411

<=

7

true1

==

4

false4Input

a

value

between

1-7:

4122

<=

7

true2

==

4

falseInput

a

value

between

1-7:

41233

<=

7

true3

==

4

falseInput

a

value

between

1-7:

412344

<=

7

true4

==

4

trueInput

a

value

between

1-7:

5123

I’m

out

of

the

loop!Nowbrweahka?t

can退出一yo層u

循環(huán)

con或cluswdeitcahbout

break?continue

statementExample:for

(

i

=

0;

i

<=

5;

i++

){if

(

i

%

2

)continue;elseprintf(“%d

is

an

even

number.

”,

i);printf(“Print

iff

even

!

\n”);}i_00

<=

5

true01

<=

5

true12

<=

5

true3

<=

5

true4

<=

5

true5

<=

5

true1234101i

<=

5

i

%

26

<=

5

false

00

is

an

even

number._0is

an

even

number.

Print

iff

even

!_0is

an

even

number.

Print

iff

even

!2

is

an

even

number._0is

an

even

number.

Print

iff

even

!2is

an

even

number.

Print

iff

even

!_0is

an

even

number.

Print

iff

even

!2is

an

even

number.

Print

iff

even

!4

is

an

even

number._0is

an

even

number.

Print

iff

even

!2is

an

even

number.

Print

iff

even

!4is

an

even

number.

Print

iff

even

!_Nowcownhtaint

ucaen?you中c斷on此c次lu循de環(huán)a體bo的ut執(zhí)行,co開(kāi)nt始in下ue一?次56#include

<stdio.h>main(){int

i,

n;for

(i=1;

i<=5;

i++){printf("Please

enter

n:");scanf("%d",

&n);if

(n

<

0)break;printf("n

=

%d\n",

n);}printf("Program

is

over!\n");}Please

enter

n:10↙n

=

10Please

enter

n:

-10↙Program

is

over!break語(yǔ)句的用法#include

<stdio.h>main(){int

i,

n;er

n:");for

(i=1;

i<=5;

i++){printf("Please

entscanf("%d",

&n);if

(n

<

0)continue;printf("n

=

%d\n",

n);}printf("Program

is

over!\n");}Please

enter

n:

10↙n=10Please

enter

n:-10↙Please

enter

n:

20↙n=20Please

enter

n:-20↙Please

enter

n:

30↙n=30Program

is

over!continue語(yǔ)句的用法說(shuō)明:1、break語(yǔ)句可用于switch語(yǔ)句結(jié)構(gòu)中也可用于循環(huán)中。2、continue語(yǔ)句只可用于循環(huán)中。3、在循環(huán)嵌套中break與continue都只影響包含它的那層循環(huán)4、少用為妙習(xí)題:選擇下面程序的運(yùn)行結(jié)果#include

<stdio.h>void

main(void){inti;for(i=1;i<=5;i++){if(i%2)

printf("*");else

continue;printf("#");}printf("$\n");}A)*#*#*#$B)#*#*#*$C)*#*#$D)#*#*$一般形式:語(yǔ)句標(biāo)號(hào);goto……語(yǔ)句標(biāo)號(hào):……或語(yǔ)句標(biāo)號(hào):…………goto語(yǔ)句標(biāo)號(hào);goto語(yǔ)句void

main(){int

i,s;i=1;s=0;loop: /*標(biāo)號(hào)作用*/if(i<=100){s+=i;++i;gotoloop;}printf("%d\n",s);}5050通常goto語(yǔ)句與

if條件語(yǔ)句連用【例】用goto語(yǔ)句求s=1+2+3……100是goto的過(guò)錯(cuò)?還是程序員的過(guò)錯(cuò)?/*被goto跳過(guò)*/破壞了結(jié)構(gòu)化設(shè)計(jì)風(fēng)格容易帶來(lái)錯(cuò)誤隱患goto

next;int

sum

=

0;…next:Evil

goto’s

?

Maybe

Not…凌波微步,未必摔跤現(xiàn)代觀點(diǎn)認(rèn)為:混亂根源不在goto,而在標(biāo)號(hào)任何程序都可以不用goto就實(shí)現(xiàn)其功能但在某些情況下,使用goto可以讓程序更清晰兩種適合使用goto的情況跳向共同的出口位置,進(jìn)行退出前的處理工作跳出多重循環(huán)的一條捷徑{…{…goto

error;}}使用goto的原則主張少用、慎用,而不是禁用保證使用之后,程序仍然是單入口,單出口不要使用一個(gè)以上的標(biāo)號(hào)不要讓goto制造出永遠(yuǎn)不會(huì)被執(zhí)行的代碼六、循環(huán)嵌套內(nèi)循環(huán)交叉循環(huán)外循環(huán)入口內(nèi)循環(huán)出口內(nèi)循環(huán)出口外循環(huán)外循環(huán)出口六、循環(huán)嵌套嵌套循環(huán)的概念:一個(gè)循環(huán)結(jié)構(gòu),完整地包含在另一個(gè)循環(huán)結(jié)構(gòu)中。嵌套循環(huán):for(…){….for(…){….}…..}內(nèi)循環(huán)外循環(huán)六、循環(huán)嵌套執(zhí)行過(guò)程for(i=3;i<=6;i+=2)for(j=12;j<=38;j+=13)printf(("%d,%d\n",i,j);i=3j=12j=25j=38j=12j=25j=38i=5i=3j=12j=j+13i<=6YESNONOj<=38YES輸出i,ji=i+2退出雙重循環(huán)循環(huán)嵌套在循環(huán)體中,又包含有循環(huán)結(jié)構(gòu)即構(gòu)成循環(huán)嵌套1

2

3

4

5

6

7

8

9--------------------------------------12

43

6

94

8

12

165

10

15

20

256

12

18

24

30

367

14

21

28

35

42

498

16

24

32

40

48

56

649

18

27

36

45

54

63

72

81行循環(huán)中包含列循環(huán)輸出下三角形乘法九九表例7

8

9-------------3

6

9491

2

3------------12

44

8

125

10

156

12

184

5

6-------------1620

2524

30

367

16243240489

182736455456

6463

72

81思路:行號(hào)為i,列號(hào)為j(1<=i<=9)(1<=j<=i)則:第i行中一共要輸出i

個(gè)乘積i=7j=5i*j#include

<stdio.h>void

main

(

){

int

i=1,

j;while

(i

<=

9

)printf

("%4d",i++);/*i:行計(jì)數(shù)器

j:列計(jì)數(shù)器

*//*

控制打印表頭*/printf("\n----------------------------------\n");for

(i=1;i<=9;i++)

/*

行循環(huán)入口*/計(jì)數(shù)器置1

*/{j=1;while(j<=i

)/*嵌套的內(nèi)循環(huán)。輸出第i行*//*輸出乘積*//*

列計(jì)數(shù)器+1

*/{printf

(“%4d”,

i*j);j

++;}printf

("\n");/*

一行輸出結(jié)束后,輸出\n

*/}}打印九九乘法表(三角形)內(nèi)循環(huán)終值與外循環(huán)變量有/*

列關(guān)用for語(yǔ)句實(shí)現(xiàn)打印乘法九九表(三角形)#include

<stdio.h>void

main

(

){

int

i,j;for

(

i=1;

i<10;

i++

)printf

(“%4d”,i);

/*

打印表頭*/printf

("\n--------------------------\n");for(i=1;

i<10;

i++)

/*

控制打印表體*/j<=i;for

(

j=1; j++

)printf

(

(j==i)

?

"%4d\n":"%4d",i*j);}若要打印完整的九九乘法表,則哪里需要修改?七、循環(huán)應(yīng)用_【案例】(研究性教學(xué)、計(jì)算思維)【案例】求1!+2!+3!+……+n!分析:該問(wèn)題本質(zhì)上是求累加和,所以通過(guò)循環(huán)求出每一通項(xiàng)的值,然后將其累加到累加和上。如何求出通項(xiàng)的值?有2種方法。七、循環(huán)應(yīng)用【案例】求1!+2!+3!+……+n!(第一種解決方案)term=1;for(j=1;j<=i;j++)term=term*j;sum=sum+term;#include<stdio.h>void

main(){int

i,j,n;float

term,sum;scanf("%d",&n);sum=0;for(i=1;i<=n;i++){}printf("n=%d,sum=%f",n,sum);}七、循環(huán)應(yīng)用【案例】求1!+2!+3!+……+n!(第二種解決方案)term=term*i;

//i!=(i-1)!*i;遞推關(guān)系

sum=sum+term;#include<stdio.h>void

main(){int

i,j,n;float

term,sum;scanf("%d",&n);sum=0;term=1;for(i=1;i<=n;i++){}printf("n=%d,sum=%f",n,sum);}比較其時(shí)間效率例:打印出所有的“水仙花數(shù)”(一個(gè)3位數(shù),其各位數(shù)字的立方和等于該數(shù)本身。153=13+53+33)#include

"stdio.h"void

main(

){

int

i,j,k,n;for

(n=100;n<1000;n++){

i=n/100;j=n/10-i*10;k=n%10;/*百位數(shù)*//*十位數(shù)*//*個(gè)位數(shù)*/if(n==i*i*i+j*j*j+k*k*k)printf("%d\n",n);

}}【案例】設(shè)計(jì)一個(gè)程序,輸入一個(gè)n位數(shù)(n>=3),將各數(shù)字分開(kāi),并按其反序輸出。分析:問(wèn)題的關(guān)鍵是如何將一個(gè)數(shù)字的各位分開(kāi)?如1234,將其分解成1,2,3,4。初值:step1:x0=1234r1=x0%10

=

4x1=x0/10

=

123r2=x1%10

=

3x2=x1/10

=

12r3=x2%10

=

2x3=x2/10

=

1r4=x3%10

=

1x4=x3/10

=

0step2:step3:step4:程序:#include<stdio.h>void

main(){int

x,r;scanf("%d",&x);while(x!=0){r=x%10;x=x/10;printf("%d",r);}printf("\n");}遞推公式:運(yùn)行結(jié)果輸入一個(gè)整數(shù):5353443535【案例】編一程序求出滿足不等式的最小n值。分析:此題不等式左邊和式中的數(shù)據(jù)項(xiàng)(求和項(xiàng))個(gè)數(shù)是未知的,也正是需要求出的的n。因此用while循環(huán)比較方便。對(duì)于和式中的每個(gè)數(shù)據(jù)項(xiàng)(求和項(xiàng)),i=1,2,...n,可采用循環(huán)累加的方法來(lái)計(jì)算出不等式的和。設(shè)循環(huán)變量為i,它應(yīng)從1開(kāi)始取值,每次增加1,直到不等式的值不小于5為止,此時(shí)的i值就是所求的n。設(shè)累加和用變量s表示12

31

1n1

+

+

+

+

?

5采用while循環(huán)編寫出程序如下:#include<stdio.h>void

main(){int

i=0;double

s=0;while(s<5)s=s

+

1.0/++i;printf("n=%d\n",i);}采用for循環(huán)編寫程序,則如下所示:#include<stdio.h>void

main(){int

i;double

s=0;for(i=1;

s<5;

i++)s+=1.0/i;printf("n=%d\n",i-1);/*注意:此i-1的值為所求的n值*/}該程序的輸出結(jié)果應(yīng)為:n=83八、循環(huán)的綜合應(yīng)用_邏輯推理問(wèn)題【案例】(誰(shuí)做的好事)已知有有四位同學(xué)中的一位做了好事,不留名,表?yè)P(yáng)信來(lái)了之后,校長(zhǎng)問(wèn)這四位是誰(shuí)做的好事。A說(shuō):不是我。

B說(shuō):是C。C說(shuō):是D。D說(shuō):他胡說(shuō)。已知三個(gè)人說(shuō)的是真話,一個(gè)人說(shuō)的是假話。現(xiàn)在要根據(jù)這些信息,找出做了好事的人。循環(huán)的綜合應(yīng)用_邏輯推理問(wèn)題1.算法分析⑴我們把四個(gè)人說(shuō)的四句話寫成關(guān)系表達(dá)式。四個(gè)人分別用’A’、’B’、’C’、’D’表示(必須用4個(gè)連續(xù)常數(shù)表示,也可以是1、2、3、4)。定義變量thisman表示做好事的人。將相關(guān)的陳述寫成關(guān)系表達(dá)式和邏輯表達(dá)式四個(gè)人說(shuō)的話關(guān)系表達(dá)式A說(shuō):不是我。thisman!=‘A’B說(shuō):是C。thisman==‘C’C說(shuō):是D。thisman==‘D’D說(shuō):他胡說(shuō)。thisman!=‘D’循環(huán)的綜合應(yīng)用_邏輯推理問(wèn)題⑵關(guān)系表達(dá)式的計(jì)算結(jié)果只有0(假)和1(真)兩種結(jié)果?,F(xiàn)在“已知三個(gè)人說(shuō)的是真話,一個(gè)人說(shuō)假話”,也就是表中的4個(gè)關(guān)系表達(dá)式中有3個(gè)是真的,1個(gè)是假的。因此4個(gè)關(guān)系表達(dá)式的值的和應(yīng)該等于3。定義變量cond表示四個(gè)關(guān)系表達(dá)式的和:cond=(thisman!='A')+(thisman=='C')+(thisman=='D')+(thisman!='D');那么,cond==3循環(huán)的綜合應(yīng)用_邏輯推理問(wèn)題⑶窮舉試探。我們現(xiàn)在并不知道是誰(shuí)做的好事,但我們知道做好事的人是A,B,C,D四個(gè)人中的某一個(gè)。因此,我們可以一個(gè)一個(gè)地試探。

先假設(shè)是A做的好事,即thisman=‘A’,然后看

cond==3條件是否成立,然后再假設(shè)是B做的好事,即

thisman=‘B’,再測(cè)試條件cond==3是否成立,如此繼續(xù)下去,將所有可能的情況(本例有4種情況)都測(cè)試一遍,在實(shí)際編程過(guò)程中,都是使用循環(huán)來(lái)一個(gè)一個(gè)的測(cè)試循環(huán)的綜合應(yīng)用_邏輯推理問(wèn)題#include<stdio.h>void

main(){char

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論