C語言第2章人民郵電出版社張小東.ppt
《C語言第2章人民郵電出版社張小東.ppt》由會員分享,可在線閱讀,更多相關(guān)《C語言第2章人民郵電出版社張小東.ppt(59頁珍藏版)》請在裝配圖網(wǎng)上搜索。
所謂判定性問題(decisionproblem)就是提出一個問題,只需要給出「Yes」或「No」答案的問題,第二章簡單判定性問題求解,2.1判定性問題及判定條件的描述,關(guān)系運算符,、>=的優(yōu)先級相同==、!=的優(yōu)先級相同、>=高于==、!=,2.1判定性問題及判定條件的描述,關(guān)系表達(dá)式,表達(dá)式關(guān)系運算符表達(dá)式,a+b>c-dx>3/2a+(b>c)a!=(c==d),關(guān)系表達(dá)式的值是“真”和“假”,分別用“1”和“0”表示,5>0的值為“真”,即為1(a=3)>(b=5)由于3>5不成立,故其值為假,即為0,2.1判定性問題及判定條件的描述,邏輯運算符,a>bc=a},運行情況為:a=9b=1c=1,2.“按位或”運算符(|),(1)規(guī)則參與運算的兩數(shù)(以補(bǔ)碼出現(xiàn))各對應(yīng)的二進(jìn)位相或(即邏輯加)。只要對應(yīng)的兩個二進(jìn)位有一個為1時,結(jié)果位就為1,它是雙目運算符。即:0|0=0;0|1=1;1|0=1;1|1=1。例如:9|5可寫算式如下:0000100100000101|_________________00001101(十進(jìn)制為13)可見9|5=13。(2)特殊用途將一個數(shù)據(jù)的某些指定的位置為1。將該數(shù)按位或一個特定的數(shù),該特定的數(shù)的相應(yīng)位置為1。,將一個數(shù)的低5位置為1。只需將該數(shù)與“00011111”進(jìn)行},運行情況為:輸入:5a=5b=1fc=1f,3.“按位異或”運算符(^),(1)規(guī)則參與運算的兩數(shù)(以補(bǔ)碼出現(xiàn))各對應(yīng)的二進(jìn)位相異或,當(dāng)兩對應(yīng)的二進(jìn)位相異時,結(jié)果為1,它是雙目運算符。即:0^0=0;0^1=1;1^0=1;1^1=0。例如:9^5可寫成算式如下:0000100100000101^____________________00001100(十進(jìn)制為12)可見9^5=12。,3.“按位異或”運算符(^),(2)特殊用途①使特定位翻轉(zhuǎn)要使哪幾位翻轉(zhuǎn)就將與其進(jìn)行“按位異或”運算的數(shù)的相應(yīng)位置為1。②使特定位保留原值要使哪幾位保留原值就將與其進(jìn)行“按位異或”運算的數(shù)的相應(yīng)位置為0。③交換兩個值,不用臨時變量,將01110001的低4位翻轉(zhuǎn),高4位保留原值。0111000100001111^______________01111110(十進(jìn)制126)程序可寫為:#include"stdio.h"main(){inta=0 x71,b=0 xf,c;c=a^b;printf("a=%x\nb=%x\nc=%x\n",a,b,c);},運行情況為:a=71b=fc=7e,設(shè)有整型數(shù)a=5,b=7。編寫程序利用位運算,將a和b的值互換。程序中,通過順序使用a=a^b;b=b^a;a=a^b;三個賦值語句將兩變量a、b的值互換。具體計算過程如下:第一步:a0000000000000101b0000000000000111a=a^b0000000000000010第二步:a0000000000000010b0000000000000111b=b^a0000000000000101(b的值為5)第三步:a0000000000000010b0000000000000101a=a^b0000000000000111(a的值為7),#include"stdio.h"main(){inta=5,b=7;printf("a=%d,b=%d\n",a,b);a=a^b;b=b^a;a=a^b;printf("a=%d,b=%d\n",a,b);},運行情況為:a=5,b=7a=7,b=5,設(shè)有整型數(shù)a=5,b=7。編寫程序利用位運算,將a和b的值互換。,4.“求反”運算符(~),(1)規(guī)則對參與運算的數(shù)的各二進(jìn)位按位求反,它是單目運算符,具有右結(jié)合性。即:~0=1;~1=0。例如:~9的運算為0000000000001001~__________________1111111111110110(2)用途適當(dāng)?shù)氖褂每稍黾映绦虻囊浦残?。如要將整?shù)a的最低位置為0,我們通常采用語句a=a來完成,因為這樣對a是16位數(shù)還是32位數(shù)均不受影響。,5.“左移”運算符(<<),(1)規(guī)則把“<<”左邊的運算數(shù)的各二進(jìn)位全部左移若干位,由“<<”右邊的數(shù)指定移動的位數(shù),高位丟棄,低位補(bǔ)0,是雙目運算符。例如:a<>),(1)規(guī)則把“>>”左邊的運算數(shù)的各二進(jìn)位全部右移若干位,“>>”右邊的數(shù)指定移動的位數(shù)。(2)特殊用途右移1位相當(dāng)于該數(shù)除以2;右移n位相當(dāng)于該數(shù)除以2n。,6.“右移”運算符(>>),(3)說明對于有符號數(shù),在右移時,符號位將隨同移動。當(dāng)為正數(shù)時,最高位補(bǔ)0;而為負(fù)數(shù)時,符號位為1,最高位是補(bǔ)0還是補(bǔ)1取決于計算機(jī)系統(tǒng)的規(guī)定。移入0的稱為“邏輯右移”;移入1的稱為“算術(shù)右移”。我們可以通過編寫程序來驗正所使用的系統(tǒng)是采用“邏輯右移”還是“算術(shù)右移”。很多系統(tǒng)規(guī)定為補(bǔ)1,即“算術(shù)右移”。如:a:1001011111101101a>>1:0100101111110110(邏輯右移)a>>1:1100101111110110(算術(shù)右移),,例2-1從鍵盤上輸入1個正整數(shù)給int變量nNum,輸出由8~11位構(gòu)成的數(shù)(從低位、0號開始編號)。,使變量nNum右移8位,將8~11位移到低4位上。為確保8~11位精確輸出,應(yīng)再構(gòu)造1個低4位為1、其余各位為0的整數(shù)。使其與nNum進(jìn)行按位與運算,從而屏蔽其高位數(shù)。,,例2-1從鍵盤上輸入1個正整數(shù)給int變量nNum,輸出由8~11位構(gòu)成的數(shù)(從低位、0號開始編號)。,#include"stdio.h"voidmain(void){intnNum,nMask;printf("Inputaintegernumber:");scanf("%d",},2.2if-else判定性結(jié)構(gòu),If判斷結(jié)構(gòu),if(條件表達(dá)式)語句塊1;,,例2-2輸入兩個整數(shù),輸出其中的大數(shù)。,,例2-2輸入兩個整數(shù),輸出其中的大數(shù)。,#include#includevoidmain(void){intnNum1,nNum2;/*定義兩個整型變量,用于存放兩個操作數(shù)*/intnMax;/*定義中間變量,用于存放中間結(jié)果*/printf("\ninputtwonumbers:");scanf("%d%d",/*輸出兩個整數(shù)中的大數(shù)*/},格式輸入函數(shù),格式:scanf(“格式控制串”,地址表)功能:按指定格式從鍵盤讀入數(shù)據(jù),存入地址表指定的存儲單元中,并按回車鍵結(jié)束返值:正常,返回輸入數(shù)據(jù)個數(shù),地址表:變量的地址,常用取地址運算符charch;scanf(“%d”,執(zhí)行:123?輸出:x=123,ch=10,,例intx;charch;scanf(“%d”,執(zhí)行:123?輸出:x=123,ch=10,解決方法:(1)用getchar()清除(2)用格式串中空格或“%*c”來“吃掉”,例intx;charch;scanf(“%d”,,,指針類型,格式:scanf(“格式控制串”,地址表),地址表:變量的地址,常用取地址運算符,指針變量定義的一般形式:變量類型*變量名;,指針變量賦值的一般形式:指針變量名=&普通變量名;,printf(“%d”,*pNum1);,printf(“%d”,nNum1);,,*和/*定義兩個雙精度浮點型變量,用于存放兩個操作數(shù)*//*定義兩個雙精度浮點型指針,用于指向存放浮點數(shù)的內(nèi)存單元*/double*pNum1,*pNum2;pNum1=},2.2if-else判定性結(jié)構(gòu),If判斷結(jié)構(gòu),if(表達(dá)式1)語句塊1;elseif(表達(dá)式2)語句塊2;elseif(表達(dá)式3)語句塊3;elseif(表達(dá)式n)語句塊n;else語句塊n+1;,,例2-4輸入學(xué)生考試分?jǐn)?shù),按A、B、C、D、E給出成績的等級。90分以上(包括90分)為A等,60分以下(不包括60分)為E等,中間每10分為一個等級,畫出流程圖。,,例2-4輸入學(xué)生考試分?jǐn)?shù),按A、B、C、D、E給出成績的等級。90分以上(包括90分)為A等,60分以下(不包括60分)為E等,中間每10分為一個等級,畫出流程圖。,#include#includevoidmain(void){charcLevel=0 x20;floatfScore;printf("請輸入成績:");scanf("%f",},找別扭,inta=1;if(a==0)printf("OK");inta=0;if(a==0)printf("OK");,inta=1;if(a=0)printf("OK");inta=0;if(a=0)printf("OK");,一定要分清==和=,下面用法能起點小作用,inta=0;if(0==a)printf("OK");,inta=0;if(0=a)printf("OK");,,編譯出錯,2.2if-else判定性結(jié)構(gòu),If語句的嵌套,if(表達(dá)式)if(表達(dá)式)語句;,if(表達(dá)式)if(表達(dá)式)語句;elseif(表達(dá)式)語句;,,C語言規(guī)定,else總是與它前面最近的if配對。,2.2if-else判定性結(jié)構(gòu),條件運算符和條件表達(dá)式,把a(bǔ)和b中的最大值放入z中if(a>b)z=a;elsez=b;z=(a>b)?a:b;此種表達(dá)式切忌用得過于繁雜,2.3switch判定性結(jié)構(gòu),switch(表達(dá)式){case常量表達(dá)式1:語句塊1;[break;]case常量表達(dá)式2:語句塊2;[break;]…case常量表達(dá)式n:語句塊n;[break;][default:語句塊n+1;]},2.3switch判定性結(jié)構(gòu),/*purpose:輸入一個整數(shù),轉(zhuǎn)換成星期輸出*/#include#includevoidmain(void){inta;printf("inputintegernumber:");scanf("%d",}},?,default可以沒有不要忘記break,switch和else-if的比較,1else-if比switch的條件控制更強(qiáng)大一些else-if可以依照各種邏輯運算的結(jié)果進(jìn)行流程控制switch只能進(jìn)行==判斷,并且只能是整數(shù)判斷2switch比else-if更清晰兩者都要盡量避免用得過多、過長,尤其不要嵌套得太多它們大大增加程序的分支,使邏輯關(guān)系顯得混亂,不易維護(hù),易出錯,2.4應(yīng)用實例,例2-6學(xué)生成績管理程序。問題描述:任意輸入學(xué)生百分制的某科成績fScore,按優(yōu)、良、中、及格和不及格的等級輸出。,成績是實數(shù),用switch完成時涉及到類型轉(zhuǎn)換,兩個同種數(shù)據(jù)類型的運算結(jié)果,還是該類型兩個不同種數(shù)據(jù)類型的運算結(jié)果,是兩種類型中取值范圍更大的那種longdouble>double>float>long>int>short>char只要兩者中有一個是unsigned,就都轉(zhuǎn)為unsigned再計算把數(shù)據(jù)賦值給另外一種類型變量也會發(fā)生自動類型轉(zhuǎn)換從小到大,順利轉(zhuǎn)換從大到小,發(fā)出警告(好的編譯器會給出),2.4應(yīng)用實例,例2-5計算器程序。問題描述:任意輸入兩個數(shù),根據(jù)用戶選擇的功能菜單,求出它們的和、差、積、除的結(jié)果。,#include#includevoidmain(void){doubledLOper,dROper,dResult;/*定義兩個double變量,用于存放左右操作數(shù)*/intnFun;/*定義一個字符變量,用于存放運算符*/printf("--------------------------\n");/*構(gòu)造功能菜單*/printf("加法運算--------1\n");printf("減法運算--------2\n");printf("除法運算--------3\n");printf("乘法運算--------4\n");printf("--------------------------\n");printf("請輸入功能選擇:");/*在屏幕上顯示提示信息*/scanf("%d",/*輸出結(jié)果*/}},2.4應(yīng)用實例,例2-6學(xué)生成績管理程序。問題描述:任意輸入學(xué)生百分制的某科成績fScore,按優(yōu)、良、中、及格和不及格的等級輸出。,成績是實數(shù),用switch完成時涉及到類型轉(zhuǎn)換,可以通過“(類型)表達(dá)式”的方式把表達(dá)式的值轉(zhuǎn)為任意類型強(qiáng)轉(zhuǎn)時,你必須知道你在做什么強(qiáng)轉(zhuǎn)與指針,并稱C語言兩大神器,用好了可以呼風(fēng)喚雨,用壞了就損兵折將,屠龍刀,倚天劍,2.4應(yīng)用實例,例2-6學(xué)生成績管理程序。問題描述:任意輸入學(xué)生百分制的某科成績fScore,按優(yōu)、良、中、及格和不及格的等級輸出。,僅把浮點型轉(zhuǎn)換成整型還不夠,因從1~100的數(shù)太多了。只分五等,可以采取這個的技巧:用所輸入的成績?nèi)≌鬁p去50,再整除10,凡是得到5或4的為優(yōu)秀,凡是得到3的為良好,,依次類推。如,95.5-50=45.5,取整后得45,整除于10得4,則為優(yōu)秀;78.3-50=28.5,取整后得28,整除于10得2,則為中等。,2.4應(yīng)用實例,2.4應(yīng)用實例,#include#includevoidmain(void){floatfScore;intnLevel;printf("請輸入成績:");scanf("%f",}}},Theend,- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 語言 人民郵電 出版社 張小東
鏈接地址:http://www.hcyjhs8.com/p-12805548.html