版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第1章 程序設(shè)計(jì)和C語(yǔ)言,1.1 什么是計(jì)算機(jī)程序 1.2 什么是計(jì)算機(jī)語(yǔ)言 1.3 C語(yǔ)言的發(fā)展及其特點(diǎn) 1.4 最簡(jiǎn)單的C語(yǔ)言程序 1.5 運(yùn)行C程序的步驟與方法 1.6 程序設(shè)計(jì)的任務(wù),1.1 什么是計(jì)算機(jī)程序,程序:一組計(jì)算機(jī)能識(shí)別和執(zhí)行的指令 只要讓計(jì)算機(jī)執(zhí)行這個(gè)程序,計(jì)算機(jī)就會(huì)自動(dòng)地、有條不紊地進(jìn)行工作 計(jì)算機(jī)的一切操作都是由程序控制的,離開(kāi)程序,計(jì)算機(jī)將一事無(wú)成,1.2 什么是計(jì)算機(jī)語(yǔ)言,計(jì)算機(jī)語(yǔ)言:人和計(jì)算機(jī)交流信息的、計(jì)算機(jī)和人都能識(shí)別的語(yǔ)言,1.2 什么是計(jì)算機(jī)語(yǔ)言,計(jì)算機(jī)語(yǔ)言發(fā)展階段: 機(jī)器語(yǔ)言(由0和1組成的指令) 符號(hào)語(yǔ)言(用英文字母和數(shù)字表示指令) 高級(jí)語(yǔ)言(接近于
2、人的自然語(yǔ)言和數(shù)學(xué)語(yǔ)言) 面向過(guò)程的語(yǔ)言 (非結(jié)構(gòu)化的語(yǔ)言、結(jié)構(gòu)化語(yǔ)言) 面向?qū)ο蟮恼Z(yǔ)言,低級(jí)語(yǔ)言,1.3 C語(yǔ)言的發(fā)展及其特點(diǎn),C語(yǔ)言是國(guó)際上廣泛流行的計(jì)算機(jī)高級(jí)語(yǔ)言。 C語(yǔ)言的發(fā)展:,BCPL語(yǔ)言,B語(yǔ)言,C語(yǔ)言,精練、接近硬件,但 過(guò)于簡(jiǎn)單, 無(wú)數(shù)據(jù)類(lèi)型,具有多種數(shù)據(jù)類(lèi)型,1.3 C語(yǔ)言的發(fā)展及其特點(diǎn),最初的C語(yǔ)言只是為描述和實(shí)現(xiàn)UNIX操作系統(tǒng)提供一種工作語(yǔ)言而設(shè)計(jì)的。,1.3 C語(yǔ)言的發(fā)展及其特點(diǎn),1983年,美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)(ANSI)成立了一個(gè)委員會(huì),根據(jù)C語(yǔ)言問(wèn)世以來(lái)各種版本對(duì)C語(yǔ)言的發(fā)展和擴(kuò)充,制定了第一個(gè)C語(yǔ)言標(biāo)準(zhǔn)草案(83 ANSI C)。,1.3 C語(yǔ)言的發(fā)展及其特點(diǎn),
3、1989年,ANSI公布了一個(gè)完整的C語(yǔ)言標(biāo)準(zhǔn)ANSI X3.159-1989(常稱(chēng)ANSI C,或C89)。,1.3 C語(yǔ)言的發(fā)展及其特點(diǎn),1990年,國(guó)際標(biāo)準(zhǔn)化組織ISO(International Standard Organization) 接受C89作為國(guó)際標(biāo)準(zhǔn)ISO/IEC 9899:1990,它和ANSI的C89基本上是相同的。,1.3 C語(yǔ)言的發(fā)展及其特點(diǎn),1995年,ISO對(duì)C90作了一些修訂,1999年,ISO又對(duì)C語(yǔ)言標(biāo)準(zhǔn)進(jìn)行修訂,在基本保留原來(lái)的C語(yǔ)言特征的基礎(chǔ)上,針對(duì)應(yīng)用的需要,增加了一些功能,尤其是C+中的一些功能,命名為ISO/IEC 9899:1999。,1.3
4、 C語(yǔ)言的發(fā)展及其特點(diǎn),2001、2004年先后進(jìn)行了兩次技術(shù)修正(TC1和TC2)。 ISO/IEC 9899:1999(及其技術(shù)修正)被稱(chēng)為 C99。 C99是C89(及1995基準(zhǔn)增補(bǔ)1)的擴(kuò)充。,1.3 C語(yǔ)言的發(fā)展及其特點(diǎn),本書(shū)的敘述以C99標(biāo)準(zhǔn)為依據(jù)(對(duì)C99新增加的功能作特別的說(shuō)明)。 目前不同軟件公司提供的各C語(yǔ)言編譯系統(tǒng)多數(shù)并未完全實(shí)現(xiàn)C99建議的功能 本書(shū)中程序基本上都可以在目前所用的編譯系統(tǒng)(如VC+ 6.0,Turbo C+ 3.0,GCC)上編譯和運(yùn)行。,1.3 C語(yǔ)言的發(fā)展及其特點(diǎn),C語(yǔ)言是一種用途廣泛、功能強(qiáng)大、使用靈活的過(guò)程性(procedural)編程語(yǔ)言,既
5、可用于編寫(xiě)應(yīng)用軟件,又能用于編寫(xiě)系統(tǒng)軟件。因此C語(yǔ)言問(wèn)世以后得到迅速推廣。,1.3 C語(yǔ)言的發(fā)展及其特點(diǎn),C語(yǔ)言主要特點(diǎn): 語(yǔ)言簡(jiǎn)潔、緊湊,使用方便、靈活。 只有37個(gè)關(guān)鍵字、9種控制語(yǔ)句 程序書(shū)寫(xiě)形式自由,源程序短,1.3 C語(yǔ)言的發(fā)展及其特點(diǎn),C語(yǔ)言主要特點(diǎn): 運(yùn)算符豐富。 有34種運(yùn)算符 把括號(hào)、賦值、強(qiáng)制類(lèi)型轉(zhuǎn)換等都作為運(yùn)算符處理 表達(dá)式類(lèi)型多樣化,1.3 C語(yǔ)言的發(fā)展及其特點(diǎn),C語(yǔ)言主要特點(diǎn): 數(shù)據(jù)類(lèi)型豐富。 包括:整型、浮點(diǎn)型、字符型、數(shù)組類(lèi)型、指針類(lèi)型、結(jié)構(gòu)體類(lèi)型、共用體類(lèi)型 C99又?jǐn)U充了復(fù)數(shù)浮點(diǎn)類(lèi)型、超長(zhǎng)整型(long long)、布爾類(lèi)型(bool) 指針類(lèi)型數(shù)據(jù),能用來(lái)實(shí)
6、現(xiàn)各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(如鏈表、樹(shù)、棧等)的運(yùn)算。,1.3 C語(yǔ)言的發(fā)展及其特點(diǎn),C語(yǔ)言主要特點(diǎn): 具有結(jié)構(gòu)化的控制語(yǔ)句 如ifelse語(yǔ)句、while語(yǔ)句、dowhile語(yǔ)句、switch語(yǔ)句、for語(yǔ)句 用函數(shù)作為程序的模塊單位,便于實(shí)現(xiàn)程序的模塊化 C語(yǔ)言是完全模塊化和結(jié)構(gòu)化的語(yǔ)言,1.3 C語(yǔ)言的發(fā)展及其特點(diǎn),C語(yǔ)言主要特點(diǎn): 語(yǔ)法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大。 對(duì)數(shù)組下標(biāo)越界不做檢查 對(duì)變量的類(lèi)型使用比較靈活,例如,整型量與字符型數(shù)據(jù)可以通用 C語(yǔ)言允許程序編寫(xiě)者有較大的自由度,因此放寬了語(yǔ)法檢查,1.3 C語(yǔ)言的發(fā)展及其特點(diǎn),C語(yǔ)言主要特點(diǎn): 允許直接訪問(wèn)物理地址,能進(jìn)行位操作,可
7、以直接對(duì)硬件進(jìn)行操作 C語(yǔ)言具有高級(jí)語(yǔ)言的功能和低級(jí)語(yǔ)言的許多功能,可用來(lái)編寫(xiě)系統(tǒng)軟件 這種雙重性,使它既是成功的系統(tǒng)描述語(yǔ)言,又是通用的程序設(shè)計(jì)語(yǔ)言,1.3 C語(yǔ)言的發(fā)展及其特點(diǎn),C語(yǔ)言主要特點(diǎn): 用C語(yǔ)言編寫(xiě)的程序可移植性好。 C的編譯系統(tǒng)簡(jiǎn)潔,很容易移植到新系統(tǒng) 在新系統(tǒng)上運(yùn)行時(shí),可直接編譯“標(biāo)準(zhǔn)鏈接庫(kù)”中的大部分功能,不需要修改源代碼 幾乎所有計(jì)算機(jī)系統(tǒng)都可以使用C語(yǔ)言,1.3 C語(yǔ)言的發(fā)展及其特點(diǎn),C語(yǔ)言主要特點(diǎn): 生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。,1.4最簡(jiǎn)單的C語(yǔ)言程序,1.4.1 最簡(jiǎn)單的C語(yǔ)言程序舉例 1.4.2 C語(yǔ)言程序的結(jié)構(gòu),1.4.1 最簡(jiǎn)單的C語(yǔ)言程序舉例,例1
8、.1 要求在屏幕上輸出以下一行信息。 This is a C program.,解題思路: 在主函數(shù)中用printf函數(shù)原樣輸出以上文字。,1.4.1 最簡(jiǎn)單的C語(yǔ)言程序舉例,#include int main( ) printf (”This is a C program.n”); return 0; ,函數(shù)的名字,表示主函數(shù),C程序必須有一個(gè) main 函數(shù),1.4.1 最簡(jiǎn)單的C語(yǔ)言程序舉例,#include int main( ) printf (”This is a C program.n”); return 0; ,主函數(shù)類(lèi)型,1.4.1 最簡(jiǎn)單的C語(yǔ)言程序舉例,#include
9、int main( ) printf (”This is a C program.n”); return 0; ,函數(shù)體,1.4.1 最簡(jiǎn)單的C語(yǔ)言程序舉例,#include int main( ) printf (”This is a C program.n”); return 0; ,輸出函數(shù),輸出語(yǔ)句,1.4.1 最簡(jiǎn)單的C語(yǔ)言程序舉例,#include int main( ) printf (”This is a C program.n”); return 0; ,輸出語(yǔ)句,1.4.1 最簡(jiǎn)單的C語(yǔ)言程序舉例,#include int main( ) printf (”This is
10、a C program.n”); return 0; ,換行符,1.4.1 最簡(jiǎn)單的C語(yǔ)言程序舉例,#include int main( ) printf (”This is a C program.n”); return 0; ,當(dāng)main函數(shù)執(zhí)行結(jié)束前 將整數(shù)0作為函數(shù)值,1.4.1 最簡(jiǎn)單的C語(yǔ)言程序舉例,#include int main( ) printf (”This is a C program.n”); return 0; ,表示語(yǔ)句結(jié)束,用到函數(shù)庫(kù)中的輸入輸出函數(shù)時(shí),1.4.1 最簡(jiǎn)單的C語(yǔ)言程序舉例,C語(yǔ)言允許用兩種注釋方式: /:?jiǎn)涡凶⑨?可單獨(dú)占一行 可出現(xiàn)在一行中其他
11、內(nèi)容的右側(cè) /*/:塊式注釋 可包含多行,例1.2 求兩個(gè)整數(shù)之和。,解題思路: 設(shè)置3個(gè)變量 a和b用來(lái)存放兩個(gè)整數(shù) sum用來(lái)存放和數(shù) 用賦值運(yùn)算符“=”把結(jié)果傳送給sum,#include int main( ) int a,b,sum; a = 123; b = 456; sum = a + b; printf(”sum is %dn”,sum); return 0; ,定義整型變量a,b,sum,對(duì)變量a,b賦值,將a與b的和賦給sum,#include int main( ) int a,b,sum; a = 123; b = 456; sum = a + b; printf(”s
12、um is %dn”,sum); return 0; ,用sum的值替代,希望輸出的字符,例1.3求兩個(gè)整數(shù)中的較大者。,解題思路: 用一個(gè)函數(shù)實(shí)現(xiàn)求兩個(gè)整數(shù)中的較大者 在主函數(shù)中調(diào)用此函數(shù)并輸出結(jié)果,#include int main( ) int max(int x,int y); int a,b,c; scanf(”%d,%d”, ,int max(int x,int y) int z; if (x y) z = x; else z = y; return(z); ,主函數(shù),max函數(shù),#include int main( ) int max(int x,int y); int a,b,
13、c; scanf(”%d,%d”, ,int max(int x,int y) int z; if (x y) z = x; else z = y; return(z); ,將x和y中較大者值返回給主函數(shù),#include int main( ) int max(int x,int y); int a,b,c; scanf(”%d,%d”, ,int max(int x,int y) int z; if (x y) z = x; else z = y; return(z); ,#include int main( ) int max(int x,int y); int a,b,c; scanf
14、(”%d,%d”, ,int max(int x,int y) int z; if (x y) z = x; else z = y; return(z); ,因max函數(shù)的定義在main函數(shù)之后,需聲明,#include int main( ) int max(int x,int y); int a,b,c; scanf(”%d,%d”, ,int max(int x,int y) int z; if (x y) z = x; else z = y; return(z); ,輸入函數(shù),#include int main( ) int max(int x,int y); int a,b,c; s
15、canf(”%d,%d”, ,int max(int x,int y) int z; if (x y) z = x; else z = y; return(z); ,輸入語(yǔ)句,#include int main( ) int max(int x,int y); int a,b,c; scanf(”%d,%d”, ,int max(int x,int y) int z; if (x y) z = x; else z = y; return(z); ,輸入的數(shù)據(jù)放到a,b中,輸入格式,a的地址,#include int main( ) int max(int x,int y); int a,b,c
16、; scanf(”%d,%d”, ,int max(int x,int y) int z; if (x y) z = x; else z = y; return(z); ,調(diào)用max函數(shù),#include int main( ) int max(int x,int y); int a,b,c; scanf(”%d,%d”, ,int max(int x,int y) int z; if (x y) z = x; else z = y; return(z); ,8,5,8,8,#include int main( ) int max(int x,int y); int a,b,c; scanf(
17、”%d,%d”, ,int max(int x,int y) int z; if (x y) z = x; else z = y; return(z); ,8,5,8,8,#include int main( ) int max(int x,int y); int a,b,c; scanf(”%d,%d”, ,int max(int x,int y) int z; if (x y) z = x; else z = y; return(z); ,實(shí)際參數(shù),形式參數(shù),1.4.2 C語(yǔ)言程序的結(jié)構(gòu),C語(yǔ)言程序的結(jié)構(gòu)特點(diǎn): 1.一個(gè)程序由一個(gè)或多個(gè)源程序文件組成 小程序往往只包括一個(gè)源程序文件 例1.
18、1,例1.2只有一個(gè)函數(shù) 例1.3有兩個(gè)函數(shù),只包括一個(gè)源程序文件,1.4.2 C語(yǔ)言程序的結(jié)構(gòu),C語(yǔ)言程序的結(jié)構(gòu)特點(diǎn): 一個(gè)源程序文件中可以包括三個(gè)部分: 預(yù)處理指令 全局聲明 函數(shù)定義,#include 等,在函數(shù)之外進(jìn)行的數(shù)據(jù)聲明,每個(gè)函數(shù)用來(lái)實(shí)現(xiàn)一定的功能,1.4.2 C語(yǔ)言程序的結(jié)構(gòu),C語(yǔ)言程序的結(jié)構(gòu)特點(diǎn): 2.函數(shù)是C程序的主要組成部分 一個(gè)C程序是由一個(gè)或多個(gè)函數(shù)組成的 必須包含一個(gè)main函數(shù)(只能有一個(gè)) 每個(gè)函數(shù)都用來(lái)實(shí)現(xiàn)一個(gè)或幾個(gè)特定功能 被調(diào)用的函數(shù)可以是庫(kù)函數(shù),也可以是自己編制設(shè)計(jì)的函數(shù),1.4.2 C語(yǔ)言程序的結(jié)構(gòu),C語(yǔ)言程序的結(jié)構(gòu)特點(diǎn): 3.一個(gè)函數(shù)包括兩個(gè)部分:
19、 函數(shù)首部 int max ( int x, int y ),函數(shù)的第1行,函數(shù)類(lèi)型,函數(shù)名,參數(shù)類(lèi)型,參數(shù)名,1.4.2 C語(yǔ)言程序的結(jié)構(gòu),C語(yǔ)言程序的結(jié)構(gòu)特點(diǎn): 3.一個(gè)函數(shù)包括兩個(gè)部分: 函數(shù)首部 int max ( int x, int y ) 若函數(shù)無(wú)參,在括弧中寫(xiě)void或空括弧,int main( void) 或 int main(),1.4.2 C語(yǔ)言程序的結(jié)構(gòu),C語(yǔ)言程序的結(jié)構(gòu)特點(diǎn): 3.一個(gè)函數(shù)包括兩個(gè)部分: 函數(shù)體 聲明部分 定義在本函數(shù)中所用到的變量 對(duì)本函數(shù)所調(diào)用函數(shù)進(jìn)行聲明 執(zhí)行部分:由若干個(gè)語(yǔ)句組成,指定在函數(shù)中所進(jìn)行的操作,可以沒(méi)有聲明部分,1.4.2 C語(yǔ)言程
20、序的結(jié)構(gòu),C語(yǔ)言程序的結(jié)構(gòu)特點(diǎn): 3.一個(gè)函數(shù)包括兩個(gè)部分: 函數(shù)體 void dump ( ) ,可以是空函數(shù),1.4.2 C語(yǔ)言程序的結(jié)構(gòu),C語(yǔ)言程序的結(jié)構(gòu)特點(diǎn): 4. 程序總是從main函數(shù)開(kāi)始執(zhí)行 5. C程序?qū)τ?jì)算機(jī)的操作由C語(yǔ)句完成 C程序書(shū)寫(xiě)格式是比較自由的 一行內(nèi)可以寫(xiě)幾個(gè)語(yǔ)句 一個(gè)語(yǔ)句可以分寫(xiě)在多行上 為清晰起見(jiàn),習(xí)慣上每行只寫(xiě)一個(gè)語(yǔ)句,1.4.2 C語(yǔ)言程序的結(jié)構(gòu),C語(yǔ)言程序的結(jié)構(gòu)特點(diǎn): 4. 程序總是從main函數(shù)開(kāi)始執(zhí)行 5. C程序?qū)τ?jì)算機(jī)的操作由C語(yǔ)句完成 6. 數(shù)據(jù)聲明和語(yǔ)句最后必須有分號(hào) 7. C語(yǔ)言本身不提供輸入輸出語(yǔ)句 8. 程序應(yīng)當(dāng)包含注釋?zhuān)黾涌勺x性,1
21、.5 運(yùn)行C程序的步驟與方法,1.上機(jī)輸入和編輯源程序(.c文件) 2.對(duì)源程序進(jìn)行編譯(.obj文件) 3.進(jìn)行連接處理(.exe文件) 4.運(yùn)行可執(zhí)行程序,得到運(yùn)行結(jié)果 說(shuō)明:以上過(guò)程參見(jiàn)教材中圖1.1 附錄A中有Visual C+ 6.0中編輯、 編譯、連接和運(yùn)行C程序的方法,1.6 程序設(shè)計(jì)的任務(wù),1.問(wèn)題分析 對(duì)于接手的任務(wù)要進(jìn)行認(rèn)真的分析 研究所給定的條件 分析最后應(yīng)達(dá)到的目標(biāo) 找出解決問(wèn)題的規(guī)律 選擇解題的方法,1.6 程序設(shè)計(jì)的任務(wù),1.問(wèn)題分析 2.設(shè)計(jì)算法 設(shè)計(jì)出解題的方法和具體步驟,1.6 程序設(shè)計(jì)的任務(wù),1.問(wèn)題分析 2.設(shè)計(jì)算法 3.編寫(xiě)程序 4.對(duì)源程序進(jìn)行編輯、編
22、譯和連接 5.運(yùn)行程序,分析結(jié)果 結(jié)果錯(cuò)了,程序肯定錯(cuò) 結(jié)果對(duì)了,程序未必對(duì),1.6 程序設(shè)計(jì)的任務(wù),1.問(wèn)題分析 2.設(shè)計(jì)算法 3.編寫(xiě)程序 4.對(duì)源程序進(jìn)行編輯、編譯和連接 5.運(yùn)行程序,分析結(jié)果 6.編寫(xiě)程序文檔,第2章 算法-程序的靈魂,一個(gè)程序主要包括以下兩方面的信息: (1) 對(duì)數(shù)據(jù)的描述。在程序中要指定用到哪些數(shù)據(jù)以及這些數(shù)據(jù)的類(lèi)型和數(shù)據(jù)的組織形式 這就是數(shù)據(jù)結(jié)構(gòu)(data structure) (2) 對(duì)操作的描述。即要求計(jì)算機(jī)進(jìn)行操作的步驟 也就是算法(algorithm),數(shù)據(jù)是操作的對(duì)象 操作的目的是對(duì)數(shù)據(jù)進(jìn)行加工處理,以得到期望的結(jié)果 著名計(jì)算機(jī)科學(xué)家沃思(Nikikl
23、aus Wirth)提出一個(gè)公式: 算法 + 數(shù)據(jù)結(jié)構(gòu) = 程序,一個(gè)程序除了算法和數(shù)據(jù)結(jié)構(gòu)這主要要素外,還應(yīng)當(dāng)采用結(jié)構(gòu)化程序設(shè)計(jì)方法進(jìn)行程序設(shè)計(jì),并且用某一種計(jì)算機(jī)語(yǔ)言表示 算法、數(shù)據(jù)結(jié)構(gòu)、程序設(shè)計(jì)方法和語(yǔ)言工具是一個(gè)程序設(shè)計(jì)人員應(yīng)具備的知識(shí),算法是解決“做什么”和“怎么做”的問(wèn)題 程序中的操作語(yǔ)句,是算法的體現(xiàn) 不了解算法就談不上程序設(shè)計(jì),2.1 什么是算法 2.2 簡(jiǎn)單的算法舉例 2.3 算法的特性 2.4 怎樣表示一個(gè)算法 2.5 結(jié)構(gòu)化程序設(shè)計(jì)方法,2.1 什么是算法,廣義地說(shuō),為解決一個(gè)問(wèn)題而采取的方法和步驟,就稱(chēng)為“算法” 對(duì)同一個(gè)問(wèn)題,可以有不同的解題方法和步驟 為了有效地進(jìn)行
24、解題,不僅需要保證算法正確,還要考慮算法的質(zhì)量,選擇合適的算法,2.1 什么是算法,計(jì)算機(jī)算法可分為兩大類(lèi)別: 數(shù)值運(yùn)算算法 非數(shù)值運(yùn)算算法 數(shù)值運(yùn)算的目的是求數(shù)值解 非數(shù)值運(yùn)算包括的面十分廣泛,最常見(jiàn)的是用于事務(wù)管理領(lǐng)域,2.2簡(jiǎn)單的算法舉例,例2.1 求12345 可以用最原始的方法進(jìn)行: 步驟1:先求1*2,得到結(jié)果2。 步驟2:將步驟1得到的乘積2再乘以3,得到結(jié)果6。 步驟3:將6再乘以4,得24。 步驟4:將24再乘以5,得120。這就是最后的結(jié)果。,例2.1 求12345 1000,太繁瑣,2.2簡(jiǎn)單的算法舉例,改進(jìn)的算法: 設(shè)變量p為被乘數(shù) 變量i為乘數(shù) 用循環(huán)算法求結(jié)果,2.
25、2簡(jiǎn)單的算法舉例,S1:使p=1,或?qū)懗?p S2:使i=2,或?qū)懗?i S3:使p與i相乘,乘積仍放在變量p中,可表示為:p*ip S4:使i的值加1,即i+1 i S5:如果i不大于5,返回重新執(zhí)行S3;否則,算法結(jié)束 最后得到p的值就是 5!的值,若是1000,求什么?,2.2簡(jiǎn)單的算法舉例,S1:使p=1,或?qū)懗?p S2:使i=2,或?qū)懗?i S3:使p與i相乘,乘積仍放在變量p中,可表示為:p*ip S4:使i的值加1,即i+1 i S5:如果i不大于5,返回重新執(zhí)行S3;否則,算法結(jié)束 最后得到p的值就是 5!的值,若求1357911,3,3,2,2,11,11,相當(dāng)于i 11,
26、例2.2 有50個(gè)學(xué)生,要求將成績(jī)?cè)?0分以上的學(xué)生的學(xué)號(hào)和成績(jī)輸出。 用ni代表第i個(gè)學(xué)生學(xué)號(hào),gi表示第i個(gè)學(xué)生成績(jī) S1:1i S2:如果gi80, 則輸出ni和gi,否則不輸出 S3:i+1i S4:如果i50,返回到步驟S2,繼續(xù)執(zhí)行,否則,算法結(jié)束,例2.3 判定20002500年中的每一年是否閏年,并將結(jié)果輸出。 閏年的條件: (1)能被4整除,但不能被100整除的年份都是閏年,如2008、2012、2048年 (2)能被400整除的年份是閏年,如2000年 不符合這兩個(gè)條件的年份不是閏年 例如2009、2100年,設(shè)year為被檢測(cè)的年份。算法表示如下: S1:2000year
27、 S2:若year不能被4整除,則輸出year 的值和“不是閏年”。然后轉(zhuǎn)到S6 S3:若year能被4整除,不能被100整除,則輸出year的值和“是閏年”。然后轉(zhuǎn)到S6 S4:若year能被400整除,則輸出year的值和“是閏年” ,然后轉(zhuǎn)到S6 S5: 其他情況輸出year的值和“不是閏年” S6:year+1year S7:當(dāng)year2500時(shí),轉(zhuǎn)S2,否則停止,year不能被4整除,非閏年,year被4整除,但不能被100整除,閏年,year被100整除,又能被400整除,閏年,其他,非閏年,逐漸縮小判斷的范圍,例2.4 求 規(guī)律: 第1項(xiàng)的分子分母都是1 第2項(xiàng)的分母是2,以后每
28、一項(xiàng)的分母子都是前一項(xiàng)的分母加1 笫2項(xiàng)前的運(yùn)算符為“-”,后一項(xiàng)前面的運(yùn)算符都與前一項(xiàng)前的運(yùn)算符相反,例2.4 求 S1:sign=1 S2:sum=1 S3:deno=2 S4:sign=(-1)*sign S5:term=sign*(1/deno) S6:sum=sum+term S7:deno=deno+1 S8:若deno100返回S4;否則算法結(jié)束,sign當(dāng)前項(xiàng)符號(hào) term當(dāng)前項(xiàng)的值 sum當(dāng)前各項(xiàng)的和 deno當(dāng)前項(xiàng)分母,-1,-1/2,1-1/2,3,滿足,返回S4,例2.4 求 S1:sign=1 S2:sum=1 S3:deno=2 S4:sign=(-1)*sign
29、S5:term=sign*(1/deno) S6:sum=sum+term S7:deno=deno+1 S8:若deno100返回S4;否則算法結(jié)束,sign當(dāng)前項(xiàng)符號(hào) term當(dāng)前項(xiàng)的值 sum當(dāng)前各項(xiàng)的和 deno當(dāng)前項(xiàng)分母,1,1/3,1-1/2+1/3,4,滿足,返回S4,例2.4 求 S1:sign=1 S2:sum=1 S3:deno=2 S4:sign=(-1)*sign S5:term=sign*(1/deno) S6:sum=sum+term S7:deno=deno+1 S8:若deno100返回S4;否則算法結(jié)束,99次循環(huán)后sum的值就是所要求的結(jié)果,例2.5 給出一
30、個(gè)大于或等于3的正整數(shù),判斷它是不是一個(gè)素?cái)?shù)。 所謂素?cái)?shù)(prime),是指除了1和該數(shù)本身之外,不能被其他任何整數(shù)整除的數(shù) 例如,13是素?cái)?shù),因?yàn)樗荒鼙?,3,4,12整除。,判斷一個(gè)數(shù)n(n3)是否素?cái)?shù):將n作為被除數(shù),將2到(n-1)各個(gè)整數(shù)先后作為除數(shù),如果都不能被整除,則n為素?cái)?shù) S1:輸入n的值 S2:i=2 (i作為除數(shù)) S3:n被i除,得余數(shù)r S4:如果r=0,表示n能被i整除,則輸出n“不是素?cái)?shù)”,算法結(jié)束;否則執(zhí)行S5 S5:i+1i S6:如果in-1,返回S3;否則輸出n “是素?cái)?shù)”,然后結(jié)束。,可改為n/2,2.3算法的特性,一個(gè)有效算法應(yīng)該具有以下特點(diǎn): (1
31、) 有窮性。一個(gè)算法應(yīng)包含有限的操作步驟,而不能是無(wú)限的。 (2) 確定性。算法中的每一個(gè)步驟都應(yīng)當(dāng)是確定的,而不應(yīng)當(dāng)是含糊的、模棱兩可的。,2.3算法的特性,一個(gè)有效算法應(yīng)該具有以下特點(diǎn): (3) 有零個(gè)或多個(gè)輸入。所謂輸入是指在執(zhí)行算法時(shí)需要從外界取得必要的信息。 (4) 有一個(gè)或多個(gè)輸出。算法的目的是為了求解,“解” 就是輸出。 沒(méi)有輸出的算法是沒(méi)有意義的。 (5) 有效性。算法中的每一個(gè)步驟都應(yīng)當(dāng)能有效地執(zhí)行,并得到確定的結(jié)果。,2.3算法的特性,對(duì)于一般最終用戶來(lái)說(shuō): 他們并不需要在處理每一個(gè)問(wèn)題時(shí)都要自己設(shè)計(jì)算法和編寫(xiě)程序 可以使用別人已設(shè)計(jì)好的現(xiàn)成算法和程序 只需根據(jù)已知算法的要
32、求給予必要的輸入,就能得到輸出的結(jié)果,輸入3個(gè)數(shù),黑箱子,3個(gè)數(shù)中最大數(shù),求3個(gè)數(shù)的最大數(shù),2.4怎樣表示一個(gè)算法,常用的方法有: 自然語(yǔ)言 傳統(tǒng)流程圖 結(jié)構(gòu)化流程圖 偽代碼 ,2.4怎樣表示一個(gè)算法,2.4.1 用自然語(yǔ)言表示算法 2.4.2 用流程圖表示算法 2.4.3 三種基本結(jié)構(gòu)和改進(jìn)的流程圖 2.4.4 用N-S流程圖表示算法 2.4.5 用偽代碼表示算法 2.4.6 用計(jì)算機(jī)語(yǔ)言表示算法,2.4.1 用自然語(yǔ)言表示算法,2.2節(jié)介紹的算法是用自然語(yǔ)言表示的 用自然語(yǔ)言表示通俗易懂,但文字冗長(zhǎng),容易出現(xiàn)歧義性 用自然語(yǔ)言描述包含分支和循環(huán)的算法,不很方便 除了很簡(jiǎn)單的問(wèn)題外,一般不用
33、自然語(yǔ)言,2.4.2用流程圖表示算法,流程圖是用一些圖框來(lái)表示各種操作 用圖形表示算法,直觀形象,易于理解,起止框,輸入輸出框,處理框,判斷框,流程線,連接點(diǎn),注釋框,x0,Y,N,一個(gè)入口,兩個(gè)出口,2.4.2用流程圖表示算法,流程圖是用一些圖框來(lái)表示各種操作 用圖形表示算法,直觀形象,易于理解,起止框,輸入輸出框,處理框,判斷框,流程線,連接點(diǎn),注釋框,位置不夠,防止交叉,例2.6 將例2.1的算法用流程圖表示。 求12345 如果需要將最后結(jié)果輸出:,1t,i5,開(kāi)始,2i,t*it,i+1i,結(jié)束,N,Y,例2.6 將例2.1的算法用流程圖表示。 求12345 如果需要將最后結(jié)果輸出:
34、,1t,輸出t,i5,開(kāi)始,2i,t*it,i+1i,結(jié)束,N,Y,例2.7 例2.2的算法用流程圖表示。有50個(gè)學(xué)生,要求將成績(jī)?cè)?0分以上的學(xué)生的學(xué)號(hào)和成績(jī)輸出。,1i,i50,開(kāi)始,i+1i,結(jié)束,N,Y,輸入ni、gi,1i,開(kāi)始,gi80,輸出ni、gi,i+1i,i50,N,Y,Y,N,如果包括輸入數(shù)據(jù)部分,1i,i50,開(kāi)始,i+1i,結(jié)束,N,Y,輸入ni、gi,1i,gi80,輸出ni、gi,i+1i,i50,N,Y,Y,N,如果包括輸入數(shù)據(jù)部分,例2.8 例2.3判定閏年的算法用流程圖表示。判定20002500年中的每一年是否閏年,將結(jié)果輸出。,N,Y,N,Y,Y,N,Y,
35、N,例2.9 將例2.4的算法用流程圖表示。求,1sum 2deno 1sign,(-1)*signsign sign*(1/deno)term sum+termsum deno+1deno,N,Y,例2.10 例2.5判斷素?cái)?shù)的算法用流程圖表示。對(duì)一個(gè)大于或等于3的正整數(shù),判斷它是不是一個(gè)素?cái)?shù)。,N,Y,2i,n%ir,i+1i,Y,N,通過(guò)以上幾個(gè)例子可以看出流程圖是表示算法的較好的工具 一個(gè)流程圖包括以下幾部分: (1) 表示相應(yīng)操作的框 (2) 帶箭頭的流程線 (3) 框內(nèi)外必要的文字說(shuō)明 流程線不要忘記畫(huà)箭頭,否則難以判定各框的執(zhí)行次序,2.4.3 三種基本結(jié)構(gòu)和改進(jìn)的流程圖,1.傳
36、統(tǒng)流程圖的弊端 傳統(tǒng)的流程圖用流程線指出各框的執(zhí)行順序,對(duì)流程線的使用沒(méi)有嚴(yán)格限制 使用者可以毫不受限制地使流程隨意地轉(zhuǎn)來(lái)轉(zhuǎn)去,使人難以理解算法的邏輯,2.4.3 三種基本結(jié)構(gòu)和改進(jìn)的流程圖,2.三種基本結(jié)構(gòu) (1) 順序結(jié)構(gòu),A,B,2.4.3 三種基本結(jié)構(gòu)和改進(jìn)的流程圖,2.三種基本結(jié)構(gòu) (2) 選擇結(jié)構(gòu),A,B,Y,N,A,Y,N,2.4.3 三種基本結(jié)構(gòu)和改進(jìn)的流程圖,2.三種基本結(jié)構(gòu) (3) 循環(huán)結(jié)構(gòu) 當(dāng)型循環(huán)結(jié)構(gòu),A,Y,N,Y,N,0 x,x+1x,輸出1,2,3,4,5,2.4.3 三種基本結(jié)構(gòu)和改進(jìn)的流程圖,2.三種基本結(jié)構(gòu) (3) 循環(huán)結(jié)構(gòu) 直到型循環(huán)結(jié)構(gòu),A,Y,N,Y,
37、N,0 x,x+1x,輸出1,2,3,4,5,以上三種基本結(jié)構(gòu),有以下共同特點(diǎn): (1) 只有一個(gè)入口 (2) 只有一個(gè)出口 一個(gè)判斷框有兩個(gè)出口 一個(gè)選擇結(jié)構(gòu)只有一個(gè)出口 (3) 結(jié)構(gòu)內(nèi)的每一部分都有機(jī)會(huì)被執(zhí)行到。也就是說(shuō),對(duì)每一個(gè)框來(lái)說(shuō),都應(yīng)當(dāng)有一條從入口到出口的路徑通過(guò)它 (4) 結(jié)構(gòu)內(nèi)不存在“死循環(huán)”,由三種基本結(jié)構(gòu)派生出來(lái)的結(jié)構(gòu):,A,N,Y,B,根據(jù)表達(dá)式p 的值進(jìn)行選擇,A,B,p=p1,p=p2,M,N,p=pm,p=pn,2.4.4 用N-S流程圖表示算法,N-S流程圖用以下的流程圖符號(hào):,順序結(jié)構(gòu),選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu) (當(dāng)型),循環(huán)結(jié)構(gòu)(直到型),例2.11將例2.1的求5
38、!算法用N-S圖表示。,直到i5,1t,輸出t,2i,t*it,i+1i,例2.12 將例2.2的算法用N-S圖表示。將50名學(xué)生中成績(jī)高于80分者的學(xué)號(hào)和成績(jī)輸出。,直到i50,1t,1i,i+1i,輸入ni、gi,i+1i,直到i50,gi80,否,是,輸出ni,gi,例2.13 將例2.3判定閏年的算法用N-S圖表示,直到y(tǒng)ear2500,2000year,year+1year,否,是,year%4為0,否,是,輸出 year 非閏年,year%100不為0,year%400為0,是,否,輸出year 非閏年,輸出year 閏年,輸出 year 閏年,例2.14 將例2.4的算法用N-S
39、圖表示。求,直到deno100,deno+1deno,輸出sum,1sum,1sign,2deno,(-1)*signsign,sign*(1/deno)term,sum+termsum,例2.15 將例2.5判別素?cái)?shù)的算法用N-S流程圖表示。 例2.10的流程圖不是由三種基本結(jié)構(gòu)組成的 循環(huán)有兩個(gè)出口,不符合基本結(jié)構(gòu)的特點(diǎn) 無(wú)法直接用N-S流程圖的三種基本結(jié)構(gòu)的符號(hào)來(lái)表示 先作必要的變換,輸入n,r=0,是,否,0w,2i,n%ir,1w,i+1i,直到i 或w 0,w=0,是,否,輸出n是素?cái)?shù),輸出n不是素?cái)?shù),一個(gè)結(jié)構(gòu)化的算法是由一些基本結(jié)構(gòu)順序組成的 在基本結(jié)構(gòu)之間不存在向前或向后的跳轉(zhuǎn)
40、,流程的轉(zhuǎn)移只存在于一個(gè)基本結(jié)構(gòu)范圍之內(nèi) 一個(gè)非結(jié)構(gòu)化的算法可以用一個(gè)等價(jià)的結(jié)構(gòu)化算法代替,其功能不變 如果一個(gè)算法不能分解為若干個(gè)基本結(jié)構(gòu),則它必然不是一個(gè)結(jié)構(gòu)化的算法,2.4.5用偽代碼表示算法,偽代碼是用介于自然語(yǔ)言和計(jì)算機(jī)語(yǔ)言之間的文字和符號(hào)來(lái)描述算法 用偽代碼寫(xiě)算法并無(wú)固定的、嚴(yán)格的語(yǔ)法規(guī)則,可以用英文,也可以中英文混用,例2.16 求5!。 begin (算法開(kāi)始) 1 t 2 i while i5 t*i t i+1 i print t end (算法結(jié)束),例2.17 求 begin 1 sum 2 deno 1 sign while deno 100 (-1)*sign si
41、gn sign*1/deno term sum+term sum deno+1 deno print sum end,2.4.6用計(jì)算機(jī)語(yǔ)言表示算法,要完成一項(xiàng)工作,包括設(shè)計(jì)算法和實(shí)現(xiàn)算法兩個(gè)部分。 設(shè)計(jì)算法的目的是為了實(shí)現(xiàn)算法。 不僅要考慮如何設(shè)計(jì)一個(gè)算法,也要考慮如何實(shí)現(xiàn)一個(gè)算法。,例2.18 將例2.16表示的算法(求5!)用C語(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)式 的值)用C語(yǔ)言表示。,#
42、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; ,2.5結(jié)構(gòu)化程序設(shè)計(jì)方法,結(jié)構(gòu)化程序設(shè)計(jì)強(qiáng)調(diào)程序設(shè)計(jì)風(fēng)格和程序結(jié)構(gòu)的規(guī)范化,提倡清晰的結(jié)構(gòu)。 結(jié)構(gòu)化程序設(shè)計(jì)方法的基本思路是:把一個(gè)復(fù)雜問(wèn)題的求解過(guò)程分階段進(jìn)行,每個(gè)階段處理的問(wèn)題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。,2.5結(jié)構(gòu)化程序設(shè)計(jì)方法,
43、采取以下方法保證得到結(jié)構(gòu)化的程序: (1) 自頂向下; (2) 逐步細(xì)化; (3) 模塊化設(shè)計(jì); (4) 結(jié)構(gòu)化編碼。,第3章 最簡(jiǎn)單的C程序設(shè)計(jì),3.1 順序程序設(shè)計(jì)舉例 3.2 數(shù)據(jù)的表現(xiàn)形式及其運(yùn)算 3.3 C語(yǔ)句 3.4 數(shù)據(jù)的輸入輸出,3.1順序程序設(shè)計(jì)舉例,例3.1 有人用溫度計(jì)測(cè)量出用華氏法表示的溫度(如 F,今要求把它轉(zhuǎn)換為以攝氏法表示的溫度(如 C) 。,解題思路:找到二者間的轉(zhuǎn)換公式,f代表華氏溫度,c代表攝氏溫度,3.1順序程序設(shè)計(jì)舉例,算法:,例3.1 有人用溫度計(jì)測(cè)量出用華氏法表示的溫度(如 F,今要求把它轉(zhuǎn)換為以攝氏法表示的溫度(如 C) 。,N-S圖,3.1順序程
44、序設(shè)計(jì)舉例,#include int main ( ) float f,c; f=64.0; c=(5.0/9)*(f-32); printf(f=%fnc=%fn,f,c); return 0; ,定義f和c為單精度浮點(diǎn)型變量,指定f的值,計(jì)算c的值,輸出f和c的值,3.1順序程序設(shè)計(jì)舉例,例3.2 計(jì)算存款利息。有1000元,想存一年。有三種方法可選: (1)活期,年利率為r1 (2)一年期定期,年利率為r2 (3)存兩次半年定期,年利率為r3 請(qǐng)分別計(jì)算出一年后按三種方法所得到的本息和。,3.1順序程序設(shè)計(jì)舉例,解題思路:確定計(jì)算本息和的公式。 從數(shù)學(xué)知識(shí)可知:若存款額為p0,則: 活期
45、存款一年后本息和為: p1=p0(1+r1) 一年期定期存款,一年后本息和為: p2=p0(1+r2) 兩次半年定期存款,一年后本息和為:,3.1順序程序設(shè)計(jì)舉例,算法:,3.1順序程序設(shè)計(jì)舉例,#include int main ( ) float p0=1000, r1=0.0036,r2=0.0225, r3=0.0198, p1, p2, p3; p1 = p0 * (1 + r1); p2 = p0 * (1 + r2); p3 = p0 * (1 + r3/2) * (1 + r3/2); printf(”%fn%fn%fn”,p1, p2, p3); return 0; ,定義變
46、量同時(shí)賦予初值,3.2 數(shù)據(jù)的表現(xiàn)形式及其運(yùn)算,3.2.1 常量和變量 3.2.2 數(shù)據(jù)類(lèi)型 3.2.3 整型數(shù)據(jù) 3.2.4 字符型數(shù)據(jù) 3.2.5 浮點(diǎn)型數(shù)據(jù) 3.2.6 怎樣確定常量的類(lèi)型 3.2.7 運(yùn)算符和表達(dá)式,3.2.1 常量和變量,1.常量:在程序運(yùn)行過(guò)程中,其值不能被改變的量 整型常量:如1000,12345,0,-345 實(shí)型常量 十進(jìn)制小數(shù)形式:如0.34 -56.79 0.0 指數(shù)形式:如12.34e3 (代表12.34103) 字符常量:如? 轉(zhuǎn)義字符:如n 字符串常量:如”boy” 符號(hào)常量:#define PI 3.1416,3.2.1 常量和變量,2. 變量:在
47、程序運(yùn)行期間,變量的值是可以改變的 變量必須先定義,后使用 定義變量時(shí)指定該變量的名字和類(lèi)型 變量名和變量值是兩個(gè)不同的概念 變量名實(shí)際上是以一個(gè)名字代表的一個(gè)存儲(chǔ)地址 從變量中取值,實(shí)際上是通過(guò)變量名找到相應(yīng)的內(nèi)存地址,從該存儲(chǔ)單元中讀取數(shù)據(jù),3.2.1 常量和變量,3.常變量:const int a=3; 4.標(biāo)識(shí)符:一個(gè)對(duì)象的名字 語(yǔ)言規(guī)定標(biāo)識(shí)符只能由字母、數(shù)字和下劃線3種字符組成,且第一個(gè)字符必須為字母或下劃線 合法的標(biāo)識(shí)符:如sum,average, _total, Class, day, BASIC, li_ling 不合法的標(biāo)識(shí)符:M.D.John,¥123,33,3D64,ab
48、,大小寫(xiě)字母是不同的字符,3.2.2 數(shù)據(jù)類(lèi)型,所謂類(lèi)型,就是對(duì)數(shù)據(jù)分配存儲(chǔ)單元的安排,包括存儲(chǔ)單元的長(zhǎng)度(占多少字節(jié))以及數(shù)據(jù)的存儲(chǔ)形式 不同的類(lèi)型分配不同的長(zhǎng)度和存儲(chǔ)形式,3.2.2 數(shù)據(jù)類(lèi)型,C語(yǔ)言允許使用的數(shù)據(jù)類(lèi)型: 基本類(lèi)型 整型類(lèi)型 基本整型 短整型 長(zhǎng)整型 雙長(zhǎng)整型 字符型 布爾型,浮點(diǎn)類(lèi)型 單精度浮點(diǎn)型 雙精度浮點(diǎn)型 復(fù)數(shù)浮點(diǎn)型,3.2.2 數(shù)據(jù)類(lèi)型,C語(yǔ)言允許使用的數(shù)據(jù)類(lèi)型: 基本類(lèi)型 枚舉類(lèi)型 空類(lèi)型 派生類(lèi)型 指針類(lèi)型 數(shù)組類(lèi)型 結(jié)構(gòu)體類(lèi)型 共用體類(lèi)型 函數(shù)類(lèi)型,算術(shù)類(lèi)型,純量類(lèi)型,3.2.3 整型數(shù)據(jù),1. 整型數(shù)據(jù)的分類(lèi) 最基本的整型類(lèi)型 基本整型(int型):占2個(gè)
49、或4個(gè)字節(jié) 短整型(short int):VC+6.0中占2個(gè)字節(jié) 長(zhǎng)整型(long int):VC+6.0中占4個(gè)字節(jié) 雙長(zhǎng)整型(long long int):C99新增的,3.2.3 整型數(shù)據(jù),1. 整型數(shù)據(jù)的分類(lèi) 2. 整型變量的符號(hào)屬性 整型變量的值的范圍包括負(fù)數(shù)到正數(shù) 可以將變量定義為“無(wú)符號(hào)”類(lèi)型 擴(kuò)充的整形類(lèi)型:,3.2.3 整型數(shù)據(jù),擴(kuò)充的整型類(lèi)型: 有符號(hào)基本整型 signed int; 無(wú)符號(hào)基本整型 unsigned int; 有符號(hào)短整型 signed short int; 無(wú)符號(hào)短整型 unsigned short int; 有符號(hào)長(zhǎng)整型 signed long in
50、t; 無(wú)符號(hào)長(zhǎng)整型 unsigned long int 有符號(hào)雙長(zhǎng)整型 signed long long int; 無(wú)符號(hào)雙長(zhǎng)整型 unsigned long long int,3.2.4 字符型數(shù)據(jù),字符是按其代碼(整數(shù))形式存儲(chǔ)的 C99把字符型數(shù)據(jù)作為整數(shù)類(lèi)型的一種 字符型數(shù)據(jù)在使用上有自己的特點(diǎn),3.2.4 字符型數(shù)據(jù),1.字符與字符代碼 大多數(shù)系統(tǒng)采用ASCII字符集 字母:A Z,a z 數(shù)字:09 專(zhuān)門(mén)符號(hào):29個(gè):! ” # 系統(tǒng)把“?”的ASCII代碼63賦給變量c printf(”%d %cn”,c,c); 輸出結(jié)果是: 63 ?,3.2.5 浮點(diǎn)型數(shù)據(jù),浮點(diǎn)型數(shù)據(jù)是用來(lái)表
51、示具有小數(shù)點(diǎn)的實(shí)數(shù) float型(單精度浮點(diǎn)型) 編譯系統(tǒng)為float型變量分配4個(gè)字節(jié) 數(shù)值以規(guī)范化的二進(jìn)制數(shù)指數(shù)形式存放 參見(jiàn)主教材圖3.11,3.2.5 浮點(diǎn)型數(shù)據(jù),浮點(diǎn)型數(shù)據(jù)是用來(lái)表示具有小數(shù)點(diǎn)的實(shí)數(shù) float型(單精度浮點(diǎn)型) double型(雙精度浮點(diǎn)型) 編譯系統(tǒng)為double型變量分配8個(gè)字節(jié) 15位有效數(shù)字 long double(長(zhǎng)雙精度)型,3.2.6 怎樣確定常量的類(lèi)型,字符常量:由單撇號(hào)括起來(lái)的單個(gè)字符或轉(zhuǎn)義字符 整型常量:不帶小數(shù)點(diǎn)的數(shù)值 系統(tǒng)根據(jù)數(shù)值的大小確定int型還是long型等 浮點(diǎn)型常量:凡以小數(shù)形式或指數(shù)形式出現(xiàn)的實(shí)數(shù) C編譯系統(tǒng)把浮點(diǎn)型常量都按雙精度
52、處理 分配8個(gè)字節(jié),3.2.7 運(yùn)算符和表達(dá)式,1.基本的算術(shù)運(yùn)算符: + :正號(hào)運(yùn)算符(單目運(yùn)算符) - :負(fù)號(hào)運(yùn)算符(單目運(yùn)算符) * :乘法運(yùn)算符 / :除法運(yùn)算符 % :求余運(yùn)算符 + :加法運(yùn)算符 - :減法運(yùn)算符,3.2.7 運(yùn)算符和表達(dá)式,說(shuō)明 兩個(gè)整數(shù)相除的結(jié)果為整數(shù) 如5/3的結(jié)果值為,舍去小數(shù)部分 如果除數(shù)或被除數(shù)中有一個(gè)為負(fù)值,舍入方向不固定。例如,-5/3,有的系統(tǒng)中得到的結(jié)果為-1,在有的系統(tǒng)中則得到結(jié)果為-2 VC+采取“向零取整”的方法 如5/3=1,-5/3=-1,取整后向零靠攏 % 運(yùn)算符要求參加運(yùn)算的運(yùn)算對(duì)象(即操作數(shù))為整數(shù),結(jié)果也是整數(shù)。如8%3,結(jié)果為
53、2,3.2.7 運(yùn)算符和表達(dá)式,2. 自增、自減運(yùn)算符: 作用是使變量的值或減 +i,-i:在使用i之前,先使i的值加(減)1 i+,i-:在使用i之后,使i的值加(減)1,3.2.7 運(yùn)算符和表達(dá)式,3. 算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級(jí)與結(jié)合性: 用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算對(duì)象(也稱(chēng)操作數(shù))連接起來(lái)的、符合語(yǔ)法規(guī)則的式子,稱(chēng)為算術(shù)表達(dá)式 運(yùn)算對(duì)象包括常量、變量、函數(shù)等 語(yǔ)言規(guī)定了運(yùn)算符的優(yōu)先級(jí)和結(jié)合性,3.2.7 運(yùn)算符和表達(dá)式,4.不同類(lèi)型數(shù)據(jù)間的混合運(yùn)算: +、-、*、/ 運(yùn)算的兩個(gè)數(shù)中有一個(gè)數(shù)為float或double型,結(jié)果是double型。系統(tǒng)將float型數(shù)據(jù)都先轉(zhuǎn)換為double型,
54、然后進(jìn)行運(yùn)算 (2) 如果int型與float或double型數(shù)據(jù)進(jìn)行運(yùn)算,先把int型和float型數(shù)據(jù)轉(zhuǎn)換為double型,然后進(jìn)行運(yùn)算,結(jié)果是double型 (3)字符型數(shù)據(jù)與整型數(shù)據(jù)進(jìn)行運(yùn)算,就是把字符的ASCII代碼與整型數(shù)據(jù)進(jìn)行運(yùn)算,3.2.7 運(yùn)算符和表達(dá)式,例3.3 給定一個(gè)大寫(xiě)字母,要求用小寫(xiě)字母輸出。,解題思路: 關(guān)鍵是找到大、小寫(xiě)字母間的內(nèi)在聯(lián)系 同一個(gè)字母,用小寫(xiě)表示的字符的ASCII代碼比用大寫(xiě)表示的字符的ASCII代碼大32,3.2.7 運(yùn)算符和表達(dá)式,#include int main ( ) char c1,c2; c1=A; c2=c1+32; printf(
55、%cn,c2); printf(”%dn”,c2); return 0; ,將字符A的ASCII代碼65放到c1中,將65+32的結(jié)果放到c2中,用字符形式輸出,用十進(jìn)制形式輸出,3.2.7 運(yùn)算符和表達(dá)式,5. 強(qiáng)制類(lèi)型轉(zhuǎn)換運(yùn)算符 強(qiáng)制類(lèi)型轉(zhuǎn)換運(yùn)算符的一般形式為 (類(lèi)型名)(表達(dá)式) (double)a (將轉(zhuǎn)換成double類(lèi)型) (int) (x+y) (將x+y的值轉(zhuǎn)換成int型) (float)(5%3)(將5%3的值轉(zhuǎn)換成float型) 有兩種類(lèi)型轉(zhuǎn)換 系統(tǒng)自動(dòng)進(jìn)行的類(lèi)型轉(zhuǎn)換 強(qiáng)制類(lèi)型轉(zhuǎn)換,3.2.7 運(yùn)算符和表達(dá)式,6.運(yùn)算符 (1) 算術(shù)運(yùn)算符 (+ - * / % + -)
56、(2) 關(guān)系運(yùn)算符 ( ?。?(3) 邏輯運(yùn)算符 (! |) (4) 位運(yùn)算符 ( | ) (5) 賦值運(yùn)算符 (及其擴(kuò)展賦值運(yùn)算符) (6) 條件運(yùn)算符 (?:),3.2.7 運(yùn)算符和表達(dá)式,6.運(yùn)算符 (7) 逗號(hào)運(yùn)算符 (,) (8) 指針運(yùn)算符 (*和) (9) 求字節(jié)數(shù)運(yùn)算符 (sizeof) (10) 強(qiáng)制類(lèi)型轉(zhuǎn)換運(yùn)算符 ( (類(lèi)型) ) (11) 成員運(yùn)算符 (.-) (12) 下標(biāo)運(yùn)算符 ( ) (13) 其他 (如函數(shù)調(diào)用運(yùn)算符(),3.3 C語(yǔ)句,3.3.1 C語(yǔ)句的作用和分類(lèi) 3.3.2 最基本的語(yǔ)句-賦值語(yǔ)句,3.3.1 C語(yǔ)句的作用和分類(lèi),語(yǔ)句分為以下5類(lèi): (1) 控制語(yǔ)句: if、switch、for、while、dowhile、continue、break、return、goto等 (2) 函數(shù)調(diào)用語(yǔ)句 (3) 表達(dá)式語(yǔ)句 (4) 空語(yǔ)句 (5) 復(fù)合語(yǔ)句,3.3.2 最基本的語(yǔ)句-賦值語(yǔ)句,在C程序中,最常用的語(yǔ)句是: 賦值語(yǔ)句 輸入輸出語(yǔ)句 其中最基本的是賦值語(yǔ)句,3.3.2 最基本的語(yǔ)句-賦值語(yǔ)句,例3.4 給出三角形的三邊長(zhǎng),求三角形面積。,3.3.2 最基本的語(yǔ)句-賦值語(yǔ)句,解題思路:假設(shè)給定的三個(gè)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度排水設(shè)施保險(xiǎn)合同4篇
- 二零二五版飯店蔬菜肉類(lèi)產(chǎn)地直供合作合同2篇
- 二零二五年度全新科技項(xiàng)目居間合作費(fèi)合同模板下載2篇
- 二零二五年度內(nèi)蒙古肉牛產(chǎn)業(yè)鏈人才培養(yǎng)與引進(jìn)合同
- 2025年度汽車(chē)銷(xiāo)售促銷(xiāo)活動(dòng)執(zhí)行合同模板
- 二零二五年度學(xué)校室內(nèi)外體育設(shè)施一體化采購(gòu)合同范本3篇
- 2025年度民間借貸合同監(jiān)督與委托管理服務(wù)合同4篇
- 2025年度面粉加工企業(yè)二零二五年度綠色有機(jī)面粉采購(gòu)合同4篇
- 2025年度新能源汽車(chē)抵押擔(dān)保服務(wù)合同
- 二零二五年度公共綠地養(yǎng)護(hù)管理合同范本3篇
- 廣東省茂名市電白區(qū)2024-2025學(xué)年七年級(jí)上學(xué)期期末質(zhì)量監(jiān)測(cè)生物學(xué)試卷(含答案)
- 2024版?zhèn)€人私有房屋購(gòu)買(mǎi)合同
- 2024爆炸物運(yùn)輸安全保障協(xié)議版B版
- 2025年度軍人軍事秘密保護(hù)保密協(xié)議與信息安全風(fēng)險(xiǎn)評(píng)估合同3篇
- 《食品與食品》課件
- 讀書(shū)分享會(huì)《白夜行》
- 光伏工程施工組織設(shè)計(jì)
- DB4101-T 121-2024 類(lèi)家庭社會(huì)工作服務(wù)規(guī)范
- 化學(xué)纖維的鑒別與測(cè)試方法考核試卷
- 2024-2025學(xué)年全國(guó)中學(xué)生天文知識(shí)競(jìng)賽考試題庫(kù)(含答案)
- 自動(dòng)駕駛汽車(chē)道路交通安全性探討研究論文
評(píng)論
0/150
提交評(píng)論