CC++語言程序設計案例教程:程序設計概述_第1頁
CC++語言程序設計案例教程:程序設計概述_第2頁
CC++語言程序設計案例教程:程序設計概述_第3頁
CC++語言程序設計案例教程:程序設計概述_第4頁
CC++語言程序設計案例教程:程序設計概述_第5頁
已閱讀5頁,還剩52頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

程序設計概述C/C++語言程序設計案例教程2教學目標了解計算機語言的基本概念掌握程序設計的特點及其一般方法了解C/C++語言的發展及其特點學習與掌握VC++集成環境31.1計算機語言及其發展1.計算機語言是人與計算機進行交流的工具計算機語言分為:機器語言機器指令(由0和1組成),可直接執行

難學、難記依賴機器的類型匯編語言用助記符代替機器指令,用變量代替各類地址??朔洃浀碾y點其他與機器語言類似高級語言類似數學語言、接近自然語言、具有通用性和可移植性,不依賴具體的計算機類型。4例如:10000000加10010000減機器語言程序MOVAX,

300HADDBX,AX匯編語言源程序main(){inta,b,c;a=300;b=18;c=a+b;printf(“a+b=%d\n”,c);}高級語言源程序(C)源程序需要翻譯5高級語言的翻譯:編譯方法圖1.2編譯過程(.CPP或.PAS等)編譯程序連接程序編譯連接高級語言源程序機器語言目標程序可執行程序(.OBJ)(.EXE)運行運行結果解釋程序高級語言源程序解釋執行運行結果圖1.3解釋過程(.BAS)解釋方法61.1.2C語言及其特點1.?C語言的誕生1973年,美國貝爾實驗室的丹尼斯·里奇(DennisM.Ritchie)在B語言的基礎上設計出了一種新的語言,即C語言。1978年,布賴恩·凱尼漢(BrianW.Kernighan)和丹尼斯·里奇出版了第一版《TheCProgrammingLanguage》,從而使C語言成為目前世界上流傳最廣泛的高級程序設計語言。2.?C語言標準隨著微型計算機的普及,許多C語言版本相繼出現。由于一些新的特性不斷被各種編譯器實現并添加,這些C語言之間出現了一些不一致的地方。為了建立一個“無歧義,與具體平臺無關”的C語言體系,美國國家標準學會(ANSI)為C語言制定了一套標準,即AN標準。71989年美國國家標準學會(ANSI)通過的C語言標準ANSIX3.159—1989,被稱為C89。之后《TheCProgrammingLanguage》第二版開始出版發行,書中根據C89進行了更新。1990年,國際標準化組織(ISO)批準ANSIC成為國際標準,于是ISOC誕生了,該標準被稱為C90。這兩個標準只有細微的差別,因此,通常認為C89和C90指的是同一個版本。之后,ISO于1994年、1996年分別出版了C90的技術勘誤文檔,更正了一些印刷錯誤,并在1995年通過了一份C90的技術補充,對C90進行了微小的擴充,經擴充后的ISOC被稱為C95。1999年,ANSI和ISO又通過了C99標準。C99標準相對C89做了很多修改,例如變量聲明可以不放在函數開頭,支持變長數組等。但由于很多編譯器仍然沒有對C99提供完整的支持,因此本書依然按照C89標準來進行講解。83.?C語言的特點C語言是一種通用的、面向過程的程序語言,語言簡潔、豐富的運算符、直接訪問物理地址、結構化、可移植性好等諸多特點使它得到了廣泛應用。(1)?C語言簡潔、緊湊,使用方便、靈活,具有豐富的運算符和數據結構。C語言一共有32個關鍵字、9種控制語句、34種運算符。C語言把括號、賦值、強制類型轉換等都作為運算符處理,其運算類型更為豐富,表達式類型更加多樣化。C語言的數據類型有基本類型和自定義等,能用來實現各種復雜的數據結構運算。(2)?C語言允許直接訪問物理地址,進行位操作,可以直接對硬件進行操作,兼具高級語言和低級語言的特點,能實現匯編語言的大部分功能。C語言既是成功的系統描述語言,又是通用的程序設計語言,能開發基于網絡和單機的各種形式的程序,在目前高級語言的市場占有率方面名列前茅。(3)?C語言具有結構化的控制語句(如if…else語句、while語句、do…while語句、switch語句、for語句等),它用函數作為程序模塊以實現程序的模塊化,是結構化的理想語言,符合現代編程風格的要求。9(4)?C語言語法限制不嚴格,程序設計自由度大。例如對變量的類型使用比較靈活,整型數據與字符型數據以及邏輯型數據可以通用。一般的高級語言語法檢查比較嚴,能檢查出幾乎所有的語法錯誤;而C語言允許程序編寫者有較大的自由度,因此放寬了語法的檢查。程序員要自己保證所寫程序的正確性,不能過分依賴C編譯程序去檢查錯誤。(5)?C語言編寫的程序可移植性好(與匯編語言相比)。在某一系統下編寫的程序,基本上不做修改就能在其他類型的計算機和操作系統上運行。(6)?C語言生成目標代碼質量高,程序執行效率高,一般只比匯編程序生成的目標代碼效率低10%~20%。盡管C語言具有很多的優點,但和其他任何一種程序設計語言一樣,它也有其自身的缺點,如代碼實現周期長;C語言程序設計過于自由,經驗不足的程序員易出錯;對平臺依賴較多等。但總的來說,C語言的優點遠遠超過了它的缺點。101.1.3從C到C++C語言是結構化和模塊化的語言,它是面向過程的。在處理較小規模的程序時,程序員用C語言較為得心應手。但是當問題比較復雜、程序的規模比較大時,結構化程序設計方法就顯出它的不足。C程序的設計者必須細致地設計程序中的每一個細節,準確地考慮到程序運行時每一時刻發生的事情,例如各個變量的值是如何變化的,什么時候應該進行哪些輸入,在屏幕上應該輸出什么等。這對程序員的要求是比較高的,如果面對的是一個復雜問題,程序員往往感到力不從心。當初提出結構化程序設計方法的目的是解決軟件設計危機,但是這個目標并未完全實現。為了解決軟件設計危機,20世紀80年代人們提出了面向對象的程序設計(ObjectOrientedProgramming,OOP)思想,需要設計出能支持面向對象的程序設計方法的新語言。在這種情況下Smalltalk等面向對象的語言紛紛涌現。不過在實踐中人們發現由于C語言是如此深入人心,使用如此廣泛,面對程序設計方法的革命,最好的辦法不是另外發明一種新的語言去代替它,而是在它原有的基礎上加以發展。在這種形勢下,C++?語言應運而生。C++?語言是由AT&TBell(貝爾實驗室)的Bjarne

Stroustrup博士及其同事于20世紀80年代初在C語言的基礎上成功開發的。C++?語言保留了C語言原有的所有優點,并增加了面向對象的機制。由于C++?語言對C語言的改進主要體現在增加了適用于面向對象程序設計的類(class)。后來為了強調它是C語言的增強版,用了C語言中的自加運算符“++”,改稱為C++。11C++?是由C發展而來的,與C兼容。用C語言編寫的程序基本上可以不加修改地用于C++。C++?可以看作是C的超集,C++?既可用于面向過程的結構化程序設計,又可用于面向對象的程序設計。C++?增添了類的概念,有人又稱C++?語言是帶類的C語言,是一個功能強大的混合型的程序設計語言。C++?對C的增強,

表現在兩個方面:(1)在原來面向過程的機制基礎上,對C語言的功能做了不少擴充。(2)增加了面向對象的機制。面向對象程序設計是針對開發較大規模的程序而提出來的,目的是提高軟件開發的效率。只有編寫過大型程序的人才會真正體會到C的不足和C++?的優點。12程序設計解決一個實際應用問題時,用計算機語言編寫計算機程序的過程,稱為程序設計。1.2程序設計方法

目前,有兩種重要的程序設計方法:結構化的程序設計面向對象的程序設計131.結構化程序設計的基本概念程序的三種基本結構順序結構程序:按照書寫順序依次執行語句選擇結構程序:按照條件判斷選擇執行語句循環結構程序:通過條件控制循環執行語句(基本結構流程圖見下頁)1.2.1結構化的程序設計方法14程序的三種基本結構順序結構N-S結構圖流程圖ABAB選擇結構YNABP成立?PTFAB15程序的三種基本結構循環結構NYP成立?A當P成立時

A直到型循環

A當P成立時YNAP成立?當型循環N-S結構圖流程圖16一個結構化程序應該符合以下標準:程序僅由三種基本結構組成每種基本結構都是只有一個入口和一個出口程序中沒有死循環和死語句172.結構化程序設計方法遵循的原則如果一個程序僅包含這三種基本結構(由這些基本結構組成),則稱為結構化程序。結構化程序設計的基本原則:采用自頂向下、逐步細化的方法進行設計;采用模塊化原則和方法進行設計。即將大型任務從上向下劃分為多個功能模塊,每個模塊又可以劃分為若干子模塊,然后分別進行模塊程序的編寫;每個模塊都是用結構化程序實現,即都只能由三種基本結構組成,并通過計算機語言的結構化語句實現。183.結構化程序設計過程

程序設計過程分為三個基本步驟:分析問題(Question)、設計算法(Algorithm)、編寫程序(Program),簡稱QAP方法。

第一步:分析問題。對問題進行定義與分析。第二步:設計算法。設置程序的輪廓(結構)并畫出程序的流程圖。第三步:編寫程序。采用一種計算機語言(例如使用C語言)實現算法編程。(編寫,編譯連接,查看結果)19結構化的程序設計仍然是廣泛使用的一種程序設計方法,但是它也有一些缺點:首先,恰當的功能分解是結構化程序設計的前提。然而對于用戶需求來講,變化最大的部分往往就是功能的改進、添加和刪除。結構化程序要實現這種功能變化并不容易,有時甚至要重新設計整個程序的結構。其次,在結構化程序設計中,數據和對數據的操作(即函數)分離,函數依賴于數據類型的表示。數據的表示一旦發生變化,與之相關的所有函數就均要修改,使得程序維護量增大。另外,結構化的程序代碼復用性較差,通常也就是調用一個函數或使用一個公共的用戶定義的數據類型而已。由于數據結構和函數密切相關,使得函數并不具有一般特性。例如,一個求方程實數根的函數不能應用于求解復數的情形。20面向對象的程序設計是另一種重要的程序設計方法,它能夠有效地改進結構化程序設計中存在的問題。面向對象的程序與結構化的程序不同,由C++編寫的結構化的程序是由一個個的函數組成的;而由C++編寫的面向對象的程序是由一個個的對象組成的,對象之間通過消息可以相互作用。1.2.2面向對象的程序設計方法在面向對象的方法中,“對象”是現實世界的實體或概念在計算機邏輯中的抽象表示。對象是具有唯一對象名和固定對外接口的一組屬性和操作的集合,用來模擬組成或影響現實世界問題的一個或一組因素。

21面向對象的程序設計有三個主要特征,它們是:封裝、繼承和多態,下面對這幾個特征僅作一個簡單的介紹,具體內容將在后續章節中詳細敘述。221.封裝在現實世界中,常常有許多相同類型的對象。例如,張三的汽車只是世界上許多汽車中的一個。如果我們把汽車看作一個大類,那么張三的汽車只是汽車對象類中的一個實例。汽車對象都有同類型的數據和對數據的操作行為,但是,每一輛汽車的數據又是獨立的。根據這個事實,制造商建造汽車時,用相同的藍圖建造許多汽車。在面向對象的程序設計中,我們把這個藍圖稱之為類。也就是說,類是定義某種對象共同的數據和操作的藍圖或原型。在C++?中,封裝是通過類來實現的。數據成員和成員函數可以是公有的或私有的。公有的成員函數和數據成員能夠被其他的類訪問。如果一個成員函數是私有的,它僅能被該類的其他成員函數訪問,私有的數據成員僅能被該類的成員函數訪問。因而,它們被封裝在類的作用域內。封裝是一個有用的機制,具體表現為:(1)可以限制未經許可的訪問;(2)可使信息局部化。232.繼承圖1.3貓的繼承關系一般地,對象是根據類來定義的。我們也可以用一個類來定義另一個類。例如,波斯貓和安哥拉貓都是貓的一種。用面向對象的術語來說,它都是貓類的子類(或派生類),而貓類是它們的父類(基類或超類)。它們的關系如圖1.3所示。每一個子類繼承了父類的數據和操作,但是,子類并不僅僅局限于父類的數據和操作,它還可以擴充自己的內容。繼承的主要益處是可以復用父類的程序代碼24圖1.3貓的繼承關系253.多態多態是指對于相同的消息,不同的對象具有不同的反應能力。多態在自然語言中應用很多,我們以動詞“關閉”的應用為例,同一個“關閉”應用于不同的對象時含義就不相同。例如,關閉一個門、關閉一個銀行賬戶或關閉一個窗口。精確的含義依賴于執行這種行為的對象。在面向對象的程序設計中,多態意味著不同的對象對同一消息具有不同的解釋。4.面向對象程序設計過程面向對象程序設計方法是遵循面向對象方法的基本概念而建立起來的,它的設計過程主要包括面向對象的分析(ObjectOrientedAnalysis,OOA)、面向對象的設計(ObjectOrientedDesign,OOD)、面向對象的實現(ObjectOrientedImplementation,OOI)三個階段。(1)面向對象的分析(OOA)。OOA的主要目的就是自上而下地進行分析,即將整個軟件系統看作是一個對象,然后將這個大的對象分解成具有語義的對象簇和子對象,同時確定這些對象之間的相互關系。(2)面向對象的設計(OOD)。OOD的任務是將對象及其相互關系進行模型化,建立分類關系,解決問題域中的基本構建。在這個階段確定對象及其屬性,以及影響對象的操作并實現每個對象。(3)面向對象的實現(OOI)。OOI是軟件具體功能的實現,是對對象的必要細節加以刻畫,是面向對象程序設計由抽象到具體的實現步驟,即最終用面向對象的編程實現建立在前面OOA基礎上的模型26通過上面的介紹我們可以看出,面向對象的程序設計完全不同于結構化的程序設計。后者是將問題進行分解,然后用許多功能不同的函數來實現,數據與函數是分離的;前者是將問題抽象成許多類,將數據與對數據的操作封裝在一起,各個類之間可能存在著繼承關系,對象是類的實例,程序是由對象組成的。面向對象的程序設計可以較好地克服結構化程序設計存在的問題,使用得好,可以開發出健壯、易于擴展和維護的應用程序。271.3

C/C++?語言程序的結構1.3.1C語言程序實例

例1.1最簡單的C語言程序。#include<stdio.h>/*預處理命令*/voidmain()/*主函數*/{printf("這是我的第一個C語言程序!\n");/*輸出雙引號中的內容*/}28一個計算機高級語言程序均由一個主程序和若干個(包括0個)子程序組成,程序的運行從主程序開始,子程序由主程序或其他子程序調用執行。在C語言中,主程序和子程序都稱之為函數,規定主函數必須以main命名。因此一個C語言程序必須由一個名為main的主函數(而且只能有一個)和若干個(包括0個)函數組成,程序的運行從main函數開始,其他函數由main函數直接或間接調用執行。例如例1.1中,程序的第1行#include是編譯程序的預處理指令,末尾不能加分號。stdio.h是C編譯程序提供的系統頭文件(或稱為包含文件),當在程序中調用標準輸入輸出函數時,應在調用之前寫上#indude<stdio.h>。29在C語言程序中每一句語句占一行(也可若干條語句在同一行,但為了閱讀方便,建議一條語句占一行),語句右邊“/*…*/”是注釋,“/*”是注釋的開始符號,“*/”是注釋的結束符號,注釋符號之間的文字是注釋內容。注釋的作用是對程序功能、被處理數據或處理方法的說明,注釋部分僅供程序員閱讀,不參與程序運行,所以注釋內容不需要遵守C語言的語法規則,編譯時被過濾掉,不增加程序在編譯后占用空間的大小。例如例1.1中,“/*輸出雙引號中的內容*/”注明了“printf("這是我的第一個C語言程序!\n");”語句的作用。30例1.2求兩個整數之和。#include<stdio.h>main()/*主函數*/{inta,b,sum;/*設置變量數據類型*/a=1;/*給變量賦初值*/b=2;sum=a+b;/*加法運算*/printf("sum=%d\n",sum);}程序運行結果如下:sum=331程序從主函數main開始,大括號之間的內容為主函數的函數體部分,在函數體中,第一句為變量說明語句,說明a、b和sum為整型變量,存放整數,分別代表加數a、b和變量sum。語句a=1和b=2的作用是給變量a、b賦值為1和2。這樣就可以通過sum=a+b計算a+b的值為3,最后程序輸出a加b的和值。32例1.3修改例1.2,整數的加法功能由函數add實現,在主函數中調用add函數以求兩個整數之和。#include<stdio.h>intadd(intx,inty)/*定義一個加法子函數add*/{return(x+y);}main()/*主函數*/{inta,b,sum;a=1;b=2;sum=add(a,b);/*調用add函數*/printf("sum=%d\n",sum);}33本程序除了主函數main外,另外定義了一個add函數,add函數作用是求x和y之和,通過return語句計算x和y的和值并返回給主函數main。主函數中第四句為調用函數add語句,在調用時將a、b的值傳遞給add函數中的x和y,經過執行add函數,x和y的和值作為返回值送回給主函數的調用語句處,并把這個值賦值給變量sum,然后輸出sum的值。例1.3程序的運行結果與例1.2完全相同,但特點是實現了整數加法運算的通用化。從例1.3我們可以看出,在C語言中,一個問題能夠分解成若干個子問題,將子問題用獨立的函數來實現,然后通過函數調用把整個程序組織起來,實現了程序的模塊化,從而實現對復雜問題的解決。34通過對上面3個程序的分析,我們了解到C語言程序結構具有以下特點:(1)?C語言程序是由函數構成的。函數是C語言程序的基本單位。一個C語言程序可以由一個或多個函數構成,但其中必須有而且只能有一個主函數main,主函數是C語言程序運行的起始點,每次執行C語言程序時都要從主函數開始執行。(2)除了主函數之外,其他函數的運行都是通過函數調用實現的。在一個函數中可以調用另外一個函數,這個被調用的函數可以是用戶定義的函數,也可以是系統提供的標準庫函數(比如printf和scanf)。使用函數時,建議讀者盡量使用庫函數,這樣不僅能夠縮短開發時間,也能提高軟件的可靠性,從而開發出可靠性高、可讀性強以及可移植性好的程序。35(3)函數定義的一般形式如下:函數返回值類型函數名(形式參數表){數據說明部分執行語句部分}(4)可以在程序的任何位置給程序加上注釋,注釋的形式為/*注釋內容*/,注釋是為了提高程序可讀性的一個手段,它對程序的編譯和運行沒有任何影響,可以注釋一行,也可以注釋多行。對于C++,注釋內容可以寫在“//”之后。36(5)?C語言程序的書寫格式非常自由,一條語句可以在一行內書寫,也可以分成多行書寫,而且一行可以書寫多條語句。盡管這樣,我們還是建議在一行只寫一條語句,而且采用逐層縮進的形式,這樣使得程序的邏輯層次一目了然,便于對程序的閱讀、理解和修改。(6)?C語言中每條語句都以分號結尾,分號是C語言語句的必要組成部分。(7)?C語言本身沒有輸入輸出語句。輸入和輸出操作由標準庫函數scanf和printf等函數來完成,所以注意在使用之前程序最前面要加上預處理語句#include<stdio.h>,因為這兩個函數是在stdio.h文件中定義的。371.3.2C++?程序實例

在了解了C語言程序結構之后,來看一個C++?程序實例。例1.4是一個面向過程的C++程序。例1.4簡單的C++?程序。#include<iostream.h>voidmain(){cout<<"Hello!MyfirstC++program!\n";cout<<"WelcometoC++!\n";}程序運行結果如下:Hello!MyfirstC++program!WelcometoC++!38這里,main()是主函數名,函數體用一對大括號括住。函數是C++?程序中最小的功能單位。在C++?中,必須有且只能有一個名為main()的函數,它表示程序執行的起始點。main()之前的void表示main()函數沒有返回值(關于函數返回值將在第五章介紹)。程序由語句組成,每條語句由分號“;”作為結束符。cout是一個輸出流對象,它是C++?系統定義的對象,其中包含了許多有用的輸出功能。輸出操作由操作符“<<”來表達,其作用是將緊隨其后的雙引號中的字符串輸出到標準輸出設備(顯示器)上。39程序的第一條語句“#include<iostream.h>”指示編譯器在對程序進行預處理時,將文件iostream.h中的代碼嵌入到程序中該指令所在的地方,其中#include被稱為預編譯指令。文件iostream.h中聲明了程序所需要的輸入和輸出操作的有關信息。cout和“<<”操作的有關信息就是在該文件中聲明的。在C++?程序中如果使用了系統中提供的一些功能,就必須嵌入相關的頭文件。當我們編寫完程序文本后,C的源程序被存儲為后綴是?.c的文件(C++?源程序的后綴名為?.cpp),再經過編譯系統的編譯、連接后,生成后綴為?.exe的可執行文件。40由于C或C++?源程序一般是由ASCII代碼構成的,計算機不能直接執行源程序。要使C或C++?源程序在計算機上運行,必須將ASCII代碼的程序翻譯成機器能夠執行的二進制目標程序,通常需要一種特定的軟件工具,我們稱這種軟件工具為編譯程序,而把這種轉換工作稱為程序編譯。例如一個編寫完成的C源程序在成功運行之前,一般經過編輯源代碼、編譯、鏈接、運行四個步驟。為方便讀者上機練習,下面給出在MicrosoftVisualStudio2010集成環境下開發C和C++?程序的步驟。1.4C/C++?語言程序上機實踐/*預處理命令*//*主函數*//*輸出雙引號中的內容*/41下面我們以例1.1為例,給出程序上機實踐步驟。(1)啟動VisualStudio2010編譯環境,如圖1.4所示。42圖1.4VisualStudio2010編譯環

溫馨提示

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

評論

0/150

提交評論