版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1.1 什么是計(jì)算機(jī)程序什么是計(jì)算機(jī)程序1.2 什么是計(jì)算機(jī)語(yǔ)言什么是計(jì)算機(jī)語(yǔ)言1.3 C語(yǔ)言的發(fā)展及其特點(diǎn)語(yǔ)言的發(fā)展及其特點(diǎn)1.4 最簡(jiǎn)單的最簡(jiǎn)單的C語(yǔ)言程序語(yǔ)言程序1.5 運(yùn)行運(yùn)行C程序的步驟與方法程序的步驟與方法1.6 程序設(shè)計(jì)的任務(wù)程序設(shè)計(jì)的任務(wù)1.1 什么是計(jì)算機(jī)程序什么是計(jì)算機(jī)程序程序程序:一組計(jì)算機(jī)能識(shí)別和執(zhí)行的一組計(jì)算機(jī)能識(shí)別和執(zhí)行的指令指令只要讓計(jì)算機(jī)執(zhí)行這個(gè)程序,計(jì)算機(jī)就只要讓計(jì)算機(jī)執(zhí)行這個(gè)程序,計(jì)算機(jī)就會(huì)會(huì)自動(dòng)地自動(dòng)地、有條不紊地有條不紊地進(jìn)行工作進(jìn)行工作計(jì)算機(jī)的一切操作都是由計(jì)算機(jī)的一切操作都是由程序程序控制的,控制的,離開(kāi)程序,計(jì)算機(jī)將一事無(wú)成離開(kāi)程序,計(jì)算機(jī)將一事無(wú)
2、成1.2 什么是計(jì)算機(jī)語(yǔ)言什么是計(jì)算機(jī)語(yǔ)言計(jì)算機(jī)語(yǔ)言計(jì)算機(jī)語(yǔ)言:人和計(jì)算機(jī)交流信息人和計(jì)算機(jī)交流信息的、的、計(jì)算機(jī)和人都能識(shí)別的語(yǔ)言計(jì)算機(jī)和人都能識(shí)別的語(yǔ)言1.2 什么是計(jì)算機(jī)語(yǔ)言什么是計(jì)算機(jī)語(yǔ)言計(jì)算機(jī)語(yǔ)言發(fā)展階段計(jì)算機(jī)語(yǔ)言發(fā)展階段:u機(jī)器語(yǔ)言機(jī)器語(yǔ)言(由由0和和1組成的指令組成的指令)u符號(hào)語(yǔ)言符號(hào)語(yǔ)言(用英文字母和數(shù)字表示指令用英文字母和數(shù)字表示指令)u高級(jí)語(yǔ)言高級(jí)語(yǔ)言(接近于人的自然語(yǔ)言和數(shù)學(xué)語(yǔ)言接近于人的自然語(yǔ)言和數(shù)學(xué)語(yǔ)言)l面向面向過(guò)程過(guò)程的語(yǔ)言的語(yǔ)言 (非結(jié)構(gòu)化的語(yǔ)言非結(jié)構(gòu)化的語(yǔ)言、結(jié)構(gòu)化語(yǔ)言結(jié)構(gòu)化語(yǔ)言)l面向面向?qū)ο髮?duì)象的語(yǔ)言的語(yǔ)言低級(jí)語(yǔ)言低級(jí)語(yǔ)言1.3 C語(yǔ)言的發(fā)展及其特點(diǎn)語(yǔ)言
3、的發(fā)展及其特點(diǎn)C語(yǔ)言是國(guó)際上廣泛流行的計(jì)算機(jī)高級(jí)語(yǔ)言是國(guó)際上廣泛流行的計(jì)算機(jī)高級(jí)語(yǔ)言。語(yǔ)言。C語(yǔ)言的語(yǔ)言的發(fā)展:發(fā)展:BCPL語(yǔ)言語(yǔ)言B語(yǔ)言語(yǔ)言C語(yǔ)言語(yǔ)言精練精練、接近硬件接近硬件,但,但過(guò)于簡(jiǎn)單過(guò)于簡(jiǎn)單, 無(wú)數(shù)據(jù)類型無(wú)數(shù)據(jù)類型具有多種數(shù)據(jù)類型具有多種數(shù)據(jù)類型1.3 C語(yǔ)言的發(fā)展及其特點(diǎn)語(yǔ)言的發(fā)展及其特點(diǎn)最初的最初的C語(yǔ)言只是為描述和實(shí)現(xiàn)語(yǔ)言只是為描述和實(shí)現(xiàn)UNIX操作系統(tǒng)提供一種工作語(yǔ)言而設(shè)計(jì)的。操作系統(tǒng)提供一種工作語(yǔ)言而設(shè)計(jì)的。1.3 C語(yǔ)言的發(fā)展及其特點(diǎn)語(yǔ)言的發(fā)展及其特點(diǎn)1983年,美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)年,美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)(ANSI)成立了一個(gè)委員會(huì),根據(jù)成立了一個(gè)委員會(huì),根據(jù)C語(yǔ)言問(wèn)世以語(yǔ)
4、言問(wèn)世以來(lái)各種版本對(duì)來(lái)各種版本對(duì)C語(yǔ)言的發(fā)展和擴(kuò)充,制語(yǔ)言的發(fā)展和擴(kuò)充,制定了第一個(gè)定了第一個(gè)C語(yǔ)言標(biāo)準(zhǔn)草案語(yǔ)言標(biāo)準(zhǔn)草案(83 ANSI C)。1.3 C語(yǔ)言的發(fā)展及其特點(diǎn)語(yǔ)言的發(fā)展及其特點(diǎn)1989年,年,ANSI公布了一個(gè)完整的公布了一個(gè)完整的C語(yǔ)言標(biāo)準(zhǔn)語(yǔ)言標(biāo)準(zhǔn)ANSI X3.159-1989(常常稱稱ANSI C,或,或C89)。1.3 C語(yǔ)言的發(fā)展及其特點(diǎn)語(yǔ)言的發(fā)展及其特點(diǎn)1990年,國(guó)際標(biāo)準(zhǔn)化組織年,國(guó)際標(biāo)準(zhǔn)化組織ISO(International Standard Organization) 接受接受C89作為國(guó)際標(biāo)作為國(guó)際標(biāo)準(zhǔn)準(zhǔn)ISO/IEC 9899:1990,它和,它和ANSI
5、的的C89基本上是相同的?;旧鲜窍嗤?。1.3 C語(yǔ)言的發(fā)展及其特點(diǎn)語(yǔ)言的發(fā)展及其特點(diǎn)1995年,年,ISO對(duì)對(duì)C90作了一些修訂,作了一些修訂,1999年,年,ISO又對(duì)又對(duì)C語(yǔ)言標(biāo)準(zhǔn)進(jìn)行修語(yǔ)言標(biāo)準(zhǔn)進(jìn)行修訂,在基本保留原來(lái)的訂,在基本保留原來(lái)的C語(yǔ)言特征的基語(yǔ)言特征的基礎(chǔ)上,針對(duì)應(yīng)用的需要,增加了一些功礎(chǔ)上,針對(duì)應(yīng)用的需要,增加了一些功能,尤其是能,尤其是C+中的一些功能,命名中的一些功能,命名為為ISO/IEC 9899:1999。1.3 C語(yǔ)言的發(fā)展及其特點(diǎn)語(yǔ)言的發(fā)展及其特點(diǎn)2001、2004年先后進(jìn)行了兩次技術(shù)修年先后進(jìn)行了兩次技術(shù)修正正(TC1和和TC2)。 ISO/IEC 989
6、9:1999(及其技術(shù)修正及其技術(shù)修正)被稱為被稱為 C99。C99是是C89(及及1995基準(zhǔn)增補(bǔ)基準(zhǔn)增補(bǔ)1)的擴(kuò)的擴(kuò)充。充。1.3 C語(yǔ)言的發(fā)展及其特點(diǎn)語(yǔ)言的發(fā)展及其特點(diǎn)本書(shū)的敘述以本書(shū)的敘述以C99標(biāo)準(zhǔn)為依據(jù)標(biāo)準(zhǔn)為依據(jù)(對(duì)對(duì)C99新增加的功能作特別的說(shuō)明新增加的功能作特別的說(shuō)明)。目前不同軟件公司提供的各目前不同軟件公司提供的各C語(yǔ)言編譯語(yǔ)言編譯系統(tǒng)多數(shù)并未完全實(shí)現(xiàn)系統(tǒng)多數(shù)并未完全實(shí)現(xiàn)C99建議的功能建議的功能本書(shū)中程序基本上都可以在目前所用的本書(shū)中程序基本上都可以在目前所用的編譯系統(tǒng)編譯系統(tǒng)(如如VC+ 6.0,Turbo C+ 3.0,GCC)上編譯和運(yùn)行。上編譯和運(yùn)行。1.3 C語(yǔ)
7、言的發(fā)展及其特點(diǎn)語(yǔ)言的發(fā)展及其特點(diǎn)C語(yǔ)言是一種用途廣泛、功能強(qiáng)大、使語(yǔ)言是一種用途廣泛、功能強(qiáng)大、使用靈活的過(guò)程性用靈活的過(guò)程性(procedural)編程語(yǔ)編程語(yǔ)言,既可用于編寫(xiě)應(yīng)用軟件,又能用于言,既可用于編寫(xiě)應(yīng)用軟件,又能用于編寫(xiě)系統(tǒng)軟件。因此編寫(xiě)系統(tǒng)軟件。因此C語(yǔ)言問(wèn)世以后得語(yǔ)言問(wèn)世以后得到迅速推廣。到迅速推廣。1.3 C語(yǔ)言的發(fā)展及其特點(diǎn)語(yǔ)言的發(fā)展及其特點(diǎn)C語(yǔ)言主要特點(diǎn)語(yǔ)言主要特點(diǎn):u語(yǔ)言簡(jiǎn)潔、緊湊,使用方便、靈活。語(yǔ)言簡(jiǎn)潔、緊湊,使用方便、靈活。l只有只有37個(gè)關(guān)鍵字、個(gè)關(guān)鍵字、9種控制語(yǔ)句種控制語(yǔ)句l程序書(shū)寫(xiě)形式自由,源程序短程序書(shū)寫(xiě)形式自由,源程序短1.3 C語(yǔ)言的發(fā)展及其特點(diǎn)
8、語(yǔ)言的發(fā)展及其特點(diǎn)C語(yǔ)言主要特點(diǎn)語(yǔ)言主要特點(diǎn):u運(yùn)算符豐富。運(yùn)算符豐富。l有有34種運(yùn)算符種運(yùn)算符l把括號(hào)、賦值、強(qiáng)制類型轉(zhuǎn)換等都作為把括號(hào)、賦值、強(qiáng)制類型轉(zhuǎn)換等都作為運(yùn)算符處理運(yùn)算符處理l表達(dá)式類型多樣化表達(dá)式類型多樣化1.3 C語(yǔ)言的發(fā)展及其特點(diǎn)語(yǔ)言的發(fā)展及其特點(diǎn)C語(yǔ)言主要特點(diǎn)語(yǔ)言主要特點(diǎn):u數(shù)據(jù)類型豐富。數(shù)據(jù)類型豐富。l包括包括:整型、浮點(diǎn)型、字符型、數(shù)組類型、整型、浮點(diǎn)型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、共用體類型指針類型、結(jié)構(gòu)體類型、共用體類型lC99又?jǐn)U充了復(fù)數(shù)浮點(diǎn)類型、超長(zhǎng)整型又?jǐn)U充了復(fù)數(shù)浮點(diǎn)類型、超長(zhǎng)整型(long long)、布爾類型、布爾類型(bool)l指針類型數(shù)
9、據(jù),能用來(lái)實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)指針類型數(shù)據(jù),能用來(lái)實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)結(jié)構(gòu)(如鏈表、樹(shù)、棧等如鏈表、樹(shù)、棧等)的運(yùn)算。的運(yùn)算。1.3 C語(yǔ)言的發(fā)展及其特點(diǎn)語(yǔ)言的發(fā)展及其特點(diǎn)C語(yǔ)言主要特點(diǎn)語(yǔ)言主要特點(diǎn):u具有結(jié)構(gòu)化的控制語(yǔ)句具有結(jié)構(gòu)化的控制語(yǔ)句l如如ifelse語(yǔ)句、語(yǔ)句、while語(yǔ)句、語(yǔ)句、dowhile語(yǔ)句、語(yǔ)句、switch語(yǔ)句、語(yǔ)句、for語(yǔ)句語(yǔ)句l用函數(shù)作為程序的模塊單位,便于實(shí)現(xiàn)用函數(shù)作為程序的模塊單位,便于實(shí)現(xiàn)程序的模塊化程序的模塊化lC語(yǔ)言是完全模塊化和結(jié)構(gòu)化的語(yǔ)言語(yǔ)言是完全模塊化和結(jié)構(gòu)化的語(yǔ)言1.3 C語(yǔ)言的發(fā)展及其特點(diǎn)語(yǔ)言的發(fā)展及其特點(diǎn)C語(yǔ)言主要特點(diǎn)語(yǔ)言主要特點(diǎn):u語(yǔ)法限制
10、不太嚴(yán)格,程序設(shè)計(jì)自由度大。語(yǔ)法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大。l對(duì)數(shù)組下標(biāo)越界不做檢查對(duì)數(shù)組下標(biāo)越界不做檢查l對(duì)變量的類型使用比較靈活,例如,整對(duì)變量的類型使用比較靈活,例如,整型量與字符型數(shù)據(jù)可以通用型量與字符型數(shù)據(jù)可以通用lC語(yǔ)言允許程序編寫(xiě)者有較大的自由度,語(yǔ)言允許程序編寫(xiě)者有較大的自由度,因此放寬了語(yǔ)法檢查因此放寬了語(yǔ)法檢查1.3 C語(yǔ)言的發(fā)展及其特點(diǎn)語(yǔ)言的發(fā)展及其特點(diǎn)C語(yǔ)言主要特點(diǎn)語(yǔ)言主要特點(diǎn):u允許直接訪問(wèn)物理地址,能進(jìn)行位操作,允許直接訪問(wèn)物理地址,能進(jìn)行位操作,可以直接對(duì)硬件進(jìn)行操作可以直接對(duì)硬件進(jìn)行操作lC語(yǔ)言具有高級(jí)語(yǔ)言的功能語(yǔ)言具有高級(jí)語(yǔ)言的功能和和低級(jí)語(yǔ)言低級(jí)語(yǔ)言的許
11、多功能,可用來(lái)編寫(xiě)系統(tǒng)軟件的許多功能,可用來(lái)編寫(xiě)系統(tǒng)軟件l這種雙重性,使它既是成功的系統(tǒng)描述這種雙重性,使它既是成功的系統(tǒng)描述語(yǔ)言,又是通用的程序設(shè)計(jì)語(yǔ)言語(yǔ)言,又是通用的程序設(shè)計(jì)語(yǔ)言1.3 C語(yǔ)言的發(fā)展及其特點(diǎn)語(yǔ)言的發(fā)展及其特點(diǎn)C語(yǔ)言主要特點(diǎn)語(yǔ)言主要特點(diǎn):u用用C語(yǔ)言編寫(xiě)的程序可移植性好。語(yǔ)言編寫(xiě)的程序可移植性好。lC的編譯系統(tǒng)簡(jiǎn)潔,很容易移植到新系統(tǒng)的編譯系統(tǒng)簡(jiǎn)潔,很容易移植到新系統(tǒng)l在新系統(tǒng)上運(yùn)行時(shí),可直接編譯在新系統(tǒng)上運(yùn)行時(shí),可直接編譯“標(biāo)準(zhǔn)鏈標(biāo)準(zhǔn)鏈接接庫(kù)庫(kù)”中的大部分功能,不需要修改源代碼中的大部分功能,不需要修改源代碼l幾乎所有計(jì)算機(jī)系統(tǒng)都可以使用幾乎所有計(jì)算機(jī)系統(tǒng)都可以使用C語(yǔ)言語(yǔ)
12、言1.3 C語(yǔ)言的發(fā)展及其特點(diǎn)語(yǔ)言的發(fā)展及其特點(diǎn)C語(yǔ)言主要特點(diǎn)語(yǔ)言主要特點(diǎn):u生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。 1.4最簡(jiǎn)單的最簡(jiǎn)單的C語(yǔ)言程序語(yǔ)言程序1.4.1 最簡(jiǎn)單的最簡(jiǎn)單的C語(yǔ)言程序舉例語(yǔ)言程序舉例1.4.2 C語(yǔ)言程序的結(jié)構(gòu)語(yǔ)言程序的結(jié)構(gòu)1.4.1 最簡(jiǎn)單的最簡(jiǎn)單的C語(yǔ)言程序舉例語(yǔ)言程序舉例例例1.1 要求在屏幕上輸出以下一行信息。要求在屏幕上輸出以下一行信息。 This is a C program.解題思路:解題思路: 在主函數(shù)中用在主函數(shù)中用printf函數(shù)原樣輸出以函數(shù)原樣輸出以上文字。上文字。1.4.1 最簡(jiǎn)單的最簡(jiǎn)單的C語(yǔ)言程序舉例
13、語(yǔ)言程序舉例#include int main( ) printf (”This is a C program.n”); return 0; 函數(shù)的名字,表示函數(shù)的名字,表示主函數(shù)主函數(shù)C程序必須有一個(gè)程序必須有一個(gè) main 函數(shù)函數(shù)1.4.1 最簡(jiǎn)單的最簡(jiǎn)單的C語(yǔ)言程序舉例語(yǔ)言程序舉例#include int main( ) printf (”This is a C program.n”); return 0; 主函數(shù)主函數(shù)類型類型1.4.1 最簡(jiǎn)單的最簡(jiǎn)單的C語(yǔ)言程序舉例語(yǔ)言程序舉例#include int main( ) printf (”This is a C program.n”)
14、; return 0; 函數(shù)體函數(shù)體1.4.1 最簡(jiǎn)單的最簡(jiǎn)單的C語(yǔ)言程序舉例語(yǔ)言程序舉例#include int main( ) printf (”This is a C program.n”); return 0; 輸出函數(shù)輸出函數(shù)輸出語(yǔ)句輸出語(yǔ)句1.4.1 最簡(jiǎn)單的最簡(jiǎn)單的C語(yǔ)言程序舉例語(yǔ)言程序舉例#include int main( ) printf (”This is a C program.n”); return 0; 輸出語(yǔ)句輸出語(yǔ)句1.4.1 最簡(jiǎn)單的最簡(jiǎn)單的C語(yǔ)言程序舉例語(yǔ)言程序舉例#include int main( ) printf (”This is a C progr
15、am.n”); return 0; 換行符換行符1.4.1 最簡(jiǎn)單的最簡(jiǎn)單的C語(yǔ)言程序舉例語(yǔ)言程序舉例#include int main( ) printf (”This is a C program.n”); return 0; 當(dāng)當(dāng)main函數(shù)執(zhí)行結(jié)束前函數(shù)執(zhí)行結(jié)束前將整數(shù)將整數(shù)0作為函數(shù)值作為函數(shù)值1.4.1 最簡(jiǎn)單的最簡(jiǎn)單的C語(yǔ)言程序舉例語(yǔ)言程序舉例#include int main( ) printf (”This is a C program.n”); return 0; 表示語(yǔ)句結(jié)束表示語(yǔ)句結(jié)束用到函數(shù)庫(kù)中的輸入輸出函數(shù)用到函數(shù)庫(kù)中的輸入輸出函數(shù)時(shí)時(shí)1.4.1 最簡(jiǎn)單的最簡(jiǎn)單的C
16、語(yǔ)言程序舉例語(yǔ)言程序舉例C語(yǔ)言允許用兩種注釋方式:語(yǔ)言允許用兩種注釋方式:/:?jiǎn)涡凶⑨寙涡凶⑨寀可單獨(dú)占一行可單獨(dú)占一行u可可出現(xiàn)在一行中其他內(nèi)容的右側(cè)出現(xiàn)在一行中其他內(nèi)容的右側(cè)/*/:塊式注釋塊式注釋u可包含多行可包含多行例例1.2 求兩個(gè)整數(shù)之和求兩個(gè)整數(shù)之和。解題思路:解題思路:u設(shè)置設(shè)置3個(gè)變量個(gè)變量ua和和b用來(lái)存放兩個(gè)整數(shù)用來(lái)存放兩個(gè)整數(shù)usum用來(lái)存放和數(shù)用來(lái)存放和數(shù)u用賦值運(yùn)算符用賦值運(yùn)算符“=”把結(jié)果傳送給把結(jié)果傳送給sum#include int main( ) int a,b,sum; a = 123; b = 456; sum = a + b; printf(”sum
17、is %dn”,sum); return 0; 定義整型變量定義整型變量a,b,sum對(duì)變量對(duì)變量a,b賦值賦值將將a與與b的的和賦給和賦給sum#include int main( ) int a,b,sum; a = 123; b = 456; sum = a + b; printf(”sum is %dn”,sum); return 0; 用用sum的值的值替代替代希望輸出的字符希望輸出的字符例例1.3求兩個(gè)整數(shù)中的較大者。求兩個(gè)整數(shù)中的較大者。解題思路:解題思路:u用一個(gè)函數(shù)實(shí)現(xiàn)求兩個(gè)整數(shù)中的較大者用一個(gè)函數(shù)實(shí)現(xiàn)求兩個(gè)整數(shù)中的較大者u在主函數(shù)中調(diào)用此函數(shù)并輸出結(jié)果在主函數(shù)中調(diào)用此函數(shù)并
18、輸出結(jié)果#include int main( ) int max(int x,int y); int a,b,c; scanf(”%d,%d”,&a,&b); c = max(a,b); printf(max=%dn,c); return 0;int max(int x,int y) int z; if (x y) z = x; else z = y; return(z);主函數(shù)主函數(shù)max函數(shù)函數(shù)#include int main( ) int max(int x,int y); int a,b,c; scanf(”%d,%d”,&a,&b); c = max
19、(a,b); printf(max=%dn,c); return 0;int max(int x,int y) int z; if (x y) z = x; else z = y; return(z);將將x和和y中較大者中較大者值值返回給主函數(shù)返回給主函數(shù)#include int main( ) int max(int x,int y); int a,b,c; scanf(”%d,%d”,&a,&b); c = max(a,b); printf(max=%dn,c); return 0;int max(int x,int y) int z; if (x y) z = x; e
20、lse z = y; return(z);#include int main( ) int max(int x,int y); int a,b,c; scanf(”%d,%d”,&a,&b); c = max(a,b); printf(max=%dn,c); return 0;int max(int x,int y) int z; if (x y) z = x; else z = y; return(z);因因max函數(shù)的定義函數(shù)的定義在在main函數(shù)之后函數(shù)之后,需聲明,需聲明#include int main( ) int max(int x,int y); int a,b
21、,c; scanf(”%d,%d”,&a,&b); c = max(a,b); printf(max=%dn,c); return 0;int max(int x,int y) int z; if (x y) z = x; else z = y; return(z);輸入函數(shù)輸入函數(shù)#include int main( ) int max(int x,int y); int a,b,c; scanf(”%d,%d”,&a,&b); c = max(a,b); printf(max=%dn,c); return 0;int max(int x,int y) int
22、 z; if (x y) z = x; else z = y; return(z);輸入語(yǔ)句輸入語(yǔ)句#include int main( ) int max(int x,int y); int a,b,c; scanf(”%d,%d”,&a,&b); c = max(a,b); printf(max=%dn,c); return 0;int max(int x,int y) int z; if (x y) z = x; else z = y; return(z);輸入的數(shù)據(jù)輸入的數(shù)據(jù)放到放到a,b中中輸入格式輸入格式a的地址的地址#include int main( ) int
23、 max(int x,int y); int a,b,c; scanf(”%d,%d”,&a,&b); c = max(a,b); printf(max=%dn,c); return 0;int max(int x,int y) int z; if (x y) z = x; else z = y; return(z);調(diào)用調(diào)用max函數(shù)函數(shù)#include int main( ) int max(int x,int y); int a,b,c; scanf(”%d,%d”,&a,&b); c = max(a,b); printf(max=%dn,c); retu
24、rn 0;int max(int x,int y) int z; if (x y) z = x; else z = y; return(z);8588#include int main( ) int max(int x,int y); int a,b,c; scanf(”%d,%d”,&a,&b); c = max(a,b); printf(max=%dn,c); return 0;int max(int x,int y) int z; if (x y) z = x; else z = y; return(z);8588#include int main( ) int max(
25、int x,int y); int a,b,c; scanf(”%d,%d”,&a,&b); c = max(a,b); printf(max=%dn,c); return 0;int max(int x,int y) int z; if (x y) z = x; else z = y; return(z);實(shí)際參數(shù)實(shí)際參數(shù)形式參數(shù)形式參數(shù)1.4.2 C語(yǔ)言程序的結(jié)構(gòu)語(yǔ)言程序的結(jié)構(gòu)C語(yǔ)言程序的結(jié)構(gòu)特點(diǎn):語(yǔ)言程序的結(jié)構(gòu)特點(diǎn):1.一個(gè)程序由一個(gè)或多個(gè)源程序文件組成一個(gè)程序由一個(gè)或多個(gè)源程序文件組成u小程序往往只包括一個(gè)源程序文件小程序往往只包括一個(gè)源程序文件u例例1.1,例,例1.
26、2只有一個(gè)函數(shù)只有一個(gè)函數(shù)u例例1.3有兩個(gè)函數(shù)有兩個(gè)函數(shù)只包括一個(gè)源程序文件只包括一個(gè)源程序文件1.4.2 C語(yǔ)言程序的結(jié)構(gòu)語(yǔ)言程序的結(jié)構(gòu)C語(yǔ)言程序的結(jié)構(gòu)特點(diǎn):語(yǔ)言程序的結(jié)構(gòu)特點(diǎn):一個(gè)源程序文件中可以包括三個(gè)部分:一個(gè)源程序文件中可以包括三個(gè)部分:u預(yù)處理指令預(yù)處理指令u全局聲明全局聲明u函數(shù)定義函數(shù)定義#include 等等在函數(shù)之外進(jìn)行的數(shù)據(jù)聲明在函數(shù)之外進(jìn)行的數(shù)據(jù)聲明每個(gè)函數(shù)用來(lái)實(shí)現(xiàn)一定的功能每個(gè)函數(shù)用來(lái)實(shí)現(xiàn)一定的功能1.4.2 C語(yǔ)言程序的結(jié)構(gòu)語(yǔ)言程序的結(jié)構(gòu)C語(yǔ)言程序的結(jié)構(gòu)特點(diǎn):語(yǔ)言程序的結(jié)構(gòu)特點(diǎn):2.函數(shù)是函數(shù)是C程序的主要組成部分程序的主要組成部分u一個(gè)一個(gè)C程序是由一個(gè)或多個(gè)函
27、數(shù)組成的程序是由一個(gè)或多個(gè)函數(shù)組成的u必須包含一個(gè)必須包含一個(gè)main函數(shù)函數(shù)(只能有一個(gè))(只能有一個(gè))u每個(gè)函數(shù)都用來(lái)實(shí)現(xiàn)一個(gè)或幾個(gè)特定功能每個(gè)函數(shù)都用來(lái)實(shí)現(xiàn)一個(gè)或幾個(gè)特定功能u被調(diào)用的函數(shù)可以是庫(kù)函數(shù)被調(diào)用的函數(shù)可以是庫(kù)函數(shù),也可以也可以是是自自己編制設(shè)計(jì)的函數(shù)己編制設(shè)計(jì)的函數(shù)1.4.2 C語(yǔ)言程序的結(jié)構(gòu)語(yǔ)言程序的結(jié)構(gòu)C語(yǔ)言程序的結(jié)構(gòu)特點(diǎn):語(yǔ)言程序的結(jié)構(gòu)特點(diǎn):3.一個(gè)函數(shù)包括兩個(gè)部分:一個(gè)函數(shù)包括兩個(gè)部分:u函數(shù)首部函數(shù)首部int max ( int x, int y )函數(shù)的第函數(shù)的第1行行函數(shù)類型函數(shù)類型函數(shù)名函數(shù)名參數(shù)類型參數(shù)類型參數(shù)參數(shù)名名1.4.2 C語(yǔ)言程序的結(jié)構(gòu)語(yǔ)言程序的結(jié)
28、構(gòu)C語(yǔ)言程序的結(jié)構(gòu)特點(diǎn):語(yǔ)言程序的結(jié)構(gòu)特點(diǎn):3.一個(gè)函數(shù)包括兩個(gè)部分:一個(gè)函數(shù)包括兩個(gè)部分:u函數(shù)首部函數(shù)首部int max ( int x, int y )若若函數(shù)函數(shù)無(wú)無(wú)參,在括弧中寫(xiě)參,在括弧中寫(xiě)void或或空括弧空括弧int main( void) 或或 int main()1.4.2 C語(yǔ)言程序的結(jié)構(gòu)語(yǔ)言程序的結(jié)構(gòu)C語(yǔ)言程序的結(jié)構(gòu)特點(diǎn):語(yǔ)言程序的結(jié)構(gòu)特點(diǎn):3.一個(gè)函數(shù)包括兩個(gè)部分:一個(gè)函數(shù)包括兩個(gè)部分:u函數(shù)函數(shù)體體l聲明部分聲明部分定義在本函數(shù)中所用到的變量定義在本函數(shù)中所用到的變量對(duì)本函數(shù)所調(diào)用函數(shù)進(jìn)行聲明對(duì)本函數(shù)所調(diào)用函數(shù)進(jìn)行聲明l執(zhí)行部分執(zhí)行部分:由若干個(gè)語(yǔ)句組成,指定在由若
29、干個(gè)語(yǔ)句組成,指定在函數(shù)中所進(jìn)行的操作函數(shù)中所進(jìn)行的操作可以沒(méi)有聲明部分可以沒(méi)有聲明部分1.4.2 C語(yǔ)言程序的結(jié)構(gòu)語(yǔ)言程序的結(jié)構(gòu)C語(yǔ)言程序的結(jié)構(gòu)特點(diǎn):語(yǔ)言程序的結(jié)構(gòu)特點(diǎn):3.一個(gè)函數(shù)包括兩個(gè)部分:一個(gè)函數(shù)包括兩個(gè)部分:u函數(shù)函數(shù)體體void dump ( ) 可以是空函數(shù)可以是空函數(shù)1.4.2 C語(yǔ)言程序的結(jié)構(gòu)語(yǔ)言程序的結(jié)構(gòu)C語(yǔ)言程序的結(jié)構(gòu)特點(diǎn):語(yǔ)言程序的結(jié)構(gòu)特點(diǎn):4. 程序總是從程序總是從main函數(shù)開(kāi)始執(zhí)行函數(shù)開(kāi)始執(zhí)行5. C程序?qū)τ?jì)算機(jī)的操作由程序?qū)τ?jì)算機(jī)的操作由C語(yǔ)句完成語(yǔ)句完成uC程序書(shū)寫(xiě)格式是比較自由的程序書(shū)寫(xiě)格式是比較自由的l一行內(nèi)可以寫(xiě)幾個(gè)語(yǔ)句一行內(nèi)可以寫(xiě)幾個(gè)語(yǔ)句l一個(gè)語(yǔ)句可
30、以分寫(xiě)在多行上一個(gè)語(yǔ)句可以分寫(xiě)在多行上u為清晰起見(jiàn),習(xí)慣上每行只寫(xiě)一個(gè)語(yǔ)句為清晰起見(jiàn),習(xí)慣上每行只寫(xiě)一個(gè)語(yǔ)句1.4.2 C語(yǔ)言程序的結(jié)構(gòu)語(yǔ)言程序的結(jié)構(gòu)C語(yǔ)言程序的結(jié)構(gòu)特點(diǎn):語(yǔ)言程序的結(jié)構(gòu)特點(diǎn):4. 程序總是從程序總是從main函數(shù)開(kāi)始執(zhí)行函數(shù)開(kāi)始執(zhí)行5. C程序?qū)τ?jì)算機(jī)的操作由程序?qū)τ?jì)算機(jī)的操作由C語(yǔ)句完成語(yǔ)句完成6. 數(shù)據(jù)聲明和語(yǔ)句最后必須有分號(hào)數(shù)據(jù)聲明和語(yǔ)句最后必須有分號(hào)7. C語(yǔ)言本身不提供輸入輸出語(yǔ)句語(yǔ)言本身不提供輸入輸出語(yǔ)句8. 程序應(yīng)當(dāng)包含注釋程序應(yīng)當(dāng)包含注釋,增加可讀性增加可讀性1.5 運(yùn)行運(yùn)行C程序的步驟與方法程序的步驟與方法1.上機(jī)輸入和編輯源程序上機(jī)輸入和編輯源程序(.c文
31、件)文件)2.對(duì)源程序進(jìn)行編譯對(duì)源程序進(jìn)行編譯(.obj文件)文件)3.進(jìn)行連接處理進(jìn)行連接處理(.exe文件)文件)4.運(yùn)行可執(zhí)行程序,得到運(yùn)行結(jié)果運(yùn)行可執(zhí)行程序,得到運(yùn)行結(jié)果說(shuō)明:說(shuō)明:以上過(guò)程以上過(guò)程參見(jiàn)教材中參見(jiàn)教材中圖圖1.1 附錄附錄A中中有有Visual C+ 6.0中中編輯、編輯、 編譯、連接和運(yùn)行編譯、連接和運(yùn)行C程序的方法程序的方法1.6 程序設(shè)計(jì)的任務(wù)程序設(shè)計(jì)的任務(wù)1.問(wèn)題分析問(wèn)題分析對(duì)于接手的任務(wù)要進(jìn)行認(rèn)真的分析對(duì)于接手的任務(wù)要進(jìn)行認(rèn)真的分析研究所給定的條件研究所給定的條件分析最后應(yīng)達(dá)到的目標(biāo)分析最后應(yīng)達(dá)到的目標(biāo)找出解決問(wèn)題的規(guī)律找出解決問(wèn)題的規(guī)律選擇解題的方法選擇解題
32、的方法1.6 程序設(shè)計(jì)的任務(wù)程序設(shè)計(jì)的任務(wù)1.問(wèn)題分析問(wèn)題分析2.設(shè)計(jì)算法設(shè)計(jì)算法設(shè)計(jì)出解題的方法和具體步驟設(shè)計(jì)出解題的方法和具體步驟1.6 程序設(shè)計(jì)的任務(wù)程序設(shè)計(jì)的任務(wù)1.問(wèn)題分析問(wèn)題分析2.設(shè)計(jì)算法設(shè)計(jì)算法3.編寫(xiě)程序編寫(xiě)程序4.對(duì)源程序進(jìn)行編輯、編譯和連接對(duì)源程序進(jìn)行編輯、編譯和連接5.運(yùn)行程序,分析結(jié)果運(yùn)行程序,分析結(jié)果u結(jié)果錯(cuò)了,程序肯定錯(cuò)結(jié)果錯(cuò)了,程序肯定錯(cuò)u結(jié)果對(duì)了,程序未必對(duì)結(jié)果對(duì)了,程序未必對(duì)1.6 程序設(shè)計(jì)的任務(wù)程序設(shè)計(jì)的任務(wù)1.問(wèn)題分析問(wèn)題分析2.設(shè)計(jì)算法設(shè)計(jì)算法3.編寫(xiě)程序編寫(xiě)程序4.對(duì)源程序進(jìn)行編輯、編譯和連接對(duì)源程序進(jìn)行編輯、編譯和連接5.運(yùn)行程序,分析結(jié)果運(yùn)行程序
33、,分析結(jié)果6.編寫(xiě)程序文檔編寫(xiě)程序文檔一個(gè)程序主要包括以下兩方面的信息:一個(gè)程序主要包括以下兩方面的信息:(1) 對(duì)數(shù)據(jù)的描述對(duì)數(shù)據(jù)的描述。在程序中要指定用到。在程序中要指定用到哪哪些些數(shù)據(jù)以及這些數(shù)據(jù)的類型和數(shù)據(jù)的組織形式數(shù)據(jù)以及這些數(shù)據(jù)的類型和數(shù)據(jù)的組織形式u這就是數(shù)據(jù)結(jié)構(gòu)這就是數(shù)據(jù)結(jié)構(gòu)(data structure)(2) 對(duì)操作的描述對(duì)操作的描述。即要求計(jì)算機(jī)進(jìn)行操作的。即要求計(jì)算機(jī)進(jìn)行操作的步驟步驟u也就是算法也就是算法(algorithm)數(shù)據(jù)是操作的對(duì)象數(shù)據(jù)是操作的對(duì)象操作的目的是對(duì)數(shù)據(jù)進(jìn)行加工處理,以操作的目的是對(duì)數(shù)據(jù)進(jìn)行加工處理,以得到期望的結(jié)果得到期望的結(jié)果著名計(jì)算機(jī)科學(xué)家
34、沃思著名計(jì)算機(jī)科學(xué)家沃思(Nikiklaus Wirth)提出一個(gè)公式:提出一個(gè)公式: 算法算法 + 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu) = 程序程序一個(gè)程序除了一個(gè)程序除了算法和數(shù)據(jù)結(jié)構(gòu)這算法和數(shù)據(jù)結(jié)構(gòu)這主要要主要要素外,還應(yīng)當(dāng)采用結(jié)構(gòu)化程序設(shè)計(jì)方法素外,還應(yīng)當(dāng)采用結(jié)構(gòu)化程序設(shè)計(jì)方法進(jìn)行程序設(shè)計(jì),并且用某一種計(jì)算機(jī)語(yǔ)進(jìn)行程序設(shè)計(jì),并且用某一種計(jì)算機(jī)語(yǔ)言表示言表示算法算法、數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)、程序設(shè)計(jì)方法程序設(shè)計(jì)方法和和語(yǔ)言語(yǔ)言工具工具是一個(gè)程序設(shè)計(jì)人員應(yīng)具備的知識(shí)是一個(gè)程序設(shè)計(jì)人員應(yīng)具備的知識(shí)算法是解決算法是解決“做什么做什么”和和“怎么做怎么做”的的問(wèn)題問(wèn)題程序中的操作語(yǔ)句,是算法的體現(xiàn)程序中的操作語(yǔ)句,是算
35、法的體現(xiàn)不了解算法就談不上程序設(shè)計(jì)不了解算法就談不上程序設(shè)計(jì)2.1 什么是算法什么是算法2.2 簡(jiǎn)單的算法舉例簡(jiǎn)單的算法舉例2.3 算法的特性算法的特性2.4 怎樣表示一個(gè)算法怎樣表示一個(gè)算法2.5 結(jié)構(gòu)化程序設(shè)計(jì)方法結(jié)構(gòu)化程序設(shè)計(jì)方法廣義地說(shuō),為解決一個(gè)問(wèn)題而采取的方廣義地說(shuō),為解決一個(gè)問(wèn)題而采取的方法和步驟,就稱為法和步驟,就稱為“算法算法”對(duì)同一個(gè)問(wèn)題,可以有不同的解題方法對(duì)同一個(gè)問(wèn)題,可以有不同的解題方法和步驟和步驟為了有效地進(jìn)行解題,不僅需要保證算為了有效地進(jìn)行解題,不僅需要保證算法正確,還要考慮算法的質(zhì)量,選擇合法正確,還要考慮算法的質(zhì)量,選擇合適的算法適的算法計(jì)算機(jī)算法可分為兩大
36、類別:計(jì)算機(jī)算法可分為兩大類別:u數(shù)值運(yùn)算算法數(shù)值運(yùn)算算法u非數(shù)值運(yùn)算算法非數(shù)值運(yùn)算算法數(shù)值運(yùn)算數(shù)值運(yùn)算的目的是求數(shù)值解的目的是求數(shù)值解非數(shù)值運(yùn)算非數(shù)值運(yùn)算包括的面十分廣泛,最常見(jiàn)包括的面十分廣泛,最常見(jiàn)的是用于事務(wù)管理領(lǐng)域的是用于事務(wù)管理領(lǐng)域例例2.1 求求12345可以用最原始的方法進(jìn)行:可以用最原始的方法進(jìn)行:u步驟步驟1:先求:先求1*2,得到結(jié)果,得到結(jié)果2。u步驟步驟2:將步驟:將步驟1得到的乘積得到的乘積2再乘以再乘以3,得,得到結(jié)果到結(jié)果6。u步驟步驟3:將:將6再乘以再乘以4,得,得24。u步驟步驟4:將:將24再乘以再乘以5,得,得120。這就是最。這就是最后的結(jié)果。后的結(jié)
37、果。例例2.1 求求12345 1000太繁瑣太繁瑣改進(jìn)的算法:改進(jìn)的算法:u設(shè)變量設(shè)變量p為被乘數(shù)為被乘數(shù)u變量變量i為乘數(shù)為乘數(shù)u用循環(huán)算法求結(jié)果用循環(huán)算法求結(jié)果S1:使:使p=1,或?qū)懗?,或?qū)懗?pS2:使:使i=2,或?qū)懗?,或?qū)懗?iS3:使:使p與與i相乘,乘積仍放在變量相乘,乘積仍放在變量p中,可表中,可表示為:示為:p*ipS4:使:使i的值加的值加1,即,即i+1 iS5:如果:如果i不大于不大于5,返回重新執(zhí)行,返回重新執(zhí)行S3;否則;否則,算法結(jié)束,算法結(jié)束最后得到最后得到p的值就是的值就是 5!的值的值若是若是1000,求什么?,求什么?S1:使:使p=1,或?qū)懗?,或?qū)懗?/p>
38、1pS2:使:使i=2,或?qū)懗桑驅(qū)懗?iS3:使:使p與與i相乘,乘積仍放在變量相乘,乘積仍放在變量p中,可表中,可表示為:示為:p*ipS4:使:使i的值加的值加1,即,即i+1 iS5:如果:如果i不大于不大于5,返回重新執(zhí)行,返回重新執(zhí)行S3;否則;否則,算法結(jié)束,算法結(jié)束最后得到最后得到p的值就是的值就是 5!的值的值若若求求135791133221111相當(dāng)于相當(dāng)于i 11 例例2.2 有有50個(gè)學(xué)生,要求將成績(jī)?cè)趥€(gè)學(xué)生,要求將成績(jī)?cè)?0分分以上的學(xué)生的學(xué)號(hào)和成績(jī)輸出。以上的學(xué)生的學(xué)號(hào)和成績(jī)輸出。用用ni代表第代表第i個(gè)學(xué)生個(gè)學(xué)生學(xué)號(hào),學(xué)號(hào),gi表示第表示第i個(gè)學(xué)生成績(jī)個(gè)學(xué)生成績(jī)S
39、1:1iS2:如果:如果gi80, 則輸出則輸出ni和和gi,否則不輸出,否則不輸出S3:i+1iS4:如果:如果i50,返回到步驟,返回到步驟S2,繼續(xù)執(zhí)行,繼續(xù)執(zhí)行,否則,算法結(jié)束否則,算法結(jié)束 例例2.3 判定判定20002500年中的每一年是年中的每一年是否閏年,并將結(jié)果輸出。否閏年,并將結(jié)果輸出。閏年的條件:閏年的條件: (1)能被能被4整除,但不能被整除,但不能被100整除的年份都是整除的年份都是閏年,如閏年,如2008、2012、2048年年 (2)能被能被400整除的年份是閏年,如整除的年份是閏年,如2000年年u不符合這兩個(gè)條件的年份不是閏年不符合這兩個(gè)條件的年份不是閏年u例
40、如例如2009、2100年年設(shè)設(shè)year為被檢測(cè)的年份。算法表示如下:為被檢測(cè)的年份。算法表示如下:uS1:2000yearuS2:若:若year不能被不能被4整除,則輸出整除,則輸出year 的的值和值和“不是閏年不是閏年”。然后轉(zhuǎn)到。然后轉(zhuǎn)到S6uS3:若:若year能被能被4整除,不能被整除,不能被100整除,整除,則輸出則輸出year的值和的值和“是閏年是閏年”。然后轉(zhuǎn)到。然后轉(zhuǎn)到S6uS4:若:若year能被能被400整除,整除,則則輸出輸出year的的值和值和“是閏年是閏年” ,然后轉(zhuǎn)到,然后轉(zhuǎn)到S6uS5: 其他情況其他情況輸出輸出year的值和的值和“不是閏年不是閏年”uS6:
41、year+1yearuS7:當(dāng):當(dāng)year2500時(shí),轉(zhuǎn)時(shí),轉(zhuǎn)S2,否則停止,否則停止year不能不能被被4整除整除非閏年非閏年year被被4整整除,但不能除,但不能被被100整除整除閏年閏年year被被100整除,又能整除,又能被被400整除整除閏年閏年其他其他非閏年非閏年逐漸縮小判逐漸縮小判斷的范圍斷的范圍例例2.4 求求規(guī)律:規(guī)律:第第1項(xiàng)的分子分母都是項(xiàng)的分子分母都是1 第第2項(xiàng)的分母是項(xiàng)的分母是2,以后每一項(xiàng)的分母子都是,以后每一項(xiàng)的分母子都是前一項(xiàng)的分母加前一項(xiàng)的分母加1 笫笫2項(xiàng)前的運(yùn)算符為項(xiàng)前的運(yùn)算符為“-”,后一項(xiàng)前面的運(yùn),后一項(xiàng)前面的運(yùn)算符都與前一項(xiàng)前的運(yùn)算符相反算符都與前
42、一項(xiàng)前的運(yùn)算符相反10019914131211例例2.4 求求S1:sign=1S2:sum=1S3:deno=2S4:sign=(-1)*signS5:term=sign*(1/deno)S6:sum=sum+termS7:deno=deno+1S8:若:若deno100返回返回S4;否則算法結(jié)束;否則算法結(jié)束10019914131211sign當(dāng)前項(xiàng)符號(hào)當(dāng)前項(xiàng)符號(hào)term當(dāng)前項(xiàng)的值當(dāng)前項(xiàng)的值sum當(dāng)前各項(xiàng)的和當(dāng)前各項(xiàng)的和deno當(dāng)前項(xiàng)分母當(dāng)前項(xiàng)分母-1-1/21-1/23滿足,返回滿足,返回S4例例2.4 求求S1:sign=1S2:sum=1S3:deno=2S4:sign=(-1)*s
43、ignS5:term=sign*(1/deno)S6:sum=sum+termS7:deno=deno+1S8:若:若deno100返回返回S4;否則算法結(jié)束;否則算法結(jié)束10019914131211sign當(dāng)前項(xiàng)符號(hào)當(dāng)前項(xiàng)符號(hào)term當(dāng)前項(xiàng)的值當(dāng)前項(xiàng)的值sum當(dāng)前各項(xiàng)的和當(dāng)前各項(xiàng)的和deno當(dāng)前項(xiàng)分母當(dāng)前項(xiàng)分母11/31-1/2+1/34滿足,返回滿足,返回S4例例2.4 求求S1:sign=1S2:sum=1S3:deno=2S4:sign=(-1)*signS5:term=sign*(1/deno)S6:sum=sum+termS7:deno=deno+1S8:若:若deno100返回返
44、回S4;否則算法結(jié)束;否則算法結(jié)束1001991413121199次循環(huán)后次循環(huán)后sum的值的值就是所要求的結(jié)果就是所要求的結(jié)果 例例2.5 給出一個(gè)大于或等于給出一個(gè)大于或等于3的正整數(shù),判的正整數(shù),判斷它是不是一個(gè)素?cái)?shù)。斷它是不是一個(gè)素?cái)?shù)。所謂素?cái)?shù)所謂素?cái)?shù)(prime),是指除了,是指除了1和該數(shù)本和該數(shù)本身之外,不能被其他任何整數(shù)整除的數(shù)身之外,不能被其他任何整數(shù)整除的數(shù)例如,例如,13是素?cái)?shù),因?yàn)樗荒鼙皇撬財(cái)?shù),因?yàn)樗荒鼙?,3,4,12整除。整除。判斷一個(gè)數(shù)判斷一個(gè)數(shù)n(n3)是否素?cái)?shù):將是否素?cái)?shù):將n作為作為被除數(shù),將被除數(shù),將2到到(n-1)各個(gè)整數(shù)先后作為各個(gè)整數(shù)先后作為除數(shù)
45、,如果都不能被整除,則除數(shù),如果都不能被整除,則n為素?cái)?shù)為素?cái)?shù)S1:輸入:輸入n的值的值S2:i=2 (i作為除數(shù))作為除數(shù))S3:n被被i除,得余數(shù)除,得余數(shù)rS4:如果:如果r=0,表示,表示n能被能被i整除,則輸出整除,則輸出n“不是素?cái)?shù)不是素?cái)?shù)”,算法結(jié)束;否則執(zhí)行,算法結(jié)束;否則執(zhí)行S5S5:i+1iS6:如果:如果in-1,返回,返回S3;否則輸出;否則輸出n “是素是素?cái)?shù)數(shù)”,然后結(jié)束。,然后結(jié)束。可改為可改為n/2n一個(gè)有效算法應(yīng)該具有以下一個(gè)有效算法應(yīng)該具有以下特點(diǎn)特點(diǎn):(1) 有窮性有窮性。一個(gè)算法應(yīng)包含有限的操。一個(gè)算法應(yīng)包含有限的操作步驟,而不能是無(wú)限的。作步驟,而不能
46、是無(wú)限的。(2) 確定性確定性。算法中的每一個(gè)步驟都應(yīng)。算法中的每一個(gè)步驟都應(yīng)當(dāng)是確定的,而不應(yīng)當(dāng)是含糊的、模棱當(dāng)是確定的,而不應(yīng)當(dāng)是含糊的、模棱兩可的。兩可的。一個(gè)有效算法應(yīng)該具有以下一個(gè)有效算法應(yīng)該具有以下特點(diǎn)特點(diǎn):(3) 有零個(gè)或多個(gè)輸入有零個(gè)或多個(gè)輸入。所謂輸入是指在執(zhí)。所謂輸入是指在執(zhí)行算法時(shí)需要從外界取得必要的信息。行算法時(shí)需要從外界取得必要的信息。(4) 有一個(gè)或多個(gè)輸出有一個(gè)或多個(gè)輸出。算法的目的是為了。算法的目的是為了求解,求解,“解解” 就是輸出。就是輸出。u沒(méi)有輸出的算法是沒(méi)有意義的。沒(méi)有輸出的算法是沒(méi)有意義的。(5) 有效性有效性。算法中的每一個(gè)步驟都應(yīng)當(dāng)能。算法中的每
47、一個(gè)步驟都應(yīng)當(dāng)能有效地執(zhí)行,并得到確定的結(jié)果。有效地執(zhí)行,并得到確定的結(jié)果。對(duì)于一般最終用戶來(lái)說(shuō)對(duì)于一般最終用戶來(lái)說(shuō):u他們并不需要在處理每一個(gè)問(wèn)題時(shí)都要自他們并不需要在處理每一個(gè)問(wèn)題時(shí)都要自己設(shè)計(jì)算法和編寫(xiě)程序己設(shè)計(jì)算法和編寫(xiě)程序u可以使用別人已設(shè)計(jì)好的現(xiàn)成算法和程序可以使用別人已設(shè)計(jì)好的現(xiàn)成算法和程序u只需根據(jù)已知算法的要求給予必要的輸入只需根據(jù)已知算法的要求給予必要的輸入,就能得到輸出的結(jié)果,就能得到輸出的結(jié)果輸入輸入3個(gè)數(shù)個(gè)數(shù)黑箱子黑箱子3個(gè)數(shù)中最大數(shù)個(gè)數(shù)中最大數(shù)求求3個(gè)數(shù)的個(gè)數(shù)的最大數(shù)最大數(shù)常用的方法有:常用的方法有:u自然語(yǔ)言自然語(yǔ)言u(píng)傳統(tǒng)流程圖傳統(tǒng)流程圖u結(jié)構(gòu)化流程圖結(jié)構(gòu)化流程圖
48、u偽代碼偽代碼u2.4.1 用自然語(yǔ)言表示算法用自然語(yǔ)言表示算法2.4.2 用流程圖表示算法用流程圖表示算法2.4.3 三種基本結(jié)構(gòu)和改進(jìn)的流程圖三種基本結(jié)構(gòu)和改進(jìn)的流程圖2.4.4 用用N-S流程圖表示算法流程圖表示算法2.4.5 用偽代碼表示算法用偽代碼表示算法2.4.6 用計(jì)算機(jī)語(yǔ)言表示算法用計(jì)算機(jī)語(yǔ)言表示算法2.2節(jié)介紹的算法是用自然語(yǔ)言表示的節(jié)介紹的算法是用自然語(yǔ)言表示的用自然語(yǔ)言表示通俗易懂,但文字冗長(zhǎng),容用自然語(yǔ)言表示通俗易懂,但文字冗長(zhǎng),容易出現(xiàn)歧義性易出現(xiàn)歧義性用自然語(yǔ)言描述包含分支和循環(huán)的算法,不用自然語(yǔ)言描述包含分支和循環(huán)的算法,不很方便很方便除了很簡(jiǎn)單的問(wèn)題外,一般不用
49、自然語(yǔ)言除了很簡(jiǎn)單的問(wèn)題外,一般不用自然語(yǔ)言流程圖流程圖是用一些圖框來(lái)表示各種操作是用一些圖框來(lái)表示各種操作用圖形表示算法,直觀形象,易于理解用圖形表示算法,直觀形象,易于理解起止框起止框輸入輸出框輸入輸出框處理框處理框判斷框判斷框流程線流程線連接點(diǎn)連接點(diǎn)注釋框注釋框x0YN一個(gè)入口一個(gè)入口兩個(gè)出口兩個(gè)出口流程圖流程圖是用一些圖框來(lái)表示各種操作是用一些圖框來(lái)表示各種操作用圖形表示算法,直觀形象,易于理解用圖形表示算法,直觀形象,易于理解起止框起止框輸入輸出框輸入輸出框處理框處理框判斷框判斷框流程線流程線連接點(diǎn)連接點(diǎn)注釋框注釋框位置不夠位置不夠防止交叉防止交叉 例例2.6 將例將例2.1的算的算
50、法用流程圖表示。法用流程圖表示。 求求12345如果需要將最后結(jié)果如果需要將最后結(jié)果輸出輸出:1ti5開(kāi)始開(kāi)始2it*iti+1i結(jié)束結(jié)束NY 例例2.6 將例將例2.1的算的算法用流程圖表示。法用流程圖表示。 求求12345如果需要將最后結(jié)果如果需要將最后結(jié)果輸出輸出:1t輸出輸出ti5開(kāi)始開(kāi)始2it*iti+1i結(jié)束結(jié)束NY 例例2.7 例例2.2的算法用流程圖表示。有的算法用流程圖表示。有50個(gè)學(xué)生,要求將成績(jī)?cè)趥€(gè)學(xué)生,要求將成績(jī)?cè)?0分以上的學(xué)生的分以上的學(xué)生的學(xué)號(hào)和成績(jī)輸出。學(xué)號(hào)和成績(jī)輸出。1ii50開(kāi)始開(kāi)始i+1i結(jié)束結(jié)束NY輸入輸入ni、gi1i開(kāi)始開(kāi)始gi80輸出輸出ni、gi
51、i+1ii50NYYN如果包括輸入數(shù)據(jù)部分如果包括輸入數(shù)據(jù)部分1ii50開(kāi)始開(kāi)始i+1i結(jié)束結(jié)束NY輸入輸入ni、gi1igi80輸出輸出ni、gii+1ii50NYYN如果包括輸入數(shù)據(jù)部分如果包括輸入數(shù)據(jù)部分 例例2.8 例例2.3判定閏年的算法用流程圖表判定閏年的算法用流程圖表示。判定示。判定20002500年中的每一年是否年中的每一年是否閏年,將結(jié)果輸出。閏年,將結(jié)果輸出。NYN開(kāi)始開(kāi)始2000yearyear不能不能被被4整除整除year是閏年是閏年year不能不能被被100整除整除year+1yearyear2500結(jié)束結(jié)束Yyear不能不能被被400整除整除year不是閏年不是閏年
52、year是閏年是閏年year不是閏年不是閏年YNYN例例2.9 將例將例2.4的算法用流程圖表示。求的算法用流程圖表示。求100199141312111sum2deno1sign(-1)*signsignsign*(1/deno)termsum+termsumdeno+1denoNdeno100Y輸出輸出sum結(jié)束結(jié)束開(kāi)始開(kāi)始 例例2.10 例例2.5判斷素?cái)?shù)的算法用流程圖表判斷素?cái)?shù)的算法用流程圖表示。對(duì)一個(gè)大于或等于示。對(duì)一個(gè)大于或等于3的正整數(shù),判斷的正整數(shù),判斷它是不是一個(gè)素?cái)?shù)。它是不是一個(gè)素?cái)?shù)。NY輸出輸出n是素?cái)?shù)是素?cái)?shù)結(jié)束結(jié)束開(kāi)始開(kāi)始輸入輸入n2in%irr=0i+1iin輸出輸出n
53、是素?cái)?shù)是素?cái)?shù)YN通過(guò)以上幾個(gè)例子可以看出流程圖是表示通過(guò)以上幾個(gè)例子可以看出流程圖是表示算法的較好的工具算法的較好的工具一個(gè)流程圖包括以下幾部分一個(gè)流程圖包括以下幾部分:(1) 表示相應(yīng)操作的框表示相應(yīng)操作的框(2) 帶箭頭的流程線帶箭頭的流程線(3) 框內(nèi)外必要的文字說(shuō)明框內(nèi)外必要的文字說(shuō)明流程線不要忘記畫(huà)箭頭,流程線不要忘記畫(huà)箭頭,否則否則難以判定各難以判定各框的執(zhí)行次序框的執(zhí)行次序1.傳統(tǒng)流程圖的弊端傳統(tǒng)流程圖的弊端傳統(tǒng)的流程圖用流程線指出各框的執(zhí)行順傳統(tǒng)的流程圖用流程線指出各框的執(zhí)行順序,對(duì)流程線的使用沒(méi)有嚴(yán)格限制序,對(duì)流程線的使用沒(méi)有嚴(yán)格限制使用者可以毫不受限制地使流程隨意地轉(zhuǎn)使用者
54、可以毫不受限制地使流程隨意地轉(zhuǎn)來(lái)轉(zhuǎn)去,使人難以理解算法的邏輯來(lái)轉(zhuǎn)去,使人難以理解算法的邏輯2.三種基本結(jié)構(gòu)三種基本結(jié)構(gòu)(1) 順序結(jié)構(gòu)順序結(jié)構(gòu)AB2.三種基本結(jié)構(gòu)三種基本結(jié)構(gòu)(2) 選擇結(jié)構(gòu)選擇結(jié)構(gòu)ABYpNAYpN2.三種基本結(jié)構(gòu)三種基本結(jié)構(gòu)(3) 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu) 當(dāng)型循環(huán)結(jié)構(gòu)當(dāng)型循環(huán)結(jié)構(gòu)AYp1NYx51t輸出輸出t2it*iti+1i 例例2.12 將例將例2.2的的算法用算法用N-S圖表示圖表示。將。將50名學(xué)生中成名學(xué)生中成績(jī)高于績(jī)高于80分者的學(xué)分者的學(xué)號(hào)和成績(jī)輸出。號(hào)和成績(jī)輸出。直到直到i501t1ii+1i輸入輸入ni、gii+1i直到直到i50gi80否否是是輸出輸出ni,
55、gi例例2.13 將例將例2.3判定閏年的算法用判定閏年的算法用N-S圖表示圖表示直到直到y(tǒng)ear25002000yearyear+1year否否是是year%4為為0否否是是輸出輸出year非閏年非閏年year%100不為不為0year%400為為0是是否否輸出輸出year非閏年非閏年輸出輸出year閏年閏年輸出輸出year閏年閏年例例2.14 將例將例2.4的算法用的算法用N-S圖圖表示。求表示。求10019914131211直到直到deno100deno+1deno輸出輸出sum1sum1sign2deno(-1)*signsignsign*(1/deno)termsum+termsum
56、 例例2.15 將例將例2.5判別素?cái)?shù)的算法用判別素?cái)?shù)的算法用N-S流程圖表示。流程圖表示。u例例2.10的流程圖的流程圖不是由三種基本結(jié)構(gòu)組不是由三種基本結(jié)構(gòu)組成的成的u循環(huán)有兩個(gè)出口,不符合基本結(jié)構(gòu)的特點(diǎn)循環(huán)有兩個(gè)出口,不符合基本結(jié)構(gòu)的特點(diǎn)u無(wú)法直接用無(wú)法直接用N-S流程圖的三種基本結(jié)構(gòu)的流程圖的三種基本結(jié)構(gòu)的符號(hào)來(lái)表示符號(hào)來(lái)表示u先作必要的先作必要的變換變換NY開(kāi)始開(kāi)始輸入輸入n0w 2in%irr=0i+1ii 和和w=0nYN1w輸出輸出n是素?cái)?shù)是素?cái)?shù)結(jié)束結(jié)束w=0輸出輸出n不是素?cái)?shù)不是素?cái)?shù)輸入輸入nr=0是是否否0w2in%ir1wi+1i直到直到i 或或w 0nw=0是是否否輸出
57、輸出n是素?cái)?shù)是素?cái)?shù)輸出輸出n不是素?cái)?shù)不是素?cái)?shù)一個(gè)結(jié)構(gòu)化的算法是由一些基本結(jié)構(gòu)順序一個(gè)結(jié)構(gòu)化的算法是由一些基本結(jié)構(gòu)順序組成的組成的在基本結(jié)構(gòu)之間不存在向前或向后的跳轉(zhuǎn)在基本結(jié)構(gòu)之間不存在向前或向后的跳轉(zhuǎn),流程的轉(zhuǎn)移只存在于一個(gè)基本結(jié)構(gòu)范圍,流程的轉(zhuǎn)移只存在于一個(gè)基本結(jié)構(gòu)范圍之內(nèi)之內(nèi)一個(gè)非結(jié)構(gòu)化的算法可以用一個(gè)等價(jià)的結(jié)一個(gè)非結(jié)構(gòu)化的算法可以用一個(gè)等價(jià)的結(jié)構(gòu)化算法代替,其功能不變構(gòu)化算法代替,其功能不變?nèi)绻粋€(gè)算法不能分解為若干個(gè)基本結(jié)構(gòu)如果一個(gè)算法不能分解為若干個(gè)基本結(jié)構(gòu),則它必然不是一個(gè)結(jié)構(gòu)化的算法,則它必然不是一個(gè)結(jié)構(gòu)化的算法偽代碼是用介于自然語(yǔ)言和計(jì)算機(jī)語(yǔ)言之偽代碼是用介于自然語(yǔ)言和計(jì)算機(jī)語(yǔ)
58、言之間的文字和符號(hào)來(lái)描述算法間的文字和符號(hào)來(lái)描述算法用偽代碼寫(xiě)算法并無(wú)固定的、嚴(yán)格的語(yǔ)法用偽代碼寫(xiě)算法并無(wú)固定的、嚴(yán)格的語(yǔ)法規(guī)則,可以用英文,也可以中英文混用規(guī)則,可以用英文,也可以中英文混用例例2.16 求求5!。begin (算法開(kāi)始算法開(kāi)始) 1 t 2 i while i5 t*i t i+1 i print tend (算法結(jié)束算法結(jié)束)例例2.17 求求begin 1 sum 2 deno 1 sign while deno 100 (-1)*sign sign sign*1/deno term sum+term sum deno+1 deno print sumend100199
59、14131211要完成一項(xiàng)工作,包括要完成一項(xiàng)工作,包括設(shè)計(jì)算法設(shè)計(jì)算法和和實(shí)現(xiàn)算實(shí)現(xiàn)算法法兩個(gè)部分。兩個(gè)部分。設(shè)計(jì)算法的目的是為了實(shí)現(xiàn)算法。設(shè)計(jì)算法的目的是為了實(shí)現(xiàn)算法。不僅要考慮如何設(shè)計(jì)一個(gè)算法,也要考慮不僅要考慮如何設(shè)計(jì)一個(gè)算法,也要考慮如何實(shí)現(xiàn)一個(gè)算法。如何實(shí)現(xiàn)一個(gè)算法。 例例2.18 將例將例2.16表示的算法(求表示的算法(求5!)用)用C語(yǔ)言表示。語(yǔ)言表示。#include int main( ) int i,t; t=1; i=2; while(i=5) t=t*i; i=i+1; printf(%dn,t); return 0;例例2.19 將例將例2.17表示的算法(求多項(xiàng)
60、式表示的算法(求多項(xiàng)式 的值)用的值)用C語(yǔ)言表示。語(yǔ)言表示。10019914131211#include int main( ) int sign=1; double deno = 2.0,sum = 1.0, term; while (deno = 100) sign = -sign; term = sign/deno; sum = sum+term; deno = deno+1; printf (%fn,sum); return 0;結(jié)構(gòu)化程序設(shè)計(jì)強(qiáng)調(diào)程序設(shè)計(jì)風(fēng)格和程序結(jié)構(gòu)化程序設(shè)計(jì)強(qiáng)調(diào)程序設(shè)計(jì)風(fēng)格和程序結(jié)構(gòu)的規(guī)范化,提倡清晰的結(jié)構(gòu)結(jié)構(gòu)的規(guī)范化,提倡清晰的結(jié)構(gòu)。結(jié)構(gòu)化程序設(shè)計(jì)方法的結(jié)構(gòu)化程序設(shè)計(jì)方法的基本思路基本思路是:把一是:把一個(gè)復(fù)雜問(wèn)題的求解過(guò)程分階段進(jìn)行,每個(gè)個(gè)復(fù)雜問(wèn)題的求解過(guò)程分階段進(jìn)行,每個(gè)階段處理的問(wèn)題都控制在人們?nèi)菀桌斫夂碗A段處
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人倉(cāng)儲(chǔ)租賃合同范本
- 水泵購(gòu)買(mǎi)合同
- 綠色電子元器件生產(chǎn)合同
- 貨車轉(zhuǎn)讓合同協(xié)議書(shū)
- 中外合資經(jīng)營(yíng)合同范本(建筑材料)
- 個(gè)人與公司租房合同樣本參考
- 專利技術(shù)合同轉(zhuǎn)讓合同
- 中小企業(yè)板塊上市證券合同范本
- 個(gè)人勞動(dòng)合同范本:版
- 中保人壽子女教育婚嫁備用金保險(xiǎn)合同細(xì)則(97版修訂)
- 中醫(yī)診療設(shè)備種類目錄
- 戰(zhàn)略管理與倫理
- 如何構(gòu)建高效課堂課件
- 徐金桂行政法與行政訴訟法新講義
- 瀝青拌合設(shè)備結(jié)構(gòu)認(rèn)知
- GB/T 13234-2018用能單位節(jié)能量計(jì)算方法
- (課件)肝性腦病
- 北師大版五年級(jí)上冊(cè)數(shù)學(xué)教學(xué)課件第5課時(shí) 人民幣兌換
- 工程回訪記錄單
- 住房公積金投訴申請(qǐng)書(shū)
- 高考物理二輪專題課件:“配速法”解決擺線問(wèn)題
評(píng)論
0/150
提交評(píng)論