零點起飛學(xué)VisualC之C語言基礎(chǔ)課件_第1頁
零點起飛學(xué)VisualC之C語言基礎(chǔ)課件_第2頁
零點起飛學(xué)VisualC之C語言基礎(chǔ)課件_第3頁
零點起飛學(xué)VisualC之C語言基礎(chǔ)課件_第4頁
零點起飛學(xué)VisualC之C語言基礎(chǔ)課件_第5頁
已閱讀5頁,還剩114頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第2章 C+語言基礎(chǔ) C+語言是對傳統(tǒng)C語言進(jìn)行面向?qū)ο蟮臄U(kuò)充。使用C+語言可以在Visual C+開發(fā)環(huán)境中開發(fā)出功能強(qiáng)大的應(yīng)用程序。通過本章的學(xué)習(xí),讀者可以快速回想起C+的語法知識。2.1 什么是面向?qū)ο蟪绦蛟O(shè)計對象是面向?qū)ο蟪绦蛟O(shè)計技術(shù)的核心,那么到底什么是對象?世界上的一切事物都是對象,都是客觀對象。人類大腦中的認(rèn)識和概念也是對象??梢妼ο罂梢允怯行蔚膶嶓w,也可以是無形的認(rèn)識、知識、事件等。概括地說對象就是一個實體,它具有一個名字標(biāo)志,并且具有自身的狀態(tài)和功能。在軟件設(shè)計和實現(xiàn)中,傳統(tǒng)的被人們廣泛使用的是面向過程的程序設(shè)計。隨著計算機(jī)技術(shù)的發(fā)展,面向?qū)ο蟮某绦蛟O(shè)計思想被越來越多的程序員

2、所接受。面向?qū)ο蟮某绦蛟O(shè)計是一種新型的程序設(shè)計方法。這種程序設(shè)計方法的特征是:應(yīng)用程序?qū)ο笙ⅰC嫦驅(qū)ο蟪绦蛟O(shè)計的基本元素是對象,而面向?qū)ο蟪绦蛟O(shè)計中把對象抽象成類,因此在程序設(shè)計中就主要包括類的定義和類的使用兩部分。在整個完整的軟件中就是通過在對象之間進(jìn)行消息傳遞從而聯(lián)系全部的類。面向?qū)ο蟪绦蛟O(shè)計的核心就是對象和類。對象就是人們認(rèn)識世界的基本單元,可以是人,可以是物,也可以是抽象的事件等。當(dāng)然對象可以有若干小的對象組成,例如某個學(xué)生可以看作一個對象,那么學(xué)生的生活方面,學(xué)習(xí)方面都可以看成小的對象。而學(xué)生由生活方面和學(xué)習(xí)方面組成。對象都具有區(qū)別于其他對象的靜態(tài)屬性和動態(tài)行為。靜態(tài)屬性又稱為對象

3、的狀態(tài),動態(tài)屬性又稱為對象的功能。類是現(xiàn)實世界中具有共同靜態(tài)屬性和動態(tài)屬性的對象的抽象,類和對象之間的關(guān)系就是抽象和具體之間的關(guān)系。類是多個對象進(jìn)行綜合抽象的結(jié)果,而對象則是類的實例化。 例如:某個學(xué)生張三是一個對象,一個個像張三的學(xué)生則可以抽象出一個學(xué)生類。張三就是學(xué)生類的實例化。 消息是向某對象請求服務(wù)的一種表達(dá)方式。對象內(nèi)有方法和數(shù)據(jù),外部的用戶或?qū)ο髮υ搶ο筇岢龅姆?wù)請求,可以稱為向該對象發(fā)送消息。面向?qū)ο蟮木幊谭椒ň哂?個基本特征,下面分別進(jìn)行介紹。1抽象 抽象就是對某些特定實例抽取其共有的性質(zhì)后所形成的概念,是抽取現(xiàn)實實例所共有的特征。抽象是對系統(tǒng)的簡單描述,強(qiáng)調(diào)了系統(tǒng)部分屬性,忽

4、略了系統(tǒng)的其他部分。2繼承 繼承是從一種實際事物聯(lián)系到另外的事物,是一種聯(lián)結(jié)類的層次模型,允許類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現(xiàn)有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,稱為原始類的派生類,而原始類稱為新類的基類。繼承性使得程序設(shè)計的代碼復(fù)用得到充分解決。3封裝 封裝是面向?qū)ο蟮奶卣髦?,是對象和類概念的主要特性。封裝是將事物的數(shù)據(jù)抽象的外部接口與內(nèi)部實現(xiàn)的細(xì)節(jié)隔離。內(nèi)部數(shù)據(jù)不可以被隨便修改,從而保證程序的安全性。4多態(tài)性多態(tài)性是指允許不同類的對象收到相同的消息時產(chǎn)生不同的響應(yīng)。C+語言支持兩種多態(tài)性,即編譯時的多態(tài)性和運行時的多態(tài)性。編譯時的多態(tài)

5、性通過重載來實現(xiàn),而運行時的多態(tài)性則通過虛函數(shù)來實現(xiàn)。具體概念和實現(xiàn)方法將在后面進(jìn)行講解。面向?qū)ο笫切滦偷某绦蛟O(shè)計方法,其思想比過程化的程序設(shè)計更先進(jìn)。掌握面向?qū)ο蟮某绦蛟O(shè)計需要透徹理解面向?qū)ο蟮幕靖拍詈吞匦?。C+語言作為面向?qū)ο蟮某绦蛟O(shè)計語言,學(xué)習(xí)和運用C+語言已經(jīng)成為現(xiàn)代程序員的基本要求。注意:C+并不是純面向?qū)ο蟮某绦蛟O(shè)計語言,它是一種面向過程程序設(shè)計和面向?qū)ο蟪绦蛟O(shè)計的混合程序設(shè)計語言。2.2 單一數(shù)據(jù)的表示數(shù)據(jù)類型 數(shù)據(jù)類型就是一類數(shù)據(jù)的集合。在計算機(jī)中,數(shù)據(jù)以某種特定的形式存儲在計算機(jī)中,數(shù)據(jù)類型決定了數(shù)據(jù)在計算機(jī)中的存儲形式。2.2.1 數(shù)據(jù)的指代常量與變量常量是指在程序運行中

6、,數(shù)值不能改變的量。例如13、28、a、2.3等,這些量在整個程序運行期間,其值不發(fā)生改變。在C+中,定義常量的語法如下所示。#define 標(biāo)識符 常數(shù)其中,#表示這是一個宏定義命令;define為定義符號常量的關(guān)鍵字;標(biāo)識符為常量的名稱;常數(shù)為符號常量具體的數(shù)值。常量定義中關(guān)鍵字和標(biāo)識符,以及標(biāo)識符和常數(shù)之間必須留一個以上的空格?!臼纠?.1】 定義一個名稱為PI的符號常量。 #define PI 3.14 分析:上面定義了一個符號常量PI,其值在程序運行期間保持不變,且為3.14。習(xí)慣上,符號常量名用大寫形式,但并不是必須使用大寫。變量則是在程序運行期間其值可以改變的量。一個變量應(yīng)該有一

7、個名字,在內(nèi)存占據(jù)一定的空間。在該存儲空間中存放變量的值。在程序中可以利用變量的名字對變量進(jìn)行訪問,即得到變量的值。在C+中定義變量的語法形式如下所示。數(shù)據(jù)類型 標(biāo)識符; 其中,數(shù)據(jù)類型表示變量的數(shù)據(jù)類型是什么;標(biāo)識符為所定義的變量的名稱。變量的數(shù)據(jù)類型和標(biāo)識符之間必須留一個以上的空格?!臼纠?.2】 定義兩個變量。int a=8;/定義一個整型變量double a;/定義一個雙精度實型變量分析:上面第一行代碼定義了一個變量,并且賦初值為8。第二行代碼只是定義一個變量。習(xí)慣上,變量的標(biāo)識符使用小寫形式。關(guān)于數(shù)據(jù)類型將在下面進(jìn)行介紹。注意:C+規(guī)定標(biāo)識符只能由字母、數(shù)字和下劃線三種字符組成,且第

8、一個字符必須為字母或下劃線。2.2.2 簡單數(shù)據(jù)類型 C+語言中的簡單數(shù)據(jù)類型是指基本的數(shù)據(jù)類型,即整型、實型、字符型等。下面介紹其特點和用法。1整型整型是程序設(shè)計語言中最常用的數(shù)據(jù)類型,是用來表達(dá)整數(shù)的數(shù)據(jù)類型。整型數(shù)據(jù)包括整型常量和整型變量。整型常量是整數(shù),例如1、100等,整數(shù)可以用十進(jìn)制、八進(jìn)制和十六進(jìn)制表示。八進(jìn)制整數(shù)以數(shù)字0開頭,后面的為八進(jìn)制數(shù)據(jù)。十六進(jìn)制則以0 x開頭,后面的為十六進(jìn)制數(shù)據(jù)。整型變量是在程序運行期間數(shù)據(jù)的值可能發(fā)生變化的整型量。整型變量又分為基本類型、短整型和長整型。其關(guān)鍵字以及表示數(shù)據(jù)的范圍如表2.1所示。在C+中整型變量的定義為整型類型 標(biāo)識符;并且整型類型

9、中的signed可以省略。表2.1 整型的分類類類 型型比比 特特 數(shù)數(shù)數(shù)數(shù) 據(jù)據(jù) 范范 圍圍signed int163276832767unsigned int16065535signed short int163276832767unsigned short int16065535signed long int32 2 1 4 7 4 8 3 6 4 8 2147483647unsigned long int3204294967295【示例2.3】 定義三個整型變量。 int a=10;/定義整型變量a int i,j;/定義整型變量i和j 說明:可以利用關(guān)鍵字int一次說明多個整型變量。

10、注意此時整型變量之間用逗號做分隔符,最后一個變量的后面加“;”例如int I,j,k;。2實型 實型數(shù)據(jù)類型同樣包括實型常量和實型變量。實型是用來表示實數(shù)的數(shù)據(jù)類型。實數(shù)又稱為浮點數(shù),可以用十進(jìn)制小數(shù)表示,也可以用指數(shù)形式表示。實型常量即是實數(shù),例如3.25、5.98等。實型變量又分為單精度,以關(guān)鍵字float表示;雙精度以關(guān)鍵字double表示;長雙精度以關(guān)鍵字long double表示。三者的區(qū)別如表2.2所示。表2.2 實型的分類 在C+中實型變量的定義為float/(long)double實型變量名; 類類 型型比比 特特 數(shù)數(shù)有有 效效 數(shù)數(shù) 字字?jǐn)?shù)數(shù) 據(jù)據(jù) 范范 圍圍float 3

11、2 63.410383.41038double 64151.7103081.710308long double128181.21049321.2104932【示例2.4】 定義兩個實型變量。 float f=0.35/定義單精度實型變量f double ff=6.2545/定義雙精度實型變量ff3字符型 字符型是用來表達(dá)字符的數(shù)據(jù)類型。字符常量是用單引號括起來的一個字符。如a、9等。字符型變量用來存放字符常量,且只能存放一個字符常量。字符變量的定義以關(guān)鍵字char說明。在C+中字符型變量的定義為char字符型變量名。【示例2.5】 定義字符型變量。 char c=g;/定義字符型變量c cha

12、r p,w;/定義字符型變量p和w2.2.3 字符串常量字符常量是由單引號括起來的單個字符。C+語言同C語言一樣,除了字符常量外,還支持字符串常量。字符串常量是由一對雙引號括起來的字符序列。如:HELLO WORLD!, Study boy字符串常量和字符常量的區(qū)別是,字符串常量在每一個字符串的最后一個字符后面,加上一個字符串結(jié)束標(biāo)志,從而在程序訪問時可以判斷字符串的字符序列是否結(jié)束。2.2.4 構(gòu)造類型數(shù)組 C+語言中除了基本數(shù)據(jù)類型外,還提供了構(gòu)造數(shù)據(jù)類型,即數(shù)組。數(shù)組是有序數(shù)據(jù)的組合,數(shù)組中的每一個元素都屬于同一數(shù)據(jù)類型,這和C語言中的數(shù)組是完全一致的。數(shù)組包括一維數(shù)組和多維數(shù)組。數(shù)組的

13、定義格式和引用方式與在C語言中是一致的?!臼纠?.6】 定義一個數(shù)組。 int a3; 分析:上面的語句定義了一個數(shù)組,這就是C+語言中構(gòu)造類型的基本使用方法。關(guān)于數(shù)組的使用將在2.3節(jié)中進(jìn)行詳細(xì)介紹。2.2.5 文件類型 C+語言中提供了文件的數(shù)據(jù)類型,即C+把文件看做是字符序列,文件由一個一個字符數(shù)據(jù)順序組成。根據(jù)數(shù)據(jù)結(jié)構(gòu)的組織形式,可以把文件分為文本文件和二進(jìn)制文件。在C+中若要對文件進(jìn)行輸入輸出,必須首先創(chuàng)建一個流,然后將流和文件相關(guān)聯(lián)。即打開文件,此時才可以進(jìn)行操作,然后關(guān)閉文件。由于文件的使用比較復(fù)雜,在后面的章節(jié)中將詳細(xì)介紹C+中文件的基本操作。2.2.6 指針類型 C+語言中的

14、指針和C語言中的指針是完全一樣的。但是C+語言中提供了特殊的指針,即void型指針。它表示不確定的類型。void型指針是一種通用型指針,也就是說任何類型的指針都可以賦值給void型的指針變量。【示例2.7】 void型指針的使用。void *p;/定義void型指針變量void p;/錯誤,不可以定義void型變量int i=3;char c=w;p=&i;p=&c; 上面介紹了在C+語言中常用的數(shù)據(jù)類型,掌握數(shù)據(jù)類型的基本概念和使用方法是進(jìn)行程序設(shè)計的前提。讀者應(yīng)掌握上面介紹的全部概念。2.3 多個數(shù)據(jù)的表示數(shù)組 數(shù)組作為一種構(gòu)造數(shù)據(jù)類型,它的使用和基本類型有很大不同。因此有

15、必要對數(shù)組這一數(shù)據(jù)類型進(jìn)行介紹。2.3.1 一維數(shù)組 數(shù)組是有序數(shù)據(jù)的集合。在C+中一維數(shù)組的定義方式和C語言中一維數(shù)組的定義方式完全相同,并且使用方式以及使用的注意事項都與C語言中基本一致。1一維數(shù)組的定義 一維數(shù)組定義的基本形式如下: 類型說明符 數(shù)組名稱常量表達(dá)式; 其中,類型說明符指的是數(shù)組元素的類型,其是以基本數(shù)據(jù)類型,例如整型、浮點型等。數(shù)組名稱指的是該數(shù)組的名字。常量表達(dá)式則是數(shù)組的大小?!臼纠?.8】 定義一個10個元素大小的整型數(shù)組num。int num10; /定義整型數(shù)組在定義了一維數(shù)組以后,程序中可以對該數(shù)組中的元素進(jìn)行使用,并且在程序中只能對數(shù)組的某一個元素進(jìn)行使用,

16、不能使用整個數(shù)組。數(shù)組元素的表示形式為:數(shù)組名稱下標(biāo);【示例2.9】 將示例2.8中定義的整型數(shù)組的第3個元素初始化為3。 num2=3;/對數(shù)組中的第3個元素賦值 說明:在C+中數(shù)組元素的下標(biāo)從0開始,因此第3個元素也就是下標(biāo)為2的元素。2數(shù)組的初始化在定義了數(shù)組以后,可以利用上面的形式一個個對數(shù)組中的元素進(jìn)行初始化工作。同時也可以使用下面幾種方法對數(shù)組進(jìn)行初始化。(1)定義數(shù)組時對數(shù)組元素賦初值。其基本形式為:類型說明符 數(shù)組名稱常量表達(dá)式=常量1,常量2,需要注意的是常量必須與類型說明符一致,或者可以進(jìn)行轉(zhuǎn)換?!臼纠?.10】 定義一個字符數(shù)組,并且進(jìn)行初始化。char c3=a,b,c

17、;(2)只對數(shù)組中的部分進(jìn)行賦值,當(dāng)提供的常量個數(shù)與常量表達(dá)式的數(shù)值不相等時,只對數(shù)組前面的部分進(jìn)行賦值。(3)定義數(shù)組元素為相等的值,此時可以使用下面的形式。類型說明符 數(shù)組名常量表達(dá)式=常量;【示例2.11】 定義一個10個元素大小的整型數(shù)組,初始化為0。 int num10=0;3一維數(shù)組的使用 定義了一維數(shù)組以后,就相當(dāng)于定義了多個數(shù)組類型的變量。在應(yīng)用中可以像使用變量一樣使用數(shù)組元素。例如保存數(shù)據(jù)、進(jìn)行計算等?!臼纠?.12】 定義一個字符數(shù)組,將三個字符變量分別賦值給數(shù)組。代碼如下:char c1=a;char c2=s;char c3=d;/定義字符變量char c3;/定義字符

18、數(shù)組c0=c1;c1=c2;c2=c3;本小節(jié)介紹了在C+中一維數(shù)組的定義和使用方式。在C+中一維數(shù)組的定義和使用與C語言的定義和使用基本相同。2.3.2 二維數(shù)組 在C+中二維數(shù)組與C語言中的二維數(shù)組的定義是一樣的。一維數(shù)組是一行有序數(shù)據(jù)的結(jié)合,而二維數(shù)組則是一個有序數(shù)據(jù)的一個矩陣。1二維數(shù)組的定義 在C+中二維數(shù)組的定義形式與一維數(shù)組的定義基本相同,其基本形式如下: 類型說明符 數(shù)組名稱常量表達(dá)式1 常量表達(dá)式2;【示例2.13】 定義一個整型的二維數(shù)組。 int num23; 分析:上面定義了一個2*3的整型數(shù)組。實際上二維數(shù)組的數(shù)據(jù)存儲也是在內(nèi)存中按順序排列的。在定義了二維數(shù)組以后,可

19、以對數(shù)組元素進(jìn)行引用。與一維數(shù)組一樣,二維數(shù)組元素的下標(biāo)從0開始。【示例2.14】 將二維整型數(shù)組的第一行、第三列的元素賦值給整型變量i。 int num23;/定義數(shù)組 int i=num02;2二維數(shù)組的初始化 二維數(shù)組的初始化可以與一維數(shù)組一樣對每個數(shù)組元素進(jìn)行訪問,并賦值。除此之外還可以使用下面幾種形式對二維數(shù)組進(jìn)行初始化。 (1)分行初始化:分別對二維數(shù)組的每行的每個元素進(jìn)行初始化?!臼纠?.15】 對二維數(shù)組進(jìn)行初始化。 char c23=a,b,c,d,e,f 分析:上面就是定義一個二維數(shù)組,并且進(jìn)行初始化。 (2)全部初始化:一次性對數(shù)組的每個元素進(jìn)行初始化。【示例2.16】

20、初始化二維數(shù)組char c23;。 char c23=a,b,c,d,e,f; 分析:上面的初始化與第一種方法基本一樣。它首先初始化第一行,然后初始化第二行。這種方式初始化由于沒有界面,容易遺漏。3二維數(shù)組的使用 在定義了二維數(shù)組以后,在程序中就可以使用該數(shù)組。二維數(shù)組的使用與一維數(shù)組的使用基本相同。即可以利用下標(biāo)的形式定義到一個具體的數(shù)組元素,然后進(jìn)行訪問。【示例2.17】 將一個2*3的整型數(shù)組的00位置的元素與12位置的元素進(jìn)行數(shù)據(jù)交換。int num23=1,2,3,4,5,6; /定義數(shù)組并初始化int i;i=num00;num00=num12;num12=i;上面介紹了在C+中二

21、維數(shù)組的定義、初始化和使用的基本方法。讀者應(yīng)掌握二維數(shù)組這種構(gòu)造數(shù)據(jù)類型。2.3.3 字符型數(shù)組 前面已經(jīng)介紹了在定義一維或者二維數(shù)組時,需要指定其類型說明符。類型說明符是基本數(shù)據(jù)類型,例如整型、浮點型、字符型等。但是字符數(shù)組與其他數(shù)組有時不同,下面對字符數(shù)組的特殊用法進(jìn)行介紹。1字符數(shù)組的定義 字符數(shù)組與一般數(shù)組的定義是一樣的。同時數(shù)組的初始化與一般的數(shù)組也沒什么兩樣。對數(shù)組元素的訪問也與普通數(shù)組一致?!臼纠?.18】 定義一個二維字符數(shù)組,用來存放3行字符串常量。并且將第2行和第3行對應(yīng)的元素進(jìn)行交換。char c33=o,n,e,t,w,o,t,h,r;/定義二維字符數(shù)組并初始化char

22、 cc;for(int i=0;ic0c1c2c3;在鍵盤上輸入C h i n a ,此時在c5中保存的是一個亂碼,而不是0。因此如果此時輸出,則會輸出一個亂碼。為了消除這種現(xiàn)象,可以在輸出時單個輸出字符,同時不輸出最后元素的字符。 (2)整個字符串一次輸入:整個字符串一次輸入時,當(dāng)遇到空格,則默認(rèn)地作為一個0字符保存在數(shù)組中。并且此后輸入的字符不再保存。如果還有連續(xù)輸入的要求則作為下一個輸入?!臼纠?.20】 輸入兩個字符串,并輸出。char c15,c25;cinc1c2;/輸入coutc1 c210&b10)/&的使用 a=100;b=100; 分析:上面的代碼就是邏輯運

23、算符&的基本使用方法。使用該運算符對常用的邏輯組合判斷有很大的作用。2.4.4 關(guān)系運算符 關(guān)系運算和邏輯運算一樣,在程序設(shè)計中經(jīng)常用到。邏輯運算最常用的是判斷某種具體值是否屬于某類的情況。例如計算1加到100的值,則需要從1加到100,期間需要判斷變量是否大于100,從而設(shè)計程序。關(guān)系判斷在程序設(shè)計中也是十分重要的運算。【示例2.24】 比較a和b的大小。 if(ab) couta is bigger than bendl; 分析:上面進(jìn)行的就是大于關(guān)系運算,當(dāng)a大于b時輸出語句。2.4.5 位運算符 位運算是在程序設(shè)計中不經(jīng)常使用,但是應(yīng)用技巧性很強(qiáng)的一類運算。其主要包括“”,“”

24、,“”和“&”?!啊笔怯乙七\算符,實際上就是變量除2?!啊笔前次蝗》催\算符,即把變量的二進(jìn)制取反?!啊笔前褍蓚€變量按位進(jìn)行異或?!?amp;”是將兩個變量按位相與。【示例2.25】 把十進(jìn)制數(shù)據(jù)10除2。 int i=10; int b=i1;/除2結(jié)果5 分析:所謂的除2運算就是把該數(shù)據(jù)對應(yīng)的二進(jìn)制數(shù)據(jù)右移一位。例如10的二進(jìn)制為,對應(yīng)的右移一位的數(shù)據(jù)為,即5。2.4.6 逗號運算符 逗號運算符是一類比較特殊的運算符,其是將多個表達(dá)式連接起來。逗號運算符又稱為順序求值運算符?!臼纠?.26】 逗號運算符的使用。int a=9;int b;int c=(b=a+2,b+3);/逗號運算

25、符的使用分析:逗號運算符即把兩個表達(dá)式進(jìn)行順序連接,首先求解第一個表達(dá)式的值,然后求解第二個表達(dá)式的值,得到整個逗號運算的值。本例中,先計算a+2得b=11,再計算b+3的整個逗號運算的值為14,即c=14。2.5 程序的基本單元表達(dá)式和語句 由運算符構(gòu)成的式子稱為C+語言的表達(dá)式。常見的表達(dá)式有賦值表達(dá)式,算術(shù)表達(dá)式和逗號表達(dá)式。 賦值表達(dá)式是由賦值運算符構(gòu)成的表達(dá)式,例如int a=10。雖然賦值表達(dá)式十分簡單,但其應(yīng)用廣泛。函數(shù)的返回值可以直接作為賦值表達(dá)式右半部分,例如函數(shù)int fun(),可以這樣寫出賦值表達(dá)式int i=fun()。逗號表達(dá)式即前面講解的由逗號運算符構(gòu)成的表達(dá)式。

26、程序通過語句向計算機(jī)發(fā)送命令。但是程序中并不都是語句,聲明部分的內(nèi)容不是語句。例如int i=9;這條賦值語句不能算作一條語句。在C+程序設(shè)計中常用的語句包括以下幾種。(1)控制語句:在程序設(shè)計中最常用的結(jié)構(gòu)類設(shè)計語句。例如循環(huán)、條件等。(2)函數(shù)調(diào)用:程序設(shè)計中對函數(shù)的調(diào)用。(3)表達(dá)式語句:一個表達(dá)式構(gòu)成的語句。最簡單的如賦值語句:int a=0;。(4)空語句:只有一個分號所構(gòu)成的語句。(5)復(fù)合語句:用大括號“”把幾條語句放在一起成為復(fù)合語句,又稱為分程序。2.6 程序控制結(jié)構(gòu) C+語言中有3種基本的程序控制結(jié)構(gòu),分別是順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。幾乎所有應(yīng)用軟件都會使用這3種程序控

27、制結(jié)構(gòu)。順序結(jié)構(gòu)比較簡單,程序按照語句的順序執(zhí)行。選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)可以完成很多復(fù)雜的功能。本節(jié)將對這3種控制結(jié)構(gòu)進(jìn)行分析,講解操作實例。2.6.1 直腸子程序順序結(jié)構(gòu)順序結(jié)構(gòu)是最簡單、最常用的程序結(jié)構(gòu)。其典型特點是程序完全按照語句出現(xiàn)的先后次序執(zhí)行。在順序結(jié)構(gòu)的程序中,最常用的是賦值語句。其是C+程序中最基本的語句,作用是將表達(dá)式的值賦給變量或?qū)ο?。賦值語句的語法格式如下:name= expression;其中,name為變量或者對象,expression為表達(dá)式。順序結(jié)構(gòu)常見的用法是在程序中和用戶的輸入進(jìn)行交互。程序從上到下順序執(zhí)行。【示例2.27】 設(shè)計一個程序,輸入某個學(xué)生的語文、數(shù)學(xué)

28、、英語3門課的成績后計算其總成績和平均分。分析:要求3個數(shù)相加求其總和并計算平均值,采用順序設(shè)計比較合理,具體代碼如下:分析:上面的例子就是順序程序設(shè)計,其中的cin和cout為首的幾行是輸入輸出,具體用法將在下面進(jìn)行介紹。這里只需了解順序程序設(shè)計的基本結(jié)構(gòu)即可。說明:C+程序設(shè)計中注釋符為“/”,即“/”后面的內(nèi)容為注釋內(nèi)容。同時在C+中“/*”和“*/”成對出現(xiàn),其中的內(nèi)容也為注釋內(nèi)容2.6.2 有頭腦的程序選擇結(jié)構(gòu) 選擇結(jié)構(gòu)是利用條件語句實現(xiàn)的。根據(jù)指定的條件表達(dá)式的結(jié)果,選擇符合條件的某一分支執(zhí)行相關(guān)操作。條件語句中的條件表達(dá)式通常是關(guān)系表達(dá)式、邏輯表達(dá)式、數(shù)字表達(dá)式或者字符串表達(dá)式。

29、 選擇結(jié)構(gòu)程序設(shè)計是應(yīng)用程序設(shè)計過程中較為常用的結(jié)構(gòu)。關(guān)系運算符是選擇結(jié)構(gòu)中常用的判斷語句。在C+語言中常用的是ifelse語句,其最常用的形式有下面3種。1第一種樣式 if (關(guān)系表達(dá)式) 語句1; else 語句2; 分析:上面的選擇結(jié)構(gòu)是根據(jù)if后面的括號的關(guān)系表達(dá)式的值進(jìn)行選擇分支。如果關(guān)系表達(dá)式為真,則執(zhí)行語句1;否則,執(zhí)行語句2。【示例2.28】 是一個選擇結(jié)構(gòu)示例。下面的代碼根據(jù)整型變量a的值與3的大小關(guān)系進(jìn)行選擇結(jié)構(gòu)的輸出。if(a3)/判斷a是否大于3,如果大于3,執(zhí)行下面的語句,否則執(zhí)行else后面的語句couta is bigger than 3endl;else cou

30、ta is not bigger than 310的關(guān)系的真假進(jìn)行語句選擇。如果為真,則執(zhí)行語句,將x重新賦值為11。否則跳過該語句。 if(x10)x=11; 分析:上面的形式是選擇結(jié)構(gòu)中最簡單的用法,即根據(jù)條件表達(dá)式的值進(jìn)行判斷,符合條件則執(zhí)行語句,否則不執(zhí)行語句。需要注意的是語句可以是利用大括號括起來的復(fù)合語句。3第三種樣式 if(表達(dá)式1)語句1 else if(表達(dá)式2)語句2 else if(表達(dá)式m)語句m else 語句m+1 分析:上面的選擇結(jié)構(gòu)是一個多項選擇結(jié)構(gòu)。其根據(jù)表達(dá)式的值逐層向下執(zhí)行,遇到真則執(zhí)行if后面的語句,否則執(zhí)行else進(jìn)入下一層選擇結(jié)構(gòu)。【示例2.30】

31、一個選擇結(jié)構(gòu)示例。將a的取值分為4個范圍,然后根據(jù)a的范圍,分別輸出一句代碼。 if(a3)/判斷a是否小于3 couta is small than 3endl;/a小于3 else if(a6)/a不小于3,繼續(xù)判斷是否小于6 couta is not small 3,but is small than 6endl; else if(a10)/a不小于6,判斷是否小于10 couta is not small 6,but is small than 10endl; else couta is bigger than 10endl; 分析:上面的形式是一種多選擇形式。在實際應(yīng)用中,可能表達(dá)式

32、的范圍并不可以一分為二,可能會出現(xiàn)多個范圍,這就需要多選擇語句。例如,郵局的包裹就需要根據(jù)不同的重量段進(jìn)行收費。需要使用多選擇語句。 除了if語句外,switch語句也是較為常用的。其是多分支選擇語句。當(dāng)然多分支語句可以用if語句的嵌套進(jìn)行替換,但是switch更加簡單,程序可讀性更好。 其形式如下: swith(表達(dá)式) case 常量表達(dá)式1:語句1 case 常量表達(dá)式2:語句2 case 常量表達(dá)式3:語句3 case 常量表達(dá)式n:語句n default 語句n+1 上面的結(jié)構(gòu)根據(jù)switch后面括號內(nèi)的表達(dá)式的選擇語句執(zhí)行。當(dāng)表達(dá)式的值與case后面的常量表達(dá)式的值相等時則執(zhí)行“:

33、”后面的語句。當(dāng)找不到對應(yīng)的值時,則執(zhí)行default后面的語句。【示例2.31】 利用switch語句改寫示例2.30,即利用switch語句實現(xiàn)a的取值范圍的劃定。 switch(a/3)/switch判斷 case 0:/a/3為0 couta is small than 3endl;break; case 1: /a/3為1 couta is not small 3,but is small than 6endl;break; case 2:/a/3為2 couta is not small 6,but is small than 9endl;break; default:/a/3不滿

34、足上面的取值 couta is not small than 9endl; 分析:上面的選擇結(jié)構(gòu)則是根據(jù)a/3的值選擇語句執(zhí)行。需要注意的是,執(zhí)行完一個case語句后,流程會繼續(xù)執(zhí)行下一條case語句。因此程序的case語句經(jīng)常需要添加break跳出整個結(jié)構(gòu)。 上面介紹了常用的幾種選擇結(jié)構(gòu)。在實際應(yīng)用中可以根據(jù)合適的結(jié)構(gòu)設(shè)計選擇程序。下面介紹一個選擇結(jié)構(gòu)設(shè)計的例子?!臼纠?.32】 設(shè)計一個程序,輸入一個數(shù)據(jù),如果輸入數(shù)據(jù)大于10,則在屏幕輸出its greater than 10。如果小于等于10而大于5,則在屏幕輸出its greater than 5,but less than 10。如

35、果小于5,則輸出its less than 5。分析:要求根據(jù)輸入數(shù)據(jù)的區(qū)間選擇輸出,程序需要使用if語句的第三種使用方式,具體程序如下: 分析:上面的程序就是選擇結(jié)構(gòu)的設(shè)計。根據(jù)一個輸入的整數(shù)值,輸出其范圍。如果輸入的值大于10,則輸出一條大于10的語句。如果輸入大于5而小于10,則輸出其大于5小于10的語句。如果不滿足上面的情況則輸出小于5的一條語句。2.6.3 死腦筋的程序循環(huán)結(jié)構(gòu) 循環(huán)程序設(shè)計也是程序設(shè)計中常用的結(jié)構(gòu)之一。程序中一些代碼段需要重復(fù)執(zhí)行以實現(xiàn)某些功能。例如程序中要計算1加到100的值,如果選擇順序結(jié)構(gòu),那么相加語句至少要寫99條。而如果使用循環(huán)結(jié)構(gòu),程序的結(jié)構(gòu)會十分清晰。

36、循環(huán)結(jié)構(gòu)中常用的形式是for循環(huán)、while循環(huán)和dowhile循環(huán),以及goto語句。1for循環(huán) for循環(huán)的基本形式如下所示。 for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語句; 其執(zhí)行過程如下所述。 (1)先求解表達(dá)式1; (2)求解表達(dá)式2,若其值為真(值為非0),則執(zhí)行for循環(huán)中的內(nèi)嵌語句,然后執(zhí)行步驟(3),否則跳轉(zhuǎn)到步驟(5); (3)求解表達(dá)式3; (4)轉(zhuǎn)回到步驟(2); (5)循環(huán)結(jié)束,順序向下執(zhí)行?!臼纠?.33】 一個for循環(huán)示例。語句執(zhí)行10次,即程序輸出10行“study”。 for(i=0;i10;i+)/i從1到10進(jìn)行10次循環(huán) coutstudy3語句,如

37、果成立則輸出a3,然后將a加1,再執(zhí)行判斷a3語句,繼續(xù)循環(huán)執(zhí)行。 while(a3) cout3endl; a+; 分析:上面的代碼中首先比較a與3,然后根據(jù)判斷結(jié)果執(zhí)行循環(huán)體。注意while后面括號內(nèi)的表達(dá)式后面不能添加分號。同時使用while循環(huán)時應(yīng)該在循環(huán)體中對while循環(huán)條件進(jìn)行改變,否則程序一直進(jìn)行循環(huán)。3goto語句 goto語句常用的形式是: goto 語句標(biāo)號; 語句標(biāo)號用標(biāo)識符來表示,是由字母、數(shù)字和下劃線組成,但第一個符號必須是字母或下劃線。 goto語句可以和if語句一起構(gòu)成循環(huán)結(jié)構(gòu)。使用goto語句程序可讀性差,流程不清晰,因此程序設(shè)計中應(yīng)盡量避免使用goto語句。

38、【示例2.35】 是一個goto語句示例。首先執(zhí)行print:后面的語句,然后順序執(zhí)行。當(dāng)執(zhí)行到goto print;時則程序會跳轉(zhuǎn)到print:后面的語句再次執(zhí)行。 print: coutstudyendl; goto print 需要注意的是語句標(biāo)號是一個非C+關(guān)鍵字的標(biāo)識符,在語句標(biāo)號后面添加一個分號表示語句標(biāo)號所在位置。 說明:一般情況下不使用goto語句,過多使用goto語句會影響程序可讀性和穩(wěn)定性。4dowhile循環(huán) dowhile循環(huán)常用的形式如下: do 循環(huán)體語句 while(表達(dá)式) 它是這樣執(zhí)行的,首先執(zhí)行一次循環(huán)體,然后判斷表達(dá)式。如果表達(dá)式為真,那么返回重新執(zhí)行循環(huán)

39、體,直到表達(dá)式的值為0。【示例2.36】 是一個dowhile循環(huán)示例。首先執(zhí)行大括號內(nèi)的語句,然后判斷a=3,如果成立,則繼續(xù)執(zhí)行括號內(nèi)語句。依次循環(huán),直到while后面括號內(nèi)的表達(dá)式為假時,不再執(zhí)行。 do coutstudyendl; a+; while(a”配合使用,cin可以連續(xù)輸入多個數(shù)據(jù),但需要注意的是用戶輸入多個數(shù)據(jù)時需要在連續(xù)輸入之間加入空格、回車或Tab鍵。同時C+語言的輸入默認(rèn)使用了系統(tǒng)默認(rèn)格式,但是在程序設(shè)計中可以對輸入輸出進(jìn)行格式控制。例如可以按十六進(jìn)制、八進(jìn)制等進(jìn)行輸入輸出,具體使用如示例2.37所示。2標(biāo)準(zhǔn)輸出 標(biāo)準(zhǔn)輸出是指從內(nèi)存到屏幕的輸出。cout和“”配合使

40、用。同時cout可以輸出多項,即可以連續(xù)使用“”進(jìn)行輸出,輸出按從左向右進(jìn)行輸出。cout中定義控制符endl代表回車換行。下面給出一個輸入輸出的實例。 由于cout和cin定義在頭文件iostream.h中,編寫程序時需要將此頭文件包含在程序中?!臼纠?.37】 連續(xù)輸入3個整數(shù),然后把3個數(shù)據(jù)分別以十進(jìn)制、八進(jìn)制、十六進(jìn)制輸出。具體代碼如下:2.8 編程實例與調(diào)試 前面已經(jīng)介紹了C+語言的基礎(chǔ)知識,下面介紹C+程序設(shè)計中代碼編寫和程序調(diào)試的基本方法。2.8.1 編寫代碼 分析基本問題后,就需要把實際問題抽象成一定的數(shù)學(xué)模型,然后通過軟件設(shè)計工具進(jìn)行描述后,根據(jù)此流程圖編寫程序。 代碼編寫是

41、程序中的基本工作之一,當(dāng)把問題的數(shù)學(xué)模型做好以后,根據(jù)數(shù)學(xué)模型作出程序流程圖,剩下的工作就是由編程實現(xiàn)。因此代碼編寫用數(shù)學(xué)模型去實現(xiàn)。那么代碼編寫要注意哪些問題呢? 首先是注意根據(jù)程序流程圖編寫代碼。程序流程圖是把數(shù)學(xué)模型進(jìn)行轉(zhuǎn)化得到的,是程序設(shè)計中最重要的一部分??梢哉f流程圖是對程序設(shè)計的最強(qiáng)有力的指導(dǎo)。 然后注意代碼編寫的習(xí)慣。無論是注釋的添加,還是空格的使用,都需要注意。養(yǎng)成良好的編寫代碼的習(xí)慣是一個程序員最基本的素質(zhì)。 最后就是注意對代碼的重復(fù)使用。程序設(shè)計中代碼的重復(fù)利用是十分重要的,C+語言“類”的產(chǎn)生可以說就是為了代碼的重復(fù)利用問題,因此編寫程序時應(yīng)該把一些常用的代碼段保留,做成自己的庫文件。 在Visual C+中編寫代碼首先應(yīng)該注意代碼的格式。同時應(yīng)該了解一些常用的技巧

溫馨提示

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

評論

0/150

提交評論