疑難解答二PPT課件_第1頁
疑難解答二PPT課件_第2頁
疑難解答二PPT課件_第3頁
疑難解答二PPT課件_第4頁
疑難解答二PPT課件_第5頁
已閱讀5頁,還剩35頁未讀 繼續免費閱讀

付費下載

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Hu Zhiwen, Ph.D, IEEE member疑難解答疑難解答(二二)Question Answer Insight溫州大學溫州大學 甌江學院甌江學院Copyright 2012, All rights reserved. Hu Zhiwen, 2021-12-62期中考試疑難解答期中考試疑難解答C運算符的優先次序和結合性運算符的優先次序和結合性精度問題精度問題強制類型轉換強制類型轉換自動轉換(隱式轉換)自動轉換(隱式轉換)隱含條件隱含條件算術運算符算術運算符邏輯量與符號常量邏輯量與符號常量for循環的應用循環的應用Hu Zhiwen, 2021-12-63期中考試疑難解答期中考試疑

2、難解答C運算符的優先次序和結合性運算符的優先次序和結合性精度問題精度問題強制類型轉換強制類型轉換自動轉換(隱式轉換)自動轉換(隱式轉換)隱含條件隱含條件算術運算符算術運算符邏輯量與符號常量邏輯量與符號常量for循環的應用循環的應用Hu Zhiwen, 2021-12-64邏輯運算符和邏輯表達式邏輯運算符和邏輯表達式邏輯運算符及其優先次序邏輯運算符及其優先次序高高低低!+、-、 *、 /、 %、=、全體單目第二全體單目第二; /所有的單目運算符比如所有的單目運算符比如+ - +(正正) -(負負) 指針指針運算運算*&乘除余三乘除余三,加減四加減四; /這個這個余余是指取余運算即是指取余

3、運算即%移位五,關系六移位五,關系六; /移位運算符:移位運算符: ,關系:,關系: = = 等等等于等于(與與)不等排第七不等排第七; /即即= !=位與異或和位或位與異或和位或; /這幾個都是位運算這幾個都是位運算: 位與位與(&)異或異或()位或位或(|) 三分天下三分天下八九十八九十; 邏輯或跟與邏輯或跟與; /邏輯運算符邏輯運算符:| 和和 &十二和十一十二和十一; /注意順序注意順序:優先級優先級(|) 底于優先級底于優先級(&)條件高于賦值條件高于賦值, /三目運算符優先級排到三目運算符優先級排到 13 位只比賦值運算符位只比賦值運算符和和,高高/需要注意

4、的是賦值運算符很多!需要注意的是賦值運算符很多!逗號運算級最低逗號運算級最低! /逗號運算符優先級最低逗號運算符優先級最低Hu Zhiwen, 2021-12-67+ & -void main() int i=8; printf(%dt,-i-); printf(%dn,i); printf(%dt,-i+); printf(%dn,i); getch();“printf(%dt,-i-);”相當于相當于printf(%dt,-i); i-; “printf(%dt,-i+);”相當于相當于printf(%dt,-i); i+; 思考思考Hu Zhiwen, 2021-12-68逗號運

5、算符和逗號表達式逗號運算符和逗號表達式逗號運算符又稱順序求值運算符。逗號運算符又稱順序求值運算符。一般形式一般形式: 表達式表達式1, 表達式表達式2, , 表達式表達式n自左至右自左至右,依次計算各表達式的值,依次計算各表達式的值,“表達表達式式n” 的值即為整個逗號表達式的值。的值即為整個逗號表達式的值。例如,逗號表達式例如,逗號表達式“a=3*5, a*4”的值的值=60:先求:先求解解a=3*5,得,得a=15;再求;再求a*4 = 60,所以逗號表達,所以逗號表達式的值式的值=60。例如,逗號表達式例如,逗號表達式“(a=3*5, a*4), a+5”的值的值=20:先求解先求解a=

6、3*5,得,得a=15;再求;再求a*4=60;最后求解;最后求解a +5=20,所以逗號表達式的值,所以逗號表達式的值=20。Hu Zhiwen, 2021-12-69逗號運算符和逗號表達式逗號運算符和逗號表達式#include void main()int i=0,j; i=(j=3,j+); printf(i=%d,j=%dn,i,j); i=0;j=0; i=(j+,j=3); printf(i=%d,j=%dn,i,j); getch();Hu Zhiwen, 2021-12-610算術運算符算術運算符: 結合方向結合方向main( )int a=2, b=4, c=6, x, y,

7、 z;y=(x=a+b), (b+c);z=(y=(x=a+b),(b+c);printf(x=%d,y=%d,z=%dn, x, y, z);y=z=0; y=6, 10; z=(6,10);printf(x=%d,y=%d,z=%dn, x, y, z);getch();逗號運算符又稱順序逗號運算符又稱順序求值運算符。一般形求值運算符。一般形式式: 表達式表達式, 表達表達式式, , 表達式表達式n求解過程:自左至右,求解過程:自左至右,依次計算各表達式的依次計算各表達式的值,值,“表達式表達式n” 的的值即為整個逗號表達值即為整個逗號表達式的值。式的值。但但()運算符能改變其運算符能改變

8、其結合順序。結合順序。思考思考Hu Zhiwen, 2021-12-611條件運算符條件運算符一般格式:一般格式: 表達式表達式1 ? 表達式表達式2 : 表達式表達式3條件表達式中的條件表達式中的“表達式表達式1”、“表達式表達式2”、“表表達式達式3”的類型,可以各不相同。的類型,可以各不相同。運算規則運算規則 如果如果“表達式表達式1”的值為非的值為非0(即邏輯真即邏輯真), 則運算結則運算結果等于果等于“表達式表達式2”的值;否則,運算結果等于的值;否則,運算結果等于“表達式表達式3”的值。的值。運算符的優先級與結合性運算符的優先級與結合性 條件運算符的優先級,條件運算符的優先級,高于

9、高于賦值運算符,但賦值運算符,但低于低于關系運算符和算術運算符。其結合性為關系運算符和算術運算符。其結合性為“從右到從右到左左”(即右結合性)。(即右結合性)。Hu Zhiwen, 2021-12-612條件運算符應用舉例條件運算符應用舉例void main() int i=8,j=8; printf(%dn,(ij-) ? i:j); i=8;j=8; printf(%dn,(ij+) ? i:j); i=8;j=8; printf(%dn,(i-j) ? i:j); i=8;j=8; printf(%dn,(i+j) ? i:j); getch();Hu Zhiwen, 2021-12-6

10、13條件運算符應用舉例條件運算符應用舉例從鍵盤上輸入一個字符,如果它是大寫字母,則把從鍵盤上輸入一個字符,如果它是大寫字母,則把它轉換成小寫字母輸出;否則,直接輸出。它轉換成小寫字母輸出;否則,直接輸出。#include main() char ch; printf(Input a character: ); scanf(%c,&ch); ch=(ch=A & ch=Z) ? (ch+32) : ch; printf(ch=%cn,ch);Hu Zhiwen, 2021-12-614期中考試疑難解答期中考試疑難解答C運算符的優先次序和結合性運算符的優先次序和結合性精度問題精度問

11、題強制類型轉換強制類型轉換自動轉換(隱式轉換)自動轉換(隱式轉換)隱含條件隱含條件算術運算符算術運算符邏輯量與符號常量邏輯量與符號常量for循環的應用循環的應用Hu Zhiwen, 2021-12-615main()int i=1;float g=1.00;i=g;printf(i=%f,i);精度問題:強制類型轉換精度問題:強制類型轉換賦值語句中的數據類型轉換賦值語句中的數據類型轉換類型轉換是指不同類型的變量混用時的類型改變。類型轉換是指不同類型的變量混用時的類型改變。在賦值語句中在賦值語句中, 類型轉換規則是類型轉換規則是: 等號右邊的值轉換為等號等號右邊的值轉換為等號左邊變量所屬的類型。

12、左邊變量所屬的類型。main()float i=1.00;printf(i=%d,i);Hu Zhiwen, 2021-12-616精度問題:自動轉換(隱式轉換)精度問題:自動轉換(隱式轉換)main() float f; int i=15; f=i/2;printf(“f=%f,f); main() float f; int i=15; f=i/2.0; printf(“f=%f,f); Hu Zhiwen, 2021-12-617精度問題:自動轉換(隱式轉換)精度問題:自動轉換(隱式轉換)main()float f1,f2,f3,f4,f5,f6,f7;int i=15; f1=i/2;f

13、2=(int)(i/2);f3=(int)i/2;f4=(int)(i)/2;f5=(float)(i/2);f6=(float)i/2;f7=(float)(i)/2;printf(f1=%fn,f1); printf(f2=%fn,f2);printf(f3=%fn,f3);printf(f4=%fn,f4);printf(f5=%fn,f5);printf(f6=%fn,f6);printf(f7=%fn,f7);getch(); Hu Zhiwen, 2021-12-618精度問題:自動轉換(隱式轉換)精度問題:自動轉換(隱式轉換)main()float f1,f2,f3,f4,f5,

14、f6,f7;int i=15; f1=i/2;f2=2*i/2; f3=i/2*2;f4=(int)(2*i/2); f5=(float)(int)(2*i/2);f6=(int)(i/2*2); f7=(float)(int)(i/2*2);printf(f1=%fn,f1);printf(f2=%fn,f2);printf(f3=%fn,f3);printf(f4=%fn,f4);printf(f5=%fn,f5);printf(f6=%fn,f6);printf(f7=%fn,f7);getch();Hu Zhiwen, 2021-12-619精度問題:自動轉換(隱式轉換)精度問題:自動

15、轉換(隱式轉換)求:求:void main() int n=2; float sum=1.0,item; for (n=2;n=100;n+) item=1/(n-1)*n*(n+1); sum+=item; printf(sum=%fn, sum); getch();101100991432132111sum 結果顯然不等于結果顯然不等于1,問,問題究竟出在何處?題究竟出在何處? 該如何修改才能得到正該如何修改才能得到正確答案?確答案?思思 考考Hu Zhiwen, 2021-12-620精度問題:自動轉換(隱式轉換)精度問題:自動轉換(隱式轉換)void main() int n=2; f

16、loat sum=1.0,item; for (n=2;n0 & r20 & r2r1) vol=4.0/3.0 * PI * (r2*r2*r2 - r1*r1*r1); printf( V=%.5lf, vol); Hu Zhiwen, 2021-12-623printf()函數函數格式符格式符說說 明明%d, %i以帶符號的十進制形式輸出整數以帶符號的十進制形式輸出整數(正數不輸出符號正數不輸出符號)%u以無符號的以無符號的十進制形式輸出整數十進制形式輸出整數%o以無符號的八以無符號的八進制形式輸出整數進制形式輸出整數(不輸出前導符號不輸出前導符號0)%x, %X以無符號

17、的十六以無符號的十六進制形式輸出整數進制形式輸出整數(不輸出前導符號不輸出前導符號x),用,用x和和X分別以小寫、大寫字分別以小寫、大寫字母形式輸出母形式輸出%c以字符形式輸出,只輸出單個字符以字符形式輸出,只輸出單個字符%s輸出字符串輸出字符串%f以小數形式輸出單、雙精度數,隱含輸出以小數形式輸出單、雙精度數,隱含輸出6位小數位小數%e, %E以指數形式輸出實數,用以指數形式輸出實數,用e時指數以時指數以“e”表示表示(如如1.2e+02),用,用E時指數以時指數以“E”表示表示(如如1.2E+02)%g, %G選用選用%f或或%e格式中輸出寬度較短的一種格式,不輸出無意義的格式中輸出寬度較

18、短的一種格式,不輸出無意義的0。用。用G時,若以指時,若以指數形式輸出,則指數以大寫表示數形式輸出,則指數以大寫表示l用于長整型數據,如用于長整型數據,如%ld,%lo,%lx,%lum(正整數正整數)數據最小寬度數據最小寬度n(正整數正整數)對實數,表示輸出對實數,表示輸出n位小數;對字符串,表示截取的字符個數位小數;對字符串,表示截取的字符個數-輸出的數字或字符在域內向左靠輸出的數字或字符在域內向左靠Hu Zhiwen, 2021-12-624printf()函數函數void main()float e=6.87; printf(e=%fn,e); printf(e(02)=%-15.2f

19、n,e); printf(e(03)=%-15.3fn,e); printf(e(04)=%-15.4fn,e); printf(e(05)=%-15.5fn,e); printf(e(06)=%-15.6fn,e); printf(e(07)=%-15.7fn,e); printf(e(08)=%-15.8fn,e); printf(e(09)=%-15.9fn,e); printf(e(10)=%-15.10fn,e); printf(e(11)=%-15.11fn,e); printf(e(12)=%-15.12fn,e); getch();Hu Zhiwen, 2021-12-625p

20、rintf()函數函數void main() float e=6.87; printf(e=%fn,e); printf(e(02)=%-15.2fn,e); printf(e(03)=%-15.3fn,e); printf(e(04)=%-15.4fn,e); printf(e(05)=%-15.5fn,e); printf(e(06)=%-15.6fn,e); printf(e(07)=%-15.7fn,e); printf(e(08)=%-15.8fn,e); printf(e(09)=%-15.9fn,e); printf(e(10)=%-15.10fn,e); printf(e(11

21、)=%-15.11fn,e); printf(e(12)=%-15.12fn,e); getch();浮點型變量分為單精度浮點型變量分為單精度(float型型)、雙精度、雙精度(double型型)和長雙精度和長雙精度(long double型型)。 %f以小數形式輸出單、以小數形式輸出單、雙精度數,隱含輸出雙精度數,隱含輸出6位位小數。小數。%f以小數形式輸出單精以小數形式輸出單精度數時,可能發生精度度數時,可能發生精度丟失。丟失。思思 考考對雙精度數而言,有沒有類似的問題?對雙精度數而言,有沒有類似的問題?Hu Zhiwen, 2021-12-626printf()函數函數void main

22、()double e=6.87; printf(e=%fn,e); printf(e(06)=%-18.6fn,e); printf(e(07)=%-18.7fn,e); printf(e(08)=%-18.8fn,e); printf(e(09)=%-18.9fn,e); printf(e(10)=%-18.10fn,e); printf(e(11)=%-18.11fn,e); printf(e(12)=%-18.12fn,e); printf(e(13)=%-18.13fn,e); printf(e(14)=%-18.14fn,e); printf(e(15)=%-18.15fn,e);

23、printf(e(16)=%-18.16fn,e); getch();Hu Zhiwen, 2021-12-627printf()函數函數void main() float e=6.87545454; printf(e=%fn,e); printf(e(02)=%-15.2fn,e); printf(e(03)=%-15.3fn,e); printf(e(04)=%-15.4fn,e); printf(e(05)=%-15.5fn,e); printf(e(06)=%-15.6fn,e); printf(e(07)=%-15.7fn,e); printf(e(08)=%-15.8fn,e);

24、printf(e(09)=%-15.9fn,e); printf(e(10)=%-15.10fn,e); printf(e(11)=%-15.11fn,e); printf(e(12)=%-15.12fn,e); getch();Hu Zhiwen, 2021-12-628精度問題:算術運算符精度問題:算術運算符兩個整數相除的結果為整數,如兩個整數相除的結果為整數,如5/3的結果為的結果為1,舍去小數部,舍去小數部分。但是如果除數或被除數中有一個為負值,則舍入的方向分。但是如果除數或被除數中有一個為負值,則舍入的方向是不固定的,多數機器采用是不固定的,多數機器采用“向向0取整取整”的方法(實際

25、上就是的方法(實際上就是舍去小數部分,注意:不是四舍五入)。舍去小數部分,注意:不是四舍五入)。整除的舍入方向:整除的舍入方向:-2 -1 0 1 2-2 -1 0 1 2向向0取整:取整:小值方向取整:小值方向取整:-5/3= -1.666Hu Zhiwen, 2021-12-629期中考試疑難解答期中考試疑難解答C運算符的優先次序和結合性運算符的優先次序和結合性精度問題精度問題強制類型轉換強制類型轉換自動轉換(隱式轉換)自動轉換(隱式轉換)隱含條件隱含條件算術運算符算術運算符邏輯量與符號常量邏輯量與符號常量for循環的應用循環的應用Hu Zhiwen, 2021-12-630符號常量定義符

26、號常量定義#define A 10#define B A-2main() printf(%d,%d,%d,%d, A,B,B*2,B*3); getch(); 符號常量格式:符號常量格式: #define 符號常符號常量名標識符量名標識符 常數常數表達式表達式其中常數表達式其中常數表達式兩側最好加上兩側最好加上(),否則容易(),否則容易引起歧義。引起歧義。思思 考考Hu Zhiwen, 2021-12-631符號常量定義符號常量定義#define A 10#define B (AA+2)-2main() printf(%d,%d,%d,%dn, A,B,B*2,B*3); printf(%d

27、,%d,%d,%dn, A,(B),(B)*2,(B)*3); getch();符號常量格式:符號常量格式: #define 符號常符號常量名標識符量名標識符 常數常數表達式表達式其中常數表達式其中常數表達式兩側最好加上兩側最好加上(),否則容易(),否則容易引起歧義。引起歧義。思思 考考Hu Zhiwen, 2021-12-632期中考試疑難解答期中考試疑難解答C運算符的優先次序和結合性運算符的優先次序和結合性精度問題精度問題強制類型轉換強制類型轉換自動轉換(隱式轉換)自動轉換(隱式轉換)隱含條件隱含條件算術運算符算術運算符邏輯量與符號常量邏輯量與符號常量for循環的應用循環的應用Hu Zh

28、iwen, 2021-12-633一般格式:一般格式:for (表達式表達式1;表達式;表達式2;表達式;表達式3) 語句語句for (循環變量賦初值;循環條件;循環變量增值循環變量賦初值;循環條件;循環變量增值) 語句語句表達式表達式1(控制變量的初始化(控制變量的初始化 ):): 用來給循環用來給循環變量賦初值變量賦初值,也允許在也允許在for語句外給循環變量賦初語句外給循環變量賦初值,此時可以省略該表達式。值,此時可以省略該表達式。表達式表達式2(循環的條件)(循環的條件): 循環條件,一般為關循環條件,一般為關系表達式或邏輯表達式。系表達式或邏輯表達式。表達式表達式3(循環控制變量的更

29、新(循環控制變量的更新 ): 用來修改循用來修改循環變量的值,一般是賦值語句。環變量的值,一般是賦值語句。for循環循環Hu Zhiwen, 2021-12-634for循環的一般執行過程:循環的一般執行過程:(1)先求解表達式)先求解表達式1;(2)求解表達式)求解表達式2,若其值為真,則,若其值為真,則 執行循環體語句,然執行循環體語句,然后執行第(后執行第(3)步;若為假,則結束循環,轉到第()步;若為假,則結束循環,轉到第(5)步;)步;(3)求解表達式)求解表達式3;(4)轉向步驟()轉向步驟(2););(5)循環結束,執行)循環結束,執行for語句語句 下面的一個語句。下面的一個語

30、句。可以改寫為可以改寫為while循環的形式:循環的形式: 表達式表達式1;while 表達式表達式2語句語句表達式表達式3;for循環循環(contd)表達式表達式2循環體循環體假假 真真求解表達式求解表達式1求解表達式求解表達式3Hu Zhiwen, 2021-12-635(1)先求解表達式)先求解表達式1;(2)求解表達式)求解表達式2,若其值為真,則若其值為真,則 執行執行循環體語句,然后執循環體語句,然后執行第(行第(3)步;若為假,)步;若為假,則結束循環,轉到第則結束循環,轉到第(5)步;)步;(3)求解表達式)求解表達式3;(4)轉向步驟()轉向步驟(2););(5)循環結束,執行)循環結束,執行for語句下面的一個語語句下面的一個語句。句。for循環的執行順序循環的執行順序表達式表達式2循環體循環體假假 真真求解表達式求解表達式1求解表達式求解表達式3Hu Zhiwen, 2021-12-636for循環的執行順序循環

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論