C語(yǔ)言完整版(精華)_第1頁(yè)
C語(yǔ)言完整版(精華)_第2頁(yè)
C語(yǔ)言完整版(精華)_第3頁(yè)
C語(yǔ)言完整版(精華)_第4頁(yè)
C語(yǔ)言完整版(精華)_第5頁(yè)
已閱讀5頁(yè),還剩480頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1,計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)(C語(yǔ)言),2,1. 課堂要求很嚴(yán)格。 2. 多聽(tīng),適時(shí)做筆記。 3. 上課不能講閑話。 4. 課后認(rèn)真完成作業(yè)、實(shí)驗(yàn)報(bào)告。 5. 有問(wèn)題,及時(shí)與老師聯(lián)系。,教 學(xué) 要 求,3,選用教材與參考書(shū),主教科書(shū) 顧治華、陳天煌等 C語(yǔ)言程序設(shè)計(jì) 機(jī)械工業(yè)出版社 2007.2 參考教材 顧治華、陳天煌等C語(yǔ)言程序設(shè)計(jì) 實(shí)驗(yàn)指導(dǎo) 機(jī)械工業(yè)出版社 2007.2 參考書(shū) 譚浩強(qiáng) C語(yǔ)言程序設(shè)計(jì) 清華大學(xué)出版社,4,課程內(nèi)容,第一章 C語(yǔ)言程序設(shè)計(jì)概述 第二章 算法及算法設(shè)計(jì)簡(jiǎn)介 第三章 數(shù)據(jù)描述與基本操作 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì) 第五章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 第六章 數(shù)組與指針 第七章

2、函數(shù)與模塊化程序設(shè)計(jì)方法,5,第一章 語(yǔ)言程序設(shè)計(jì)概述,6,1.1 程序設(shè)計(jì)的概念 1.2 語(yǔ)言的產(chǎn)生及發(fā)展 1.3 簡(jiǎn)單程序介紹 1.4 C程序的上機(jī)步驟 1.5 C語(yǔ)言的基本語(yǔ)法和基本結(jié)構(gòu) 1.6 本章要點(diǎn)小結(jié),7,1.1 程序設(shè)計(jì)的概念,1.1.1 程序設(shè)計(jì)語(yǔ)言 1.1.2 程序設(shè)計(jì)的概念,8,計(jì)算機(jī),計(jì)算機(jī)是用來(lái)延伸人的能力的工具,需要人來(lái)駕馭 我們的職責(zé)是讓非計(jì)算機(jī)專業(yè)的人更容易駕馭它 完成這一目標(biāo)的主要手段之一就是“編程(Programming)”,9,計(jì)算機(jī)基本工作過(guò)程,整個(gè)過(guò)程的執(zhí)行者是硬件,但硬件是受軟件控制的 編程,就是編寫(xiě)軟件,使硬件按照人的意圖工作,10,計(jì)算機(jī)基本工作

3、過(guò)程,源程序 和輸入數(shù)據(jù),輸出結(jié)果,取出數(shù)據(jù),存入數(shù)據(jù),操作命令,存取命令,取出 程序指令,輸入輸出命令,計(jì)算結(jié)果,CPU,“馮諾依曼機(jī)”結(jié)構(gòu),大腦,眼/耳/口,11,軟件的形成,軟件(Software)的形成 程序員(Programmer)編寫(xiě)程序源代碼(Source Code) 編譯器(Compiler)把源代碼轉(zhuǎn)換為可被計(jì)算機(jī)理解的機(jī)器代碼(Machine Code) 并把機(jī)器代碼以可執(zhí)行文件(Executable File)的形式保存在磁盤上,12,機(jī)器語(yǔ)言,匯編語(yǔ)言,高級(jí)語(yǔ)言,面向過(guò)程,面向?qū)ο?CPU指令系統(tǒng),由0、1序列構(gòu)成的指令碼組成 如:10000000 加 10010000

4、 減,用助記符號(hào)描述的指令系統(tǒng) 如 ADD A, B,面向機(jī)器的語(yǔ)言,程序設(shè)計(jì)是數(shù)據(jù)被加工的過(guò)程,客觀世界可以分類,對(duì)象是類的實(shí)例 對(duì)象是數(shù)據(jù)和方法的封裝 對(duì)象間通過(guò)發(fā)送和接受消息發(fā)生聯(lián)系,程序設(shè)計(jì)關(guān)鍵是定義類,并由類派生對(duì)象,1.1.1 程序設(shè)計(jì)語(yǔ)言,13,程序設(shè)計(jì)語(yǔ)言的故事,計(jì)算機(jī)為什么用二進(jìn)制呢? 為什么不用我們?nèi)粘J煜さ氖M(jìn)制呢? 二進(jìn)制在在電器元件中容易實(shí)現(xiàn) 計(jì)算機(jī)進(jìn)行二進(jìn)制運(yùn)算比進(jìn)行十進(jìn)制運(yùn)算要簡(jiǎn)單得多,14,程序設(shè)計(jì)語(yǔ)言的故事,機(jī)器語(yǔ)言編寫(xiě)的1+1程序 匯編語(yǔ)言(Assemble Language)編寫(xiě)的1+1程序,10111000 00000001 00000000 00000

5、101 00000001 00000000,MOV AX, 1 ADD AX, 1,15,程序設(shè)計(jì)語(yǔ)言的故事,BASIC語(yǔ)言編寫(xiě)的1+1程序 C語(yǔ)言編寫(xiě)的1+1程序,PRINT 1+1,#include main() printf(%dn, 1+1); ,16,Ada,ALGOL60,ALGOL68,Pascal,Modula-2,CPL,BCPL,B,C,C+,Java,LISP,PROLOG,COBOL,FORTRAN77,FORTRAN,PL/1,Simula 67,Smalltalk 80,BASIC,ANSI-BASIC,QBASIC,VB,FORTRAN90,17,1.1.2 程序

6、設(shè)計(jì)的概念,程序設(shè)計(jì)就是用計(jì)算機(jī)語(yǔ)言來(lái)編寫(xiě)程序的過(guò)程。 什么是程序?著名計(jì)算機(jī)科學(xué)家沃思提出有名的公式: 算法+數(shù)據(jù)結(jié)構(gòu)=程序,18,算法即問(wèn)題的求解過(guò)程、計(jì)算機(jī)的工作步驟。 數(shù)據(jù)結(jié)構(gòu)即對(duì)參與運(yùn)算的數(shù)據(jù)怎樣進(jìn)行合理的組織、安排,以提高程序運(yùn)行的效率和求解的精確性。,程序的兩大要素:數(shù)據(jù)結(jié)構(gòu)、算法,19,1.2 C語(yǔ)言的產(chǎn)生和發(fā)展,1.2.1 C語(yǔ)言的產(chǎn)生 1.2.2 C語(yǔ)言的發(fā)展 1.2.3 C語(yǔ)言的特點(diǎn),20,1.2.1 C 語(yǔ)言的產(chǎn)生,一切從一個(gè)叫“Space Travel”的電子游戲開(kāi)始的 Ken Thompson為了讓他的游戲能在PDP-7上運(yùn)行,用匯編語(yǔ)言給PDP-7寫(xiě)了一個(gè)操作系統(tǒng)

7、UNIX 匯編太不好用了,Thompson需要高級(jí)語(yǔ)言 試驗(yàn)了一些高級(jí)語(yǔ)言,包括Fortran,都不理想 他在BCPL基礎(chǔ)上,自己設(shè)計(jì)了一個(gè)B語(yǔ)言 UNIX開(kāi)始發(fā)展,B也不夠用了 Dennis Ritchie加入,把B改造成C 開(kāi)始用C重寫(xiě)UNIX,21,1.2.2 C 語(yǔ)言的發(fā)展,C語(yǔ)言發(fā)展過(guò)程 產(chǎn)生過(guò)程 時(shí)間:19721973 地點(diǎn):美國(guó)貝爾實(shí)驗(yàn)室 目的:UNIX操作系統(tǒng) 設(shè)計(jì)人: Ken.Thompson和Dennis.M.Ritchie C標(biāo)準(zhǔn) 標(biāo)準(zhǔn)C: K ,輸出: Hello,World!,32,/* example1.2 calculate the sum of a and b*

8、/ #include /* This is the main program */ main() int a,b,sum; a=10; b=24; sum=add(a,b); printf(”sum= %dn,sum); /* This function calculates the sum of x and y */ int add(int x,int y) int z; z=x+y; return(z); ,運(yùn)行結(jié)果: sum=34,33,格式特點(diǎn) 習(xí)慣用小寫(xiě)字母,大小寫(xiě)敏感 不使用行號(hào),無(wú)程序行概念 可使用空行和空格 常用鋸齒形書(shū)寫(xiě)格式,main( ) . . . . . . . ,ma

9、in( ) int i , j , sum; sum=0; for(i=1; i10;i+) for(j=1;j10;j+) sum+=i*j ; printf(“%dn”,sum); ,優(yōu)秀程序員的素質(zhì)之一: 使用TAB縮進(jìn) 對(duì)齊 有足夠的注釋 有合適的空行,34,結(jié)構(gòu)特點(diǎn) 函數(shù)與主函數(shù) 程序由一個(gè)或多個(gè)函數(shù)組成 必須有且只能有一個(gè)主函數(shù)main() 程序執(zhí)行從main開(kāi)始,在main中結(jié)束,其它函數(shù)通過(guò)嵌套調(diào)用得以執(zhí)行。 程序語(yǔ)句 C程序由語(yǔ)句組成 用“;”作為語(yǔ)句終止符 注釋 /* */為注釋,不能嵌套 不產(chǎn)生編譯代碼,例: /*This is the main /* of exampl

10、e1.1*/ */,編譯預(yù)處理命令,函數(shù)首部: 包括函數(shù)名、函數(shù)類型、函數(shù)參數(shù)名、參數(shù)類型。 函數(shù)體:聲明部分,執(zhí)行部分。,35,1.4 C程序的上機(jī)步驟,36,程序代碼的錄入, 生成源程序*.c,語(yǔ)法分析查錯(cuò),翻譯 生成目標(biāo)程序*.obj,與其它目標(biāo)程序或庫(kù) 鏈接裝配,生成可執(zhí)行 程序*.exe,開(kāi)始,編輯,編譯,有錯(cuò)?,執(zhí)行,連接,結(jié)果 正確,結(jié)束,可執(zhí)行 目標(biāo)程序 f.exe,源程序 f.c,目標(biāo)程序 f.obj,庫(kù)函數(shù) 和其他目 標(biāo)程序,Yes,No,Yes,No,37,1.5 C語(yǔ)言的基本語(yǔ)法和結(jié)構(gòu),1.5.1 C語(yǔ)言的基本語(yǔ)法 1.5.2 C語(yǔ)言的基本結(jié)構(gòu),38,1.5.1 C語(yǔ)言

11、的基本語(yǔ)法,標(biāo)識(shí)符 關(guān)鍵字 運(yùn)算符 分隔符 常量 注釋符 字符集,39,標(biāo)識(shí)符,常量、變量、語(yǔ)句標(biāo)號(hào)以及自定義函數(shù)的名稱 只能是字母、數(shù)字和下劃線組成的字符串,第一個(gè)字符必須是字母或下劃線 標(biāo)準(zhǔn)C不限制標(biāo)識(shí)符長(zhǎng)度,但一般不超過(guò)8字符 標(biāo)識(shí)符大小寫(xiě)有區(qū)別 標(biāo)識(shí)符名最好能“顧名思義”,40,32個(gè)關(guān)鍵字:(由系統(tǒng)定義,不能重作其它定義) auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeo

12、f static struct switch typedef unsigned union void volatile while,41,9種控制語(yǔ)句: if( )else switch case for( ) while( ) dowhile( ) continue break goto return,42,34種運(yùn)算符: 算術(shù)運(yùn)算符:+ - * / % + - 關(guān)系運(yùn)算符: = != 邏輯運(yùn)算符:! for(i=0;i=80) ,fc1.c,2.1 算法的概念 2.2 算法的特性 2.3 算法的表示 2.4 結(jié)構(gòu)化程序設(shè)計(jì)方法,2.4 結(jié)構(gòu)化程序設(shè)計(jì)方法簡(jiǎn)介,荷蘭學(xué)者E.W.dijkctr

13、a提出了結(jié)構(gòu)化程序設(shè)計(jì)(structured programming)的理論,成為70年代中期至90年代初的程序設(shè)計(jì)主流。結(jié)構(gòu)化程序設(shè)計(jì)方法提出了一些大家都要遵循的原則,這些原則歸納為32個(gè)字:,自頂向下,逐步細(xì)化。 模塊設(shè)計(jì),結(jié)構(gòu)編碼。 清晰第一,效率第二。 書(shū)寫(xiě)規(guī)范,縮進(jìn)格式。,順序、分支和循環(huán)三種基本結(jié)構(gòu)的共同特點(diǎn):,(1)只有一個(gè)入口。,(2)只有一個(gè)出口。,(3)結(jié)構(gòu)內(nèi)的每一部分都有機(jī)會(huì)被執(zhí)行到。也就是說(shuō),對(duì)每一個(gè)框來(lái)說(shuō),都有從入口到出口的路徑通過(guò)它。,(4)結(jié)構(gòu)內(nèi)不存在“死循環(huán)”(無(wú)終止的循環(huán))。,結(jié)構(gòu)化程序,所謂結(jié)構(gòu)化程序,就是僅僅使用順序、選擇、 循環(huán)等三種基本結(jié)構(gòu)所構(gòu)造的程序

14、。,結(jié)構(gòu)化程序設(shè)計(jì)方法,結(jié)構(gòu)化程序設(shè)計(jì)方法的基本思想是,把一個(gè)復(fù)雜 問(wèn)題的求解過(guò)程分階段進(jìn)行。每個(gè)階段的問(wèn)題都 控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。,2.4 本章要點(diǎn)小結(jié),算法的概念 算法的特性 算法的表示 結(jié)構(gòu)化程序設(shè)計(jì)方法,第三章 數(shù)據(jù)描述與 基本操作,89,3.1 基本數(shù)據(jù)類型 3.2 運(yùn)算符和表達(dá)式 3.3 輸入輸出操作,90,3.1 基本數(shù)據(jù)類型,3.1.1 C語(yǔ)言的數(shù)據(jù)類型 3.1.2 常量和變量 3.1.3 數(shù)據(jù)類型轉(zhuǎn)換,91,3.1.1 C語(yǔ)言的數(shù)據(jù)類型,(一) 什么是數(shù)據(jù)類型? (二) C語(yǔ)言的數(shù)據(jù)類型有哪些?,92,(一) 什么是數(shù)據(jù)類型?,數(shù)據(jù)結(jié)構(gòu)+算法=程序,C語(yǔ)言中以

15、“數(shù)據(jù)類型”形式存在,對(duì)數(shù)據(jù)的描述,對(duì)操作的描述,93,數(shù)據(jù)類型,基本類型,整型(有符號(hào)、無(wú)符號(hào)) 字符型 實(shí)型(浮點(diǎn)型) 枚舉類型,構(gòu)造類型,數(shù)組類型 結(jié)構(gòu)體類型 共用體類型,指針類型,空類型,單精度型 雙精度型,在程序中對(duì)用到的 所有數(shù)據(jù)都必須指 定其數(shù)據(jù)類型.,?,不同類型的數(shù)據(jù),所占 內(nèi)存的字節(jié)數(shù)不同, 對(duì) 應(yīng)的操作也不相同。,(二) C的數(shù)據(jù)類型,94,整型數(shù)據(jù),1. 整型數(shù)據(jù)的分類 最基本的整型類型 基本整型(int型):占2個(gè)或4個(gè)字節(jié)(32位編譯系統(tǒng)) 短整型(short int):VC+6.0中占2個(gè)字節(jié) 長(zhǎng)整型(long int):VC+6.0中占4個(gè)字節(jié) 雙長(zhǎng)整型(lon

16、g long int):C99新增的,64位占8個(gè)字節(jié),VC+6.0中定義為 _int64,95,2. 整型變量的符號(hào)屬性 整型變量的值的范圍包括負(fù)數(shù)到正數(shù) 可以將變量定義為“無(wú)符號(hào)”類型 擴(kuò)充的整形類型: 有符號(hào)基本整型 signed int; 無(wú)符號(hào)基本整型 unsigned int; 有符號(hào)短整型 signed short int; 無(wú)符號(hào)短整型 unsigned short int; 有符號(hào)長(zhǎng)整型 signed long int; 無(wú)符號(hào)長(zhǎng)整型 unsigned long int;,整型數(shù)據(jù),96,字符型數(shù)據(jù),字符是按其代碼(整數(shù))形式存儲(chǔ)的 C99把字符型數(shù)據(jù)作為整數(shù)類型的一種 字符

17、型數(shù)據(jù)在使用上有自己的特點(diǎn),97,1.字符與字符代碼 大多數(shù)系統(tǒng)采用ASCII字符集 字母:A Z,a z 數(shù)字:09 專門符號(hào):29個(gè):! ” # 系統(tǒng)把“?”的ASCII代碼63賦給變量c printf(“%d %cn”,c,c); 輸出結(jié)果是: 63 ?,字符型數(shù)據(jù),100,浮點(diǎn)型數(shù)據(jù),浮點(diǎn)型數(shù)據(jù)是用來(lái)表示具有小數(shù)點(diǎn)的實(shí)數(shù) float型(單精度浮點(diǎn)型) 編譯系統(tǒng)為float型變量分配4個(gè)字節(jié) 數(shù)值以規(guī)范化的二進(jìn)制數(shù)指數(shù)形式存放,101,浮點(diǎn)型數(shù)據(jù)是用來(lái)表示具有小數(shù)點(diǎn)的實(shí)數(shù) float型(單精度浮點(diǎn)型) double型(雙精度浮點(diǎn)型) 編譯系統(tǒng)為double型變量分配8個(gè)字節(jié) 15位有效數(shù)

18、字,浮點(diǎn)型數(shù)據(jù),102,幾種基本數(shù)據(jù)類型,整型,字符型,實(shí)型,有,無(wú),說(shuō)明:數(shù)據(jù)類型所占字節(jié)數(shù)隨編譯器不同而不同,上表以VC+ 6.0為例:,103,舉例:數(shù)據(jù)溢出(Overflow)的危害,一臺(tái)安裝了Windows 95/98的機(jī)器,如果連續(xù) 運(yùn)行49.7天,可能死機(jī) 原因: Windows自啟動(dòng)時(shí)刻起,有一個(gè)計(jì)數(shù)器,記錄系統(tǒng)已經(jīng)運(yùn)行了多少毫秒。 這個(gè)計(jì)數(shù)器個(gè)unsigned long unsigned long的最大值:4294967295 一天有24*60*60*1000 = 86400000毫秒 4294967295 / 86400000 = 49.71026961805 當(dāng)49.7天

19、的時(shí)候,此計(jì)數(shù)器會(huì)溢出,引起死機(jī),104,(一) 常 量 (二) 變 量,3.1.2 常量與變量,105,預(yù)備知識(shí):bit,Byte,Word,bit, 位 Byte, 字節(jié) 1 B = 8 b Word, 字 1 W=2 B Kilobyte(KB), 1 KB = 1,024 B Megabyte(MB), 1 MB = 1,024 KB Gigabyte(GB), 1 GB = 1,024 MB Terabyte(TB) 1 TB = 1,024 GB,106,一個(gè)字節(jié)有多大? 可以表示數(shù)字0255 保存一個(gè)字符(英文字母、數(shù)字、符號(hào)),ASCII編碼 兩個(gè)字節(jié)保存一個(gè)漢字,107,預(yù)備

20、知識(shí):二進(jìn)制,世界上有(10)2種人,1種人懂二進(jìn)制,1種人不懂二進(jìn)制 一個(gè)位有多大? 只能是“0”或者“1”,這叫二進(jìn)制 二進(jìn)制詮釋了計(jì)算機(jī)的哲學(xué) 種類眾多的復(fù)雜事物都是由若干種簡(jiǎn)單事物構(gòu)成,108,1.常量:在程序運(yùn)行過(guò)程中,其值不能被改變的量 整型常量:如1000,12345,0,-345 實(shí)型常量 十進(jìn)制小數(shù)形式:如0.34 -56.79 0.0 指數(shù)形式:如12.34e3 (代表12.34103) 字符常量:如? 轉(zhuǎn)義字符:如n 字符串常量:如”boy” 符號(hào)常量:#define PI 3.1416,3.1.2 常量與變量,109,字符與字符串的區(qū)別有哪些?,定界符不同:字符常量使用

21、單引號(hào),而字符串常量使用雙引號(hào); 長(zhǎng)度不同:字符常量的長(zhǎng)度固定為1,而字符串常量的長(zhǎng)度,可以是0,也可以是某個(gè)整數(shù); 存儲(chǔ)要求不同:字符常量存儲(chǔ)的是字符的ASCII碼值,而字符串常量,除了要存儲(chǔ)有效的字符外,還要存儲(chǔ)一個(gè)結(jié)束標(biāo)志0。,110,2. 變量:在程序運(yùn)行期間,變量的值是可以改變的 變量必須先定義,后使用 定義變量時(shí)指定該變量的名字和類型 變量名和變量值是兩個(gè)不同的概念 變量名實(shí)際上是以一個(gè)名字代表的一個(gè)存儲(chǔ)地址 從變量中取值,實(shí)際上是通過(guò)變量名找到相應(yīng)的內(nèi)存地址,從該存儲(chǔ)單元中讀取數(shù)據(jù),3.1.2 常量與變量,111,方式: 1、定義變量的同時(shí)賦初值(也叫變量初始化)。 格式: 數(shù)據(jù)

22、類型 變量名=初值, 變量名2=初值2; 2、通過(guò)一個(gè)賦值語(yǔ)句給變量賦初值。 格式 : 變量名=初值;,變量賦初值,出現(xiàn)在函數(shù)體 的聲明部分,出現(xiàn)在函數(shù)體 的執(zhí)行部分,int a,b=3;,int a,b; b=3;,112,1、程序中用到的變量必須“先定義(declare),后使用”。 2、C語(yǔ)言的關(guān)鍵字不能用作變量名。 3、C語(yǔ)言對(duì)英文字母的大小寫(xiě)敏感,即同一字母的大小寫(xiě),被認(rèn)為是兩個(gè)不同的字符。 4、定義變量時(shí),給幾個(gè)變量賦相同的初值, 應(yīng)寫(xiě)成 : int a=3,b=3,c=3; 不能寫(xiě)成: int a=b=c=3; 5、給變量賦值時(shí),正常情況下應(yīng)給變量賦相同類型的數(shù)據(jù)。若給變量賦與其

23、類型不同的數(shù)據(jù)時(shí),需進(jìn)行類型轉(zhuǎn)換。,關(guān)于變量以及變量賦初值的幾點(diǎn)說(shuō)明,113,變量舉例,include void main() int student,age; int if=adrress=1; float score=90; stadent=2; Age=20.7; printf(%d %d %d %f,if,student,age,score); ,本程序中有幾處錯(cuò)誤?,undeclared identifier,114,變量使用要注意長(zhǎng)度,不要對(duì)變量所占的內(nèi)存空間字節(jié)數(shù)想當(dāng)然 用sizeof獲得變量或者數(shù)據(jù)類型的長(zhǎng)度 程序在Turbo C2.0和Visual C+6.0下的運(yùn)行結(jié)果不同

24、,注意!,#include void main() printf(Data type Number of bytesn); printf(- -n); printf(char %dn,sizeof(char); printf(int %dn,sizeof(int); printf(short int %dn,sizeof(short); printf(long int %dn,sizeof(long); printf(float %dn,sizeof(float); printf(double %dn,sizeof(double); ,115,3.1.3 數(shù)據(jù)類型轉(zhuǎn)換,(一) 隱式轉(zhuǎn)換(自動(dòng)轉(zhuǎn)

25、換) (二) 顯式轉(zhuǎn)換(強(qiáng)制轉(zhuǎn)換),116,(一)隱式轉(zhuǎn)換(自動(dòng)轉(zhuǎn)換),轉(zhuǎn)換發(fā)生條件,運(yùn)算轉(zhuǎn)換-不同類型數(shù)據(jù)混合運(yùn)算時(shí) 賦值轉(zhuǎn)換-把一個(gè)值賦給與其類型不同的 變量時(shí) 輸出轉(zhuǎn)換-輸出時(shí)轉(zhuǎn)換成指定的輸出格式 函數(shù)調(diào)用轉(zhuǎn)換-實(shí)參與形參類型不一致時(shí)轉(zhuǎn)換,先轉(zhuǎn)換、后運(yùn)算,117,隱式轉(zhuǎn)換(自動(dòng)轉(zhuǎn)換),同種數(shù)據(jù)類型的運(yùn)算結(jié)果,還是該類型 不同種數(shù)據(jù)類型的運(yùn)算結(jié)果,是兩種類型中取值范圍更大的那種 long double double float = long = int =short char 把數(shù)據(jù)賦值給另外一種類型變量也會(huì)發(fā)生自動(dòng)類型轉(zhuǎn)換 從小到大,順利轉(zhuǎn)換 從大到小,可能丟失信息(好的編譯器會(huì)發(fā)出警告

26、),見(jiàn)教材28頁(yè),118,隱式轉(zhuǎn)換(自動(dòng)轉(zhuǎn)換),不同類型數(shù)據(jù)間的混合運(yùn)算: +、-、*、/ 運(yùn)算的兩個(gè)數(shù)中有一個(gè)數(shù)為float或double型,結(jié)果是double型。系統(tǒng)將float型數(shù)據(jù)都先轉(zhuǎn)換為double型,然后進(jìn)行運(yùn)算; (2) 如果int型與float或double型數(shù)據(jù)進(jìn)行運(yùn)算,先把int型和float型數(shù)據(jù)轉(zhuǎn)換為double型,然后進(jìn)行運(yùn)算,結(jié)果是double型; (3)字符型數(shù)據(jù)與整型數(shù)據(jù)進(jìn)行運(yùn)算,就是把字符的ASCII代碼與整型數(shù)據(jù)進(jìn)行運(yùn)算.,119,int i; float f; double d; long e; i=2; f=2.5; d=3.9; e=3; ,10+a

27、+i*f-d/e,107,5.0,1.3,112. 0,110. 7,int,double,double,double,double,思考:根據(jù)已知變量定義及賦值語(yǔ)句,計(jì)算以下表達(dá)式的值,并說(shuō)明每一步所得結(jié)果的數(shù)據(jù)類型。,120,(二)顯式轉(zhuǎn)換(強(qiáng)制轉(zhuǎn)換),一般形式,(要轉(zhuǎn)換成的數(shù)據(jù)類型)(被轉(zhuǎn)換的表達(dá)式) 注:當(dāng)被轉(zhuǎn)換的表達(dá)式是一個(gè)簡(jiǎn)單表達(dá)式時(shí),外面的一對(duì)圓括號(hào)可以缺省。,舉例,float x,y; x=2.3 ; y=4.5; (int)(x+y) / 6 (int) (int)x+y / 6.5 (double),說(shuō)明,強(qiáng)制轉(zhuǎn)換得到的是所需類型的中間變量,原變量或表達(dá)式的類型不變。,12

28、1,#include void main() float x; int i; x=3.6; i=(int)x; printf(x=%f,i=%d,x,i); ,思考:以下程序的輸出結(jié)果是什么?,x=3.600000,i=3,程序運(yùn)行結(jié)果:,結(jié)論:較高類型向較低類型轉(zhuǎn)換時(shí)可能發(fā)生精度損失問(wèn)題,122,舉例:已知三角形的邊長(zhǎng)a、b、c,求三角形周長(zhǎng)的一半。,#include void main() float a,b,c,s; a=3;b=4;c=5; s=1/2 * (a+b+c); printf(s=%8.2f,s); ,s= 0.00,程序運(yùn)行結(jié)果:,?,s= 6.00,程序運(yùn)行結(jié)果:,改為

29、:1.0/2 (1/2.0) 或 (float)1/2 (1/(float)2),123,C運(yùn)算符簡(jiǎn)介 算術(shù)運(yùn)算符和算術(shù)表達(dá)式 賦值運(yùn)算符和賦值表達(dá)式 逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式 關(guān)系運(yùn)算符和表達(dá)式 邏輯運(yùn)算符和表達(dá)式 條件運(yùn)算符與表達(dá)式,3.2 運(yùn)算符與表達(dá)式,124,詳見(jiàn)254頁(yè)!,C運(yùn)算符簡(jiǎn)介,125,運(yùn)算符必須有運(yùn)算對(duì)象,分為3類: 運(yùn)算對(duì)象是一個(gè)的,則稱為單目運(yùn)算 運(yùn)算對(duì)象是兩個(gè)的,則稱為雙目運(yùn)算 運(yùn)算對(duì)象是三個(gè)的,則稱為三目運(yùn)算,C運(yùn)算符簡(jiǎn)介,126,基本算術(shù)運(yùn)算符,+ - * / %,說(shuō)明,例: 5/3=1 -5/3=-1,模運(yùn)算符或求余運(yùn)算符,算術(shù)表達(dá)式,用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算對(duì)

30、象(也稱操作數(shù))連接起來(lái)的、符合C語(yǔ)法規(guī)則的式子。,優(yōu)先級(jí)和結(jié)合性,先乘除、后加減,有括號(hào)先算括號(hào)。 自左至右,常量、變量、函數(shù)等,說(shuō)明,兩個(gè)整數(shù)相除的結(jié)果為整數(shù),舍去小數(shù)部分。 當(dāng)商為負(fù)數(shù)時(shí),多采用“向零取整”的方法。,求余運(yùn)算的兩側(cè)均應(yīng)為整數(shù) 5%3=2,例: a*b/c-1.5+a,算術(shù)運(yùn)算符和算術(shù)表達(dá)式,如果一個(gè)運(yùn)算符兩側(cè)的數(shù)據(jù)類型不同,先自動(dòng)進(jìn)行類型轉(zhuǎn)換,使二者具有同一類型,然后進(jìn)行運(yùn)算。,127,格式: 前置:+i , -i (在使用i之前,使i的值加(減)1) 后置:i+ , i- (在使用i之后,使i的值加(減)1),自增、自減運(yùn)算符,作用:自增運(yùn)算符()使單個(gè)變量的值增1;

31、自減運(yùn)算符()使單個(gè)變量的值減1。,例,i=3; A) j=+i; j=i+; j=-i+;,i=i+1,i=i-1,? j,i,A) j=4 i=4 j=3 i=4 j=-3,+和-結(jié)合方向 是“自右至左”,128,(1) 自增、自減運(yùn)算是語(yǔ)言特有的,常用于循環(huán)語(yǔ)句中,使循環(huán)控 制變量加(或減),以及指針變量中,使指針指向下(或上)一個(gè)地址。 (2) 自增、自減運(yùn)算符,不能用于常量和表達(dá)式。 例如,5+、-(a+b)等都是非法的。 (3) +和-的結(jié)合方向?yàn)樽杂抑磷?。(P30) (4) 如果對(duì)一個(gè)變量的自增自減運(yùn)算,單獨(dú)構(gòu)成語(yǔ)句,而不是作為表達(dá)式的一部分時(shí),前置和后置運(yùn)算效果一樣,都是使變量

32、自加。 如i+;和 +i;是一樣的,都是使i加。 (5) 在表達(dá)式中,連續(xù)使用同一變量進(jìn)行自增或自減運(yùn)算時(shí),很容易出錯(cuò),所以最好避免這種用法。,說(shuō)明,129,賦值運(yùn)算符,簡(jiǎn)單賦值運(yùn)算符:= 復(fù)合賦值運(yùn)算符:+=, -=,*=,/=,%= ,簡(jiǎn)單賦值運(yùn)算符的一般形式為: 變量 = 表達(dá)式 它的作用是將一個(gè)表達(dá)式的值賦給一個(gè)變量。,復(fù)合賦值運(yùn)算的一般格式為: 變量 雙目運(yùn)算符 = 表達(dá)式 復(fù)合賦值運(yùn)算符 它等價(jià)于:變量 = 變量 雙目運(yùn)算符 (表達(dá)式)。只有當(dāng)表達(dá)式簡(jiǎn)化為一個(gè)變量或一個(gè)常數(shù)時(shí),兩邊的括號(hào)可以省略。,賦值運(yùn)算符和賦值表達(dá)式,130,賦值表達(dá)式,格式: 賦值表達(dá)式的值:被賦變量的值,類

33、型轉(zhuǎn)換,轉(zhuǎn)換條件:當(dāng)賦值運(yùn)算符兩側(cè)的數(shù)據(jù)類型不一致時(shí) 轉(zhuǎn)換原則:轉(zhuǎn)換為被賦值變量的類型。,131,注意: 將取值范圍小的類型轉(zhuǎn)為取值范圍大的類型是安全的 反之是不安全的 如果大類型的值在小類型能容納的范圍之內(nèi),則平安無(wú)事 但是,浮點(diǎn)數(shù)轉(zhuǎn)為整數(shù),會(huì)丟失小數(shù)部分,非四舍五入 反之,轉(zhuǎn)換后的結(jié)果必然是錯(cuò)誤的,具體結(jié)果與機(jī)器和實(shí)現(xiàn)方式有關(guān)。避免如此使用,例1,float a; int b; a=1.2; b=a*3;,? b,b=3,例2,a=b=5; a=7+(b=8),? a,b,a=5 ;b=5 a=15;b=8,自右而左 的結(jié)合性,132,算術(shù)自反賦值運(yùn)算符,(1) 運(yùn)算規(guī)則,對(duì)象數(shù),名稱,運(yùn)

34、算符,運(yùn)算規(guī)則,運(yùn)算對(duì)象,運(yùn)算結(jié)果,結(jié)合性,雙目,加賦值,減賦值,乘賦值,除賦值,模賦值,*,/ =,%=,a+=b相當(dāng)于 a=a+b,a=b相當(dāng)于 a=ab,a*=b相當(dāng)于 a=a*b,a/=b相當(dāng)于 a=a/b,a%=b相當(dāng)于 a=a%b,數(shù)值型,數(shù)值型,自 右 向 左,整型,整型,133,逗號(hào)運(yùn)算符,,,逗號(hào)表達(dá)式,表達(dá)式1,表達(dá)式2, ,表達(dá)式n,說(shuō)明,1、逗號(hào)表達(dá)式的求解過(guò)程為自左至右,依次計(jì)算各表達(dá)式的值,最后一個(gè)表達(dá)式的值即為整個(gè)逗號(hào)表達(dá)式的值; 2、逗號(hào)運(yùn)算符的優(yōu)先級(jí)最低。 3、使用逗號(hào)表達(dá)式的目的通常是想分別得到各個(gè)表達(dá)式的值,而并非一定要得到整個(gè)表達(dá)式的值。 4、常用于fo

35、r循環(huán)語(yǔ)句中,除此以外很少使用。,逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式,134,例1,a=3 a=(3*5,a*4),? a,a=12,例2,a=3 a=3*5,a*4,? a,a=15 表達(dá)式的值為60,135,關(guān)系運(yùn)算符及其優(yōu)先次序,關(guān)系運(yùn)算符: 用來(lái)對(duì)兩個(gè)數(shù)值進(jìn)行比較的比較運(yùn)算符 語(yǔ)言提供種關(guān)系運(yùn)算符: (小于) = (小于或等于) (大于) = (大于或等于) = (等于) != (不等于),優(yōu)先級(jí)相同 (高),優(yōu)先級(jí)相同 (低),136,關(guān)系、算術(shù)、賦值運(yùn)算符的優(yōu)先級(jí),關(guān)系運(yùn)算符及其優(yōu)先次序,137,ca+b 等效于 c(a+b) ab=c 等效于 (ab)=c a=bc 等效于 a=(bc),關(guān)

36、系運(yùn)算符及其優(yōu)先次序,138,關(guān)系表達(dá)式,關(guān)系表達(dá)式 用關(guān)系運(yùn)算符將兩個(gè)數(shù)值或數(shù)值表達(dá)式連接起來(lái)的式子 關(guān)系表達(dá)式的值是一個(gè)邏輯值,即“真”或“假” 在C的邏輯運(yùn)算中,以“”代表“真”,以“”代表“假”,139,關(guān)系運(yùn)算注意:,例 若a=0; b=0.5; x=0.3; 則 a=x=b的值為,0,例 5278在C中是允許的, 值為,0,例 a0 結(jié)果為 A100 結(jié)果為,1,0,140,關(guān)系運(yùn)算注意:,例 注意區(qū)分“=”與“=” int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);,例 應(yīng)避免

37、對(duì)實(shí)數(shù)作相等或不等的判斷 如 1.0/3.0*3.0=1.0 結(jié)果為,0,141,邏輯運(yùn)算符及其優(yōu)先次序,3種邏輯運(yùn)算符: else max=b;,max = (a b) ? a : b;,條件運(yùn)算符,150,條件運(yùn)算符和條件表達(dá)式,有一種if語(yǔ)句,當(dāng)被判別的表達(dá)式的值為“真”或“假” 時(shí),都執(zhí)行一個(gè)賦值語(yǔ)句且向同一個(gè)變量賦值 如:if (ab) max=a; else max=b;,max = (a b) ? a : b;,條件表達(dá)式,151,條件表達(dá)式的一般形式為 表達(dá)式?表達(dá)式: 表達(dá)式,條件運(yùn)算符和條件表達(dá)式,條件運(yùn)算符的執(zhí)行順序: 求解表達(dá)式1 若為非0(真)則求解表達(dá)式2,此時(shí)表達(dá)

38、式2的值就作為整個(gè)條件表達(dá)式的值 若表達(dá)式1的值為0(假),則求解表達(dá)式3,表達(dá)式3的值就是整個(gè)條件表達(dá)式的值,152,條件運(yùn)算符優(yōu)先于賦值運(yùn)算符 條件運(yùn)算符的結(jié)合方向?yàn)椤白杂抑磷蟆?以下為合法的使用方法: ab ? (max=a):(max=b); ab ? printf(“%d”,a): printf(“%d”,b);,條件運(yùn)算符和條件表達(dá)式,153,長(zhǎng)度運(yùn)算符,長(zhǎng)度運(yùn)算符優(yōu)先級(jí),和單目算術(shù)運(yùn)算符、單目邏輯運(yùn)算符、增1減1運(yùn)算符同級(jí)別 同級(jí)運(yùn)算符的結(jié)合性是自右向左的,154,設(shè)變量定義如下: int n; short s; unsigned long u3; float f; char c

39、;,則 size of(n)的值是4 size of(s)的值是2 size of(long)的值是4 size of(unsigned int)的值是2 size of(u3)的值是4 size of(f)的值是4 size of(double)的值是8 size of(c)的值是1,注意:上述結(jié)果是在32位機(jī)Visual C+ 6.0環(huán)境運(yùn)行的結(jié)果。,155,位運(yùn)算 C語(yǔ)言中提供的位運(yùn)算符: 、 、 ,格式聲明,167,1.printf函數(shù)的一般格式 printf(格式控制,輸出表列) 例如: printf(”i=%d,c=%cn”,i,c);,普通字符,用printf函數(shù)輸出數(shù)據(jù),168

40、,1.printf函數(shù)的一般格式 printf(格式控制,輸出表列) 例如: printf(”i=%d,c=%cn”,i,c);,可以是常量、變量或表達(dá)式,用printf函數(shù)輸出數(shù)據(jù),169,2. 常用格式字符 格式符。用來(lái)輸出一個(gè)有符號(hào)的十進(jìn)制整數(shù) 可以在格式聲明中指定輸出數(shù)據(jù)的域?qū)?printf(”%5d%5dn”,12,-345); %d輸出int型數(shù)據(jù) %ld輸出long型數(shù)據(jù),用printf函數(shù)輸出數(shù)據(jù),170,2. 常用格式字符 格式符。用來(lái)輸出一個(gè)字符 char ch=a; printf(”%c”,ch); 或 printf(”%5c”,ch);,輸出字符:a,用printf函數(shù)

41、輸出數(shù)據(jù),171,2. 常用格式字符 格式符。用來(lái)輸出一個(gè)字符串 printf(”%s”,”CHINA”); ,輸出字符串:CHINA,用printf函數(shù)輸出數(shù)據(jù),172,2. 常用格式字符 f格式符。用來(lái)輸出實(shí)數(shù),以小數(shù)形式輸出 不指定數(shù)據(jù)寬度和小數(shù)位數(shù),用%f 例: 用%f輸出實(shí)數(shù),只能得到位小數(shù)。 double a=1.0; printf(”%fn”,a/3);,用printf函數(shù)輸出數(shù)據(jù),173,2. 常用格式字符 f格式符。用來(lái)輸出實(shí)數(shù),以小數(shù)形式輸出 指定數(shù)據(jù)寬度和小數(shù)位數(shù)。用%m.nf printf(%20.15fn,1/3); printf(%.0fn”,10000/3.0);

42、,用printf函數(shù)輸出數(shù)據(jù),174,2. 常用格式字符 f格式符。用來(lái)輸出實(shí)數(shù),以小數(shù)形式輸出 輸出的數(shù)據(jù)向左對(duì)齊,用%-m.nf,用printf函數(shù)輸出數(shù)據(jù),175,2. 常用格式字符 f格式符。用來(lái)輸出實(shí)數(shù),以小數(shù)形式輸出 float型數(shù)據(jù)只能保證6位有效數(shù)字 double型數(shù)據(jù)能保證15位有效數(shù)字 計(jì)算機(jī)輸出的數(shù)字不都是絕對(duì)精確有效的,用printf函數(shù)輸出數(shù)據(jù),176,2. 常用格式字符 e格式符。指定以指數(shù)形式輸出實(shí)數(shù) %e,VC+給出小數(shù)位數(shù)為位 指數(shù)部分占5列 小數(shù)點(diǎn)前必須有而且只有1位非零數(shù)字 printf(”%e”,123.456); 輸出:1.234560 e+002,用

43、printf函數(shù)輸出數(shù)據(jù),177,2. 常用格式字符 e格式符。指定以指數(shù)形式輸出實(shí)數(shù) %m.ne printf(”%13.2e”,123.456); 輸出: 1.23e+002 (前面有4個(gè)空格),用printf函數(shù)輸出數(shù)據(jù),178,printf格式字符,179,180,printf的附加格式說(shuō)明字符,181,用scanf函數(shù)輸入數(shù)據(jù),1. scanf 函數(shù)的一般形式 scanf(格式控制,地址表列),含義同printf函數(shù),182,1. scanf 函數(shù)的一般形式 scanf(格式控制,地址表列),可以是變量的地址,或字符串的首地址,用scanf函數(shù)輸入數(shù)據(jù),183,2. scanf函數(shù)中

44、的格式聲明 與printf函數(shù)中的格式聲明相似 以開(kāi)始,以一個(gè)格式字符結(jié)束,中間可以插入附加的字符 scanf(a=%f,b=%f,c=%f,用scanf函數(shù)輸入數(shù)據(jù),184,3.使用scanf函數(shù)時(shí)應(yīng)注意的問(wèn)題 scanf函數(shù)中的“格式控制”后面應(yīng)當(dāng)是變量地址,而不應(yīng)是變量名。 scanf(”%f%f%f”,a,b,c); scanf(”%f%f%f”,用scanf函數(shù)輸入數(shù)據(jù),錯(cuò),對(duì),185,3.使用scanf函數(shù)時(shí)應(yīng)注意的問(wèn)題 如果在“格式控制字符串”中除了格式說(shuō)明以外還有其他字符,則在輸入數(shù)據(jù)時(shí)應(yīng)輸入與這些字符相同的字符。 scanf(a=%f,b=%f,c=%f, 1 3 2 a=1

45、,b=3,c=2 a=1 b=3 c=2,用scanf函數(shù)輸入數(shù)據(jù),錯(cuò),錯(cuò),對(duì),186,3.使用scanf函數(shù)時(shí)應(yīng)注意的問(wèn)題 在用”c”格式輸入字符時(shí),空格字符和“轉(zhuǎn)義字符”都作為有效字符輸入. 對(duì)于scanf(”%c%c%c”, 如輸入: a |_| b|_| c c1值為字符a,c2值為字符|_| ,c3值為字符b,因?yàn)閏只要求輸入一個(gè)字符,后面不需要用空格作為兩個(gè)字符的間隔,因此 空格|_| 作為下一個(gè)字符送給c2,用scanf函數(shù)輸入數(shù)據(jù),187,3.使用scanf函數(shù)時(shí)應(yīng)注意的問(wèn)題 在輸入數(shù)據(jù)時(shí),遇以下情況時(shí)該數(shù)據(jù)認(rèn)為結(jié)束。 遇空格,或按“回車”或“跳格”(Tab)鍵。 按指定的寬度

46、結(jié)束,如”3d”,只取3列。 遇非法輸入。 對(duì)于scanf(”%3d%d%f”, 若輸入 123|_|4 |_|1.2*345,用scanf函數(shù)輸入數(shù)據(jù),188,Scanf格式字符,189,Scanf的附加格式說(shuō)明字符,190,例: 求 方程的根。a、b、c由鍵盤輸入 設(shè) ,191,解題思路:首先要知道求方程式的根的方法。 由數(shù)學(xué)知識(shí)已知:如果 0,則一元二次方程有兩個(gè)實(shí)根:,若記,192,#include #include int main ( ) double a,b,c,disc,x1,x2,p,q; scanf(%lf%lf%lf, ,程序中調(diào)用數(shù)學(xué)函數(shù)sqrt,輸入a,b,c的值,1

47、93,#include #include int main ( ) double a,b,c,disc,x1,x2,p,q; scanf(%lf%lf%lf, ,輸入的是雙精度型實(shí)數(shù),194,#include #include int main ( ) double a,b,c,disc,x1,x2,p,q; scanf(%lf%lf%lf, ,要求輸入3個(gè)實(shí)數(shù),自動(dòng)轉(zhuǎn)成實(shí)數(shù)后賦給a,b,c,195,#include #include int main ( ) double a,b,c,disc,x1,x2,p,q; scanf(%lf%lf%lf, ,輸出數(shù)據(jù)占7列,其中小數(shù)占2列,196,

48、字符數(shù)據(jù)的輸入輸出,1.用putchar函數(shù)輸出一個(gè)字符 從計(jì)算機(jī)向顯示器輸出一個(gè)字符 putchar函數(shù)的一般形式為: putchar(c) ,197,例: 先后輸出BOY三個(gè)字符。 解題思路: 定義3個(gè)字符變量,分別賦以初值B、O、Y 用putchar函數(shù)輸出這3個(gè)字符變量的值 ,字符數(shù)據(jù)的輸入輸出,198,#include int main ( ) char a=B,b=O,c=Y; putchar(a); putchar(b); putchar(c); putchar (n); return 0; ,向顯示器輸出字符B,向顯示器輸出換行符,字符數(shù)據(jù)的輸入輸出,199,#include

49、int main ( ) char a=B,b=O,c=Y; putchar(a); putchar(b); putchar(c); putchar (n); return 0; ,改為int a=66,b=79,c=89;,字符數(shù)據(jù)的輸入輸出,200,putchar(101) (輸出字符) putchar() (輸出單撇號(hào)字符),字符數(shù)據(jù)的輸入輸出,輸出其他轉(zhuǎn)義字符:,201,2. 用getchar函數(shù)輸入一個(gè)字符 向計(jì)算機(jī)輸入一個(gè)字符 getchar函數(shù)的一般形式為: getchar( ),字符數(shù)據(jù)的輸入輸出,202,例: 從鍵盤輸入BOY三個(gè)字符,然后把它們輸出到屏幕。 解題思路: 用3

50、個(gè)getchar函數(shù)先后從鍵盤向計(jì)算機(jī)輸入BOY三個(gè)字符 用putchar函數(shù)輸出,字符數(shù)據(jù)的輸入輸出,203,#include int main ( ) char a,b,c; a=getchar(); b=getchar(); c=getchar(); putchar(a); putchar(b); putchar(c); putchar(n); return 0; ,輸入一個(gè)字符,送給變量a,字符數(shù)據(jù)的輸入輸出,204,第四章 結(jié)構(gòu)化程序設(shè)計(jì),205,4.1 三種基本結(jié)構(gòu)概述 4.2 順序結(jié)構(gòu) 4.3 選擇結(jié)構(gòu) 4.4 循環(huán)結(jié)構(gòu),206,4.1 三種基本結(jié)構(gòu)概述,順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)

51、結(jié)構(gòu) 已經(jīng)證明,任何程序均可只用這三種結(jié)構(gòu)實(shí)現(xiàn) Bhm, Corrado, and Jacopini Guiseppe. Flow diagrams, Turing machines and languages with only two formation rules. Communication of ACM, 9(5):366-371, May 1966. 只用這三種結(jié)構(gòu)的程序,叫結(jié)構(gòu)化程序 程序 “必須”符合結(jié)構(gòu)化規(guī)則,207,順序 選擇 循環(huán) - 三分天下,順序結(jié)構(gòu),循環(huán)結(jié)構(gòu),選擇結(jié)構(gòu),208,B,A,NS圖,傳統(tǒng)流程圖,順序結(jié)構(gòu),B,A,209,4.2 順序結(jié)構(gòu),例1 計(jì)算存款利息

52、。有1000元,想存一年。有三種方法可選: (1)活期,年利率為r1 (2)一年期定期,年利率為r2 (3)存兩次半年定期,年利率為r3 請(qǐng)分別計(jì)算出一年后按三種方法所得到的本息和。,210,解題思路:確定計(jì)算本息和的公式。 從數(shù)學(xué)知識(shí)可知:若存款額為p0,則: 活期存款一年后本息和為: p1=p0(1+r1) 一年期定期存款,一年后本息和為: p2=p0(1+r2) 兩次半年定期存款,一年后本息和為:,211,算法:,212,#include int main ( ) float p0=1000, r1=0.0035,r2=0.03, r3=0.028, p1, p2, p3; p1 = p

53、0 * (1 + r1); p2 = p0 * (1 + r2); p3 = p0 * (1 + r3/2) * (1 + r3/2); printf(“%7.2fn%7.2fn%7.2fn”,p1, p2, p3); return 0; ,定義變量同時(shí)賦予初值,213,在現(xiàn)實(shí)生活中,需要進(jìn)行判斷和選擇的情況是很多的 如果你在家,我去拜訪你 如果遇到紅燈,要停車等待 周末我們?nèi)ソ加?70歲以上的老年人,入公園免票,4.3 選擇結(jié)構(gòu),214,在現(xiàn)實(shí)生活中,需要進(jìn)行判斷和選擇的情況是很多的 處理這些問(wèn)題,關(guān)鍵在于進(jìn)行條件判斷 由于程序處理問(wèn)題的需要,在大多數(shù)程序中都會(huì)包含選擇結(jié)構(gòu),需要在進(jìn)行下一個(gè)

54、操作之前先進(jìn)行條件判斷,4.3 選擇結(jié)構(gòu),215,4.3 選擇結(jié)構(gòu),if-else語(yǔ)句 (如果.愛(ài))實(shí)現(xiàn)兩個(gè)分支的選擇結(jié)構(gòu) Switch語(yǔ)句 (分道揚(yáng)鑣)實(shí)現(xiàn)多分支的選擇結(jié)構(gòu),216,選擇結(jié)構(gòu)的作用是,根據(jù)所指定的條件是否滿足,決定從給定的兩組或多組操作選擇其一。,4.3 選擇結(jié)構(gòu),217,B,N,如果 成績(jī)60 那么 通知補(bǔ)考 否則 告知你通過(guò)考試,A,Y,條 件P,4.3 選擇結(jié)構(gòu),218,if - else 語(yǔ)句,1)選擇結(jié)構(gòu)的一種最常用形式 if (表達(dá)式)語(yǔ)句1;else語(yǔ)句2;語(yǔ)句3; 表達(dá)式值非0時(shí),執(zhí)行語(yǔ)句1,然后語(yǔ)句3;表達(dá)式值為0時(shí),執(zhí)行語(yǔ)句2,然后語(yǔ)句3 2) if (表

55、達(dá)式)語(yǔ)句1; 語(yǔ)句3; else部分可以沒(méi)有,當(dāng)表達(dá)式值為0時(shí),直接執(zhí)行語(yǔ)句3 3)if-else嵌套使用時(shí),注意else和誰(shuí)配對(duì)的問(wèn)題 4) else-if語(yǔ)句,219,例: 輸入兩個(gè)實(shí)數(shù),按代數(shù)值由小到大的順序輸出這兩個(gè)數(shù)。,if 語(yǔ)句,220,解題思路: 只需要做一次比較,然后進(jìn)行一次交換即可 用if語(yǔ)句實(shí)現(xiàn)條件判斷 關(guān)鍵是怎樣實(shí)現(xiàn)兩個(gè)變量值的互換,A,B,互換前,A,B,互換后,if 語(yǔ)句,221,A,B,C,if 語(yǔ)句,222,A,B,C,if 語(yǔ)句,223,A,B,C,if 語(yǔ)句,224,#include int main() float a,b,t; scanf(%f,%f,

56、,將a和b的值互換,如果ab,225,#include int main() float a,b,t; scanf(%f,%f, ,選擇結(jié)構(gòu),用if語(yǔ)句實(shí)現(xiàn)的,226,1)if(表達(dá)式)語(yǔ)句1 else 語(yǔ)句2,例如: if(xy)printf(“d”,x); else printf(“d”,y);,227,2) if(表達(dá)式)語(yǔ)句 例如:if(xy) printf(“d”,x);,這種if語(yǔ)句的執(zhí)行過(guò)程如圖 :,228,例: 輸入3個(gè)數(shù)a,b,c,要求按由小到大的順序輸出。,解題思路:可以先用偽代碼寫(xiě)出算法: if ab,a和b對(duì)換 (a是a、b中的小者) if ac,a和c對(duì)換 (a是三者中最小者) if bc,b和c對(duì)換 (b是三者中次小者) 順序輸出a,b,c,229,#include int main() float a,b,c,t; scanf(%f,%f,%f, ,如果 ab,將a和b對(duì)換,a是a、b中的小者,230,#include i

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論