C語言課件非常詳細(xì)_第1頁(yè)
C語言課件非常詳細(xì)_第2頁(yè)
C語言課件非常詳細(xì)_第3頁(yè)
C語言課件非常詳細(xì)_第4頁(yè)
C語言課件非常詳細(xì)_第5頁(yè)
已閱讀5頁(yè),還剩600頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

會(huì)計(jì)學(xué)1C語言課件非常詳細(xì)2課程介紹課程性質(zhì):大學(xué)計(jì)算機(jī)公共基礎(chǔ)課(必修)課程內(nèi)容C語言程序設(shè)計(jì)的基本方法和技巧預(yù)備知識(shí)《計(jì)算機(jī)基礎(chǔ)》教材《C語言程序設(shè)計(jì)教程》汪同慶張華楊先娣主編機(jī)械工業(yè)出版社《C語言程序設(shè)計(jì)實(shí)驗(yàn)教程》汪同慶關(guān)煥梅湯潔主編機(jī)械工業(yè)出版社C語言程序設(shè)計(jì)第1頁(yè)/共605頁(yè)3授課計(jì)劃C語言程序設(shè)計(jì)周次理論內(nèi)容實(shí)驗(yàn)內(nèi)容1第1講C語言概述與理論課對(duì)應(yīng)2第2講C語言快速入門與理論課對(duì)應(yīng)3第3講基本數(shù)據(jù)類型與理論課對(duì)應(yīng)4第4講輸入輸出和庫(kù)函數(shù)與理論課對(duì)應(yīng)5第5講運(yùn)算符和表達(dá)式與理論課對(duì)應(yīng)6第6講語句和算法與理論課對(duì)應(yīng)7第7講選擇結(jié)構(gòu)與理論課對(duì)應(yīng)8第8講循環(huán)結(jié)構(gòu)與理論課對(duì)應(yīng)9第9講函數(shù)與理論課對(duì)應(yīng)10第10講作用范圍和存儲(chǔ)類別與理論課對(duì)應(yīng)11第11講數(shù)組與理論課對(duì)應(yīng)12第11講數(shù)組與理論課對(duì)應(yīng)13第12講指針與理論課對(duì)應(yīng)14第13講字符串與理論課對(duì)應(yīng)15第14講結(jié)構(gòu)體與理論課對(duì)應(yīng)16第15講編譯預(yù)處理與理論課對(duì)應(yīng)17第16講文件與理論課對(duì)應(yīng)18*第17講高級(jí)數(shù)據(jù)結(jié)構(gòu)(選講)與理論課對(duì)應(yīng)第2頁(yè)/共605頁(yè)4考試與考核辦法學(xué)分:3學(xué)分學(xué)時(shí):72(講課36+實(shí)驗(yàn)36)總評(píng)成績(jī)=平時(shí)成績(jī)×#%+期末考試成績(jī)×#%平時(shí)成績(jī):(實(shí)驗(yàn),單元測(cè)驗(yàn))期末考試成績(jī)C語言程序設(shè)計(jì)第3頁(yè)/共605頁(yè)第一講C語言概述C語言程序設(shè)計(jì)第4頁(yè)/共605頁(yè)6第一講C語言概述預(yù)備知識(shí)計(jì)算機(jī)組成和工作原理計(jì)算機(jī)語言和程序C語言的簡(jiǎn)史為什么學(xué)習(xí)和使用C語言C語言程序的開發(fā)過程C語言編程環(huán)境C語言編程實(shí)驗(yàn)環(huán)境C語言程序設(shè)計(jì)第5頁(yè)/共605頁(yè)7計(jì)算機(jī)計(jì)算機(jī)(Computer)能進(jìn)行計(jì)算和邏輯判斷的設(shè)備在一組指令(instructions)——程序(programs)的控制下處理數(shù)據(jù)硬件(Hardware)組成計(jì)算機(jī)的各種物理部件鍵盤、鼠標(biāo)、顯示器、內(nèi)存、硬盤、光驅(qū)等等軟件(Software)計(jì)算機(jī)中運(yùn)行的程序和數(shù)據(jù)C語言概述第6頁(yè)/共605頁(yè)8計(jì)算機(jī)的組成計(jì)算機(jī)包括六大部件輸入單元(Inputunit)從輸入設(shè)備(鍵盤、鼠標(biāo))獲得數(shù)據(jù)輸出單元(Outputunit)把數(shù)據(jù)輸出到輸出設(shè)備(顯示器、打印機(jī)等)內(nèi)存(Memoryunit)臨時(shí)存儲(chǔ)正在處理的數(shù)據(jù)和運(yùn)行的程序可以快速地訪問容量不大C語言概述第7頁(yè)/共605頁(yè)9計(jì)算機(jī)的組成中央處理單元(Centralprocessingunit,CPU)算術(shù)邏輯單元(Arithmeticandlogicunit,ALU)進(jìn)行算術(shù)運(yùn)算和邏輯判斷控制器(Controlunit)管理和協(xié)調(diào)計(jì)算機(jī)的其它部件輔助存儲(chǔ)器(Secondarystorageunit)保存需長(zhǎng)期存儲(chǔ)的數(shù)據(jù)和非活動(dòng)的程序保存時(shí)間長(zhǎng)價(jià)格便宜、容量大例如硬盤、光盤、磁帶C語言概述第8頁(yè)/共605頁(yè)10計(jì)算機(jī)的工作原理六大部件緊密協(xié)作C語言概述第9頁(yè)/共605頁(yè)11計(jì)算機(jī)的工作原理CPU負(fù)責(zé)執(zhí)行程序從內(nèi)存中讀取一條指令執(zhí)行該指令從內(nèi)存中讀取下一條指令并執(zhí)行……一個(gè)主頻為1GHz的CPU可以在一秒鐘內(nèi)進(jìn)行大約一億次這樣的操作

CPU有自己的工作區(qū):包括若干個(gè)寄存器(Registers)CPU只能理解有限的指令(CPU的指令集)指令能夠完成的任務(wù)是具體的例如,把一個(gè)數(shù)從內(nèi)存移動(dòng)到某一個(gè)寄存器C語言概述第10頁(yè)/共605頁(yè)12計(jì)算機(jī)程序和語言存儲(chǔ)在計(jì)算機(jī)中的一切內(nèi)容都是二進(jìn)制的數(shù)字形式數(shù)據(jù):數(shù)、字符、圖片、聲音、動(dòng)畫等等指令計(jì)算機(jī)程序確切告訴計(jì)算機(jī)如何完成某項(xiàng)任務(wù)的指令序列就是一套程序計(jì)算機(jī)語言用來編寫程序C語言概述#include<stdio.h>#include<math.h>voidmain(){floata,b,c,p,disc,q,x1,x2;scanf("%f%f%f",&a,&b,&c);p=-b/(2*a);disc=b*b-4*a*c;q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf("x1=%f,x2=%f",x1,x2);}011000110000011001100101110011000000110000011011011000110000011001100101110011000000110000011011第11頁(yè)/共605頁(yè)13機(jī)器語言數(shù)字形式的指令碼就是機(jī)器語言(Machinelanguage)用機(jī)器語言編寫的程序能夠被計(jì)算機(jī)直接理解和執(zhí)行但是,編寫程序非常費(fèi)力例如,編寫程序完成兩個(gè)數(shù)相加的任務(wù)需要以下幾步把地址為2000的內(nèi)存單元中的數(shù)復(fù)制到寄存器1;把地址為2004的內(nèi)存單元中的數(shù)復(fù)制到寄存器2;把寄存器2中的數(shù)與寄存器1中的數(shù)相加,結(jié)果保留在寄存器1中;把寄存器1中的數(shù)復(fù)制到地址為2008的內(nèi)存單元中。C語言概述011000110000011001100101110011000000110000011011第12頁(yè)/共605頁(yè)14匯編語言符號(hào)化的指令碼就是匯編語言(Assemblylanguage)例如,完成兩個(gè)數(shù)相加的匯編語言程序匯編語言程序必須被翻譯成機(jī)器語言程序才能被執(zhí)行匯編程序(Assembler)充當(dāng)“翻譯”C語言概述ldregn1,r1

把變量n1的值復(fù)制到寄存器1(r1);ldregn2,r2

把變量n2的值復(fù)制到寄存器2(r2);addr1,r2

把r2中的數(shù)與r1中的數(shù)相加,結(jié)果保留在r1中;storer1,sum

把r1中的數(shù)復(fù)制到變量sum。第13頁(yè)/共605頁(yè)15高級(jí)語言高級(jí)語言(High-levellanguage)使用數(shù)學(xué)符號(hào)和類似英語的單詞例如,完成兩個(gè)數(shù)相加的C語言程序從多方面提高了編程效率不必考慮CPU的指令集不必考慮CPU實(shí)現(xiàn)特定任務(wù)的精確步驟采用接近人類思考問題的方式去書寫程序高級(jí)語言程序必須被編譯程序(Compiler)翻譯成機(jī)器語言程序才能被執(zhí)行C語言概述sum=n1+n2;第14頁(yè)/共605頁(yè)16C語言的簡(jiǎn)史C語言的起源美國(guó)貝爾實(shí)驗(yàn)室的DennisRitchie在1972年開發(fā)的用于設(shè)計(jì)UNIX操作系統(tǒng)其前身是B語言(KenThompson于1970年為第一個(gè)UNIX系統(tǒng)開發(fā)的語言)C語言的標(biāo)準(zhǔn)美國(guó)國(guó)家標(biāo)準(zhǔn)化組織(ANSI)于1983年成立了一個(gè)委員會(huì)(X3J11),以確定C語言的標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)(ANSIC)于1989年被正式采用,即C89。最新的標(biāo)準(zhǔn)是C99標(biāo)準(zhǔn)。目前,大多數(shù)C語言編譯器沒有完全實(shí)現(xiàn)C99的所有修改。C語言概述第15頁(yè)/共605頁(yè)17為什么學(xué)習(xí)和使用C語言C語言的特點(diǎn)C語言是一種強(qiáng)大而靈活的語言,可以用來編寫任意復(fù)雜的程序。C語言簡(jiǎn)潔、緊湊,使用方便、靈活。C語言程序效率高、運(yùn)行速度快。C語言是可移植的。C語言很適合結(jié)構(gòu)化程序設(shè)計(jì),因而要求用戶以功能模塊的方式來思考問題。C語言具有自我擴(kuò)展能力。C語言概述第16頁(yè)/共605頁(yè)18為什么學(xué)習(xí)和使用C語言C與C++(C加加,see-plus-plus)貝爾實(shí)驗(yàn)室于二十世紀(jì)八十年代在C語言的基礎(chǔ)上開發(fā)的。C++是C語言的超集,包含了C語言的所有內(nèi)容,同時(shí)增加了面向?qū)ο缶幊谭矫娴膬?nèi)容。C與Java(爪哇)Sun公司于1995年發(fā)布的面向?qū)ο缶幊陶Z言。Java也是基于C語言的。C與C#(see-sharp)微軟在2000年6月與.NET平臺(tái)一同推出。C#也是從C語言派生的一種面向?qū)ο笳Z言。C語言概述第17頁(yè)/共605頁(yè)19C語言程序的開發(fā)過程一般分成五個(gè)步驟定義程序目標(biāo)設(shè)計(jì)程序編寫代碼編譯運(yùn)行、測(cè)試和調(diào)試程序C語言概述第18頁(yè)/共605頁(yè)20C語言程序的開發(fā)過程定義程序目標(biāo)在開始解決問題之前,程序的開發(fā)人員必須徹底了解問題的是什么,對(duì)即將要?jiǎng)?chuàng)建的程序要做的事情有個(gè)清晰的想法。這需要仔細(xì)考慮以下問題程序需要什么信息程序需要執(zhí)行哪些計(jì)算和操作程序應(yīng)該報(bào)告什么信息例如,計(jì)算任意一個(gè)圓環(huán)的面積提出問題,明確目標(biāo)圓環(huán)是什么?如何計(jì)算?計(jì)算精度?C語言概述第19頁(yè)/共605頁(yè)21C語言程序的開發(fā)過程設(shè)計(jì)程序決定程序如何去解決問題。需要考慮如何給程序提供必要的數(shù)據(jù)程序中如何表示數(shù)據(jù)用什么方法來處理數(shù)據(jù)程序如何組織程序怎樣報(bào)告結(jié)果完成這個(gè)程序需要多長(zhǎng)時(shí)間應(yīng)該用一般的概念考慮設(shè)計(jì)中的問題,而不是考慮具體的代碼。C語言概述第20頁(yè)/共605頁(yè)22C語言程序的開發(fā)過程編寫代碼編寫代碼來實(shí)現(xiàn)前面的設(shè)計(jì),即用某一門語言來表示程序設(shè)計(jì)。需要開發(fā)人員熟練掌握該語言的知識(shí)??梢栽诓莞寮埳瞎串嬜约旱南敕ɑ驎鴮懘a,但最終必須將代碼輸入計(jì)算機(jī)。輸入代碼所采用的機(jī)制則取決于具體的編程環(huán)境。一般來說,需要使用文本編輯器(例如Windows的記事本程序)來創(chuàng)建一種文件,稱為源文件源文件包含程序設(shè)計(jì)的C語言表示形式(稱為源程序或源代碼)C語言概述第21頁(yè)/共605頁(yè)23C語言程序的開發(fā)過程編譯把C語言源程序轉(zhuǎn)換成機(jī)器語言表示的程序。這種程序可以直接被計(jì)算機(jī)理解和執(zhí)行,所以稱之為可執(zhí)行程序,放在可執(zhí)行文件中。編譯的具體細(xì)節(jié)取決于使用的編程環(huán)境。C語言分兩步完成這一工作:編譯和鏈接。編譯器將源代碼轉(zhuǎn)換為目標(biāo)代碼,并存在目標(biāo)文件中。鏈接器將目標(biāo)代碼與其他代碼結(jié)合起來生成可執(zhí)行文件。這種把編譯和鏈接分開來做的方法便于程序的模塊化??梢苑謩e編譯程序的各個(gè)模塊,然后用鏈接器把編譯過的模塊結(jié)合起來。這樣,如果需要改變一個(gè)模塊,則不需要重新編譯所有其他模塊。C語言概述第22頁(yè)/共605頁(yè)24C語言程序的開發(fā)過程運(yùn)行、測(cè)試和調(diào)試程序運(yùn)行包含可執(zhí)行程序的文件,觀察運(yùn)行的結(jié)果。在不同的系統(tǒng)中運(yùn)行程序的方式可能不同。例如,Windows的控制臺(tái)和資源管理器。應(yīng)該對(duì)程序進(jìn)行仔細(xì)的檢查,看程序是否在做該做的事。比較好的做法是為驗(yàn)證程序的正確性設(shè)計(jì)一個(gè)測(cè)試計(jì)劃。越早做越好,因?yàn)樗兄诶砬宄绦騿T的思路。程序中的錯(cuò)誤被稱為bug,調(diào)試(Debug)就是要發(fā)現(xiàn)并修正錯(cuò)誤。C語言概述第23頁(yè)/共605頁(yè)25C語言的編程環(huán)境開發(fā)程序的具體操作取決于使用的編程環(huán)境因?yàn)镃語言是可移植的,所以它在許多環(huán)境中都是可用的。例如UNIX、Linux、Windows和MS-DOS。C語言編程環(huán)境包括一系列程序。編輯器編譯器鏈接器運(yùn)行和調(diào)試環(huán)境C語言概述Hello.cHello.objHello.exe編輯器源代碼編譯器目標(biāo)代碼鏈接器可執(zhí)行代碼……啟動(dòng)代碼庫(kù)代碼執(zhí)行如果有錯(cuò)如果有錯(cuò)如果有錯(cuò)第24頁(yè)/共605頁(yè)26C語言的編程環(huán)境編輯器使用一個(gè)文本編輯器程序輸入源代碼,并將代碼保存在源文件中。一般,C程序的源文件名稱的擴(kuò)展名是.c例如welcometoyou.c和Hello.c。該名稱應(yīng)該遵循特定的操作系統(tǒng)的命名規(guī)則。例如,MS-DOS要求基本名包含的字符數(shù)不能大于8,所以welcometoyou.c不是合法的DOS文件名。Windows允許長(zhǎng)文件名,所以welcometoyou.c是合法的Windows文件名。C語言概述Hello.c編輯器源代碼第25頁(yè)/共605頁(yè)27C語言的編程環(huán)境編譯器編譯器接收源文件,生成目標(biāo)文件,擴(kuò)展名為.obj或.o。編譯器還會(huì)檢查輸入的程序是否是有效的C語言程序。如果編譯器發(fā)現(xiàn)錯(cuò)誤,就會(huì)報(bào)告出錯(cuò),且不能生成可執(zhí)行程序。這時(shí)就必須修改錯(cuò)誤,然后再編譯。顯然,為了能迅速找到錯(cuò)誤,理解特定編譯器的報(bào)錯(cuò)信息是一項(xiàng)有用的技能。C語言概述Hello.cHello.obj編輯器源代碼編譯器目標(biāo)代碼如果有錯(cuò)第26頁(yè)/共605頁(yè)28C語言的編程環(huán)境鏈接器目標(biāo)代碼雖然已經(jīng)是機(jī)器代碼,但還不能被執(zhí)行。缺少下面兩個(gè)東西啟動(dòng)代碼:相當(dāng)于程序和操作系統(tǒng)之間的接口。庫(kù)函數(shù)的代碼:庫(kù)文件中包含許多函數(shù)的目標(biāo)代碼。鏈接器的作用就是將這三個(gè)元素(目標(biāo)代碼、啟動(dòng)代碼和庫(kù)代碼)結(jié)合起來,并將它們放在一個(gè)文件中,即可執(zhí)行文件,擴(kuò)展名為.exe或.out。C語言概述Hello.objHello.exe目標(biāo)代碼鏈接器可執(zhí)行代碼……啟動(dòng)代碼庫(kù)代碼如果有錯(cuò)第27頁(yè)/共605頁(yè)29Windows的C語言編程環(huán)境Windows的C語言編程環(huán)境Windows并不包含C編譯器,所以需要獲得并安裝一個(gè)C編譯器。許多現(xiàn)代的編譯器都是集成開發(fā)環(huán)境(或叫IDE)的一部分。包括一個(gè)編輯器、編譯器、鏈接器和包括一個(gè)符號(hào)調(diào)試程序在內(nèi)的運(yùn)行支持系統(tǒng)。許多軟件廠商都提供了基于Windows的集成開發(fā)環(huán)境Microsoft公司的VisualC/C++Borland公司的C/C++BuilderMetrowerks公司的CodeWarrior目前,大多數(shù)IDE把C和C++編譯器結(jié)合在一起。C語言概述第28頁(yè)/共605頁(yè)30DOS的C語言編程環(huán)境DOS的C語言編程環(huán)境基于DOS的IDEBorland公司的TurboCBorland公司的BorlandC++許多Windows上的IDE也提供了在DOS命令行環(huán)境中編程的命令行工具。C語言概述第29頁(yè)/共605頁(yè)31C語言編程實(shí)驗(yàn)環(huán)境簡(jiǎn)介上機(jī)實(shí)驗(yàn)環(huán)境簡(jiǎn)介舉例演示VisualC++6.0的基本操作啟動(dòng)創(chuàng)建源文件構(gòu)建工程(編譯、鏈接)運(yùn)行程序C語言概述第30頁(yè)/共605頁(yè)32小結(jié)C是一種通用的程序設(shè)計(jì)語言,具有許多突出的優(yōu)點(diǎn)。程序設(shè)計(jì)的初學(xué)者應(yīng)該嚴(yán)格按照C語言程序的開發(fā)過程進(jìn)行訓(xùn)練,以便盡快掌握程序設(shè)計(jì)的基本原則。C是一種需要編譯的高級(jí)語言。進(jìn)行C語言編程的具體操作依賴于所使用的編程環(huán)境。程序設(shè)計(jì)是一門實(shí)踐性很強(qiáng)的課程,在學(xué)習(xí)過程中必須十分重視實(shí)驗(yàn)環(huán)節(jié)。C語言概述第31頁(yè)/共605頁(yè)第二講C語言快速入門第32頁(yè)/共605頁(yè)34第二講C語言快速入門C語言程序的基本結(jié)構(gòu)C語言的字符集和關(guān)鍵字VisualC++6.0編程環(huán)境C語言程序設(shè)計(jì)第33頁(yè)/共605頁(yè)35C語言程序的基本結(jié)構(gòu)一個(gè)簡(jiǎn)單的C語言程序問題:在屏幕上顯示一行文字:“HelloWorld!”源程序運(yùn)行結(jié)果C語言快速入門/*在屏幕上顯示HelloWorld!*/#include<stdio.h>voidmain()/*定義主函數(shù)*/{printf("HelloWorld!\n");}HelloWorld!第34頁(yè)/共605頁(yè)36C語言程序的基本結(jié)構(gòu)一個(gè)簡(jiǎn)單的C語言程序程序結(jié)構(gòu)分析C語言快速入門/*在屏幕上顯示HelloWorld!*/#include<stdio.h>voidmain()

/*定義主函數(shù)*/{printf("HelloWorld!\n");}

注釋部分以增加程序的可讀性。不被執(zhí)行。第35頁(yè)/共605頁(yè)37C語言程序的基本結(jié)構(gòu)一個(gè)簡(jiǎn)單的C語言程序程序結(jié)構(gòu)分析C語言快速入門/*在屏幕上顯示HelloWorld!*/#include<stdio.h>voidmain()/*定義主函數(shù)*/{printf("HelloWorld!\n");}

預(yù)處理命令程序中包含某一文件內(nèi)容。

“stdio.h”為標(biāo)準(zhǔn)輸入輸出函數(shù)頭文件名。第36頁(yè)/共605頁(yè)38C語言程序的基本結(jié)構(gòu)一個(gè)簡(jiǎn)單的C語言程序程序結(jié)構(gòu)分析C語言快速入門/*在屏幕上顯示HelloWorld!*/#include<stdio.h>voidmain()/*定義主函數(shù)*/{printf("HelloWorld!\n");}

函數(shù)

C程序由函數(shù)組成。一個(gè)C程序有且僅有一個(gè)主函數(shù)(main函數(shù))。第37頁(yè)/共605頁(yè)39C語言程序的基本結(jié)構(gòu)一個(gè)簡(jiǎn)單的C語言程序程序結(jié)構(gòu)分析C語言快速入門/*在屏幕上顯示HelloWorld!*/#include<stdio.h>voidmain()/*定義主函數(shù)*/{printf("HelloWorld!\n");}

函數(shù)說明說明函數(shù)類型、函數(shù)名和函數(shù)參數(shù)。第38頁(yè)/共605頁(yè)40C語言程序的基本結(jié)構(gòu)一個(gè)簡(jiǎn)單的C語言程序程序結(jié)構(gòu)分析C語言快速入門/*在屏幕上顯示HelloWorld!*/#include<stdio.h>voidmain()/*定義主函數(shù)*/{printf("HelloWorld!\n");}

函數(shù)體包括變量說明和語句執(zhí)行部分。第39頁(yè)/共605頁(yè)41C語言程序的基本結(jié)構(gòu)一個(gè)簡(jiǎn)單的C語言程序程序結(jié)構(gòu)分析C語言快速入門/*在屏幕上顯示HelloWorld!*/#include<stdio.h>voidmain()/*定義主函數(shù)*/{

printf("HelloWorld!\n");

}

函數(shù)調(diào)用語句格式輸出函數(shù)printf()。輸出“Helloworld!”。HelloWorld!第40頁(yè)/共605頁(yè)42C語言程序的基本結(jié)構(gòu)含有算術(shù)運(yùn)算的C語言程序問題:求方程的根(設(shè))。源程序C語言快速入門#include<stdio.h>#include<math.h>voidmain(){floata,b,c,p,disc,q,x1,x2;scanf("%f%f%f",&a,&b,&c);p=-b/(2*a);disc=b*b-4*a*c;q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf("x1=%f,x2=%f",x1,x2);}第41頁(yè)/共605頁(yè)43C語言程序的基本結(jié)構(gòu)含有算術(shù)運(yùn)算的C語言程序程序結(jié)構(gòu)分析C語言快速入門#include<stdio.h>#include<math.h>voidmain(){floata,b,c,p,disc,q,x1,x2;scanf("%f%f%f",&a,&b,&c);p=-b/(2*a);disc=b*b-4*a*c;q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf("x1=%f,x2=%f",x1,x2);}

預(yù)處理命令第42頁(yè)/共605頁(yè)44C語言程序的基本結(jié)構(gòu)含有算術(shù)運(yùn)算的C語言程序程序結(jié)構(gòu)分析C語言快速入門#include<stdio.h>#include<math.h>voidmain(){floata,b,c,p,disc,q,x1,x2;scanf("%f%f%f",&a,&b,&c);p=-b/(2*a);disc=b*b-4*a*c;q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf("x1=%f,x2=%f",x1,x2);}

函數(shù)一個(gè)主函數(shù)(main函數(shù))。第43頁(yè)/共605頁(yè)45C語言程序的基本結(jié)構(gòu)含有算術(shù)運(yùn)算的C語言程序程序結(jié)構(gòu)分析C語言快速入門#include<stdio.h>#include<math.h>voidmain(){floata,b,c,p,disc,q,x1,x2;scanf("%f%f%f",&a,&b,&c);p=-b/(2*a);disc=b*b-4*a*c;q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf("x1=%f,x2=%f",x1,x2);}

函數(shù)說明部分第44頁(yè)/共605頁(yè)46C語言程序的基本結(jié)構(gòu)含有算術(shù)運(yùn)算的C語言程序程序結(jié)構(gòu)分析C語言快速入門#include<stdio.h>#include<math.h>voidmain(){

floata,b,c,p,disc,q,x1,x2;scanf("%f%f%f",&a,&b,&c);p=-b/(2*a);disc=b*b-4*a*c;q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf("x1=%f,x2=%f",x1,x2);}

函數(shù)體

變量說明部分

執(zhí)行部分第45頁(yè)/共605頁(yè)47C語言程序的基本結(jié)構(gòu)含有算術(shù)運(yùn)算的C語言程序程序結(jié)構(gòu)分析C語言快速入門#include<stdio.h>#include<math.h>voidmain(){floata,b,c,p,disc,q,x1,x2;

scanf("%f%f%f",&a,&b,&c);p=-b/(2*a);disc=b*b-4*a*c;q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;

printf("x1=%f,x2=%f",x1,x2);}

運(yùn)行程序鍵盤輸入a、b、c的值;屏幕顯示x1和x2的值。10-4x1=2.000000,x2=-2.000000第46頁(yè)/共605頁(yè)48C語言程序的基本結(jié)構(gòu)包含多個(gè)函數(shù)的C語言程序問題:求|a|+|b|的值。源程序C語言快速入門#include<stdio.h>floatabsv(floatx){floaty;y=x>=0?x:-x;returny;}voidmain(){floata,b,c;printf("inputa,b:\n");scanf("%f%f",&a,&b);c=absv(a)+absv(b);printf("|a|+|b|=%f\n",c);}第47頁(yè)/共605頁(yè)49C語言程序的基本結(jié)構(gòu)包含多個(gè)函數(shù)的C語言程序程序結(jié)構(gòu)分析C語言快速入門#include<stdio.h>floatabsv(floatx){floaty;y=x>=0?x:-x;returny;}voidmain(){floata,b,c;printf("inputa,b:\n");scanf("%f%f",&a,&b);c=absv(a)+absv(b);printf("|a|+|b|=%f\n",c);}

程序由兩個(gè)函數(shù)組成:

absv函數(shù)

main函數(shù)第48頁(yè)/共605頁(yè)50C語言程序的基本結(jié)構(gòu)包含多個(gè)函數(shù)的C語言程序程序結(jié)構(gòu)分析C語言快速入門#include<stdio.h>floatabsv(floatx){floaty;y=x>=0?x:-x;returny;}voidmain(){floata,b,c;printf("inputa,b:\n");scanf("%f%f",&a,&b);c=absv(a)+absv(b);printf("|a|+|b|=%f\n",c);}

調(diào)用absv函數(shù)求絕對(duì)值。第49頁(yè)/共605頁(yè)51C語言程序的基本結(jié)構(gòu)包含多個(gè)函數(shù)的C語言程序程序結(jié)構(gòu)分析C語言快速入門#include<stdio.h>floatabsv(floatx){floaty;y=x>=0?x:-x;returny;}voidmain(){floata,b,c;printf("inputa,b:\n");scanf("%f%f",&a,&b);c=absv(a)+absv(b);printf("|a|+|b|=%f\n",c);}

運(yùn)行程序屏幕顯示提示信息;鍵盤輸入a、b的值;屏幕顯示a、b絕對(duì)值之和。inputa,b:-513|a|+|b|=18.000000第50頁(yè)/共605頁(yè)52C語言程序的基本結(jié)構(gòu)C語言程序的基本結(jié)構(gòu)小結(jié)C語言快速入門⑴一個(gè)C程序由一個(gè)或多個(gè)函數(shù)組成,但有且僅有一個(gè)主函數(shù)(main函數(shù));main函數(shù)是程序執(zhí)行的入口,可置于程序的任何位置。⑵程序中可以有預(yù)處理命令(如:include命令)。預(yù)處理命令通常放在程序的最前面。⑶每個(gè)語句以分號(hào)結(jié)尾;預(yù)處理命令、函數(shù)頭和花括號(hào)“}”之后不能加分號(hào)。⑷函數(shù)包括函數(shù)的說明部分和函數(shù)體;函數(shù)體包括變量說明部分和執(zhí)行部分;函數(shù)體由一對(duì)花括號(hào)“{}”括起來。⑸括在/*…*/內(nèi)的文本為注釋。⑹一行可以寫幾個(gè)語句,一個(gè)語句也可以寫在多行上。⑺程序區(qū)分大小寫字母。一般變量、語句等用小寫字母書寫;符號(hào)常量、宏名等用大寫字母書寫。⑻標(biāo)識(shí)符和保留字之間須加空格以示分隔。第51頁(yè)/共605頁(yè)53C語言的字符集C語言源程序中使用的字符來自C語言的字符集。字符集(Characterset)——來自ASCII表52個(gè)大小寫字母(Letters)ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz10個(gè)數(shù)字(Digits)0123456789空白符(Blanks)空格符、制表符、回車符、換行符圖形符號(hào)(Graphiccharacters)!#%^&*(_)-+=~[]'|\;:"{},.<>/?C語言快速入門第52頁(yè)/共605頁(yè)54C語言的關(guān)鍵字關(guān)鍵字(Keywords)是C語言中的詞匯。也稱為保留字(Reservedwords)類型說明

int、long、short、float、double、char、unsigned、signed、const、void、volatile、enum、struct、union語句定義

if、else、goto、switch、case、do、while、for、continue、break、return、default、typedef存儲(chǔ)類別說明

auto、register、extern、static長(zhǎng)度運(yùn)算符

sizeofC語言快速入門第53頁(yè)/共605頁(yè)55C語言的標(biāo)識(shí)符標(biāo)識(shí)符(Identifiers)是程序中引用對(duì)象的名稱。用來標(biāo)識(shí)變量、符號(hào)常量、數(shù)組、函數(shù)、結(jié)構(gòu)體、共用體、自定義類型等。命名規(guī)則只能包括大小寫字母、數(shù)字和下劃線;首字符必須是字母或下劃線;一般內(nèi)部標(biāo)識(shí)符的前31個(gè)字符有效,而外部標(biāo)識(shí)符的前6個(gè)字符有效;(視具體編譯器的規(guī)定)不能與關(guān)鍵字相同。C語言快速入門count,student_name,sum,test13,_number,SumM.John,$123,hi!,12xyz,void第54頁(yè)/共605頁(yè)56VisualC++6.0編程環(huán)境舉例演示VisualC++6.0的基本操作創(chuàng)建工作區(qū)創(chuàng)建工程(程序)并添加到工作區(qū)創(chuàng)建源文件并添加到工程構(gòu)建工程(編譯、鏈接)運(yùn)行程序C語言快速入門第55頁(yè)/共605頁(yè)57程序的測(cè)試與調(diào)試程序錯(cuò)誤語法錯(cuò)誤未遵循C的語法規(guī)則。編譯器可以檢查。運(yùn)行時(shí)錯(cuò)誤在程序運(yùn)行時(shí)執(zhí)行了無法處理的操作。邏輯錯(cuò)誤程序不能按照預(yù)期的方式運(yùn)行,不能產(chǎn)生預(yù)期的結(jié)果。C語言快速入門第56頁(yè)/共605頁(yè)58程序的測(cè)試與調(diào)試程序測(cè)試審查和運(yùn)行程序,檢測(cè)程序是否存在錯(cuò)誤。測(cè)試步驟在編譯前仔細(xì)檢查程序的源代碼,看看是否有明顯的錯(cuò)誤。查看編譯器發(fā)現(xiàn)的語法錯(cuò)誤。對(duì)于運(yùn)行時(shí)錯(cuò)誤和邏輯錯(cuò)誤可以采用正確輸出測(cè)試。想找出所有錯(cuò)誤是不切實(shí)際的。C語言快速入門第57頁(yè)/共605頁(yè)59程序的測(cè)試與調(diào)試程序調(diào)試隔離和修正錯(cuò)誤。調(diào)試方法采用手工方式來跟蹤程序。在程序中的關(guān)鍵點(diǎn)放置輸出語句來顯示變量的值。使用調(diào)試器。C語言快速入門第58頁(yè)/共605頁(yè)60小結(jié)C程序的基本結(jié)構(gòu)C語言程序是由一個(gè)或多個(gè)函數(shù)組成的。函數(shù)可以是標(biāo)準(zhǔn)庫(kù)函數(shù)和自定義的函數(shù)。C語言的語句可以包含一個(gè)表達(dá)式,也可以包含一個(gè)函數(shù)調(diào)用,以一個(gè)分號(hào)作為結(jié)束標(biāo)志。C語言中的變量在使用之前必須先聲明,通過聲明語句中為變量指定一個(gè)名字和數(shù)據(jù)類型??梢酝ㄟ^賦值運(yùn)算改變變量的值。C語言可以使用scanf()函數(shù)和printf()函數(shù)輸入和輸出數(shù)據(jù)。C語言快速入門第59頁(yè)/共605頁(yè)61小結(jié)編譯器可以發(fā)現(xiàn)程序中的語法錯(cuò)誤,但是程序中的運(yùn)行時(shí)錯(cuò)誤和邏輯錯(cuò)誤只有在程序運(yùn)行時(shí)才表現(xiàn)出來。檢測(cè)運(yùn)行時(shí)錯(cuò)誤和邏輯錯(cuò)誤的一種簡(jiǎn)單實(shí)用的方法是跟蹤程序的運(yùn)行狀態(tài),即程序每執(zhí)行一步之后所有或主要變量的值。C語言快速入門第60頁(yè)/共605頁(yè)第三講基本數(shù)據(jù)類型第61頁(yè)/共605頁(yè)63第三講基本數(shù)據(jù)類型引例變量與常量預(yù)備知識(shí)內(nèi)儲(chǔ)存器的組織數(shù)據(jù)類型基本數(shù)據(jù)類型整數(shù)類型字符浮點(diǎn)類型C語言程序設(shè)計(jì)第62頁(yè)/共605頁(yè)64引例引例問題計(jì)算任意一個(gè)圓的面積。源程序(cw02-01.c)基本數(shù)據(jù)類型#include<stdio.h>voidmain(){floatr,area;//定義變量

scanf(“%f”,&r);//讀取輸入的半徑

area=3.14*r*r;//計(jì)算圓的面積

printf(“area=%f”,area);//輸出}1area=3.140000areararea=Лr2第63頁(yè)/共605頁(yè)65變量與常量數(shù)據(jù)(Data)程序需要使用數(shù)據(jù)。數(shù)據(jù)是信息的載體。數(shù)據(jù)有多種形式:數(shù)、字符、圖片等。常量(Constants)在程序運(yùn)行之前可以預(yù)先設(shè)定,并在整個(gè)運(yùn)行過程中沒有變化的數(shù)據(jù)。例如引例中的圓周率3.14。變量(Variables)在程序運(yùn)行過程中可能變化或被賦值的數(shù)據(jù)。例如引例中的半徑和面積?;緮?shù)據(jù)類型第64頁(yè)/共605頁(yè)66數(shù)據(jù)類型數(shù)據(jù)類型的作用決定數(shù)據(jù)的存儲(chǔ)方式和占用的存儲(chǔ)空間的大小。決定可以進(jìn)行的操作。C語言的數(shù)據(jù)類型基本類型 整型(integer),字符型(character),浮點(diǎn)型(floating-point),枚舉類型(enumeration)構(gòu)造類型 結(jié)構(gòu)體(structure),共用體(union),數(shù)組(array)指針類型(pointer)空類型(void)基本數(shù)據(jù)類型第65頁(yè)/共605頁(yè)67位、字節(jié)和字內(nèi)存儲(chǔ)器的組織基本數(shù)據(jù)類型位(bit):最小的存儲(chǔ)單位,可以容納兩個(gè)值之一,即0或1。200020012002字節(jié)(Byte):基本的存儲(chǔ)單位,8位。字(word):自然的存儲(chǔ)單位,包含若干個(gè)字節(jié)。例如32位機(jī)的一個(gè)字就是32位。地址:以字節(jié)為單位從0開始編號(hào)。第66頁(yè)/共605頁(yè)68整數(shù)的存儲(chǔ)方式有符號(hào)的正整數(shù)在內(nèi)存中以二進(jìn)制補(bǔ)碼形式存放。正整數(shù)的補(bǔ)碼與原碼相同。例如:10基本數(shù)據(jù)類型符號(hào)位00000000000010100000000000001010RAM數(shù)軸0215-1=32767可表示的數(shù)的范圍-215=-32768第67頁(yè)/共605頁(yè)69整數(shù)的存儲(chǔ)方式有符號(hào)的負(fù)整數(shù)在內(nèi)存中以二進(jìn)制補(bǔ)碼的形式存放。例如:-10基本數(shù)據(jù)類型符號(hào)位11111111111101101111111111110110RAM-10的原碼100000000000101011111111111101011111111111110110按位取反加一后得到-10的補(bǔ)碼符號(hào)位不變第68頁(yè)/共605頁(yè)70整數(shù)的存儲(chǔ)方式無符號(hào)整數(shù)所有二進(jìn)制位都存放數(shù)值。例如:65535基本數(shù)據(jù)類型11111111111111111111111111111111RAM0216-1=65535可表示的數(shù)的范圍第69頁(yè)/共605頁(yè)71整數(shù)的類型C語言提供多種整數(shù)類型為程序員提供了針對(duì)不同用途的多種選擇?;緮?shù)據(jù)類型類型名稱類型說明符字節(jié)數(shù)數(shù)值范圍基本整型[signed]int4-2147483648~2147483647短整型[signed]short[int]2-32768~32767長(zhǎng)整型[signed]long[int]4-2147483648~2147483647無符號(hào)基本整型unsigned[int]40~4294967295無符號(hào)短整型unsignedshort[int]20~65535無符號(hào)長(zhǎng)整型unsignedlong[int]40~4294967295C標(biāo)準(zhǔn)只規(guī)定:short≤int≤long最大最小值參考<limits.h>僅供參考,實(shí)際值與所使用的操作系統(tǒng)、編譯系統(tǒng)、機(jī)器有關(guān)。第70頁(yè)/共605頁(yè)72整型常量整型常量有三種形式:十進(jìn)制(decimal)整數(shù)126565535八進(jìn)制(octal)整數(shù):帶前綴0(zero)01401010177777十六進(jìn)制(hexadecimal)整數(shù):帶前綴0x

或0X0xc0x410xffff默認(rèn)類型是int,即有符號(hào)的基本整型??梢约由虾缶Yu

或U

表示無符號(hào)整數(shù),或者l

或L

表示長(zhǎng)整數(shù)。0xb5Lu基本數(shù)據(jù)類型第71頁(yè)/共605頁(yè)73RAM整型變量聲明變量(Declaration)變量在使用之前必須被聲明。聲明語句的格式:舉例基本數(shù)據(jù)類型<類型說明符><變量名>[,<變量名>[,...]];intcounter;intwidth,height;shortx,y;longnumber;變量聲明創(chuàng)建了變量:為變量分配了存儲(chǔ)空間。height第72頁(yè)/共605頁(yè)74整型變量初始化(Initialize)變量為變量賦一個(gè)初始值??梢栽诼暶髡Z句中初始化變量。舉例變量獲得值的方法直接賦值輸入初始化基本數(shù)據(jù)類型intcounter=0;intwidth=352,height=288;初始化式RAM288height第73頁(yè)/共605頁(yè)75整型變量輸出變量的值可以使用printf()函數(shù)。與int類型對(duì)應(yīng)的格式說明符是%d。舉例(cw02-02a.c)基本數(shù)據(jù)類型#include<stdio.h>voidmain(){inta,b;a=32767;b=-32768;printf("a=%d,b=%d\n",a,b);}a=32767,b=-32768第74頁(yè)/共605頁(yè)76整數(shù)的溢出溢出整數(shù)太大,超出了整數(shù)類型的數(shù)值范圍。使用printf()

時(shí)與unsignedint類型對(duì)應(yīng)的格式說明符是%u。舉例(cw02-02b.c)基本數(shù)據(jù)類型#include<stdio.h>voidmain(){inta,b;unsignedc,d;a=2147483647;b=a+1;c=4294967295;d=c+1;printf("a=%d,b=%d\n",a,b);printf("c=%u,d=%u",c,d);}a=2147483647,b=-2147483648c=4294967295,d=0???第75頁(yè)/共605頁(yè)77整數(shù)的溢出溢出結(jié)果分析結(jié)論a+1的結(jié)果(2147483648)超出了基本整型變量b所能容納(表示)的數(shù)值范圍(-2147483648~2147483647)。請(qǐng)分析d的結(jié)果?;緮?shù)據(jù)類型01111111...111111110000000...0000000a(2147483647)10000000...0000000a+1(2147483648)b(-2147483648)12加正數(shù)減正數(shù)第76頁(yè)/共605頁(yè)78字符的存儲(chǔ)方式字符編碼計(jì)算機(jī)使用一種數(shù)字編碼(整數(shù))來表示字符,每一個(gè)字符都對(duì)應(yīng)一個(gè)特定的整數(shù)。常用的編碼是ASCII(美國(guó)信息交換用標(biāo)準(zhǔn)碼)。7位二進(jìn)制數(shù),十進(jìn)制碼值范圍從0到127。一般用一個(gè)字節(jié)保存,最高位為0。字符的存儲(chǔ)方式與整數(shù)相同舉例字母A的ASCII碼值為65,那么在內(nèi)存中以65的二進(jìn)制形式存儲(chǔ),且占一個(gè)字節(jié)?;緮?shù)據(jù)類型0100000101000001RAM第77頁(yè)/共605頁(yè)79字符的類型和字符變量C語言的字符類型:char占一個(gè)字節(jié);可視為一個(gè)有符號(hào)的整數(shù)。舉例(cw02-03.c)基本數(shù)據(jù)類型#include<stdio.h>voidmain(){charc1,c2;//聲明字符變量

c1=97;//把一個(gè)整數(shù)賦值給字符變量

c2=c1-32;//字符變量可以進(jìn)行算術(shù)運(yùn)算

printf("c1=%c,c2=%c\n",c1,c2);printf("c1=%d,c2=%d\n",c1,c2);}c1=a,c2=Ac1=97,c2=65第78頁(yè)/共605頁(yè)80字符常量字符常量用單引號(hào)括起來的一個(gè)字符。'x''9''+‘C語言將字符常量視為int類型。舉例(cw02-04.c)如果int類型為16位,char類型為8位,那么對(duì)于’bc’,將把’b’和’c’的ASCII碼值存儲(chǔ)在兩個(gè)字節(jié)中,并把’c’賦值給變量c2。注意:不同系統(tǒng)處理方式不同,結(jié)果不同?;緮?shù)據(jù)類型charc1,c2;c1=‘a(chǎn)’;c2=‘bc’;01100001c101100011c20110001101100010‘bc’LH97999998第79頁(yè)/共605頁(yè)81字符常量轉(zhuǎn)義字符(escapecharacter)指代一些特殊的字符。(打印不出來的字符)舉例(cw02-05.c)基本數(shù)據(jù)類型\a

警報(bào) \\

反斜杠(\)\b

退格 \?

問號(hào)(?)\f

走紙 \‘

單引號(hào)(’)\n

換行 \“

雙引號(hào)(”)\r

回車 \ooo

八進(jìn)制值(o表示一個(gè)八進(jìn)制數(shù)字)\t

水平制表符 \xhh

十六進(jìn)制值(h表示一個(gè)十六進(jìn)制數(shù)字)\v

垂直制表符#include<stdio.h>voidmain(){printf("a\tb\nc\bd\100\x40\n");}abd@@第80頁(yè)/共605頁(yè)82浮點(diǎn)數(shù)的存儲(chǔ)方式浮點(diǎn)數(shù)浮點(diǎn)型數(shù)據(jù)在內(nèi)存中按指數(shù)形式存放。例如:314.15=3.1415×102基本數(shù)據(jù)類型0(3.14159)100(2)10數(shù)符尾數(shù)部分階符階碼+3.14159×10+2由此可見,尾數(shù)部分的寬度決定了有效數(shù)字的個(gè)數(shù)(即精度),階碼部分的寬度決定了數(shù)值范圍。RAM科學(xué)計(jì)數(shù)法允許使用少量的數(shù)字表示很大范圍的數(shù)和很小的數(shù)。第81頁(yè)/共605頁(yè)83浮點(diǎn)數(shù)的類型浮點(diǎn)數(shù)也有多種類型類型名稱及典型大小基本數(shù)據(jù)類型類型名稱類型說明符字節(jié)數(shù)有效數(shù)字?jǐn)?shù)值范圍單精度float46~7(s)10-37~1038雙精度double815~16(s)10-307~10308長(zhǎng)雙精度longdouble1018~19(s)10-4931~104932S=±1參考<float.h>僅供參考,實(shí)際值與所使用的操作系統(tǒng)、編譯系統(tǒng)、機(jī)器有關(guān)。數(shù)軸0可表示的正數(shù)可表示的負(fù)數(shù)第82頁(yè)/共605頁(yè)84浮點(diǎn)型常量浮點(diǎn)型常量有兩種形式:十進(jìn)制形式12.3.650.指數(shù)形式:<小數(shù)><e|E><整數(shù)>1.2e-2 .1E5 7E01.2×10-2 0.1×105 7.0×100默認(rèn)類型是double??梢约由虾缶Yf

或F

表示float類型,或者l

或L

表示longdouble類型,否則該常量是double類型。2.3f1.2L.1E5f基本數(shù)據(jù)類型第83頁(yè)/共605頁(yè)85浮點(diǎn)型變量浮點(diǎn)型變量的聲明和初始化舉例基本數(shù)據(jù)類型floatradius;doublex=0.0,y=0.0;不能寫成:doublex=y=0.0;第84頁(yè)/共605頁(yè)86浮點(diǎn)型變量浮點(diǎn)數(shù)的輸出使用printf()函數(shù)float和double對(duì)應(yīng)的格式說明符為%f、%e。舉例(cw02-06.c)基本數(shù)據(jù)類型#include<stdio.h>voidmain(){floatf;doubled;f=33333.33333f;d=33333.3333333333;printf("f=%f\nd=%f",f,d);}f=33333.332031d=33333.333333有效數(shù)字位數(shù)是有限的,在可表示的有效位之外的數(shù)字被舍去。因此可能會(huì)產(chǎn)生誤差。第85頁(yè)/共605頁(yè)87浮點(diǎn)數(shù)的舍入誤差浮點(diǎn)數(shù)的舍入誤差舉例(cw02-07.c)基本數(shù)據(jù)類型#include<stdio.h>voidmain(){floata,b;a=123456.789e5;b=a+20;printf("a=%f\nb=%f",a,b);}a=12345678848.000000b=12345678848.000000???第86頁(yè)/共605頁(yè)88浮點(diǎn)數(shù)的舍入誤差浮點(diǎn)數(shù)的舍入誤差結(jié)果分析基本數(shù)據(jù)類型a=123456.789e5;b=a+20;a+20的理論值應(yīng)該是:12345678920但是,一個(gè)實(shí)型變量能夠保證的有效數(shù)字是7位,后面的數(shù)字將被舍去,是沒有意義的。因此,最后得到b=12345678848.000000應(yīng)當(dāng)避免一個(gè)很大的數(shù)和一個(gè)很小的數(shù)直接相加或相減,否則就會(huì)“丟失”較小的數(shù)。第87頁(yè)/共605頁(yè)89浮點(diǎn)數(shù)的溢出上溢舉例(cw02-08.c)若某系統(tǒng)中的最大float值為3.4e38,進(jìn)行如下操作得到結(jié)果下溢舉例:假設(shè)-10是最小的指數(shù),能夠保留四位有效數(shù)字如果把數(shù)0.1234e-10除以10,將得到結(jié)果0.0123e-10,但損失了一位有效數(shù)字?;緮?shù)據(jù)類型floattoobig=3.4e38*100.0f;printf(“toobig=%f",toobig);…inf…無窮大(infinity)第88頁(yè)/共605頁(yè)90小結(jié)C語言有多種數(shù)據(jù)類型?;镜臄?shù)據(jù)類型包括兩大類:整數(shù)類型浮點(diǎn)類型開發(fā)程序時(shí),應(yīng)當(dāng)注意所需變量及其類型的選擇。一般使用int和float表示數(shù),用char表示字符。在使用變量的函數(shù)的可執(zhí)行語句之前聲明該變量,并為它選擇有意義的名字。初始化變量使用的常量應(yīng)當(dāng)與變量的類型相匹配?;緮?shù)據(jù)類型第89頁(yè)/共605頁(yè)第四講輸入輸出和庫(kù)函數(shù)第90頁(yè)/共605頁(yè)92第四講輸入輸出和庫(kù)函數(shù)引例字符串常量符號(hào)常量格式化輸入輸出字符輸入輸出庫(kù)函數(shù)C語言程序設(shè)計(jì)第91頁(yè)/共605頁(yè)93引例引例問題:計(jì)算任意一個(gè)球體的體積。源程序(cw03-01.c)輸入輸出和庫(kù)函數(shù)#include<stdio.h>#include<math.h>#definePI3.14159//定義符號(hào)常量voidmain(){doubler,volume;printf("Pleaseinputtheradiusofaball:");scanf("%lf",&r);volume=4.0/3.0*PI*pow(r,3.0);//使用數(shù)學(xué)函數(shù)

printf(“Volume=%.5f\n”,volume);//按格式輸出}Pleaseinputtheradiusofaball:1Volume=4.18879volume=4/3Лr3第92頁(yè)/共605頁(yè)94字符串常量字符串常量用雙引號(hào)括起來的字符序列。

"thisisastring""x""12345"字符串常量的存儲(chǔ)方式字符串中的字符存放在相鄰的存儲(chǔ)單元中,每個(gè)字符占用一個(gè)單元,在最后加上一個(gè)空字符(\0)作為結(jié)束標(biāo)識(shí)符。舉例輸入輸出和庫(kù)函數(shù)thisisastring\0每個(gè)字符占一個(gè)字節(jié)結(jié)束標(biāo)記第93頁(yè)/共605頁(yè)95字符串常量字符串常量和字符常量的區(qū)別字符‘x’是基本型數(shù)據(jù)。字符串”x”是構(gòu)造型數(shù)據(jù)。占用的存儲(chǔ)空間大小不同。輸入輸出和庫(kù)函數(shù)‘x’x在內(nèi)存中占一個(gè)字節(jié)“x”x在內(nèi)存中占兩個(gè)字節(jié)\0第94頁(yè)/共605頁(yè)96符號(hào)常量符號(hào)常量符號(hào)常量是用一個(gè)標(biāo)識(shí)符表示的常量。定義規(guī)則

#define<符號(hào)常量名><字符串>舉例輸入輸出和庫(kù)函數(shù)#defineMAXSIZE20#defineWELCOME"Welcometoyou!"#definePI3.14編譯預(yù)處理器將會(huì)用3.14替換以后出現(xiàn)的PI標(biāo)識(shí)符。第95頁(yè)/共605頁(yè)97符號(hào)常量為什么需要符號(hào)常量名字比數(shù)字包含的信息多。便于維護(hù)如果需要在多個(gè)地方用到同一個(gè)常量,而且必須改變它的值,則只需要修改其符號(hào)常量的定義。另一種定義符號(hào)常量的方法使用const把一個(gè)變量聲明轉(zhuǎn)換成常量聲明。舉例輸入輸出和庫(kù)函數(shù)constintMAX_NUMBER=30;MAX_NUMBER是只讀的。第96頁(yè)/共605頁(yè)98輸入輸出輸入輸出是以計(jì)算機(jī)主機(jī)為主體而言的。輸出(Output):從主機(jī)向外部輸出設(shè)備輸出數(shù)據(jù)。輸入(Input):從外部通過輸入設(shè)備向主機(jī)輸入數(shù)據(jù)。輸入輸出和庫(kù)函數(shù)主機(jī)鍵盤磁盤光盤掃描儀……顯示器打印機(jī)磁盤……輸入輸出第97頁(yè)/共605頁(yè)99輸入輸出流流(stream)按直線排列的字符序列每個(gè)序列包括0個(gè)或多個(gè)字符,并用換行符結(jié)尾ANSIC支持至少254個(gè)字符的序列所有的輸入/輸出都是用流來進(jìn)行的。輸入輸出和庫(kù)函數(shù)S@!ci’[]源目的第98頁(yè)/共605頁(yè)100標(biāo)準(zhǔn)輸入輸出流開始執(zhí)行程序時(shí),3個(gè)流自動(dòng)連接到程序上標(biāo)準(zhǔn)輸入流(standardinput)對(duì)應(yīng)的源端設(shè)備:keyboard標(biāo)準(zhǔn)輸出流(standardoutput)對(duì)應(yīng)的目的端設(shè)備:screen標(biāo)準(zhǔn)錯(cuò)誤流(standarderror)對(duì)應(yīng)的目的端設(shè)備:screen操作系統(tǒng)允許這些流重定向到其它設(shè)備輸入輸出和庫(kù)函數(shù)typemyprog.c>prn輸出重定向符myprog<data.txt輸入重定向符第99頁(yè)/共605頁(yè)101輸入輸出函數(shù)C語言中數(shù)據(jù)的輸入、輸出是由函數(shù)來實(shí)現(xiàn)的。字符輸入函數(shù):getchar()字符輸出函數(shù):putchar()格式輸入函數(shù):scanf()格式輸出函數(shù):printf()它們都屬于標(biāo)準(zhǔn)輸入輸出庫(kù)函數(shù),其原型(prototype)都在stdio.h頭文件(headerfile)中。輸入輸出和庫(kù)函數(shù)第100頁(yè)/共605頁(yè)102字符輸入輸出putchar()函數(shù)getchar()函數(shù)使用說明程序中必須包含stdio.h頭文件輸入輸出和庫(kù)函數(shù)#include<stdio.h>第101頁(yè)/共605頁(yè)103字符輸出putchar使用形式putchar(character);向標(biāo)準(zhǔn)輸出流輸出一個(gè)字符character使用說明character可以是以下數(shù)據(jù):字符型數(shù)據(jù)整型數(shù)據(jù)轉(zhuǎn)義字符輸入輸出和庫(kù)函數(shù)第102頁(yè)/共605頁(yè)104字符輸出舉例(cw0302.c)輸入輸出和庫(kù)函數(shù)#include<stdio.h>voidmain(){chara;intb;a=‘B’;b=79;putchar(a);putchar(‘\n’);putchar(b);putchar(‘\n’);putchar(‘Y’);}BOY第103頁(yè)/共605頁(yè)105字符輸入getchar使用形式variable

=

getchar();從標(biāo)準(zhǔn)輸入流讀取一個(gè)字符。使用說明只讀取一個(gè)字符。該字符可賦給字符變量、整型變量或作為表達(dá)式的一部分。輸入輸出和庫(kù)函數(shù)第104頁(yè)/共605頁(yè)106字符輸入舉例(cw0303.c)輸入輸出和庫(kù)函數(shù)#include<stdio.h>voidmain(){charc;c=getchar();putchar(c);}aaabca989123第105頁(yè)/共605頁(yè)107格式輸入輸出printf()函數(shù)scanf()函數(shù)使用說明程序中可以不明確指定包含stdio.h頭文件輸入輸出和庫(kù)函數(shù)#include<stdio.h>可以省略此命令第106頁(yè)/共605頁(yè)108格式輸出printf使用形式printf(<格式控制字符串>,<輸出列表>);按格式控制字符串規(guī)定的格式,向指定的輸出設(shè)備輸出輸出列表中的輸出項(xiàng)。使用說明格式控制字符串由雙引號(hào)括起來的字符串,用于指定輸出格式輸出列表需要輸出的數(shù)據(jù)列表,彼此間用逗號(hào)分隔輸出項(xiàng)可以是任意合法的表達(dá)式輸入輸出和庫(kù)函數(shù)第107頁(yè)/共605頁(yè)109格式輸出格式控制字符串舉例輸入輸出和庫(kù)函數(shù)printf(“n=%5d,f=%5.2f\n”,3,6.235)普通字符原樣輸出格式說明符(轉(zhuǎn)換規(guī)則)%[修飾符]格式字符指定數(shù)據(jù)的輸出格式n=3,f=6.24第108頁(yè)/共605頁(yè)110格式輸出格式字符輸入輸出和庫(kù)函數(shù)格式字符功能d,i以十進(jìn)制有符號(hào)形式輸出整數(shù)(正數(shù)不輸出符號(hào))o以八進(jìn)制無符號(hào)形式輸出整數(shù)(不輸出前綴)x,X以十六進(jìn)制無符號(hào)形式輸出整數(shù)(不輸出前綴)u以十進(jìn)制無符號(hào)形式輸出整數(shù)f以小數(shù)形式輸出單、雙精度實(shí)數(shù)e,E以指數(shù)形式輸出單、雙精度實(shí)數(shù)g,G選用%f和%e格式中輸出寬度較短的一種,不輸出無意義的零c以字符形式輸出,輸出一個(gè)字符s輸出字符串第109頁(yè)/共605頁(yè)111格式輸出格式修飾符輸入輸出和庫(kù)函數(shù)修飾符意義l用于長(zhǎng)整型和長(zhǎng)雙精度實(shí)型數(shù)據(jù),可加在格式字符d、o、x、u、f前面。m(正整數(shù))數(shù)據(jù)最小寬度。.n(正整數(shù))對(duì)于實(shí)數(shù),表示輸出n位小數(shù);對(duì)于字符串,表示截取的字符個(gè)數(shù)。-輸出的數(shù)字或字符在域內(nèi)向左靠,右邊填空格。#當(dāng)整數(shù)以八進(jìn)制或十六進(jìn)制形式輸出時(shí),輸出前綴。可加在格式字符o、x前面。第110頁(yè)/共605頁(yè)112格式輸出格式說明符小結(jié)輸入輸出和庫(kù)函數(shù)格式字符形式d,i%d,%md,%-md,%ld,%mld,%-mld,%i,……o%o,%mo,%-mo,%lo,%mlo,%-mlo,%#o,……x,X%x,%mx,%-mx,%lx,%mlx,%-mlx,%#x,……u%u,%mu,%-mu,%lu,%mlu,%-mluf%f,%mf,%m.nf,%lf,……e,E%e,%me,%m.ne,……g,G%gc%cs%s,%ms,%m.ns,……要輸出%就用%%第111頁(yè)/共605頁(yè)113格式輸出舉例(cw0304.c)輸入輸出和庫(kù)函數(shù)voidmain(){inta=97,b=-1;floatf=123.4;printf(“%d,%c\n”,a,a);printf(“%d,%o,%x,%u\n”,b,b,b,b);printf(“%f,%e,%gEND”,f,f,f);}97,a-1,177777,ffff,65535123.400002,1.234000e+02,123.4END1111111111111111BC第112頁(yè)/共605頁(yè)114格式輸出舉例(cw0305.c)輸入輸出和庫(kù)函數(shù)voidmain(){inta=1,b=2,c=3;printf(“%d,%d,%d,%d\n”,a,b,c);printf(“%d,%d,%d\n”,a,b,c,a+b+c);}1,2,3,8981,2,3格式說明符和輸出項(xiàng)在數(shù)量和類型上應(yīng)該一一對(duì)應(yīng)。第113頁(yè)/共605頁(yè)115格式輸入scanf使用形式scanf(<格式控制字符串>,<地址列表>);按格式控制字符串規(guī)定的格式,從指定的輸入設(shè)備讀入數(shù)據(jù),并存放到地址列表中的各地址項(xiàng)指定的變量中使用說明格式控制字符串由雙引號(hào)括起來的字符串,用于指定輸入格式地址列表由若干個(gè)變量的地址組成輸入輸出和庫(kù)函數(shù)第114頁(yè)/共605頁(yè)116格式輸入地址列表取地址運(yùn)算符:&&<變量>得到變量在內(nèi)存中的地址。輸入輸出和庫(kù)函數(shù)scanf(“%d,%d”,&a,&b)FF00FF02ab第115頁(yè)/共605頁(yè)117格式輸入格式字符輸入輸出和庫(kù)函數(shù)格式字符功能d,i以十進(jìn)制形式輸入有符號(hào)整數(shù)o以八進(jìn)制形式輸入無符號(hào)整數(shù)x,X以十六進(jìn)制形式輸入無符號(hào)整數(shù)u以十進(jìn)制形式輸入無符號(hào)整數(shù)f以小數(shù)形式或指數(shù)形式輸入實(shí)數(shù)e,E,g,G同f,它們之間可以互換c輸入單個(gè)字符s輸入字符串第116頁(yè)/共605頁(yè)118格式輸入格式修飾符輸入輸出和庫(kù)函數(shù)修飾符意義l用于輸入長(zhǎng)整型和雙精度實(shí)型數(shù)據(jù),可加在格式字符d、o、x、u、f、e前面。h用于輸入短整型數(shù)據(jù)。m(正整數(shù))域?qū)?,指定輸入?shù)據(jù)所占的寬度。*表示本輸入項(xiàng)讀入后不賦給任何變量,即跳過該輸入值。第117頁(yè)/共605頁(yè)119格式輸入格式說明符小結(jié)輸入輸出和庫(kù)函數(shù)格式字符形式d,i%d,%md,%ld,%mld,%i,……o%o,%mo,%lo,%mlox,X%x,%mx,%lx,%mlxu%u,%mu,%lu,%mluf%f,%mf,%lf,%mlfe,E,g,G%e,%me,%le,%mle,%g,……c%cs%s,%ms第118頁(yè)/共605頁(yè)120格式輸入舉例(cw0306.c)輸入輸出和庫(kù)函數(shù)voidmain(){chara,b,c;scanf(“%c%c%c”,&a,&b,&c);printf(“a=%c,b=%c,c=%c",a,b,c);}abca=a,b=b,c=cabca=a,b=,c=ba bca=a,b= ,c=baba=a,b=,c=b1234用c格式字符輸入字符時(shí),若格式控制字符串中無普通字符,那么認(rèn)為所有輸入的字符(包括空格、制表符、換行符)均為有效字符。第119頁(yè)/共605頁(yè)121格式輸入輸入過程分析輸入輸出和庫(kù)函數(shù)a<nl>b<nl>2,3.4輸入緩沖區(qū)scanf();getchar();…輸入流輸入流第120頁(yè)/共605頁(yè)122格式輸入用c格式字符輸入字符時(shí),若格式控制字符串中加入空格作為分隔符,那么輸入時(shí)各數(shù)據(jù)之間可以加任意多個(gè)空格、制表符或回車符)。例:scanf(“%c%c%c”,&a,&b,&c);輸入:abc↙則a=a,b=b,c=c在下列情況下可認(rèn)為數(shù)據(jù)輸入結(jié)束:遇到空格、回車、制表符按指定的寬度結(jié)束遇非法輸入輸入輸出和庫(kù)函數(shù)第121頁(yè)/共605頁(yè)123數(shù)學(xué)庫(kù)函數(shù)使用標(biāo)準(zhǔn)庫(kù)中的數(shù)學(xué)函數(shù)包含數(shù)學(xué)函數(shù)庫(kù)的頭文件

#include<math.h>常用的數(shù)學(xué)函數(shù)的原型intabs(intn)doublefabs(doublex)doublepow(doublex,doubley)doublesqrt(doublex)使用舉例intn=abs(-21);doublev=pow(r,3.0);輸入輸出和庫(kù)函數(shù)第122頁(yè)/共605頁(yè)124小結(jié)C語言中的字符串常量C語言中的符號(hào)常量C語言中常用的輸入輸出函數(shù)使用標(biāo)準(zhǔn)庫(kù)中的數(shù)學(xué)函數(shù)輸入輸出和庫(kù)函數(shù)第123頁(yè)/共605頁(yè)第五講運(yùn)算符和表達(dá)式第124頁(yè)/共605頁(yè)126第五講運(yùn)算符和表達(dá)式引例算術(shù)運(yùn)算符運(yùn)算符的優(yōu)先級(jí)和結(jié)合性類型轉(zhuǎn)換自增自減運(yùn)算符逗號(hào)運(yùn)算符C語言程序設(shè)計(jì)第125頁(yè)/共605頁(yè)127引例引例問題輸入一個(gè)四位的正整數(shù),反序輸出該四位數(shù)的四個(gè)數(shù)字字符。設(shè)計(jì)用一個(gè)無符號(hào)整型變量number保存輸入的四位正整數(shù)。依次分解出個(gè)位數(shù)字、十位數(shù)字、百位數(shù)字和千位數(shù)字,并分別放到字符變量c1、c2、c3和c4中。怎么分解?利用除法、取模等運(yùn)算。順序輸出變量c1、c2、c3和c4中的字符。運(yùn)算符和表達(dá)式第126頁(yè)/共605頁(yè)128引例引例源程序(cw04-01.c)運(yùn)算符和表達(dá)式#include<stdio.h>voidmain(){unsignednumber;charc1,c2,c3,c4;printf("請(qǐng)輸入一個(gè)四位的正整數(shù):");scanf("%u",&number);c1=number%10+'0';//得到個(gè)位數(shù)字

c2=number/10%10+'0';//得到十位數(shù)字

c3=number/100%10+'0';//得到百位數(shù)字

c4=number/1000+'0';//得到千位數(shù)字

printf("\n%c%c%c%c\n",c1,c2,c3,c4);}請(qǐng)輸入一個(gè)四位的正整數(shù):12344321第127頁(yè)/共605頁(yè)129算術(shù)運(yùn)算符常用的算術(shù)運(yùn)算及運(yùn)算符說明取模運(yùn)算(%),結(jié)果是兩個(gè)整數(shù)相除的余數(shù)。例如,7%5=2,-2%3=-2

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論