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),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

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

2、第一章 C語言程序設(shè)計基礎(chǔ),1.1 程序與程序設(shè)計 1.2 C語言簡介 1.3 簡單的C語言程序 1.4 C語言程序的上機(jī)步驟 1.5 C語言的基本詞法 1.6 C語言程序的基本結(jié)構(gòu),24.06.2020,.,5,程序與計算機(jī)語言,程序是存放在計算機(jī)中的操作指令的集合。,用程序設(shè)計語言安排好的處理問題的步驟稱為計算機(jī)程序,用程序設(shè)計語言編制一個能完成某項任務(wù)的計算機(jī)程序的過程叫做計算機(jī)程序設(shè)計。,程序設(shè)計=數(shù)據(jù)結(jié)構(gòu)+算法+程序設(shè)計方法+編程語言,程序設(shè)計的關(guān)鍵:必須掌握一種程序設(shè)計語言。掌握程序設(shè)計的邏輯思維。,24.06.2020,.,6,程序設(shè)計過程,(1)問題的提出,要達(dá)到的要求; (2

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

4、語言,提供了完整的程序控制 語句(選擇語句和循環(huán)語句),很適合結(jié)構(gòu)化的程序設(shè)計方 法。,(7) 生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。,(8) 用c語言寫的程序可移植性好。,(9) 它提供了大量的庫函數(shù)以供調(diào)用,簡化了程序設(shè)計工作。,24.06.2020,.,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ù)體,即

5、函數(shù)首部下面的大括弧.內(nèi)的部分。如果一個 函數(shù)內(nèi)有多個括弧,則最外層的一對 為函數(shù)的范圍。 函數(shù)體一般包括: 聲明部分:在這部分中定義所用到的變量。 執(zhí)行部分: 由若干個語句組成。,24.06.2020,.,10,(4) 一個C程序總是從main函數(shù)開始的,而不論main函數(shù)在整 個程序中的位置如何(main函數(shù)可以放在程序最前頭,也可 以放在程序最后,或在一些函數(shù)之前,在另一些函數(shù)之后)。,(5) C程序書寫格式自由,一行內(nèi)可以寫幾個語句,一個語句 可以分寫在多行上。,(6) 每個語句和數(shù)據(jù)定義的最后必須有一個分號。分號是C語 句的必要組成部分。分號不可少。,(7) C語言本身沒有輸入輸出語

6、句。輸入輸出的操作是由庫 函數(shù)scanf和printf等函數(shù)來完成的。,(8) 可以用/*/對C程序中的任何部分作注釋。,24.06.2020,.,11,簡單的C語言程序示例,例一 main( ) printf (“This is a C program.n”); ,本程序的作用是輸出以下一行信息: This is a C program.,24.06.2020,.,12,例二 main( ) int a,b,sum; /*這是定義變量*/ a=123;b=456; /*以下3行為C語句*/ sum=a+b; printf(“sum is %dn”,sum); ,程序的運行結(jié)果: Sum is

7、 579,24.06.2020,.,13,例三,/* example1.3 輸入兩個數(shù),求其中較大的數(shù)*/ #include int max(int 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,24.06.2020,.,14,C程序的上機(jī)步驟,24.06.2020,.,15,C語言的基本詞法標(biāo)識符,定義:在程序中使用的變量名、函數(shù)名、標(biāo)號等統(tǒng)稱為 標(biāo)識符。

8、除庫函數(shù)的函數(shù)名由系統(tǒng)定義外,其余的都由用戶自己定義。,命名規(guī)則:標(biāo)識符只能是字母(AZ,az)、數(shù)字(09)、下劃線(_)組成的字符串,并且其第一個字符必須是字母或下劃線。,例如:以下標(biāo)識符是合法的: a,x,x3,BOOK_1,sum5,_x7。 以下標(biāo)識符是非法的: 3s,s*T,-3x,bowy-1,M.D.John,ab。,24.06.2020,.,16,(1)標(biāo)準(zhǔn)C不限制標(biāo)識符的長度,但它受各種版本的C語言編 譯系統(tǒng)限制,同時也受到具體機(jī)器的限制。Turbo C規(guī)定標(biāo)識符的長度為32。一般情況下,標(biāo)識符的長度不要超過8個字符。,(2)在標(biāo)識符中,大小寫是有區(qū)別的。例如SUM和sum

9、是兩個 不同的標(biāo)識符。變量名應(yīng)盡量使用小寫字母,以增加程序的可讀性。,(3)標(biāo)識符雖然可由程序員隨意定義,但標(biāo)識符是用于標(biāo)識某個量的符號。因此,命名應(yīng)盡量有相應(yīng)的意義,以便于閱讀理解,做到“顧名思義”。 在C語言中,所有的變量都是先定義后應(yīng)用,使用沒有定義的變量名被認(rèn)為是“非法”的。,在使用標(biāo)識符時還必須注意以下幾點:,24.06.2020,.,17,C語言的基本詞法關(guān)鍵字,定義:關(guān)鍵字是由語言規(guī)定的具有特定意義的字符串,通常也稱為保留字。用戶定義的標(biāo)識符不應(yīng)該與關(guān)鍵字相同。 分類:語言的關(guān)鍵字分為以下3類: (1)類型說明符 用于定義和說明變量、函數(shù)或其它數(shù)據(jù)結(jié)構(gòu)的類型。如int,doubl

10、e,float,long,short,auto,signed,static,struct,unsigned,char,enum,extern,register和union等。,24.06.2020,.,18,(2)語句定義符 用于表示一個語句的功能。如條件語句的語句定義符if else,循環(huán)語句的語句定義符do,while,for等。,(3)預(yù)處理命令字 用于表示一個預(yù)處理命令,使用時前面要加“”。如include,define,ifdef,endif等。 關(guān)鍵字后必須有空格、圓括號、尖括號、雙引號等分隔符,否則與其它字符一起組成新的標(biāo)識符。,24.06.2020,.,19,C語言的基本詞法其

11、它,運算符 語言中含有相當(dāng)豐富的運算符。運算符與變量,函數(shù)一起組成表達(dá)式,表示各種運算功能。運算符由一個或多個字符組成。,分隔符 在語言中采用的分隔符有逗號和空格兩種。逗號主要是用在類型說明和函數(shù)參數(shù)表中分隔各個變量。空格多用于語句各單詞之間作間隔符。,常量 C語言中使用的常量可分為數(shù)字常量、字符常量、字符串常量、符號常量、轉(zhuǎn)義字符等多種。,24.06.2020,.,20,語言的字符集,(1)字母 小寫字母az共26個,大寫字 母AZ共26個。 (2)數(shù)字09共10個。 (3)空格符、制表符、換行符等統(tǒng)稱為空白符。 (4)標(biāo)點和特殊字符,24.06.2020,.,21,C語言程序設(shè)計的基本結(jié)構(gòu)

12、,(1)順序結(jié)構(gòu),24.06.2020,.,22,(2)選擇結(jié)構(gòu),或稱分支結(jié)構(gòu),此結(jié)構(gòu)中必包含一個判斷框。根據(jù)給定的條件 P是否成立而選擇執(zhí)行A框或B框,24.06.2020,.,23,(3) 循環(huán)結(jié)構(gòu),它又稱為重復(fù)結(jié)構(gòu),即反復(fù)執(zhí)行某一部分 的操作。又兩類循環(huán)結(jié)構(gòu):,(a) 當(dāng)型(while型)循環(huán)結(jié)構(gòu),它的功能是判斷當(dāng)前給定 的條件p1成立時,執(zhí)行A 框操作,執(zhí)行完A后,再 判斷條件p1是否成立,如 果仍然成立,再執(zhí)行A框, 如此反復(fù)執(zhí)行A框,直到 某一次p1條件不成立為止, 此時不執(zhí)行A框,而從b點 脫離循環(huán)結(jié)構(gòu)。,24.06.2020,.,24,(b)直到型(Until型)循環(huán)結(jié)構(gòu),它的

13、功能是先執(zhí)行A框,然后判斷給定的p2條 件是否成立,如果p2條件不成立,則再執(zhí)行A, 然后再對p2條件作判斷,如果p2條件仍然不成立,又執(zhí)行A如此反復(fù)執(zhí)行A,直到給定 的p2條件成立為止,此時不再執(zhí)行A,從b點脫 離本循環(huán)結(jié)構(gòu)。,24.06.2020,.,25,本章課堂練習(xí),(1) 以下說法中正確的是( ). A) C語言程序總是從第一個函數(shù)開始執(zhí)行 B) 在C語言程序中,要調(diào)用的函數(shù)必須在main()函數(shù) 中定義 C) C語言程序總是從main()函數(shù)開始執(zhí)行 D) C語言程序中的main()函數(shù)必須放在程序的開始 部分,24.06.2020,.,26,解答:C 解釋:C語言程序總是從mai

14、n()函數(shù)開始執(zhí)行,而不論其在程序中的位置。當(dāng)主函數(shù)執(zhí)行完畢時,亦即程序執(zhí)行完畢。除main函數(shù)外,其它函數(shù)都是在執(zhí)行main函數(shù)時被調(diào)用執(zhí)行的。在C語言中,函數(shù)不允許嵌套定義。習(xí)慣上,將主函數(shù)main()放在最前頭,但并不是必須的。,24.06.2020,.,27,(2)以下敘述不正確的是 A)一個C源程序可由一個或多個函數(shù)組成 B) 一個C源程序必須包含一個main函數(shù) C) C程序的基本組成單位是函數(shù) D) 在C程序中,注釋說明只能位于一條語句的后面,24.06.2020,.,28,解答:D 解釋: 凡是用“/*”和“*/”括起來的文字,都是注釋。其出現(xiàn)的位置可以任意。,24.06.20

15、20,.,29,(3)下列標(biāo)識符中,合法的變量名有: A)a.b B)$888 C)A1 D) 3x56,24.06.2020,.,30,解答:C 解釋:變量名只能由字母、數(shù)字和下劃線三種字符所組成,且第一個字符必須為字母或下劃線。C語言的關(guān)鍵字不能用作變量名。另外,C語言對英文字母的大小寫敏感,即同一字母的大小寫,被認(rèn)為是兩個不同的字符。習(xí)慣上,變量名和函數(shù)名中的英文字母用小寫,以增加可讀性。,24.06.2020,.,31,第二章 算法及算法設(shè)計簡介,2.1 算法的概念 2.2 算法的設(shè)計與表達(dá) 2.3 簡單的算法實例 2.4 結(jié)構(gòu)化程序設(shè)計方法簡介,24.06.2020,.,32,算法的

16、概念,任何一個程序應(yīng)包含的如下兩方面的內(nèi)容: (1)對數(shù)據(jù)的描述。在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)(data structure). (2)對操作的描述。即操作步驟,也就是算法(algorithm)。,著名計算機(jī)科學(xué)家沃思(Nikiklaus Wirth)提出公式 數(shù)據(jù)結(jié)構(gòu)算法程序,算法:是對解決某個問題的方法步驟的描述。,程序:從計算機(jī)角度來說,程序是用某種計算機(jī)能理解并執(zhí) 行的計算機(jī)語言描述解決問題的方法和步驟。,24.06.2020,.,33,實際上,一個程序除了以上兩個主要要素之外,還應(yīng)當(dāng)采用 結(jié)構(gòu)化程序設(shè)計方法進(jìn)行程序設(shè)計,并且用某一種計算機(jī)語 言表示。因此,可以

17、這樣表示: 程序算法數(shù)據(jù)結(jié)構(gòu)程序設(shè)計方法語言工具和環(huán)境 在這4個方面中,算法是靈魂,數(shù)據(jù)結(jié)構(gòu)是加工對象,語言 是工具,編程需要采用合適的算法。算法是解決“做什么” 和“怎么做”的問題。,24.06.2020,.,34,算法的表示,1、用自然語言表示算法 采用漢語、英語或其它語言來描述解決問題的方法和步驟。 由于自然語言容易出現(xiàn)“歧義性”,且描述問題的文字冗長, 因此一般很少使用自然語言來描述算法。,24.06.2020,.,35,例1: 有50個學(xué)生 ,要求將他們之中成績在80分以上者打印出來。用n表示學(xué)號,n1代表第一個學(xué)生學(xué)號,ni代表第i個學(xué)生學(xué)號。用g代表學(xué)生成績, gi 代表第i個學(xué)

18、生成績,算法可表示如下: S1:1i S2:讀入學(xué)號ni和成績gi S3: 如果gi 80 ,則打印 ni 和gi ,否則不打印 S4: i+1 i S5: 如果 i 50, 返回S2, 繼續(xù)執(zhí)行; 否則,算法結(jié)束。,24.06.2020,.,36,2、用流程圖表示算法,(1)常用的流程圖符號,24.06.2020,.,37,上例用流程圖表示:,(1) 流程圖表示算法的優(yōu)點: 表示算法直觀形象,比較清楚地顯示出各個框之間 的邏輯關(guān)系。 簡單,易于掌握。,流程圖,24.06.2020,.,38,3、用NS圖表示算法,1973年美國學(xué)者I.Nassi和B.Shneiderman提出了 一種新的流程

19、圖形式。在這種流程圖中,完全去掉 了帶箭頭的流程線。全部算法寫在一個矩形框內(nèi), 在該框內(nèi)還可以包含其他的從屬于它的框。,這種流程圖又稱NS結(jié)構(gòu)化流程圖。,NS流程圖用以下的流程圖符號:,(1)順序結(jié)構(gòu):,A,B,24.06.2020,.,39,(2)選擇結(jié)構(gòu):,P,成立,不成立,A,B,(3)循環(huán)結(jié)構(gòu):,當(dāng)p1成立,A,當(dāng)型循環(huán)結(jié)構(gòu),直到p1成立,A,直到型循環(huán)結(jié)構(gòu),用以上3種NS流程圖中的基本框,可以組成復(fù)雜的NS流程圖,以表示算法,24.06.2020,.,40,上例用NS圖表示:,用NS表示算法如圖,24.06.2020,.,41,4、用偽碼表示算法,偽代碼是用介于自然語言和計算機(jī)語言之

20、間的文字和符號來 描述算法。它不用圖形符號,因此書寫方便,格式緊湊,也 比較好懂,便于向計算機(jī)語言算法(即程序)過渡。,例 有50個學(xué)生,要求將他們之中成績在80分以上者打印出來。 用n表示學(xué)生學(xué)號,n1表示第一個學(xué)生學(xué)號,ni表示第i個學(xué)生 學(xué)號。用g表示學(xué)生成績,gi表示第i個學(xué)生成績。,24.06.2020,.,42,BEGIN(算法開始) 1=i While ii END(算法結(jié)束),用偽代碼表示算法如下:,24.06.2020,.,43,5、用計算機(jī)語言表示算法,設(shè)計算法的目的是為了實現(xiàn)算法。因此,不僅要考 慮如何設(shè)計一個算法,也要考慮如何實現(xiàn)一個算法。,我們的任務(wù)是用計算機(jī)解題,也

21、就是要用計算機(jī)實 現(xiàn)算法。計算機(jī)是無法識別流程圖和偽代碼的。只 有用計算機(jī)語言編寫的程序才能被計算機(jī)執(zhí)行(當(dāng) 然還要經(jīng)過編譯成目標(biāo)程序才能被計算機(jī)識別和執(zhí) 行)。因此,在用流程圖或偽代碼描述出一個算法 后,還要將它轉(zhuǎn)換成計算機(jī)語言程序。,24.06.2020,.,44,例: 有50個學(xué)生,要求將他們之中成績在80分以上者打印出來。 用n表示學(xué)生學(xué)號,n1表示第一個學(xué)生學(xué)號,ni表示第i個學(xué)生 學(xué)號。用g表示學(xué)生成績,gi表示第i個學(xué)生成績。,C語言程序如下: main( ) int g50,n50,i; for(i=0;i=80) printf(“%6d,%3dn”,ni,gi); ,24.0

22、6.2020,.,45,例2:對一個大于或等于3的正整數(shù),判斷它是不是一個素數(shù)。,方法:將 n (其中n 3) 作為被除數(shù), 將2 到(n-1) 各個整數(shù)輪流作為除數(shù),如果都不能被整除,則n為素數(shù)。,簡單的算法實例,24.06.2020,.,46,算法表示如下: S1:輸入n的值 S2:2 i ( i 作為除數(shù)) S3: n 被 i 除,得余數(shù) r S4: 如果 r 等于 0 , 表示 n 能 被 i 整除,則打印 n “不是素數(shù)”,算法結(jié)束;否則執(zhí)行S5 S5:i+1 i S6: 如果 i n-1, 返回S3;否則,打印 n “是素數(shù)”,算法結(jié)束。,24.06.2020,.,47,S1: 1

23、 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。,24.06.2020,.,48,結(jié)構(gòu)化程序設(shè)計方法簡介,1、三種基本結(jié)構(gòu)回顧,(1)順序結(jié)構(gòu),24.06.2020,.,49,(2)選擇結(jié)構(gòu),或稱分支結(jié)構(gòu),24.06.2020,.,50,(3) 循環(huán)結(jié)構(gòu),它又稱為重復(fù)結(jié)構(gòu),即反復(fù)執(zhí)行某一部分 的操作。又兩類循環(huán)結(jié)構(gòu):,(

24、a) 當(dāng)型(while型)循環(huán)結(jié)構(gòu),24.06.2020,.,51,(b)直到型(Until型)循環(huán)結(jié)構(gòu),24.06.2020,.,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ù)雜問題的求解過程分階段進(jìn)行。每個階段的問題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。,24.06.2020,.,53,1 = i,i+1 =i,gi80,i50,結(jié)束,開始,打印ni,gi,Y,N,N,Y,讀入ni和gi,24.06.2020,.,54,解答: ()用自然語言表示 ()用傳統(tǒng)的流程圖表示 ()NS

25、流程圖 ()用偽代碼表示等。,1、算法的表示形式主要有哪些?,課堂練習(xí),24.06.2020,.,55,2、設(shè)計算法:A、B兩人各有一桶油,現(xiàn)兩人要將各自桶 內(nèi)的油互換。,解答:必須借助另外一個空桶,并按如下算法進(jìn)行: (用Si表示第i步操作,A的桶叫A,B的桶叫B,空桶叫M) 開始: S0:將A桶中的油倒入M桶中; S1:將B桶中的油倒入A桶中; S2:將M桶中的油倒入B桶中;,24.06.2020,.,56,3、設(shè)計算法寫出求n!的算法,解答: S0:給出n的值; S1: 1=p; S2: 2=i; S3: p*i=p; S4: i+1=i; S5: 若i、=、!),邏輯運算符(!、 fl

26、oat 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,d*e,d/e的結(jié)果 分別為15.0,5.0,50.0,0.5 nmf*g/d的運算順序相當(dāng)于 (nm(f*g)/d),結(jié)果是3.0 nm*f*d的運算順序相當(dāng)于 (nm)*f)*d,結(jié)果是25.0,如果參加運算的兩個數(shù)中有一個為浮點型,則結(jié)果是double型,2 增1減1運算符,(1)增1減1運算符的運算對象、運算規(guī)則與結(jié)果、 結(jié)合性如下表所示:,對象數(shù),單 目,名稱,運算符,運算規(guī)則,運算對象,運算結(jié)果,結(jié)合性

27、,增1(前綴),先加1 后使用,增1(后綴),減1(前綴),減1(后綴),先使用 后加1,先減1 后使用,先使用 后減1,整型、字 符型、指 針型變量 或數(shù)組 元素,同運算 對象的 類型,自 右 向 左,(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可看成整型,其值分別為

28、98,66),則: c1 的值是99,運算后c1的值是c c1 的值是98,運算后c1的值是a c1c2的值是164,運算后c1的值是c,c2的值是B c1c2的值是32,運算后c1的值是a,c2的值是B,三.賦值運算符,1.賦值運算符,賦值運算符是雙目運算符,賦值運算符的左邊必須是變量, 右邊是表達(dá)式。,(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,n

29、5,n6; float f13.0,f2;,則: c2n1運算后,c2的值是65,n1的值不變。 n2!c1運算后,n2的值是0,c1的值不變。 f2f10.001運算后,f2的值是3.001,f1的值不變。 n3c1n1|c1!n1運算后,n3的值是1,c1和n1 的值不變。 注:運算順序相當(dāng)于 n3(c1n1)|(c1!n1) n4n5n6(n1)運算后,n4,n5,n6的值 均是64,n1的值是64。,注意:上述表達(dá)式的值就等于賦值表達(dá)式中的最左邊的變量值。,2 .算術(shù)自反賦值運算符,(1) 運算規(guī)則,對象數(shù),名稱,運算符,運算規(guī)則,運算對象,運算結(jié)果,結(jié)合性,雙目,加賦值,減賦值,乘賦

30、值,除賦值,模賦值,*,/ =,%=,a+=b相當(dāng)于 a=a+(b),a=b相當(dāng)于 a=a(b),a*=b相當(dāng)于 a=a*(b),a/=b相當(dāng)于 a=a/(b),a%=b相當(dāng)于 a=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的值

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

32、的值為9 da,ed,fe 運算結(jié)果:a為1,d為1,e為1,f為1,表達(dá)式的值為1,五.條件運算符,1.條件運算符,2.條件運算符的優(yōu)先級, 其它運算符 優(yōu)先于 條件運算符 優(yōu)先于 賦值、算術(shù)自反賦值運算符 條件運算符的結(jié)合性是自右向左,3.例子,(1) 設(shè)整型變量a,b,c,d均為2 則ab?(c1):(d0); 結(jié)果a,b,d不變,c為1,表達(dá)式的值為1,(2) a13?(ba2):(ca3); 結(jié)果a,c不變,b為4,表達(dá)式值為4,(3) ab?(c0):(ab?(c1):(c1)); 結(jié)果a,b不變,c為0,表達(dá)式的值為0,1.長度運算符,六.長度運算符,2.長度運算符優(yōu)先級, 和單

33、目算術(shù)運算符、單目邏輯運算符、增1減1運算符同級別,3.例子,設(shè)變量定義如下: int n; short s; unsigned long u3; float f; char c;,則 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在微機(jī)上運行的結(jié)果。,24.06.2020,.,107,七 位運算 C語言中提供的位運算符: 、 、 (這是賦值

34、語句) a+ + (這是表達(dá)式) a+ +; (這是賦值語句,等價 與 a=a+1;),24.06.2020,.,117,3.5 輸入輸出在C語言中的實現(xiàn),1.輸入輸出的概念 從計算機(jī)向外部輸出設(shè)備(如顯示屏、打印機(jī)、磁盤 等)輸出數(shù)據(jù)稱為“輸出”,從外部向輸入設(shè)備(如鍵盤、 磁盤、光盤、掃描儀等)輸入數(shù)據(jù)稱為“輸入”。,2.C語言本身不提供輸入輸出語句,輸入和輸出操作是由 函數(shù)來實現(xiàn)的。在C標(biāo)準(zhǔn)函數(shù)庫中提供了一些輸入輸出函 數(shù),例如,printf函數(shù)和scanf函數(shù)。,24.06.2020,.,118,3.在使用C語言庫函數(shù)時,要用預(yù)編譯命令“include” 將有關(guān)的“頭文件”包括到用戶源

35、文件中。在調(diào)用標(biāo)準(zhǔn) 輸入輸出庫函數(shù)時,文件開頭應(yīng)有以下預(yù)編譯命令: # include 或# include “stdio.h”,4.允許在使用printf和scanf兩個函數(shù)時可不加#include 命令。,24.06.2020,.,119,一、字符數(shù)據(jù)的輸入輸出,1.putchar函數(shù)(字符輸出函數(shù)) 函數(shù)格式:putchar( C ) ; C可以是字符型變量或整型變量或常量 函數(shù)的功能:向終端輸出一個字符,24.06.2020,.,120,2.程序?qū)嵗?#include main( ) char a, b, c ; a=B; b=O; c=Y; putchar(a); putchar(b

36、); putchar(c); ,注意:該程序可以輸出控制字符,如putchar(n) 輸出一個換行符,也可以輸出其他轉(zhuǎn)義字符 如 putchar(101) (輸出字符A) putchar() (輸出單引號字符),運行結(jié)果: BOY,24.06.2020,.,121,3.getchar 函數(shù)(字符輸入函數(shù)) 函數(shù)格式,getchar ( ) 函數(shù)的功能:從終端輸入一個字符,函數(shù)的值就是 從輸入設(shè)備得到的字符。,4.程序?qū)嵗?#include main ( ) char c; c=getchar( ); putchar(c); 在運行時,如果從鍵盤輸入字符a并按回車鍵,就會在 屏幕上看到輸出的字符

37、a。 a (輸入a后,按“回車”鍵,字符才送到內(nèi)存) a (輸出變量 c 的值a),24.06.2020,.,122,注意: (1)getchar( )只能接收一個字符,getchar函數(shù)收到 的字符可以賦給一個字符變量或整型變量。 (2)若在程序中調(diào)用getchar、putchar函數(shù),則必須 在程序的開頭部分加上“包含命令” #include 或 #include “stdio.h”,24.06.2020,.,123,二、格式輸入與輸出,(一)、printf 函數(shù)(格式輸出函數(shù)),1.printf函數(shù)的一般格式為 printf(“格式控制字符串”,輸出表列) 括弧內(nèi)包括兩部分: (1) “

38、格式控制字符串”是用雙引號括起來的字符串,也稱 “轉(zhuǎn)換控制字符串”,它包括兩種信息: 格式說明,由“”和格式字符組成,如%d, %f等。 它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出。格式 說明總是由“”字符開始的。 普通字符,即需要原樣輸出的字符。 (2)“輸出表列”是需要輸出的一些數(shù)據(jù),可以是表達(dá) 式。,24.06.2020,.,124,下面是一個例子: printf(“%d %d ”, a,b );,格式說明 輸出表列,printf(“a%d b=%d”,a,b);,格式說明 輸出表列,24.06.2020,.,125,2.格式字符 常用的有以下幾種格式字符:,(1)d 格式字符。用來輸出

39、十進(jìn)制整數(shù)。有以下 幾種格式字符: d,按整型數(shù)據(jù)的實際長度輸出。 md,m為指定的輸出字段的寬度。如果數(shù)據(jù) 的位數(shù)小于m,則左端補(bǔ)以空格,若大于m,則按實 際位數(shù)輸出。如 printf(“%4d,%4d”,a,b); 若a123,b12345,則輸出結(jié)果為 |_| 123,12345 ld,輸出長整型數(shù)據(jù)。如 long a=135790; printf(“%ld”,a);,24.06.2020,.,126,對long型數(shù)據(jù)應(yīng)當(dāng)用ld格式輸出。對長整型數(shù)據(jù)也可以 指定字段寬度,如將上面printf函數(shù)中的“l(fā)d”改為“8ld” 則輸出為: |_| |_| 135790 (8列) 一個int型數(shù)

40、據(jù)可以用d或ld格式輸出。,(2)O格式符,以八進(jìn)制數(shù)形式輸出整數(shù)。由于是將內(nèi)存 單元中的各位的值(0或1)按八進(jìn)制形式輸出,因此輸出 的數(shù)值不帶符號,即將符號位也一起作為八進(jìn)制數(shù)的一部 分輸出。例如: int a= -1; printf(“%d,%o”,a,a);,24.06.2020,.,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)存單元中的存放形式(以補(bǔ)碼形式存放)如下:,24.06.2

41、020,.,128,(3)x格式符,以十六進(jìn)制數(shù)形式輸出整數(shù)。同樣 不會出現(xiàn)負(fù)的十六進(jìn)制數(shù)。 例如 int a=1; Printf(“%x,%o,%d”,a,a,a);,輸出結(jié)果為: ffff,177777,1,24.06.2020,.,129,(4)u格式符,用來輸出unsigned型數(shù)據(jù),即無符號數(shù), 以十進(jìn)制形式輸出。,(5)C格式符,用來輸出一個字符。 如: char c=a; printf(“%c”,c); 輸出字符a,請注意:“c”中的 c是格式符,引號右邊 的c是變量名,不要搞混。一個整數(shù),只要它的值在0255 范圍內(nèi),也可以用字符形式輸出,在輸出前,系統(tǒng)會將該 整數(shù)作為ASCI

42、I碼轉(zhuǎn)換成相應(yīng)的字符;反之,一個字符數(shù)據(jù) 也可以用整數(shù)形式輸出。,24.06.2020,.,130,(6)S格式符,用來輸出一個字符串。有幾種用法:,s,例如: printf(“%s”, “CHINA” ); 輸出“CHINA”字符串(不包括雙引號)。,ms,輸出的字符率占m列,如字符串本身長度大 于m,則突破m的限制,將字符串全部輸出。若串 長小于m,則左補(bǔ)空格。,24.06.2020,.,131,ms,如果串長小于m,則在m列范圍內(nèi), 字符率向左靠,右補(bǔ)空格。,mns,輸出占m列,但只取字符串中左端n個字 符。這n個字符輸出在m列的右側(cè),左補(bǔ)空格。,mns,其中m、n含義同上,n個字符輸出

43、在m 列范圍的左側(cè),右補(bǔ)空格。如果nm,則m自動取 n值,即保證n個字符正常輸出。,24.06.2020,.,132,(7)f格式符,用來輸出實數(shù)(包括單、雙精度),以 小數(shù)形式輸出。有以下幾種用法:,m.nf指定輸出的數(shù)據(jù)共占m列,其中有n位小數(shù)。 如果數(shù)值長度小于m,則左端補(bǔ)空格。, -mnf與m.nf基本相同,只是使輸出的數(shù)值 向左端靠,右端補(bǔ)空格。,f,不指定字段寬度,由系統(tǒng)自動指定,使整數(shù) 部分全部如數(shù)輸出。并輸出6位小數(shù)。應(yīng)當(dāng)注意,并非全 部數(shù)字都是有效數(shù)字。單精度實數(shù)的有效位數(shù)一般為7位。,24.06.2020,.,133,(1)字符數(shù)據(jù)的輸出: main ( ) char c=

44、a; int i=97; printf(“%c,%dn”,c,c); printf(“%c,%dn”,i,i); ,運行結(jié)果為: a,97 a,97,3.例子,24.06.2020,.,134,(2) 字符串的輸出 main( ) printf(“%5s,%7.2s,%.4s,%-5.3sn”,”CHINA”, ”CHINA”,“CHINA”,”CHINA”); 輸出如下: CHINA,|_| |_| |_| |_| |_| CH,CHIN,CHI |_| |_| 其中第3個輸出項,格式說明為“%.4s”,即只指定n,沒指定m, 自動使 m=n= 4,故占4列。,24.06.2020,.,13

45、5,(3)輸出實數(shù)時的有效位數(shù): main( ) float x,y; x=111111.111;y=222222.222; printf(“%f”,x+y); ,運行結(jié)果為: 333333.328125,24.06.2020,.,136,(4)輸出實數(shù)時指定小數(shù)位數(shù): main( ) float f=123.456; printf(“%f |_| |_| %10f |_| |_| %10.2f |_| |_| %.2f |_| |_| %-10.2fn”, f,f,f,f,f); ,運行結(jié)果為: 123.456001 |_| |_| 123.456001 |_| |_| |_| |_| |_| |_| 123.46 |_| |_| 123.46 |_| |_| 123.46 |_| |_| |_| |_|,24.06.2020,.,137,4.格式符小結(jié),printf格式字符,24.06.2020,.,138,24.06.2020,.,139,printf的附加格式說明字符,24.06.2020,.,140,5.使用printf函數(shù)時,還需注意以下幾點,(1)除了X,E,G外,其他格式字符必須用小寫字母, 如d不能寫成D。 (2)可以在printf函數(shù)中的“格式控制”字符串內(nèi)包含“轉(zhuǎn) 義字符”,如“n”, “ t”, “ b”,

溫馨提示

  • 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

提交評論