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