




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第1章 程序設計和C語言,1.1 什么是計算機程序 1.2 什么是計算機語言 1.3 C語言的發(fā)展及其特點 1.4 最簡單的C語言程序 1.5 運行C程序的步驟與方法 1.6 程序設計的任務,1.1 什么是計算機程序,程序:一組計算機能識別和執(zhí)行的指令 只要讓計算機執(zhí)行這個程序,計算機就會自動地、有條不紊地進行工作 計算機的一切操作都是由程序控制的,離開程序,計算機將一事無成,1.2 什么是計算機語言,計算機語言:人和計算機交流信息的、計算機和人都能識別的語言,1.2 什么是計算機語言,計算機語言發(fā)展階段: 機器語言(由0和1組成的指令) 符號語言(用英文字母和數字表示指令) 高級語言(接近于
2、人的自然語言和數學語言) 面向過程的語言 (非結構化的語言、結構化語言) 面向對象的語言,低級語言,1.3 C語言的發(fā)展及其特點,C語言是國際上廣泛流行的計算機高級語言。 C語言的發(fā)展:,BCPL語言,B語言,C語言,精練、接近硬件,但 過于簡單, 無數據類型,具有多種數據類型,1.3 C語言的發(fā)展及其特點,最初的C語言只是為描述和實現(xiàn)UNIX操作系統(tǒng)提供一種工作語言而設計的。,1.3 C語言的發(fā)展及其特點,1983年,美國國家標準協(xié)會(ANSI)成立了一個委員會,根據C語言問世以來各種版本對C語言的發(fā)展和擴充,制定了第一個C語言標準草案(83 ANSI C)。,1.3 C語言的發(fā)展及其特點,
3、1989年,ANSI公布了一個完整的C語言標準ANSI X3.159-1989(常稱ANSI C,或C89)。,1.3 C語言的發(fā)展及其特點,1990年,國際標準化組織ISO(International Standard Organization) 接受C89作為國際標準ISO/IEC 9899:1990,它和ANSI的C89基本上是相同的。,1.3 C語言的發(fā)展及其特點,1995年,ISO對C90作了一些修訂,1999年,ISO又對C語言標準進行修訂,在基本保留原來的C語言特征的基礎上,針對應用的需要,增加了一些功能,尤其是C+中的一些功能,命名為ISO/IEC 9899:1999。,1.3
4、 C語言的發(fā)展及其特點,2001、2004年先后進行了兩次技術修正(TC1和TC2)。 ISO/IEC 9899:1999(及其技術修正)被稱為 C99。 C99是C89(及1995基準增補1)的擴充。,1.3 C語言的發(fā)展及其特點,本書的敘述以C99標準為依據(對C99新增加的功能作特別的說明)。 目前不同軟件公司提供的各C語言編譯系統(tǒng)多數并未完全實現(xiàn)C99建議的功能 本書中程序基本上都可以在目前所用的編譯系統(tǒng)(如VC+ 6.0,Turbo C+ 3.0,GCC)上編譯和運行。,1.3 C語言的發(fā)展及其特點,C語言是一種用途廣泛、功能強大、使用靈活的過程性(procedural)編程語言,既
5、可用于編寫應用軟件,又能用于編寫系統(tǒng)軟件。因此C語言問世以后得到迅速推廣。,1.3 C語言的發(fā)展及其特點,C語言主要特點: 語言簡潔、緊湊,使用方便、靈活。 只有37個關鍵字、9種控制語句 程序書寫形式自由,源程序短,1.3 C語言的發(fā)展及其特點,C語言主要特點: 運算符豐富。 有34種運算符 把括號、賦值、強制類型轉換等都作為運算符處理 表達式類型多樣化,1.3 C語言的發(fā)展及其特點,C語言主要特點: 數據類型豐富。 包括:整型、浮點型、字符型、數組類型、指針類型、結構體類型、共用體類型 C99又擴充了復數浮點類型、超長整型(long long)、布爾類型(bool) 指針類型數據,能用來實
6、現(xiàn)各種復雜的數據結構(如鏈表、樹、棧等)的運算。,1.3 C語言的發(fā)展及其特點,C語言主要特點: 具有結構化的控制語句 如ifelse語句、while語句、dowhile語句、switch語句、for語句 用函數作為程序的模塊單位,便于實現(xiàn)程序的模塊化 C語言是完全模塊化和結構化的語言,1.3 C語言的發(fā)展及其特點,C語言主要特點: 語法限制不太嚴格,程序設計自由度大。 對數組下標越界不做檢查 對變量的類型使用比較靈活,例如,整型量與字符型數據可以通用 C語言允許程序編寫者有較大的自由度,因此放寬了語法檢查,1.3 C語言的發(fā)展及其特點,C語言主要特點: 允許直接訪問物理地址,能進行位操作,可
7、以直接對硬件進行操作 C語言具有高級語言的功能和低級語言的許多功能,可用來編寫系統(tǒng)軟件 這種雙重性,使它既是成功的系統(tǒng)描述語言,又是通用的程序設計語言,1.3 C語言的發(fā)展及其特點,C語言主要特點: 用C語言編寫的程序可移植性好。 C的編譯系統(tǒng)簡潔,很容易移植到新系統(tǒng) 在新系統(tǒng)上運行時,可直接編譯“標準鏈接庫”中的大部分功能,不需要修改源代碼 幾乎所有計算機系統(tǒng)都可以使用C語言,1.3 C語言的發(fā)展及其特點,C語言主要特點: 生成目標代碼質量高,程序執(zhí)行效率高。,1.4最簡單的C語言程序,1.4.1 最簡單的C語言程序舉例 1.4.2 C語言程序的結構,1.4.1 最簡單的C語言程序舉例,例1
8、.1 要求在屏幕上輸出以下一行信息。 This is a C program.,解題思路: 在主函數中用printf函數原樣輸出以上文字。,1.4.1 最簡單的C語言程序舉例,#include int main( ) printf (”This is a C program.n”); return 0; ,函數的名字,表示主函數,C程序必須有一個 main 函數,1.4.1 最簡單的C語言程序舉例,#include int main( ) printf (”This is a C program.n”); return 0; ,主函數類型,1.4.1 最簡單的C語言程序舉例,#include
9、int main( ) printf (”This is a C program.n”); return 0; ,函數體,1.4.1 最簡單的C語言程序舉例,#include int main( ) printf (”This is a C program.n”); return 0; ,輸出函數,輸出語句,1.4.1 最簡單的C語言程序舉例,#include int main( ) printf (”This is a C program.n”); return 0; ,輸出語句,1.4.1 最簡單的C語言程序舉例,#include int main( ) printf (”This is
10、a C program.n”); return 0; ,換行符,1.4.1 最簡單的C語言程序舉例,#include int main( ) printf (”This is a C program.n”); return 0; ,當main函數執(zhí)行結束前 將整數0作為函數值,1.4.1 最簡單的C語言程序舉例,#include int main( ) printf (”This is a C program.n”); return 0; ,表示語句結束,用到函數庫中的輸入輸出函數時,1.4.1 最簡單的C語言程序舉例,C語言允許用兩種注釋方式: /:單行注釋 可單獨占一行 可出現(xiàn)在一行中其他
11、內容的右側 /*/:塊式注釋 可包含多行,例1.2 求兩個整數之和。,解題思路: 設置3個變量 a和b用來存放兩個整數 sum用來存放和數 用賦值運算符“=”把結果傳送給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,對變量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求兩個整數中的較大者。,解題思路: 用一個函數實現(xiàn)求兩個整數中的較大者 在主函數中調用此函數并輸出結果,#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); ,主函數,max函數,#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中較大者值返回給主函數,#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函數的定義在main函數之后,需聲明,#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; s
15、canf(”%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(”%d,%d”, ,int max(int x,int y) int z; if (x y) z = x; else z = y; return(z); ,輸入的數據放到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); ,調用max函數,#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); ,實際參數,形式參數,1.4.2 C語言程序的結構,C語言程序的結構特點: 1.一個程序由一個或多個源程序文件組成 小程序往往只包括一個源程序文件 例1.
18、1,例1.2只有一個函數 例1.3有兩個函數,只包括一個源程序文件,1.4.2 C語言程序的結構,C語言程序的結構特點: 一個源程序文件中可以包括三個部分: 預處理指令 全局聲明 函數定義,#include 等,在函數之外進行的數據聲明,每個函數用來實現(xiàn)一定的功能,1.4.2 C語言程序的結構,C語言程序的結構特點: 2.函數是C程序的主要組成部分 一個C程序是由一個或多個函數組成的 必須包含一個main函數(只能有一個) 每個函數都用來實現(xiàn)一個或幾個特定功能 被調用的函數可以是庫函數,也可以是自己編制設計的函數,1.4.2 C語言程序的結構,C語言程序的結構特點: 3.一個函數包括兩個部分:
19、 函數首部 int max ( int x, int y ),函數的第1行,函數類型,函數名,參數類型,參數名,1.4.2 C語言程序的結構,C語言程序的結構特點: 3.一個函數包括兩個部分: 函數首部 int max ( int x, int y ) 若函數無參,在括弧中寫void或空括弧,int main( void) 或 int main(),1.4.2 C語言程序的結構,C語言程序的結構特點: 3.一個函數包括兩個部分: 函數體 聲明部分 定義在本函數中所用到的變量 對本函數所調用函數進行聲明 執(zhí)行部分:由若干個語句組成,指定在函數中所進行的操作,可以沒有聲明部分,1.4.2 C語言程
20、序的結構,C語言程序的結構特點: 3.一個函數包括兩個部分: 函數體 void dump ( ) ,可以是空函數,1.4.2 C語言程序的結構,C語言程序的結構特點: 4. 程序總是從main函數開始執(zhí)行 5. C程序對計算機的操作由C語句完成 C程序書寫格式是比較自由的 一行內可以寫幾個語句 一個語句可以分寫在多行上 為清晰起見,習慣上每行只寫一個語句,1.4.2 C語言程序的結構,C語言程序的結構特點: 4. 程序總是從main函數開始執(zhí)行 5. C程序對計算機的操作由C語句完成 6. 數據聲明和語句最后必須有分號 7. C語言本身不提供輸入輸出語句 8. 程序應當包含注釋,增加可讀性,1
21、.5 運行C程序的步驟與方法,1.上機輸入和編輯源程序(.c文件) 2.對源程序進行編譯(.obj文件) 3.進行連接處理(.exe文件) 4.運行可執(zhí)行程序,得到運行結果 說明:以上過程參見教材中圖1.1 附錄A中有Visual C+ 6.0中編輯、 編譯、連接和運行C程序的方法,1.6 程序設計的任務,1.問題分析 對于接手的任務要進行認真的分析 研究所給定的條件 分析最后應達到的目標 找出解決問題的規(guī)律 選擇解題的方法,1.6 程序設計的任務,1.問題分析 2.設計算法 設計出解題的方法和具體步驟,1.6 程序設計的任務,1.問題分析 2.設計算法 3.編寫程序 4.對源程序進行編輯、編
22、譯和連接 5.運行程序,分析結果 結果錯了,程序肯定錯 結果對了,程序未必對,1.6 程序設計的任務,1.問題分析 2.設計算法 3.編寫程序 4.對源程序進行編輯、編譯和連接 5.運行程序,分析結果 6.編寫程序文檔,第2章 算法-程序的靈魂,一個程序主要包括以下兩方面的信息: (1) 對數據的描述。在程序中要指定用到哪些數據以及這些數據的類型和數據的組織形式 這就是數據結構(data structure) (2) 對操作的描述。即要求計算機進行操作的步驟 也就是算法(algorithm),數據是操作的對象 操作的目的是對數據進行加工處理,以得到期望的結果 著名計算機科學家沃思(Nikikl
23、aus Wirth)提出一個公式: 算法 + 數據結構 = 程序,一個程序除了算法和數據結構這主要要素外,還應當采用結構化程序設計方法進行程序設計,并且用某一種計算機語言表示 算法、數據結構、程序設計方法和語言工具是一個程序設計人員應具備的知識,算法是解決“做什么”和“怎么做”的問題 程序中的操作語句,是算法的體現(xiàn) 不了解算法就談不上程序設計,2.1 什么是算法 2.2 簡單的算法舉例 2.3 算法的特性 2.4 怎樣表示一個算法 2.5 結構化程序設計方法,2.1 什么是算法,廣義地說,為解決一個問題而采取的方法和步驟,就稱為“算法” 對同一個問題,可以有不同的解題方法和步驟 為了有效地進行
24、解題,不僅需要保證算法正確,還要考慮算法的質量,選擇合適的算法,2.1 什么是算法,計算機算法可分為兩大類別: 數值運算算法 非數值運算算法 數值運算的目的是求數值解 非數值運算包括的面十分廣泛,最常見的是用于事務管理領域,2.2簡單的算法舉例,例2.1 求12345 可以用最原始的方法進行: 步驟1:先求1*2,得到結果2。 步驟2:將步驟1得到的乘積2再乘以3,得到結果6。 步驟3:將6再乘以4,得24。 步驟4:將24再乘以5,得120。這就是最后的結果。,例2.1 求12345 1000,太繁瑣,2.2簡單的算法舉例,改進的算法: 設變量p為被乘數 變量i為乘數 用循環(huán)算法求結果,2.
25、2簡單的算法舉例,S1:使p=1,或寫成1p S2:使i=2,或寫成2i S3:使p與i相乘,乘積仍放在變量p中,可表示為:p*ip S4:使i的值加1,即i+1 i S5:如果i不大于5,返回重新執(zhí)行S3;否則,算法結束 最后得到p的值就是 5!的值,若是1000,求什么?,2.2簡單的算法舉例,S1:使p=1,或寫成1p S2:使i=2,或寫成2i S3:使p與i相乘,乘積仍放在變量p中,可表示為:p*ip S4:使i的值加1,即i+1 i S5:如果i不大于5,返回重新執(zhí)行S3;否則,算法結束 最后得到p的值就是 5!的值,若求1357911,3,3,2,2,11,11,相當于i 11,
26、例2.2 有50個學生,要求將成績在80分以上的學生的學號和成績輸出。 用ni代表第i個學生學號,gi表示第i個學生成績 S1:1i S2:如果gi80, 則輸出ni和gi,否則不輸出 S3:i+1i S4:如果i50,返回到步驟S2,繼續(xù)執(zhí)行,否則,算法結束,例2.3 判定20002500年中的每一年是否閏年,并將結果輸出。 閏年的條件: (1)能被4整除,但不能被100整除的年份都是閏年,如2008、2012、2048年 (2)能被400整除的年份是閏年,如2000年 不符合這兩個條件的年份不是閏年 例如2009、2100年,設year為被檢測的年份。算法表示如下: S1:2000year
27、 S2:若year不能被4整除,則輸出year 的值和“不是閏年”。然后轉到S6 S3:若year能被4整除,不能被100整除,則輸出year的值和“是閏年”。然后轉到S6 S4:若year能被400整除,則輸出year的值和“是閏年” ,然后轉到S6 S5: 其他情況輸出year的值和“不是閏年” S6:year+1year S7:當year2500時,轉S2,否則停止,year不能被4整除,非閏年,year被4整除,但不能被100整除,閏年,year被100整除,又能被400整除,閏年,其他,非閏年,逐漸縮小判斷的范圍,例2.4 求 規(guī)律: 第1項的分子分母都是1 第2項的分母是2,以后每
28、一項的分母子都是前一項的分母加1 笫2項前的運算符為“-”,后一項前面的運算符都與前一項前的運算符相反,例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;否則算法結束,sign當前項符號 term當前項的值 sum當前各項的和 deno當前項分母,-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;否則算法結束,sign當前項符號 term當前項的值 sum當前各項的和 deno當前項分母,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;否則算法結束,99次循環(huán)后sum的值就是所要求的結果,例2.5 給出一
30、個大于或等于3的正整數,判斷它是不是一個素數。 所謂素數(prime),是指除了1和該數本身之外,不能被其他任何整數整除的數 例如,13是素數,因為它不能被2,3,4,12整除。,判斷一個數n(n3)是否素數:將n作為被除數,將2到(n-1)各個整數先后作為除數,如果都不能被整除,則n為素數 S1:輸入n的值 S2:i=2 (i作為除數) S3:n被i除,得余數r S4:如果r=0,表示n能被i整除,則輸出n“不是素數”,算法結束;否則執(zhí)行S5 S5:i+1i S6:如果in-1,返回S3;否則輸出n “是素數”,然后結束。,可改為n/2,2.3算法的特性,一個有效算法應該具有以下特點: (1
31、) 有窮性。一個算法應包含有限的操作步驟,而不能是無限的。 (2) 確定性。算法中的每一個步驟都應當是確定的,而不應當是含糊的、模棱兩可的。,2.3算法的特性,一個有效算法應該具有以下特點: (3) 有零個或多個輸入。所謂輸入是指在執(zhí)行算法時需要從外界取得必要的信息。 (4) 有一個或多個輸出。算法的目的是為了求解,“解” 就是輸出。 沒有輸出的算法是沒有意義的。 (5) 有效性。算法中的每一個步驟都應當能有效地執(zhí)行,并得到確定的結果。,2.3算法的特性,對于一般最終用戶來說: 他們并不需要在處理每一個問題時都要自己設計算法和編寫程序 可以使用別人已設計好的現(xiàn)成算法和程序 只需根據已知算法的要
32、求給予必要的輸入,就能得到輸出的結果,輸入3個數,黑箱子,3個數中最大數,求3個數的最大數,2.4怎樣表示一個算法,常用的方法有: 自然語言 傳統(tǒng)流程圖 結構化流程圖 偽代碼 ,2.4怎樣表示一個算法,2.4.1 用自然語言表示算法 2.4.2 用流程圖表示算法 2.4.3 三種基本結構和改進的流程圖 2.4.4 用N-S流程圖表示算法 2.4.5 用偽代碼表示算法 2.4.6 用計算機語言表示算法,2.4.1 用自然語言表示算法,2.2節(jié)介紹的算法是用自然語言表示的 用自然語言表示通俗易懂,但文字冗長,容易出現(xiàn)歧義性 用自然語言描述包含分支和循環(huán)的算法,不很方便 除了很簡單的問題外,一般不用
33、自然語言,2.4.2用流程圖表示算法,流程圖是用一些圖框來表示各種操作 用圖形表示算法,直觀形象,易于理解,起止框,輸入輸出框,處理框,判斷框,流程線,連接點,注釋框,x0,Y,N,一個入口,兩個出口,2.4.2用流程圖表示算法,流程圖是用一些圖框來表示各種操作 用圖形表示算法,直觀形象,易于理解,起止框,輸入輸出框,處理框,判斷框,流程線,連接點,注釋框,位置不夠,防止交叉,例2.6 將例2.1的算法用流程圖表示。 求12345 如果需要將最后結果輸出:,1t,i5,開始,2i,t*it,i+1i,結束,N,Y,例2.6 將例2.1的算法用流程圖表示。 求12345 如果需要將最后結果輸出:
34、,1t,輸出t,i5,開始,2i,t*it,i+1i,結束,N,Y,例2.7 例2.2的算法用流程圖表示。有50個學生,要求將成績在80分以上的學生的學號和成績輸出。,1i,i50,開始,i+1i,結束,N,Y,輸入ni、gi,1i,開始,gi80,輸出ni、gi,i+1i,i50,N,Y,Y,N,如果包括輸入數據部分,1i,i50,開始,i+1i,結束,N,Y,輸入ni、gi,1i,gi80,輸出ni、gi,i+1i,i50,N,Y,Y,N,如果包括輸入數據部分,例2.8 例2.3判定閏年的算法用流程圖表示。判定20002500年中的每一年是否閏年,將結果輸出。,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判斷素數的算法用流程圖表示。對一個大于或等于3的正整數,判斷它是不是一個素數。,N,Y,2i,n%ir,i+1i,Y,N,通過以上幾個例子可以看出流程圖是表示算法的較好的工具 一個流程圖包括以下幾部分: (1) 表示相應操作的框 (2) 帶箭頭的流程線 (3) 框內外必要的文字說明 流程線不要忘記畫箭頭,否則難以判定各框的執(zhí)行次序,2.4.3 三種基本結構和改進的流程圖,1.傳
36、統(tǒng)流程圖的弊端 傳統(tǒng)的流程圖用流程線指出各框的執(zhí)行順序,對流程線的使用沒有嚴格限制 使用者可以毫不受限制地使流程隨意地轉來轉去,使人難以理解算法的邏輯,2.4.3 三種基本結構和改進的流程圖,2.三種基本結構 (1) 順序結構,A,B,2.4.3 三種基本結構和改進的流程圖,2.三種基本結構 (2) 選擇結構,A,B,Y,N,A,Y,N,2.4.3 三種基本結構和改進的流程圖,2.三種基本結構 (3) 循環(huán)結構 當型循環(huán)結構,A,Y,N,Y,N,0 x,x+1x,輸出1,2,3,4,5,2.4.3 三種基本結構和改進的流程圖,2.三種基本結構 (3) 循環(huán)結構 直到型循環(huán)結構,A,Y,N,Y,
37、N,0 x,x+1x,輸出1,2,3,4,5,以上三種基本結構,有以下共同特點: (1) 只有一個入口 (2) 只有一個出口 一個判斷框有兩個出口 一個選擇結構只有一個出口 (3) 結構內的每一部分都有機會被執(zhí)行到。也就是說,對每一個框來說,都應當有一條從入口到出口的路徑通過它 (4) 結構內不存在“死循環(huán)”,由三種基本結構派生出來的結構:,A,N,Y,B,根據表達式p 的值進行選擇,A,B,p=p1,p=p2,M,N,p=pm,p=pn,2.4.4 用N-S流程圖表示算法,N-S流程圖用以下的流程圖符號:,順序結構,選擇結構,循環(huán)結構 (當型),循環(huán)結構(直到型),例2.11將例2.1的求5
38、!算法用N-S圖表示。,直到i5,1t,輸出t,2i,t*it,i+1i,例2.12 將例2.2的算法用N-S圖表示。將50名學生中成績高于80分者的學號和成績輸出。,直到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判別素數的算法用N-S流程圖表示。 例2.10的流程圖不是由三種基本結構組成的 循環(huán)有兩個出口,不符合基本結構的特點 無法直接用N-S流程圖的三種基本結構的符號來表示 先作必要的變換,輸入n,r=0,是,否,0w,2i,n%ir,1w,i+1i,直到i 或w 0,w=0,是,否,輸出n是素數,輸出n不是素數,一個結構化的算法是由一些基本結構順序組成的 在基本結構之間不存在向前或向后的跳轉
40、,流程的轉移只存在于一個基本結構范圍之內 一個非結構化的算法可以用一個等價的結構化算法代替,其功能不變 如果一個算法不能分解為若干個基本結構,則它必然不是一個結構化的算法,2.4.5用偽代碼表示算法,偽代碼是用介于自然語言和計算機語言之間的文字和符號來描述算法 用偽代碼寫算法并無固定的、嚴格的語法規(guī)則,可以用英文,也可以中英文混用,例2.16 求5!。 begin (算法開始) 1 t 2 i while i5 t*i t i+1 i print t end (算法結束),例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用計算機語言表示算法,要完成一項工作,包括設計算法和實現(xiàn)算法兩個部分。 設計算法的目的是為了實現(xiàn)算法。 不僅要考慮如何設計一個算法,也要考慮如何實現(xiàn)一個算法。,例2.18 將例2.16表示的算法(求5!)用C語言表示。,#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表示的算法(求多項式 的值)用C語言表示。,#
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結構化程序設計方法,結構化程序設計強調程序設計風格和程序結構的規(guī)范化,提倡清晰的結構。 結構化程序設計方法的基本思路是:把一個復雜問題的求解過程分階段進行,每個階段處理的問題都控制在人們容易理解和處理的范圍內。,2.5結構化程序設計方法,
43、采取以下方法保證得到結構化的程序: (1) 自頂向下; (2) 逐步細化; (3) 模塊化設計; (4) 結構化編碼。,第3章 最簡單的C程序設計,3.1 順序程序設計舉例 3.2 數據的表現(xiàn)形式及其運算 3.3 C語句 3.4 數據的輸入輸出,3.1順序程序設計舉例,例3.1 有人用溫度計測量出用華氏法表示的溫度(如 F,今要求把它轉換為以攝氏法表示的溫度(如 C) 。,解題思路:找到二者間的轉換公式,f代表華氏溫度,c代表攝氏溫度,3.1順序程序設計舉例,算法:,例3.1 有人用溫度計測量出用華氏法表示的溫度(如 F,今要求把它轉換為以攝氏法表示的溫度(如 C) 。,N-S圖,3.1順序程
44、序設計舉例,#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為單精度浮點型變量,指定f的值,計算c的值,輸出f和c的值,3.1順序程序設計舉例,例3.2 計算存款利息。有1000元,想存一年。有三種方法可選: (1)活期,年利率為r1 (2)一年期定期,年利率為r2 (3)存兩次半年定期,年利率為r3 請分別計算出一年后按三種方法所得到的本息和。,3.1順序程序設計舉例,解題思路:確定計算本息和的公式。 從數學知識可知:若存款額為p0,則: 活期
45、存款一年后本息和為: p1=p0(1+r1) 一年期定期存款,一年后本息和為: p2=p0(1+r2) 兩次半年定期存款,一年后本息和為:,3.1順序程序設計舉例,算法:,3.1順序程序設計舉例,#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、量同時賦予初值,3.2 數據的表現(xiàn)形式及其運算,3.2.1 常量和變量 3.2.2 數據類型 3.2.3 整型數據 3.2.4 字符型數據 3.2.5 浮點型數據 3.2.6 怎樣確定常量的類型 3.2.7 運算符和表達式,3.2.1 常量和變量,1.常量:在程序運行過程中,其值不能被改變的量 整型常量:如1000,12345,0,-345 實型常量 十進制小數形式:如0.34 -56.79 0.0 指數形式:如12.34e3 (代表12.34103) 字符常量:如? 轉義字符:如n 字符串常量:如”boy” 符號常量:#define PI 3.1416,3.2.1 常量和變量,2. 變量:在
47、程序運行期間,變量的值是可以改變的 變量必須先定義,后使用 定義變量時指定該變量的名字和類型 變量名和變量值是兩個不同的概念 變量名實際上是以一個名字代表的一個存儲地址 從變量中取值,實際上是通過變量名找到相應的內存地址,從該存儲單元中讀取數據,3.2.1 常量和變量,3.常變量:const int a=3; 4.標識符:一個對象的名字 語言規(guī)定標識符只能由字母、數字和下劃線3種字符組成,且第一個字符必須為字母或下劃線 合法的標識符:如sum,average, _total, Class, day, BASIC, li_ling 不合法的標識符:M.D.John,¥123,33,3D64,ab
48、,大小寫字母是不同的字符,3.2.2 數據類型,所謂類型,就是對數據分配存儲單元的安排,包括存儲單元的長度(占多少字節(jié))以及數據的存儲形式 不同的類型分配不同的長度和存儲形式,3.2.2 數據類型,C語言允許使用的數據類型: 基本類型 整型類型 基本整型 短整型 長整型 雙長整型 字符型 布爾型,浮點類型 單精度浮點型 雙精度浮點型 復數浮點型,3.2.2 數據類型,C語言允許使用的數據類型: 基本類型 枚舉類型 空類型 派生類型 指針類型 數組類型 結構體類型 共用體類型 函數類型,算術類型,純量類型,3.2.3 整型數據,1. 整型數據的分類 最基本的整型類型 基本整型(int型):占2個
49、或4個字節(jié) 短整型(short int):VC+6.0中占2個字節(jié) 長整型(long int):VC+6.0中占4個字節(jié) 雙長整型(long long int):C99新增的,3.2.3 整型數據,1. 整型數據的分類 2. 整型變量的符號屬性 整型變量的值的范圍包括負數到正數 可以將變量定義為“無符號”類型 擴充的整形類型:,3.2.3 整型數據,擴充的整型類型: 有符號基本整型 signed int; 無符號基本整型 unsigned int; 有符號短整型 signed short int; 無符號短整型 unsigned short int; 有符號長整型 signed long in
50、t; 無符號長整型 unsigned long int 有符號雙長整型 signed long long int; 無符號雙長整型 unsigned long long int,3.2.4 字符型數據,字符是按其代碼(整數)形式存儲的 C99把字符型數據作為整數類型的一種 字符型數據在使用上有自己的特點,3.2.4 字符型數據,1.字符與字符代碼 大多數系統(tǒng)采用ASCII字符集 字母:A Z,a z 數字:09 專門符號:29個:! ” # 系統(tǒng)把“?”的ASCII代碼63賦給變量c printf(”%d %cn”,c,c); 輸出結果是: 63 ?,3.2.5 浮點型數據,浮點型數據是用來表
51、示具有小數點的實數 float型(單精度浮點型) 編譯系統(tǒng)為float型變量分配4個字節(jié) 數值以規(guī)范化的二進制數指數形式存放 參見主教材圖3.11,3.2.5 浮點型數據,浮點型數據是用來表示具有小數點的實數 float型(單精度浮點型) double型(雙精度浮點型) 編譯系統(tǒng)為double型變量分配8個字節(jié) 15位有效數字 long double(長雙精度)型,3.2.6 怎樣確定常量的類型,字符常量:由單撇號括起來的單個字符或轉義字符 整型常量:不帶小數點的數值 系統(tǒng)根據數值的大小確定int型還是long型等 浮點型常量:凡以小數形式或指數形式出現(xiàn)的實數 C編譯系統(tǒng)把浮點型常量都按雙精度
52、處理 分配8個字節(jié),3.2.7 運算符和表達式,1.基本的算術運算符: + :正號運算符(單目運算符) - :負號運算符(單目運算符) * :乘法運算符 / :除法運算符 % :求余運算符 + :加法運算符 - :減法運算符,3.2.7 運算符和表達式,說明 兩個整數相除的結果為整數 如5/3的結果值為,舍去小數部分 如果除數或被除數中有一個為負值,舍入方向不固定。例如,-5/3,有的系統(tǒng)中得到的結果為-1,在有的系統(tǒng)中則得到結果為-2 VC+采取“向零取整”的方法 如5/3=1,-5/3=-1,取整后向零靠攏 % 運算符要求參加運算的運算對象(即操作數)為整數,結果也是整數。如8%3,結果為
53、2,3.2.7 運算符和表達式,2. 自增、自減運算符: 作用是使變量的值或減 +i,-i:在使用i之前,先使i的值加(減)1 i+,i-:在使用i之后,使i的值加(減)1,3.2.7 運算符和表達式,3. 算術表達式和運算符的優(yōu)先級與結合性: 用算術運算符和括號將運算對象(也稱操作數)連接起來的、符合語法規(guī)則的式子,稱為算術表達式 運算對象包括常量、變量、函數等 語言規(guī)定了運算符的優(yōu)先級和結合性,3.2.7 運算符和表達式,4.不同類型數據間的混合運算: +、-、*、/ 運算的兩個數中有一個數為float或double型,結果是double型。系統(tǒng)將float型數據都先轉換為double型,
54、然后進行運算 (2) 如果int型與float或double型數據進行運算,先把int型和float型數據轉換為double型,然后進行運算,結果是double型 (3)字符型數據與整型數據進行運算,就是把字符的ASCII代碼與整型數據進行運算,3.2.7 運算符和表達式,例3.3 給定一個大寫字母,要求用小寫字母輸出。,解題思路: 關鍵是找到大、小寫字母間的內在聯(lián)系 同一個字母,用小寫表示的字符的ASCII代碼比用大寫表示的字符的ASCII代碼大32,3.2.7 運算符和表達式,#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的結果放到c2中,用字符形式輸出,用十進制形式輸出,3.2.7 運算符和表達式,5. 強制類型轉換運算符 強制類型轉換運算符的一般形式為 (類型名)(表達式) (double)a (將轉換成double類型) (int) (x+y) (將x+y的值轉換成int型) (float)(5%3)(將5%3的值轉換成float型) 有兩種類型轉換 系統(tǒng)自動進行的類型轉換 強制類型轉換,3.2.7 運算符和表達式,6.運算符 (1) 算術運算符 (+ - * / % + -)
56、(2) 關系運算符 ( ?。?(3) 邏輯運算符 (! |) (4) 位運算符 ( | ) (5) 賦值運算符 (及其擴展賦值運算符) (6) 條件運算符 (?:),3.2.7 運算符和表達式,6.運算符 (7) 逗號運算符 (,) (8) 指針運算符 (*和) (9) 求字節(jié)數運算符 (sizeof) (10) 強制類型轉換運算符 ( (類型) ) (11) 成員運算符 (.-) (12) 下標運算符 ( ) (13) 其他 (如函數調用運算符(),3.3 C語句,3.3.1 C語句的作用和分類 3.3.2 最基本的語句-賦值語句,3.3.1 C語句的作用和分類,語句分為以下5類: (1) 控制語句: if、switch、for、while、dowhile、continue、break、return、goto等 (2) 函數調用語句 (3) 表達式語句 (4) 空語句 (5) 復合語句,3.3.2 最基本的語句-賦值語句,在C程序中,最常用的語句是: 賦值語句 輸入輸出語句 其中最基本的是賦值語句,3.3.2 最基本的語句-賦值語句,例3.4 給出三角形的三邊長,求三角形面積。,3.3.2 最基本的語句-賦值語句,解題思路:假設給定的三個
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇南京第十三中學2024~2025學年高二下冊期末考試數學試題學生卷
- 江蘇常州聯(lián)盟學校2024~2025學年高一下冊期末調研數學試題含解析
- 重癥監(jiān)護病例監(jiān)測指標選擇考核試卷
- 水泵流體動力學模擬考核試卷
- 單板加工生產質量風險預防考核試卷
- 銷售區(qū)域市場顧客生命周期管理考核試卷
- 移動營銷在家用紡織品市場中的情感營銷策略應用考核試卷
- 體育市場體育培訓行業(yè)競爭格局分析考核試卷
- 2025年中國OA軟件數據監(jiān)測研究報告
- 2025年中國GPRS配變監(jiān)測儀數據監(jiān)測報告
- 汽車車身密封條設計指南
- 光伏工程勞務承包合同協(xié)議書
- DBJT13-24-2017 福建省建筑幕墻工程質量驗收規(guī)程
- 2024新人教版七年級上冊英語單詞表衡水體字帖
- 學校會議審批管理制度
- 課內文言文翻譯句句落實-2024-2025學年統(tǒng)編版語文九年級上冊
- 【中美家庭教育差異比較探究(英文)(論文)】
- 國防動員工作計劃
- 小學生科技模型課程設計
- T-CQAAS 008-2023 花椒香氣組分含量的測定-氣相色譜質譜法
- 《準實驗研究設計》課件
評論
0/150
提交評論