信息學奧林匹克競賽C語言課程膠片3-定向改編V1.0_第1頁
信息學奧林匹克競賽C語言課程膠片3-定向改編V1.0_第2頁
信息學奧林匹克競賽C語言課程膠片3-定向改編V1.0_第3頁
信息學奧林匹克競賽C語言課程膠片3-定向改編V1.0_第4頁
信息學奧林匹克競賽C語言課程膠片3-定向改編V1.0_第5頁
已閱讀5頁,還剩55頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、C語言Part 3 for NOI1. 選擇結構2. 循環結構關系運算符及其優先次序1. (小于)2. (大于)4. = (大于或等于)5. = (等于)6. != (不等于)優先級相同(高)優先級相同(高)優先級相同(低)優先級相同(低)算術運算符(+ - * / %) 關系運算符 賦值運算符(及其擴展賦值運算符) 關系表達式 用關系運算符將兩個表達式(可以是算術表達式或 關系表達式,邏輯表達式,賦值表達式,字符表達式) 接起來的式子,稱關系表達式例:ab,a+bb+c,(a=3)(b=5),ab)(bb”的值為“真”,表達式的值為1。C89C89語言語言中沒有專中沒有專用的邏輯值,用的邏輯

2、值,1 1代代表真,表真,0 0代表假代表假例:ca+b c(a+b)ab=c(ab)=ca=bca=(bca=(bc)邏輯運算符和優先次序1. & (邏輯與) 相當于其他語言中的AND2. | (邏輯或) 相當于其他語言中的OR3. ! (邏輯非) 相當于其他語言中的NOT例:a&b 若a,b為真,則a&b為真。 a|b 若a,b之一為真,則a|b為真。 !a 若a為真,則!a為假。優先次序:!(非)&(與)|(非)邏輯運算符中的“&”和“|”低于關系運算符,“!”高于算術運算符先,邏輯運算符非再,算術運算符再,關系運算符后,邏輯運算符與、或最后,賦值

3、運算符邏輯表達式1用邏輯運算符將關系表達式或邏輯量連接起來的式子就邏輯表達式邏輯表達式的值應該是一個邏輯量“真”或“假”。例:設a=4,b=5:!a的值為0 a&b的值為1a|b的值為1 !a|b的值為14&0|2的值為1任何非零的數值被認作任何非零的數值被認作“真真”邏輯表達式2例:53&84-!0 自左向右運算 1&0邏輯值為083邏輯值為1表達式值為0先,邏輯運算符非再,算術運算符再,關系運算符后,邏輯運算符與、或(53)&(8y&c(!a)&b)|(xy)&c)邏輯表達式3在邏輯表達式的求解中,并不是所有的邏輯運算符都要被

4、執行。(1)a&b&c 只有a為真時,才需要判斷b的值,只有a和b都為真時, 才需要判斷c的值。(2)a|b|c 只要a為真,就不必判斷b和c的值,只有a為假,才 判斷b。a和b都為假才判斷c例:(m=ab)&(n=cd)當a=1,b=2,c=3,d=4,m和n的原值為1時,由于“ab”的值為0,因此m=0,而“n=cd”不被執行,因此n的值不是0而仍保持原值1。邏輯表達式4 用邏輯表達式來表示閏年的條件能被4整除,但不能被100整除。能被4整除,又能被400整除 (year%4=0&year%100!=0)|year%400=0值為真(1)是閏年,否則為非閏年

5、。非閏年:非閏年: (year % 4 != 0 ) | (year % 100 = 0 & year % 400 != 0)if語句的三種基本形式1(1)if (表達式) 語句 例5.1: char ch; ch=getchar(); if(ch=a&ch=a&chy) printf(“%d”,x); else printf(“%d”,y); 條件條件 語句語句1 語句語句2非非00if語句的三種基本形式3(3)if(表達式1)語句1 else if(表達式2)語句2 else if(表達式3)語句3 else if(表達式m)語句m else 語句nif語句的三種基

6、本形式4 int number; float cost, price, total; printf(Please enter number and price:n); scanf(%d, %1f, &number, &price); if(number 500) cost = 0.15; else if(number 300) cost = 0.10; else if(number 100) cost = 0.075; else if(number 50) cost = 0.05; else cost = 0; total = number * price * (1 - cos

7、t); printf(Total = %10.2fn, total);例5.2:為了促銷,對購買貨物多的顧客有優惠:凡是購買50件及以上的,優惠5%;凡是購買100件及以上的,優惠7.5%;凡是購買300件及以上的,優惠10%;凡是購買500件及以上的,優惠15%。要求編程序,用戶輸入購買數量和單價,程序輸入應付貨款。switch(表達式)case 常量表達式1: 語句1case 常量表達式2: 語句2case 常量表達式n: 語句ndefault: 語句n+1Switch語句 int number; char type; float cost, price, total; printf(Pl

8、ease enter number, type(A,B,C,D) and price:n); scanf(%d, %c, %1f, &number, &type, &price); switch (type) case A: cost = 0.15; break; case B: cost = 0.10; break; case C: cost = 0.075; break; case D: cost = 0.05; break; default: cost = 0; total = number * price * (1 - cost); printf(Total =

9、 %10.2fn, total);字符型或者數值型每個常量表達式值必須互不相同C99允許1023個caseCase前允許執行語句;如果沒有break,則按順序執行,因此多個case可以共用一條執行語句if語句的三種基本形式51 3種形式的if語句中在if后面都有表達式,一般為邏輯表達式或關系表達式。2 第二,第三種形式的if語句中,在每個else前面有一個分號,整個語句結束處有一個分號。3 在if和else后面可以只含有一個內嵌的操作語句,也可以有多個操作語句,此時用花括號將幾個語句括起來成為一個復合語句。if語句的三種基本形式5例5.3 輸入兩個實數,按代數值由小到大的順序輸出這兩個數。 f

10、loat a, b, t; scanf(%f,%f, &a, &b); if(a b) t = a; a = b; b = t; printf(%5.2f,%5.2fn, a, b);ynab交換兩個數if語句的三種基本形式5例5.4 輸入三個數,要求按由小到大的順序輸出。 float sort3; int i; for(i = 0; i sort1) swap = sort1; sort1 = sort0; sort0 = swap; if(sort0 sort2) swap = sort2; sort2 = sort0; sort0 = swap; if(sort1 sor

11、t2) swap = sort2; sort2 = sort1; sort1 = swap; for(i = 0; i 數2交換數1和數2取兩個數if語句嵌套在if語句中又包含一個或多個if語句稱為if語句的嵌套。形式:If()if() 語句1else 語句2Elseif() 語句3else 語句4內嵌內嵌ififElse總是與它上面的,最近的,同一復合語句中的,未配對的if語句配對當當ifif和和elseelse數目不同時,可以加數目不同時,可以加花括號花括號來來確定配對關系確定配對關系條件語句的嵌套層數:C99為63,C89為8if語句嵌套例 5.5 有一個函數, 編一程序,輸入一個x值,

12、輸出y值。算法1: 算法1:輸入x 輸入x若x0,則y=-1 若x0,則y=1 若x=0,則y=0輸出y 若x0,則y=1 輸出y 010001yxxxif語句嵌套上例中的程序段有四個,請判斷哪個是正確的?程序1: 程序2: if(x=0) Y=-1; if(x0) y=1; else else y=0; if(x=0) y=0; else y=-1; else y=1;程序3: 程序4: y=-1; y=0; if(x!=0) if(x=0) If(x0) y=1; if(x0) y=1; else y=0; else y=-1;正確正確條件運算符格式 表達式?表達式 表達式 功能 判斷表達

13、式1的值,如果成立就執行表達式2,否則就執行表達式3使用場合 若在語句中,當被判別的表達式的值為“真”或“假” 時,都執行一個賦值語句且向同一個變量賦值時,可以用一個條件運算符來處理。 ()?;1.1. 條件運算符優先級高于賦值運算符條件運算符優先級高于賦值運算符 ,低于關系運算符和算術運算符。,低于關系運算符和算術運算符。 2.2. 條件運算符的結合方向為條件運算符的結合方向為“自右至左自右至左”。 3.3. 表達式表達式2 2”和和“表達式表達式3 3”不僅可以是數值表達式,還可以是賦值表達式或函不僅可以是數值表達式,還可以是賦值表達式或函數表達式。數表達式。4.4. 條件表達式中,表達式

14、的類型可以與表達式和表達式的類型不同。條件表達式中,表達式的類型可以與表達式和表達式的類型不同。 條件運算符例5.6輸入一個字符,判別它是否大寫字母,如果是,將它轉換成小寫字母;如果不是,不轉換。然后輸出最后得到的字符。 char ch; scanf(%c, &ch); ch = (ch = A & ch = Z) ? (ch + 32) : ch; printf(%cn, ch); 如果字符變量ch的值為大寫字母,則條件表達式的值為(),即相應的小寫字母。如果ch的值不是大寫字母,則條件表達式的值為,即不進行轉換。 例5.7 運輸公司對用戶計算運費路程()越遠,每公里運費越低

15、。標準如下: 沒有折扣 折扣 折扣 折扣 折扣 折扣設每公里每噸貨物的基本運費為,貨物重為,距離為,折扣為,則總運費的計算公式為:*() 例5.7 源代碼1. 選擇結構2. 循環結構什么是循環為什么為什么要使用循環?要使用循環?1001nyn問題問題1 1:問題問題2:2: 在許多問題中需要用到循環控制。循環結構是結構化程序設計的基本結構之一,它和順序結構、選擇結構共同作為各種復雜程序的基本構造單元。goto語句 goto語句為無條件轉向語句,它的一般形式為 gotogoto 語句標號;語句標號;語句標號用標識符表示,它的定名規則與變量名相同,即由字母、數字和下劃線組成,其第一個字符必須為字母

16、或下劃線。 例如:例如:goto label_1; 合法; goto 123; 不合法.goto語句 結構化程序設計方法主張限制使用goto語句,因為濫用goto語句將使程序流程無規律、可讀性差.一般來說,可以有兩種用途:(1) 與if語句一起構成循環結構;(2) 從循環體中跳轉到循環體外。 但是這種用法不符合結構化原則,一般不宜采用,只有在不得已時(例如能大大提高效率)才使用.例6.1 用if語句和goto語句構成循環,求1到100的和 int i = 1, sum = 0;loop: if(i = 100) sum = sum + i; i +; goto loop; printf(sum

17、: %dn, sum);1001nn這里用的是“當型”循環結構,當滿足“i=100” 時執行花括弧內的循環體。 運行結果:運行結果:50505050goto語句while語句while語句用來實現“當型”循環結構。一般形式:一般形式: while (while (表達式表達式) ) 語句語句 當表達式為非0值時,執行while語句中的內嵌語句。其特點是:先判斷表達式,后執行語句。例6.1-1 求1到100的和 int i = 1, sum = 0; while(i = 100) sum = sum + i; i +; printf(sum: %dn, sum);1001nn(1)循環體如果包含

18、一個以上的語句,應該用花括弧括起來,以復合語句形式出現.(2)在循環體中應有使循環趨向于結束的語句。 while語句do-while語句do-while語句的特點:先執行循環體,然后判斷循環條件是否成立 一般形式一般形式: : do do 循環體語句 whilewhile (表達式);執行過程:執行過程:先執行一次指定的循環體語句,然后判別表達式,當表達式的值為非零(“真”) 時,返回重新執行循環體語句,如此反復,直到表達式的值等于0為止,此時循環結束。 例6.1-2 求和1001nnDo-while語句 int i = 1, sum = 0; do sum = sum + i; i +; w

19、hile (i = 100); printf(sum: %dn, sum); 在一般情況下,用while語句和用do-while語句處理同一問題時,若二者的循環體部分是一樣的,它們的結果也一樣。 但是,如果while后面的表達式一開始就為假(0值)時,兩種循環的結果是不同的。do-while和while語句比較例6.1-3 求和運行結果:運行結果:11 sum:5050 sum:5050 再運行一次:再運行一次: 101101sum:101sum:101Do-while和while語句的比較 int i, sum = 0; scanf(%d, &i); do sum = sum + i

20、; i +; while (i = 100); printf(sum: %dn, sum); int i, sum = 0; scanf(%d, &i); while(i = 100) sum = sum + i; i +; ; printf(sum: %dn, sum);運行結果:運行結果:11 sum:5050 sum:5050 再運行一次:再運行一次: 101101sum:0sum:01001nn C語言中的for語句使用最為靈活,不僅可以用于循環次數已經確定的情況,而且可以用于循環次數不確定而只給出循環結束條件的情況,它完全可以代替while語句。 一般形式: : forfor

21、(表達式1;表達式2;表達式3) 語句for 語句先求解表達式1。求解表達式2,若其值為真(值為非0),則執行for語句中指定的內嵌語句,然后執行面第(3)步。若為假(值為0),則結束循環,轉到第(5)步。求解表達式3。轉回上面第(2)步驟繼續執行。循環結束,執行for語句下面的一個語句for 語句的執行過程for語句等價于下列語句:語句等價于下列語句:表達式表達式1;while (表達式(表達式2) 語句;語句; 表達式表達式3; 表達式表達式2?執行語句語句成成立立不成立不成立執行for循環之后的語句執行表達式3執行表達式執行表達式1 for語句的一般形式中的“表達式1”可以省略,此時應在

22、for語句之前給循環變量賦初值。注意省略表達式1時,其后的分號不能省略。如 for(;i=100;i+) sum=sum+i; 執行時,跳過“求解表達式1”這一步,其他不變。for 語句 如果表達式2省略,即不判斷循環條件,循環無終 止地進行下去。也就是認為表達式2始終為真。 例如:for(i=1; ;i+) sum=sum+i; 表達式1是一個賦值表達式,表達式2空缺。它相當于: i=1; while(1) sum=sum+1;i+;for 語句 表達式3也可以省略,但此時程序設計者應另外設法保證循環能正常結束。如: for(i=1;i=100;) sum=sum+i;i+; 在上面的for

23、語句中只有表達式1和表達式2,而沒有表達式3。i+的操作不放在for語句的表達式3的位置處,而作為循環體的一部分,效果是一樣的,都能使循環正常結束。for 語句 可以省略表達式1和表達式3,只有表達式2,即只 給循環條件。如: for(;i=100;) 在這種情況下,完全等同于while語句。可見for語句比while語句功能強,除了可以給出循環條件外,還可以賦初值,使循環變量自動增值等。for 語句 3個表達式都可省略,如: for(; ;) 語句 相當于 while(1) 語句 即不設初值,不判斷條件(認為表達式2為真值),循環變量不增值。無終止地執行循環體。for 語句 表達式1可以是設

24、置循環變量初值的賦值表達式,也可以是與循環變量無關的其他表達式。如: : for (sum=0;i=100;i+) sum=sum+i; 表達式3也可以是與循環控制無關的任意表達式。for 語句 表達式1和表達式3也可以是逗號表達式,即包含一個以上的簡單表達式,中間用逗號間隔。如: for(sum=0,i=1;i=100;i+) sum=sum+i; 或 for(i=0,j=100;i=j;i+,j-) k=i+j; 表達式1和表達式3都是逗號表達式,各包含兩個賦值表達式,即同時設兩個初值,使兩個變量增值 在逗號表達式內按自左至右順序求解,整個逗號表達式的值為最右邊的表達式的值for 語句 表

25、達式2一般是關系表達式(如i=100)或邏輯表達式(如ab & x100area100時,執行時,執行breakbreak語句,提前結束語句,提前結束循環,即不再繼續執行其余的幾次循環循環,即不再繼續執行其余的幾次循環。 float pi = 3.14159; for(int r = 1; r 100) break; printf(r=%d, area=%3.5fn, r, area); 作用為結束本次循環,即跳過循環體中下面尚未執行的語句,接著進行下一次是否執行循環的判定. 一般形式: continue;continue;continue語句 例6.5 把100200之間的不能被3整除的數輸出。當n能被3整除時,執行continue語句,結束本次循環(即跳過printf函數語句),只有n不能被3整除時才執行printf函數。continue語句 for (int n = 100; n 1e-6) pi = pi + t; n = n + 2; s = - s; t = s / n; pi = pi * 4; pri

溫馨提示

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

評論

0/150

提交評論