




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、25.06.2020,a,1,武漢理工大學(xué)計(jì)算機(jī)學(xué)院,授課教師:王紅霞,C語言程序設(shè)計(jì),25.06.2020,a,2,選用教材與參考書,主教科書 顧治華、陳天煌等 C語言程序設(shè)計(jì) 機(jī)械工業(yè)出版社 2007.2 參考教材 顧治華、陳天煌等C語言程序設(shè)計(jì) 實(shí)驗(yàn)指導(dǎo) 機(jī)械工業(yè)出版社 2007.2 參考書 譚浩強(qiáng) C語言程序設(shè)計(jì) 清華大學(xué)出版社,25.06.2020,a,3,課程內(nèi)容,第一章 C語言程序設(shè)計(jì)概述 第二章 算法及算法設(shè)計(jì)簡介 第三章 數(shù)據(jù)描述與基本操作 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì) 第五章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 第六章 數(shù)組與指針 第七章 函數(shù)與模塊化程序設(shè)計(jì)方法,25.06.2020,a,4,
2、第一章 C語言程序設(shè)計(jì)基礎(chǔ),1.1 程序與程序設(shè)計(jì) 1.2 C語言簡介 1.3 簡單的C語言程序 1.4 C語言程序的上機(jī)步驟 1.5 C語言的基本詞法 1.6 C語言程序的基本結(jié)構(gòu),25.06.2020,a,5,程序與計(jì)算機(jī)語言,程序是存放在計(jì)算機(jī)中的操作指令的集合。,用程序設(shè)計(jì)語言安排好的處理問題的步驟稱為計(jì)算機(jī)程序,用程序設(shè)計(jì)語言編制一個(gè)能完成某項(xiàng)任務(wù)的計(jì)算機(jī)程序的過程叫做計(jì)算機(jī)程序設(shè)計(jì)。,程序設(shè)計(jì)=數(shù)據(jù)結(jié)構(gòu)+算法+程序設(shè)計(jì)方法+編程語言,程序設(shè)計(jì)的關(guān)鍵:必須掌握一種程序設(shè)計(jì)語言。掌握程序設(shè)計(jì)的邏輯思維。,25.06.2020,a,6,程序設(shè)計(jì)過程,(1)問題的提出,要達(dá)到的要求; (2
3、)確定數(shù)據(jù)結(jié)構(gòu)和所采用的算法; (3)編制程序; (4)調(diào)試程序; (5)整理并寫出文檔;,25.06.2020,a,7,C語言的特點(diǎn),(1)語言簡潔、緊湊,使用方便、靈活。C語言一共只有 32個(gè)關(guān)鍵字,主要用小寫字母表示。,(2) 比其他高級語言更接近硬件,比低級語言更接近算法。 程序易編、易讀、易查錯(cuò)、易修改,兼有高級語言和 低級語言的優(yōu)點(diǎn)。,(3) 數(shù)據(jù)類型和運(yùn)算符十分豐富,程序設(shè)計(jì)和算法描述更為 簡單和方便。,(4) 語法結(jié)構(gòu)十分簡單,語句數(shù)目少,簡單易學(xué)。,25.06.2020,a,8,(6) 它是一種模塊化的程序設(shè)計(jì)語言,適合大型軟件的研制 和調(diào)試。,(5) 它是一種結(jié)構(gòu)化程序設(shè)計(jì)
4、語言,提供了完整的程序控制 語句(選擇語句和循環(huán)語句),很適合結(jié)構(gòu)化的程序設(shè)計(jì)方 法。,(7) 生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。,(8) 用c語言寫的程序可移植性好。,(9) 它提供了大量的庫函數(shù)以供調(diào)用,簡化了程序設(shè)計(jì)工作。,25.06.2020,a,9,C語言程序的結(jié)構(gòu),C語言是結(jié)構(gòu)化的程序設(shè)計(jì)語言。 C語言是模塊化的程序設(shè)計(jì)語言,程序是由函數(shù)構(gòu)成的。一個(gè)C源程序至少包含一個(gè)main函數(shù),也可以包含一個(gè)main函數(shù)和若干個(gè)其他函數(shù)。因此,函數(shù)是C程序的基本單位。 一個(gè)函數(shù)由兩部分組成: 函數(shù)的首部,函數(shù)的第一行。包括函數(shù)名、函數(shù)類型、函數(shù)屬性、函數(shù)參數(shù)(形參)名、參數(shù)類型。 函數(shù)體,即
5、函數(shù)首部下面的大括弧.內(nèi)的部分。如果一個(gè) 函數(shù)內(nèi)有多個(gè)括弧,則最外層的一對 為函數(shù)的范圍。 函數(shù)體一般包括: 聲明部分:在這部分中定義所用到的變量。 執(zhí)行部分: 由若干個(gè)語句組成。,25.06.2020,a,10,(4) 一個(gè)C程序總是從main函數(shù)開始的,而不論main函數(shù)在整 個(gè)程序中的位置如何(main函數(shù)可以放在程序最前頭,也可 以放在程序最后,或在一些函數(shù)之前,在另一些函數(shù)之后)。,(5) C程序書寫格式自由,一行內(nèi)可以寫幾個(gè)語句,一個(gè)語句 可以分寫在多行上。,(6) 每個(gè)語句和數(shù)據(jù)定義的最后必須有一個(gè)分號。分號是C語 句的必要組成部分。分號不可少。,(7) C語言本身沒有輸入輸出語
6、句。輸入輸出的操作是由庫 函數(shù)scanf和printf等函數(shù)來完成的。,(8) 可以用/*/對C程序中的任何部分作注釋。,25.06.2020,a,11,簡單的C語言程序示例,例一 main( ) printf (“This is a C program.n”); ,本程序的作用是輸出以下一行信息: This is a C program.,25.06.2020,a,12,例二 main( ) int a,b,sum; /*這是定義變量*/ a=123;b=456; /*以下3行為C語句*/ sum=a+b; printf(“sum is %dn”,sum); ,程序的運(yùn)行結(jié)果: Sum is
7、 579,25.06.2020,a,13,例三,/* example1.3 輸入兩個(gè)數(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”, ,運(yùn)行結(jié)果: 4,6 max=6,25.06.2020,a,14,C程序的上機(jī)步驟,25.06.2020,a,15,C語言的基本詞法標(biāo)識符,定義:在程序中使用的變量名、函數(shù)名、標(biāo)號等統(tǒng)稱為 標(biāo)識符。
8、除庫函數(shù)的函數(shù)名由系統(tǒng)定義外,其余的都由用戶自己定義。,命名規(guī)則:標(biāo)識符只能是字母(AZ,az)、數(shù)字(09)、下劃線(_)組成的字符串,并且其第一個(gè)字符必須是字母或下劃線。,例如:以下標(biāo)識符是合法的: a,x,x3,BOOK_1,sum5,_x7。 以下標(biāo)識符是非法的: 3s,s*T,-3x,bowy-1,M.D.John,ab。,25.06.2020,a,16,(1)標(biāo)準(zhǔn)C不限制標(biāo)識符的長度,但它受各種版本的C語言編 譯系統(tǒng)限制,同時(shí)也受到具體機(jī)器的限制。Turbo C規(guī)定標(biāo)識符的長度為32。一般情況下,標(biāo)識符的長度不要超過8個(gè)字符。,(2)在標(biāo)識符中,大小寫是有區(qū)別的。例如SUM和sum
9、是兩個(gè) 不同的標(biāo)識符。變量名應(yīng)盡量使用小寫字母,以增加程序的可讀性。,(3)標(biāo)識符雖然可由程序員隨意定義,但標(biāo)識符是用于標(biāo)識某個(gè)量的符號。因此,命名應(yīng)盡量有相應(yīng)的意義,以便于閱讀理解,做到“顧名思義”。 在C語言中,所有的變量都是先定義后應(yīng)用,使用沒有定義的變量名被認(rèn)為是“非法”的。,在使用標(biāo)識符時(shí)還必須注意以下幾點(diǎn):,25.06.2020,a,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等。,25.06.2020,a,18,(2)語句定義符 用于表示一個(gè)語句的功能。如條件語句的語句定義符if else,循環(huán)語句的語句定義符do,while,for等。,(3)預(yù)處理命令字 用于表示一個(gè)預(yù)處理命令,使用時(shí)前面要加“”。如include,define,ifdef,endif等。 關(guān)鍵字后必須有空格、圓括號、尖括號、雙引號等分隔符,否則與其它字符一起組成新的標(biāo)識符。,25.06.2020,a,19,C語言的基本詞法其
11、它,運(yùn)算符 語言中含有相當(dāng)豐富的運(yùn)算符。運(yùn)算符與變量,函數(shù)一起組成表達(dá)式,表示各種運(yùn)算功能。運(yùn)算符由一個(gè)或多個(gè)字符組成。,分隔符 在語言中采用的分隔符有逗號和空格兩種。逗號主要是用在類型說明和函數(shù)參數(shù)表中分隔各個(gè)變量??崭穸嘤糜谡Z句各單詞之間作間隔符。,常量 C語言中使用的常量可分為數(shù)字常量、字符常量、字符串常量、符號常量、轉(zhuǎn)義字符等多種。,25.06.2020,a,20,語言的字符集,(1)字母 小寫字母az共26個(gè),大寫字 母AZ共26個(gè)。 (2)數(shù)字09共10個(gè)。 (3)空格符、制表符、換行符等統(tǒng)稱為空白符。 (4)標(biāo)點(diǎn)和特殊字符,25.06.2020,a,21,C語言程序設(shè)計(jì)的基本結(jié)構(gòu)
12、,(1)順序結(jié)構(gòu),25.06.2020,a,22,(2)選擇結(jié)構(gòu),或稱分支結(jié)構(gòu),此結(jié)構(gòu)中必包含一個(gè)判斷框。根據(jù)給定的條件 P是否成立而選擇執(zhí)行A框或B框,25.06.2020,a,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成立時(shí),執(zhí)行A 框操作,執(zhí)行完A后,再 判斷條件p1是否成立,如 果仍然成立,再執(zhí)行A框, 如此反復(fù)執(zhí)行A框,直到 某一次p1條件不成立為止, 此時(shí)不執(zhí)行A框,而從b點(diǎn) 脫離循環(huán)結(jié)構(gòu)。,25.06.2020,a,24,(b)直到型(Until型)循環(huán)結(jié)構(gòu),它的
13、功能是先執(zhí)行A框,然后判斷給定的p2條 件是否成立,如果p2條件不成立,則再執(zhí)行A, 然后再對p2條件作判斷,如果p2條件仍然不成立,又執(zhí)行A如此反復(fù)執(zhí)行A,直到給定 的p2條件成立為止,此時(shí)不再執(zhí)行A,從b點(diǎn)脫 離本循環(huán)結(jié)構(gòu)。,25.06.2020,a,25,本章課堂練習(xí),(1) 以下說法中正確的是( ). A) C語言程序總是從第一個(gè)函數(shù)開始執(zhí)行 B) 在C語言程序中,要調(diào)用的函數(shù)必須在main()函數(shù) 中定義 C) C語言程序總是從main()函數(shù)開始執(zhí)行 D) C語言程序中的main()函數(shù)必須放在程序的開始 部分,25.06.2020,a,26,解答:C 解釋:C語言程序總是從mai
14、n()函數(shù)開始執(zhí)行,而不論其在程序中的位置。當(dāng)主函數(shù)執(zhí)行完畢時(shí),亦即程序執(zhí)行完畢。除main函數(shù)外,其它函數(shù)都是在執(zhí)行main函數(shù)時(shí)被調(diào)用執(zhí)行的。在C語言中,函數(shù)不允許嵌套定義。習(xí)慣上,將主函數(shù)main()放在最前頭,但并不是必須的。,25.06.2020,a,27,(2)以下敘述不正確的是 A)一個(gè)C源程序可由一個(gè)或多個(gè)函數(shù)組成 B) 一個(gè)C源程序必須包含一個(gè)main函數(shù) C) C程序的基本組成單位是函數(shù) D) 在C程序中,注釋說明只能位于一條語句的后面,25.06.2020,a,28,解答:D 解釋: 凡是用“/*”和“*/”括起來的文字,都是注釋。其出現(xiàn)的位置可以任意。,25.06.20
15、20,a,29,(3)下列標(biāo)識符中,合法的變量名有: A)a.b B)$888 C)A1 D) 3x56,25.06.2020,a,30,解答:C 解釋:變量名只能由字母、數(shù)字和下劃線三種字符所組成,且第一個(gè)字符必須為字母或下劃線。C語言的關(guān)鍵字不能用作變量名。另外,C語言對英文字母的大小寫敏感,即同一字母的大小寫,被認(rèn)為是兩個(gè)不同的字符。習(xí)慣上,變量名和函數(shù)名中的英文字母用小寫,以增加可讀性。,25.06.2020,a,31,第二章 算法及算法設(shè)計(jì)簡介,2.1 算法的概念 2.2 算法的設(shè)計(jì)與表達(dá) 2.3 簡單的算法實(shí)例 2.4 結(jié)構(gòu)化程序設(shè)計(jì)方法簡介,25.06.2020,a,32,算法的
16、概念,任何一個(gè)程序應(yīng)包含的如下兩方面的內(nèi)容: (1)對數(shù)據(jù)的描述。在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)(data structure). (2)對操作的描述。即操作步驟,也就是算法(algorithm)。,著名計(jì)算機(jī)科學(xué)家沃思(Nikiklaus Wirth)提出公式 數(shù)據(jù)結(jié)構(gòu)算法程序,算法:是對解決某個(gè)問題的方法步驟的描述。,程序:從計(jì)算機(jī)角度來說,程序是用某種計(jì)算機(jī)能理解并執(zhí) 行的計(jì)算機(jī)語言描述解決問題的方法和步驟。,25.06.2020,a,33,實(shí)際上,一個(gè)程序除了以上兩個(gè)主要要素之外,還應(yīng)當(dāng)采用 結(jié)構(gòu)化程序設(shè)計(jì)方法進(jìn)行程序設(shè)計(jì),并且用某一種計(jì)算機(jī)語 言表示。因此,可以
17、這樣表示: 程序算法數(shù)據(jù)結(jié)構(gòu)程序設(shè)計(jì)方法語言工具和環(huán)境 在這4個(gè)方面中,算法是靈魂,數(shù)據(jù)結(jié)構(gòu)是加工對象,語言 是工具,編程需要采用合適的算法。算法是解決“做什么” 和“怎么做”的問題。,25.06.2020,a,34,算法的表示,1、用自然語言表示算法 采用漢語、英語或其它語言來描述解決問題的方法和步驟。 由于自然語言容易出現(xiàn)“歧義性”,且描述問題的文字冗長, 因此一般很少使用自然語言來描述算法。,25.06.2020,a,35,例1: 有50個(gè)學(xué)生 ,要求將他們之中成績在80分以上者打印出來。用n表示學(xué)號,n1代表第一個(gè)學(xué)生學(xué)號,ni代表第i個(gè)學(xué)生學(xué)號。用g代表學(xué)生成績, gi 代表第i個(gè)學(xué)
18、生成績,算法可表示如下: S1:1i S2:讀入學(xué)號ni和成績gi S3: 如果gi 80 ,則打印 ni 和gi ,否則不打印 S4: i+1 i S5: 如果 i 50, 返回S2, 繼續(xù)執(zhí)行; 否則,算法結(jié)束。,25.06.2020,a,36,2、用流程圖表示算法,(1)常用的流程圖符號,25.06.2020,a,37,上例用流程圖表示:,(1) 流程圖表示算法的優(yōu)點(diǎn): 表示算法直觀形象,比較清楚地顯示出各個(gè)框之間 的邏輯關(guān)系。 簡單,易于掌握。,流程圖,25.06.2020,a,38,3、用NS圖表示算法,1973年美國學(xué)者I.Nassi和B.Shneiderman提出了 一種新的流程
19、圖形式。在這種流程圖中,完全去掉 了帶箭頭的流程線。全部算法寫在一個(gè)矩形框內(nèi), 在該框內(nèi)還可以包含其他的從屬于它的框。,這種流程圖又稱NS結(jié)構(gòu)化流程圖。,NS流程圖用以下的流程圖符號:,(1)順序結(jié)構(gòu):,A,B,25.06.2020,a,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流程圖,以表示算法,25.06.2020,a,40,上例用NS圖表示:,用NS表示算法如圖,25.06.2020,a,41,4、用偽碼表示算法,偽代碼是用介于自然語言和計(jì)算機(jī)語言之
20、間的文字和符號來 描述算法。它不用圖形符號,因此書寫方便,格式緊湊,也 比較好懂,便于向計(jì)算機(jī)語言算法(即程序)過渡。,例 有50個(gè)學(xué)生,要求將他們之中成績在80分以上者打印出來。 用n表示學(xué)生學(xué)號,n1表示第一個(gè)學(xué)生學(xué)號,ni表示第i個(gè)學(xué)生 學(xué)號。用g表示學(xué)生成績,gi表示第i個(gè)學(xué)生成績。,25.06.2020,a,42,BEGIN(算法開始) 1=i While ii END(算法結(jié)束),用偽代碼表示算法如下:,25.06.2020,a,43,5、用計(jì)算機(jī)語言表示算法,設(shè)計(jì)算法的目的是為了實(shí)現(xiàn)算法。因此,不僅要考 慮如何設(shè)計(jì)一個(gè)算法,也要考慮如何實(shí)現(xiàn)一個(gè)算法。,我們的任務(wù)是用計(jì)算機(jī)解題,也
21、就是要用計(jì)算機(jī)實(shí) 現(xiàn)算法。計(jì)算機(jī)是無法識別流程圖和偽代碼的。只 有用計(jì)算機(jī)語言編寫的程序才能被計(jì)算機(jī)執(zhí)行(當(dāng) 然還要經(jīng)過編譯成目標(biāo)程序才能被計(jì)算機(jī)識別和執(zhí) 行)。因此,在用流程圖或偽代碼描述出一個(gè)算法 后,還要將它轉(zhuǎn)換成計(jì)算機(jī)語言程序。,25.06.2020,a,44,例: 有50個(gè)學(xué)生,要求將他們之中成績在80分以上者打印出來。 用n表示學(xué)生學(xué)號,n1表示第一個(gè)學(xué)生學(xué)號,ni表示第i個(gè)學(xué)生 學(xué)號。用g表示學(xué)生成績,gi表示第i個(gè)學(xué)生成績。,C語言程序如下: main( ) int g50,n50,i; for(i=0;i=80) printf(“%6d,%3dn”,ni,gi); ,25.0
22、6.2020,a,45,例2:對一個(gè)大于或等于3的正整數(shù),判斷它是不是一個(gè)素?cái)?shù)。,方法:將 n (其中n 3) 作為被除數(shù), 將2 到(n-1) 各個(gè)整數(shù)輪流作為除數(shù),如果都不能被整除,則n為素?cái)?shù)。,簡單的算法實(shí)例,25.06.2020,a,46,算法表示如下: S1:輸入n的值 S2:2 i ( i 作為除數(shù)) S3: n 被 i 除,得余數(shù) r S4: 如果 r 等于 0 , 表示 n 能 被 i 整除,則打印 n “不是素?cái)?shù)”,算法結(jié)束;否則執(zhí)行S5 S5:i+1 i S6: 如果 i n-1, 返回S3;否則,打印 n “是素?cái)?shù)”,算法結(jié)束。,25.06.2020,a,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。,25.06.2020,a,48,結(jié)構(gòu)化程序設(shè)計(jì)方法簡介,1、三種基本結(jié)構(gòu)回顧,(1)順序結(jié)構(gòu),25.06.2020,a,49,(2)選擇結(jié)構(gòu),或稱分支結(jié)構(gòu),25.06.2020,a,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),25.06.2020,a,51,(b)直到型(Until型)循環(huán)結(jié)構(gòu),25.06.2020,a,52,2、結(jié)構(gòu)化程序,所謂結(jié)構(gòu)化程序,就是僅僅使用順序、選擇、循環(huán)等三種基本結(jié)構(gòu)所構(gòu)造的程序。,3、結(jié)構(gòu)化程序設(shè)計(jì)方法,結(jié)構(gòu)化程序設(shè)計(jì)方法的基本思想是,把一個(gè)復(fù)雜問題的求解過程分階段進(jìn)行。每個(gè)階段的問題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。,25.06.2020,a,53,1 = i,i+1 =i,gi80,i50,結(jié)束,開始,打印ni,gi,Y,N,N,Y,讀入ni和gi,25.06.2020,a,54,解答: ()用自然語言表示 ()用傳統(tǒng)的流程圖表示 ()NS
25、流程圖 ()用偽代碼表示等。,1、算法的表示形式主要有哪些?,課堂練習(xí),25.06.2020,a,55,2、設(shè)計(jì)算法:A、B兩人各有一桶油,現(xiàn)兩人要將各自桶 內(nèi)的油互換。,解答:必須借助另外一個(gè)空桶,并按如下算法進(jìn)行: (用Si表示第i步操作,A的桶叫A,B的桶叫B,空桶叫M) 開始: S0:將A桶中的油倒入M桶中; S1:將B桶中的油倒入A桶中; S2:將M桶中的油倒入B桶中;,25.06.2020,a,56,3、設(shè)計(jì)算法寫出求n!的算法,解答: S0:給出n的值; S1: 1=p; S2: 2=i; S3: p*i=p; S4: i+1=i; S5: 若i、=、!),邏輯運(yùn)算符(!、 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的運(yùn)算順序相當(dāng)于 (nm(f*g)/d),結(jié)果是3.0 nm*f*d的運(yùn)算順序相當(dāng)于 (nm)*f)*d,結(jié)果是25.0,如果參加運(yùn)算的兩個(gè)數(shù)中有一個(gè)為浮點(diǎn)型,則結(jié)果是double型,2 增1減1運(yùn)算符,(1)增1減1運(yùn)算符的運(yùn)算對象、運(yùn)算規(guī)則與結(jié)果、 結(jié)合性如下表所示:,對象數(shù),單 目,名稱,運(yùn)算符,運(yùn)算規(guī)則,運(yùn)算對象,運(yùn)算結(jié)果,結(jié)合性
27、,增1(前綴),先加1 后使用,增1(后綴),減1(前綴),減1(后綴),先使用 后加1,先減1 后使用,先使用 后減1,整型、字 符型、指 針型變量 或數(shù)組 元素,同運(yùn)算 對象的 類型,自 右 向 左,(2)增1減1運(yùn)算符的優(yōu)先級:, 增1減1運(yùn)算符 優(yōu)先于 雙目基本算術(shù)運(yùn)算符 增1減1運(yùn)算符和單目運(yùn)算符、同級別,結(jié)合性 是自右向左,注意:,若出現(xiàn)難以區(qū)分的若干個(gè)或組成運(yùn)算符串時(shí), C語言規(guī)定,自左向右取盡可能多的符號組成運(yùn)算符。,例1:,ab 應(yīng)理解為(a)b ab應(yīng)理解為 (a)b,例2:增1減1運(yùn)算符的使用,設(shè)變量定義如下:char c1b,c2B; (c1,c2可看成整型,其值分別為
28、98,66),則: c1 的值是99,運(yùn)算后c1的值是c c1 的值是98,運(yùn)算后c1的值是a c1c2的值是164,運(yùn)算后c1的值是c,c2的值是B c1c2的值是32,運(yùn)算后c1的值是a,c2的值是B,三.賦值運(yùn)算符,1.賦值運(yùn)算符,賦值運(yùn)算符是雙目運(yùn)算符,賦值運(yùn)算符的左邊必須是變量, 右邊是表達(dá)式。,(1) 賦值運(yùn)算符的運(yùn)算對象及有關(guān)規(guī)則如下表:,(2) 賦值運(yùn)算符的優(yōu)先級, 算術(shù)運(yùn)算符 優(yōu)先于 關(guān)系運(yùn)算符 優(yōu)先于 雙目邏輯運(yùn)算符 優(yōu)先于 賦值運(yùn)算符 賦值運(yùn)算符的結(jié)合性是自右向左,(3) 賦值運(yùn)算符的使用,設(shè)變量定義如下: char c1a,c2; int n165,n2,n3,n4,n
29、5,n6; float f13.0,f2;,則: c2n1運(yùn)算后,c2的值是65,n1的值不變。 n2!c1運(yùn)算后,n2的值是0,c1的值不變。 f2f10.001運(yùn)算后,f2的值是3.001,f1的值不變。 n3c1n1|c1!n1運(yùn)算后,n3的值是1,c1和n1 的值不變。 注:運(yùn)算順序相當(dāng)于 n3(c1n1)|(c1!n1) n4n5n6(n1)運(yùn)算后,n4,n5,n6的值 均是64,n1的值是64。,注意:上述表達(dá)式的值就等于賦值表達(dá)式中的最左邊的變量值。,2 .算術(shù)自反賦值運(yùn)算符,(1) 運(yùn)算規(guī)則,對象數(shù),名稱,運(yùn)算符,運(yùn)算規(guī)則,運(yùn)算對象,運(yùn)算結(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ùn)算符的優(yōu)先級, 算術(shù)運(yùn)算符 優(yōu)先于 關(guān)系運(yùn)算符 優(yōu)先于 雙目邏輯運(yùn)算符 優(yōu)先于 算術(shù)自反賦值運(yùn)算符 算術(shù)自反賦值運(yùn)算符和賦值運(yùn)算符是同級別的,結(jié)合性是 自右向左,(3)算術(shù)自反賦值運(yùn)算符的使用,設(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 運(yùn)算后, m1,m2,m3,m4的值依次是30,40,50,5。 運(yùn)算順序相當(dāng)于m1(m2(m3*(m4/2),四.逗號運(yùn)算符,逗號運(yùn)算符是雙目運(yùn)算符,其運(yùn)算對象是表達(dá)式。,1.逗號運(yùn)算符,注意:由逗號運(yùn)算符組成的式子也是表達(dá)式,其值等于最右邊 的表達(dá)式的值,2.逗號運(yùn)算符的優(yōu)先級, 任何運(yùn)算符 優(yōu)先于 逗號運(yùn)算符 逗號運(yùn)算符的結(jié)合性是自左向右,3. 例題。設(shè)整型變量a,b為2,,則: ba3,cb4 運(yùn)算結(jié)果:a不變,b為5,c為9,表達(dá)式
32、的值為9 da,ed,fe 運(yùn)算結(jié)果:a為1,d為1,e為1,f為1,表達(dá)式的值為1,五.條件運(yùn)算符,1.條件運(yùn)算符,2.條件運(yùn)算符的優(yōu)先級, 其它運(yùn)算符 優(yōu)先于 條件運(yùn)算符 優(yōu)先于 賦值、算術(shù)自反賦值運(yùn)算符 條件運(yùn)算符的結(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.長度運(yùn)算符,六.長度運(yùn)算符,2.長度運(yùn)算符優(yōu)先級, 和單
33、目算術(shù)運(yùn)算符、單目邏輯運(yùn)算符、增1減1運(yùn)算符同級別,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ī)上運(yùn)行的結(jié)果。,25.06.2020,a,107,七 位運(yùn)算 C語言中提供的位運(yùn)算符: 、 、 (這是賦值
34、語句) a+ + (這是表達(dá)式) a+ +; (這是賦值語句,等價(jià) 與 a=a+1;),25.06.2020,a,117,3.5 輸入輸出在C語言中的實(shí)現(xiàn),1.輸入輸出的概念 從計(jì)算機(jī)向外部輸出設(shè)備(如顯示屏、打印機(jī)、磁盤 等)輸出數(shù)據(jù)稱為“輸出”,從外部向輸入設(shè)備(如鍵盤、 磁盤、光盤、掃描儀等)輸入數(shù)據(jù)稱為“輸入”。,2.C語言本身不提供輸入輸出語句,輸入和輸出操作是由 函數(shù)來實(shí)現(xiàn)的。在C標(biāo)準(zhǔn)函數(shù)庫中提供了一些輸入輸出函 數(shù),例如,printf函數(shù)和scanf函數(shù)。,25.06.2020,a,118,3.在使用C語言庫函數(shù)時(shí),要用預(yù)編譯命令“include” 將有關(guān)的“頭文件”包括到用戶源
35、文件中。在調(diào)用標(biāo)準(zhǔn) 輸入輸出庫函數(shù)時(shí),文件開頭應(yīng)有以下預(yù)編譯命令: # include 或# include “stdio.h”,4.允許在使用printf和scanf兩個(gè)函數(shù)時(shí)可不加#include 命令。,25.06.2020,a,119,一、字符數(shù)據(jù)的輸入輸出,1.putchar函數(shù)(字符輸出函數(shù)) 函數(shù)格式:putchar( C ) ; C可以是字符型變量或整型變量或常量 函數(shù)的功能:向終端輸出一個(gè)字符,25.06.2020,a,120,2.程序?qū)嵗?#include main( ) char a, b, c ; a=B; b=O; c=Y; putchar(a); putchar(b
36、); putchar(c); ,注意:該程序可以輸出控制字符,如putchar(n) 輸出一個(gè)換行符,也可以輸出其他轉(zhuǎn)義字符 如 putchar(101) (輸出字符A) putchar() (輸出單引號字符),運(yùn)行結(jié)果: BOY,25.06.2020,a,121,3.getchar 函數(shù)(字符輸入函數(shù)) 函數(shù)格式,getchar ( ) 函數(shù)的功能:從終端輸入一個(gè)字符,函數(shù)的值就是 從輸入設(shè)備得到的字符。,4.程序?qū)嵗?#include main ( ) char c; c=getchar( ); putchar(c); 在運(yùn)行時(shí),如果從鍵盤輸入字符a并按回車鍵,就會在 屏幕上看到輸出的字符
37、a。 a (輸入a后,按“回車”鍵,字符才送到內(nèi)存) a (輸出變量 c 的值a),25.06.2020,a,122,注意: (1)getchar( )只能接收一個(gè)字符,getchar函數(shù)收到 的字符可以賦給一個(gè)字符變量或整型變量。 (2)若在程序中調(diào)用getchar、putchar函數(shù),則必須 在程序的開頭部分加上“包含命令” #include 或 #include “stdio.h”,25.06.2020,a,123,二、格式輸入與輸出,(一)、printf 函數(shù)(格式輸出函數(shù)),1.printf函數(shù)的一般格式為 printf(“格式控制字符串”,輸出表列) 括弧內(nèi)包括兩部分: (1) “
38、格式控制字符串”是用雙引號括起來的字符串,也稱 “轉(zhuǎn)換控制字符串”,它包括兩種信息: 格式說明,由“”和格式字符組成,如%d, %f等。 它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出。格式 說明總是由“”字符開始的。 普通字符,即需要原樣輸出的字符。 (2)“輸出表列”是需要輸出的一些數(shù)據(jù),可以是表達(dá) 式。,25.06.2020,a,124,下面是一個(gè)例子: printf(“%d %d ”, a,b );,格式說明 輸出表列,printf(“a%d b=%d”,a,b);,格式說明 輸出表列,25.06.2020,a,125,2.格式字符 常用的有以下幾種格式字符:,(1)d 格式字符。用來輸出
39、十進(jìn)制整數(shù)。有以下 幾種格式字符: d,按整型數(shù)據(jù)的實(shí)際長度輸出。 md,m為指定的輸出字段的寬度。如果數(shù)據(jù) 的位數(shù)小于m,則左端補(bǔ)以空格,若大于m,則按實(shí) 際位數(shù)輸出。如 printf(“%4d,%4d”,a,b); 若a123,b12345,則輸出結(jié)果為 |_| 123,12345 ld,輸出長整型數(shù)據(jù)。如 long a=135790; printf(“%ld”,a);,25.06.2020,a,126,對long型數(shù)據(jù)應(yīng)當(dāng)用ld格式輸出。對長整型數(shù)據(jù)也可以 指定字段寬度,如將上面printf函數(shù)中的“l(fā)d”改為“8ld” 則輸出為: |_| |_| 135790 (8列) 一個(gè)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);,25.06.2020,a,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ǔ)碼形式存放)如下:,25.06.2
41、020,a,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,25.06.2020,a,129,(4)u格式符,用來輸出unsigned型數(shù)據(jù),即無符號數(shù), 以十進(jìn)制形式輸出。,(5)C格式符,用來輸出一個(gè)字符。 如: char c=a; printf(“%c”,c); 輸出字符a,請注意:“c”中的 c是格式符,引號右邊 的c是變量名,不要搞混。一個(gè)整數(shù),只要它的值在0255 范圍內(nèi),也可以用字符形式輸出,在輸出前,系統(tǒng)會將該 整數(shù)作為ASCI
42、I碼轉(zhuǎn)換成相應(yīng)的字符;反之,一個(gè)字符數(shù)據(jù) 也可以用整數(shù)形式輸出。,25.06.2020,a,130,(6)S格式符,用來輸出一個(gè)字符串。有幾種用法:,s,例如: printf(“%s”, “CHINA” ); 輸出“CHINA”字符串(不包括雙引號)。,ms,輸出的字符率占m列,如字符串本身長度大 于m,則突破m的限制,將字符串全部輸出。若串 長小于m,則左補(bǔ)空格。,25.06.2020,a,131,ms,如果串長小于m,則在m列范圍內(nèi), 字符率向左靠,右補(bǔ)空格。,mns,輸出占m列,但只取字符串中左端n個(gè)字 符。這n個(gè)字符輸出在m列的右側(cè),左補(bǔ)空格。,mns,其中m、n含義同上,n個(gè)字符輸出
43、在m 列范圍的左側(cè),右補(bǔ)空格。如果nm,則m自動取 n值,即保證n個(gè)字符正常輸出。,25.06.2020,a,132,(7)f格式符,用來輸出實(shí)數(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ù)的有效位數(shù)一般為7位。,25.06.2020,a,133,(1)字符數(shù)據(jù)的輸出: main ( ) char c=
44、a; int i=97; printf(“%c,%dn”,c,c); printf(“%c,%dn”,i,i); ,運(yùn)行結(jié)果為: a,97 a,97,3.例子,25.06.2020,a,134,(2) 字符串的輸出 main( ) printf(“%5s,%7.2s,%.4s,%-5.3sn”,”CHINA”, ”CHINA”,“CHINA”,”CHINA”); 輸出如下: CHINA,|_| |_| |_| |_| |_| CH,CHIN,CHI |_| |_| 其中第3個(gè)輸出項(xiàng),格式說明為“%.4s”,即只指定n,沒指定m, 自動使 m=n= 4,故占4列。,25.06.2020,a,13
45、5,(3)輸出實(shí)數(shù)時(shí)的有效位數(shù): main( ) float x,y; x=111111.111;y=222222.222; printf(“%f”,x+y); ,運(yùn)行結(jié)果為: 333333.328125,25.06.2020,a,136,(4)輸出實(shí)數(shù)時(shí)指定小數(shù)位數(shù): main( ) float f=123.456; printf(“%f |_| |_| %10f |_| |_| %10.2f |_| |_| %.2f |_| |_| %-10.2fn”, f,f,f,f,f); ,運(yùn)行結(jié)果為: 123.456001 |_| |_| 123.456001 |_| |_| |_| |_| |_| |_| 123.46 |_| |_| 123.46 |_| |_| 123.46 |_| |_| |_| |_|,25.06.2020,a,137,4.格式符小結(jié),printf格式字符,25.06.2020,a,138,25.06.2020,a,139,printf的附加格式說明字符,25.06.2020,a,140,5.使用printf函數(shù)時(shí),還需注意以下幾點(diǎn),(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 樓盤交付活動方案
- 漢服乞巧節(jié)活動方案
- 檢察院開展節(jié)日活動方案
- 汽車美容春節(jié)活動方案
- 沂山板栗市場活動方案
- 沅江無償獻(xiàn)血活動方案
- 法制體檢活動方案
- 汽車預(yù)售活動方案
- 桂林熱鬧活動策劃方案
- 檢查評比活動方案
- 國際貿(mào)易地理教材課件匯總完整版ppt全套課件最全教學(xué)教程整本書電子教案全書教案課件合集
- DG-TJ 08-2122-2021 保溫裝飾復(fù)合板墻體保溫系統(tǒng)應(yīng)用技術(shù)標(biāo)準(zhǔn)
- 電機(jī)振動測定方法及限值振動測定方法
- 各類給水管材水力計(jì)算表
- 濟(jì)南遙墻機(jī)場擴(kuò)建工程航站樓建設(shè)監(jiān)理大綱
- 七年級上冊數(shù)學(xué)知識點(diǎn)總結(jié)及精編例題1
- 往生薦亡功德文疏
- 心內(nèi)科高危藥物安全管理與指引
- XFD-系列單槽說明書-印稿
- UCLA肩關(guān)節(jié)評分系統(tǒng)
- 分支型室速的導(dǎo)管消融術(shù)ppt課件
評論
0/150
提交評論