《C語言程序設計項目式教程》02 繪制圖形寫字字帖_第1頁
《C語言程序設計項目式教程》02 繪制圖形寫字字帖_第2頁
《C語言程序設計項目式教程》02 繪制圖形寫字字帖_第3頁
《C語言程序設計項目式教程》02 繪制圖形寫字字帖_第4頁
《C語言程序設計項目式教程》02 繪制圖形寫字字帖_第5頁
已閱讀5頁,還剩32頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第一章第四章目繪制圖形項二學習目標了解條件運算及表達式和函數在結構化程序設計中的重要意義理解在解決問題過程中抽象出規律的重要性掌握for語句及循環嵌套以及程序功能設計掌握三種循環語句的區別、聯系以及使用情況具有使用switch語句實現簡單的菜單選擇功能的能力學習路徑任務一使用無參函數,實現根據不同內容輸出不同圖形邏輯運算(1)邏輯運算符的分類

C語言中的邏輯運算符只有3個,即邏輯與(&&)、邏輯或(||)和邏輯非(!),其中邏輯與和邏輯或是雙目運算符,邏輯非是單目運算符。類別運算符含義舉例雙目&&邏輯與:只有參與運算的兩個量都為真時,結果才為真,否則為假。1>2&&2>1的值為03>2&&2>1的值為11>2&&2>3的值為02>1&&1>2的值為0

||邏輯或:參與運算的兩個量只要有一個為真,結果就為真。兩個量都為假時,結果為假。1>2||2>1的值為13>2||2>1的值為11>2||2>3的值為02>1||1>2的值為1單目!邏輯非:參與運算量為真時,結果為假;參與運算量為假時,結果為真。!1的值是0!0的值是1邏輯運算(2)邏輯運算符的優先級和結合性

三個邏輯運算符中,邏輯非“!”的優先級最高,具有右結合性,其次是邏輯與“&&”,最后是邏輯或“||”,邏輯與和邏輯或都具有左結合性。它們的優先級為:!>&&>||。當一個復雜的表達式中既有算術運算符、關系運算符,還有邏輯運算符時,它們之間的優先級如下:算術運算符>關系運算符>邏輯運算符。條件運算條件運算符是C語言中唯一的三目運算符,要求有三個運算對象。由條件運算符組成的表達式稱為條件表達式。條件表達式的一般格式如下:①條件表達式的求值規則為:若表達式1的值為真,則以表達式2的值作為條件表達式的值,否則以表達式3的值作為整個條件表達式的值。②條件運算符?和:是一對運算符,不能分開單獨使用。③條件運算符的運算優先級低于關系運算符和算術運算符,但高于賦值符。④條件運算符的結合性是自右至左,例如條件表達式嵌套:a>b?a:c>d?c:d,應理解為a>b?a:(c>d?c:d)。表達式1?表達式2:表達式3for和do-while語句

(1)for語句簡介

C語言中的for語句使用最為靈活,它完全可以代替while語句。其流程圖和執行過程分析可以看出,它相當于while循環中如下形式for(表達式1;表達式2;表達式3){循環體}表達式1;while(表達式2){循環體表達式3;}for和do-while語句

該語句的執行過程為:第一步:執行表達式1;第二步:求表達式2的值,若其值為true(非0),則執行一次循環體,若其值為false,(0),則結束循環,轉而執行循環體后面的語句;第三步:執行表達式3,然后轉到第二步繼續執行。

for循環含義for(sum=0,i=1;i<=10;sum+=i,i++);求1+2+3+4+5+6+7+8+9+10的和for(sum=0,i=1;i<=10;sum+=i,i+=2);求1+3+5+7+9的和for(i=0;;i++);從0開始,1,2,3……不停向上遞增,永不停止for(;i<10;);當i大于等于10時停止循環,此語句為死循環for(;(ch=getchar())!='\n';printf("%c",ch));從鍵盤讀入字符,并輸出,直到輸入字符為回車鍵時為止for和do-while語句

“表達式1”可以省略,但若使用循環控制變量,則應事先賦初值。“表達式2”可以省略,則循環判斷條件永為邏輯真,循環體中沒有其他退出語句,則循環將無終止地進行下去。“表達式3”可以省略,但一般應另外有使循環控制變量的值趨向循環結束值的語句,以保證循環能正常結束。三個表達式都可省略,但分號不能省略表達式1中可以同時初始化多個變量,一般用逗號運算。表達式2可以是任意表達式,只要其值為非零,就執行循環體。表達式3可以是任意表達式,例如:逗號表達式、函數調用等。for和do-while語句

(2)do-while語句一般格式

例如,編寫程序進行帳號與密碼檢查,直到帳號和密碼輸入正確為止

do{循環體}while(表達式);for和do-while語句

(3)三種循環語句的比較三種循環一般情況下可以互相代替。while和do-while循環語句中,循環變量初始化的操作應在while和dowhile語句之前完成;在while后面指定循環條件;在循環體中包含使循環趨于結束的語句(如i++,或i=i+1等)。而for語句可以在表達式1中實現循環變量的初始化;表達式2中是循環條件;表達式3中包含使循環趨于結束的操作,甚至可以將循環體中的操作全部放到表達式3中。for語句的功能更強,凡用while循環能完成的,用for循環都能實現。while和do-while的區別有兩點:①無論循環條件是否成立do-while語句的循環體至少執行一次,而while語句的循環體可能一次都不執行;②while語句中,while()后面的分號可以有也可以沒有,有和沒有表示的含義不一樣,多數情況下有分號會出現邏輯錯誤;do-while語句中,while()后面必須有分號,沒有則出現語法錯誤。

for和do-while語句

(4)嵌套循環嵌套是指一個循環體內又包含另一個完整的循環結構,三種循環語句(while循環、do-while循環和for循環)可以互相嵌套,并且可以多層嵌套。函數概述(1)函數簡介

C語言的結構有一個特點,它是由一個個被稱為函數的程序塊組成的。C源程序是由函數組成的。雖然在前面各章的程序中大都只有一個主函數main),但應用程序往往是由多個函數組成。函數是C源程序的基本結構,通過對函數的調用實現特定的功能。C語言不僅提供了極為豐富的庫函數,還允許用戶建立自己定義的函數。用戶可把自己的算法編成一個個相對獨立的函數結構,然后用調用的方法來使用函數。可以說C程序的全部工作都是由各式各樣的函數完成的。比如我們先前使用的輸入輸出函數等。函數概述(2)函數的優勢對于每一個函數單獨編寫和調試,可以簡化程序設計。函數的邏輯簡單、明確,可以增加程序的可讀性,方便維護與調試。采用函數編程,C語言程序易于實現結構化程序設計,從而使程序的層次結構清晰。可以像搭積木一樣,把不同函數進行相應組合,實現一個完整的應用程序。函數的重復使用,可以避免重復勞動,提高軟件開發效率。函數具有模塊化功能,一個程序由功能不同的函數組成,可以分別編寫,利于團隊開發,能加快程序開發速度。當程序需要擴充新功能時,也不會涉及整個程序的修改,從而使程序具有良好的可維護性和可用性。函數概述(3)函數的分類根據函數的概念我們可以對函數進行分類,在C語言中可從不同的角度對函數分類從函數定義的角度看,函數可分為庫函數和用戶定義函數兩種。①庫函數由C系統提供,用戶無須定義,也不必在程序中作類型說明,只需在程序前包含有該函數原型的頭文件即可在程序中直接調用。例如,在之前的示例中反復用到printf()、scanf()、getchar()等函數均屬此類。C語言提供了多種庫函數,不僅數量多,而且有的還需要硬件知識才會使用,因此要想全部掌握則需要一個較長的學習過程。應首先掌握一些最基本、最常用的庫函數,再逐步深入。由于篇幅關系,本書只介紹了很少一部分庫函數,其余部分可根據需要查閱有關手冊。函數概述①庫函數常用數學庫函數常用其他庫函數函數聲明功能intabs(inti);求整數的絕對值doubleacos(doublex);反余弦函數doubleasin(doublex);反正弦函數doubleatan(doublex);反正切函數doubleceil(doublex);向上舍入doublecos(doublex);余弦函數doubleexp(doublex);指數函數doublelog(doublex);對數函數ln(x)doublelog10(doublex);對數函數logdoublepow(doublex,doubley);指數函數(x的y次方)doublepow10(intp);指數函數(10的p次方)doublesin(doublex);正弦函數doublesqrt(doublex);計算平方根函數聲明功能void*calloc(size_tnelem,size_telsize);分配主存儲器void*malloc(unsignedsize);內存分配函數intrandom(intnum);隨機數發生器unsignedsleep(unsignedseconds);執行掛起一段時間voidsrand(unsignedseed);初始化隨機數發生器logntime(long*tloc);取一天的時間函數概述②用戶自定義函數由用戶按實際需要編寫的函數。對于用戶自定義函數,不僅要在程序中定義函數本身,而且一般在主調函數模塊中還必須對該被調函數進行類型說明,然后才能使用。從主調函數和被調函數間數據傳送的角度看又可分為無參函數和有參函數兩種。①無參函數函數定義、函數說明及函數調用中均不帶參數,主調函數和被調函數之間不進行參數傳送。此類函數通常用來完成一組指定的功能,可以返回或不返回函數值。②有參函數也稱為帶參函數。在函數定義及函數說明時都有參數,稱為形式參數(簡稱為形參)。在函數調用時也必須給出參數,稱為實際參數(簡稱為實參)。進行函數調用時,主調函數將把實參的值傳送給相應形參,供被調函數使用。C語言的函數兼有其它語言中的函數和過程兩種功能,從這個角度看,又可把函數分為有返回值函數和無返回值函數兩種。①有返回值函數此類函數被調用執行完后將向調用者返回一個執行結果,稱為函數返回值。比如數學函數即屬于此類函數。由用戶定義的這種有返回值的函數,必須在函數定義和函數說明中明確返回值的類型,有返回值的函數定義如下所示:②無返回值函數此類函數用于完成某項特定的處理任務,執行完成后不向調用者返回函數值,這類函數類似于其它語言的過程。由于函數無須返回值,用戶在定義此類函數時可指定它的返回為“空類型”,空類型的說明符為“void”。函數聲明

在一個函數中被調用的函數(即被調用函數)需要具備如下條件:(1)被調用的函數必須是已經存在的函數(是庫函數或用戶自定義函數)。(2)如果使用庫函數,一般應在文件開頭用#include命令包含頭文件。如果使用用戶自己定義的函數,尤其是主調函數在前,被調函數定義在后時,必須在主調函數中對被調用函數進行函數聲明。函數聲明,也稱函數原型,其一般格式如下所示:數據類型函數名(形參類型1形參1,形參類型2形參2……)或者:函數類型函數名(形參類型1,形參類型2……)函數的定義函數的定義可以位于源程序中預處理命令(以#開始的命令)之后的任何位置。C語言函數定義ANSI格式如下:函數定義一般有兩部分組成:函數首部和函數體。函數首部包括:數據類型,是指函數的類型,即函數返回值的類型。函數可以有返回值,也可以沒有返回值。若沒有返回值時,數據類型為void;若在函數首部沒有“數據類型”項,則表示函數返回值類型為int。函數名,是指由用戶定義的標識符,它應該符合標識符起名規則,并且最好能“見名思義”。參數列表,在每個函數名的后面緊跟一對括號,注意:即使是無參函數該括號也不能缺省。若是有參函數,則分別聲明每一個形參,形參之間用逗號分隔。函數體,被一對花括號括起來,通過函數體中的語句來實現函數的功能。一般函數體又是由聲明部分和執行部分組成的。聲明部分往往用于聲明屬于該函數的局部變量和該函數要調用的其他用戶自定義函數。執行部分就是由各個所需的執行語句組成。

[數據類型]函數名([形參類型1形參1,形參類型2形參2,……])/*函數首部*/{函數體;}無參函數的調用(1)函數調用過程

函數只有僅當被程序調用的時候,函數中的語句才會被執行。調用函數時,程序可以通過一個或多個參數給它傳遞信息。參數是程序傳遞給函數的數據,函數可以使用這些數據執行任務。然后執行函數中的語句,完成被設計的任務。函數中的語句執行完畢后,控制權將返回調用函數的地方。函數能夠以返回值的形式將信息返回給程序。無參函數的調用(2)函數調用形式

函數調用的一般格式如下所示:在函數調用時應注意:①函數名后的“實參表列”可以省略,但()不能省略。②實參表列可以包含多個實參,各參數間用逗號分隔。③實參與形參一一對應,實參與形參的個數應相等,類型應一致或相兼容,在調用函數時實參把值傳遞給對應的形參。④實參表列中的參數可以是常量、變量、表達式或函數。在進行函數調用時,實參必須具有確定的值,以便把這些值傳遞給相應形參。因此應預先用賦值、輸入等方法使實參獲得確定值。函數名(實參表列);無參函數的調用(3)函數調用的方式

①函數作為一個單獨的語句。把函數調用作為一個語句,不要求函數有返回值。一般格式如下所示②函數作為表達式中的一項出現在表達式中。函數出現在一個表達式中,要求函數帶回一個確定的值。一般格式如下所示:③函數作為調用另一個函數時的實參一般格式如下所示:函數名(實參表列);變量名=函數表達式;result=fun4(fun4(number1,number2),number1);/*函數實參,先計算fun4(number1,number2),再把其返回作為實參*/任務二使用有參函數,分別顯示不同圖形有參函數的調用(1)函數調用過程所有程序都是從main()開始執行,遇到函數調用時,把當前斷點地址壓入堆棧,執行被調用函數,當被調用函數執行結束之后,由堆棧中彈出主調函數斷點地址,繼續執行主調函數后面的語句.intadd(int,int);/*函數聲明*/main(){intsum;sum=add(10,20);

sum=add(30,40);}intadd(inta,intb){returna+b;}①⑤⑨②③⑥④⑤⑥⑦⑧⑨⑧⑦有參函數的調用(2)函數的調用形式

函數調用的一般格式如下所示:在函數調用時應注意:①函數名后的“實參表列”可以省略,但()不能省略。②實參表列可以包含多個實參,各參數間用逗號分隔。③實參與形參一一對應,實參與形參的個數應相等,類型應一致或相兼容,在調用函數時實參把值傳遞給對應的形參。④實參表列中的參數可以是常量、變量、表達式或函數。在進行函數調用時,實參必須具有確定的值,以便把這些值傳遞給相應形參。因此應預先用賦值、輸入等方法使實參獲得確定值。函數名(實參表列);有參函數的調用(3)函數調用的方式①函數作為一個單獨的語句。把函數調用作為一個語句,不要求函數有返回值。一般格式如下所示:②函數作為表達式中的一項出現在表達式中。函數出現在一個表達式中,要求函數帶回一個確定的值。一般格式如下所示:③函數作為調用另一個函數時的實參一般格式如下所示:函數名(實參表列);變量名=函數表達式;result=fun4(fun4(number1,number2),number1);/*函數實參,先計算fun4(number1,number2),再把其返回作為實參*/形參與實參函數的形參和實參具有以下特點:(1)形參變量只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只有在函數內部有效。(2)函數調用是數據單向值傳遞,即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。因此在函數調用過程中,形參的值可以發生改變,而實參的值不會隨之變化。任務三設計主菜單,由用戶選擇不同圖形switch語句switch語句是開關語句,也稱多分支選擇語句,用來實現多分支選擇結構。其一般格式如下所示:switch(表達式){case常量表達式1:語句1case常量表達式2:語句2…

case常量表達式n:語句ndefault:語句n+1}switch語句(1)switch后面括弧內的“表達式”只能是整型或字符型表達式。為什么?因為前面講過,float和double類型的值進行“等于”或“不等”的判斷往往是沒有意義的。(2)每一個case的常量表達式的值必須互不相同。(3)case語句必須以冒號結尾。(4)各個case和default的出現次序可以是任意的。(5)執行完一個case后面的語句后,流程控制轉移到下一個case繼續執行。(6)break語句:終止switch語句的執行,使流程跳出switch結構。例如:當score的值為85時,s的值是8,則執行printf("B\n"),遇到break就不接著執行下面的語句,而是直接退出switch結構。(7)在case后面中雖然包含一個以上執行語句,但可以不必用花括弧括起來,會自動順序執行本case后面所有的執行語句。當然加上花括弧也可以。(8)多個case可以共用一組執行語句。例如:當s的值為10和9時都執行同一組語句。(9)在一個switch語句中,最多只能有一個default子句。case10:case9:printf("A\n");break;函數的返回值函數的返回值是指函數被調用之后,執行函數體中的程序段所取得的并返回給主調函數的值。例如:調用數學函數時都會取得相應的值。函數的值只能通過return語句返回主調函數。return語句的一般格式為:return語句中的“()”可有可無。該語句的功能是計算表達式的值,并返回給主調函數。在函數中允許有多個return語句,但

溫馨提示

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

評論

0/150

提交評論