c語言1-2-3.ppt_第1頁
c語言1-2-3.ppt_第2頁
c語言1-2-3.ppt_第3頁
c語言1-2-3.ppt_第4頁
c語言1-2-3.ppt_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、2010-02,1,第1章 C語言概述,2010-02,2,C語言發(fā)展史,C語言的發(fā)展頗為有趣。它的原型ALGOL 60語言。(也成為A語言) 1963年,劍橋大學(xué)將ALGOL 60語言發(fā)展成為CPL(Combined Programming Language)語言。 1967年,劍橋大學(xué)的Matin Richards 對CPL語言進(jìn)行了簡化,于是產(chǎn)生了BCPL語言。 1970年,美國貝爾實驗室的Ken Thompson將BCPL進(jìn)行了修改,并為它起了一個有趣的名字“B語言”。意思是將CPL語言煮干,提煉出它的精華。并且他用B語言寫了第一個UNIX操作系統(tǒng)。 而在1973年,B語言也給人“煮”

2、了一下,美國貝爾實驗室的D.M.RITCHIE在B語言的基礎(chǔ)上最終設(shè)計出了一種新的語言,他取了BCPL的第二個字母作為這種語言的名字,這就是C語言。 為了使UNIX操作系統(tǒng)推廣,1977年Dennis M.Ritchie 發(fā)表了不依賴于具體機(jī)器系統(tǒng)的C語言編譯文本可移植的C語言編譯程序。 1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著The C Programming Language,從而使C語言成為目前世界上流行最廣泛的高級程序設(shè)計語言。 1988年,隨著微型計算機(jī)的日益普及, 出現(xiàn)了許多C語言版本。由于沒有統(tǒng)一的標(biāo)準(zhǔn),使得這些C語言之間出現(xiàn)了一

3、些不一致的地方。為了改變這種情況,美國國家標(biāo)準(zhǔn)研究所(ANSI)為C語言制定了一套ANSI標(biāo)準(zhǔn), 成為現(xiàn)行的C語言標(biāo)準(zhǔn) 3.C語言的主要特點 。C語言發(fā)展迅速, 而且成為最受歡迎的語言之一, 主要因為它具有強大的功能。許多著名的系統(tǒng)軟件, 如DBASE PLUS、DBASE 都是由C 語言編寫的。用C語言加上一些匯編語言子程序, 就更能顯示C語言的優(yōu)勢了,象PC- DOS 、WORDSTAR等就是用這種方法編寫的。,2010-02,3,1.2 C語言的特點 語言簡潔、緊湊、靈活 運算符豐富 數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)類型豐富 鏈表、樹、棧 程序設(shè)計結(jié)構(gòu)化、模塊化 結(jié)構(gòu)化控制語句:ifelse、while、

4、switch、for 函數(shù)作為模塊單位 語法不嚴(yán)格、程序設(shè)計自由度大 可以訪問內(nèi)存地址、進(jìn)行位運算 生成目標(biāo)代碼質(zhì)量高 可移植性好,2010-02,4,32個關(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 sizeof static struct switch typedef unsigned union void volatile while 注意

5、:在C語言中,關(guān)鍵字都是小寫的。,2010-02,5,9種控制語句: if( )else for( ) while( ) dowhile( ) continue break switch goto return,C語言有 9 種控制語句,程序書寫形式自由,主要用小寫字母表示,壓縮了一切不必要的成分。,2010-02,6,34種運算符: 算術(shù)運算符:+ - * / % + - 關(guān)系運算符: = != 邏輯運算符:! ,輸出: This is a c program.,例1.1 第一個程序This is a c program .,printf語句中的“n”是換行符,2010-02,9,例1.2求

6、倆個數(shù)的和,/* example1.1 calculate the sum of a and b*/ #include /* This is the main program */ void 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); ,2010-02,10,例1.3 從鍵盤輸入兩個整數(shù),輸出其

7、中較大的數(shù),#include void main() int max(int x,int y) int a,b,c; scanf(“%d,%d”, ,scanf語句中“ sum=0; for(i=1; i10;i+) for(j=1;j10;j+) sum+=i*j ; printf(“%dn”,sum); ,優(yōu)秀程序員的素質(zhì)之一: 使用TAB縮進(jìn) 對齊 有足夠的注釋 有合適的空行,2010-02,12,C語言結(jié)構(gòu)特點 函數(shù)與主函數(shù) 程序由一個或多個函數(shù)組成 必須有且只能有一個主函數(shù)main(),可以放在程序中任一位置 程序執(zhí)行從main開始,在main中結(jié)束,其它函數(shù)通過嵌套調(diào)用得以執(zhí)行。

8、程序語句 C程序由語句組成 用“;”作為語句終止符 注釋 /* */為注釋,不能嵌套 不產(chǎn)生編譯代碼,例: /*This is the main /* of example1.1*/ */,編譯預(yù)處理命令,2010-02,13,1.4 C程序的上機(jī)步驟 C程序開發(fā)步驟,file.exe,第一章 C語言概述,程序代碼的錄入, 生成源程序*.c,語法分析查錯,翻譯 生成目標(biāo)程序*.obj,與其它目標(biāo)程序或庫 鏈接裝配,生成可執(zhí)行 程序*.exe,2010-02,14,算法的概念,簡單算法舉例,算法的特性,怎樣表示一個算法,第2章 程序的靈魂算法,結(jié)構(gòu)化程序設(shè)計方法,2010-02,15,程序包括的

9、內(nèi)容: 數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)的類型和組織形式 算法:操作步驟的描述,程序,=算法+數(shù)據(jù)結(jié)構(gòu)+程序設(shè)計方法+語言工具和環(huán)境,靈魂,加工對象,工具,2010-02,16,2.1 算法的概念 為解決一個問題而采取的方法和步驟,就成為算法。例如:歌曲的樂譜,建造房子等。 算法核心是解決“做什么”和“怎么做”的問題。 如:求15之積。 可以有多種方法,一般采用簡單和運算步驟少的。準(zhǔn)確、高效 計算機(jī)算法類別 數(shù)值運算算法 非數(shù)值運算算法,2010-02,17,2.2 簡單算法舉例 例2.1 方法1:累乘 方法2:用循環(huán)結(jié)構(gòu)解決,靈活、通用。 例2.2 通過循環(huán)選擇打印 例2.3 判斷閏年 例2.4 判斷素數(shù),課

10、后上機(jī)完成,加深什么是算法的概念,2010-02,18,2.3 算法的特性 有窮性在合理范圍內(nèi)可完成 確定性無歧義性 有零個或多個輸入從外界得到信息 有一個或多個輸出問題的答案 有效性每步有確定的結(jié)果,2010-02,19,2.4 流程圖表示一個算法 流程圖表示 用流程圖符號構(gòu)成,直觀,易懂,順序結(jié)構(gòu) 選擇結(jié)構(gòu) 循環(huán)結(jié)構(gòu),2010-02,20,。 結(jié)構(gòu)化程序設(shè)計 基本思想:任何程序都可以用三種基本結(jié)構(gòu)表示,限制使用無條件轉(zhuǎn)移語句(goto) 結(jié)構(gòu)化程序:由三種基本結(jié)構(gòu)反復(fù)嵌套構(gòu)成的程序 優(yōu)點:結(jié)構(gòu)清晰,易讀,提高程序設(shè)計質(zhì)量和效率,三種基本結(jié)構(gòu) 順序結(jié)構(gòu),2010-02,21,選擇結(jié)構(gòu),二分支

11、選擇結(jié)構(gòu),多分支選擇結(jié)構(gòu),2010-02,22,循環(huán)結(jié)構(gòu),當(dāng)型循環(huán)結(jié)構(gòu),直到型循環(huán)結(jié)構(gòu),注:A,B,A1.An可以是一個簡單語句,也可以是一個基本結(jié)構(gòu),2010-02,23,三種基本結(jié)構(gòu)的共同特點: 只有一個入口; 只有一個出口; 結(jié)構(gòu)內(nèi)的每一部分都有機(jī)會被執(zhí)行到; 結(jié)構(gòu)內(nèi)不存在“死循環(huán)”。,2010-02,24,2.5 結(jié)構(gòu)化程序設(shè)計方法 結(jié)構(gòu)化程序:用三種基本結(jié)構(gòu)組成的程序 基本設(shè)計思路: 復(fù)雜問題分解成 幾個最基本問題,再分別處理。 采用的方法: 自頂向下; 逐步細(xì)化; 模塊化設(shè)計:復(fù)雜問題按功能分成多個子模塊 結(jié)構(gòu)化編碼:正確采用三種基本結(jié)構(gòu)實現(xiàn),2010-02,25,課后作業(yè) 輸入n

12、,計算1*2*3*。*n。 輸入年份, 判斷是否為閏年。 輸出1-100以內(nèi)的所有素數(shù)。,2010-02,26,第3章 數(shù)據(jù)類型、運算符與表達(dá)式,C的數(shù)據(jù)類型,常量與變量,整型數(shù)據(jù),實型數(shù)據(jù),字符型數(shù)據(jù),變量賦初值,各種數(shù)值型數(shù)據(jù)間的混合運算,算術(shù)運算符和算術(shù)表達(dá)式,賦值運算符和賦值表達(dá)式,逗號運算符和逗號表達(dá)式,2010-02,27,3.1 C的數(shù)據(jù)類型,數(shù)據(jù)類型決定: 1. 數(shù)據(jù)占內(nèi)存字節(jié)數(shù) 2. 數(shù)據(jù)取值范圍 3. 可以進(jìn)行的操作,2010-02,28,常量和符號常量 定義:程序運行過程中,其值不能被改變的量(常數(shù)) 分類:直接常量、符號常量,3.2 常量與變量,2010-02,29,符

13、號常量:用標(biāo)識符代表常量 一般用大寫字母: PRICE 、 PI 定義格式: #define 符號常量 常量 其值在作用域內(nèi)不能改變和再賦值。,例3.1 符號常量舉例 #define PRICE 30 #include void main() int num,total; num=10; total=num*PRICE; printf(total=%dn,total); ,符號常量的優(yōu)點是:見名知意、一改全改,2010-02,30,變量 定義:其值可以改變的量。 定義格式:數(shù)據(jù)類型 變量名; 變量應(yīng)該有名字,并在內(nèi)存中占據(jù)一定的存儲單元。 變量名和變量值有不同的含義 變量名實為一個符號地址,例

14、 變量的使用 main() int a; a=3; printf(“a=%d,a); ,2010-02,31,標(biāo)識符 定義:標(biāo)識變量名、符號常量名、函數(shù)名、數(shù)組名、 文件名的字符串序列名字。 命名規(guī)則: 只能由字母、數(shù)字、下劃線組成,且第一個字符必須是字母或下劃線 大小寫字母含義不同,一般用小寫 不能使用關(guān)鍵字 最長字符個數(shù)與版本有關(guān),建議長度不超過8個字符 使用:先定義、后使用,標(biāo)識符應(yīng)該“見名知意”,如 total , max 標(biāo)識符應(yīng)該“不宜混淆”,如 l與1 , O與0,這些標(biāo)識符合法嗎? 1A、M.D.John、¥123、#33、 Tatol、int、max,2010-02,32,3

15、.3 整型數(shù)據(jù) 整型常量(整常數(shù))的三種表示方法 十進(jìn)制整數(shù):由數(shù)字09和正負(fù)號表示. 如 123,-456,0 八進(jìn)制整數(shù):由數(shù)字0開頭,后跟數(shù)字07表示. 如 0123,011 十六進(jìn)制整數(shù):由0 x開頭,后跟09,af,AF表示. 如 0 x123,0 xff,2010-02,33,補充知識:,字節(jié)和位 內(nèi)存以字節(jié)為單元組成 每個字節(jié)有一個地址 一個字節(jié)一般由8個二進(jìn)制位組成 每個二進(jìn)位的值是0或1,2010-02,34,C語言程序設(shè)計 第三章 程序的靈魂算法,數(shù)值的表示方法原碼、反碼和補碼 原碼:最高位為符號位,其余各位為數(shù)值本身的絕對值 反碼: 正數(shù):反碼與原碼相同 負(fù)數(shù):符號位為1

16、,其余位對原碼取反 補碼: 正數(shù):原碼、反碼、補碼相同 負(fù)數(shù):最高位為1,其余位為原碼取反,再對整個數(shù)加1,9-5=4 9+7=16=(14)12,2010-02,35,負(fù)數(shù)補碼轉(zhuǎn)換成十進(jìn)制數(shù):最高位不動,其余位取反加1,例 補碼:11111001 取反:10000110 加1: 10000111=-7,2010-02,36,C語言程序設(shè)計 第三章 程序的靈魂算法,整型變量 整型數(shù)據(jù)在內(nèi)存中的存放形式 數(shù)據(jù)在內(nèi)存中以二進(jìn)制補碼形式存放 每一個整型變量在內(nèi)存中占2個字節(jié) 10的原碼 反碼 補碼 -10的原碼 取絕對值 反碼 補碼,整數(shù)的最左二進(jìn)制位是符號位,0正、1負(fù),2010-02,37,整型

17、變量的分類 三類整型變量,整數(shù)類型和取值范圍,2010-02,38,整型變量的定義 先定義后使用強制類型定義 int a,b; ( 指定變量a、b為整型 ) unsigned short c, d; (指定變量c、d為無符號短整型 ) long e,f; ( 指定變量e、f為長整型),例3.2 整型變量的定義與使用 #include void main() int a,b,c,d; unsigned u ; a=12;b=-24;u=10; c=a+u;d=b+u; printf(“a+u=%d,b+u=%dn,c,d); ,指定abcd為整型變量,指定u為無符號整型變量,定義放在函數(shù)開頭的聲

18、明部分,不同類型混合運算,類型自動轉(zhuǎn)換,結(jié)果: a+u=22,b+u= -14,定義與賦值同時進(jìn)行: int a=12;,2010-02,39,此情況稱為“溢出”,運行時不報錯,編程時要注意,整型變量最大值32767,加1后是 32768的補碼形式,例3.3 整型數(shù)據(jù)的溢出 #include void main( ) int a , b; a= 32767; b= a+1; printf(%d , %d n ,a,b); ,改為:long b; 結(jié)果是什么?,2010-02,40,整型常量的類型 整型常量的值在-32768+32767范圍內(nèi),編譯器認(rèn)為是int類型 整型常量的值超過上述范圍,而

19、在2147483648 +2147483647范圍內(nèi),編譯器認(rèn)為是long類型 當(dāng)系統(tǒng)定義short int與int占內(nèi)存長度相同,則兩種類型常量均可以賦給 int和short int型變量 在整型常量后面加大寫L或小寫l,則告訴編譯器,把該整型常量作為long類型處理。例:123L、0L 在整型常量后面加u,則按無符號整型方式存放,負(fù)數(shù)轉(zhuǎn)換成補碼再按無符號整型方式存放。,2010-02,41,3.4 浮點型數(shù)據(jù) 浮點型常量的表示方法 浮點數(shù)(float)又稱為實數(shù)(real) 兩種表示方法: 十進(jìn)制小數(shù)形式:必須有小數(shù)點 如 0.123 、.123 、123.0 、0.0 、123. 指數(shù)形

20、式:e或E之前后必須有數(shù)字;指數(shù)必須為整數(shù) 如 123.456e0、12.3456e1 、1.23456e2 、 0.123456e3 、0.0123456e4 等 規(guī)范化指數(shù)形式 只有一位非零整數(shù)的指數(shù)形式 是指數(shù)的輸出形式,6.28e-2 表示 6.28 10 -2,-3.0824e4 表示 3.0824 10 4,2010-02,42,浮點型變量 浮點型數(shù)據(jù)在內(nèi)存中的存放形式 浮點型數(shù)據(jù)在內(nèi)存中占4個字節(jié)(32位) 在內(nèi)存中分成3部分,指數(shù)為2的冪次,+ .314159 1,數(shù)符,小數(shù)部分,指數(shù),浮點型變量的分類,float x,y; (指定x、y為單精度浮點型變量) double z;

21、 (指定z為雙精度浮點型變量) long double t; (指定t為長雙精度浮點型變量),2010-02,43,浮點型數(shù)據(jù)的舍入誤差 數(shù)據(jù)超過有效位數(shù),則產(chǎn)生誤差 要避免一個很大的數(shù)與一個很小的數(shù)加減,例3.4 浮點型數(shù)據(jù)的舍入誤差 #include void main( ) float a , b; a= 123456.789e5; b= a+20; printf(%f n,b); ,舍入誤差使1.0/3*3 的結(jié)果并不等于1 !,浮點型常量的類型 浮點型常量一般按雙精度64位處理,數(shù)后加F或f按單精度 浮點型常量不分float和double,2010-02,44,3.5 字符型數(shù)據(jù) 字

22、符常量 定義:用單引號括起來的單個字符或轉(zhuǎn)義字符 字符常量的值:該字符的ASCII碼值 定義格式:char 變量名 = 值 轉(zhuǎn)義字符:反斜線后面跟一個字符或一個代碼值表示,如 a A n t ,如 a97 ,A65 n10, t9,char ch=65 與 char ch=A,2010-02,45,字符變量 存放字符常量,占用一個字節(jié),存放一個字符 定義形式: 賦值: char c1,c2; c1=a;c2=b;,字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法 以二進(jìn)制存放字符的ASCII碼值(0255整數(shù)) 與整數(shù)的存儲形式類似 以字符或整數(shù)形式輸出,例3.6 向字符變量賦整數(shù) #include v

23、oid main( ) char c1,c2 ; c1=97 ; c2=98 ; printf(“%c %c n,c1,c2); printf(“%d %d n,c1,c2); ,輸出形式取決于printf函數(shù)中的格式符,格式符為“%c”時輸出的變量值為字符 格式符為“%d時輸出的變量值為整數(shù),2010-02,46,對字符數(shù)據(jù)進(jìn)行算術(shù)運算 實質(zhì)是對其ASCII值進(jìn)行算術(shù)運算,例3.7 大小寫字母的轉(zhuǎn)換 #include void main( ) char c1,c2 ; c1=a ; c2=b ; c1=c1-32; c2=c2-32; printf(“%c %c ,c1,c2); ,字符型與

24、整型間互相賦值,例: 互相賦值 #include void main( ) int c1; char c2 ; c1=a ; c2=98 ; c1=c1-32; c2=c2-32; printf(“%c %c ,c1,c2); ,小寫字母比大寫字母的ASCII碼大(32)10,2010-02,47,字符串常量 定義:用雙引號(“ ”)括起來的字符序列 “How do you do” , “CHINA” , “a” , “$123.45” 存儲:每個字符串尾自動加一個 0 作為字符串結(jié)束標(biāo)志,字符常量與字符串常量不同,例: char ch; ch=“A”;,沒有字符串變量, 只能用字符數(shù)組存放,

25、2010-02,48,3.6 變量賦初值 變量的使用:先定義,后使用 變量定義位置:一般放在函數(shù)開頭 變量初始化:可以在定義時賦初值,例: int a=1,b= -3,c; float data=3.67; char ch=A; int x=1,y=1,z=1; int x=y=1;( ),錯!int a=b=c=3,2010-02,49,3.7 各類數(shù)值型數(shù)據(jù)間的混合運算 整型、實型、字符型數(shù)據(jù)間可以混合運算,自動轉(zhuǎn)換 什么情況下發(fā)生 運算轉(zhuǎn)換-不同類型數(shù)據(jù)混合運算時 賦值轉(zhuǎn)換-把一個值賦給與其類型不同的變量時 輸出轉(zhuǎn)換-輸出時轉(zhuǎn)換成指定的輸出格式 函數(shù)調(diào)用轉(zhuǎn)換-實參與形參類型不一致時轉(zhuǎn)換

26、運算轉(zhuǎn)換規(guī)則:不同類型數(shù)據(jù)運算時先自動轉(zhuǎn)換成同一類型,2010-02,50,強制轉(zhuǎn)換(見P56強制類型轉(zhuǎn)換運算符部分) 一般形式:(類型名)(表達(dá)式) 例:(int)(x+y) (int)x+y (double)(3/2) (int)3.6 說明:強制轉(zhuǎn)換得到 所需類型的中間變量, 原變量類型不變,例3.8 #include main() float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); 結(jié)果:x=3.600000,i=3,精度損失問題,強制類型轉(zhuǎn)換運算符,表達(dá)式僅一個變量時,括號可以省略,2010-02,51,3.8 算術(shù)運算

27、符和算術(shù)表達(dá)式,學(xué)習(xí)運算符應(yīng)注意: 運算符功能 與運算量關(guān)系 要求運算量個數(shù) 要求運算量類型 運算符優(yōu)先級別 結(jié)合方向 結(jié)果的類型,2010-02,52,算術(shù)運算符和算術(shù)表達(dá)式 基本算術(shù)運算符: + - * / % 結(jié)合方向:從左向右 優(yōu)先級: - -* / % - + - (2) (3) (4) 說明: “-”可為單目運算符時,右結(jié)合性 兩整數(shù)相除,結(jié)果為整數(shù) %要求兩側(cè)均為整型數(shù)據(jù) + - * / 運算的兩個數(shù)中有一個數(shù)為實數(shù),結(jié)果是double型,例 5/2 = -5/2.0 =,例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%2,例 5/2 = 2 -5/2.0 = -

28、2.5,例 5%2 = 1 -5%2 = -1 1%10 = 1 5%1 = 0 5.5%2 (),2010-02,53,自增、自減運算符+ 作用:使變量值加1或減1 種類: 前置 +i, -i (先執(zhí)行i+1或i-1,再使用i值) 后置 i+,i- (先使用i值,再執(zhí)行i+1或i-1),例j=3; k=+j; j=3; k=j+; j=3; printf(“%d”,+j); j=3; printf(“%d”,j+); a=3;b=5;c=(+a)*b; a=3;b=5;c=(a+)*b;,/k=4,j=4,/k=3,j=4,/4,j=4,/3,j=4,/c=20,a=4,/c=15,a=4,2010-02,54,例 -i+ i=3; printf(“%d”,-i+);, -(i+),/-3,+ - 不能用于常量和表達(dá)式,如 5+,(a+b)+ + - 結(jié)合方向: 自右向左 優(yōu)先級:- + - -* / % -+ - (2) (3) (4) 該運算符常用于循環(huán)語句中,使循環(huán)變量加減1,有關(guān)表達(dá)式使用中的問題說明 不同系統(tǒng)

溫馨提示

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

評論

0/150

提交評論