版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、程序設(shè)計(jì)技術(shù),林曉鋼 光電工程學(xué)院,課程介紹,課程性質(zhì) 本課程是非計(jì)算機(jī)專業(yè)理工科學(xué)生的一門重要的專業(yè)(技術(shù))基礎(chǔ)課 。 課程任務(wù) 引導(dǎo)學(xué)生進(jìn)入計(jì)算機(jī)程序設(shè)計(jì)的領(lǐng)域 培養(yǎng)學(xué)生的抽象能力和邏輯思維能力 培養(yǎng)學(xué)生基本的計(jì)算機(jī)程序設(shè)計(jì)能力 課程主教材 程序設(shè)計(jì)技術(shù)(第三版)重慶大學(xué)出版社,2008,課程介紹,課程參考教材 The C Programming Language,清華大學(xué)出版社 程序設(shè)計(jì)方法,人民郵電出版社 C程序設(shè)計(jì)的抽象思維,機(jī)械工業(yè)出版社 C算法:第一卷,人民郵電出版社 C語言,電子科技大學(xué)出版社 C語言程序設(shè)計(jì),北京大學(xué)出版社 C語言的科學(xué)和藝術(shù),機(jī)械工業(yè)出版社 課程的實(shí)踐性教學(xué)
2、環(huán)節(jié) 本課程實(shí)踐性教學(xué)環(huán)節(jié)學(xué)時(shí)數(shù)為32 實(shí)驗(yàn)環(huán)境為: WINDOWS 9X/2000/XP操作系統(tǒng)環(huán)境; Microsoft Visual C+ 6.0 集成環(huán)境; 實(shí)驗(yàn)內(nèi)容參照程序設(shè)計(jì)技術(shù)課程實(shí)驗(yàn)教學(xué)大綱執(zhí)行。,課程介紹,學(xué)時(shí)分配: 本課程理論教學(xué)學(xué)時(shí)數(shù)為40,各部分學(xué)時(shí)分配如下: (一)C語言數(shù)據(jù)描述和C程序設(shè)計(jì)初步(3h) (二)結(jié)構(gòu)化程序設(shè)計(jì)基礎(chǔ)和C語言的控制結(jié)構(gòu)(5h) (三)數(shù)組及其應(yīng)用基礎(chǔ)(4h) (四)C程序結(jié)構(gòu)與C函數(shù)(5h) (五)指針及其應(yīng)用基礎(chǔ)(8h) (六)字符串?dāng)?shù)據(jù)處理及其應(yīng)用(4h) (七)結(jié)構(gòu)體類型和聯(lián)合體類型(4h) (八)C語言的文件處理及其應(yīng)用(4h) (
3、九)位運(yùn)算與枚舉類型(3h),課程介紹,考試方式: 本課程考試由筆試和實(shí)踐環(huán)節(jié)考試(考查)組成。 筆試為閉卷考試,占課程總成績(jī)的70。試題類型為: 單項(xiàng)選擇 程序填空 閱讀程序題 根據(jù)算法寫程序或者根據(jù)程序?qū)懗鏊惴枋?按要求編寫程序 實(shí)驗(yàn)成績(jī)共計(jì)30分,占課程總成績(jī)的30%。 第一部分,對(duì)上機(jī)出勤和學(xué)習(xí)態(tài)度給予成績(jī); 第二部分,對(duì)實(shí)驗(yàn)報(bào)告給予評(píng)價(jià)并計(jì)成績(jī)。,循序漸進(jìn),1、什么是算法? 2、什么是程序? 3、什么是程序設(shè)計(jì)? 4、什么是程序設(shè)計(jì)語言? 5、為什么需要程序設(shè)計(jì)語言? 6、什么是計(jì)算機(jī)軟件?,循序漸進(jìn),如何求任意圓的面積? C語言描述的程序 main() /程序開始 float r
4、, s; printf(“Please enter the radius of a circle:”); scanf(“%f”, end.,循序漸進(jìn),一個(gè)計(jì)算機(jī)程序主要描述兩部分內(nèi)容: 一是描述問題的每個(gè)對(duì)象和對(duì)象之間的關(guān)系數(shù)據(jù)和數(shù)據(jù)結(jié)構(gòu),如上述程序中半徑r、面積s和圓周率3.14及其之間的關(guān)系; 二是描述對(duì)這些對(duì)象作處理的處理方法和處理步驟求解的算法。即描述對(duì)需要處理的對(duì)象“做什么處理”和“如何處理”。 瑞士計(jì)算機(jī)科學(xué)家尼克勞斯-沃思(Niklaus Wirth)曾著過一本著名的書數(shù)據(jù)結(jié)構(gòu)+算法=程序,對(duì)三者的關(guān)系進(jìn)行了描述。由于發(fā)明了多種影響深遠(yuǎn)的程序設(shè)計(jì)語言,并提出結(jié)構(gòu)化程序設(shè)計(jì)這一革命
5、性概念而獲得了1984年的圖靈獎(jiǎng)。,圖靈獎(jiǎng)(Turing Award),圖靈獎(jiǎng)(Turing Award),是美國(guó)計(jì)算機(jī)協(xié)會(huì)(ACM)于1966年設(shè)立的,又叫“A.M. 圖靈獎(jiǎng)”,專門獎(jiǎng)勵(lì)那些對(duì)計(jì)算機(jī)事業(yè)作出重要貢獻(xiàn)的個(gè)人。其名稱取自計(jì)算機(jī)科學(xué)的先驅(qū)、英國(guó)科學(xué)家阿蘭圖靈,這個(gè)獎(jiǎng)設(shè)立目的之一是紀(jì)念這位科學(xué)家。獲獎(jiǎng)?wù)叩呢暙I(xiàn)必須是在計(jì)算機(jī)領(lǐng)域具有持久而重大的技術(shù)先進(jìn)性。大多數(shù)獲獎(jiǎng)?wù)呤怯?jì)算機(jī)科學(xué)家。 圖靈獎(jiǎng)是計(jì)算機(jī)界最負(fù)盛名的獎(jiǎng)項(xiàng),有“計(jì)算機(jī)界諾貝爾獎(jiǎng)”之稱。圖靈獎(jiǎng)對(duì)獲獎(jiǎng)?wù)叩囊髽O高,評(píng)獎(jiǎng)程序也極嚴(yán),一般每年只獎(jiǎng)勵(lì)一名計(jì)算機(jī)科學(xué)家,只有極少數(shù)年度有兩名以上在同一方向上做出貢獻(xiàn)的科學(xué)家同時(shí)獲獎(jiǎng)。目前圖靈
6、獎(jiǎng)由英特爾公司以及Google公司贊助,獎(jiǎng)金為250,000美元。 每年,美國(guó)計(jì)算機(jī)協(xié)會(huì)將要求提名人推薦本年度的圖靈獎(jiǎng)候選人,并附加一份200到500字的文章,說明被提名者為什么應(yīng)獲此獎(jiǎng)。任何人都可成為提名人。美國(guó)計(jì)算機(jī)協(xié)會(huì)將組成評(píng)選委員會(huì)對(duì)被提名者進(jìn)行嚴(yán)格的評(píng)審,并最終確定當(dāng)年的獲獎(jiǎng)?wù)摺?循序漸進(jìn),什么是算法?用計(jì)算機(jī)解決實(shí)際問題的方法和步驟,是一組明確的可執(zhí)行步驟的有序集合。 程序,是現(xiàn)在最吃香的提法。 什么是程序?程序是數(shù)據(jù)和對(duì)數(shù)據(jù)進(jìn)行加工處理的描述。通??蓜澐譃樗膫€(gè)組成部分: (1)定義數(shù)據(jù)部分:定義程序中要處理數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),包括數(shù)據(jù)的類型和數(shù)據(jù)之間的相互關(guān)系等; (2)獲取數(shù)據(jù)部分
7、:從輸入設(shè)備或文件中獲取要處理的數(shù)據(jù); (3)處理數(shù)據(jù)部分:對(duì)獲取數(shù)據(jù)根據(jù)問題要求,按一定規(guī)則進(jìn)行加工處理; (4)輸出結(jié)果部分:將經(jīng)過處理后所獲得的結(jié)果從輸出設(shè)備輸出出來或?qū)懭胛募腥ァ?循序漸進(jìn),什么是程序設(shè)計(jì)(Programming) ?對(duì)要解決的問題進(jìn)行分析,用合理的數(shù)據(jù)結(jié)構(gòu)描述問題所涉及的對(duì)象,找出解決問題的算法,并將解決問題的算法用計(jì)算機(jī)語言記錄下來稱為編碼(coding)。 程序設(shè)計(jì)包括三個(gè)方面的任務(wù): 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) 算法設(shè)計(jì) 編碼 算法設(shè)計(jì)解決的問題“做什么”和 “怎么做”。 “做什么”是指對(duì)問題的認(rèn)識(shí)、分析和判斷, “怎么做”則是要找出具體的、正確的和有效的解決問題的方法和步
8、驟。,循序漸進(jìn),程序設(shè)計(jì)的主要步驟: 認(rèn)識(shí)問題,找出要處理的數(shù)據(jù)及其相互關(guān)系; 設(shè)計(jì)合理的數(shù)據(jù)結(jié)構(gòu); 設(shè)計(jì)解決問題的算法; 按算法編寫程序; 調(diào)試(debug)和測(cè)試(test)程序給出若干組數(shù)據(jù),找出程序的錯(cuò)誤。,循序漸進(jìn),什么是程序設(shè)計(jì)語言(Programming Language) ? 用于編寫計(jì)算機(jī)程序的語言。語言的基礎(chǔ)是一組記號(hào)和一組規(guī)則。根據(jù)規(guī)則由記號(hào)構(gòu)成的記號(hào)串的總體就是語言。在程序設(shè)計(jì)語言中,這些記號(hào)串就是程序。 程序設(shè)計(jì)語言包含三個(gè)方面,即語法、語義和語用。語法表示程序的結(jié)構(gòu)或形式,亦即表示構(gòu)成程序的各個(gè)記號(hào)之間的組合規(guī)則,但不涉及這些記號(hào)的特定含義,也不涉及使用者。語義表示
9、程序的含義,亦即表示按照各種方法所表示的各個(gè)記號(hào)的特定含義,但也不涉及使用者。語用表示程序與使用的關(guān)系。 程序設(shè)計(jì)語言的基本成分有:數(shù)據(jù)成分,用于描述程序所涉及的數(shù)據(jù);運(yùn)算成分,用以描述程序中所包含的運(yùn)算;控制成分,用以描述程序中所包含的控制;傳輸成分,用以表達(dá)程序中數(shù)據(jù)的傳輸。,循序漸進(jìn),計(jì)算機(jī)軟件(Computer Software)是指計(jì)算機(jī)系統(tǒng)中的程序及其文檔。程序是計(jì)算任務(wù)的處理對(duì)象和處理規(guī)則的描述;文檔是為了便于了解程序所需的闡明性資料。程序必須裝入機(jī)器內(nèi)部才能工作,文檔一般是給人看的,不一定裝入機(jī)器。軟件是用戶與硬件之間的接口界面。用戶主要是通過軟件與計(jì)算機(jī)進(jìn)行交流。軟件是計(jì)算機(jī)
10、系統(tǒng)設(shè)計(jì)的重要依據(jù)。為了方便用戶,為了使計(jì)算機(jī)系統(tǒng)具有較高的總體效用,在設(shè)計(jì)計(jì)算機(jī)系統(tǒng)時(shí),必須通盤考慮軟件與硬件的結(jié)合,以及用戶的要求和軟件的要求。,程序設(shè)計(jì)技術(shù),1 C語言數(shù)據(jù)描述和C程序設(shè)計(jì)初步 2 結(jié)構(gòu)化程序設(shè)計(jì)基礎(chǔ)和C語言的控制結(jié)構(gòu) 3 數(shù)組及其應(yīng)用 4 函數(shù)與C程序結(jié)構(gòu) 5 指針與函數(shù) 6 指針與數(shù)組 7 字符串及其應(yīng)用 8 結(jié)構(gòu)體類型和聯(lián)合體類型 9 C語言的文件處理及其應(yīng)用 10 位運(yùn)算與枚舉類型,1 C語言數(shù)據(jù)描述和C程序設(shè)計(jì)初步,C程序的基本結(jié)構(gòu) C語言的基本數(shù)據(jù)類型 基本運(yùn)算符和表達(dá)式 不同類型數(shù)據(jù)混合運(yùn)算及數(shù)據(jù)轉(zhuǎn)換 C程序設(shè)計(jì)初步,1.1 C程序的基本結(jié)構(gòu),語言的由來與發(fā)
11、展 語言是在 70 年代初問世的。一九七八年由美國(guó)電話電報(bào)公司(AT main是主函數(shù)的函數(shù)名,表示這是一個(gè)主函數(shù)。 每一個(gè)C源程序都必須有,且只能有一個(gè)主函數(shù)(main函數(shù))。 函數(shù)調(diào)用語句,printf函數(shù)的功能是把要輸出的內(nèi)容送到顯示器去顯示。 printf函數(shù)是一個(gè)由系統(tǒng)定義的標(biāo)準(zhǔn)函數(shù),可在程序中直接調(diào)用。,世界,您好!,1.1.1 C源程序的組成成分,【例1.2】 #include /*include稱為文件包含命令*/ #include /*擴(kuò)展名為.h的文件稱為頭文件*/ void main() double x,s; /*定義兩個(gè)實(shí)數(shù)變量,以被后面程序使用*/ printf(i
12、nput number:n); /*顯示提示信息*/ scanf(%lf, /*顯示程序運(yùn)算結(jié)果*/ /* main函數(shù)結(jié)束*/,sine of 0.523000 is 0.499481,1.1.1 C源程序的組成成分,鍵盤輸入:scanf()函數(shù) 格式:scanf(“%lf”, (結(jié)果將使 r 等于某個(gè)隨機(jī)值) 通常與printf()函數(shù)組合使用,實(shí)現(xiàn)“人機(jī)對(duì)話”功能。,1.1.1 C源程序的組成成分,屏幕輸出:printf()函數(shù) 格 式:printf (“圓面積S=%fn”,s); 頭文件:stdio.h 功 能:將運(yùn)算結(jié)果送到顯示器屏幕顯示出來。 printf()函數(shù)通常包括兩個(gè)參數(shù):
13、 格式字符串和變量列表。 例:若 r =1,s=3.14 printf (“半徑R=%f 時(shí),面積S=%fn”,r,s); 輸出結(jié)果: 半徑R=1 時(shí),面積S=3.140000 常用格式字符串: 字符型:%c 單字符 %s 字符串 數(shù)值型:%d 整數(shù)(十進(jìn)制) %f 實(shí)數(shù)(小數(shù)形式,默認(rèn)為6位小數(shù)) 注意C語言本身沒有輸入、輸出語句,其功能要借用有關(guān)函數(shù)來實(shí)現(xiàn)。,1.1.1 C源程序的組成成分,【例1.3】 int max(int a, int b) /*定義max函數(shù)*/ if(ab)return a; else return b; /*把結(jié)果返回主調(diào)函數(shù)*/ void main() /*主
14、函數(shù)*/ int x,y,z; /*變量說明*/ int max(int a, int b); /*函數(shù)說明*/ printf(input two numbers:n); scanf(%d%d, /*輸出*/ ,1.1.1 C源程序的組成成分,1.C程序是函數(shù)型程序結(jié)構(gòu)。 2.函數(shù)的基本結(jié)構(gòu)。函數(shù)由函數(shù)頭和函數(shù)體組成。函數(shù)頭給出了函數(shù)的名字、類型以及參數(shù)的個(gè)數(shù)。函數(shù)體總是從花括號(hào)“”開始。以反花括號(hào)“”結(jié)束。 3.一個(gè)C程序總是從main函數(shù)開始執(zhí)行 4.語句以分號(hào);結(jié)束。不同的語句引起不同的計(jì)算機(jī)動(dòng)作,是計(jì)算機(jī)執(zhí)行程序的最小單位。 5.以/*開頭到*/結(jié)束的部分叫注釋行。即注解。不是語句,可
15、以在程序中的任何位置,結(jié)尾不要分號(hào)“;”,不引起計(jì)算機(jī)任何動(dòng)作。 6.源程序中可以有預(yù)處理命令(include命令僅為其中的一種),預(yù)處理命令通常應(yīng)放在源文件或源程序的最前面。 7.書寫格式自由。,【例1.3】 int max(int a, int b) if(ab)return a; else return b; void main() int x,y,z; int max(int a, int b); printf(input two numbers:n); scanf(%d %d, ,1.1.1 C源程序的組成成分,1、編輯 生成C源程序文件,擴(kuò)展名為.c 2、編譯 生成目標(biāo)文件,擴(kuò)展名
16、為.obj 3、連接 將目標(biāo)程序和庫(kù)函數(shù)及其他目標(biāo)程序連接起來,生成可執(zhí)行文件,文件擴(kuò)展名為.exe 4、執(zhí)行 運(yùn)行程序,得到結(jié)果。,開始,可執(zhí)行程序 hello.exe,不正確,1.1.2 C語言的基本元素,1C語言的字符集 小寫英文字母(26個(gè))a b c z 大寫英文字母(26個(gè)) A B C Z 數(shù)字 (10個(gè)) 0 1 2 3 9 特殊字符+ = - _ ( ) * : “ / ? 空白符空格、換行、制表符等,空白符只在字符常量和字符串常量中起作用。在其它地方出現(xiàn)時(shí),只起間隔作用,編譯程序?qū)λ鼈兒雎圆挥?jì)。因此在程序中使用空白符與否,對(duì)程序的編譯不發(fā)生影響,但在程序中適當(dāng)?shù)牡胤绞褂每瞻?/p>
17、符將增加程序的清晰性和可讀性。,1.1.2 C語言的基本元素,2標(biāo)識(shí)符 標(biāo)識(shí)符是給程序中處理的數(shù)據(jù)對(duì)象(如變量、常量、函數(shù)、數(shù)據(jù)類型等)取的名字 . 標(biāo)識(shí)符取名規(guī)則 組成標(biāo)識(shí)符的字符為字母、數(shù)字和下劃線 標(biāo)識(shí)符中第一個(gè)字符必須是字母或下劃線 以下標(biāo)識(shí)符是非法的: 3s 以數(shù)字開頭 s*T 出現(xiàn)非法字符* -3x 以減號(hào)開頭 bowy-1 出現(xiàn)非法字符-(減號(hào)) 多數(shù)C編譯系統(tǒng)在構(gòu)成標(biāo)識(shí)符時(shí)都要區(qū)分字母的大小寫,即book和BOOK是不相同的標(biāo)識(shí)符 構(gòu)成標(biāo)識(shí)符的字符個(gè)數(shù)(標(biāo)識(shí)符長(zhǎng)度)與所使用的環(huán)境相關(guān) 保留字 操作系統(tǒng)或編譯系統(tǒng)或其他系統(tǒng)已經(jīng)用了的名字,用戶不得再用關(guān)鍵字給變量等命名。 例如 d
18、ouble else enum extern float for goto if _Imaginary* inline* int long register restrict* define undef include ifdef ifndef endif line error elif pragma,1.1.2 C語言的基本元素,用戶標(biāo)識(shí)符 用戶自己取的名字 程序員(用戶)在程序中自定義標(biāo)識(shí)符時(shí),除了避免使用保留字和必須遵守標(biāo)識(shí)符的命名規(guī)則外,還需要注意以下兩個(gè)方面:一是要將標(biāo)識(shí)符取得既有意義,又便于閱讀;二是要注意避免含義上或書寫時(shí)引起混淆。例如 下面是一些合法用戶自定義標(biāo)識(shí)符的例子: a
19、 b1file_name _buf 下面是不合法的用戶自定義標(biāo)識(shí)符例子及錯(cuò)誤原因: 123abc/*不是以英文字母開頭*/ float /*與系統(tǒng)保留字同名*/ up.to/*標(biāo)識(shí)符中出現(xiàn)了非法字符“.”*/ zhang san/*標(biāo)識(shí)符中間出現(xiàn)了非法字符空格*/,1.1.2 C語言的基本元素,3函數(shù) 函數(shù)是構(gòu)成程序的基本模塊,每個(gè)函數(shù)具有相對(duì)獨(dú)立的功能。 函數(shù)有三種:主函數(shù)(即main()函數(shù))、C語言編譯系統(tǒng)提供的標(biāo)準(zhǔn)庫(kù)函數(shù)和用戶自定義的函數(shù) 。 主函數(shù)是C程序執(zhí)行的入口,即程序總是從主函數(shù)中的第一條可執(zhí)行的語句開始執(zhí)行;一般情況下也是程序執(zhí)行的出口。 標(biāo)準(zhǔn)庫(kù)函數(shù)是語言處理系統(tǒng)提供的常用功
20、能的處理程序代碼,在程序中如要使用標(biāo)準(zhǔn)庫(kù)函數(shù),則需要在程序中合適的地方(調(diào)用標(biāo)準(zhǔn)庫(kù)函數(shù)之前)用文件包含預(yù)處理語句將與所使用庫(kù)函數(shù)相應(yīng)的頭文件包含到程序中來。 如例前面例題中的“#include ” 用戶自定義函數(shù)即程序員根據(jù)所設(shè)計(jì)應(yīng)用程序的功能自己編寫的函數(shù)。,1.1.2 C語言的基本元素,4C程序書寫的基本要點(diǎn) C程序習(xí)慣上使用小寫英文字母。為了清晰起見,在C程序中往往使用大寫英文母來表示宏定義或其它具有特殊意義的標(biāo)識(shí)符。 C程序中不強(qiáng)調(diào)程序行的概念。一行中可以有多條語句,一個(gè)語句也可以寫在多行上,但語句與語句之間要用分號(hào)(;)分隔。 C程序?yàn)榱嗽鰪?qiáng)程序的可讀性,可以使用適量的空格、空行和適
21、當(dāng)?shù)男虚g縮進(jìn)結(jié)構(gòu)。但要注意,程序中的變量名、函數(shù)名以及C語言本身使用的單詞(如保留字、語句結(jié)構(gòu)等),不能在其中插入空格。,1 C語言數(shù)據(jù)描述和C程序設(shè)計(jì)初步,C程序的基本結(jié)構(gòu) C語言的基本數(shù)據(jù)類型 基本運(yùn)算符和表達(dá)式 不同類型數(shù)據(jù)混合運(yùn)算及數(shù)據(jù)轉(zhuǎn)換 C程序設(shè)計(jì)初步,1.2 C語言的基本數(shù)據(jù)類型,數(shù)據(jù)和數(shù)據(jù)類型 在C語言源程序中能直接書寫的、需要被處理的符號(hào)只有數(shù)和字符兩種,這種符號(hào)稱為C語言的數(shù)據(jù)。 計(jì)算機(jī)系統(tǒng)的內(nèi)存是按字節(jié)編址的,在內(nèi)存里存放一個(gè)數(shù)據(jù)所需要的內(nèi)存字節(jié)數(shù)稱為一個(gè)數(shù)據(jù)所需要的內(nèi)存空間,程序中不同的數(shù)據(jù)在系統(tǒng)內(nèi)存中所要求的存儲(chǔ)空間大小也不一樣,因而在程序設(shè)計(jì)中需要區(qū)分所處理數(shù)據(jù)的數(shù)
22、據(jù)類型。 數(shù)據(jù)類型是指對(duì)數(shù)據(jù)按某種規(guī)則進(jìn)行分類的類別。 數(shù)據(jù)類型將決定變量的某些運(yùn)算是否合法,如,double型變量a作a5和a其中“int ”類型說明符即表示該函數(shù)的返回值為整型量。又如在例題中,使用了庫(kù)函數(shù)sin,由于系統(tǒng)規(guī)定其函數(shù)返回值為雙精度浮點(diǎn)型,因此在賦值語句s=sin (x);中,s 也必須是雙精度浮點(diǎn)型,以便與sin函數(shù)的返回值一致。但是,也有一類函數(shù),調(diào)用后并不需要向調(diào)用者返回函數(shù)值,這種函數(shù)可以定義為“空類型”。其類型說明符為void。,1.2 C語言的基本數(shù)據(jù)類型,常量和變量 對(duì)于基本數(shù)據(jù)類型量,按其取值是否可改變又分為常量和變量?jī)煞N。 常量數(shù)據(jù)在源程序中給定后,在程序的
23、整個(gè)執(zhí)行過程中保持不變。而變量在程序的執(zhí)行過程中是一個(gè)其值可以被程序修改的量,是一個(gè)變化的量。它們可與數(shù)據(jù)類型結(jié)合起來分類。例如,可分為整型常量、整型變量、浮點(diǎn)常量、浮點(diǎn)變量、字符常量、字符變量、枚舉常量、枚舉變量。 變量是由變量名(標(biāo)識(shí)符)來區(qū)別的。變量值是通過引用變量名來引用的,是數(shù)據(jù)。所以,常量和變量在程序中表現(xiàn)的都是數(shù)據(jù)。,常量和符號(hào)常量,在程序執(zhí)行過程中,其值不發(fā)生改變的量稱為常量。 直接常量(字面常量): 整型常量:12、0、-3; 實(shí)型常量:4.6、-1.23; 字符常量:a、b。 標(biāo)識(shí)符:用來標(biāo)識(shí)變量名、符號(hào)常量名、函數(shù)名、數(shù)組名、類型名、文件名的有效字符序列。 符號(hào)常量:用標(biāo)
24、示符代表一個(gè)常量。在語言中,可以用一個(gè)標(biāo)識(shí)符來表 示一個(gè)常量,稱之為符號(hào)常量。 符號(hào)常量在使用之前必須先定義,其一般形式為: #define 標(biāo)識(shí)符 常量 其中#define也是一條預(yù)處理命令(預(yù)處理命令都以#開頭),稱為宏定義命令(在后面預(yù)處理程序中將進(jìn)一步介紹),其功能是把該標(biāo)識(shí)符定義為其后的常量值。一經(jīng)定義,以后在程序中所有出現(xiàn)該標(biāo)識(shí)符的地方均代之以該常量值。 習(xí)慣上符號(hào)常量的標(biāo)識(shí)符用大寫字母,變量標(biāo)識(shí)符用小寫字母,以示區(qū)別。,常量和符號(hào)常量,【例3.1】符號(hào)常量的使用。 #define PRICE 30 main() int num,total; num=10; total=num*
25、PRICE; printf(“total=%d”,total); ,用標(biāo)識(shí)符代表一個(gè)常量,稱為符號(hào)常量。 符號(hào)常量與變量不同,它的值在其作用域內(nèi)不能改變,也不能再被賦值。 使用符號(hào)常量的好處是: 含義清楚; 能做到“一改全改”。,變量,其值可以改變的量稱為變量。一個(gè)變量應(yīng)該有一個(gè)名字,在內(nèi)存中占據(jù)一定的存儲(chǔ)單元。變量定義必須放在變量使用之前。一般放在函數(shù)體的開頭部分。要區(qū)分變量名和變量值是兩個(gè)不同的概念。 變量的三要素: 變量的名字 變量的名字同標(biāo)識(shí)符,即根據(jù)標(biāo)識(shí)符的規(guī)定給變量起名,應(yīng)該做到不用關(guān)鍵字或保留字,大寫和小寫字母有差別;盡量“見名知意”。 變量的類型 變量的類型包括數(shù)據(jù)類型和存儲(chǔ)類
26、。 變量的值 變量在被說明或定義后,可以具有初值,也可以具有默認(rèn)值,還可以具有無意義的值。變量在使用之前必須具有確定的有意義的值,否則不能對(duì)它進(jìn)行賦值之外的其他操作。,1.2 .1 C語言的整型數(shù)據(jù)類型,整型量 1整型常量 C語言源程序能直接書寫的整型常量可以有三種形式: 十進(jìn)制整數(shù)。如888,-123,0等。 八進(jìn)制整數(shù)。以0開頭的整數(shù)是八進(jìn)制整型常量,如0777,-011等。 十六進(jìn)制整數(shù)。以0 x開頭的整數(shù)是十六進(jìn)制整型常量,如0 x123,0 xff等。 在C語言中整型數(shù)據(jù)用機(jī)器的一個(gè)字長(zhǎng)來存儲(chǔ),所以整型數(shù)據(jù)的表示范圍與計(jì)算機(jī)系統(tǒng)的軟硬件環(huán)境有關(guān)。在字長(zhǎng)為16位計(jì)算機(jī)系統(tǒng)中,整型數(shù)據(jù)表
27、示的范圍為-3276832767(-215215-1);在字長(zhǎng)為32位的計(jì)算機(jī)系統(tǒng)中,則表示的數(shù)據(jù)范圍為-231231-1。,1.2 .1 C語言的整型數(shù)據(jù)類型,2整型變量 存放整型數(shù)據(jù)的內(nèi)存空間稱為整型變量,C語言提供了基本整型、短整型、長(zhǎng)整型和無符號(hào)整型四種大小不同的單位空間來存放整形數(shù)據(jù)。,類型名 意 義 字節(jié)數(shù) 表示范圍 short 短整型 2 -3276732768 int 基本整型 4 -21474836472147483648 long 長(zhǎng)整型 4 -2147483647L2147483648L unsigned short 無符號(hào)短整型 2 065535 unsigned in
28、t 無符號(hào)基本整型 4 04294967295U Unsigned long 無符號(hào)長(zhǎng)整型 4 04294967295UL,1.2 .1 C語言的整型數(shù)據(jù)類型,3.變量定義 整型變量定義的一般形式為: 類型名 ; 該語句的功能是:指定具有類型名定義的多個(gè)內(nèi)存空間,取名為變量列表中的標(biāo)識(shí)符(變量名),數(shù)量與變量列表中變量名的個(gè)數(shù)一致。 例如:int x1,x2;(定義變量x1,x2為整型變量) longx,y;(定義變量x,y為長(zhǎng)整型變量) unsigned c,d;(定義變量c,d為無符號(hào)整型變量) 例1-2 整型變量的定義和輸出示例。,1.2.2 C語言的實(shí)型數(shù)據(jù)類型,實(shí)型量 1實(shí)型常量 在
29、C語言源程序中能直接書寫的實(shí)型數(shù),稱為實(shí)型常量。實(shí)型數(shù)在C語言中又稱為浮點(diǎn)數(shù),實(shí)型常數(shù)有兩種表示形式: 實(shí)數(shù)形式:實(shí)數(shù)形式由數(shù)字和小數(shù)點(diǎn)組成。 如:888.88,0.88等。 指數(shù)形式:數(shù)據(jù)由數(shù)字09、小數(shù)點(diǎn)和表示階碼的標(biāo)志“e”或“E”組成,其組成形式一般為: 整數(shù)部分.小數(shù)部分 E指數(shù)部分 指數(shù)形式對(duì)應(yīng)于自然科學(xué)中的科學(xué)計(jì)數(shù)法,其中用字母“e”或“E”來表示冪的底,在“e”或“E”之后用整數(shù)表示數(shù)的指數(shù)。 如123e5表示123105,123e-5表示12310-5。,1.2.2 C語言的實(shí)型數(shù)據(jù)類型,在使用實(shí)型數(shù)的指數(shù)表示形式時(shí)應(yīng)該注意下面兩點(diǎn): 指數(shù)部分只能是整數(shù)而不能用實(shí)數(shù)表示,如1
30、23E1.5是錯(cuò)誤的表示方法。 字母“e”或“E”之前的尾數(shù)部分不能省略,如10-8不能只寫為E-8,而應(yīng)該寫成為1E-8(或者1e-8). 2實(shí)型變量 C源程序文件中存放實(shí)型數(shù)據(jù)的數(shù)據(jù)對(duì)象稱為實(shí)型變量。 C語言中的實(shí)型變量按其表示的數(shù)據(jù)范圍不同和精度不同分為單精度型和雙精度型,其類型名分別為float和double。,1.2.2 C語言的實(shí)型數(shù)據(jù)類型,3.變量定義 定義實(shí)型變量的一般形式為: 類型名 ; 功能意義與整形變量定義相同 例如:float x,y;(定義變量x,y為單精度實(shí)型變量) double z;(定義變量z為雙精度實(shí)型變量) 例1-3 實(shí)型變量的定義和輸出示例。,類型名 意
31、義 字節(jié)數(shù) 精度范圍 float 單精度實(shí)型 4 1.175494e-0383.402823e+038 double 雙精度實(shí)型 8 2.225074e-3081.797693e+308,1.2.3 C語言的字符型數(shù)據(jù)類型,字符量 在C語言源程序中直接書寫的、需要被處理的字符就是字符常量。同樣,用于存放這個(gè)字符的內(nèi)存空間就是字符變量。 1.字符常量 普通字符:普通字符是由單引號(hào)括起來的一個(gè)可打印字符,如a、?、A等。 轉(zhuǎn)義字符:轉(zhuǎn)義字符是由反斜杠開頭的字符序列,此時(shí)反斜杠字符后面的字符或字符序列不表示自己本身的含義而轉(zhuǎn)變?yōu)楸硎玖硗獾奶囟ㄒ饬x。(如表1.4),1.2.3 C語言的字符型數(shù)據(jù)類型,
32、2字符變量 字符類型變量用以存儲(chǔ)和表示一個(gè)字符,占用一個(gè)字節(jié)。字符型變量的定義形式如下: char ; 例如:char ch;(定義變量ch為字符型變量) 在C語言中字符型變量和整型變量是兼容的,系統(tǒng)中存儲(chǔ)的是對(duì)應(yīng)字符的ASCII碼值,因此在C語言中字符數(shù)據(jù)和整數(shù)之間可以通用,即字符型數(shù)據(jù)可以與整型數(shù)據(jù)一起參與運(yùn)算,但在使用時(shí)要注意其表示的合理范圍 (0255范圍內(nèi)的整數(shù)) 例如,若有C語句序列:char ch; ch=A; ch=ch+1;,則執(zhí)行該語句序列后ch的內(nèi)容是字符B。 例1-4 字符變量的定義和輸出示例。,1.2.3 C語言的字符型數(shù)據(jù)類型,3字符串常量 字符串常量是由一對(duì)雙引號(hào)
33、括起的字符序列。例如: CHINA , “C program” , $12.5 等都是合法的字符串常量。 字符串常量和字符常量是不同的量。它們之間主要有以下區(qū)別: 1) 字符常量由單引號(hào)括起來,字符串常量由雙引號(hào)括起來。 2) 字符常量只能是單個(gè)字符,字符串常量則可以含一個(gè)或多個(gè)字符。 3) 可以把一個(gè)字符常量賦予一個(gè)字符變量,但不能把一個(gè)字符串常量賦予一個(gè)字符變量。在語言中沒有相應(yīng)的字符串變量。這是與BASIC 語言不同的。但是可以用一個(gè)字符數(shù)組來存放一個(gè)字符串常量。在數(shù)組一章內(nèi)予以介紹。 4) 字符常量占一個(gè)字節(jié)的內(nèi)存空間。字符串常量占的內(nèi)存字節(jié)數(shù)等于字符串中字節(jié)數(shù)加1。增加的一個(gè)字節(jié)中存
34、放字符0 (ASCII碼為0)。這是字符串結(jié)束的標(biāo)志。,字符常量a和字符串常量a雖然都只有一個(gè)字符,但在內(nèi)存中的情況是不同的。 a在內(nèi)存中占一個(gè)字節(jié),可表示為:,a在內(nèi)存中占二個(gè)字節(jié),可表示為:,1.2.3 C語言的字符型數(shù)據(jù)類型,4符號(hào)常量 在C語言中,除了可以具體的各種類型常量外,還可以可以用符號(hào)代替常量,用以代替常量的符號(hào)稱為符號(hào)常量(或稱為宏常量)。符號(hào)常量在使用之前也必須預(yù)先定義。其定義的格式為: #define 標(biāo)識(shí)符 被替代的常量,例如:#define PI 3.1415926 #define EOF -1 #define precision 1e-8,1.2.4 變量的初始化,
35、變量的初始化指的是為變量第一次賦值。 在C語言中變量初始化的方法有兩種,一是在程序的執(zhí)行過程中通過賦值運(yùn)算符實(shí)現(xiàn)賦值;二是在定義變量的同時(shí)為變量賦初值。C語言中,定義變量的同時(shí)對(duì)其初始化的一般形式為: =; 例如 int a=5; long b, c=59; float c, x3=100.30; double z=100.5548; char ch1=A,ch2=P;,1 C語言數(shù)據(jù)描述和C程序設(shè)計(jì)初步,C程序的基本結(jié)構(gòu) C語言的基本數(shù)據(jù)類型 基本運(yùn)算符和表達(dá)式 不同類型數(shù)據(jù)混合運(yùn)算及數(shù)據(jù)轉(zhuǎn)換 C程序設(shè)計(jì)初步,1.3 基本運(yùn)算符和表達(dá)式,在完成數(shù)據(jù)存入內(nèi)存后,需要對(duì)這些數(shù)據(jù)做相關(guān)的處理或運(yùn)算
36、,以得到我們所需要的結(jié)果。C語言提供了多種運(yùn)算符號(hào),通過由這些運(yùn)算符組合成表達(dá)式和表達(dá)式語句對(duì)數(shù)據(jù)進(jìn)行處理。這些運(yùn)算符是C語言規(guī)定的。各個(gè)運(yùn)算符有各自的意義。 1. 算術(shù)運(yùn)算符:用于各類數(shù)值運(yùn)算。包括 +、-、*、/、%、 +、-。 2. 關(guān)系運(yùn)算符:用于比較運(yùn)算。包括、=、)六種。 5. 賦值運(yùn)算符:用于賦值運(yùn)算,分為簡(jiǎn)單賦值(=)、復(fù)合算術(shù)賦值(+=,-=,*=,/=,%=)和復(fù)合位運(yùn)算賦值( printf(%f,%fn,20.0/7,-20.0/7); printf(%dn,100%3); 本例中,20/7,-20/7的結(jié)果均為整型,小數(shù)全部舍去。而20.0/7和-20.0/7由于有實(shí)數(shù)
37、參與運(yùn)算,因此結(jié)果也為實(shí)型。 100除以3所得的余數(shù)1,1.3.1 算術(shù)運(yùn)算符和算術(shù)表達(dá)式,2. 算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級(jí)和結(jié)合性 表達(dá)式是由常量、變量、函數(shù)和運(yùn)算符組合起來的式子。一個(gè)表達(dá)式有一個(gè)值及其類型, 它們等于計(jì)算表達(dá)式所得結(jié)果的值和類型。表達(dá)式求值按運(yùn)算符的優(yōu)先級(jí)和結(jié)合性規(guī)定的順序進(jìn)行。單個(gè)的常量、變量、函數(shù)可以看作是表達(dá)式的特例。 算術(shù)表達(dá)式:用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算對(duì)象(也稱操作數(shù))連接起來的、符合C語法規(guī)則的式子。例子:a+b、(a*2)c、(x+r)*8-(a+b)7,數(shù)學(xué)式 - C表達(dá)式 s(s-a)(s-b)(s-c) (x+2)e2x,s*(s-a)*(s-b)*(
38、s-c),(x+2)*exp(2*x),1.3.1 算術(shù)運(yùn)算符和算術(shù)表達(dá)式,運(yùn)算符的優(yōu)先級(jí):語言中,運(yùn)算符的運(yùn)算優(yōu)先級(jí)共分為15級(jí)。1級(jí)最高,15級(jí)最低。在表達(dá)式中,優(yōu)先級(jí)較高的先于優(yōu)先級(jí)較低的進(jìn)行運(yùn)算。而在一個(gè)運(yùn)算量?jī)蓚?cè)的運(yùn)算符優(yōu)先級(jí)相同時(shí),則按運(yùn)算符的結(jié)合性所規(guī)定的結(jié)合方向處理。,單目 + - + - 雙目 * / % 雙目 + -,從右向左,-5+3%2 = (-5)+(3%2) = -4 3*5%3 = (3*5)%3 = 0 -i+,-(i+),1.3.1 算術(shù)運(yùn)算符和算術(shù)表達(dá)式,運(yùn)算符的結(jié)合性:語言中各運(yùn)算符的結(jié)合性分為兩種,即左結(jié)合性(自左至右)和右結(jié)合性(自右至左)。例如算術(shù)運(yùn)
39、算符的結(jié)合性是自左至右,即先左后右。如有表達(dá)式x-y+z則y應(yīng)先與“-”號(hào)結(jié)合,執(zhí)行x-y運(yùn)算,然后再執(zhí)行+z的運(yùn)算。這種自左至右的結(jié)合方向就稱為“左結(jié)合性”。而自右至左的結(jié)合方向稱為“右結(jié)合性”。 最典型的右結(jié)合性運(yùn)算符是賦值運(yùn)算符。如x=y=z,由于“=”的右結(jié)合性,應(yīng)先執(zhí)行y=z再執(zhí)行x=(y=z)運(yùn)算。語言運(yùn)算符中有不少為右結(jié)合性,應(yīng)注意區(qū)別,以避免理解錯(cuò)誤。 例1-5 算術(shù)運(yùn)算符使用示例。,1.3.2 賦值運(yùn)算符和賦值表達(dá)式,1.賦值運(yùn)算符 簡(jiǎn)單賦值運(yùn)算符和表達(dá)式:簡(jiǎn)單賦值運(yùn)算符記為“=”。由“= ”連接的式子稱為賦值表達(dá)式。 其一般形式為: 變量=表達(dá)式 例如:x=a+b、 w=s
40、in(a)+sin(b)、y=i+-j 賦值表達(dá)式的功能是計(jì)算表達(dá)式的值再賦予左邊的變量。賦值運(yùn)算符具有右結(jié)合性。 因此 a=b=c=5 可理解為 a=(b=(c=5),1.3.2 賦值運(yùn)算符和賦值表達(dá)式,在其它高級(jí)語言中,賦值構(gòu)成了一個(gè)語句,稱為賦值語句。 而在C中,把“=”定義為運(yùn)算符,從而組成賦值表達(dá)式。 凡是表達(dá)式可以出現(xiàn)的地方均可出現(xiàn)賦值表達(dá)式。 例如,式子:x=(a=5)+(b=8)是合法的。它的意義是把5賦予a,8賦予b,再把a(bǔ),b相加,和賦予x,故x應(yīng)等于13。 在語言中也可以組成賦值語句,按照語言規(guī)定,任何表達(dá)式在其未尾加上分號(hào)就構(gòu)成為語句。因此如x=8;a=b=c=5;都是
41、賦值語句,在前面各例中我們已大量使用過了。,1.3.2 賦值運(yùn)算符和賦值表達(dá)式,2. 類型轉(zhuǎn)換 如果賦值運(yùn)算符兩邊的數(shù)據(jù)類型不相同,系統(tǒng)將自動(dòng)進(jìn)行類型轉(zhuǎn)換,即把賦值號(hào)右邊的類型換成左邊的類型。具體規(guī)定如下: 1)實(shí)型賦予整型,舍去小數(shù)部分。前面的例子已經(jīng)說明了這種情況。 2)整型賦予實(shí)型,數(shù)值不變,但將以浮點(diǎn)形式存放,即增加小數(shù)部分(小數(shù)部分的值為0)。 3) 字符型賦予整型,由于字符型為一個(gè)字節(jié),而整型為二個(gè)字節(jié),故將字符的ASCII碼值放到整型量的低八位中,高八位為0。整型賦予字符型,只把低八位賦予字符量。,1.3.2 賦值運(yùn)算符和賦值表達(dá)式,main() int a,b=322; flo
42、at x,y=8.88; char c1=k,c2; a=y; x=b; a=c1; c2=b; printf(%d,%f,%d,%c,a,x,a,c2); a為整型,賦予實(shí)型量y值8.88后只取整數(shù)8。x為實(shí)型,賦予整型量b值322, 后增加了小數(shù)部分。字符型量c1賦予a變?yōu)檎停土縝賦予c2 后取其低八位成為字符型(b的低八位為01000010,即十進(jìn)制66,按ASCII碼對(duì)應(yīng)于字符B)。,1.3.2 賦值運(yùn)算符和賦值表達(dá)式,C語言程序中,能執(zhí)行操作運(yùn)算的只有語句。表達(dá)式的功能只能在語句里才能被實(shí)現(xiàn)。而單獨(dú)的表達(dá)式是不合法和不被執(zhí)行的。 賦值語句由賦值表達(dá)式加上C語句結(jié)尾符號(hào)分號(hào)“;”
43、構(gòu)成,其一般形式為: ; 或 變量名=表達(dá)式; 例如:a=x+y是賦值表達(dá)式,而a=x+y;則是賦值語句 注意: 1. 賦值運(yùn)算符的左邊必須為變量,不能為常量或表達(dá)式。 2.賦值運(yùn)算符的優(yōu)先級(jí)低于邏輯運(yùn)算符、關(guān)系運(yùn)算符、算術(shù) 運(yùn)算符。其結(jié)合性為從右至左(即:右結(jié)合性)。 3.在C語言中,賦值表達(dá)式可以作為一個(gè)對(duì)象出現(xiàn)在另外的表達(dá)式中。 例1-6 賦值運(yùn)算符和賦值表達(dá)式使用示例。,1.3.3 自反運(yùn)算符,復(fù)合賦值符:凡是雙目運(yùn)算符都可以與賦值運(yùn)算符一起組成復(fù)合賦值符,其結(jié)合性為右結(jié)合性。這些復(fù)合賦值符共有10個(gè),它們是: +=、-=、*=、/=、%=、=、 a+; /*試圖對(duì)實(shí)型變量a施加自增運(yùn)
44、算*/ 自增運(yùn)算符和自減運(yùn)算符不能作用于常量數(shù)據(jù)或者表達(dá)式。例如下面的語句序列存在著錯(cuò)誤: int a=100; -(a+100); /*試圖對(duì)表達(dá)式a+100施加自減 運(yùn)算*/ 300+; /*試圖對(duì)整型常數(shù)300施加自增運(yùn)算*/,1.3.4 自增、自減運(yùn)算符,自增、自減運(yùn)算符的前綴形式 前綴形式即自增、自減運(yùn)算符(+、-)出現(xiàn)在變量的左側(cè),如:+i、 -i。自增、自減運(yùn)算符的前綴形式對(duì)變量實(shí)施的運(yùn)算是“先增/減值后引用”。 自增、自減運(yùn)算符的后綴形式 后綴形式即自增、自減運(yùn)算符(+、-)出現(xiàn)在變量的右側(cè),如:i+、 i-。自增、自減運(yùn)算符的后綴形式對(duì)變量實(shí)施的運(yùn)算是”先引用后增/減值”。
45、例1-9 自增、自減運(yùn)算符使用示例。 int a=10,k; k=+a; printf(a=%d,k=%dn,a,k); k=a+; printf(a=%d,k=%dn,a,k);,例,#include void main( ) int a, b, c; b=5; c=5; a=+b+c-; printf(%d,%d,%dn, a, b, c); a=b-c; printf(%d,%d,%dn, a, b, c); a=-b+c; printf(%d,%d,%dn, a, b, c); ,b=b+1, a=b+c, c=c-1,a=b-c, b=b-1,a=-(b+)+c,a=(b-)-c,a
46、=-b+c, b=b+1,1.3.5 逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式,逗號(hào)運(yùn)算符是C語言中提供的一種特殊運(yùn)算符。逗號(hào)運(yùn)算符用于將兩個(gè)以上的表達(dá)式連接成一個(gè)逗號(hào)表達(dá)式。逗號(hào)表達(dá)式的一般形式為: , 逗號(hào)運(yùn)算符是C語言所有運(yùn)算符中級(jí)別最低的運(yùn)算符,其結(jié)合性為左結(jié)合性。逗號(hào)表達(dá)式在求值時(shí),按從左到右的順序分別計(jì)算各表達(dá)式的值,用最后一個(gè)表達(dá)式的值和數(shù)據(jù)類型來表示整個(gè)逗號(hào)表達(dá)式的值和數(shù)據(jù)類型。 例如,逗號(hào)表達(dá)式a=1,b=a-4,c=b+2;等價(jià)于以下3個(gè)有序語句:a=1;b=a-4;c=b+2; 例1-10 逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式使用示例。 需要注意的是,在C程序中并不是任何地方出現(xiàn)的逗號(hào)都是逗號(hào)運(yùn)算符,逗
47、號(hào)在許多地方也作為分隔符用以分隔若干個(gè)對(duì)象,,1.3.6 sizeof運(yùn)算符,sizeof運(yùn)算符是C語言特有的一個(gè)運(yùn)算符,運(yùn)算符使用形式為: sizeof() 其中,數(shù)據(jù)對(duì)象既可以是某個(gè)具體的變量名,也可以是某種數(shù)據(jù)類型的常量,還可以是某種數(shù)據(jù)類型的名字,甚至于還可以使一個(gè)合法的C表達(dá)式。 sizeof運(yùn)算符的功能是返回其所測(cè)試的數(shù)據(jù)對(duì)象所占存儲(chǔ)單元的字節(jié)數(shù)。 例1-11 sizeof運(yùn)算符使用示例。 例1-12 sizeof運(yùn)算符使用示例。,1.3.7 運(yùn)算符優(yōu)先級(jí)別和結(jié)合性規(guī)則,將表達(dá)式中的各種運(yùn)算符運(yùn)算的先后順序規(guī)定為15個(gè)由低到高的優(yōu)先級(jí)別,同時(shí)還為運(yùn)算符規(guī)定了結(jié)合性。 在表達(dá)式求值時(shí)
48、,若運(yùn)算對(duì)象兩邊的運(yùn)算符優(yōu)先級(jí)不同,按優(yōu)先級(jí)別從高到低運(yùn)算。若運(yùn)算對(duì)象兩邊的運(yùn)算符優(yōu)先級(jí)相同,則按其結(jié)合規(guī)則處理, 對(duì)于表達(dá)式而言同級(jí)運(yùn)算并不是都遵從從左到右的原則。C運(yùn)算符有兩種結(jié)合性,即左結(jié)合性和右結(jié)合性。 運(yùn)算符的優(yōu)先級(jí)和結(jié)合性只有在表達(dá)式里才有實(shí)際意義,表明C語言表達(dá)式的計(jì)值規(guī)則。 例1-13 右結(jié)合性運(yùn)算符使用示例。,1 C語言數(shù)據(jù)描述和C程序設(shè)計(jì)初步,C程序的基本結(jié)構(gòu) C語言的基本數(shù)據(jù)類型 基本運(yùn)算符和表達(dá)式 不同類型數(shù)據(jù)混合運(yùn)算及數(shù)據(jù)轉(zhuǎn)換 C程序設(shè)計(jì)初步,1.4 不同類型數(shù)據(jù)混合運(yùn)算及數(shù)據(jù)轉(zhuǎn)換,不同數(shù)據(jù)類型隱式轉(zhuǎn)換 隱式轉(zhuǎn)換是系統(tǒng)的自動(dòng)轉(zhuǎn)換,數(shù)據(jù)類型轉(zhuǎn)換的原則是向表達(dá)數(shù)據(jù)能力更強(qiáng)
49、的方向轉(zhuǎn)換。即當(dāng)在表達(dá)式運(yùn)算過程中出現(xiàn)了不同數(shù)據(jù)類型的數(shù)據(jù)進(jìn)行混合運(yùn)算時(shí),系統(tǒng)先自動(dòng)按圖1.4所示的規(guī)則將參加運(yùn)算的數(shù)據(jù)對(duì)象轉(zhuǎn)換成同一類型的數(shù)據(jù)再進(jìn)行運(yùn)算。 例1-14 表達(dá)式混合運(yùn)算中的自動(dòng)數(shù)據(jù)類型轉(zhuǎn)換示例。,1.4 不同類型數(shù)據(jù)混合運(yùn)算及數(shù)據(jù)轉(zhuǎn)換,不同數(shù)據(jù)類型顯式轉(zhuǎn)換 在C程序設(shè)計(jì)中,如果有需要可以對(duì)數(shù)據(jù)進(jìn)行顯式類型轉(zhuǎn)換。顯式轉(zhuǎn)換又稱為強(qiáng)制類型轉(zhuǎn)換。顯式類型轉(zhuǎn)換的一般形式是: (類型名)() 顯式類型轉(zhuǎn)換的功能是:在本次運(yùn)算中,強(qiáng)迫表達(dá)式的值轉(zhuǎn)換成指定的數(shù)據(jù)類型參加運(yùn)算。注意,若被轉(zhuǎn)換的對(duì)象是表達(dá)式,則需用括號(hào)將整個(gè)被轉(zhuǎn)換對(duì)象括??;若被轉(zhuǎn)換的對(duì)象是單個(gè)變量,則括號(hào)可以省略。例如,有如下語句
50、序列: float x=2.5; int a=10, m, n; m=a+(int)x; n=a+(int)(x+1.8); 特別注意:類型轉(zhuǎn)換只對(duì)標(biāo)注強(qiáng)制轉(zhuǎn)換這一次起作用,在程序的其余地方,變量還保留其原有的值。 例1-15 表達(dá)式混合運(yùn)算中的強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換示例。,1 C語言數(shù)據(jù)描述和C程序設(shè)計(jì)初步,C程序的基本結(jié)構(gòu) C語言的基本數(shù)據(jù)類型 基本運(yùn)算符和表達(dá)式 不同類型數(shù)據(jù)混合運(yùn)算及數(shù)據(jù)轉(zhuǎn)換 C程序設(shè)計(jì)初步,1.5 C程序設(shè)計(jì)初步,1.5.1 算法基本概念及算法描述 算法是符合計(jì)算機(jī)特征的、處理實(shí)際問題的計(jì)算機(jī)操作步驟的描述。 1 算法的基本概念和算法的特征 (1)算法必須準(zhǔn)確反映了應(yīng)用問題
51、的數(shù)學(xué)模型。 (2)算法的每一步最后都能用計(jì)算機(jī)高級(jí)語言描述。 (3)算法執(zhí)行的步驟邏輯(即程序執(zhí)行邏輯)應(yīng)該與實(shí)際問題的處理邏輯一致。 例如,在計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)任意兩個(gè)數(shù)由大到小排序輸出的算法設(shè)計(jì)如下: 第1步 算法開始 第2步 輸入兩數(shù),取名 a和b 第3步 判斷:如果ab,則先輸出a然后再輸出 b:;否則先輸出b然后輸出a; 第4步 算法結(jié)束,程序的靈魂算法,一個(gè)程序應(yīng)包括: 對(duì)數(shù)據(jù)的描述。在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù) 結(jié)構(gòu)(data structure)。 對(duì)操作的描述。即操作步驟,也就是算法(algorithm)。 Nikiklaus Wirth提出的公式: 程序
52、=數(shù)據(jù)結(jié)構(gòu)+算法 教材認(rèn)為: 程序=算法+數(shù)據(jù)結(jié)構(gòu)+程序設(shè)計(jì)方法+語言工具和環(huán)境 這4個(gè)方面是一個(gè)程序涉及人員所應(yīng)具備的知識(shí)。,簡(jiǎn)單算法舉例1,【例】求12345。 最原始方法: 步驟1:先求12,得到結(jié)果2。 步驟2:將步驟1得到的乘積2乘以3,得到結(jié)果6。 步驟3:將6再乘以4,得24。 步驟4:將24再乘以5,得120。 這樣的算法雖然正確,但太繁。,求12345。 改進(jìn)的算法: S1:使t=1 S2:使i=2 S3:使ti,乘積仍然放在在變量t中,可表示為tit S4:使i的值+1,即i+1i S5:如果i5,返回重新執(zhí)行步驟S3以及其后的S4和S5;否則,算法結(jié)束。 如果計(jì)算100!
53、只需將S5:若i5改成i100即可。 如果該求1357911,算法也只需做很少的改動(dòng): S1: 1t S2: 3i S3: tit S4: i+2t S5:若i11,返回S3,否則,結(jié)束。 該算法不僅正確,而且是計(jì)算機(jī)較好的算法,因?yàn)橛?jì)算機(jī)是高速運(yùn)算的自動(dòng)機(jī)器,實(shí)現(xiàn)循環(huán)輕而易舉。思考:若將S5寫成:S5:若i11,返回S3;否則,結(jié)束。,簡(jiǎn)單算法舉例2,有50個(gè)學(xué)生,要求將他們之中成績(jī)?cè)?0分以上者打印出來。 如果,n表示學(xué)生學(xué)號(hào),ni表示第i個(gè)學(xué)生學(xué)號(hào);g表示學(xué)生成績(jī),gi表示第i個(gè)學(xué)生成績(jī); 則算法可表示如下: S1: 1i S2:如果gi80,則打印ni和gi,否則不打印 S3: i+1
54、i S4:若i50,返回S2,否則,結(jié)束。,簡(jiǎn)單算法舉例3,判定2000-2500年中的每一年是否閏年,將結(jié)果輸出。 潤(rùn)年的條件:1)能被4整除,但不能被100整除的年份;2)能被100整除,又能被400整除的年份; 設(shè)y為被檢測(cè)的年份,則算法可表示如下: S1: 2000y S2:若y不能被4整除,則輸出y“不是閏年”,然后轉(zhuǎn)到S6 S3:若y能被4整除,不能被100整除,則輸出y“是閏年”,然后轉(zhuǎn)到S6 S4:若y能被100整除,又能被400整除,輸出y“是閏年”否則輸出y“不是閏年”,然后轉(zhuǎn)到S6 S5:輸出y“不是閏年”。 S6:y+1y S7:當(dāng)y2500時(shí),返回S2繼續(xù)執(zhí)行,否則,
55、結(jié)束。,簡(jiǎn)單算法舉例4,在丁巨算法中有一道題:“今有雞兔一百,共足二百七十二只,只云雞足二,兔足四,問二色各幾何?” 所附解法:“置共一百,以四乘之,得四百,與總足相減,余一百二十八,折半得雞數(shù)。反減得兔。倍一百得二百,減總足,余七十二,折半得兔。反減得雞,亦通?!?以上解法講了兩種算法。 算法1: s1,用100乘以4得400; s2,用s1求得的結(jié)果400減去總足數(shù)272得128; s3,用s2求得的結(jié)果128除以2就得雞的只數(shù)64; s4,再用100減去上步求得的雞的只數(shù)64得36,即為兔的只數(shù)。 算法2: s1,用100乘以2得200; s2,用總足數(shù)272減去s1求得的結(jié)果200得7
56、2; s3,用s2求得的結(jié)果72除以2就得兔的只數(shù)36; s4,再用100減去上步求得的兔的只數(shù)36得64,即為兔的只數(shù)。,簡(jiǎn)單算法舉例4,算法描述示例3:已知雞兔同籠,總頭數(shù)為H,總腳數(shù)為F,求雞兔各有多少只? 問題分析 根據(jù)已知的條件,設(shè)雞為X只,兔為Y只,可以列出如下關(guān)方程組: 解該方程組,有:,簡(jiǎn)單算法舉例5,從鍵盤中輸入100個(gè)整數(shù),對(duì)其中的正整數(shù)進(jìn)行累加,最后輸出結(jié)果。 設(shè)x為從鍵盤輸入的整數(shù),如果x為正整數(shù),則將其累加。 算法描述(自然語言) S1:輸入一個(gè)數(shù)x; S2:如果x 0,累加它; S3:如果100個(gè)數(shù)沒有輸入完,轉(zhuǎn)步驟(1); S4:輸入完100個(gè)數(shù)后,輸出累加和。,
57、算法描述 (流程圖),開始,輸入一個(gè)數(shù)x,x0,累加,輸入完100個(gè)數(shù),輸出累加和,結(jié)束,起止框,處理框,判斷框,流向線,Y,Y,N,N,算法描述(N-S流程圖),處理,判斷,重復(fù),處理,處理,處理,算法的C語句實(shí)現(xiàn),void main( ) int x; /* 存放輸入數(shù)的單元 */ int count; /* 存放輸入個(gè)數(shù)的單元 */ int sum; /* 存放累加和的單元 */ count = 0; sum = 0; /* 工作單元初值 */ do scanf (“%d” , /* 輸出累加和 */ ,準(zhǔn)備工作,算法步驟,1.5.1 算法基本概念及算法描述,算法必須同時(shí)具有以下5個(gè)特征
58、: (1)有窮性。一個(gè)算法必須能夠在算法所涉及的每一種情況下,都能在執(zhí)行有窮步操作之后結(jié)束。 (2)確定性。算法的每一步操作,其順序和內(nèi)容都必須精確地惟一確定,不能有任何的歧義性。 (3)可執(zhí)行性。算法所描述的每一步操作都必須是可行的,即必須是可以付諸實(shí)施并能夠具體實(shí)現(xiàn)的基本操作。 (4)有0個(gè)或多個(gè)輸入。所謂輸入是指在算法開始執(zhí)行之前,對(duì)算法中的輸入變量所給的初始值。 (5)有一個(gè)或多個(gè)輸出。一個(gè)算法的目的就是為了求解。沒有輸出,這個(gè)算法也就沒有意義了。一個(gè)或多個(gè)輸出是對(duì)輸入數(shù)據(jù)加工后的結(jié)果的反映。,1.5.1 算法基本概念及算法描述,2算法的描述方法,(1)順序結(jié)構(gòu) (2)選擇(分支)結(jié)構(gòu) (3)循環(huán)結(jié)構(gòu),1.5.2 C語句概述,語句按其功能可以分為兩大類:用于描述計(jì)算機(jī)操作運(yùn)算的操作運(yùn)算表達(dá)式語句和控制操作的執(zhí)行順序的程序流程控制語句。 表達(dá)式語句 賦值語句 賦值語句由賦值表達(dá)式接一個(gè)分號(hào)組成。 例如y=x+1; 函數(shù)調(diào)用語句 函數(shù)調(diào)用語句由函數(shù)調(diào)用表達(dá)式后接一個(gè)分號(hào)組成。 例如printf(“Hello World!n”); 空語句 空語句只由一個(gè)分號(hào)組成,它不進(jìn)行任何操作
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 施工現(xiàn)場(chǎng)氣象監(jiān)測(cè)方案
- 2026年西北民族大學(xué)專任教師招聘50人筆試參考題庫(kù)及答案解析
- 2026甘肅天水市科技館志愿者招募考試參考試題及答案解析
- 2026年第五師八十八團(tuán)生態(tài)護(hù)林員招聘(15人)筆試參考題庫(kù)及答案解析
- 新時(shí)期建筑造價(jià)的動(dòng)態(tài)管理與控制研究
- 2026浙江省人民醫(yī)院轉(zhuǎn)化醫(yī)學(xué)中心招聘1人考試備考題庫(kù)及答案解析
- 2026上海聯(lián)勸公益基金會(huì)招聘考試備考題庫(kù)及答案解析
- 2026年湖南郵電職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)筆試參考題庫(kù)帶答案解析
- 未來五年足浴服務(wù)企業(yè)縣域市場(chǎng)拓展與下沉戰(zhàn)略分析研究報(bào)告
- 人工智能在信貸評(píng)估中的作用
- T-CDLDSA 09-2025 健身龍舞彩帶龍 龍舞華夏推廣套路技術(shù)規(guī)范
- 部編版初三化學(xué)上冊(cè)期末真題試題含解析及答案
- GB/T 19566-2025旱地糖料甘蔗高產(chǎn)栽培技術(shù)規(guī)程
- 去極端化條例解讀課件
- 光纖收發(fā)器培訓(xùn)
- 汽車減震器課件
- 水上拋石應(yīng)急預(yù)案
- 蘇州大學(xué)介紹
- 招標(biāo)公司勞動(dòng)合同范本
- 酒店消防安全應(yīng)急預(yù)案范本
- 輻射與安全培訓(xùn)北京課件
評(píng)論
0/150
提交評(píng)論