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

下載本文檔

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

文檔簡(jiǎn)介

1、25.06.2020,a,1,武漢理工大學(xué)計(jì)算機(jī)學(xué)院,授課教師:王紅霞,C語(yǔ)言程序設(shè)計(jì),25.06.2020,a,2,選用教材與參考書(shū),主教科書(shū) 顧治華、陳天煌等 C語(yǔ)言程序設(shè)計(jì) 機(jī)械工業(yè)出版社 2007.2 參考教材 顧治華、陳天煌等C語(yǔ)言程序設(shè)計(jì) 實(shí)驗(yàn)指導(dǎo) 機(jī)械工業(yè)出版社 2007.2 參考書(shū) 譚浩強(qiáng) C語(yǔ)言程序設(shè)計(jì) 清華大學(xué)出版社,25.06.2020,a,3,課程內(nèi)容,第一章 C語(yǔ)言程序設(shè)計(jì)概述 第二章 算法及算法設(shè)計(jì)簡(jiǎn)介 第三章 數(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語(yǔ)言程序設(shè)計(jì)基礎(chǔ),1.1 程序與程序設(shè)計(jì) 1.2 C語(yǔ)言簡(jiǎn)介 1.3 簡(jiǎn)單的C語(yǔ)言程序 1.4 C語(yǔ)言程序的上機(jī)步驟 1.5 C語(yǔ)言的基本詞法 1.6 C語(yǔ)言程序的基本結(jié)構(gòu),25.06.2020,a,5,程序與計(jì)算機(jī)語(yǔ)言,程序是存放在計(jì)算機(jī)中的操作指令的集合。,用程序設(shè)計(jì)語(yǔ)言安排好的處理問(wèn)題的步驟稱(chēng)為計(jì)算機(jī)程序,用程序設(shè)計(jì)語(yǔ)言編制一個(gè)能完成某項(xiàng)任務(wù)的計(jì)算機(jī)程序的過(guò)程叫做計(jì)算機(jī)程序設(shè)計(jì)。,程序設(shè)計(jì)=數(shù)據(jù)結(jié)構(gòu)+算法+程序設(shè)計(jì)方法+編程語(yǔ)言,程序設(shè)計(jì)的關(guān)鍵:必須掌握一種程序設(shè)計(jì)語(yǔ)言。掌握程序設(shè)計(jì)的邏輯思維。,25.06.2020,a,6,程序設(shè)計(jì)過(guò)程,(1)問(wèn)題的提出,要達(dá)到的要求; (2

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

4、語(yǔ)言,提供了完整的程序控制 語(yǔ)句(選擇語(yǔ)句和循環(huán)語(yǔ)句),很適合結(jié)構(gòu)化的程序設(shè)計(jì)方 法。,(7) 生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。,(8) 用c語(yǔ)言寫(xiě)的程序可移植性好。,(9) 它提供了大量的庫(kù)函數(shù)以供調(diào)用,簡(jiǎn)化了程序設(shè)計(jì)工作。,25.06.2020,a,9,C語(yǔ)言程序的結(jié)構(gòu),C語(yǔ)言是結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言。 C語(yǔ)言是模塊化的程序設(shè)計(jì)語(yǔ)言,程序是由函數(shù)構(gòu)成的。一個(gè)C源程序至少包含一個(gè)main函數(shù),也可以包含一個(gè)main函數(shù)和若干個(gè)其他函數(shù)。因此,函數(shù)是C程序的基本單位。 一個(gè)函數(shù)由兩部分組成: 函數(shù)的首部,函數(shù)的第一行。包括函數(shù)名、函數(shù)類(lèi)型、函數(shù)屬性、函數(shù)參數(shù)(形參)名、參數(shù)類(lèi)型。 函數(shù)體,即

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

6、句。輸入輸出的操作是由庫(kù) 函數(shù)scanf和printf等函數(shù)來(lái)完成的。,(8) 可以用/*/對(duì)C程序中的任何部分作注釋。,25.06.2020,a,11,簡(jiǎn)單的C語(yǔ)言程序示例,例一 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語(yǔ)句*/ 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的值返回,通過(guò)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語(yǔ)言的基本詞法標(biāo)識(shí)符,定義:在程序中使用的變量名、函數(shù)名、標(biāo)號(hào)等統(tǒng)稱(chēng)為 標(biāo)識(shí)符。

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

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

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

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

12、,(1)順序結(jié)構(gòu),25.06.2020,a,22,(2)選擇結(jié)構(gòu),或稱(chēng)分支結(jié)構(gòu),此結(jié)構(gòu)中必包含一個(gè)判斷框。根據(jù)給定的條件 P是否成立而選擇執(zhí)行A框或B框,25.06.2020,a,23,(3) 循環(huán)結(jié)構(gòu),它又稱(chēng)為重復(fù)結(jié)構(gòu),即反復(fù)執(zhí)行某一部分 的操作。又兩類(lèi)循環(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, 然后再對(duì)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) 以下說(shuō)法中正確的是( ). A) C語(yǔ)言程序總是從第一個(gè)函數(shù)開(kāi)始執(zhí)行 B) 在C語(yǔ)言程序中,要調(diào)用的函數(shù)必須在main()函數(shù) 中定義 C) C語(yǔ)言程序總是從main()函數(shù)開(kāi)始執(zhí)行 D) C語(yǔ)言程序中的main()函數(shù)必須放在程序的開(kāi)始 部分,25.06.2020,a,26,解答:C 解釋?zhuān)篊語(yǔ)言程序總是從mai

14、n()函數(shù)開(kāi)始執(zhí)行,而不論其在程序中的位置。當(dāng)主函數(shù)執(zhí)行完畢時(shí),亦即程序執(zhí)行完畢。除main函數(shù)外,其它函數(shù)都是在執(zhí)行main函數(shù)時(shí)被調(diào)用執(zhí)行的。在C語(yǔ)言中,函數(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程序中,注釋說(shuō)明只能位于一條語(yǔ)句的后面,25.06.2020,a,28,解答:D 解釋: 凡是用“/*”和“*/”括起來(lái)的文字,都是注釋。其出現(xiàn)的位置可以任意。,25.06.20

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

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

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

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

19、圖形式。在這種流程圖中,完全去掉 了帶箭頭的流程線(xiàn)。全部算法寫(xiě)在一個(gè)矩形框內(nèi), 在該框內(nèi)還可以包含其他的從屬于它的框。,這種流程圖又稱(chēng)NS結(jié)構(gòu)化流程圖。,NS流程圖用以下的流程圖符號(hào):,(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、用偽碼表示算法,偽代碼是用介于自然語(yǔ)言和計(jì)算機(jī)語(yǔ)言之

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

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

22、6.2020,a,45,例2:對(duì)一個(gè)大于或等于3的正整數(shù),判斷它是不是一個(gè)素?cái)?shù)。,方法:將 n (其中n 3) 作為被除數(shù), 將2 到(n-1) 各個(gè)整數(shù)輪流作為除數(shù),如果都不能被整除,則n為素?cái)?shù)。,簡(jiǎn)單的算法實(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ì)方法簡(jiǎn)介,1、三種基本結(jié)構(gòu)回顧,(1)順序結(jié)構(gòu),25.06.2020,a,49,(2)選擇結(jié)構(gòu),或稱(chēng)分支結(jié)構(gòu),25.06.2020,a,50,(3) 循環(huán)結(jié)構(gòu),它又稱(chēng)為重復(fù)結(jié)構(gòu),即反復(fù)執(zhí)行某一部分 的操作。又兩類(lèi)循環(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ù)雜問(wèn)題的求解過(guò)程分階段進(jìn)行。每個(gè)階段的問(wèn)題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。,25.06.2020,a,53,1 = i,i+1 =i,gi80,i50,結(jié)束,開(kāi)始,打印ni,gi,Y,N,N,Y,讀入ni和gi,25.06.2020,a,54,解答: ()用自然語(yǔ)言表示 ()用傳統(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) 開(kāi)始: S0:將A桶中的油倒入M桶中; S1:將B桶中的油倒入A桶中; S2:將M桶中的油倒入B桶中;,25.06.2020,a,56,3、設(shè)計(jì)算法寫(xiě)出求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)算對(duì)象、運(yùn)算規(guī)則與結(jié)果、 結(jié)合性如下表所示:,對(duì)象數(shù),單 目,名稱(chēng),運(yùn)算符,運(yùn)算規(guī)則,運(yùn)算對(duì)象,運(yùn)算結(jié)果,結(jié)合性

27、,增1(前綴),先加1 后使用,增1(后綴),減1(前綴),減1(后綴),先使用 后加1,先減1 后使用,先使用 后減1,整型、字 符型、指 針型變量 或數(shù)組 元素,同運(yùn)算 對(duì)象的 類(lèi)型,自 右 向 左,(2)增1減1運(yùn)算符的優(yōu)先級(jí):, 增1減1運(yùn)算符 優(yōu)先于 雙目基本算術(shù)運(yùn)算符 增1減1運(yùn)算符和單目運(yùn)算符、同級(jí)別,結(jié)合性 是自右向左,注意:,若出現(xiàn)難以區(qū)分的若干個(gè)或組成運(yùn)算符串時(shí), C語(yǔ)言規(guī)定,自左向右取盡可能多的符號(hào)組成運(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)算對(duì)象及有關(guān)規(guī)則如下表:,(2) 賦值運(yùn)算符的優(yōu)先級(jí), 算術(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ī)則,對(duì)象數(shù),名稱(chēng),運(yùn)算符,運(yùn)算規(guī)則,運(yùn)算對(duì)象,運(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)先級(jí), 算術(shù)運(yùn)算符 優(yōu)先于 關(guān)系運(yùn)算符 優(yōu)先于 雙目邏輯運(yùn)算符 優(yōu)先于 算術(shù)自反賦值運(yùn)算符 算術(shù)自反賦值運(yùn)算符和賦值運(yùn)算符是同級(jí)別的,結(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),四.逗號(hào)運(yùn)算符,逗號(hào)運(yùn)算符是雙目運(yùn)算符,其運(yùn)算對(duì)象是表達(dá)式。,1.逗號(hào)運(yùn)算符,注意:由逗號(hào)運(yùn)算符組成的式子也是表達(dá)式,其值等于最右邊 的表達(dá)式的值,2.逗號(hào)運(yùn)算符的優(yōu)先級(jí), 任何運(yùn)算符 優(yōu)先于 逗號(hào)運(yùn)算符 逗號(hào)運(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)先級(jí), 其它運(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.長(zhǎng)度運(yùn)算符,六.長(zhǎng)度運(yùn)算符,2.長(zhǎng)度運(yùn)算符優(yōu)先級(jí), 和單

33、目算術(shù)運(yùn)算符、單目邏輯運(yùn)算符、增1減1運(yùn)算符同級(jí)別,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ǔ)言中提供的位運(yùn)算符: 、 、 (這是賦值

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

35、文件中。在調(diào)用標(biāo)準(zhǔn) 輸入輸出庫(kù)函數(shù)時(shí),文件開(kāi)頭應(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() (輸出單引號(hào)字符),運(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í),如果從鍵盤(pán)輸入字符a并按回車(chē)鍵,就會(huì)在 屏幕上看到輸出的字符

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

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

39、十進(jìn)制整數(shù)。有以下 幾種格式字符: d,按整型數(shù)據(jù)的實(shí)際長(zhǎng)度輸出。 md,m為指定的輸出字段的寬度。如果數(shù)據(jù) 的位數(shù)小于m,則左端補(bǔ)以空格,若大于m,則按實(shí) 際位數(shù)輸出。如 printf(“%4d,%4d”,a,b); 若a123,b12345,則輸出結(jié)果為 |_| 123,12345 ld,輸出長(zhǎng)整型數(shù)據(jù)。如 long a=135790; printf(“%ld”,a);,25.06.2020,a,126,對(duì)long型數(shù)據(jù)應(yīng)當(dāng)用ld格式輸出。對(duì)長(zhǎng)整型數(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ù)值不帶符號(hào),即將符號(hào)位也一起作為八進(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 對(duì)長(zhǎng)整型數(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ù)。同樣 不會(huì)出現(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格式符,用來(lái)輸出unsigned型數(shù)據(jù),即無(wú)符號(hào)數(shù), 以十進(jìn)制形式輸出。,(5)C格式符,用來(lái)輸出一個(gè)字符。 如: char c=a; printf(“%c”,c); 輸出字符a,請(qǐng)注意:“c”中的 c是格式符,引號(hào)右邊 的c是變量名,不要搞混。一個(gè)整數(shù),只要它的值在0255 范圍內(nèi),也可以用字符形式輸出,在輸出前,系統(tǒng)會(huì)將該 整數(shù)作為ASCI

42、I碼轉(zhuǎn)換成相應(yīng)的字符;反之,一個(gè)字符數(shù)據(jù) 也可以用整數(shù)形式輸出。,25.06.2020,a,130,(6)S格式符,用來(lái)輸出一個(gè)字符串。有幾種用法:,s,例如: printf(“%s”, “CHINA” ); 輸出“CHINA”字符串(不包括雙引號(hào))。,ms,輸出的字符率占m列,如字符串本身長(zhǎng)度大 于m,則突破m的限制,將字符串全部輸出。若串 長(zhǎng)小于m,則左補(bǔ)空格。,25.06.2020,a,131,ms,如果串長(zhǎng)小于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自動(dòng)取 n值,即保證n個(gè)字符正常輸出。,25.06.2020,a,132,(7)f格式符,用來(lái)輸出實(shí)數(shù)(包括單、雙精度),以 小數(shù)形式輸出。有以下幾種用法:,m.nf指定輸出的數(shù)據(jù)共占m列,其中有n位小數(shù)。 如果數(shù)值長(zhǎng)度小于m,則左端補(bǔ)空格。, -mnf與m.nf基本相同,只是使輸出的數(shù)值 向左端靠,右端補(bǔ)空格。,f,不指定字段寬度,由系統(tǒng)自動(dò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),格式說(shuō)明為“%.4s”,即只指定n,沒(méi)指定m, 自動(dòng)使 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的附加格式說(shuō)明字符,25.06.2020,a,140,5.使用printf函數(shù)時(shí),還需注意以下幾點(diǎn),(1)除了X,E,G外,其他格式字符必須用小寫(xiě)字母, 如d不能寫(xiě)成D。 (2)可以在printf函數(shù)中的“格式控制”字符串內(nèi)包含“轉(zhuǎn) 義字符”,如“n”, “ t”, “ b”,

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論