版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
*第1頁第8章循環(huán)結(jié)構(gòu)§8.1for語句
§8.2while語句
§8.3do~while語句
§8.4用于循環(huán)中的break和continue語句
§8.5循環(huán)結(jié)構(gòu)的嵌套
§8.6goto語句
§8.7程序范例
*第2頁循環(huán)語句概述問題:求1~100的累計(jì)和。根據(jù)已有的知識,可以用“1+2+……+100”來求解,但顯然很繁瑣?,F(xiàn)在換個(gè)思路來考慮:首先設(shè)置一個(gè)累計(jì)器sum,其初值為0,利用sum=sum+i來計(jì)算(i依次取1、2、……、100),只要解決以下3個(gè)問題即可:
(1)將i的初值置為1;
(2)每執(zhí)行1次“sum=sum+i”后,i增1;
(3)當(dāng)n增到101時(shí),停止計(jì)算。此時(shí),sum的值就是1~100的累計(jì)和。
*第3頁根據(jù)已有的知識,單獨(dú)實(shí)現(xiàn)每一步都不難。但是,由于需要經(jīng)常使用這種重復(fù)計(jì)算結(jié)構(gòu)(稱為循環(huán)結(jié)構(gòu)),C語言提供了循環(huán)語句來實(shí)現(xiàn),以簡化、并規(guī)范循環(huán)結(jié)構(gòu)程序設(shè)計(jì)。在C語言中,可用以下語句實(shí)現(xiàn)循環(huán):(1)用for語句。(2)用do-while語句。(3)用while語句。*第4頁§8.1for語句
循環(huán)的意思就是讓程序重復(fù)地執(zhí)行某些語句。C語言提供的循環(huán)結(jié)構(gòu)有三種:for語句、while語句和do_while語句。for語句既可以用于循環(huán)次數(shù)已知的情況,也可用于循環(huán)次數(shù)預(yù)先不知道的情況。for語句的一般形式為:
for(<初始表達(dá)式>);<條件表達(dá)式>;<循環(huán)表達(dá)式>)
<循環(huán)體語句>*第5頁功能:先計(jì)算<初始表達(dá)式>的值,然后判斷<條件表達(dá)式>的值,若該值為“假”,則退出循環(huán),執(zhí)行循環(huán)體下面的語句;若該值為“真”,則執(zhí)行<循環(huán)體語句>,然后計(jì)算<循環(huán)表達(dá)式>的值,再判斷<條件表達(dá)式>的值,重復(fù)以上的操作。for語句的流程圖如圖:一般情況下,<循環(huán)體語句>是由一對花括括起來的復(fù)合語句。*第6頁【例8-1】求1+2+3+…+100的和。
幾何級數(shù)求和問題,其數(shù)學(xué)表達(dá)式為:*第7頁/*exam8_1.c簡單幾何級數(shù)的和*/#include<stdio.h>main(){ inti,sum; sum=0;
sum=sum+i; printf("sum=%d\n",sum);}程序運(yùn)行結(jié)果:sum=5050for(i=1;i<=100;i++)*第8頁for循環(huán)語句注意:
①<初始表達(dá)式>可以省略,但須保留分號(;),同時(shí)在for之前必須給循環(huán)變量賦值,如:i=1;for(;i<=100;i++)sum=sum+i;②<條件表達(dá)式>一般不可省略,否則為無限循環(huán)。如:for(i=1;;i++)
sum=sum+i;相當(dāng)于條件總為真,程序會一直不停的執(zhí)行直到“數(shù)據(jù)溢出”。*第9頁③<循環(huán)表達(dá)式>亦可省略,但在循環(huán)語句體中必須有語句來修改循環(huán)變量,以使條件表達(dá)式的值在某一時(shí)刻為0,從而能正常結(jié)束循環(huán)。如:for(sum=0,i=1;i<=100;){sum=sum+i;i++;}④三個(gè)表達(dá)式均省略,即for(;;),為無限循環(huán),程序中要避免這種情況的發(fā)生。⑤條件表達(dá)式可以是關(guān)系表達(dá)式、數(shù)值表達(dá)式。只要表達(dá)式的值0。就執(zhí)行循環(huán)語句。如:for(i=0;(c=getchar())!=‘\n’;i+=c);*第10頁⑥初始表達(dá)式、循環(huán)表達(dá)式可以是逗號表達(dá)式如:for(sum=0,i=1;i<=100;i++,i++)相當(dāng)于:sum=0;for(i=1;i<=100;i=i+2)⑦for循環(huán)也可以嵌套,執(zhí)行時(shí)是由外向里,逐層進(jìn)行,先執(zhí)行外層循環(huán),再進(jìn)入內(nèi)層循環(huán);退出時(shí)相反,由里向外逐層退出,先退出內(nèi)層循環(huán),然后退到上一層循環(huán)。【例8-2】任意從鍵盤輸入兩個(gè)整數(shù)a、b(a<b),求它們之間的幾何級數(shù)的和,數(shù)學(xué)表達(dá)式為。*第11頁這個(gè)問題與例8-1類似,只是所求級數(shù)和的初值和終值不一樣,是由鍵盤任意輸入的,為避免計(jì)算機(jī)錯(cuò)誤,要求初值a要小于終值b。算法流程圖如右圖:*第12頁/*exam8_2.c求幾何級數(shù)的和*/#include<stdio.h>main(){ inti,j,a,b,sum=0; printf("Pleaseinputtwonumber:\n"); scanf("a=%d,b=%d",&a,&b); i=a;j=b; if(a>b) {i=b;j=a;} for(;i<=j;i++) sum=sum+i; printf("sum=%d\n",sum);}*第13頁例5-3求10!/************************************//*程序名:8_3.c(循環(huán)語句示例)*//*作者:lcx*//*編制時(shí)間:2010年9月20日*//*主要功能:計(jì)算10的階乘*//************************************/#include<stdio.h>/*預(yù)編譯命令*/voidmain()/*主函數(shù)*/{ /*主函數(shù)開始*/ inti=0,j=0,k=0;/*聲明i,j,k為整型變量,并初始化為0*/doublesum=1;/*聲明sum變量,并初始化為1*/ for(i=10;i>=1;i=i-1)/*用for循環(huán)作累乘運(yùn)算*/ {
printf("i=%d",i)
; /*顯示i*/ sum=sum*i; /*每一步乘積*/
printf(“\tsum=%lf\n”,sum);/*顯示每一步乘積*/
}printf(“10!=%lf”,sum); /*顯示運(yùn)算結(jié)果*/getch();} /*主函數(shù)結(jié)束*/*第14頁i=10 sum=10i=9 sum=90i=8 sum=720i=7 sum=5040i=6 sum=30240i=5 sum=151200i=4 sum=604800i=3 sum=1814400i=2 sum=3628800i=1 sum=362880010!=3628800該程序的運(yùn)行結(jié)果如下:*第15頁將10!展開為
10×9×8×7×6×5×4×3×2×1讓整型變量i去表示10,9,…,1讓長整型變量sum來表示乘積,初始時(shí)讓其為1將求10的階乘考慮成累乘問題,讓i=10去乘sum再將積存至sum中,即
sum=sum*i
之后讓
i=i-1,再用上式累乘,不斷地反復(fù)做這兩個(gè)運(yùn)算,從i=10,9,…,1。就完成了求10!的任務(wù)。見圖8.2求10!的思路是,圖3.2圖8.2*第17頁恰好計(jì)算機(jī)擅長做這種重復(fù)操作,使用for循環(huán)是最佳選擇。讓循環(huán)控制變量i就是數(shù)字10,9,…,1。
i的初值為10,終值為1。for
循環(huán)的三個(gè)表達(dá)式為:
表達(dá)式1為i=10;
表達(dá)式2為i>=1;
表達(dá)式3為i=i-1;*第18頁§5.2while語句
While語句也是一種用于產(chǎn)生循環(huán)動(dòng)作的語句,一般形式為:while(<表達(dá)式>)
<循環(huán)體語句>功能:先計(jì)算<表達(dá)式>的值,若該值為“假”,則跳出循環(huán),執(zhí)行循環(huán)體后面的語句;若該值為“真”,則執(zhí)行<循環(huán)體語句>,然后回過頭來再檢查<表達(dá)式>的值,重復(fù)以上的操作。while語句的流程圖*第19頁<循環(huán)語句體>:是用一對花括號括起來的復(fù)合語句。注意:在<循環(huán)語句體>中要有使<表達(dá)式>的值為假(或<表達(dá)式>的值為零)的語句,否則會使程序出現(xiàn)無限循環(huán)而發(fā)生錯(cuò)誤。注意:由于while循環(huán)是先判斷<表達(dá)式>的值,后決定是否執(zhí)行<循環(huán)語句>,因此,有可能一次也不執(zhí)行<循環(huán)語句>。*第20頁【例8-4】將例8-1用while語句重寫,求簡單幾何級數(shù)的和。/*exam5_4.c用while求簡單幾何級數(shù)的和*/#include<stdio.h>main(){ inti=1,sum=0; while(i<=100) { sum=sum+i;
i++; } printf("sum=%d\n",sum);}程序運(yùn)行結(jié)果:sum=5050*第21頁while語句和for語句都是在循環(huán)前先判斷條件while語句說明表達(dá)式1;while(表達(dá)式2){
for的循環(huán)體語句;
表達(dá)式3;}把for語句改寫成while語句for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
循環(huán)體語句*第22頁while和for的比較for(i=1;i<=10;i++)
sum=sum+i;i=1;
循環(huán)變量賦初值while(i<=10){循環(huán)條件
sum=sum+i;
i++;循環(huán)變量的改變}循環(huán)體*第23頁例8-5從鍵盤輸入一批學(xué)生的成績,計(jì)算平均分。分析:求累加和確定循環(huán)條件不知道輸入數(shù)據(jù)的個(gè)數(shù),無法事先確定循環(huán)次數(shù)用一個(gè)特殊的數(shù)據(jù)作為正常輸入數(shù)據(jù)的結(jié)束標(biāo)志,比如選用一個(gè)負(fù)數(shù)作為結(jié)束標(biāo)志。*第24頁#include<stdio.h>intmain(void){intnum; doublegrade,total; num=0;total=0; printf(“Entergrades:\n"); scanf("%lf",&grade);/*輸入第1個(gè)數(shù)*/
while(grade>=0){/*輸入負(fù)數(shù),循環(huán)結(jié)束*/
total=total+grade; num++;scanf(“%lf”,&grade); } if(num!=0)printf(“Gradeaverageis%.2f\n",total/num); elseprintf("Gradeaverageis0\n");return0;}Entergrades:6788735482-1Gradeaverageis72.80Entergrades:-16788735482Gradeaverageis0*第25頁§8.3do~while語句
do_while語句是另一種用于產(chǎn)生循環(huán)動(dòng)作的語句。一般形式為:do{<循環(huán)體語句>}while(<表達(dá)式>);功能:先執(zhí)行一次<循環(huán)體語句>,然后計(jì)算<表達(dá)式>的值,若該值為“真”,則重復(fù)以上的操作,直到該值為“假”,則退出循環(huán)語句,執(zhí)行下一條語句。do_while語句的流程圖:*第26頁<循環(huán)語句體>應(yīng)該是用一對花括號括起來的復(fù)合語句。注意:要有可以使<表達(dá)式>的值為“假”(即<表達(dá)式>的值等于零)的語句,否則會使程序出現(xiàn)無限循環(huán)而發(fā)生錯(cuò)誤。do_while循環(huán)與while循環(huán)的區(qū)別,不論情況怎樣,do_while循環(huán)中的<循環(huán)語句體>至少會執(zhí)行一次。*第27頁【例8-6】將例8-5用do_while語句重寫。*第28頁#include<stdio.h>Intmain(void){intnum; doublegrade,total; num=0;total=0;do {
printf(“Entergrades:");scanf(“%lf”,&grade);total=total+grade; num++; }while(grade>=0);/*輸入負(fù)數(shù),循環(huán)結(jié)束*/printf(“Gradeaverageis%.2f\n",(total+1)/(num-1)); return0;}Entergrades:6788735482-1Gradeaverageis72.80Entergrades:-16788735482Gradeaverageis0*第29頁【例8-7】求sin(x)=x-x3/3!+x5/5!-x7/7!+…直到最后一項(xiàng)絕對值小于le-7(即10-7)為止。分析:
多項(xiàng)式從第二項(xiàng)起,每一項(xiàng)都是前一項(xiàng)乘以一個(gè)因子,
(-x2)/(n*(n-1))(n=3,5,7,9……)
用s代表sin(x)的值,t代表每一項(xiàng)的值,則:t=t*(-x2)/(n*(n-1));s=s+t;
x的值是用弧度值表示的(10=/180弧度),如:
3000.523598775算法流程圖如后圖:*第30頁*第31頁/*exam8_8.c求sin(x)的值*/#include<stdio.h>#include<math.h>main(){ doubles,t,x; intn=1; scanf("%lf",&x); t=x; s=x; do {
n=n+2; t=t*(-x*x)/(n*(n-1)); s=s+t; }while(fabs(t)>=1e-7); printf("sin(%lf)=%lf\n",x,s);}程序運(yùn)行結(jié)果:1.57sin(1.570000)=1.000000
*第32頁
while
是先判別條件,再決定是否循環(huán);
do-while
是先至少循環(huán)一次,然后再根據(jù)循環(huán)的結(jié)果決定是否繼續(xù)循環(huán)。while和do-while的比較真假表達(dá)式循環(huán)體語句do-while的下一條語句真假while的下一條語句表達(dá)式循環(huán)體語句*第33頁
循環(huán)語句的選擇if(循環(huán)次數(shù)已知) 使用for語句else /*循環(huán)次數(shù)未知*/ if(循環(huán)條件在進(jìn)入循環(huán)時(shí)明確)
使用while語句
else /*循環(huán)條件需要在循環(huán)體中明確*/
使用do-while語句*第34頁§8.4
用于循環(huán)中的break和continue語句
一、break語句break語句的作用是從一種控制結(jié)構(gòu)中跳出來。break語句可用于循環(huán)結(jié)構(gòu),其作用是從本層循環(huán)結(jié)構(gòu)中跳出,可以提前結(jié)束執(zhí)行<循環(huán)語句體>,執(zhí)行循環(huán)結(jié)構(gòu)外的下一條語句。break語句的一般形式為:break;
break語句在循環(huán)語句體中的位置應(yīng)根據(jù)程序的需要而定,一般是用在循環(huán)體內(nèi)某一個(gè)if條件分支的語句中,用來表示在循環(huán)過程中當(dāng)某一個(gè)條件成立時(shí)提前結(jié)束循環(huán)。*第35頁
程序解析-判斷素?cái)?shù)算法:除了1和m,不能被其它數(shù)整除。設(shè)i取值[2,m-1]如果m不能被該區(qū)間上的任何一個(gè)數(shù)整除,即對每個(gè)i,m%i都不為0,則m是素?cái)?shù)只要找到一個(gè)i,使m%i為0,則m肯定不是素?cái)?shù)m%2%3%4%5%(m-1)不是素?cái)?shù)||==0==0是素?cái)?shù)&&!=0!=0m不可能被大于m/2的數(shù)整除
i取值[2,m-1]、[2,m/2]、[2,]for(i=2;i<=m/2;i++)if(m%i==0)break;if(i>m/2)printf("yes\n")elseprintf("no\n”);*第36頁intmain(void){inti,m; printf(“Enteranumber:"); scanf("%d",&m); for(i=2;i<=m/2;i++) if(m%i==0)break; if(i>m/2)printf("%disaprimenumber!\n",m); elseprintf("No!\n"); }源程序-判斷素?cái)?shù)Enteranumber:9NoEnteranumber:1111isaprimenumber!循環(huán)條件?循環(huán)的結(jié)束條件?*第37頁break語句while(exp){
語句1if(expb)break;
語句2}真假
exp
語句1假
expb
語句2循環(huán)體真for(i=2;i<=m/2;i++) if(m%i==0)break;if(i>m/2)printf("Yes");elseprintf("No!\n");當(dāng)循環(huán)有多個(gè)出口時(shí):表示循環(huán)條件區(qū)分結(jié)束條件for(i=2;i<=m/2;i++)if(m%i==0){printf("No!\n");break;}printf("Yes");*第38頁二、Continue語句Continue語句只適用于循環(huán)結(jié)構(gòu),其一般形式為:作用:提前結(jié)束本次循環(huán),提前進(jìn)行下一次循環(huán)。【例8-10】編寫程序,打印100-200中不能被3整除的數(shù)。/*exam5_10.c求不能被3整除的數(shù)*/#include<stdio.h>main(){ intn; for(n=100;n<=200;n++) { if(n%3==0) continue; printf("%d\t",n); }}*第39頁算法流程圖如圖:要準(zhǔn)確地使用break語句和continue語句,除非有必要,否則若可以不用則盡量不采用break語句和continue語句。*第40頁對于例8-10的問題,打印100-200中不能被3整除的數(shù)。不采用continue語句的算法流程圖如圖所示:*第41頁/*exam8q10.c例8-10問題不用continue*/#include<stdio.h>
main(){ intn; for(n=100;n<=200;n++) if(n%3
!=0)/*n不能被3整除*/
printf("%d",n); }*第42頁【例8-11】break語句和continue語句在程序中的區(qū)別/*exam5_11.cbreak的作用*/#include<stdio.h>main(){ intx; for(x=1;x<=10;++x) { if(x==5) break; printf("%d",x); }}運(yùn)行結(jié)果:1,2,3,4,/*exam5q11.ccontinue的作用*/#include<stdio.h>main(){intx; for(x=1;x<=10;++x) { if(x==5) continue; printf("%d,",x); }}運(yùn)行結(jié)果:1,2,3,4,6,7,8,9,10,*第43頁§8.5循環(huán)結(jié)構(gòu)的嵌套
循環(huán)結(jié)構(gòu)的嵌套,指的是某一種循環(huán)結(jié)構(gòu)的語句中,包含有另一個(gè)循環(huán)結(jié)構(gòu)。
使用嵌套的結(jié)構(gòu)時(shí),要注意嵌套的層次,不能交叉。例8.12
求1!+2!+….+100!*第44頁嵌套循環(huán)for(i=1;i<=100;i++){item=i!sum=sum+item;}for(i=1;i<=100;i++){
item=1; for(j=1;j<=i;j++) item=item*j;sum=sum+item;}*第45頁例4-6源程序#include<stdio.h>intmain(void){ inti,j; doubleitem,sum;/*item存放階乘*/ sum=0;
for(i=1;i<=100;i++){
item=1;/*每次求階乘都從1開始*/ for(j=1;j<=i;j++) /*內(nèi)層循環(huán)算出item=i!*/ item=item*j; sum=sum+item; } printf("1!+2!+3!+…+100!=%e\n",sum);}*第46頁內(nèi)層循環(huán)的初始化for(i=1;i<=100;i++){
item=1;
for(j=1;j<=i;j++) item=item*j;sum=sum+item;}求1!+2!+….+100!item=1;for(i=1;i<=100;i++){for(j=1;j<=i;j++)item=item*j;sum=sum+item;}求1!+1!*2!+……+1!*2!*……*100!?*第47頁分析嵌套循環(huán)的執(zhí)行過程for(i=1;i<=100;i++){item=1;
for(j=1;j<=i;j++) item=item*j;sum=sum+item;}
外層循環(huán)變量i的每個(gè)值內(nèi)層循環(huán)變量j變化一個(gè)輪次;內(nèi)外層循環(huán)變量不能相同分別用i
和j*第48頁for(i=1;i<=100;i++)for(j=1;j<=i;j++) printf("%d%d\n",i,j);*第49頁【例8-13】設(shè)公雞每只5元,母雞每只3元,小雞每元3只,現(xiàn)用100元錢買100只雞,編寫一個(gè)程序,算出可以各買多少只雞?#include<stdio.h>main(){inti,j,k;for(i=0;i*5<=100;i++)for(j=0;j*3<=100;j++)for(k=0;k/3<=100;k+=3) if((i*5+j*3+k/3)==100&&(i+j+k)==100)printf("Cock-%d\tHen-%d\tChicken-%d\n",i,j,k);}*第50頁程序運(yùn)行結(jié)果:Cock--0Hen--25Chicken--75Cock--4Hen--18Chicken--78Cock--8Hen--11Chicken--81Cock--12Hen--4Chicken--84*第51頁§8.6goto語句
goto語句是一種無條件轉(zhuǎn)向語句,它可以用在程序的任何地方,其一般形式為:goto語句標(biāo)號;“語句標(biāo)號”為任何合法的標(biāo)識符,放在某個(gè)語句前面并加上冒號“:”作為語句的標(biāo)號,標(biāo)號只對goto語句有意義,帶有標(biāo)號的語句被稱作標(biāo)號語句。如:error:、end:、exp:等均為合法的語句的標(biāo)號。goto語句的作用:轉(zhuǎn)到標(biāo)號語句所在的地方繼續(xù)執(zhí)行。*第52頁【例8-14】用if語句和goto語句組合構(gòu)成的循環(huán)重寫計(jì)算器的程序。/*exam5_13.cif+goto構(gòu)成循環(huán)*/#include<stdio.h>main(){ inti,sum=0; i=1;
loop:if(i<=100) { sum=sum+i; i++;
gotoloop; } printf("sum=%d",sum);}程序運(yùn)行結(jié)果:sum=5050goto語句是一種非結(jié)構(gòu)化的語句,在程序設(shè)計(jì)中應(yīng)盡量少用或不用goto語句。
*第53頁小結(jié):三種循環(huán)結(jié)構(gòu):for、while和do_while循環(huán)。當(dāng)循環(huán)次數(shù)是肯定的情況下,用for循環(huán)比較方便。while循環(huán)和for循環(huán)都要先判斷條件再執(zhí)行循環(huán)語句體,因此,有可能一次也不執(zhí)行循環(huán)語句體。do_while循環(huán)不論怎樣都會先執(zhí)行一次循環(huán)語句體。注意避免以下幾個(gè)方面的問題:1.循環(huán)語句體為復(fù)合語句,但沒有使用花括號。2.使程序發(fā)生無限循環(huán)。3.混淆break語句與continue語句的功能。*第54頁循環(huán)程序設(shè)計(jì)循環(huán)程序的實(shí)現(xiàn)要點(diǎn):歸納出哪些操作需要反復(fù)執(zhí)行?
循環(huán)體這些操作在什么情況下重復(fù)執(zhí)行?
循環(huán)條件選用合適的循環(huán)語句forwhiledo-while循環(huán)具體實(shí)現(xiàn)時(shí)考慮(循環(huán)條件):事先給定循環(huán)次數(shù),首選for通過其他條件控制循環(huán),考慮while或do-while*第55頁#include<stdio.h>intmain(void){inti,mark,max,n;
printf("Entern:");scanf("%d",&n);printf("Enter%dmarks:",n);scanf("%d",&mark); /*讀入第一個(gè)成績*/max=mark;/*假設(shè)第一個(gè)成績是最高分*/
for(i=1;i<n;i++){scanf("%d",&mark);if(max<mark)max=mark;}printf("Max=%d\n",max);return0;}例8-18輸入一批學(xué)生的成績,求最高分(for)markmaxmaxmarkEntern:5Enter5maks:6788735482Max=88Entern:0*第56頁#include<stdio.h>intmain(void){intmark,max;printf(“Entermarks:");scanf("%d",&mark);/*讀入第一個(gè)成績*/max=mark;/*假設(shè)第一個(gè)成績最高分*/
while(mark>=0){if(max<mark)max=mark;scanf("%d",&mark);};printf("Max=%d\n",max);return0;}例8-19輸入一批學(xué)生的成績,求最高分(while)Entermarks:6788735482-1Max=88Entermarks:-1*第57頁#include<stdio.h>intmain(void){intmark,max;
max=-1;/*給max賦一個(gè)小初值*/printf(“Entermarks:");
do{scanf("%d",&mark);if(max<mark)max=mark;}while(mark>=0);printf("Max=%d\n",max);}例8-20輸入一批學(xué)生的成績,求最高分(do-while)Entermarks:6788735482-1Max=88Entermarks:-1
邏輯判斷與解題思路*第59頁某地刑偵大隊(duì)對涉及六個(gè)嫌疑人的一樁疑案進(jìn)行分析:
A、B至少有一人作案;A、E、F三人中至少有兩人參與作案;A、D不可能是同案犯;B、C或同時(shí)作案,或與本案無關(guān);C、D中有且僅有一人作案;如果D沒有參與作案,則E也不可能參與作案。
試編一程序,將作案人找出來。案件偵破*第60頁1、邏輯與,運(yùn)算符為&&圖5.1為了解這道題,我們要研究邏輯運(yùn)算符與邏輯表達(dá)式。
如圖電路
A——表示開關(guān)A合上;
B——表示開關(guān)B合上;
A&&B——表示燈亮;*第61頁 1表示真,0表示假,
這是邏輯變量的取值,非真即假ABA&&B111100010000*第62頁2、邏輯或,運(yùn)算符為||圖4.2
如圖電路
A——表示開關(guān)A合上;
B——表示開關(guān)B合上;
A||B——表示燈亮;*第63頁 1表示真,0表示假ABA||B111101011000*第64頁3、邏輯非,運(yùn)算符為!
兩隊(duì)比賽籃球,變量A表示A隊(duì)到場,!A表示A隊(duì)不到場,變量B表示B隊(duì)到場,!B表示B隊(duì)不到場。*第65頁思路:1、案情分析:
將案情的每一條寫成邏輯表達(dá)式, 第一條用CC1
表示, 第二條用CC2
表示,
……*第66頁CC1:A和B至少有一人作案令A(yù)變量表示A作案,B變量表示B作案ABCC1000101011111顯然這是或的關(guān)系,有CC1=(A||B)*第67頁CC2:A和D不可能是同案犯可以分析為:A如果是案犯,D一定不是案犯,寫成
A&&(!D)D如果是案犯,A一定不是案犯,寫成
D&&(!A)A和D都不是案犯,寫成(!A)&&(!D)這三者之間是或的關(guān)系,因此有
CC2=!(A&&D)*第68頁
CC2=!(A&&D)ADA&&DCC21001111000010101*第69頁CC3:A、E、F中至少有兩人涉嫌作案分析有三種可能第一種,A和E作案,(A&&E)第二種,A和F作案,(A&&F)第三種,E和F作案,(E&&F)這三種可能性是或的關(guān)系,因此有CC3=(A&&E)||(A&&F)||(E&&F)我們寫出CC3
的真值表。*第70頁AEFCC311111101101101110010010010000000CC3=(A&&E)||(A&&F)||(E&&F)*第71頁CC4:B和C或同時(shí)作案,或都與本案無關(guān)第一種情況:同時(shí)作案(B&&C)第二種情況:都與本案無關(guān)(!B&&!C)兩者為或的關(guān)系,因此有
CC4=(B&&C)||(!B&&!C)BC!B!CB&&C!B&&!CCC51100101100100001100000011011*第72頁CC5:C、D中有且僅有一人作案
CC5=(C&&!D)||(D&&!C)*第73頁CC6:如果D沒有參與作案,則E也不可能參與作案。分析這一條比較麻煩一些,可以列出真值表再歸納DE!ECC6含義1101D作案,E也作案可能1011D作案,E不作案可能0011D不作案,E也不可能作案可能0100D不作案,E卻作案不可能*第74頁CC6=D||!E以上是案情分析,已經(jīng)化成了計(jì)算機(jī)可解的邏輯表達(dá)式*第75頁6個(gè)人每個(gè)人都有作案或不作案兩種可能,因此有種組合,從這些組合中挑出符合6條分析的作案者。 定義6個(gè)整數(shù)變量,分別表示6個(gè)人A,B,C,D,E,F(xiàn)。 枚舉每個(gè)人的可能性讓0表示不是罪犯;讓1表示就是罪犯。2、采取枚舉方法,枚舉什么呢?枚舉組合*第76頁ABCDEF000000000001000010………………111111*第77頁
寫一個(gè)從000000到111111的程序for(A=0;A<=1;A=A+1)for(B=0;B<=1;B=B+1)for(C=0;C<=1;C=C+1)for(D=0;D<=1;D=D+1)for(E=0;E<=1;E=E+1)for(F=0;F<=1;F=F+1){printf(“%d%d%d%d%d%d”,A,B,C,D,E,F);}*第78頁//************************************//*程序名:5_-16.cpp*//*作者:lcx*//*編制時(shí)間:2010年8月*//*主要功能:案情分析*//*************************************#include<stdio.h>voidmain(void)//案情分析{/*A和B至少有一人作案;cc1=(A||B)*//*A和D不可能是同案犯;cc2=((A&&(!D))||(D&&(!A))/*A,E,F(xiàn)中至少有兩人涉嫌作案cc3=(A&&E)||/* (A&&F)||/* (E&&F)/*B和C或同時(shí)作案或都與本案無關(guān)cc4=(B&&C)||(!B&&!C)/*C,D中有且僅有一人作案;cc5=(C&&!D)||(D&&!C)/*如果D沒有參與作案,則E也不可能參與作案;cc6=D||(!E)/*編程找出犯罪嫌疑人.
intcc1,cc2,cc3,cc4,cc5,cc6;/*定義6個(gè)變量,分別表示6句話*/intA,B,C,D,E,F;/*定義6個(gè)變量,分別表示6個(gè)人*/
*第79頁
for(A=0;A<=1;A=A+1) /*枚舉Afor(B=0;B<=1;B=B+1)/*枚舉Bfor(C=0;C<=1;C=C+1)/*枚舉Cfor(D=0;D<=1;D=D+1)/*枚舉Dfor(E=0;E<=1;E=E+1)/*枚舉E for
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年派往某事業(yè)單位科研技術(shù)與項(xiàng)目技術(shù)招聘備考題庫及一套答案詳解
- 2025年河北省三河市醫(yī)院招聘36人備考題庫及參考答案詳解1套
- 2025年四川省教育融媒體中心(四川教育電視臺)公開招聘編外工作人員備考題庫及參考答案詳解1套
- 2025年佛山市均安鎮(zhèn)專職消防隊(duì)招聘消防員5人備考題庫完整參考答案詳解
- 2025年四川省岳池銀泰投資(控股)有限公司公開招聘急需緊缺專業(yè)人才備考題庫及一套完整答案詳解
- 中國安能二局廈門分公司應(yīng)急技能人才招聘20人備考題庫及參考答案詳解1套
- 2025年北京市西城區(qū)德勝中學(xué)代課教師招聘備考題庫及一套答案詳解
- 2025年中國農(nóng)業(yè)科學(xué)院中原研究中心招聘跟個(gè)備考題庫完整參考答案詳解
- 貴州經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院2025年赴省外知名高校引進(jìn)高層次人才6人備考題庫及參考答案詳解
- 2025年廣西旅發(fā)集團(tuán)廣西自貿(mào)區(qū)醫(yī)院管理有限公司招聘39人備考題庫含答案詳解
- 《Stata數(shù)據(jù)統(tǒng)計(jì)分析教程》
- 2024-2025學(xué)年廣州市越秀區(qū)八年級上學(xué)期期末語文試卷(含答案)
- 寵物診療治療試卷2025真題
- 媒體市場競爭力分析-洞察及研究
- 口腔科口腔潰瘍患者漱口液選擇建議
- 精神科抑郁癥心理干預(yù)培訓(xùn)方案
- 2025年國家開放大學(xué)(電大)《外國文學(xué)》期末考試復(fù)習(xí)題庫及答案解析
- 三防漆涂覆流程及質(zhì)量控制標(biāo)準(zhǔn)
- 慢性阻塞性肺病糖皮質(zhì)激素使用培訓(xùn)
- 2026中水淮河規(guī)劃設(shè)計(jì)研究有限公司新員工招聘筆試考試備考試題及答案解析
- 綜合義診活動(dòng)方案
評論
0/150
提交評論