C語言程序設(shè)計.ppt_第1頁
C語言程序設(shè)計.ppt_第2頁
C語言程序設(shè)計.ppt_第3頁
C語言程序設(shè)計.ppt_第4頁
C語言程序設(shè)計.ppt_第5頁
已閱讀5頁,還剩153頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、2020/8/4,1,C語言程序設(shè)計,2020/8/4,2,選用教材與參考書,主教科書 顧治華、陳天煌等 C語言程序設(shè)計 機械工業(yè)出版社 2007.2 參考教材 顧治華、陳天煌等C語言程序設(shè)計 實驗指導(dǎo) 機械工業(yè)出版社 2007.2 參考書 譚浩強 C語言程序設(shè)計 清華大學(xué)出版社,2020/8/4,3,課程內(nèi)容,第一章 C語言程序設(shè)計概述 第二章 算法及算法設(shè)計簡介 第三章 數(shù)據(jù)描述與基本操作 第四章 選擇結(jié)構(gòu)程序設(shè)計 第五章 循環(huán)結(jié)構(gòu)程序設(shè)計 第六章 數(shù)組與指針 第七章 函數(shù)與模塊化程序設(shè)計方法,2020/8/4,4,第一章 C語言程序設(shè)計基礎(chǔ),1.1 程序與程序設(shè)計 1.2 C語言簡介 1

2、.3 簡單的C語言程序 1.4 C語言程序的上機步驟 1.5 C語言的基本詞法 1.6 C語言程序的基本結(jié)構(gòu),2020/8/4,5,程序與計算機語言,程序是存放在計算機中的操作指令的集合。,用程序設(shè)計語言安排好的處理問題的步驟稱為計算機程序,用程序設(shè)計語言編制一個能完成某項任務(wù)的計算機程序的過程叫做計算機程序設(shè)計。,程序設(shè)計=數(shù)據(jù)結(jié)構(gòu)+算法+程序設(shè)計方法+編程語言,程序設(shè)計的關(guān)鍵:必須掌握一種程序設(shè)計語言。掌握程序設(shè)計的邏輯思維。,2020/8/4,6,程序設(shè)計過程,(1)問題的提出,要達到的要求; (2)確定數(shù)據(jù)結(jié)構(gòu)和所采用的算法; (3)編制程序; (4)調(diào)試程序; (5)整理并寫出文檔;

3、,2020/8/4,7,C語言的特點,(1)語言簡潔、緊湊,使用方便、靈活。C語言一共只有 32個關(guān)鍵字,主要用小寫字母表示。,(2) 比其他高級語言更接近硬件,比低級語言更接近算法。 程序易編、易讀、易查錯、易修改,兼有高級語言和 低級語言的優(yōu)點。,(3)數(shù)據(jù)類型和運算符十分豐富,程序設(shè)計和算法描述更為 簡單和方便。,(4) 語法結(jié)構(gòu)十分簡單,語句數(shù)目少,簡單易學(xué)。,2020/8/4,8,(6) 它是一種模塊化的程序設(shè)計語言,適合大型軟件的研制 和調(diào)試。,(5) 它是一種結(jié)構(gòu)化程序設(shè)計語言,提供了完整的程序控制 語句(選擇語句和循環(huán)語句),很適合結(jié)構(gòu)化的程序設(shè)計方 法。,(7) 生成目標代碼

4、質(zhì)量高,程序執(zhí)行效率高。,(8) 用c語言寫的程序可移植性好。,(9) 它提供了大量的庫函數(shù)以供調(diào)用,簡化了程序設(shè)計工作。,2020/8/4,9,C語言程序的結(jié)構(gòu),C語言是結(jié)構(gòu)化的程序設(shè)計語言。 C語言是模塊化的程序設(shè)計語言,程序是由函數(shù)構(gòu)成的。一個C源程序至少包含一個main函數(shù),也可以包含一個main函數(shù)和若干個其他函數(shù)。因此,函數(shù)是C程序的基本單位。 一個函數(shù)由兩部分組成: 函數(shù)的首部,函數(shù)的第一行。包括函數(shù)名、函數(shù)類型、函數(shù)屬性、函數(shù)參數(shù)(形參)名、參數(shù)類型。 函數(shù)體,即函數(shù)首部下面的大括弧.內(nèi)的部分。如果一個 函數(shù)內(nèi)有多個括弧,則最外層的一對 為函數(shù)的范圍。 函數(shù)體一般包括: 聲明部

5、分:在這部分中定義所用到的變量。 執(zhí)行部分: 由若干個語句組成。,2020/8/4,10,(4) 一個C程序總是從main函數(shù)開始的,而不論main函數(shù)在整 個程序中的位置如何(main函數(shù)可以放在程序最前頭,也可 以放在程序最后,或在一些函數(shù)之前,在另一些函數(shù)之后)。,(5) C程序書寫格式自由,一行內(nèi)可以寫幾個語句,一個語句 可以分寫在多行上。,(6) 每個語句和數(shù)據(jù)定義的最后必須有一個分號。分號是C語 句的必要組成部分。分號不可少。,(7) C語言本身沒有輸入輸出語句。輸入輸出的操作是由庫 函數(shù)scanf和printf等函數(shù)來完成的。,(8) 可以用/*/對C程序中的任何部分作注釋。,2

6、020/8/4,11,簡單的C語言程序示例,例一 main( ) printf (“This is a C program.n”); ,本程序的作用是輸出以下一行信息: This is a C program.,2020/8/4,12,例二 main( ) int a,b,sum; /*這是定義變量*/ a=123;b=456; /*以下3行為C語句*/ sum=a+b; printf(“sum is %dn”,sum); ,程序的運行結(jié)果: Sum is 579,2020/8/4,13,例三,/* example1.3 輸入兩個數(shù),求其中較大的數(shù)*/ #include int max(int

7、 x,int y) /* 被調(diào)用函數(shù)*/ int z; if (xy) z=x; else z=y; return(z); /* 將z的值返回,通過max帶回調(diào)用處*/ main() /* 主函數(shù)*/ int a,b,c; scanf(“%d,%d”, ,運行結(jié)果: 4,6 max=6,2020/8/4,14,C程序的上機步驟,2020/8/4,15,C語言的基本詞法標識符,定義:在程序中使用的變量名、函數(shù)名、標號等統(tǒng)稱為 標識符。除庫函數(shù)的函數(shù)名由系統(tǒng)定義外,其余的都由用戶自己定義。,命名規(guī)則:標識符只能是字母(AZ,az)、數(shù)字(09)、下劃線(_)組成的字符串,并且其第一個字符必須是字母

8、或下劃線。,例如:以下標識符是合法的: a,x,x3,BOOK_1,sum5,_x7。 以下標識符是非法的: 3s,s*T,-3x,bowy-1,M.D.John,ab。,2020/8/4,16,(1)標準C不限制標識符的長度,但它受各種版本的C語言編 譯系統(tǒng)限制,同時也受到具體機器的限制。Turbo C規(guī)定標識符的長度為32。一般情況下,標識符的長度不要超過8個字符。,(2)在標識符中,大小寫是有區(qū)別的。例如SUM和sum是兩個 不同的標識符。變量名應(yīng)盡量使用小寫字母,以增加程序的可讀性。,(3)標識符雖然可由程序員隨意定義,但標識符是用于標識某個量的符號。因此,命名應(yīng)盡量有相應(yīng)的意義,以便

9、于閱讀理解,做到“顧名思義”。 在C語言中,所有的變量都是先定義后應(yīng)用,使用沒有定義的變量名被認為是“非法”的。,在使用標識符時還必須注意以下幾點:,2020/8/4,17,C語言的基本詞法關(guān)鍵字,定義:關(guān)鍵字是由語言規(guī)定的具有特定意義的字符串,通常也稱為保留字。用戶定義的標識符不應(yīng)該與關(guān)鍵字相同。 分類:語言的關(guān)鍵字分為以下3類: (1)類型說明符 用于定義和說明變量、函數(shù)或其它數(shù)據(jù)結(jié)構(gòu)的類型。如int,double,float,long,short,auto,signed,static,struct,unsigned,char,enum,extern,register和union等。,20

10、20/8/4,18,(2)語句定義符 用于表示一個語句的功能。如條件語句的語句定義符if else,循環(huán)語句的語句定義符do,while,for等。,(3)預(yù)處理命令字 用于表示一個預(yù)處理命令,使用時前面要加“”。如include,define,ifdef,endif等。 關(guān)鍵字后必須有空格、圓括號、尖括號、雙引號等分隔符,否則與其它字符一起組成新的標識符。,2020/8/4,19,C語言的基本詞法其它,運算符 語言中含有相當豐富的運算符。運算符與變量,函數(shù)一起組成表達式,表示各種運算功能。運算符由一個或多個字符組成。,分隔符 在語言中采用的分隔符有逗號和空格兩種。逗號主要是用在類型說明和函數(shù)

11、參數(shù)表中分隔各個變量??崭穸嘤糜谡Z句各單詞之間作間隔符。,常量 C語言中使用的常量可分為數(shù)字常量、字符常量、字符串常量、符號常量、轉(zhuǎn)義字符等多種。,2020/8/4,20,語言的字符集,(1)字母 小寫字母az共26個,大寫字 母AZ共26個。 (2)數(shù)字09共10個。 (3)空格符、制表符、換行符等統(tǒng)稱為空白符。 (4)標點和特殊字符,2020/8/4,21,C語言程序設(shè)計的基本結(jié)構(gòu),(1)順序結(jié)構(gòu),2020/8/4,22,(2)選擇結(jié)構(gòu),或稱分支結(jié)構(gòu),此結(jié)構(gòu)中必包含一個判斷框。根據(jù)給定的條件 P是否成立而選擇執(zhí)行A框或B框,2020/8/4,23,(3) 循環(huán)結(jié)構(gòu),它又稱為重復(fù)結(jié)構(gòu),即反復(fù)

12、執(zhí)行某一部分 的操作。又兩類循環(huán)結(jié)構(gòu):,(a) 當型(while型)循環(huán)結(jié)構(gòu),它的功能是判斷當前給定 的條件p1成立時,執(zhí)行A 框操作,執(zhí)行完A后,再 判斷條件p1是否成立,如 果仍然成立,再執(zhí)行A框, 如此反復(fù)執(zhí)行A框,直到 某一次p1條件不成立為止, 此時不執(zhí)行A框,而從b點 脫離循環(huán)結(jié)構(gòu)。,2020/8/4,24,(b)直到型(Until型)循環(huán)結(jié)構(gòu),它的功能是先執(zhí)行A框,然后判斷給定的p2條 件是否成立,如果p2條件不成立,則再執(zhí)行A, 然后再對p2條件作判斷,如果p2條件仍然不成立,又執(zhí)行A如此反復(fù)執(zhí)行A,直到給定 的p2條件成立為止,此時不再執(zhí)行A,從b點脫 離本循環(huán)結(jié)構(gòu)。,202

13、0/8/4,25,本章課堂練習(xí),(1) 以下說法中正確的是( ). A) C語言程序總是從第一個函數(shù)開始執(zhí)行 B) 在C語言程序中,要調(diào)用的函數(shù)必須在main()函數(shù) 中定義 C) C語言程序總是從main()函數(shù)開始執(zhí)行 D) C語言程序中的main()函數(shù)必須放在程序的開始 部分,2020/8/4,26,解答:C 解釋:C語言程序總是從main()函數(shù)開始執(zhí)行,而不論其在程序中的位置。當主函數(shù)執(zhí)行完畢時,亦即程序執(zhí)行完畢。除main函數(shù)外,其它函數(shù)都是在執(zhí)行main函數(shù)時被調(diào)用執(zhí)行的。在C語言中,函數(shù)不允許嵌套定義。習(xí)慣上,將主函數(shù)main()放在最前頭,但并不是必須的。,2020/8/4

14、,27,(2)以下敘述不正確的是 A)一個C源程序可由一個或多個函數(shù)組成 B) 一個C源程序必須包含一個main函數(shù) C) C程序的基本組成單位是函數(shù) D) 在C程序中,注釋說明只能位于一條語句的后面,2020/8/4,28,解答:D 解釋: 凡是用“/*”和“*/”括起來的文字,都是注釋。其出現(xiàn)的位置可以任意。,2020/8/4,29,(3)下列標識符中,合法的變量名有: A)a.b B)$888 C)A1 D) 3x56,2020/8/4,30,解答:C 解釋:變量名只能由字母、數(shù)字和下劃線三種字符所組成,且第一個字符必須為字母或下劃線。C語言的關(guān)鍵字不能用作變量名。另外,C語言對英文字母

15、的大小寫敏感,即同一字母的大小寫,被認為是兩個不同的字符。習(xí)慣上,變量名和函數(shù)名中的英文字母用小寫,以增加可讀性。,2020/8/4,31,第二章 算法及算法設(shè)計簡介,2.1 算法的概念 2.2 算法的設(shè)計與表達 2.3 簡單的算法實例 2.4 結(jié)構(gòu)化程序設(shè)計方法簡介,2020/8/4,32,算法的概念,任何一個程序應(yīng)包含的如下兩方面的內(nèi)容: (1)對數(shù)據(jù)的描述。在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)(data structure). (2)對操作的描述。即操作步驟,也就是算法(algorithm)。,著名計算機科學(xué)家沃思(Nikiklaus Wirth)提出公式 數(shù)據(jù)結(jié)構(gòu)算法程

16、序,算法:是對解決某個問題的方法步驟的描述。,程序:從計算機角度來說,程序是用某種計算機能理解并執(zhí) 行的計算機語言描述解決問題的方法和步驟。,2020/8/4,33,實際上,一個程序除了以上兩個主要要素之外,還應(yīng)當采用 結(jié)構(gòu)化程序設(shè)計方法進行程序設(shè)計,并且用某一種計算機語 言表示。因此,可以這樣表示: 程序算法數(shù)據(jù)結(jié)構(gòu)程序設(shè)計方法語言工具和環(huán)境 在這4個方面中,算法是靈魂,數(shù)據(jù)結(jié)構(gòu)是加工對象,語言 是工具,編程需要采用合適的算法。算法是解決“做什么” 和“怎么做”的問題。,2020/8/4,34,算法的表示,1、用自然語言表示算法 采用漢語、英語或其它語言來描述解決問題的方法和步驟。 由于自然

17、語言容易出現(xiàn)“歧義性”,且描述問題的文字冗長, 因此一般很少使用自然語言來描述算法。,2020/8/4,35,例1: 有50個學(xué)生 ,要求將他們之中成績在80分以上者打印出來。用n表示學(xué)號,n1代表第一個學(xué)生學(xué)號,ni代表第i個學(xué)生學(xué)號。用g代表學(xué)生成績, gi 代表第i個學(xué)生成績,算法可表示如下: S1:1i S2:讀入學(xué)號ni和成績gi S3: 如果gi 80 ,則打印 ni 和gi ,否則不打印 S4: i+1 i S5: 如果 i 50, 返回S2, 繼續(xù)執(zhí)行; 否則,算法結(jié)束。,2020/8/4,36,2、用流程圖表示算法,(1)常用的流程圖符號,2020/8/4,37,上例用流程圖

18、表示:,(1) 流程圖表示算法的優(yōu)點: 表示算法直觀形象,比較清楚地顯示出各個框之間 的邏輯關(guān)系。 簡單,易于掌握。,流程圖,2020/8/4,38,3、用NS圖表示算法,1973年美國學(xué)者I.Nassi和B.Shneiderman提出了 一種新的流程圖形式。在這種流程圖中,完全去掉 了帶箭頭的流程線。全部算法寫在一個矩形框內(nèi), 在該框內(nèi)還可以包含其他的從屬于它的框。,這種流程圖又稱NS結(jié)構(gòu)化流程圖。,NS流程圖用以下的流程圖符號:,(1)順序結(jié)構(gòu):,A,B,2020/8/4,39,(2)選擇結(jié)構(gòu):,P,成立,不成立,A,B,(3)循環(huán)結(jié)構(gòu):,當p1成立,A,當型循環(huán)結(jié)構(gòu),直到p1成立,A,直

19、到型循環(huán)結(jié)構(gòu),用以上3種NS流程圖中的基本框,可以組成復(fù)雜的NS流程圖,以表示算法,2020/8/4,40,上例用NS圖表示:,用NS表示算法如圖,2020/8/4,41,4、用偽碼表示算法,偽代碼是用介于自然語言和計算機語言之間的文字和符號來 描述算法。它不用圖形符號,因此書寫方便,格式緊湊,也 比較好懂,便于向計算機語言算法(即程序)過渡。,例 有50個學(xué)生,要求將他們之中成績在80分以上者打印出來。 用n表示學(xué)生學(xué)號,n1表示第一個學(xué)生學(xué)號,ni表示第i個學(xué)生 學(xué)號。用g表示學(xué)生成績,gi表示第i個學(xué)生成績。,2020/8/4,42,BEGIN(算法開始) 1=i While ii EN

20、D(算法結(jié)束),用偽代碼表示算法如下:,2020/8/4,43,5、用計算機語言表示算法,設(shè)計算法的目的是為了實現(xiàn)算法。因此,不僅要考 慮如何設(shè)計一個算法,也要考慮如何實現(xiàn)一個算法。,我們的任務(wù)是用計算機解題,也就是要用計算機實 現(xiàn)算法。計算機是無法識別流程圖和偽代碼的。只 有用計算機語言編寫的程序才能被計算機執(zhí)行(當 然還要經(jīng)過編譯成目標程序才能被計算機識別和執(zhí) 行)。因此,在用流程圖或偽代碼描述出一個算法 后,還要將它轉(zhuǎn)換成計算機語言程序。,2020/8/4,44,例: 有50個學(xué)生,要求將他們之中成績在80分以上者打印出來。 用n表示學(xué)生學(xué)號,n1表示第一個學(xué)生學(xué)號,ni表示第i個學(xué)生

21、學(xué)號。用g表示學(xué)生成績,gi表示第i個學(xué)生成績。,C語言程序如下: main( ) int g50,n50,i; for(i=0;i=80) printf(“%6d,%3dn”,ni,gi); ,2020/8/4,45,例2:對一個大于或等于3的正整數(shù),判斷它是不是一個素數(shù)。,方法:將 n (其中n 3) 作為被除數(shù), 將2 到(n-1) 各個整數(shù)輪流作為除數(shù),如果都不能被整除,則n為素數(shù)。,簡單的算法實例,2020/8/4,46,算法表示如下: S1:輸入n的值 S2:2 i ( i 作為除數(shù)) S3: n 被 i 除,得余數(shù) r S4: 如果 r 等于 0 , 表示 n 能 被 i 整除,

22、則打印 n “不是素數(shù)”,算法結(jié)束;否則執(zhí)行S5 S5:i+1 i S6: 如果 i n-1, 返回S3;否則,打印 n “是素數(shù)”,算法結(jié)束。,2020/8/4,47,S1: 1 sign S2: 1 sum S3: 2 deno S4: (-1)*sign sign S5: sign*(1/deno) term S6: sum+term sum S7: deno+1 deno S8: 若deno 100 返回S4;否則算法結(jié)束。,例3:求 1-1/2 + 1/3 1/4 + 1/99 1/100。,2020/8/4,48,結(jié)構(gòu)化程序設(shè)計方法簡介,1、三種基本結(jié)構(gòu)回顧,(1)順序結(jié)構(gòu),202

23、0/8/4,49,(2)選擇結(jié)構(gòu),或稱分支結(jié)構(gòu),2020/8/4,50,(3) 循環(huán)結(jié)構(gòu),它又稱為重復(fù)結(jié)構(gòu),即反復(fù)執(zhí)行某一部分 的操作。又兩類循環(huán)結(jié)構(gòu):,(a) 當型(while型)循環(huán)結(jié)構(gòu),2020/8/4,51,(b)直到型(Until型)循環(huán)結(jié)構(gòu),2020/8/4,52,2、結(jié)構(gòu)化程序,所謂結(jié)構(gòu)化程序,就是僅僅使用順序、選擇、循環(huán)等三種基本結(jié)構(gòu)所構(gòu)造的程序。,3、結(jié)構(gòu)化程序設(shè)計方法,結(jié)構(gòu)化程序設(shè)計方法的基本思想是,把一個復(fù)雜問題的求解過程分階段進行。每個階段的問題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。,2020/8/4,53,1 = i,i+1 =i,gi80,i50,結(jié)束,開始,打印ni

24、,gi,Y,N,N,Y,讀入ni和gi,2020/8/4,54,解答:()用自然語言表示()用傳統(tǒng)的流程圖表示()NS流程圖()用偽代碼表示等。,1、算法的表示形式主要有哪些?,課堂練習(xí),2020/8/4,55,2、設(shè)計算法:A、B兩人各有一桶油,現(xiàn)兩人要將各自桶 內(nèi)的油互換。,解答:必須借助另外一個空桶,并按如下算法進行: (用Si表示第i步操作,A的桶叫A,B的桶叫B,空桶叫M) 開始: S0:將A桶中的油倒入M桶中; S1:將B桶中的油倒入A桶中; S2:將M桶中的油倒入B桶中;,2020/8/4,56,3、設(shè)計算法寫出求n!的算法,解答: S0:給出n的值; S1: 1=p; S2:

25、2=i; S3: p*i=p; S4: i+1=i; S5: 若i=n,返回S3;否則,結(jié)束,第三章 數(shù)據(jù)描述與基本操作,3.1 基本數(shù)據(jù)類型 3.2 常用的運算符和表達式 3.3 表達式及賦值語句 3.4 基本輸入輸出操作的實現(xiàn) 3.5 順序結(jié)構(gòu)程序設(shè)計實例,概 述,使用高級語言編寫程序,必須在程序中做好兩件事: 一是描述數(shù)據(jù),二是描述數(shù)據(jù)的加工方法。前者是通過 數(shù)據(jù)定義語句實現(xiàn)的,后者是通過若干執(zhí)行語句,包括 用各種運算符構(gòu)成的表達式來實現(xiàn)的。本單元主要介紹 C語言的基本數(shù)據(jù)類型,為后續(xù)單元的學(xué)習(xí)奠定一個基 礎(chǔ)。關(guān)于復(fù)雜的數(shù)據(jù)類型(如數(shù)組、指針、結(jié)構(gòu)型、共 用型等)將在以后單元中介紹。,3

26、.1 C語言的數(shù)據(jù)類型,C語言具有十分豐富的數(shù)據(jù)類型。所謂數(shù)據(jù)類型是指數(shù)據(jù)的內(nèi)在表現(xiàn)形式。具體的數(shù)據(jù)類型有以下若干種:,1.基本數(shù)據(jù)類型:整型、實型和字符型。 2.構(gòu)造類型: 由若干個相關(guān)的基本數(shù)據(jù)類型數(shù)據(jù)組合在一起形 成的一種復(fù)雜的數(shù)據(jù)類型,如數(shù)組型、結(jié)構(gòu)型和共用型。 3.指針型:一種簡單的數(shù)據(jù)類型,它是用來表示內(nèi)存地址的。 指針類型的數(shù)據(jù)可以表示基本類型數(shù)據(jù)的地址,它可以表 示結(jié)構(gòu)類型數(shù)據(jù)的首地址和其中某個具體數(shù)據(jù)的地址。,4.枚舉型:某數(shù)據(jù)在程序運行中,只取固定的幾個值。我們可 以把這幾個值列出來,以后這個數(shù)據(jù)只能取這幾個值中的 某一個。 5. 空類型:沒有任何具體值的數(shù)據(jù)類型。,C語言

27、中的數(shù)據(jù)類型如下圖所示:,數(shù)據(jù)類型,基本類型,整型,字符型,實型(浮點型),單精度型,雙精度型,枚舉類型,構(gòu)造類型,數(shù)組類型,結(jié)構(gòu)體類型,共用體類型,指針類型,空類型,2020/8/4,62,常量和變量,2.常量的分類 (1)整型常量 (2)實型常量 (3)字符常量 (4)字符串常量 (5)符號常量 常量的類型,可通過書寫形式來判別。,常量 1.常量的概念 在程序運行過程中,其值不能被改變的量稱為常量。,2020/8/4,63,變量 1.變量的概念 在程序運行過程中,其值可以被改變的量稱為變量。,2.變量的兩個要素 (1)變量名。每個變量都必須有一個名字變量名,變量命名遵循標識符命名規(guī)則。 (

28、2)變量值。在程序運行過程中,變量值存儲在內(nèi)存中。在程序中,通過變量名來引用變量的值。,2020/8/4,64,變量有以下幾個特征: 變量名、變量值、變量的數(shù)據(jù)類型、變量的地址、變量的存儲類別、變量的作用域及變量的生存期等。 變量必須先定義后使用。定義變量格式如下: 數(shù)據(jù)類型關(guān)鍵字 ; 如int x,y,z; 變量的初始化:變量賦初值的過程就是變量初始化過程。,整型數(shù)據(jù),整型常量:整型常量就是整常數(shù),包括正整數(shù)和負整數(shù)及 0。其書寫形式如下:,(1)十進制整數(shù)。如 123,456,0。 (2)八進制整數(shù)。以0開頭的是八進制數(shù)。如0123表示八進制 數(shù)123,即(123)8 。 (3)十六進制整

29、數(shù)。以0 x開頭的數(shù)是十六進制數(shù)。如0 x123, 代表十六進制數(shù), (123)16116216316256323291。, 整型常量在一般微型機中占用2個字節(jié),不管是 十進制、八進制或十六進制整數(shù),它們的數(shù)值范 圍都是十進制的3276832767。,注意:, C語言還提供一種“長整型常量”。它們的數(shù)值范圍 是十進制的21474836482147483647,在計算 機中占用四個字節(jié),它們的書寫方法是在數(shù)據(jù)的末 尾加一個大寫字母“L”或小寫字母“l(fā)”,如0L,038L, 0 x15L。,2020/8/4,67,整型變量,1.分類 根據(jù)占用內(nèi)存字節(jié)數(shù)的不同,整型變量又分為類: (1)基本整型(類

30、型關(guān)鍵字為int)。 (2)短整型(類型關(guān)鍵字為short int)。 (3)長整型(類型關(guān)鍵字為long int)。 (4)無符號整型。無符號型又分為無符號基本整型(unsigned int)、無符號短整型(unsigned short)和無符號長整型(unsigned long)三種,只能用來存儲無符號整數(shù)。,2.占用內(nèi)存字節(jié)數(shù)與值域 上述各類型整型變量占用的內(nèi)存字節(jié)數(shù),隨系統(tǒng)而異。在16位操作系統(tǒng)中,一般用字節(jié)表示一個int型變量,且long型(字節(jié))int型(字節(jié))short型(字節(jié))。,2020/8/4,69,實型數(shù)據(jù),實型常量 .表示形式實型常量即實數(shù),在語言中又稱浮點數(shù),其值有兩

31、種表達形式:,(1)一般形式的實數(shù),它是由整數(shù)、小數(shù)點、小數(shù)三部分組 成。 其中整數(shù)部分或小數(shù)部分可以省略。數(shù)的正負用前 面的“”(可以省略)號或“”號來區(qū)分。例如,12.345, 1.2345,47.0,.234,47.等都是實型常量。,(2)指數(shù)形式的實數(shù),它是由尾數(shù)、小寫字母e或大寫字母E、 指數(shù)三部分組成,尾數(shù)部分可以是十進制整型常量或一般 形式的實數(shù),指數(shù)部分是十進制的短整型常量(可以帶E負 號)例如, 12.3e2,1.2e-3,47.0e2,.234e-3 等都是實 型常量。 C語言規(guī)定,字母e(或者E)之前必須要有數(shù)字,且e(或者E) 后面的指數(shù)必須為整數(shù)。 如:e3,5e3.

32、5,.e3都是不合法的指數(shù)形式。,注意:,實型常量在一般的微機中是占用4個字節(jié)的,不管是一般 形式還是指數(shù)形式,它們的數(shù)值范圍都是10 10 有效數(shù) 字7位。例如,1.23456789和1.234567是相同的,因為實型常 量的有效數(shù)字是7位,所以1.23456789中的后兩位是無效的。,38,38,2020/8/4,72,實型變量,語言的實型變量,分為兩種: (1)單精度型。類型關(guān)鍵字為float,一般占字節(jié) (位)、提供位有效數(shù)字。 (2)雙精度型。類型關(guān)鍵字為double,一般占個字節(jié)、提供1516位有效數(shù)字。,字符型數(shù)據(jù),A、把單個字符用一對單引號括起來表示字符常量。 如a,d,w,?

33、等都是字符常量。 B、用該字符的ASCII碼值表示字符常量。如65表示A C、轉(zhuǎn)義字符:反斜杠開頭后跟規(guī)定的單個字符或數(shù)字, 并用一對單引號括起來表示字符常量。如下:,一 字符常量,1.字符常量是ASCII碼字符集里的一個字符,包括字母(大、小寫有區(qū)別)、數(shù)字和標點符號以及特殊字符等,均為半角字符。,2.字符常量表示形式:,2020/8/4,75,例1:字符與整數(shù)的轉(zhuǎn)化,#include stdio.h void main() int i; char n; n=97; i=b; printf(n=%cn,n); printf(i=%dn,i); printf(i=%cn,i); ,程序的輸出為

34、: n=a i=98 i=b,2020/8/4,76,例2 字符參與整數(shù)運算,#include stdio.h void main() char n; n=a; n=n-65; printf(n=%dn,n); ,程序的輸出結(jié)果為: n=32,2020/8/4,77,例3 字母的大小寫轉(zhuǎn)換,#include stdio.h void main() char n,i; n=a; i=B; n=n-32; i=i+32; printf(n=%cn,n); printf(i=%cn,i); ,程序的輸出為 n=A i=b,二 字符串常量,字符串就是用兩個雙引號(“)號后括住的若干個字符, 例如,“a

35、bc”,“123 456”,“aBbB”都是字符串。, 轉(zhuǎn)義符可以出現(xiàn)在字符串中,例如,“ABC”, “101102x43x44”等都是字符串,分別表示“ABCD”、 “ABCD”兩個字符串。,一個字符串中所有的字符的個數(shù)稱為該字符串的長度, 其中每個轉(zhuǎn)義字符只當做一個字符。例如,“ABC”的長 度為5。,注意!a與“a”的區(qū)別。, C語言規(guī)定:每個字符串在內(nèi)存中占用的字符數(shù)等于字符 串的長度1。其中最后一個字符存放的字符稱為“空字符” 其值為0,書寫時常用轉(zhuǎn)義字符“0”來表示。在C語言中稱 為字符串結(jié)束標志。,關(guān)于變量的補充內(nèi)容,1. 變量: 變量是指在程序運行過程中其值可以發(fā)生變化的量。,

36、2. 變量的取名規(guī)則為:以字母、下劃線“_”開頭,后跟若干 個字母、下劃線、數(shù)字。一般約定,用戶使用的變量名采用 以字母開頭,C語言內(nèi)部使用的變量名以下劃線開頭。例如, abc,a_1,age_1等都是合法的變量名,而3a,age則是非 法的變量名。,當程序運行時,每個變量都要占用若干個連續(xù)的字節(jié), 所占用的字節(jié)數(shù)由變量的數(shù)據(jù)類型確定。其中第1個字節(jié)的 地址稱為變量的地址。C語言規(guī)定,程序中變量的地址是用 “ float f=5.0,g=10.0; double d=5.0,e=10.0;,則 n的結(jié)果是10 nm,nm,n*m,n/m,n%m的結(jié)果 分別為13、7、30、3、1 de,de,

37、d*e,d/e的結(jié)果 分別為15.0,5.0,50.0,0.5 nmf*g/d的運算順序相當于 (nm(f*g)/d),結(jié)果是3.0 nm*f*d的運算順序相當于 (nm)*f)*d,結(jié)果是25.0,如果參加運算的兩個數(shù)中有一個為浮點型,則結(jié)果是double型,2 增1減1運算符,(1)增1減1運算符的運算對象、運算規(guī)則與結(jié)果、 結(jié)合性如下表所示:,對象數(shù),單 目,名稱,運算符,運算規(guī)則,運算對象,運算結(jié)果,結(jié)合性,增1(前綴),先加1 后使用,增1(后綴),減1(前綴),減1(后綴),先使用 后加1,先減1 后使用,先使用 后減1,整型、字 符型、指 針型變量 或數(shù)組 元素,同運算 對象的

38、類型,自 右 向 左,(2)增1減1運算符的優(yōu)先級:, 增1減1運算符 優(yōu)先于 雙目基本算術(shù)運算符 增1減1運算符和單目運算符、同級別,結(jié)合性 是自右向左,注意:,若出現(xiàn)難以區(qū)分的若干個或組成運算符串時, C語言規(guī)定,自左向右取盡可能多的符號組成運算符。,例1:,ab 應(yīng)理解為(a)b ab應(yīng)理解為 (a)b,例2:增1減1運算符的使用,設(shè)變量定義如下:char c1b,c2B; (c1,c2可看成整型,其值分別為98,66),則: c1 的值是99,運算后c1的值是c c1 的值是98,運算后c1的值是a c1c2的值是164,運算后c1的值是c,c2的值是B c1c2的值是32,運算后c1

39、的值是a,c2的值是B,三.賦值運算符,1.賦值運算符,賦值運算符是雙目運算符,賦值運算符的左邊必須是變量, 右邊是表達式。,(1) 賦值運算符的運算對象及有關(guān)規(guī)則如下表:,(2) 賦值運算符的優(yōu)先級, 算術(shù)運算符 優(yōu)先于 關(guān)系運算符 優(yōu)先于 雙目邏輯運算符 優(yōu)先于 賦值運算符 賦值運算符的結(jié)合性是自右向左,(3) 賦值運算符的使用,設(shè)變量定義如下: char c1a,c2; int n165,n2,n3,n4,n5,n6; float f13.0,f2;,則: c2n1運算后,c2的值是65,n1的值不變。 n2!c1運算后,n2的值是0,c1的值不變。 f2f10.001運算后,f2的值是

40、3.001,f1的值不變。 n3c1n1|c1!n1運算后,n3的值是1,c1和n1 的值不變。 注:運算順序相當于 n3(c1n1)|(c1!n1) n4n5n6(n1)運算后,n4,n5,n6的值 均是64,n1的值是64。,注意:上述表達式的值就等于賦值表達式中的最左邊的變量值。,2 .算術(shù)自反賦值運算符,(1) 運算規(guī)則,對象數(shù),名稱,運算符,運算規(guī)則,運算對象,運算結(jié)果,結(jié)合性,雙目,加賦值,減賦值,乘賦值,除賦值,模賦值,*,/ =,%=,a+=b相當于 a=a+(b),a=b相當于 a=a(b),a*=b相當于 a=a*(b),a/=b相當于 a=a/(b),a%=b相當于 a=

41、a%(b),數(shù)值型,數(shù)值型,自 右 向 左,整型,整型,(2)算術(shù)自反賦值運算符的優(yōu)先級, 算術(shù)運算符 優(yōu)先于 關(guān)系運算符 優(yōu)先于 雙目邏輯運算符 優(yōu)先于 算術(shù)自反賦值運算符 算術(shù)自反賦值運算符和賦值運算符是同級別的,結(jié)合性是 自右向左,(3)算術(shù)自反賦值運算符的使用,設(shè)變量定義如下 int n1=10, n2=10, m1=10, m2=10, m3=10, m4=10;,則: n1n2,n1的值為20,n2的值不變 n1n2,n1的值為0,n2的值不變 n1*n2,n1的值為100,n2的值不變 n1/n2, n1的值為1,n2的值不變 m1m2m3*m4/2 運算后, m1,m2,m3,

42、m4的值依次是30,40,50,5。 運算順序相當于m1(m2(m3*(m4/2),四.逗號運算符,逗號運算符是雙目運算符,其運算對象是表達式。,1.逗號運算符,注意:由逗號運算符組成的式子也是表達式,其值等于最右邊 的表達式的值,2.逗號運算符的優(yōu)先級, 任何運算符 優(yōu)先于 逗號運算符 逗號運算符的結(jié)合性是自左向右,3. 例題。設(shè)整型變量a,b為2,,則: ba3,cb4 運算結(jié)果:a不變,b為5,c為9,表達式的值為9 da,ed,fe 運算結(jié)果:a為1,d為1,e為1,f為1,表達式的值為1,五.條件運算符,1.條件運算符,2.條件運算符的優(yōu)先級, 其它運算符 優(yōu)先于 條件運算符 優(yōu)先于

43、 賦值、算術(shù)自反賦值運算符 條件運算符的結(jié)合性是自右向左,3.例子,(1) 設(shè)整型變量a,b,c,d均為2 則ab?(c1):(d0); 結(jié)果a,b,d不變,c為1,表達式的值為1,(2) a13?(ba2):(ca3); 結(jié)果a,c不變,b為4,表達式值為4,(3) ab?(c0):(ab?(c1):(c1)); 結(jié)果a,b不變,c為0,表達式的值為0,1.長度運算符,六.長度運算符,2.長度運算符優(yōu)先級, 和單目算術(shù)運算符、單目邏輯運算符、增1減1運算符同級別,3.例子,設(shè)變量定義如下: int n; short s; unsigned long u3; float f; char c;,

44、則 sizeof(n)的值是2 sizeof(s)的值是2 sizeof(long)的值是4 sizeof(unsigned int)的值是2 sizeof(u3)的值是4 sizeof(f)的值是4 sizeof(double)的值是8 sizeof(c)的值是1,注意:上述結(jié)果是Turbo C 2.0在微機上運行的結(jié)果。,2020/8/4,107,七 位運算 C語言中提供的位運算符: 、 、 (這是賦值語句) a+ + (這是表達式) a+ +; (這是賦值語句,等價 與 a=a+1;),2020/8/4,117,3.5 輸入輸出在C語言中的實現(xiàn),1.輸入輸出的概念 從計算機向外部輸出設(shè)備

45、(如顯示屏、打印機、磁盤 等)輸出數(shù)據(jù)稱為“輸出”,從外部向輸入設(shè)備(如鍵盤、 磁盤、光盤、掃描儀等)輸入數(shù)據(jù)稱為“輸入”。,2.C語言本身不提供輸入輸出語句,輸入和輸出操作是由 函數(shù)來實現(xiàn)的。在C標準函數(shù)庫中提供了一些輸入輸出函 數(shù),例如,printf函數(shù)和scanf函數(shù)。,2020/8/4,118,3.在使用C語言庫函數(shù)時,要用預(yù)編譯命令“include” 將有關(guān)的“頭文件”包括到用戶源文件中。在調(diào)用標準 輸入輸出庫函數(shù)時,文件開頭應(yīng)有以下預(yù)編譯命令: # include 或# include “stdio.h”,4.允許在使用printf和scanf兩個函數(shù)時可不加#include 命令

46、。,2020/8/4,119,一、字符數(shù)據(jù)的輸入輸出,1.putchar函數(shù)(字符輸出函數(shù)) 函數(shù)格式:putchar( C ) ; C可以是字符型變量或整型變量或常量 函數(shù)的功能:向終端輸出一個字符,2020/8/4,120,2.程序?qū)嵗?#include main( ) char a, b, c ; a=B; b=O; c=Y; putchar(a); putchar(b); putchar(c); ,注意:該程序可以輸出控制字符,如putchar(n) 輸出一個換行符,也可以輸出其他轉(zhuǎn)義字符 如 putchar(101) (輸出字符A) putchar() (輸出單引號字符),運行結(jié)果:

47、 BOY,2020/8/4,121,3.getchar 函數(shù)(字符輸入函數(shù)) 函數(shù)格式,getchar ( ) 函數(shù)的功能:從終端輸入一個字符,函數(shù)的值就是 從輸入設(shè)備得到的字符。,4.程序?qū)嵗?#include main ( ) char c; c=getchar( ); putchar(c); 在運行時,如果從鍵盤輸入字符a并按回車鍵,就會在 屏幕上看到輸出的字符a。 a (輸入a后,按“回車”鍵,字符才送到內(nèi)存) a (輸出變量 c 的值a),2020/8/4,122,注意: (1)getchar( )只能接收一個字符,getchar函數(shù)收到 的字符可以賦給一個字符變量或整型變量。 (2

48、)若在程序中調(diào)用getchar、putchar函數(shù),則必須 在程序的開頭部分加上“包含命令” #include 或 #include “stdio.h”,2020/8/4,123,二、格式輸入與輸出,(一)、printf 函數(shù)(格式輸出函數(shù)),1.printf函數(shù)的一般格式為 printf(“格式控制字符串”,輸出表列) 括弧內(nèi)包括兩部分: (1) “格式控制字符串”是用雙引號括起來的字符串,也稱 “轉(zhuǎn)換控制字符串”,它包括兩種信息: 格式說明,由“”和格式字符組成,如%d, %f等。 它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出。格式 說明總是由“”字符開始的。 普通字符,即需要原樣輸出的字符

49、。 (2)“輸出表列”是需要輸出的一些數(shù)據(jù),可以是表達 式。,2020/8/4,124,下面是一個例子: printf(“%d %d ”, a,b );,格式說明 輸出表列,printf(“a%d b=%d”,a,b);,格式說明 輸出表列,2020/8/4,125,2.格式字符 常用的有以下幾種格式字符:,(1)d 格式字符。用來輸出十進制整數(shù)。有以下 幾種格式字符: d,按整型數(shù)據(jù)的實際長度輸出。 md,m為指定的輸出字段的寬度。如果數(shù)據(jù) 的位數(shù)小于m,則左端補以空格,若大于m,則按實 際位數(shù)輸出。如 printf(“%4d,%4d”,a,b); 若a123,b12345,則輸出結(jié)果為 |

50、_| 123,12345 ld,輸出長整型數(shù)據(jù)。如 long a=135790; printf(“%ld”,a);,2020/8/4,126,對long型數(shù)據(jù)應(yīng)當用ld格式輸出。對長整型數(shù)據(jù)也可以 指定字段寬度,如將上面printf函數(shù)中的“l(fā)d”改為“8ld” 則輸出為: |_| |_| 135790 (8列) 一個int型數(shù)據(jù)可以用d或ld格式輸出。,(2)O格式符,以八進制數(shù)形式輸出整數(shù)。由于是將內(nèi)存 單元中的各位的值(0或1)按八進制形式輸出,因此輸出 的數(shù)值不帶符號,即將符號位也一起作為八進制數(shù)的一部 分輸出。例如: int a= -1; printf(“%d,%o”,a,a);,2

51、020/8/4,127,1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 輸出為 1,177777 對長整型數(shù)(long型)可以用“l(fā)o”格式輸出。 同樣可以指定字段寬度,如printf(“8o ” ,a) 輸出為|_| |_| 177777,1在內(nèi)存單元中的存放形式(以補碼形式存放)如下:,2020/8/4,128,(3)x格式符,以十六進制數(shù)形式輸出整數(shù)。同樣 不會出現(xiàn)負的十六進制數(shù)。 例如 int a=1; Printf(“%x,%o,%d”,a,a,a);,輸出結(jié)果為: ffff,177777,1,2020/8/4,129,(4)u格式符,用來輸出unsigned型數(shù)據(jù),

52、即無符號數(shù), 以十進制形式輸出。,(5)C格式符,用來輸出一個字符。 如: char c=a; printf(“%c”,c); 輸出字符a,請注意:“c”中的 c是格式符,引號右邊 的c是變量名,不要搞混。一個整數(shù),只要它的值在0255 范圍內(nèi),也可以用字符形式輸出,在輸出前,系統(tǒng)會將該 整數(shù)作為ASCII碼轉(zhuǎn)換成相應(yīng)的字符;反之,一個字符數(shù)據(jù) 也可以用整數(shù)形式輸出。,2020/8/4,130,(6)S格式符,用來輸出一個字符串。有幾種用法:,s,例如: printf(“%s”, “CHINA” ); 輸出“CHINA”字符串(不包括雙引號)。,ms,輸出的字符率占m列,如字符串本身長度大 于

53、m,則突破m的限制,將字符串全部輸出。若串 長小于m,則左補空格。,2020/8/4,131,ms,如果串長小于m,則在m列范圍內(nèi), 字符率向左靠,右補空格。,mns,輸出占m列,但只取字符串中左端n個字 符。這n個字符輸出在m列的右側(cè),左補空格。,mns,其中m、n含義同上,n個字符輸出在m 列范圍的左側(cè),右補空格。如果nm,則m自動取 n值,即保證n個字符正常輸出。,2020/8/4,132,(7)f格式符,用來輸出實數(shù)(包括單、雙精度),以 小數(shù)形式輸出。有以下幾種用法:,m.nf指定輸出的數(shù)據(jù)共占m列,其中有n位小數(shù)。 如果數(shù)值長度小于m,則左端補空格。, -mnf與m.nf基本相同,

54、只是使輸出的數(shù)值 向左端靠,右端補空格。,f,不指定字段寬度,由系統(tǒng)自動指定,使整數(shù) 部分全部如數(shù)輸出。并輸出6位小數(shù)。應(yīng)當注意,并非全 部數(shù)字都是有效數(shù)字。單精度實數(shù)的有效位數(shù)一般為7位。,2020/8/4,133,(1)字符數(shù)據(jù)的輸出: main ( ) char c=a; int i=97; printf(“%c,%dn”,c,c); printf(“%c,%dn”,i,i); ,運行結(jié)果為: a,97 a,97,3.例子,2020/8/4,134,(2) 字符串的輸出 main( ) printf(“%5s,%7.2s,%.4s,%-5.3sn”,”CHINA”, ”CHINA”,“C

55、HINA”,”CHINA”); 輸出如下: CHINA,|_| |_| |_| |_| |_| CH,CHIN,CHI |_| |_| 其中第3個輸出項,格式說明為“%.4s”,即只指定n,沒指定m, 自動使 m=n= 4,故占4列。,2020/8/4,135,(3)輸出實數(shù)時的有效位數(shù): main( ) float x,y; x=111111.111;y=222222.222; printf(“%f”,x+y); ,運行結(jié)果為: 333333.328125,2020/8/4,136,(4)輸出實數(shù)時指定小數(shù)位數(shù): main( ) float f=123.456; printf(“%f |_| |_| %10f |_| |_| %10.2f |_| |_| %.2f |_

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論