c語言教材第一章_第1頁
c語言教材第一章_第2頁
c語言教材第一章_第3頁
c語言教材第一章_第4頁
c語言教材第一章_第5頁
已閱讀5頁,還剩86頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、1 開篇本課程講述如何使用C語言進行真正的編程 為什么學習c語言? C語言是目前實際程序設(shè)計工作中使用最廣泛的語言之一 它包含了程序設(shè)計需要理解和使用的基本程序機理和主要機制 掌握這些機制就可以理解程序與程序設(shè)計的主要問題。 目前有許多軟件系統(tǒng)是用C編寫的,或基本上是用C編寫的 學習程序設(shè)計的同時也能掌握一種實用的程序設(shè)計工具 C語言是一種很靈活的語言 既可以在較高層次上做,也可以在較低級的層次上做 很多新型的語言都是衍生自C語言 有些本身就是C語言的擴充和發(fā)展 程序設(shè)計是計算機領(lǐng)域的基礎(chǔ)課程 C語言適合作為計算機領(lǐng)域許多后續(xù)課程的教學語言2 開篇本課程講述如何使用 C語言進行真正的編程 授課

2、重點 側(cè)重學習一個具體問題的算法化的過程 學習應該掌握的基本編程技巧以及C編程的風格和藝術(shù) 討論 怎樣編寫出一個好的程序? 簡單、實用的原則3 開篇本課程的組織第一部分 基 礎(chǔ)第二部分 簡單程序設(shè)計第三部分 高級程序設(shè)計算法概念、編程原理、編程風格、 基本數(shù)據(jù)類型定義、算術(shù)運算符及 表達式順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、 數(shù)組的定義及應用、程序設(shè)計過程函數(shù)、變量的存儲類別、指針、結(jié) 構(gòu)體與共用體、文件4 1.程序與程序設(shè)計語言什么是程序? 什么是計算機? 計算機是一種具有內(nèi)部存儲能力的自動、高效的電子設(shè)備, 計算機怎樣完成工作? 執(zhí)行存放在計算機的內(nèi)部存儲器中的指令 程序是計算機指令的序列 可以

3、被連續(xù)執(zhí)行的一條條指令的集合稱為計算機的程序5 1.程序與程序設(shè)計語言什么是計算機語言? 是與計算機交流的工具 人和人交流用的是雙方都能聽懂和讀懂的自然語言 人和計算機交流也要用人和計算機都容易接受和理解的語言 計算機語言是根據(jù)計算機的特點而編制的 有限規(guī)則的集合 什么是程序設(shè)計語言? 計算機語言又稱為“程序語言“ 一個計算機程序總是用某種程序語言來編寫6 1.程序與程序設(shè)計語言程序設(shè)計語言的發(fā)展 問題? 怎樣從功能和使用方式上來劃分程序設(shè)計語言?他們各有什么特點?舉例。7 2.程序設(shè)計什么是程序設(shè)計? 使用某種程序語言編寫程序的過程 是用計算機語言對所要解決的問題中的數(shù)據(jù)以及處理問題的方法和

4、步驟所做的完整而準確的描述的過程 怎樣進行程序設(shè)計? 分析問題 確定算法 編制程序 調(diào)試程序8 2.程序設(shè)計一個完整的程序 數(shù)據(jù)結(jié)構(gòu)、算法、編程語言和程序設(shè)計方法 對數(shù)據(jù)的描述(數(shù)據(jù)流) 指定數(shù)據(jù)的類型和數(shù)據(jù)的結(jié)構(gòu) 對操作的描述(控制流) 指定操作的步驟,既算法 程序=數(shù)據(jù)結(jié)構(gòu)+算法9 3.算法輸入三個數(shù),然后輸出最大的數(shù) 算法的兩個要素 基本功能操作 數(shù)據(jù)運算和傳輸 控制結(jié)構(gòu) 順序、選擇和循環(huán)三種基本控制流程 算法可以寫成: (1)輸入A,B,C; (2)若AB,則A-MAX;若AMAX。 (3)若CMAX,則C-MAX。 (4)輸出MAX,MAX既是最大數(shù)。 10 3.算法算法的特性 有窮

5、性 應含有有限的操作步驟,不能是無限的。有窮性指在 “合理的限度之內(nèi)” 唯一性 每一個步驟都是確定的,只有一個涵義,不可以為二義性 有零個或多個輸入 在執(zhí)行算法時需要從外界獲取必要的信息 有一個或多個輸出 算法執(zhí)行的目的就是為了求解,“解”就是輸出的信息 沒有輸出的算法是沒有意義的 正確性 每一個步驟應當被有效的執(zhí)行,并得到確定的結(jié)果11 3.算法算法的表示 流程圖 端點:表示程序的轉(zhuǎn)向,常用來表示程序的開始和結(jié)束。處理:操作的功能判斷:單入口 多出口,表明判斷的條件流線:表示程序 的執(zhí)行方向和順序。輸入/輸出:表示數(shù)據(jù)的名稱、類型和用途等。12 3.算法算法的表示 流程圖開始輸入A,B,CA

6、B?TN MAX=AMAX=B CMAX?NTMAX=C輸出MAX結(jié)束13 3.算法算法的表示 N-S圖 是適合結(jié)構(gòu)化程序設(shè)計方法的圖形工具 N-S流程圖無法表示非結(jié)構(gòu)化的程序 TN當條件滿足 A1=1i=9當i=1時,循環(huán)a0=2*(a1+1)a1=a0i=i-1輸出a014 3.算法(練習)算法的表示 其它 典型算法 15 4.結(jié)構(gòu)化的程序設(shè)計方法程序的三種基本結(jié)構(gòu) 問題的提出 結(jié)構(gòu)化程序設(shè)計必須采用的結(jié)構(gòu) 順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu) 被稱為程序設(shè)計的三種基本結(jié)構(gòu) 算法的實現(xiàn)過程是由一系列操作組成的,這些操作之間的執(zhí)行次序就是程序的控制結(jié)構(gòu) 總體結(jié)構(gòu)流程都是自上而下順序執(zhí)行的。 16 4

7、.結(jié)構(gòu)化的程序設(shè)計方法程序的三種基本結(jié)構(gòu) 順序結(jié)構(gòu) 順序結(jié)構(gòu)表示程序中的各操作是按照它們出現(xiàn)的先后順序執(zhí)行的 選擇結(jié)構(gòu) 表示程序的處理出現(xiàn)了分支,它需要根據(jù)某一特定的條件選擇其中的一個分支執(zhí)行 循環(huán)結(jié)構(gòu) 程序反復執(zhí)行某個或某些操作,直到某條件為假(或為真)時才可終止循環(huán) 17 4.結(jié)構(gòu)化的程序設(shè)計方法結(jié)構(gòu)化程序設(shè)計方法 公認的面向過程編程應遵循的基本方法和原則 結(jié)構(gòu)化程序設(shè)計特征 采用模塊化結(jié)構(gòu) 自頂而下的設(shè)計方法 便于對問題的分解和模塊的劃分 程序由三種基本控制結(jié)構(gòu)組成 有限制地使用轉(zhuǎn)移語句 采用結(jié)構(gòu)化程序設(shè)計語言書寫程序 結(jié)構(gòu)化程序設(shè)計語言書寫程序 注意書寫風格18 5.什么是C語言?19

8、73年由美國貝爾實驗室設(shè)計發(fā)布的 目前是計算機程序設(shè)計語言的主流語種 是世界上最為廣泛使用的語言之一 C語言的流行歸功于兩個主要因素 使用正確的C語言指令幾乎可以完成任何任務 是可移植的C編譯系統(tǒng)的廣泛采用 C語言是一種能夠讓軟件工程師與計算機進行有效對話的介于匯編語言和高級語言之間的編程語言 C語言標準 1978年,正式出版的The C Programming Language書中介紹的C語言,稱為標準C語言 1983年,美國國家標準化協(xié)會(ANSI)根據(jù)各種C語言版本對C的擴充和發(fā)展,頒布了C語言的新標準ANSI C ANSI C比標準C有了很大的擴充和發(fā)展 1987年,美國國家標準化協(xié)會

9、又頒布新標準,稱為87 ANSI C 1990年,國際標準化組織ISO接受了87 ANSI C作為ISO C的標準 目前功能最完善、性能最優(yōu)良的C新版本 目前流行的C編譯系統(tǒng)都是以它為基礎(chǔ)的19 5.什么是C語言?C語言的特點 適合開發(fā)系統(tǒng)軟件 結(jié)構(gòu)化的程序設(shè)計語言 豐富的數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu) 運算符多樣化 可移植性好 語句簡潔緊湊 編程風格靈活,語法限制少,使用靈活 具有預處理功能 面向?qū)ο蟪绦蛟O(shè)計的基礎(chǔ)20 編寫一個加法運算程序#includestdio.h main() int a,b;/*定義兩個整形變量*/ a=1;b=5;/*給兩個變量賦值*/ printf(“%d+%d=%dn”,

10、a,b,a+b); /*打印a和b之和*/ C語言嚴格區(qū)分大、小寫 英文字母。C語言程序習慣上使用小寫英文字母,而大寫英文字母通常作為常量的宏定義和其他特殊的用途。5. 什么是C語言?21 #includestdio.h main() int a,b;/*定義兩個整形變量*/ a=1;b=5;/*給兩個變量賦值*/ printf(“%d+%d=%dn”,a,b,a+b); /*打印a和b之和*/ C語言嚴格區(qū)分大、小寫 英文字母。例:編寫一個加法運算程序如下:5.什么是C語言? C語言程序是由一個個的 語句組成。每個語句都具有規(guī)定的語法格式和特定的功能。 編寫一個加法運算程序22 #inclu

11、destdio.h main() int a,b;/*定義兩個整形變量*/ a=1;b=5;/*給兩個變量賦值*/ printf(“%d+%d=%dn”,a,b,a+b); /*打印a和b之和*/ C語言嚴格區(qū)分大、小寫 英文字母。例:編寫一個加法運算程序如下:5.什么是C語言?C語言程序是由一個個的 語句組成。 C語言程序使用“;”作為 語句的終止符和分隔符??梢匀我鈺鴮?,即一行中可以書寫多個語句,一個語句也可以占用任意多行,語句之間必須用“;”分隔。初學時建議在一行內(nèi)書寫一條語句。 編寫一個加法運算程序23 #includestdio.h main( ) int a,b;/*定義兩個整形變

12、量*/ a=1;b=5;/*給兩個變量賦值*/ printf(“%d+%d=%dn”,a,b,a+b); /*打印a和b之和*/ C語言嚴格區(qū)分大、小寫 英文字母。例:編寫一個加法運算程序如下:5.什么是C語言? C語言程序是由一個個的 語句組成。 C語言程序使用“;”作為 語句的終止符和分隔符。 C語言程序中用大括號對 “ ”表示程序的結(jié)構(gòu)層 次范圍。一個完整的程序模塊要用一對花括號括起來,用以表示模塊的范圍。為了清晰地表現(xiàn)出程序的結(jié)構(gòu),建議使用右縮進鋸齒型程序書寫格式。 編寫一個加法運算程序24 #includestdio.h main( ) int a,b;/*定義兩個整形變量*/ a=

13、1;b=5;/*給兩個變量賦值*/ printf(“%d+%d=%dn”,a,b,a+b); /*打印a和b之和*/ C語言嚴格區(qū)分大、小寫 英文字母。例:編寫一個加法運算程序如下:5.什么是C語言? C語言程序是由一個個的 語句組成。 C語言程序使用“;”作為 語句的終止符和分隔符。 C語言程序中用大括號對 “ ”表示程序的結(jié)構(gòu)層 次范圍。語言程序可以使用注釋。 注釋部分的格式是: 注釋內(nèi)容注釋部分不參與程序的執(zhí)行,對程序的運行結(jié)果沒有影響,只是用來提示或助記。 編寫一個加法運算程序25 5.什么是C語言?C程序結(jié)構(gòu)組成 C程序為函數(shù)模塊結(jié)構(gòu),整個程序都是由一個或多個函數(shù)組成 函數(shù)是由函數(shù)說

14、明和函數(shù)體兩部分組成 一個C程序總是從main()函數(shù)開始執(zhí)行 被調(diào)用的函數(shù)可以是系統(tǒng)提供的庫函數(shù),也可以是用戶根據(jù)需要自己編制設(shè)計的函數(shù)(用戶自定義函數(shù)) 一個C 程序可以由一個文件組成,也可以由若干個文件組成分析下面程序: #include main( ) int a=1,b=5,c; c=add(a,b); printf(“c=%dn”,c); int add(int x,int y) return(x+y); 26 C程序源程序文件1源程序文件i源程序文件n預編譯命令函數(shù)1函數(shù)n函數(shù)體函數(shù)首部C程序結(jié)構(gòu)組成5.什么是C語言? 注意 一個函數(shù)名后面必須跟一對(),函數(shù)參數(shù)可以沒有,但這

15、一對()不能省略,如main() 在函數(shù)定義中第一行的函數(shù)名后沒有分號“;” 27 5.什么是C語言?標識符 每種程序語言都規(guī)定了在程序里描述名字的規(guī)則 這些名字包括:變量名、常數(shù)名、數(shù)組名、函數(shù)名、文件名、類型名等,被統(tǒng)稱為標識符 C語言標識符 C語言的標識符是滿足如下條件的字符序列 只能由英文字母、數(shù)字和下劃線組成 必須以英文字母或下劃線開頭 注意 標識符的使用很多,使用時要注意語言規(guī)則 C語言對大、小寫字母嚴格區(qū)分 根據(jù)ANSI標準,只有前31個字符是有意義,但一般系統(tǒng)使用的標識符,其有效長度不超過8個字符 標識符不要與關(guān)鍵字同名28 5.什么是C語言?關(guān)鍵字 具有特定含義的,用作專用的

16、標識符 語言中關(guān)鍵字絕大多數(shù)是由小寫字母構(gòu)成的字符序列 注意: 這些特定的關(guān)鍵字不允許用戶作為自定義的標識符使用 例:指出合法的標識符與關(guān)鍵字 “ABA” S05 file.c 10page printf yellow_red a&b -113 _ACG Abc 29 5.什么是C語言?語句 語句是組成程序的基本單位 它能完成特定操作 所有程序設(shè)計語言都提供了滿足編寫程序要求的一系列語句 有確定的形式和功能 C語言中的語句30 6. C語言的開發(fā)與運行開發(fā)一個C程序,一般過程編輯:使用一個文本編輯器將編寫好的C程序輸入計算機,并以 文本文件的形式保存C語言源程序,其文件擴展名為“.C” 編譯:

17、使用一個C語言編譯系統(tǒng)(如TurboC 2.0)對C語言源程序 進行語法檢查和翻譯,生成同名的“.OBJ”目標文件鏈接:將目標文件和系統(tǒng)提供的標準庫函數(shù)等連接在一起,生成 一個同名的“.EXE”可執(zhí)行文件 執(zhí)行:脫離C語言編譯系統(tǒng),可在操作系統(tǒng)下鍵入文件名直接運行31 6. C語言的開發(fā)與運行安裝tc2.0 下載 Cd 思考題 C語言程序執(zhí)行過程是如何進行的?應注意什么問題? 32 7. 小測驗 根據(jù)語言標識符的命名規(guī)則,以下全部合法的標識符是: A)2xy, x+y, 10 xy, xy2 B)main(), printf, int, float C)int, char, printf ,

18、scanf D)add, x10, _count, x_y 一個語言程序總是從 A)主過程開始執(zhí)行B)主函數(shù)開始執(zhí)行 C)子程序開始執(zhí)行D)主程序開始執(zhí)行 33 數(shù)據(jù) 數(shù)據(jù)是程序設(shè)計中所要涉及和描述的主要內(nèi)容 數(shù)據(jù)是程序加工、處理的對象 數(shù)據(jù)同樣是加工的結(jié)果 數(shù)據(jù)類型 數(shù)據(jù)類型的概念 數(shù)據(jù)類型是一類數(shù)據(jù)的抽象表示,這類數(shù)據(jù)具有相同的形式,遵從相同的運算規(guī)則 程序處理的基本數(shù)據(jù)按性質(zhì)劃分 屬于同一類的各個數(shù)據(jù)都具有同樣的性質(zhì) 同樣的操作 同樣的編碼方式 把程序語言中具有這樣性質(zhì)的數(shù)據(jù)集合稱為數(shù)據(jù)類型。 . 什么是數(shù)據(jù)和數(shù)據(jù)類型 34 .C語言的數(shù)據(jù)類型數(shù)據(jù)類型的分類數(shù)據(jù)類型空類型指針類型構(gòu)造類型

19、結(jié) 構(gòu) 體 類 型數(shù) 組 類 型共 用 體 類 型基本類型整型實型字符型標準類型用戶定義類型枚舉型單精度型雙精度型指針類型 用于存放地址(指針),用來解決動態(tài)數(shù)據(jù)的建立、刪除和使用 空類型 用于數(shù)據(jù)類型的轉(zhuǎn)換 基本類型 構(gòu)造簡單,已由系統(tǒng)定義好 構(gòu)造類型 由其它數(shù)據(jù)類型按一定規(guī)則構(gòu)造而成。 35 .C語言的數(shù)據(jù)類型數(shù)據(jù)類型的分類 提示 每個數(shù)據(jù)類型都有固定的表示方式 這個表示方式確定了可能表示的數(shù)據(jù)范圍以及數(shù)據(jù)在內(nèi)存中的存放形式 C程序中所出現(xiàn)的所有數(shù)據(jù)都必須明確指定其數(shù)據(jù)類型 數(shù)據(jù)類型的體現(xiàn) 常量和變量是在計算機中數(shù)據(jù)類型的表現(xiàn)形式 不再是抽象的概念而是實在的數(shù)據(jù),這些數(shù)據(jù)符合對數(shù)據(jù)類型的規(guī)

20、定(形式和運算規(guī)則兩方面) 常量和變量之間的區(qū)別在于程序執(zhí)行過程中的變化情況 常量是一成不變的 變量則可以不斷改變36 .C語言的數(shù)據(jù)類型數(shù)據(jù)類型的長度 在計算機中,由于軟硬件的各種原因,數(shù)據(jù)類型必須有一個長度的限制 這個長度是指數(shù)據(jù)存儲在計算機中需要占用多少個字節(jié)數(shù) 不同類型的數(shù)據(jù)在內(nèi)存中占用的字節(jié)數(shù)是不同的 溢出處理 不同的數(shù)據(jù)類型規(guī)定了不同的機內(nèi)表示長度,也決定了對應數(shù)據(jù)量的變化范圍,當某一數(shù)據(jù)超出該數(shù)據(jù)類型所規(guī)定的范圍時,計算機會拒絕接受,而將之轉(zhuǎn)換成范圍內(nèi)的另外某個數(shù),這種情況稱之為溢出處理。37 10.常量常量 在程序運行過程中其值不能被改變的量值 例1: 1,200 3.1,-4

21、.0 A,b “abc”,“ABn” 提示 在程序中使用常量時,一般不需要具體指出它屬于哪一種類型C語言編譯系統(tǒng)會自動根據(jù)常量的數(shù)據(jù)大小和直觀形式來確定它的數(shù)據(jù)類型 例2: 3,3.0,3,“3” 38 10.常量語言提供的常量 數(shù)值常量 整型 實型 字符常量 字符常量 字符串常量 這些類型決定了各種常量所占存儲空間的大小和數(shù)的表示范圍 特殊形式常量 符號常量 39 10.常量整型常量 一個整數(shù) 常用的整數(shù)類型(IBM PC機及其兼容機上對C語言整型數(shù)的規(guī)定 ) 整型 2字節(jié): -3276832767 長整型 4字節(jié):-21474836482147483647 無符號整型 2字節(jié): 06553

22、5 無符號長整型 4字節(jié) :04294967295 提示: 整型常量只區(qū)別整型和長整型兩種形式,而沒有無符號值型常量40 10.常量整型常量 三種形式 十進制 有效的十進制數(shù)字串 例:100,32767,-120 八進制 以數(shù)字“0”開頭的八進制數(shù)字串 例:0100,0123,-012 十六進制 以數(shù)字0 x或0X開頭的十六進制字符串 例:0 x123 ,0 x100,-0 x12 長整型常量 可表示為:十進制、八進制、十六進制 在常數(shù)之后加上字母或 35555是否為十進制常量?0358是否為八進制常量?41 10.常量實型常量 實數(shù),又稱浮點數(shù) 類型 單精度型 4字節(jié): 10-38 1038

23、 雙精度型 8字節(jié): 10-30810308 長雙精度型 16字節(jié): 10-4931 104932 有效位數(shù) 單精度有效數(shù)字位數(shù)為十進制數(shù)的67位 雙精度有效數(shù)字位數(shù)為十進制數(shù)的1516位 長雙精度型有效數(shù)字位數(shù)為十進制數(shù)的1819位 提示: 在語言中,實型常量一般都作為雙精度來處理,并且只用十進制數(shù)表示42 10.常量實型常量 兩種形式 小數(shù)形式 由正負符號、整數(shù)部分、小數(shù)點及小數(shù)部分組成 例:3.0,5.123,-120.1,0.0 指數(shù)形式 由尾數(shù)、字母e或E及指數(shù)部分組成 例: 123.0E-1,-1.23e3 標準的指數(shù)形式是:小數(shù)點的左側(cè)只有一位數(shù)字 43 提示 注意指數(shù)必須是不超

24、過數(shù)據(jù)表示范圍的正負整數(shù),并且在e或E前必須有數(shù)字 對于超過有效數(shù)字位的數(shù)位,系統(tǒng)存儲時自動舍去 問題: 合法的長雙精度實型常量的表示形式? 44 C語言中字符型數(shù)據(jù)和整型數(shù)據(jù)可以通用 字符型數(shù)據(jù)在計算機中存儲的是字符的ASCII碼 ASCII碼形式上就是0 到255之間的整數(shù) 例如 字符A的ASCII碼值用是65 A+32; /*執(zhí)行結(jié)果65+32=97,是a的ASCII碼值*/ 45 10.常量字符常量 包括可以全部在計算機上顯示的符號 ASCII碼表上的全部字符 一個字符的存儲占用一個字節(jié) 表示方法 用單引號 括起來的一個字符 A,1 用單引號 括起來的以 字符開始的字符 n,t 46

25、10.常量字符串常量 是用一對雙引號括起來的字符序列 雙引號僅做定界符使用,本身不算入字符串常量 例如 “ABC”,“ ”(有空格),“a” , “Happy new Year”, “abcn” ,“”(無空格)等 C語言規(guī)定字符串的最后必須以空字符0結(jié)尾 編譯程序總是自動地在字符串的結(jié)尾加上一個轉(zhuǎn)義字符0 ASCII碼是0,所對應的字符是空 空字符并不計算在字符串的長度里,但是存儲時,空字符將會額外的占用一個字節(jié)空間 47 10.常量字符串常量 字符串常量與字符常量的區(qū)別 形式 字符常量是用單引號括起的單個字符 字符串常量是用雙引號括起的一串字符 存儲方式 字符常量在內(nèi)存中占一個字節(jié) 字符串

26、常量除了每個字符各占一個字節(jié)外,其字符串結(jié)束符0也要占一個字節(jié) 例如 字符常量a占一個字節(jié) 字符串常量a 占2個字節(jié)0110 0001 0110 00010000 0000a “a” (97)10 (97)10 (0)10 48 10.常量符號常量 在C語言中允許程序中的常量定義為一個標識符,這個標識符稱為符號常量 帶有名字的常量 定義格式 #define 例如: #define AGE 35 #define M 1.9734067e9 提示 簡化書寫格式、減少出錯率 定義符號常量可以提高程序的可讀性,便于程序的調(diào)試和修改 符號常量不同于變量,在其作用域內(nèi)不能被改變和重新賦值 習慣上人們把符號

27、常量名用大寫字母表示 10.常量練習定義常量并輸出50 11.變量變量 在程序運行過程中其值發(fā)生改變(可以被改變)的量值 C語言規(guī)定所有用到的變量都必須在程序中指定其數(shù)據(jù)類型,必須“先定義后使用” 一個變量應該有一個名字(標識符) 定義變量時要給其命名 一個變量應該有一種數(shù)據(jù)類型 編譯系統(tǒng)根據(jù)定義變量的數(shù)據(jù)類型為其分配存儲單元并在該存儲單元中存放變量的值 51 11.變量每個變量都由一個變量名來標識 在C語言中,變量名作為變量的標識,其命名規(guī)則符合標識符的所有規(guī)定 語言規(guī)定標識符只能由字母、數(shù)字和下劃線組成且第一個字符必須是字母或下劃線 提示 大、小寫字母被認為是不同的變量名 例:Sun、su

28、n、SUN是三個不同的變量 為了避免混淆,變量命名應取不同的名字而不是用大小寫區(qū)分 盡量取與變量含義接近的名稱變量的命名 52 11.變量變量的定義 變量定義的目的 定義變量名 定義變量的數(shù)據(jù)類型 變量的類型決定變量的存貯結(jié)構(gòu),使C語言的編譯程序為所定義的變量分配存儲空間 變量的定義說明了變量叫什么以及用來做什么 定義一個變量的過程,實際上就是向內(nèi)存申請一個變量的數(shù)據(jù)類型大小的空間的過程 變量實質(zhì)上就是內(nèi)存某一單元的標識符號,對這個符號的引用就是對相應的內(nèi)存單元的存取操作53 11.變量變量的定義 用類型說明語句對變量進行定義 定義格式 type namelist; 類型說明符Type是語言中

29、的一個有效的數(shù)據(jù)類型 變量表namelist的形式是:變量名1,變量名2,變量名n,用逗號分隔的變量名的集合 例 int a,b23,C_123; float sum; char max_ch; 變量的基本數(shù)據(jù)類型 整型、實型、字符型54 11.變量整型變量 不同類型的差別在于占用不同的存儲空間 采用不同位數(shù)的二進制編碼方式 計算機內(nèi)部總是采用二進制補碼形式表示一個數(shù)值型數(shù)據(jù) 例如: 整型的最高位為符號位:“1”表示負數(shù),“0”表示正數(shù),其余15位表示數(shù)值 無符號整型數(shù)全部16位表示數(shù)值 55 11.變量整型變量 一個整型變量可以保存一個整數(shù) 整型類型的基本標志是int 基本型(int) 短整

30、型(short int 、short) 長整型(long int 、long ) 無符號整型(unsigned int、unsigned long 、unsigned short) 例 int a; long b; unsigned int c; 提示 使用某種類型的變量時,一定要注意該類型變量的取值范圍56 11.變量實型變量 存儲實型數(shù)據(jù) ANSI C允許的定義三種實型變量 float 單精度型 Double 雙精度型 long double 長雙精度型 例 float a, b; double x; long double y; 提示 運用實數(shù)運算時要合理使用不同的類型,盡可能減少誤差

31、一個實型常量可以賦給float或 double型變量,根據(jù)變量的類型截取實型常量的相應有效位數(shù)57 11.變量字符變量 用來存放一個字符常量 即一個字節(jié)存放一個字符 標示:char 例:char c1,a2; 提示 不能將一個字符串常量賦給一個字符變量 例:char c1,c2; c1=a ; c2=b ;合法 c1=“a” ; c2=“b”;非法58 11.變量變量賦值 初始化賦值方式(聲明語句) C語言允許在定義一個變量的同時對變量進行初始化 例: int i=0;/*表示定義一個整型變量i的同時將i賦值為0*/ int i,j,k=10;/*表示i,j,k為整型,只有k被賦值為10 */

32、 提示 如果對幾個變量同時賦一個初始值,則可以寫成 float a=3.0,b=3.0,c=3.0;表示a、b、c的初始值均為3.0,但并不表示整個程序中三個變量值一直不變或一直相等 先說明后賦值方式(賦值語句) 在程序運行過程中用賦值語句給變量賦一個值 例如 a=10;59 11.變量變量在使用中應注意的問題 變量要先定義后使用 常量與變量的類型要匹配例題:編寫求兩數(shù)和的C程序并上機運行。 main() int a,b; a=32767; b=10; c=a+b; printf(c=%dn,c); /* 輸出變量c的值 */ 會出現(xiàn)什么問題?如何解決?60 12.運算符與表達式運算符 C語言

33、用于描述對數(shù)據(jù)進行運算的特殊符號 語言具有豐富而繁多的運算符 由運算符構(gòu)成了各種表達式 分類 語言的運算符按其在表達式中與運算對象的關(guān)系 單目運算 一個運算符連接一個運算對象 雙目運算 一個運算符連接兩個運算對象 三目運算 一個運算符連接三個運算對象61 12.運算符與表達式運算符 分類 語言的運算符按其在表達式中的作用 算術(shù)(自增/自減)運算符:(+,*,/,%、+、-) 關(guān)系運算符:(,=,=,!=,=) 邏輯運算符:(!,&,|) 位運算符:(、|、&) 賦值運算符:(=) 條件運算符:(?:) 逗號運算符:(,) 指針運算符:(*,&) 強制類型轉(zhuǎn)換運算符:(type) 分量運算符:(

34、和 ) 下標運算符:( ) 函數(shù)調(diào)用運算符:(( )) 62 12.運算符與表達式運算符 對運算符的掌握應從三個方面著手 和操作符相關(guān)的數(shù)據(jù)類型(包括操作數(shù)和操作結(jié)果的數(shù)據(jù)類型) 運算符的優(yōu)先級 運算符的結(jié)合次序63 12.運算符與表達式表達式 用運算符將運算對象連接而成的符合語言規(guī)則的算式 特別地:一個常量、一個變量、一個函數(shù)都可以看成是一個表達式 表達式的分類 按照運算符與運算對象的關(guān)系 單目表達式 雙目表達式 三目表達式 64 12.運算符與表達式表達式 表達式的分類 按照運算符在表達式中的作用 算術(shù)表達式,例:3+4*5 賦值表達式,例:a=3 關(guān)系表達式,例: 5b 邏輯表達式,例:

35、35&a=b 條件表達式,例:ab?a:b 逗號表達式,例:a=3,b=4,c=5 指針表達式,例:p-2,&a 65 12.運算符與表達式表達式的求值過程 C語言規(guī)定了運算符的優(yōu)先級和結(jié)合性 優(yōu)先級 指同一個表達式中不同運算符進行計算時的先后次序 結(jié)合性 結(jié)合性是指同一個表達式中相同優(yōu)先級的多個運算應遵循的運算順序 語言規(guī)定:單目運算符是自右向左結(jié)合,雙目運算符是自左向右結(jié)合66 表達式的求值過程按C規(guī)定的原則求值 表達式代表了一個具體的值 實際上是一個數(shù)據(jù)加工的過程 在表達式求值時,先按運算符的優(yōu)先級級別的高低次序執(zhí)行 如果運算符兩側(cè)的優(yōu)先級級別相同,則按規(guī)定的“結(jié)合方向”處理 提示 運算

36、符的優(yōu)先級制約著表達式的計算次序 可以通過括號()來改變表達式求值的順序 表達式求值過程中存在某種類型數(shù)據(jù)的類型轉(zhuǎn)換 67 12.運算符與表達式算術(shù)表達式 由算術(shù)運算符連接數(shù)值型運算對象構(gòu)成 其結(jié)果可以是整數(shù)、單精度實數(shù)和雙精度實數(shù) 例:int a=2; float b=4.5;表達式 2*a+b 的結(jié)果為8.5 優(yōu)先給與結(jié)合性 68 提示 兩個整數(shù)相除其結(jié)果仍為整數(shù)(即舍去小數(shù)部分) 例如:13/10的結(jié)果為1 “%”為求余運算符,參與運算的兩個數(shù)均為整數(shù) 例如:10%31 -10%3-1 除以0在計算機系統(tǒng)中是沒有意義的 雙目運算符兩側(cè)運算對象的類型必須一致,所得結(jié)果的類型將與運算對象的類

37、型一致 用括號可以改變表達式的運算順序 69 12.運算符與表達式算術(shù)表達式 例1: 設(shè) int b=7;float a=2.5,c=4.7; 表達式a+(int)(b/3*(int)(a+c)/2)%4的值? 例2: 70 12.運算符與表達式自增/自減 “+”與“-”的作用是使變量的值增1或減1 C語言提供兩種形式的 +/-運算符 +a,-a(前綴運算:先進行增量運算后使用) a+, a-(后綴運算:先使用后進行增量運算) 提示: 增和自減只能作用于變量,不允許對常量、表達式或其它進行操作 當自增/自減變量值本身就單獨構(gòu)成一條語句時,前綴和后綴的效果是一樣的 對于“+”和“-”的使用要避免

38、二義性71 12.運算符與表達式自增/自減 計算過程 例1:設(shè)x=5 y=+x;/*先計算x=x+1,再執(zhí)行y=x,結(jié)果x=5 ,y=6*/ y=x+;/*先執(zhí)行y=x,再計算x=x+1,結(jié)果y=5,x=6*/ 問題:如何理解A+B ? C規(guī)定:自左向右取盡可能多的符號組成運算符 例2:設(shè)x=5 y=x+*x+;/*先取x的值進行“*”運算,再進行兩次 x+。 y=25,x=7*/ y=+x*+x;/*先進行兩次x自增,使x的值為7,再進行相乘運算。y=49,x=7*/72 12.運算符與表達式賦值表達式 由賦值運算符“=”連接表達式(右側(cè))和變量(左側(cè)) 形式:變量名表達式 賦值運算符完成兩

39、類操作 計算 賦值 例 int a=2,float b=5.2,c; c=a*b; 賦值運算符具有右結(jié)合性 例如:a=b=3*5;/*先計算3*5,后將15賦給b,再將b的值15賦給a*/ 73 12.運算符與表達式賦值表達式 組合賦值表達式 組合賦值運算符將一個變量和一個表達式連接起來的式子稱為組合賦值表達式 形式:變量名 表達式 例: x%=y/3;/*x=x%(y/3)*/ a*=b+c /* a=a*(b+c)*/ 注意:“a*=b+c”與“a=a*b+c”是不等價的 提示 “=”不是數(shù)學中的“等號”,它表示一個動作 右側(cè)的值送與左側(cè)的變量中(左側(cè)只允許是變量,不能是表達式或其他) 賦

40、值運算符兩側(cè)的類型要求一致,否則要進行類型轉(zhuǎn)換 賦值運算符=,相等運算符= =,和一般習慣有所不同74 12.運算符與表達式關(guān)系表達式 關(guān)系運算符中的“關(guān)系”二字的含義是指一個值與另一個值之間的關(guān)系 關(guān)系由關(guān)系運算符(,=,=,!=,=)連接表達式構(gòu)成 形式: OP 表達式可以是常量、變量和表達式 結(jié)果為整型值 0:邏輯假 1:邏輯真 優(yōu)先級:(,=,b、a+bb,abb的結(jié)果分別是多少?(0、1、0) 提示 進行關(guān)系運算時,先計算表達式的值,然后再進行關(guān)系比較運算 例如:int a=1,b=2,c=3; (1)a+b3*c 的結(jié)果為0 /*39關(guān)系不成立*/ (2)(a+=b)(b*=11%

41、c)結(jié)果值為1 /*34關(guān)系成立 */ 在表達式中連續(xù)使用關(guān)系運算符時,要注意正確表達含義 例如:設(shè)的取值范圍為“-1010”時,不能寫成“-10=x=10”,應寫成“-10=x & x=10 為什么?76 12.運算符與表達式邏輯表達式 “邏輯”是指連接關(guān)系的方式 由邏輯運算符(&、|、! )連接的表達式構(gòu)成 形式: OP 表達式可以是常量、變量、或其他表達式 其結(jié)果為整數(shù)值 0 (邏輯假) 或1(邏輯真) 優(yōu)先級 “!”最高,“&”次之,“|”最低 邏輯運算優(yōu)先級低于所有關(guān)系運算 “!”優(yōu)先級高于所有算術(shù)運算(單目運算) 結(jié)合性 & 、| 自左向右 例如:ab&bd ! 自右向左 (例如:

42、 !a )77 12.運算符與表達式邏輯表達式 邏輯運算規(guī)則 提示 設(shè)計邏輯“與” 運算,將最可能為“假”的表達式放在最左側(cè) 設(shè)計邏輯“或”運算,將最可能為“真”的表達式放在最左側(cè) a b !a a&b a|b 0 0 1 0 0 0 非0 1 0 1 非0 0 0 0 1非0 非0 0 1 178 12.運算符與表達式邏輯表達式 例題: 設(shè)int a=3,b=1, x=2, y=0; 則(y|b) & (y|a) 的運算結(jié)果為1。 問題: (1)y|b & y|a 的運算結(jié)果是多少? (2)兩個表達式在運算次序是否一致?79 12.運算符與表達式條件表達式 由條件運算符連接它的三個運算對象構(gòu)

43、成的表達式稱之為條件表達式 形式: ?: 條件運算符的“?”個“:”總是成對出現(xiàn) 表達式可以是任何類型,結(jié)果也可以是任何類型 運算過程 計算表達式1的值 為真,計算表達式2的值,并將表達式2的值作為整個條件表達式的結(jié)果,不再計算表達式3的值 為假,計算表達式3的值,并將表達式3的值作為整個條件表達式的結(jié)果,不計算表達式2的值 80 12.運算符與表達式條件表達式 優(yōu)先級 高于賦值運算,但低于所有關(guān)系運算、邏輯運算和算術(shù)運算 結(jié)合性 自右向左結(jié)合 提示 當多個條件表達式嵌套使用時,每個后續(xù)的“:”總與前面最近的、沒有配對的“?”相聯(lián)系 例如: xy?x:zw?z:w 等同于xy?x:(zw?z:

44、w) 三個運算對象的類型可以不相同 例如:x?a:0.581 12.運算符與表達式條件表達式 例題:設(shè) int x=10,y=9; int a,b,c; a=(-x=y+)?x:-y; b=x+; c=y; 執(zhí)行上述程序段后a,b,c的結(jié)果是? 分別為8,8,1082 12.運算符與表達式逗號表達式 由逗號連接符(,)與表達式構(gòu)成 形式:, ,可以是任何類型 逗號表達式的結(jié)果為最后一個表達式的結(jié)果值 執(zhí)行過程 先求解表達式1的值,再求解表達式2的值,最后求解表達式n的值,并將表達式n的值作為整個表達式的結(jié)果值 優(yōu)先級 級別最低(最后進行逗號運算) 結(jié)合方向 自左向右83 12.運算符與表達式逗

45、號表達式 提示 不是出現(xiàn)逗號的地方都是逗號表達式,逗號在C語言中用于語句之中的參數(shù)分隔符 在多數(shù)情況下,使用逗號表達式的目的是要分別求出每個表達式的結(jié)果值 在循環(huán)結(jié)構(gòu)中經(jīng)常使用 例題 設(shè)int x,a; 表達式x=(a=4,6*2)的x值? 表達式x=a=4,6*2的x值? x為12x為484 12.運算符與表達式混合運算 指在一個表達式中參與運算的對象不是相同的數(shù)據(jù)類型 例如: 設(shè):int a=3;float b=3.0;char c=3; 則表達式(a*c+b)/4+(int)b%2的結(jié)果? 進行混合運算的首要的問題是對參與運算的數(shù)據(jù)進行類型轉(zhuǎn)換 類型轉(zhuǎn)換 由一種數(shù)據(jù)類型到另一種數(shù)據(jù)類型的轉(zhuǎn)換被稱為類型轉(zhuǎn)換85 12.運算符與表達式類型轉(zhuǎn)換 “隱式的”自動類型

溫馨提示

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

最新文檔

評論

0/150

提交評論