算法語言與數(shù)據(jù)結(jié)構(gòu)第3章PPT課件_第1頁
算法語言與數(shù)據(jù)結(jié)構(gòu)第3章PPT課件_第2頁
算法語言與數(shù)據(jù)結(jié)構(gòu)第3章PPT課件_第3頁
算法語言與數(shù)據(jù)結(jié)構(gòu)第3章PPT課件_第4頁
算法語言與數(shù)據(jù)結(jié)構(gòu)第3章PPT課件_第5頁
已閱讀5頁,還剩134頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第 3 章 邏輯思維與計算機(jī)解題第1頁/共139頁算法及算法工具結(jié)構(gòu)化程序設(shè)計思想將實際問題抽象為邏輯關(guān)系枚舉法解題思路關(guān)系與關(guān)系表達(dá)式程序的循環(huán)結(jié)構(gòu)與分支結(jié)構(gòu)第2頁/共139頁第3頁/共139頁第4頁/共139頁 3.1 程序設(shè)計中的科學(xué)思維方法程序設(shè)計中的科學(xué)思維方法 3.2 關(guān)系運算符和關(guān)系表達(dá)式關(guān)系運算符和關(guān)系表達(dá)式2 3.3 使用關(guān)系表達(dá)式解決一些問題使用關(guān)系表達(dá)式解決一些問題3 3.4 枚舉法的思路枚舉法的思路4目錄 3.5 循環(huán)語句循環(huán)語句5 3.6 分支語句分支語句6 3.8 邏輯判斷與解題邏輯判斷與解題8 3.7 輸入輸出語句輸入輸出語句7第5頁/共139頁3.1 程序設(shè)計中

2、的科學(xué)思維方法 算法程序設(shè)計=數(shù)據(jù)結(jié)構(gòu)+算法+程序設(shè)計方法學(xué) 數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)對象及其相互關(guān)系和構(gòu)造方法。數(shù)據(jù)結(jié)構(gòu)與算法密不可分,一個良好的數(shù)據(jù)結(jié)構(gòu),將使算法簡單化;只有明確了問題的算法,才能有較好的設(shè)計數(shù)據(jù)結(jié)構(gòu),因此兩者是相輔相承的 對同一個問題的求解,允許有不同的算法和數(shù)據(jù)結(jié)構(gòu),依不同算法編寫的操作代碼,執(zhí)行效率不一樣。 算法(algorithm):是對特定問題求解步驟的一種描述。算法特征: 1有窮性 2確定性 3輸入 4輸出 5有效性 算法要求: 1正確性 2可讀性 3健壯性 4效率 算法表示: 1. 自然語言 2. 專用工具 3. 偽代碼 4. 計算機(jī)語言 算法設(shè)計常用方法 1. 枚舉法

3、 2. 迭代法 3. 遞歸法 4. 遞推法 5. 分治法 6. 回溯法 7. 模擬人工 第6頁/共139頁算法表示工具 算法表示 專用工具流程圖表示 流程圖符號:3.1 程序設(shè)計中的科學(xué)思維方法第7頁/共139頁三種基本控制結(jié)構(gòu)AB順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)PBAPA3.1 程序設(shè)計中的科學(xué)思維方法第8頁/共139頁1.2 程序設(shè)計中的科學(xué)思維方法 流程圖符號表示的算法實例:3.1 程序設(shè)計中的科學(xué)思維方法第9頁/共139頁1.2 程序設(shè)計中的科學(xué)思維方法 例 3.1 算法 偽代碼表示的算法實例:問題: 求12+22+502輸出sum開始 輸入n的值 置sum初值為0 置i初值為1 當(dāng)in,執(zhí)行

4、下面操作: sum = i*i+sum i = i+1 打印sum的值 結(jié)束3.1 程序設(shè)計中的科學(xué)思維方法第10頁/共139頁1.2 程序設(shè)計中的科學(xué)思維方法 例 3.2 算法 計算機(jī)語言表示的算法實例:問題: 求12+22+5023.1 程序設(shè)計中的科學(xué)思維方法第11頁/共139頁1.結(jié)構(gòu)化程序設(shè)計基本思想 自頂向下 逐步細(xì)化 模塊化 2.結(jié)構(gòu)化程序設(shè)計的過程 建立數(shù)學(xué)模型 選定算法,用適當(dāng)工具描述算法 編程 測試及調(diào)試 (1)建立數(shù)學(xué)模型 規(guī)定了數(shù)據(jù)間準(zhǔn)確的關(guān)系,如:數(shù)學(xué)公式、一張關(guān)系圖、一張二維數(shù)據(jù)表 (2)選定算法,用適當(dāng)工具描述算法3.1 程序設(shè)計中的科學(xué)思維方法第12頁/共139

5、頁(3).用自頂向下逐步細(xì)化構(gòu)造算法【例1-5】 某同學(xué)進(jìn)行一次物理實驗,測量得到30個數(shù)據(jù),求這30個數(shù)據(jù)的平均值。一級算法:1. Initialize variables2. Input , sum and count the data3. Calculate and print the average1.1 Set total to 01.2 Set counter to 12.1 While counter=30 Input the next data Add the data to total Add 1 to counter3.1 Set average to tatal/303.

6、2 Print the average3.1 程序設(shè)計中的科學(xué)思維方法 第13頁/共139頁4.用自頂向下逐步細(xì)化構(gòu)造算法【例1-2】 有30名同學(xué)選修了程序設(shè)計這門課程,請編寫程序統(tǒng)計參加考試學(xué)生中及格和不及格的人數(shù)。 一級算法: 1.Initialize variables 2.Input the 30 grades and count the failures 3.Print the exam results 1.1 Set failures to 01.2 Set passes to 01.3 Set counter to 1 While counter=302.1 Input the

7、 next grade2.2 If the grade=大于等于大于等于 大于大于 =等于等于 =小于等于小于等于 小于小于 !=不等于不等于3.2 關(guān)系運算符和關(guān)系表達(dá)式第17頁/共139頁/ */ * 程 序: 3_0.c */ * 功 能: 為講解關(guān)系運算而編 */ * 編制人: wuwh */ * 時 間: 2001年6月27日 */ *#include void main( )printf(“ 3 2 的邏輯值是 %d , 1 為真 n“, 3 2 ) ; printf(“ 3 =2 的邏輯值是 %d , 1 為真 n“, 3 = 2 ) ; printf(“ 3 = 2 的邏輯值是

8、 %d , 0 為假n“, 3 = 2 ) ; printf(“ 3 2 的邏輯值是 %d , 0 為假n“, 3 2 ) ;printf(“ 3 = 2 的邏輯值是 %d , 0 為假n“, 3 2 的邏輯值是 1, 1為真3 = 2 的邏輯值是 1, 1為真3 = 2 的邏輯值是 0, 0為假3 2 的邏輯值是 0, 0為假3 = 2 的邏輯值是 0, 0為假3 != 2 的邏輯值是 1, 1為真3.2 關(guān)系運算符和關(guān)系表達(dá)式第19頁/共139頁關(guān)系表達(dá)式的一般格式 關(guān)系運算符 例如:變量 1 為 b,變量 2 為 c,關(guān)系運算符為 。關(guān)系表達(dá)式為b c在程序中系統(tǒng)要測試由關(guān)系表達(dá)式所表示

9、的關(guān)系是否成立,成立為真,不成立為假。關(guān)系表達(dá)式是有值的,這個值非 0 即 1,是布爾值。關(guān)系表達(dá)式成立,其值為 1 。關(guān)系表達(dá)式不成立,其值為 0 。上述性質(zhì)在編寫程序時用到,因此很重要。3.2 關(guān)系運算符和關(guān)系表達(dá)式第20頁/共139頁 結(jié)合任務(wù)3.1,可以將四個人說的四句話寫成關(guān)系表達(dá)式。 在聲明變量時,我們讓thisman表示要尋找的做了好事的人,定義它是字符變量。 char thisman=; / 定義字符變量并將其初始化為空 接著讓 “ = ” 的含義為“是”, 讓 “ != ” 的含義為“不是”。3.3 使用關(guān)系表達(dá)式解決一些問題第21頁/共139頁3.3 使用關(guān)系表達(dá)式解決一些

10、問題第22頁/共139頁thisman 65地址地址xxxx3.3 使用關(guān)系表達(dá)式解決一些問題第23頁/共139頁/ */ * 程 序: 3_1.c */ * 功 能: 驗證A和65是否相等 */ * 編制人: wuwh */ * 時 間: 2001年6月27日 */ *#include / 預(yù)編譯命令void main( )/ 主函數(shù)/ 主函數(shù)開始char thisman;/ 聲明字符變量thisman,thisman = A;/ thisman賦值為A/ 輸出關(guān)系表達(dá)式“65=A”的值printf( 65=A 關(guān)系表達(dá)式的值為“,65=A) ;/ 主函數(shù)結(jié)束3.3 使用關(guān)系表達(dá)式解決一些問

11、題第24頁/共139頁 結(jié)合任務(wù)3.1分析,A、B、C、D四個人,只有一位是做好事者。令做好事者為1,未做好事者為0,可以有如下4中狀態(tài)(情況)3.4 枚舉法的思路第25頁/共139頁3.4 枚舉法的思路第26頁/共139頁(1)假定讓thisman=A代入四句話中3.4 枚舉法的思路第27頁/共139頁(2)假定讓thisman=B代入四句話中3.4 枚舉法的思路第28頁/共139頁(3)假定讓thisman=C代入四句話中3.4 枚舉法的思路第29頁/共139頁 綜上所述一個人一個人去試,就是枚舉。從編寫程序看,實現(xiàn)枚舉最好用循環(huán)結(jié)構(gòu)。 這部分的程序?qū)懗鋈缦拢篺or (k=1; k=4;

12、k=k+1) / 計數(shù)型循環(huán),循環(huán)的控制變量為k / 循環(huán)體開始thisman=64+k; / 產(chǎn)生被試者,依次為A,B,C,D / 賦值給thismansum = (thisman!=A)/ 測試A的話是否為真 +(thisman=C) / 測試B的話是否為真 +(thisman=D) / 測試C的話是否為真 +(thisman!=D); / 測試D的話是否為真 / 循環(huán)體結(jié)束3.5 循環(huán)語句第30頁/共139頁3.5 循環(huán)語句第31頁/共139頁 測試表達(dá)式測試表達(dá)式 2 2 求解表達(dá)式求解表達(dá)式 1 1 執(zhí)行循環(huán)體語句執(zhí)行循環(huán)體語句 求解表達(dá)式求解表達(dá)式 3 3 執(zhí)行執(zhí)行forfor的下

13、一條語句的下一條語句 假假 真真 循環(huán)控制變量置初值循環(huán)控制變量置初值 測試是否測試是否未未到終值到終值 讓循環(huán)控制變量增值讓循環(huán)控制變量增值 3.5 循環(huán)語句第32頁/共139頁3.5 循環(huán)語句第33頁/共139頁/ */ * 程 序: 3_2.c(計數(shù)循環(huán)示例) */ * 功 能: 求自然數(shù)1100之和 */ * 編制人: wuwh */ * 時 間: 2001年9月10日 */ *#include / 預(yù)編譯命令void main( )/ 主函數(shù)/ 主函數(shù)開始int i=0, sum=0;/ 聲明i,sum為整型變量并初始化為0for (i=1; i=100; i=i+1)/ for 循

14、環(huán)/ 循環(huán)體開始sum = sum+i;/ 累加求和/ 循環(huán)體結(jié)束 printf(“自然數(shù)1100之和為 %d“, sum);/ 輸出累加結(jié)果/ 主函數(shù)結(jié)束3.5 循環(huán)語句第34頁/共139頁3.5 循環(huán)語句第35頁/共139頁/*/* 程序名:3_3.c(循環(huán)語句示例) */* 作 者:wuwh */* 編制時間:2002年9月20日 */* 主要功能:計算10 的階乘 */*#include / 預(yù)編譯命令void main() / 主函數(shù) / 主函數(shù)開始int i = 0, j = 0, k = 0; / 聲明 i,j,k 為整型變量,并初始化為0long sum = 1; / 聲明 s

15、um 為長整型變量,并初始化為1for (i = 10; i = 1; i = i-1) / 用 for 循環(huán)作累乘運算printf( i=%d“, i) ; / 顯示isum = sum * i; / 每一步乘積printf( tsum=%d“, sum); / 顯示每一步乘積for ( j = 1; j = 5500; j = j+1) / 用 for 循環(huán)延遲時間for (k = 1; k = 1; i = i-1) cout i= i ; sum = sum * i; cout tsum= sum endl; 3.5 循環(huán)語句第37頁/共139頁/*/* 程序名:3_3.c(循環(huán)語句示

16、例) */* 作 者:wuwh */* 編制時間:2002年9月20日 */* 主要功能:計算10 的階乘 */*#include / 預(yù)編譯命令void main() / 主函數(shù) / 主函數(shù)開始int i = 0, j = 0, k = 0; / 聲明 i,j,k 為整型變量,并初始化為0long sum = 1; / 聲明 sum 為長整型變量,并初始化為1for (i = 10; i = 1; i = i-1) / 用 for 循環(huán)作累乘運算printf( i=%d“, i ); / 顯示isum = sum * i; / 每一步乘積printf( tsum=%d ,sum); / 顯示

17、每一步乘積for ( j = 1; j = 5500; j = j+1) / 用 for 循環(huán)延遲時間for (k = 1; k = 10000; k = k+1);/用 for 循環(huán)延遲時間 printf( 10!=%d , sum );/ 顯示運算結(jié)果 /主函數(shù)結(jié)束3.5 循環(huán)語句第38頁/共139頁#include void main() int i = 0, j = 0, k = 0; long sum = 1; for (i = 10; i = 1; i = i-1)printf( i=%d , i ); sum = sum * i; printf(tsum=%d , sum); f

18、or ( j = 1; j = 5500; j = j+1)for (k = 1; k = 10000; k = k+1); printf(10!=%d , sum); 3.5 循環(huán)語句第39頁/共139頁3.5 循環(huán)語句第40頁/共139頁3.5 循環(huán)語句第41頁/共139頁 初初始始時時 sum=1 10 9 8 7 6 5 4 3 2 1 Sum * 10 Sum * 9 Sum * 8 Sum*1 Sum Sum 3.5 循環(huán)語句第42頁/共139頁3.5 循環(huán)語句第43頁/共139頁實際上循環(huán)有好幾種方式,如:Goto和if構(gòu)成的循環(huán)do-while構(gòu)成的循環(huán)while構(gòu)成的循環(huán)fo

19、r構(gòu)成的循環(huán)對于以上的循環(huán),我們將通過具體的例子來闡明。3.5 循環(huán)語環(huán)語句第44頁/共139頁句式為 goto 標(biāo)號標(biāo)號必須是字母,數(shù)字,下劃線組成,第一個字母不能是數(shù)字。1012nnmain()main()方法之一 int i,sum1,j,sum2,k,sum3;int i,sum1,j,sum2,k,sum3;printf(Please input the value of i,j and knn);printf(Please input the value of i,j and knn);scanf(%d,%d,%d,&i,&j,&k);scanf(%d,%d

20、,%d,&i,&j,&k);printf(i=%d,j=%d,k=%dnn,i,j,k);printf(i=%d,j=%d,k=%dnn,i,j,k);sum1=0;sum1=0;loop : if(i=10)loop : if(i=10) sum1=sum1+i sum1=sum1+i* *i; i+; goto loop;i; i+; goto loop; printf(method 1-sum1=%dnn,sum1); printf(method 1-sum1=%dnn,sum1);3.5 循環(huán)語句第45頁/共139頁while 語句 形式while (表達(dá)式)

21、語句 可以是復(fù)合語句 其中必須含有改變條件表達(dá)式值的語句 執(zhí)行順序先判斷表達(dá)式的值,非 0 再執(zhí)行語句 實現(xiàn)“當(dāng)型”循環(huán)3.5 循環(huán)語句第46頁/共139頁流程特點:先判斷,后執(zhí)行(1)循環(huán)如果包含一個以上的語句要用 括起來,見例2-3.c(2)循環(huán)體內(nèi)應(yīng)該有使循環(huán)體結(jié)束的語句,否則進(jìn)入死循環(huán)。express語句0非03.5 循環(huán)語句第47頁/共139頁1012nnmain()main()方法之二 int j,sum2;int j,sum2;sum2=0;sum2=0;while(j=10) /while(j=10) /* * without ; after while() without ;

22、 after while() * */ / sum2=sum2+j sum2=sum2+j* *j;j; j+; j+; printf(method 2-sum2=%dnn,sum2);3.5 循環(huán)語句第48頁/共139頁do-while 語句 一般形式do 語句 可以是復(fù)合語句while (表達(dá)式) 其中必須含有改變條件表達(dá)式值的語句 執(zhí)行順序先執(zhí)行語句,后判斷條件。 while 語句與 do-while 語句的比較 類似于直到型循環(huán),但不同3.5 循環(huán)語句第49頁/共139頁Dowhile 是先執(zhí)行,后判斷gotoif及while均是先判斷后執(zhí)行main()main()方法之三 int k

23、,sum3;int k,sum3;sum3=0;sum3=0;dodo sum3=sum3+k sum3=sum3+k* *k;k; k+; k+; while(k=10); while(k=10); printf(sum3=%d,sum3);printf(sum3=%d,sum3); Dowhile的while后面有“;” while( )后面則沒有從本例中可以看出while和dowhile的區(qū)別dowhile是先執(zhí)行循環(huán)體語句,后判斷表達(dá)式1012nn3.5 循環(huán)語句第50頁/共139頁循環(huán)的嵌套與其它語言一樣,c語言的循環(huán)也可以有多重嵌套,大家在應(yīng)用過程中可以根據(jù)實際情況選用3.5 循環(huán)

24、語句第51頁/共139頁EXAMPLE 例2-4.c 把20以內(nèi)能被5整除的數(shù)打印出來 (用兩種方法)3.5 循環(huán)語句第52頁/共139頁main()main() int sum1=0,sum2=0; int sum1=0,sum2=0;/ /* * - while - - while - * */ / while(sum1=20)while(sum1=20) sum1=sum1+1; sum1=sum1+1; while(sum1%5=0) while(sum1%5=0) printf(while()- sum1=%dn,sum1); printf(while()- sum1=%dn,sum

25、1); sum1+; sum1+; for(sum2=1;sum2=20;sum2+)for(sum2=1;sum2=20;sum2+) while(sum2%5=0) while(sum2%5=0) printf(for printf(for* * * *while()- sum2=%dn,sum2);while()- sum2=%dn,sum2); sum2+; sum2+; 3.5 循環(huán)語句第53頁/共139頁break 和 continue 語句 break語句使程序從循環(huán)體和switch語句內(nèi)跳出,繼續(xù)執(zhí)行邏輯上的下一條語句。不能用在別處。如:2-5.c求解ax2+bx+c=y co

26、ntinue 語句結(jié)束本次循環(huán),接著進(jìn)行是否執(zhí)行下一次循環(huán)的判斷。3.5 循環(huán)語句第54頁/共139頁EXAMPLE第55頁/共139頁main() /main() /* * y=a y=a* *x2+bx2+b* *x+c x+c * */ / int a,b,c,x,y; int a,b,c,x,y; a=5;b=10;c=15; a=5;b=10;c=15; for(x=1;x=10;x+)for(x=1;x250&y250&y350) break; printf(break-x=%d, y=%dn,x,y); printf(break-x=%d, y=%dn,x,y);

27、 for(x=1;x=10;x+)for(x=1;x250&y250&y350) continue; printf(continue-x=%d, y=%dn,x,y); printf(continue-x=%d, y=%dn,x,y); Continue結(jié)束本次循環(huán),即滿足條件時,就跳過下面的語句,進(jìn)入下一個循環(huán);Break結(jié)束的是整個循環(huán)第56頁/共139頁for (i=1; i0 y=0 y=-1 y=1 x= =0 3.6 分支語句第62頁/共139頁/*/* 程 序 名:3_4.c(分支程序示例) */* 作 者:wuwh */* 編制時間:2001年8月 */* 主要

28、功能:實現(xiàn)符號函數(shù) */*#include / 預(yù)編譯命令void main()/ 主函數(shù) / 主函數(shù)開始int x=0,y=0;/ 聲明x,y為整型變量,并初始化為0printf( 請輸入x ); / 提示信息scanf(“%d”,&x) x;/ 從鍵盤輸入整數(shù)送至x中if (x0)/ 如果x0,將1賦給yy=1;elseif (x=0)/ 如果x=0,將0賦給yy=0;elsey=-1; / 否則(x0 y=0 y=-1 y=1 x= =0 提示提示和和輸入整數(shù)輸入整數(shù) x 輸出輸出 y 3.6 分支語句第64頁/共139頁有了上述了解之后,我們來看解有了上述了解之后,我們來看解“

29、誰做的好事誰做的好事”的程序框圖的程序框圖fo r (k = 1 ; k = 4 ; k = k + 1 ) 假假 真真 g != 1 su m = = 3 被被 試試 者者 th ism a n = 6 4 + k ; su m = (被被 試試 者者th ism a n != A )+ (被被 試試 者者th ism a n = = C )+ (被被 試試 者者th ism a n = = D )+ (被被 試試 者者th ism a n != D ); 假假 真真 輸輸 出出 該該 被被 試試 者者 ; 有有 解解 標(biāo)標(biāo) 志志g g = = 1 1 ; ; 輸輸 出出 無無 解解 信信

30、息息 ; 3.6 分支語句第65頁/共139頁現(xiàn)在我們來分析現(xiàn)在我們來分析“誰做的好事誰做的好事”的的NS流程圖。它是由流程圖。它是由兩大塊組成的,如圖兩大塊組成的,如圖3.8循環(huán)體循環(huán)體for(k=1; k=4; k+)語句語句1;1;第一塊第一塊循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)第二塊第二塊分支結(jié)構(gòu)分支結(jié)構(gòu)3.6 分支語句第66頁/共139頁3.6 分支語句第67頁/共139頁我們講這一段是希望你掌握我們講這一段是希望你掌握NS圖,這對今后的學(xué)習(xí)會有好處。按照程圖,這對今后的學(xué)習(xí)會有好處。按照程序框圖很容易寫出程序(如下頁所示)序框圖很容易寫出程序(如下頁所示)thisman = 64+k;sum=( th

31、isman!=A )+ ( thisman=C )+ ( thisman=D )+ ( thisman!=D );sum = 3真真假假輸出該被測試者;輸出該被測試者;有解標(biāo)志置有解標(biāo)志置1 1;3.6 分支語句第68頁/共139頁/ */ * 程 序 名:3_5.c */ * 作 者:wuwh */ * 編制時間:2001年8月 */ * 主要功能:誰做的好事 */ *#include / 預(yù)編譯命令void main() / 主函數(shù) / 主函數(shù)開始int k=0,sum=0,g=0; / 聲明變量為整數(shù)類型,且均初始化為0char thisman= ;for(k=1;k=4;k=k+1)

32、/ k既是循環(huán)控制變量,也表示第k個人 / for 循環(huán)體開始thisman = 64+k;sum=( thisman!=A ) + ( thisman=C ) + ( thisman=D ) + ( thisman!=D );if (sum=3) / 如果4句話有3句話為真,則輸出該人/ 輸出做好事者printf( 做好事者為%c“, char(64+k);g=1; / 有解標(biāo)志置1 / for 循環(huán)體結(jié)束if (g!=1) / 則輸出無解信息printf( Cant found! ); / 主函數(shù)結(jié)束3.6 分支語句第69頁/共139頁#include void main() int k

33、=0, sum =0 , g =0; char thisman = ;for ( k = 1; k = 4 ; k = k+1 ) thisman = 64 + k;sum = ( thisman != A ) +( thisman=D ) + ( thisman=C ) + ( thisman !=D );if ( sum=3 ) printf( 做好事者為%c , char(64+k);g=1; if (g!=1)printf( Cant found! );3.6 分支語句第70頁/共139頁/ */ * 程 序 名:3_6.c */ * 作 者:wuwh */ * 編制時間:2001年8

34、月 */ * 主要功能:誰做的好事 */ *#include / 預(yù)編譯命令void main()/ 主函數(shù) / 主函數(shù)開始int k=0,sum=0,g=0;/ 聲明變量為整數(shù)類型,且均初始化為0for(k=1;k=4;k=k+1)/ 循環(huán)從k為1到4,sum=0;/ 循環(huán)體內(nèi)的初始化if (k!=1) sum=sum+1;/ 如A的話為真,則讓sum加1;if (k=3) sum=sum+1;/ 如B的話為真,則讓sum加1;if (k=4) sum=sum+1;/ 如C的話為真,則讓sum加1;if (k!=4) sum=sum+1;/ 如D的話為真,則讓sum加1;if (sum=3)

35、/ 若有三句話為真,則做下列兩件事cout This man is char(64+k) endl;/ 輸出做好事者g=1;/ 讓有解標(biāo)志置1if (g!=1)/ 則輸出無解信息 cout Cant found! endl;/ 主函數(shù)結(jié)束3.6 分支語句第71頁/共139頁for ( k = 1; k = 4; k = k+1 )sum=0;if ( k != 1 ) sum = sum+1; / 如A的話為真, 則讓sum加1;if ( k =3 ) sum = sum+1; / 如B的話為真,則讓sum加1;if ( k =4 ) sum = sum+1; / 如C的話為真,則讓sum加1

36、;if ( k != 4 ) sum = sum+1; / 如D的話為真,則讓sum加1; . . . 3.6 分支語句第72頁/共139頁/ */ * 程 序 名:3_7.cpp */ * 作 者:wuwh */ * 編制時間:2001年8月 */ * 主要功能:誰做的好事 */ *#include / 預(yù)編譯命令void main() / 主函數(shù) / 主函數(shù)開始int k=0,g=0; / 聲明變量為整數(shù)類型,且均初始化為0for(k=1;k=4;k=k+1) / k既是循環(huán)控制變量,也表示第k個人 / for 循環(huán)體開始if (k!=1)+(k=3)+(k=4)+(k!=4)=3) /

37、如果4句話有3句話為真,則輸出該人/ 輸出做好事者cout 做好事者為 char(64+k) endl;g=1; / 有解標(biāo)志置1 / for 循環(huán)體結(jié)束if (g!=1) / 則輸出無解信息 cout Cant found! endl; / 主函數(shù)結(jié)束3.6 分支語句第73頁/共139頁for ( k = 1; k = 4 ; k = k+1 )if (k!=1)+(k=3)+(k=4)+(k!=4)=3) cout 做好事者為 char(64+k) endl; g=1; 3.6 分支語句第74頁/共139頁 for( k= 1; k= 4; k= k+ 1 ) if ( ( ( k !=

38、1) + ( k = 3) + ( k = 4 ) + ( k != 4 ) ) = 3 ) cout “做好事者為” char( 64+ k )b)?a:b,先運行(ab)的條件運算條件運算符的優(yōu)先級比關(guān)系運算符及算術(shù)運算符低, 因此,(ab)的括號可以不要條件運算符的結(jié)合方向為“ 自右向左”, 如:ab?a:cd?c:d 等價于 ab?a:(cd?c:d) 若a=5,b=15,c=25,d=35,那么整個表達(dá)式的值為35條件表達(dá)式不能替代一般的if語句三個表達(dá)式的類型可以不一樣,但最終類型為表達(dá)式2和表達(dá)式3中的較高者, 如x? a : b 3.6 分支語句第78頁/共139頁五、swit

39、ch 語句Switch語句是多分支選擇語句,不象if,只有兩個分支可供選擇,在分類運算中,經(jīng)常用到 一般形式switch (表達(dá)式) 可以是整型、字符型、枚舉型 case 常量表達(dá)式 1:語句1 case 常量表達(dá)式 2:語句2 每個常量表達(dá)式的值不能相 case 常量表達(dá)式 n:語句n 同,次序不影響執(zhí)行結(jié)果 default : 語句n+1 可以是多個語句,但不必用 執(zhí)行順序以case中的常量表達(dá)式值為入口標(biāo)號,由此開始順序執(zhí)行。因此,每個case分支最后應(yīng)該加break語句。3.6 分支語句第79頁/共139頁使用switch語句應(yīng)注意的問題 case分支可包含多個語句,且不用 表達(dá)式、判

40、斷值都是int型或char型 若干分支執(zhí)行內(nèi)容相同可共用一組語句第80頁/共139頁EXAMPLE 例2-2.c 計算工資水平下的稅率,注意用數(shù)值型和字符型 表達(dá)式,不過多個case也可以執(zhí)同一組語句。第81頁/共139頁main()main() char a;char a;int b,c;int b,c;printf(1-Please input the salary leveln);printf(1-Please input the salary leveln);printf(Between 1 to 4, which is char typen);printf(Between 1 to

41、4, which is char typen);scanf(%c,&a);scanf(%c,&a);switch (a)switch (a) case 1 : printf(tax=100%n); break; case 1 : printf(tax=100%n); break; case 2 : printf(tax=50%n); break; case 2 : printf(tax=50%n); break; case 3 : printf(tax=30%n); break; case 3 : printf(tax=30%n); break; case 4 : printf

42、(tax=8%n); break; case 4 : printf(tax=8%n); break; default : printf(tax=0%n); break; default : printf(tax=0%n); break; printf(n2-Please input the salary leveln);printf(n2-Please input the salary leveln);printf(Between 1 to 4, which is int typen);printf(Between 1 to 4, which is int typen);3.6 分支語句第82

43、頁/共139頁scanf(%d,&b);scanf(%d,&b);switch (b)switch (b) case 1 : printf(tax=100%n); break; case 1 : printf(tax=100%n); break; case 2 : printf(tax=50%n); break; case 2 : printf(tax=50%n); break; case 3 : printf(tax=30%n); break; case 3 : printf(tax=30%n); break; case 4 : printf(tax=8%n); break;

44、 case 4 : printf(tax=8%n); break; default : printf(tax=0%n); break; default : printf(tax=0%n); break; printf(nPlease input the salary leveln);printf(nPlease input the salary leveln);printf(between 1 to 4, which is int typen);3.6 分支語句第83頁/共139頁scanf(%d,&c);scanf(%d,&c);switch (c)switch (c) ca

45、se 1 : case 1 : case 2 : case 2 : case 3 : printf(tax=30%n); break; case 3 : printf(tax=30%n); break; case 4 : printf(tax=8%n); break; case 4 : printf(tax=8%n); break; default : printf(tax=0%n); break; default : printf(tax=0%n); break; / /* * multi-case 13, share with the case 3 multi-case 13, share

46、 with the case 3 * */ / 3.6 分支語句第84頁/共139頁 輸入輸出是往往程序最基本的功能,也是程序中最重要的組成部分。C語言中的輸入/輸出都是由庫函數(shù)完成的,因此都是函數(shù)語句。3.7 輸入輸出語句第85頁/共139頁函數(shù)printf函數(shù)的最簡單形式 最簡單形式中輸出項序列可以省略。此時成為如下格式: printf(輸出提示信息字符串) 轉(zhuǎn)義字符的使用 轉(zhuǎn)義字符用來完成某種特定的控制功能。例如:n使程序執(zhí)行時換行。 3.7 輸入輸出語句第86頁/共139頁printf函數(shù)調(diào)用的一般形式 printf函數(shù)是一個標(biāo)準(zhǔn)庫函數(shù),在使用時它可以帶兩個參數(shù):輸出格式控制及輸出項序

47、列。printf函數(shù)調(diào)用的一般形式為: printf(格式控制字符串,輸出項序列) 其中格式控制字符串必須用引號()括起來,用于指定輸出格式。注意不能使用漢字操作系統(tǒng)中的全角引號(“”)。格式控制串可由格式字符串和非格式字符串兩種組成。格式字符串是以%開頭的字符串,在%后面跟有各種格式字符,以說明輸出數(shù)據(jù)的類型、形式、長度、小數(shù)位數(shù)等。非格式字符串輸出原樣,通常用于顯示提示信息。輸出項序列中包括各個輸出項。注意格式字符串和各輸出項在數(shù)量和類型上必須一一對應(yīng)。 3.7 輸入輸出語句第87頁/共139頁格式字符串 格式說明符的作用是規(guī)定輸出的形式。它用一個字母來表示。其完整形式為: % 標(biāo)志0輸出

48、最小寬度 .精度 長度類型 其中方括號中的項為可選項。%為格式控制字符串的引導(dǎo)字符,是不可缺少的。 1 類型 類型字符用以表示輸出數(shù)據(jù)的類型。 )3.7 輸入輸出語句第88頁/共139頁 2 標(biāo)志 常用的標(biāo)志字符是-和+。其作用是指定輸出的數(shù)據(jù)左對齊或右對齊。具體說: - 結(jié)果左對齊,右邊填空格 + 結(jié)果右對齊,左邊填空格 【例5-13】(見課本) 3 指定輸出寬度 使用以下格式來指定輸出寬度: m.n 若輸出的結(jié)果是實數(shù),則m指定該數(shù)的總位數(shù)(包括小數(shù)點),n指定該數(shù)的小數(shù)位數(shù)。若實際位數(shù)多于定義的寬度,則按實際位數(shù)輸出,若實際位數(shù)少于定義的寬度則補以空格或0。 3.7 輸入輸出語句第89頁

49、/共139頁 4 長度 可以在字符d,o,x,u前面加字母l(不是數(shù)字1,而是字母L的小寫)或h,來指定不同的輸出精度。對于整數(shù)而言,h表示按短整型量輸出,l表示按長整型量輸出。對于實數(shù)而言,l表示按double形式輸出。 5 選項0 此選項指定對空位置是否以數(shù)字0填充。默認(rèn)的情況下,為省略0,此時對空白位置用空格填充。 3.7 輸入輸出語句第90頁/共139頁函數(shù) scanf函數(shù)稱為格式輸入函數(shù),其作用是按指定的格式用鍵盤把數(shù)據(jù)輸入到變量。scanf函數(shù)的一般形式 scanf函數(shù)是一個標(biāo)準(zhǔn)庫函數(shù)。但是,與printf函數(shù)相同,允許在使用scanf函數(shù)之前不必包含stdio.h文件。scanf

50、函數(shù)的一般形式為: scanf(“格式控制字符串”,輸入項序列);3.7 輸入輸出語句第91頁/共139頁scanf函數(shù)的格式說明符 格式控制字符串的作用與printf函數(shù)相同,但不能用來顯示非格式字符串,也就是不能顯示提示字符串。輸入項序列必須使用地址, 地址由地址運算符“&”和變量名組成。如&a,&b分別表示變量a和變量b的地址。也就是說,直接給變量的地址中存入數(shù)值。 在scanf語句的格式串中一般沒有間隔符,因此應(yīng)每輸入一個數(shù)據(jù)就按一下或空格。使用scanf函數(shù)的注意事項 不能在scanf函數(shù)實現(xiàn)精度控制。 scanf中只能使用變量地址,不能使用變量名; 可以使用

51、空格以及逗號(,)等作為間隔符號,則此時輸入數(shù)據(jù)時也要使用間隔符號3.7 輸入輸出語句第92頁/共139頁getch與getchar函數(shù) getch與getchar函數(shù)的功能是從鍵盤上輸入一個字符,其返回值是一個整數(shù),這個整數(shù)就是輸入字符的ASCII碼值。函數(shù)不需要參數(shù),其一般形式為: getchar(); getch(); 其使用方法有以下兩種。其一,把函數(shù)得到的字符代碼值賦給一個字符或整型變量;其二,把函數(shù)得到的字符代碼值直接作為表達(dá)式的一部分,不賦給變量。 3.7 輸入輸出語句其它輸入輸出函數(shù)第93頁/共139頁 使用getchar函數(shù)還應(yīng)注意幾個問題:l getch與getchar函數(shù)

52、只能接受單個字符,輸入數(shù)字也按字符處理。輸入多個字符時,則只接收第一個字符;l 使用函數(shù)前必須在程序開頭使用以下語句: #include l g e tch 與 g e tch a r的 區(qū) 別 在 于 : g e tc h 函 數(shù) 立 即 接 收 用 戶 的 輸 入 , 而getchar函數(shù)則在用戶按了后才接收輸入; 3.7 輸入輸出語句第94頁/共139頁gets函數(shù) 本函數(shù)用來從鍵盤接收一個字符串。與scanf函數(shù)不同,gets函數(shù)接收的字符串中可以有空格。本函數(shù)在屏幕顯示用戶輸入的信息。gets函數(shù)的格式為: 字符串變量名=gets() putch與putchar函數(shù) 此兩函數(shù)均可在屏

53、幕上顯示一個字符,其格式為: putch(字符) 或者 putch(變量) putchar(字符) 或者 putchar(變量) 這里所說的一個字符也可以是一個轉(zhuǎn)義符號。注意格式中只能使用英文單引號。 3.7 輸入輸出語句第95頁/共139頁puts函數(shù) 本函數(shù)用來輸出一個字符串。puts函數(shù)可以使用以下兩個格式: puts(字符串); puts(字符串變量名); 這里所說的一個字符也可以是一個轉(zhuǎn)義符號。注意格式中只能使用英文雙引號。 3.7 輸入輸出語句第96頁/共139頁某地刑偵大隊對涉及六個嫌疑人的一樁疑案進(jìn)行分析: A、B 至少有一人作案; A、E、F 三人中至少有兩人參與作案; A、

54、D 不可能是同案犯; B、C 或同時作案,或與本案無關(guān); C、D 中有且僅有一人作案; 如果 D 沒有參與作案,則 E 也不可能參與作案。試編一程序,將作案人找出來。3.8 邏輯判斷與解題思路第97頁/共139頁1、邏輯與,運算符為 & B A A&B 3.8 邏輯判斷與解題思路第98頁/共139頁1 1 表示真,表示真,0 0 表示假,表示假,這是邏輯變量的取值,非真即假這是邏輯變量的取值,非真即假3.8 邏輯判斷與解題思路第99頁/共139頁2、邏輯或,運算符為| B A A|B 3.8 邏輯判斷與解題思路第100頁/共139頁1 1 表示真,表示真,0 0 表示假表示假3

55、.8 邏輯判斷與解題思路第101頁/共139頁3、邏輯非,運算符為 !兩隊比賽籃球,變量 A 表示 A 隊到場,!A 表示 A 隊不到場,變量 B 表示 B 隊到場,!B 表示 B 隊不到場。這場球賽能夠賽成,得兩隊都到場。假定 “能賽成” 用邏輯變量 C 表示,則C = A & B3.8 邏輯判斷與解題思路第102頁/共139頁3.8 邏輯判斷與解題思路第103頁/共139頁思路:思路:3.8 邏輯判斷與解題思路第104頁/共139頁CC1:A和B至少有一人作案令 A 變量表示 A 作案,B 變量表示 B 作案3.8 邏輯判斷與解題思路第105頁/共139頁CC2:A和D不可能是同案

56、犯可以分析為: A 如果是案犯,D一定不是案犯,寫成A & ( !D ) D 如果是案犯,A一定不是案犯,寫成 D &( !A ) A 和 D 都不是案犯,寫成 (!A) & (!D)這三者之間是或的關(guān)系,因此有CC2 = !( A & D )3.8 邏輯判斷與解題思路第106頁/共139頁CC2 = !( A & D )3.8 邏輯判斷與解題思路第107頁/共139頁CC3:A、E、F 中至少有兩人涉嫌作案分析有三種可能 第一種,A 和 E 作案,(A & E) 第二種,A 和 F 作案,(A & F) 第三種,E 和 F 作案,(E

57、& F)這三種可能性是 或 的關(guān)系,因此有CC3 = (A & E)|(A & F)|(E & F)我們寫出 CC3 的真值表。3.8 邏輯判斷與解題思路第108頁/共139頁3.8 邏輯判斷與解題思路第109頁/共139頁CC4:B和C或同時作案,或都與本案無關(guān) 第一種情況:同時作案(B & C) 第二種情況:都與本案無關(guān)(!B & !C)兩者為或的關(guān)系,因此有 CC4 = (B & C) | (!B & !C)3.8 邏輯判斷與解題思路第110頁/共139頁CC5:C、D中有且僅有一人作案CC5=(C & !D) |

58、(D & !C)3.8 邏輯判斷與解題思路第111頁/共139頁CC6:如果D沒有參與作案,則E也不可能參與作案。分析這一條比較麻煩一些,可以列出真值表再歸納3.8 邏輯判斷與解題思路第112頁/共139頁() ()()()DEDEDEDEDEDEDED EEE DDDECC6=D | !E以上是案情分析,已經(jīng)化成了計算機(jī)可解的邏輯表達(dá)式以上是案情分析,已經(jīng)化成了計算機(jī)可解的邏輯表達(dá)式DDEE3.8 邏輯判斷與解題思路第113頁/共139頁 6個人每個人都有作案或不作案兩種可能,因此有 種組合,從這些組合中挑出符合6條分析的作案者。 定義 6 個整數(shù)變量,分別表示 6 個人A,B,C,

59、D,E,F(xiàn)。枚舉每個人的可能性讓讓 0 表示不是罪犯;表示不是罪犯;讓讓 1 表示就是罪犯。表示就是罪犯。623.8 邏輯判斷與解題思路第114頁/共139頁3.8 邏輯判斷與解題思路第115頁/共139頁 寫一個從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) coutABCDEF endl; 3.8 邏輯判斷與解題思路第116頁/共139頁 for( F=0;F=1;F

60、=F+1) coutABCDEF endl; 循環(huán)體3.8 邏輯判斷與解題思路第117頁/共139頁 for( E=0;E=1;E=E+1) for( F=0;F=1;F=F+1) coutABCDEF endl; 循環(huán)體3.8 邏輯判斷與解題思路第118頁/共139頁 for( D=0;D=1;D=D+1) for( E=0;E=1;E=E+1) for( F=0;F=1;F=F+1) coutABCDEF endl; 循環(huán)體3.7 邏輯判斷與解題思路第119頁/共139頁 for( A=0;A=1;A=A+1) for( B=0;B=1;B=B+1) 循 for( C=0;C=1;C=C+1) 環(huán) for( D=0;D=1;D=D+1) 體 for( E=0;E=1;E=E+1) for( F=0;F=1;F=F+1) coutABCDEF endl; 3.7 邏輯判斷與解題思路第120頁/共139頁 輸輸 出出 C C 1 + C C 2 + C C 3 + C C 4 + C C 5 + C C 6 = = 6 假假 真真 C C 1 = A |B ; C C 2 = !(A & & D ); C C 3 = (A & & E )|(A & & F )

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論