C程序設(shè)計(jì)實(shí)踐教程(上)262_第1頁
C程序設(shè)計(jì)實(shí)踐教程(上)262_第2頁
C程序設(shè)計(jì)實(shí)踐教程(上)262_第3頁
C程序設(shè)計(jì)實(shí)踐教程(上)262_第4頁
C程序設(shè)計(jì)實(shí)踐教程(上)262_第5頁
已閱讀5頁,還剩257頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C++程序設(shè)計(jì)實(shí)踐教程(上)第1章C++語言概述

1.1C++語言的開展1.2C++的特點(diǎn)1.3簡(jiǎn)單的C++程序1.4C++程序的開發(fā)步驟和上機(jī)調(diào)試流程1.5VC++6.0調(diào)試C++程序的操作過程作業(yè):1~4,6,81.1C++語言的開展隨著計(jì)算機(jī)科學(xué)技術(shù)的迅速開展,程序設(shè)計(jì)技術(shù)和程序設(shè)計(jì)語言也得到不斷開展,經(jīng)歷了面向機(jī)器的程序設(shè)計(jì)、面向過程的程序設(shè)計(jì)和面向?qū)ο蟮某绦蛟O(shè)計(jì)幾個(gè)階段。面向?qū)ο蟪绦蛟O(shè)計(jì)是軟件開發(fā)領(lǐng)域的主流技術(shù),而C++又是主流的面向?qū)ο蟪绦蛟O(shè)計(jì)語言。C++語言是在C語言的根底上開展起來的。C語言:1972年,由貝爾實(shí)驗(yàn)室的DennisRitchie和BrianKernighan在B語言的根底上設(shè)計(jì)的結(jié)構(gòu)化程序設(shè)計(jì)語言,用于編寫UNIX操作系統(tǒng)。隨著UNIX的成功和流行,C語言應(yīng)用領(lǐng)域從系統(tǒng)軟件延伸到應(yīng)用軟件。C語言的主要特點(diǎn)語言結(jié)構(gòu)化,簡(jiǎn)潔,規(guī)模小,數(shù)據(jù)類型豐富,使用靈活方便。非常適用于設(shè)計(jì)和編寫大型系統(tǒng)軟件、大型應(yīng)用軟件,又適用于編寫小程序。兼有高級(jí)語言和匯編語言的特點(diǎn)。程序表述靈活方便,結(jié)構(gòu)性好,目標(biāo)程序質(zhì)量高,程序執(zhí)行效率高。程序的可移植性好。源于①已將與硬件有關(guān)的語言成分盡可能剝離,由庫函數(shù)實(shí)現(xiàn);②有豐富的預(yù)編譯命令支持;③標(biāo)準(zhǔn)化程度高,有ANSI/ISO國(guó)際標(biāo)準(zhǔn)。語言接口開放,為創(chuàng)立和使用庫函數(shù)翻開了方便之門,這是C語言廣泛應(yīng)用的重要根底。其實(shí),庫函數(shù)就是出色的代碼重用機(jī)制之一。C語言的主要缺乏隨著C語言的廣泛應(yīng)用,它的一些缺乏受到人們的關(guān)注,如對(duì)數(shù)據(jù)類型檢查較弱,沒有對(duì)面向?qū)ο蠹夹g(shù)的支持,隨著軟件工程規(guī)模的擴(kuò)大,難以適應(yīng)開發(fā)特大型的程序等。C++語言的產(chǎn)生與開展1980年貝爾實(shí)驗(yàn)室的BjarneStroustrup博士及其同事對(duì)C語言進(jìn)行了改進(jìn)和擴(kuò)充,并把Simula67中類的概念引入到C中,1983年正式命名為C++(CPlusPlus),其含義是C語言的擴(kuò)充。后來又把運(yùn)算符重載、引用、虛函數(shù)、模板、異常、命名空間等引入C++,使C++日趨完善。目前,C++已成為面向過程和面向?qū)ο蟮闹髁鞯耐ㄓ贸绦蛟O(shè)計(jì)語言。C++編譯系統(tǒng)C++語言受到軟件廠商的極大支持,紛紛推出他們的商業(yè)化C++編譯系統(tǒng),從早期的TurboC++、BorlandC++、WatcomC++、QuickC++到目前流行的VisualC++和C++Builder。C++語言也受到開放源代碼組織的積極支持,他們也紛紛推出自己的非商業(yè)化的C++編譯系統(tǒng),如GNUC++、DEVC++等。C++語言的標(biāo)準(zhǔn)化C++語言的標(biāo)準(zhǔn)化工作始于1989年,于1994年制定了ANSIC++標(biāo)準(zhǔn)草案,并經(jīng)過不斷修改完善,于1998年11月被國(guó)際標(biāo)準(zhǔn)化組織(ISO)批準(zhǔn)為國(guó)際標(biāo)準(zhǔn)。1.2C++的特點(diǎn)

全面兼容C語言,全面支持面向過程的結(jié)構(gòu)化程序設(shè)計(jì)。大多數(shù)的C程序代碼略作修改或不作修改就可在C++編譯系統(tǒng)下編譯通過。這樣,既保護(hù)了用C語言開發(fā)的豐富軟件資源,也保護(hù)了豐富的C語言軟件開發(fā)人力資源。全面支持面向?qū)ο蟪绦蛟O(shè)計(jì)。以對(duì)象為根本模塊,使程序模塊的劃分更合理,模塊的獨(dú)立性更強(qiáng),程序的可讀性、可理解性、可重用性、可擴(kuò)充性、可測(cè)試性和可維護(hù)性等更好,程序結(jié)構(gòu)更加合理。全面支持面向過程和面向?qū)ο蟮幕旌暇幊?,充分發(fā)揮兩類編程技術(shù)的優(yōu)勢(shì)。1.3簡(jiǎn)單的C++程序

C++集成開發(fā)環(huán)境(IDE):集多種編程工具于一體,如源程序的編輯、編譯、鏈接、運(yùn)行、調(diào)試等,使用非常方便。C++的編程環(huán)境支持C和C++程序的編譯和調(diào)試。通常約定,當(dāng)源程序文件的擴(kuò)展名為".c"時(shí),那么為C程序;而當(dāng)文件的擴(kuò)展名為".cpp"時(shí),那么為C++程序。本書約定:①主要介紹標(biāo)準(zhǔn)C++語言及其程序設(shè)計(jì)。②書中所有程序都在VisualC++6.0中調(diào)試運(yùn)行。③書中所有例題的源程序文件擴(kuò)展名均為".cpp"。例1.1面向過程程序設(shè)計(jì)。輸入圓的半徑,計(jì)算并輸出該圓的面積。

/******************************源程序名:ex1_1.cpp功能:計(jì)算并輸出該圓的面積計(jì)算方法:圓的面積=π×r×r輸入數(shù)據(jù):圓的半徑輸出數(shù)據(jù):圓的面積程序設(shè)計(jì):劉維富*******************************/注釋的作用:提高程序的可讀性。注釋的處理:編譯器對(duì)它不做處理,不生成目標(biāo)代碼。注釋的種類:①用“/*〞和“*/〞把注解括起來,可出現(xiàn)在程序的任何位置,可做多行注釋、單行注釋和嵌入注釋,常用于多行注釋。②用“//〞表示從此開始到本行結(jié)束為注釋,常用于單行注釋。多行注釋:對(duì)程序做詳細(xì)說明#include<iostream.h>voidmain(void/*無參*/)//C++程序執(zhí)行的唯一入口嵌入注釋、單行注釋表示函數(shù)無返回值表示函數(shù)無參數(shù)①C++程序由一個(gè)或多個(gè)函數(shù)組成,有且僅有一個(gè)main函數(shù),其余為庫函數(shù)和自定義函數(shù);②main函數(shù)是C++程序執(zhí)行入口,其位置不限,但為了便于閱讀,通常位于程序的開始或尾部。由于C++語言沒有專門的輸入/輸出(簡(jiǎn)稱I/O)語句,此處借用了頭文件iostream.h中預(yù)定義的標(biāo)準(zhǔn)輸入對(duì)象cin(默認(rèn)為鍵盤)和標(biāo)準(zhǔn)輸出對(duì)象cout(默認(rèn)為顯示器)實(shí)現(xiàn)數(shù)據(jù)I/O,因此需要包含頭文件iostream.h。{floatr;//定義浮點(diǎn)型變量r,存放圓的半徑

cout<<"輸入圓的半徑:";

cin>>r;//從鍵盤上輸入圓的半徑送給變量rcout<<"半徑為"<<r<<"的圓的面積="<<3.14159f*r*r<<'\n';//輸出運(yùn)算結(jié)果}顯示提示信息:①方便用戶輸入數(shù)據(jù)②方便用戶閱讀輸出結(jié)果函數(shù)體以“{”開始,以“}”結(jié)束。函數(shù)體內(nèi)可由零個(gè)或若干語句組成,每一語句均以“;”結(jié)束。程序運(yùn)行結(jié)果為:輸入圓的半徑:1.5半徑為1.5的圓的面積=7.06858cout后面的“<<〞稱為“插入運(yùn)算符〞,用于將其后的數(shù)據(jù)插入到cout對(duì)象的輸出行列中,送到顯示器(默認(rèn))。插入運(yùn)算符后接的數(shù)據(jù)可以是字符(如‘\n’)、字符串(如“輸入圓的半徑:〞)和數(shù)值。其中,‘\n’代表換行,表示此后顯示的內(nèi)容從下一行第1列開始,類似的,endl也代表換行。cin后面的“>>〞稱為提取運(yùn)算符,用于從cin對(duì)象(默認(rèn)為鍵盤)的輸入行中提取一個(gè)指定類型的數(shù)據(jù)送入其后的變量,提取數(shù)據(jù)的類型由其后的變量類型確定,如變量r為浮點(diǎn)數(shù)類型,那么提取一個(gè)浮點(diǎn)數(shù)送入變量r。3.14159f是單精度浮點(diǎn)常量。C++嚴(yán)格區(qū)分大小寫字母,如main與Main是不同的。C++程序書寫自由,一個(gè)語句可寫假設(shè)干行,一行可寫假設(shè)干語句。但要便于程序的自我閱讀和與他人交流。模塊化程序設(shè)計(jì)的主要思路把一個(gè)復(fù)雜問題按功能分解成較為簡(jiǎn)單的假設(shè)干個(gè)子問題,每個(gè)子問題通過定義一個(gè)函數(shù)來解決,如果子問題還不夠簡(jiǎn)單,再繼續(xù)按功能分解下去,直到所有子問題都能解決為止。這樣解決一個(gè)復(fù)雜問題的函數(shù)就可以通過調(diào)用一系列解決子問題的函數(shù)來實(shí)現(xiàn)。這就是所謂的“自頂向下,逐步求精〞的程序設(shè)計(jì)方法。例1.2面向過程的模塊化程序設(shè)計(jì)。輸入圓的半徑,計(jì)算并輸出該圓的面積。

#include<iostream.h>

floatarea(floatr)//定義求半徑為r的圓的面積的函數(shù)area{return3.14159f*r*r;}

voidmain(void){floatr;

cout<<"輸入圓的半徑:";

cin>>r;cout<<"半徑為"<<r<<"的圓的面積="<<area(r)<<'\n';}

例1.2程序說明程序包括兩個(gè)函數(shù):main和area。程序的第3~4行是area函數(shù)的定義,它的作用是計(jì)算半徑為r的圓的面積。return語句將所算的圓的面積值返回給調(diào)用它的函數(shù)。返回值是通過函數(shù)名area帶回到調(diào)用處的,如程序的第11行的“area(r)〞所示。main函數(shù)將要解決的問題分解成三個(gè)簡(jiǎn)單問題,即輸入圓的半徑、計(jì)算圓的面積和輸出圓的面積,然后分別通過使用標(biāo)準(zhǔn)輸入cin實(shí)現(xiàn)數(shù)據(jù)輸入,通過使用標(biāo)準(zhǔn)輸出cout實(shí)現(xiàn)數(shù)據(jù)輸出,通過調(diào)用自定義函數(shù)area實(shí)現(xiàn)圓的面積計(jì)算,最終解決整個(gè)問題。有關(guān)函數(shù)的具體內(nèi)容,讀者可以參見第6章。面向?qū)ο蟪绦蛟O(shè)計(jì)的主要思路對(duì)象是現(xiàn)實(shí)世界中客觀存在的事物,復(fù)雜的對(duì)象可以由簡(jiǎn)單對(duì)象組成,如火車站對(duì)象由售票處、行李房、信號(hào)燈、站臺(tái)等對(duì)象組成。面向?qū)ο蟪绦蛟O(shè)計(jì)的主要思路是,把一個(gè)復(fù)雜問題看成一個(gè)復(fù)雜對(duì)象,將一個(gè)復(fù)雜對(duì)象按對(duì)象分解成假設(shè)干個(gè)簡(jiǎn)單對(duì)象,每個(gè)簡(jiǎn)單對(duì)象通過定義一個(gè)類來解決,如果簡(jiǎn)單對(duì)象還不夠簡(jiǎn)單,再繼續(xù)分解下去,直到所有簡(jiǎn)單對(duì)象都能解決為止。這樣解決一個(gè)復(fù)雜問題的對(duì)象就可以通過使用一系列解決簡(jiǎn)單對(duì)象的類來實(shí)現(xiàn)。這也是“自頂向下,逐步求精〞的程序設(shè)計(jì)方法,只不過模塊的根本單位是對(duì)象而已。通過定義一個(gè)類來解決一個(gè)對(duì)象時(shí),需要定義該對(duì)象的數(shù)據(jù)屬性和函數(shù)屬性,其中數(shù)據(jù)屬性反映對(duì)象的狀態(tài),函數(shù)屬性反映對(duì)象的行為。數(shù)據(jù)屬性通常不直接對(duì)外,以最大限度地保證對(duì)象行為的正常,這對(duì)于一個(gè)由許多對(duì)象組成的大型復(fù)雜系統(tǒng)來說是至關(guān)重要的。函數(shù)屬性是對(duì)象為外界提供效勞的窗口,它是按功能分解的函數(shù),通常包括建立和初始化對(duì)象的構(gòu)造函數(shù)、清理和撤消對(duì)象的析構(gòu)函數(shù)、設(shè)置和獲取數(shù)據(jù)屬性的成員函數(shù)、以及解決實(shí)際問題的成員函數(shù)。例1.3面向?qū)ο蟪绦蛟O(shè)計(jì)。輸入圓的半徑,計(jì)算并輸出該圓的面積。

#include<iostream.h>

classCircle{//定義一個(gè)類,計(jì)算圓的面積private:floatr;//定義成員數(shù)據(jù)變量,存放圓的半徑public:Circle(floata)//定義構(gòu)造函數(shù),創(chuàng)立和初始化對(duì)象{r=a;}~Circle()//定義析構(gòu)函數(shù),清理和撤消對(duì)象{}voidSetRadius(floata)//定義成員函數(shù),設(shè)置圓的半徑{r=a;}floatGetRadius()//定義成員函數(shù),獲取圓的半徑{returnr;}floatArea()//定義成員函數(shù),計(jì)算圓的面積{return3.14159f*r*r;}};

voidmain(void){floatr;//定義浮點(diǎn)型變量r,用于存放圓的半徑

cout<<"輸入圓的半徑:";

cin>>r;Circlec(r);//定義Circle類的對(duì)象ccout<<"半徑為"<<c.GetRadius()<<"的圓的面積="<<c.Area()<<'\n';}

例1.3程序說明主函數(shù)main將要解決的問題分解成三個(gè)簡(jiǎn)單對(duì)象,即輸入對(duì)象cin輸入圓的半徑,自定義對(duì)象c計(jì)算圓的面積,輸出對(duì)象cout輸出圓的面積,最終解決整個(gè)問題。定義一個(gè)類Circle,計(jì)算圓的面積。包括一個(gè)成員數(shù)據(jù)變量和五個(gè)成員函數(shù)。為了最大限度保證成員數(shù)據(jù)r的平安性和正確性,首先將數(shù)據(jù)成員的對(duì)外訪問權(quán)限設(shè)定為私有的,即不允許外界直接訪問,如程序第4行的“private:〞所示;其次,設(shè)立了成員函數(shù)SetRadius和GetRadius為外界間接訪問圓的半徑r提供效勞。而對(duì)于為外界提供特定效勞的成員函數(shù)來說,其對(duì)外訪問權(quán)限設(shè)定為公有的,如程序第6行的“public:〞所示。類是數(shù)據(jù)類型,與前面看到的float類似,但float是C++語言預(yù)定義的,用戶可直接使用,而對(duì)于用戶自定義的數(shù)據(jù)類型來說,必須先定義后使用。例如,程序的第3~17行定義了Circle類,程序的第23行定義了一個(gè)Circle類的對(duì)象c。用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法設(shè)計(jì)程序時(shí),對(duì)于類的定義既要考慮到成員數(shù)據(jù)的平安性,又要考慮其通用性(即能解決一類問題),還要考慮未來的代碼可重用性,因此,類的功能通常是自我完善的,即自治的,盡管類的定義看起來有些"臃腫"。有關(guān)類和對(duì)象的詳細(xì)介紹,讀者可以參見第11章。C++程序設(shè)計(jì)小結(jié)C++語言支持多種程序設(shè)計(jì)方法。C++語言自如應(yīng)對(duì)不同規(guī)模的實(shí)際問題。

1.4C++程序的開發(fā)步驟和上機(jī)調(diào)試流程

C++是編譯型語言,設(shè)計(jì)好一個(gè)C++源程序后,需要經(jīng)過編譯,再鏈接生成可執(zhí)行的程序文件,然后執(zhí)行。一個(gè)C++程序的具體開發(fā)步驟為:⑴分析問題,產(chǎn)生解題步驟,即解題算法。⑵根據(jù)解題算法編寫C++源程序。⑶利用編輯器編輯源程序并保存。所存文件的擴(kuò)展名為".cpp"。⑷編譯源程序,并產(chǎn)生目標(biāo)程序。在MSWindows操作系統(tǒng)中,目標(biāo)程序文件的擴(kuò)展名為".obj"。⑸連接。將一個(gè)或多個(gè)目標(biāo)程序與本程序所引用的庫函數(shù)進(jìn)行鏈接后,產(chǎn)生一個(gè)可執(zhí)行文件。在MSWindows操作系統(tǒng)中,可執(zhí)行文件的擴(kuò)展名為".exe"。⑹調(diào)試程序。運(yùn)行可執(zhí)行文件,分析運(yùn)行結(jié)果。假設(shè)結(jié)果不正確,那么要修改源程序,并重復(fù)以上過程,直到得到正確的結(jié)果為止。⑺優(yōu)化。進(jìn)一步提高程序的運(yùn)行效率,主要通過改進(jìn)所用算法,縮短程序運(yùn)行時(shí)間;通過合理分配使用內(nèi)存,減少所用存儲(chǔ)空間。其中,第⑴、⑵兩步在上機(jī)前完成;第⑶~⑹步在上機(jī)時(shí)完成,如圖1.1所示;第⑺步在上機(jī)后思考。第⑴~⑹步是對(duì)所有學(xué)習(xí)編程者的根本要求,第⑺步適用于有興趣、學(xué)有余力且有志成為編程高手者。圖1-1C++程序上機(jī)調(diào)試流程1.5VC++6.0調(diào)試C++程序的操作過程

VisualC++6.0(以下簡(jiǎn)稱VC++)為用戶開發(fā)C和C++程序提供了一個(gè)功能齊全的集成開發(fā)環(huán)境,能完成源程序的錄入、編輯、修改和保存,源程序的編譯和鏈接,程序運(yùn)行期間的調(diào)試與跟蹤,工程對(duì)源程序的自動(dòng)管理,為程序的開發(fā)提供工具,聯(lián)機(jī)幫助等。在Windows操作系統(tǒng)下啟動(dòng)VC++,那么產(chǎn)生如圖1-2所示的組合窗口。書中以例1.1為例說明使用VC++集成開發(fā)環(huán)境調(diào)試一個(gè)C++程序的操作過程。請(qǐng)讀者上機(jī)練習(xí)。圖1-2VC++6.0IDE調(diào)試C++程序第2章算法簡(jiǎn)介2.1算法的概念2.2算法舉例2.3算法的特性2.4算法的表達(dá)2.5三種根本算法結(jié)構(gòu)作業(yè):1,2,3⑵、⑸、⑹、⑻程序=數(shù)據(jù)結(jié)構(gòu)+算法一個(gè)程序包括兩方面內(nèi)容:⑴數(shù)據(jù)描述:指定程序中數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)。⑵操作描述:數(shù)據(jù)的操作方法和步驟,即算法。操作的目的是用算法對(duì)數(shù)據(jù)進(jìn)行加工處理,以得到正確的結(jié)果,因此,在編程解決實(shí)際問題時(shí),必須認(rèn)真設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)和算法。著名計(jì)算機(jī)科學(xué)家NikiklausWirth曾提出:程序=數(shù)據(jù)結(jié)構(gòu)+算法數(shù)據(jù)是程序的核心,算法是程序的靈魂。2.1算法的概念

算法是解決某個(gè)問題或處理某件事的方法和步驟。例如人們計(jì)時(shí)的方法就五花八門。對(duì)于同一問題的求解,往往有多種不同的算法。本書僅限于討論用計(jì)算機(jī)解決問題的根本算法。按所處理的數(shù)據(jù)類型來分,計(jì)算機(jī)算法分為兩類:數(shù)值算法:如求超越方程的根、定積分、解微分方程等;非數(shù)值算法:如排序、查找等。算法評(píng)價(jià):正確性、運(yùn)行效率及占用資源等。2.2算法舉例

例2.1求兩個(gè)自然數(shù)的最大公約數(shù)的算法。s1.輸入兩個(gè)自然數(shù)M、N;s2.求M除以N的余數(shù)→R;s3.使M←N,即用N代換M;s4.使N←R,即用R代換N;s5.假設(shè)R≠0,那么重復(fù)執(zhí)行s2、s3、s4,否那么轉(zhuǎn)s6;s6.輸出M,M即為M和N的最大公約數(shù)。例2.2在N個(gè)字符串中,查找有無指定的字符串。s1.輸入字符串的個(gè)數(shù)N和要查找的字符串S;s2.使I←1,I用于計(jì)數(shù);s3.從字符串集合中讀取一個(gè)字符串x;s4.假設(shè)x=S,輸出“找到S〞,算法結(jié)束,否那么轉(zhuǎn)s5;s5.使I←I+1,計(jì)數(shù)器計(jì)數(shù);s6.假設(shè)I≤N,那么重復(fù)執(zhí)行s3、s4、s5,否那么轉(zhuǎn)s7;s7.輸出“找不到S〞,算法結(jié)束。2.3算法的特性確定性:指算法的每個(gè)步驟都應(yīng)確切無誤,無歧義。可行性:指算法的每個(gè)步驟都是計(jì)算機(jī)可實(shí)現(xiàn)、能有效執(zhí)行并可得到確定的結(jié)果。有窮性:一個(gè)算法包含的步驟應(yīng)是有限的,并在一個(gè)合理的時(shí)間限度內(nèi)執(zhí)行完畢。輸入性:執(zhí)行算法時(shí),計(jì)算機(jī)可從外部取得數(shù)據(jù)。一個(gè)算法可有多個(gè)輸入,但也可沒有輸入,因計(jì)算機(jī)可自動(dòng)產(chǎn)生一些必須的數(shù)據(jù)。輸出性:一個(gè)算法應(yīng)有1個(gè)或多個(gè)輸出。計(jì)算機(jī)是人們“解題〞的工具,算法應(yīng)能輸出計(jì)算結(jié)果,否那么該算法將毫無意義。2.4算法的表達(dá)算法表示方式主要有:自然語言(如例2.1和例2.2所示)某種代碼符號(hào)來描述(如偽代碼)特定的圖形來描述(流程圖和N-S圖)編程語言(如匯編語言、高級(jí)語言)圖形描述方法形象直觀,易于理解,應(yīng)用廣泛。較常用的描述算法的圖形是流程框圖,簡(jiǎn)稱流程圖。流程圖流程圖使用的圖形符號(hào)如圖2-1所示,是ANSI標(biāo)準(zhǔn),為各國(guó)程序員普遍采用。菱形框用于條件判斷,假設(shè)條件成立那么轉(zhuǎn)向一個(gè)出口,否那么轉(zhuǎn)向另一個(gè)出口。連接框用于將畫在不同地方的流程線連接起來,防止流程線的交叉或過長(zhǎng)。注釋框不是流程圖的必要局部,不反映流程和操作,僅對(duì)流程圖中某些框的操作做補(bǔ)充說明。流程圖舉例2.5三種根本算法結(jié)構(gòu)順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)三種根本結(jié)構(gòu)的特點(diǎn)單入口和單出口結(jié)構(gòu)中的每個(gè)局部都有可能被執(zhí)行結(jié)構(gòu)內(nèi)不應(yīng)出現(xiàn)永不終止的循環(huán)結(jié)構(gòu)化程序設(shè)計(jì)理論根底:解決任何問題的算法都可表示為順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的組合。結(jié)構(gòu)化程序設(shè)計(jì):用三種根本算法結(jié)構(gòu)設(shè)計(jì)程序。結(jié)構(gòu)化程序設(shè)計(jì)的優(yōu)點(diǎn):結(jié)構(gòu)清晰,易于理解,易于驗(yàn)證其正確性,也易于查錯(cuò)和排錯(cuò)。第3章數(shù)據(jù)類型和表達(dá)式

3.1C++的字符集、關(guān)鍵字和標(biāo)識(shí)符3.2C++的根本數(shù)據(jù)類型3.3運(yùn)算符與表達(dá)式3.4常用庫函數(shù)作業(yè):1~6,7,9,12,133.1C++的字符集、關(guān)鍵字和標(biāo)識(shí)符

C++語言的字符集編寫C++程序必須使用C++語言字符集中的字符:⑴大寫、小寫英文字母各26個(gè);⑵阿拉伯?dāng)?shù)字10個(gè);⑶運(yùn)算符、標(biāo)點(diǎn)符號(hào)及其他字符30個(gè):+-*/%=!&|~^<>;:?,.‘“\()[]{}#_空格例外:①源程序注釋中可以包含字符集以外的字符。②字符串作為數(shù)據(jù)也可以包含字符集以外的字符。

標(biāo)識(shí)符標(biāo)識(shí)符的用途:程序中的變量名、函數(shù)名、數(shù)組名、類型名、命名空間名等的命名。標(biāo)識(shí)符的構(gòu)成:由大小寫字母、數(shù)字和下劃線組成,且首字符必須是字母或下劃線,不能與關(guān)鍵字同名。說明:⑴標(biāo)識(shí)符中不能含有空格、標(biāo)點(diǎn)符號(hào)和其他字符。⑵標(biāo)識(shí)符區(qū)分大小寫。例如,d和D是不同的標(biāo)識(shí)符。⑶標(biāo)識(shí)符的有效長(zhǎng)度取決于具體的C++編譯系統(tǒng)。⑷標(biāo)識(shí)符應(yīng)表達(dá)“見名知義〞原那么,注重可讀性。關(guān)鍵字關(guān)鍵字又稱保存字,是編程語言預(yù)定義的具有專門用途的標(biāo)識(shí)符,不允許用作用戶的標(biāo)識(shí)符。C++語言有48個(gè)標(biāo)準(zhǔn)關(guān)鍵字。注意:有的C++編譯系統(tǒng)支持的關(guān)鍵字不止這些。如VC++還有_int8、_int16、_int32、_int64、_inline等關(guān)鍵字。3.2C++的根本數(shù)據(jù)類型程序處理的對(duì)象是數(shù)據(jù),數(shù)據(jù)分為常量和變量。每個(gè)常量或變量都有數(shù)據(jù)類型。C++的數(shù)據(jù)類型分為兩大類:根本數(shù)據(jù)類型和非根本數(shù)據(jù)類型。根本數(shù)據(jù)類型是指C++內(nèi)部預(yù)先定義的類型,包括整型、字符型、實(shí)型、邏輯型和空類型;非根本數(shù)據(jù)類型是用戶定義的類型,包括數(shù)組、指針、結(jié)構(gòu)、聯(lián)合、枚舉和類。根本數(shù)據(jù)類型數(shù)據(jù)類型用于描述程序中的數(shù)據(jù)。學(xué)習(xí)數(shù)據(jù)類型,要掌握每種類型占用的內(nèi)存字節(jié)數(shù)、取值范圍及所支持的操作。例如,根本數(shù)據(jù)類型int,用于描述整數(shù),占用4字節(jié)內(nèi)存(在VC++中),取值范圍是-2147483648~2147483647,支持的操作包括加、減、乘、除等運(yùn)算。根本數(shù)據(jù)類型見表3-1所示。字符類型字符類型用關(guān)鍵詞char表示,用于描述單個(gè)字符數(shù)據(jù)。字符采用ASCII編碼(見附錄)來表示,在存儲(chǔ)時(shí)占用一個(gè)字節(jié)。由于ASCII編碼是正整數(shù)值且只使用了一個(gè)字節(jié)的低7位二進(jìn)制位,最高位為0,為了便于字符數(shù)據(jù)的處理,同時(shí)也為了一字節(jié)整型數(shù)據(jù)的表達(dá)和處理,C++允許把char型數(shù)據(jù)當(dāng)作整型數(shù)據(jù),因此,C++允許用signed和unsigned修飾char,即可以有signedchar和unsignedchar類型。

整數(shù)類型整數(shù)類型(整型)用于描述整數(shù)。基于合理占用內(nèi)存和提高數(shù)據(jù)處理速度的考慮,將整型分為:⑴一字節(jié)整型:char,signedchar,unsignedchar。⑵雙字節(jié)整型:shortint,short,signedshort,signedshortint,unsignedshort,unsignedshortint。⑶四字節(jié)整型:int,signedint,unsignedint,unsigned,longint,long,signedlong,signedlongint,unsignedlong,unsignedlongint。整數(shù)類型假設(shè)表達(dá)的整數(shù)超出四字節(jié)整型的表示范圍,那么:⑴可用有些C++編譯系統(tǒng)提供了八字節(jié)整型,如VC++的_int64整型。⑵如果所表達(dá)的整數(shù)對(duì)精度要求不高,那么可選用float或double型替代。⑶如果所表達(dá)的整數(shù)對(duì)精度要求特別高,那么只好自編多字節(jié)整型數(shù)運(yùn)算的程序。整數(shù)類型無符號(hào)整型數(shù)據(jù)在計(jì)算機(jī)內(nèi)部用原碼表示,即它的二進(jìn)制數(shù)表示。帶符號(hào)整型數(shù)據(jù)在計(jì)算機(jī)內(nèi)部用補(bǔ)碼表示。正數(shù)的補(bǔ)碼形式就是它的原碼;負(fù)數(shù)的補(bǔ)碼形式由其相應(yīng)的正數(shù)的原碼的各位逐位求反后在最低位加1而得到。實(shí)數(shù)類型實(shí)數(shù)類型(實(shí)型)又稱浮點(diǎn)型,用于描述實(shí)數(shù)?;诤侠碚加脙?nèi)存和提高數(shù)據(jù)處理速度的考慮,將實(shí)型分為單精度型(用float表示)和雙精度型(用double表示)。對(duì)于double型,還可用long修飾,使其成為longdouble型,以表示精度更高的實(shí)型數(shù)。在計(jì)算機(jī)內(nèi)部,實(shí)型數(shù)據(jù)用浮點(diǎn)形式(科學(xué)記數(shù)法〕表示,即把數(shù)據(jù)表示成m×2e,其中m稱為尾數(shù),e稱為階碼。實(shí)型數(shù)據(jù)在計(jì)算機(jī)中存儲(chǔ)的是尾數(shù)和階碼兩局部。由于實(shí)型數(shù)據(jù)是不連續(xù)的,因此,無法精確表示每個(gè)實(shí)數(shù),只能用實(shí)型數(shù)據(jù)近似表達(dá)實(shí)數(shù)。空值空值型:用void表示。void類型用于:⑴描述函數(shù)沒有返回值〔參見第6章〕⑵函數(shù)沒有參數(shù)〔參見第6章〕⑶無類型指針〔參見10.8.3節(jié)〕常量常量:程序執(zhí)行過程中,其值不能被改變的量。常量分為:字面常量和標(biāo)識(shí)符常量。字面常量:在程序中不要任何說明就可直接使用的常量。如,12,34.5。字面常量分為:整型常量、實(shí)型常量、字符型常量和字符串常量。標(biāo)識(shí)符常量:經(jīng)說明或定義后才能使用的常量。整型常量整型常量可用十進(jìn)制、八進(jìn)制、十六進(jìn)制來表示。①十進(jìn)制整數(shù):由0~9數(shù)字組成,除表示正負(fù)數(shù)的字符外,第一個(gè)數(shù)字不能是0(整數(shù)0除外)。例如:+12,-25,0,1289“+〞號(hào)可以省略。②八進(jìn)制整數(shù):由數(shù)字0~7數(shù)字組成,且以0開頭。例如:012。③十六進(jìn)制整數(shù):以0X(x)開頭,由數(shù)字0~9和字母a(A)~f(F)組成。例如:0x1abCD,0X02a5,0xABCFD213整型常量整型常量可用后綴來修飾:①以L或l后綴修飾的整數(shù)為長(zhǎng)整數(shù)。例如:2L,023l,0X25678983L②以U或u后綴修飾的整數(shù)為無符號(hào)整數(shù)。例如:6U,045U,0XF91789U③后綴U(u)和L(l)可以組合使用,表示無符號(hào)長(zhǎng)整型數(shù)。例如:0XFFFFFF96LU,120000UL假設(shè)整型常量未明確指定為長(zhǎng)整型或無符號(hào)整型,那么其類型由編譯系統(tǒng)在編譯時(shí)依據(jù)它的取值自動(dòng)指定。實(shí)型常量實(shí)型常量(或稱浮點(diǎn)常量),有兩種形式:①十進(jìn)制數(shù)形式:由數(shù)字0~9和小數(shù)點(diǎn)組成。如:0.1234,253.6,0.0,.205,-78.②指數(shù)形式(科學(xué)表示法):以10的指數(shù)形式表示。如:12.3E12,0.2333e-12第一個(gè)數(shù)為12.3×1012,第二個(gè)數(shù)為0.2333×10-12。注意,在E或e的前面必須有數(shù)字,且在E或e之后的指數(shù)局部必須是整數(shù)。例如:e10,E5,.e5,都是不合法的實(shí)數(shù)。實(shí)型常量浮點(diǎn)常量可用后綴來修飾:①帶后綴f或F的浮點(diǎn)常量是單精度浮點(diǎn)數(shù)(float型)②帶后綴d、D或無后綴的浮點(diǎn)常量是雙精度浮點(diǎn)數(shù)(double型)③帶后綴l、L結(jié)尾的浮點(diǎn)常量是長(zhǎng)雙精度浮點(diǎn)數(shù)(longdouble型)。帶后綴浮點(diǎn)常量舉例:0.12f,12.3E12f,0.12D,0.12,12.3E12,3.5L,12.3E12L前兩個(gè)為單精度浮點(diǎn)數(shù),第三~第五個(gè)為雙精度浮點(diǎn)數(shù),最后兩個(gè)是長(zhǎng)雙精度浮點(diǎn)數(shù)。字符型常量字符型常量:用單引號(hào)括起來的單個(gè)字符。字符型常量在計(jì)算機(jī)內(nèi)是采用該字符的ASCII編碼值來表示的,其數(shù)據(jù)類型為char型。合法的字符型常量舉例:

'a','A',

'@','1','','&'不合法的字符型常量舉例:

'''

,'\'原因是單引號(hào)已用作字符常量的定界符,反斜杠字符是轉(zhuǎn)義序列的開始標(biāo)志。字符型常量對(duì)于無法直接用單引號(hào)括起來表示的字符常量(主要是控制符),可用“轉(zhuǎn)義序列〞表示。轉(zhuǎn)義序列:以轉(zhuǎn)義符“\〞開始,后跟一個(gè)字符或一個(gè)整型常量來表示一個(gè)字符。假設(shè)轉(zhuǎn)義符后跟一個(gè)整型常量,那么必須是一個(gè)八進(jìn)制或十六進(jìn)制數(shù),其取值范圍為0~255。八進(jìn)制數(shù)可以以0開頭,也可以不以0開頭;十六進(jìn)制數(shù)必須以X或x開頭。例如:'\032''\x99''\24''\x56''\0'轉(zhuǎn)義序列可表示任一字符常量,但不便于閱讀和理解。對(duì)于無法直接表示但又常用的字符常量,在C++中預(yù)定義了其轉(zhuǎn)義字符,如表3.2所示。字符串常量字符串常量:用雙引號(hào)括起來的假設(shè)干個(gè)字符。其中的字符的表示方法與字符型常量相同。在存儲(chǔ)時(shí),每個(gè)字符串常量的尾部都自動(dòng)添加一個(gè)'\0',以表示字符串結(jié)束。'\0'稱為字符串的結(jié)束符。字符串常量舉例:"\"astutent\""含轉(zhuǎn)義字符,占12字節(jié)"a"占2字節(jié)"12"占3字節(jié)""空串,占1字節(jié)"結(jié)果為:"占9字節(jié)(一個(gè)漢字占2字節(jié))字符串常量"a"與'a'的區(qū)別:①類型上:前者是字符串常量,后者是字符型常量。②存儲(chǔ)上:前者占兩個(gè)字節(jié),后者占一個(gè)字節(jié)。即:

"a"其存放值為0x6100,占兩個(gè)字節(jié)

'a'

其存放值為0x61,占一個(gè)字節(jié)標(biāo)識(shí)符常量標(biāo)識(shí)符常量:有名字的常量。標(biāo)識(shí)符常量須先定義后使用。標(biāo)識(shí)符常量定義方法:⑴用常量說明符const。定義格式:

const<類型名><常量名>=<值>;⑵用編譯預(yù)處理命令。定義格式:

#define<常量名><值>標(biāo)識(shí)符常量舉例:

constdoublepi=3.1415926;#definePI3.1415926#defineNTU"NanTongUniversity"標(biāo)識(shí)符常量使用標(biāo)識(shí)符常量?jī)?yōu)點(diǎn):⑴提高程序的可讀性。假設(shè)為標(biāo)識(shí)符常量取一個(gè)有意義的名字,將會(huì)提高它在程序中的可讀性。⑵提高程序?qū)ΤA渴褂玫囊恢滦浴<僭O(shè)一個(gè)程序中多處使用同一個(gè)字面常量,那么可能會(huì)誤寫成不同的值,發(fā)現(xiàn)這類錯(cuò)誤非常費(fèi)時(shí)。例如,使用圓周率π時(shí),可能在一處寫成3.14,而在另一處寫成3.1415,導(dǎo)致運(yùn)算的精度不一致。⑶增強(qiáng)程序的易維護(hù)性。假設(shè)要調(diào)整程序中某個(gè)常量的值,對(duì)于字面常量來說,那么要修改多處,還可能遺漏;對(duì)于標(biāo)識(shí)符常量來說,只需在定義處修改。變量變量:在程序執(zhí)行過程中其值可以被改變的量。變量三要素:變量名變量類型變量的值變量須先定義后使用。取變量的值稱為對(duì)變量的引用。對(duì)變量賦值與引用統(tǒng)稱為對(duì)變量的操作或使用。變量的定義變量定義指明了變量的類型和變量名。變量定義格式:

<類型名><變量名1>[,<變量名2>,…,變量名n>];

類型名是變量的數(shù)據(jù)類型,可以是預(yù)定義數(shù)據(jù)類型,也可以是用戶自定義數(shù)據(jù)類型;變量名1、變量名2,…,變量名n為標(biāo)識(shí)符。舉例1:

intn;該語句定義(或稱聲明)了一個(gè)名字為n的整型變量。當(dāng)程序執(zhí)行到這行代碼時(shí),將為變量n分配4字節(jié)存儲(chǔ)空間。變量的定義舉例2:一行可定義多個(gè)變量,變量間用逗號(hào)分隔。

intyear,month,day;doublex1,x2,x3;longsum,average,total;注意:①變量定義是語句,因此變量定義可出現(xiàn)在程序中語句可出現(xiàn)的任何位置。但從程序可讀性方面考慮,變量定義最好放在可執(zhí)行語句之前。②同一變量只能做一次定義,即不能重復(fù)定義。③變量名應(yīng)盡可能簡(jiǎn)短,并便于觀其名知其意。變量賦初值通常,在首次使用變量時(shí),變量應(yīng)有確定的值。變量的這個(gè)取值稱為變量的初值。變量賦初值的方法:①在定義變量時(shí),直接初始化。例如:intn=3;//n為整型,初值為3floatx=12.5f;//x為單精度實(shí)型,初值為12.5fcharc='U';//c為字符型,初值為字符'U'inta,b,c=18;//可只對(duì)一局部變量賦初值inti(2);//i為整型,初值為2floaty(1.5f);//y為float型,初值為1.5f變量賦初值②在定義變量后,用賦值語句賦初值。例如:floatpi,y;pi=3.14159f;//使變量pi的取值為3.14159fy=2.71828f;//使變量y的取值為2.71828f當(dāng)然,變量的初值不一定是常量,也可以是含有變量的相應(yīng)類型的表達(dá)式。例如:inta=0,b=a+1;③變量定義后,假設(shè)未指定初值,那么其初值取決于所分配的存儲(chǔ)器類型,或用默認(rèn)值0或用隨機(jī)值初始化。有關(guān)內(nèi)容將在第6章討論。3.3運(yùn)算符與表達(dá)式運(yùn)算符(也稱操作符):描述對(duì)數(shù)據(jù)的操作。操作數(shù):運(yùn)算符操作的數(shù)據(jù),可為常量和變量,也可為其他操作符的運(yùn)算結(jié)果。例如,A+B稱A和B為操作數(shù),而把字符“+〞稱為加法運(yùn)算符。運(yùn)算符按功能分:算術(shù)運(yùn)算符、賦值運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符和位運(yùn)算符等。運(yùn)算符按操作數(shù)的個(gè)數(shù)分:一元(目)運(yùn)算符、二元(目)運(yùn)算符和三元(目)運(yùn)算符。運(yùn)算符的優(yōu)先級(jí):運(yùn)算符的運(yùn)算優(yōu)先關(guān)系,其意義和作用與數(shù)學(xué)中的運(yùn)算優(yōu)先級(jí)相同。運(yùn)算符的結(jié)合性假設(shè)運(yùn)算符優(yōu)先級(jí)相同,那么其運(yùn)算順序由運(yùn)算符的結(jié)合性確定。右結(jié)合:一個(gè)運(yùn)算符對(duì)其操作數(shù)按從左到右的順序執(zhí)行所規(guī)定的運(yùn)算。例如:18-36先取18,再取36,然后做減法運(yùn)算。左結(jié)合:一個(gè)運(yùn)算符對(duì)其操作數(shù)按從右到左的順序執(zhí)行所規(guī)定的運(yùn)算。例如:A-=3先取3,再取變量A的值,兩者作減法運(yùn)算后,將結(jié)果賦給變量A。運(yùn)算符的目數(shù)一元(目)運(yùn)算符:一個(gè)運(yùn)算符只能對(duì)一個(gè)操作數(shù)進(jìn)行操作。例如,-5中的負(fù)號(hào)運(yùn)算符。二元(目)運(yùn)算符:一個(gè)運(yùn)算符要求兩個(gè)操作數(shù)。例如,5*10中的運(yùn)算符“*〞三元(目)運(yùn)算符:一個(gè)運(yùn)算符要求三個(gè)操作數(shù)。例如,條件運(yùn)算符“?:〞是唯一的三元運(yùn)算符。同一運(yùn)算符因操作數(shù)的個(gè)數(shù)不同,完成不同運(yùn)算。例如,一元運(yùn)算符“*〞用于取變量,二元運(yùn)算符“*〞用于乘法運(yùn)算等。表達(dá)式表達(dá)式:由運(yùn)算符、園括號(hào)和操作數(shù)構(gòu)成的合法式子,經(jīng)過運(yùn)算應(yīng)有一個(gè)某種類型確實(shí)定的值。操作數(shù)可以是常量、變量或函數(shù)等。使用不同的運(yùn)算符可以構(gòu)成不同類型的表達(dá)式,如算術(shù)表達(dá)式、賦值表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式等。表達(dá)式書寫:操作數(shù)、運(yùn)算符、圓括號(hào)之間可以加空格,也可以不加空格。算術(shù)運(yùn)算符算術(shù)運(yùn)算符:-(負(fù)號(hào))、+(正號(hào))、+(加),-(減),*(乘),/(除),%(取余)。正、負(fù)號(hào)運(yùn)算符的優(yōu)先級(jí)相同,左結(jié)合?!?〞、“/〞、“%〞優(yōu)先級(jí)相同,右結(jié)合。加、減運(yùn)算符的優(yōu)先級(jí)相同,右結(jié)合。優(yōu)先級(jí)順序:正、負(fù)號(hào)高于“*〞、“/〞、“%〞高于加、減可用園括號(hào)改變運(yùn)算符的優(yōu)先順序,先計(jì)算園括號(hào)內(nèi)的值,再計(jì)算園括號(hào)外的值。算術(shù)運(yùn)算符除法運(yùn)算符:假設(shè)兩邊的操作數(shù)均為整數(shù)時(shí),那么做整除運(yùn)算,即只取運(yùn)算結(jié)果的整數(shù)局部。例如:3/4結(jié)果為03.0/4結(jié)果為0.75%(取余):計(jì)算兩個(gè)整型操作數(shù)相除的余數(shù)。所得余數(shù)的符號(hào)與左操作數(shù)相同。例如:10%3結(jié)果為1-10%3結(jié)果為-14%-3結(jié)果為1算術(shù)運(yùn)算的溢出算術(shù)運(yùn)算的溢出:超出對(duì)應(yīng)類型數(shù)據(jù)的表示范圍。⑴除法運(yùn)算:假設(shè)除數(shù)為0或?qū)崝?shù)運(yùn)算的結(jié)果溢出,那么系統(tǒng)認(rèn)為產(chǎn)生了一個(gè)嚴(yán)重錯(cuò)誤,將終止程序的執(zhí)行。⑵整數(shù)的加、減或乘運(yùn)算:假設(shè)結(jié)果產(chǎn)生溢出并不認(rèn)為是一個(gè)錯(cuò)誤,但結(jié)果已不正確。例如:intn=60000;cout<<n*n<<endl;輸出結(jié)果為:-694967296,顯然是錯(cuò)誤的。此類問題可通過改變變量的類型來解決。這種溢出便于設(shè)計(jì)較低級(jí)的程序,如利用整數(shù)運(yùn)算的溢出做進(jìn)位,做大整數(shù)(>232)的加和乘運(yùn)算等。算術(shù)表達(dá)式算術(shù)表達(dá)式:由算術(shù)運(yùn)算符、園括號(hào)和操作數(shù)構(gòu)成的、符合C++語法規(guī)那么的式子。算術(shù)表達(dá)式舉例。設(shè)有說明:“inta=25,b=4,c=3;〞,求以下表達(dá)式的值。①a+b*c:因運(yùn)算符“*〞的優(yōu)先級(jí)比“+〞的高,故應(yīng)先做乘法運(yùn)算,再做加法運(yùn)算,表達(dá)式的值為37。②a*-b:因負(fù)號(hào)運(yùn)算符“-〞的優(yōu)先級(jí)比“*〞的高,并且“-〞的結(jié)合性為左結(jié)合的,故先對(duì)b求負(fù)運(yùn)算,然后再作乘法運(yùn)算,表達(dá)式的值為-100。③a*--b:注意,兩個(gè)負(fù)號(hào)之間有空格,上述表達(dá)式等同于a*(-(-b)),表達(dá)式的值為100。算術(shù)表達(dá)式使用算術(shù)表達(dá)式時(shí)應(yīng)注意:⑴表達(dá)式應(yīng)簡(jiǎn)潔明了,沒有多余的運(yùn)算符。如上面的表達(dá)式a*--b應(yīng)寫成a*b。⑵求值時(shí),表達(dá)式中的每個(gè)變量都應(yīng)有確定的值。⑶C++的運(yùn)算符較多,其優(yōu)先級(jí)和結(jié)合性較復(fù)雜,在書寫比較復(fù)雜的表達(dá)式而又忘記了運(yùn)算符的優(yōu)先級(jí)時(shí),可適當(dāng)增加配對(duì)的園括號(hào),明確指定表達(dá)式的求值順序。以上三點(diǎn)也適用于其它表達(dá)式。++和—運(yùn)算符++(增1)和--(減1)運(yùn)算符:一元運(yùn)算符,可放在變量的前面(前置),也可放在變量的后面(后置),用于快速實(shí)現(xiàn)變量的增1和減1操作。變量的類型可以是字符型、整型、實(shí)型、枚舉類型和指針類型。前置的++(或--)表示先將變量的值增1(或減1),再把變量的值參加運(yùn)算;后置的++(或--)表示先把變量的值參加運(yùn)算,然后再將變量的值增1(或減1)。++和—運(yùn)算舉例設(shè)inta=1;floatx=7,y;①a++//或++a,等價(jià)于a=a+1。a的值為2。即“++〞或“--〞運(yùn)算符僅用于使某個(gè)變量的值增1或減1,前置和后置的作用是一樣的。②y=x+++++a那么y的值為9,x的值為8,a的值都為2。即“++〞或“--〞與其他運(yùn)算符同時(shí)出現(xiàn)在表達(dá)式中時(shí),前置與后置的作用是不同的。++和—運(yùn)算符使用說明++和--運(yùn)算符只能用于變量。例如,a++、(b=1)++等都是正確的,而—19、(x+6)++都是錯(cuò)誤的。假設(shè)出現(xiàn)多個(gè)“+〞或“-〞連寫的情況,編譯器那么將前兩個(gè)作為增1運(yùn)算符或減1運(yùn)算符。例如,“c=a+++b;〞等價(jià)于“c=a+++b;〞而不等價(jià)于“c=a+++b;〞。不應(yīng)在表達(dá)式中濫用++和--運(yùn)算符。原因是,濫用++和--運(yùn)算符使表達(dá)式的可讀性明顯下降。賦值運(yùn)算符與賦值表達(dá)式賦值運(yùn)算符:左結(jié)合的雙目運(yùn)算符,其優(yōu)先級(jí)比算術(shù)運(yùn)算符、關(guān)系運(yùn)算符和邏輯運(yùn)算符的優(yōu)先級(jí)低。賦值表達(dá)式:<變量>=<表達(dá)式>作用:將<表達(dá)式>的值賦給<變量>。舉例。設(shè)a、b均為整型變量:

a=3+5將3+5的值8賦給ab=a=3+5將3+5的值8賦給a,再將a賦給ba=5+b=5錯(cuò):將5賦給5+b,而5+b不是變量

a=5+(b=5)b為5,a為10賦值運(yùn)算符使用注意不同編譯器對(duì)賦值表達(dá)式的值的不同處理,可能使同一表達(dá)式在不同編譯器中的運(yùn)行結(jié)果不同。如:

intx,s;s=(x=2)+(++x);在VC++6.0中,s的值為6,而在DevC++4.9中,s的值為5。而上述代碼寫成:

intx=2,s;s=x+(++x);在VC++6.0和DevC++4.9中,s的值均為6。解決方法:對(duì)表達(dá)式進(jìn)行分解。復(fù)合賦值運(yùn)算符復(fù)合賦值運(yùn)算符:二元算術(shù)運(yùn)算符和位運(yùn)算符與賦值運(yùn)算符組合而成,優(yōu)先級(jí)和結(jié)合性與賦值運(yùn)算符相同。共有10個(gè):+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=復(fù)合賦值表達(dá)式:<變量><復(fù)合賦值運(yùn)算符><表達(dá)式>等價(jià)于:<變量>=<變量><運(yùn)算符>(<表達(dá)式>)作用:簡(jiǎn)化書寫,提高表達(dá)式的目標(biāo)代碼質(zhì)量。舉例:

a+=b-5等價(jià)于a=a+(b-5)a*=b-c/2等價(jià)于a=a*(b-c/2)數(shù)據(jù)類型轉(zhuǎn)換不同類型的數(shù)據(jù)做混合運(yùn)算時(shí),應(yīng)先轉(zhuǎn)換成同一類型,再做運(yùn)算。數(shù)據(jù)類型轉(zhuǎn)換方法:①自動(dòng)類型轉(zhuǎn)換(也稱隱式類型轉(zhuǎn)換):由系統(tǒng)按類型轉(zhuǎn)換規(guī)那么自動(dòng)完成。對(duì)于賦值與非賦值表達(dá)式來說,自動(dòng)類型轉(zhuǎn)換規(guī)那么是不同的。②強(qiáng)制類型轉(zhuǎn)換(也稱顯式類型轉(zhuǎn)換):由程序員在程序中用類型轉(zhuǎn)換運(yùn)算符明確指明的轉(zhuǎn)換操作。通常,當(dāng)使用自動(dòng)類型轉(zhuǎn)換不能滿足要求時(shí),才需要在程序中使用強(qiáng)制類型轉(zhuǎn)換。非賦值表達(dá)式計(jì)算過程的自動(dòng)類型轉(zhuǎn)換轉(zhuǎn)換原那么:先把精度低的操作數(shù)轉(zhuǎn)成與另一操作數(shù)相同精度的操作數(shù)后再做運(yùn)算。轉(zhuǎn)換規(guī)那么:①字符型或短整型數(shù)自動(dòng)轉(zhuǎn)成整型(int)數(shù)參與運(yùn)算。②單精度實(shí)型數(shù)自動(dòng)轉(zhuǎn)成雙精度實(shí)型數(shù)參與運(yùn)算。③其余情況,僅當(dāng)兩個(gè)操作數(shù)的類型不同時(shí),才將表示范圍小的數(shù)據(jù)類型轉(zhuǎn)成與另一操作數(shù)的相同類型后再參與運(yùn)算。數(shù)據(jù)類型表示的數(shù)據(jù)范圍由小到大為:int→unsigned→long→unsignedlong→double非賦值表達(dá)式計(jì)算過程的自動(dòng)類型轉(zhuǎn)換表達(dá)式計(jì)算舉例:①3+2.5f:因兩個(gè)操作數(shù)的類型不同,故要將它們轉(zhuǎn)成相同的double類型后再運(yùn)算,其結(jié)果為5.5。②'a'*2+2.5f先計(jì)算'a'*2:將字符'a'轉(zhuǎn)換為整型數(shù)97與整型數(shù)2相乘,得整型數(shù)194;再計(jì)算194+2.5f:將整型數(shù)194和float型數(shù)2.5f都轉(zhuǎn)成double型數(shù)后,做加法運(yùn)算,結(jié)果為196.5。注意:自動(dòng)類型轉(zhuǎn)換并不能保證運(yùn)算結(jié)果正確。例如-3+2u的結(jié)果并非-1,而是unsigned類型的數(shù)據(jù)4294967295。賦值表達(dá)式計(jì)算過程的自動(dòng)類型轉(zhuǎn)換假設(shè)賦值運(yùn)算符右邊表達(dá)式的數(shù)據(jù)類型與其左邊變量的類型不一致但兼容,那么由系統(tǒng)自動(dòng)做類型轉(zhuǎn)換。轉(zhuǎn)換規(guī)那么:①將實(shí)型數(shù)賦給整型變量時(shí),僅取其整數(shù)局部賦給整型變量。假設(shè)其整數(shù)局部的值超過整型變量的取值范圍,那么賦值結(jié)果出錯(cuò)。②將整型數(shù)賦給實(shí)型變量時(shí),將整型數(shù)轉(zhuǎn)成實(shí)型數(shù)后,再賦給實(shí)型變量。③將double型數(shù)據(jù)賦給float型變量時(shí),要注意數(shù)值范圍,溢出時(shí)賦值就出錯(cuò)。賦值表達(dá)式計(jì)算過程的自動(dòng)類型轉(zhuǎn)換④將字符型數(shù)據(jù)賦給整型變量時(shí),對(duì)于無符號(hào)字符類型數(shù)據(jù),低八位不變,高位補(bǔ)0后賦值;對(duì)于有符號(hào)字符類型數(shù)據(jù),假設(shè)其值為正,與無符號(hào)字符類型的轉(zhuǎn)換規(guī)那么相同;假設(shè)其值為負(fù),那么高位補(bǔ)1后再賦值。⑤將無符號(hào)整型或長(zhǎng)整型數(shù)賦給整型變量時(shí),假設(shè)在整型的取值范圍,那么不會(huì)出錯(cuò);否那么賦值結(jié)果出錯(cuò)。C++強(qiáng)化了類型檢查:對(duì)于賦值時(shí)的自動(dòng)類型轉(zhuǎn)換,假設(shè)表達(dá)式的計(jì)算結(jié)果類型的表達(dá)范圍大于被賦值的變量的數(shù)據(jù)表達(dá)范圍,或表達(dá)式的計(jì)算結(jié)果的精度高于被賦值的變量的精度時(shí),編譯器通常會(huì)給出警告,希望用戶作出處理,如做強(qiáng)制類型轉(zhuǎn)換等。強(qiáng)制類型轉(zhuǎn)換格式:(<type>)<表達(dá)式>或<type>(<表達(dá)式>)先算表達(dá)式的值,然后將表達(dá)式的值的類型強(qiáng)制轉(zhuǎn)換為由類型名type規(guī)定的數(shù)據(jù)類型。舉例:設(shè)inta=7,b=2;floatx;那么x=a/bx為3.0fx=(float)a/bx為3.5fx=float(a)/bx為3.5fx=(float)(a/b)x為3.0fx=float(a/b)x為3.0f強(qiáng)制類型轉(zhuǎn)換在計(jì)算表達(dá)式的值時(shí),對(duì)于系統(tǒng)能正確自動(dòng)轉(zhuǎn)換的數(shù)據(jù)類型,那么不必做強(qiáng)制類型轉(zhuǎn)換。例如3+float(4*5.0)中,用float做強(qiáng)制類型轉(zhuǎn)換就是多余的。如果不做強(qiáng)制類型轉(zhuǎn)換會(huì)影響表達(dá)式求值的精度或不能完成相應(yīng)的運(yùn)算時(shí),才須使用強(qiáng)制類型運(yùn)算。例如:(int)13.5%(int)3.5。因13.5和3.5都是實(shí)數(shù),而取余運(yùn)算符要求兩邊的操作數(shù)都是整型數(shù),這時(shí)當(dāng)然必須使用強(qiáng)制類型運(yùn)算符。關(guān)系運(yùn)算符關(guān)系運(yùn)算符:二元運(yùn)算符,用來比較兩個(gè)操作數(shù)之間的關(guān)系。共有六個(gè):<、<=、>、>=、==、!=其中前四個(gè)關(guān)系運(yùn)算符的優(yōu)先級(jí)相同,后兩個(gè)關(guān)系運(yùn)算符的優(yōu)先級(jí)相同,但前四個(gè)關(guān)系運(yùn)算符的優(yōu)先級(jí)高于后兩個(gè)。關(guān)系運(yùn)算符的優(yōu)先級(jí)比算術(shù)運(yùn)算符低,但比賦值運(yùn)算符高。關(guān)系運(yùn)算符的操作數(shù)類型可以是字符型、整型、實(shí)型、枚舉類型以及指針類型。注意:初學(xué)者常常誤將"="當(dāng)作"=="使用。關(guān)系表達(dá)式關(guān)系表達(dá)式:用關(guān)系運(yùn)算符將操作數(shù)連接起來的式子。關(guān)系表達(dá)式的值為整數(shù)0或1。關(guān)系成立時(shí),結(jié)果為1;否那么,結(jié)果為0。例如,表達(dá)式(1<=3)+2的值為3,因關(guān)系表達(dá)式1<=3的值為1。注意:關(guān)系表達(dá)式a>b>c的含義并不是a大于b且b大于c,而是(a>b)>c,即先求出a>b的值(為0或1),并使運(yùn)算的結(jié)果繼續(xù)參加后面的運(yùn)算。例如,關(guān)系表達(dá)式4>3>2的結(jié)果為0,因?yàn)樗葍r(jià)于(4>3)>2。邏輯運(yùn)算符邏輯運(yùn)算符:用于邏輯運(yùn)算,用于復(fù)雜條件的表示。有三種:!邏輯非(單目運(yùn)算符)&&邏輯與(二目運(yùn)算符)||邏輯或(二目運(yùn)算符)其中,邏輯非“!〞優(yōu)先級(jí)最高,高于算術(shù)運(yùn)算符;邏輯與“&&〞的優(yōu)先級(jí)低于邏輯非,但高于邏輯或“||〞,但兩者均比關(guān)系運(yùn)算符、算術(shù)運(yùn)算符的優(yōu)先級(jí)低。在C++中,邏輯運(yùn)算的操作數(shù)不為0時(shí),為邏輯真;而操作數(shù)的值為0時(shí),為邏輯假。邏輯運(yùn)算符!(邏輯非):當(dāng)操作數(shù)的值為0時(shí),對(duì)該操作數(shù)做邏輯非運(yùn)算的結(jié)果為1;而當(dāng)操作數(shù)為非0時(shí),對(duì)其做邏輯非運(yùn)算的結(jié)果為0。例如:!0的值為1,!1.12的運(yùn)算結(jié)果為0。&&(邏輯與):僅當(dāng)參加邏輯與的兩個(gè)操作數(shù)的值都為非0時(shí),其結(jié)果為1;否那么結(jié)果為0。例如:0&&1.2為0,1&&1.2為1。||(邏輯或):僅當(dāng)參加邏輯或的兩個(gè)操作數(shù)的值都為0時(shí),其結(jié)果為0;否那么結(jié)果為1。例如:0||1.2為1,0||0為0。邏輯表達(dá)式邏輯表達(dá)式:用邏輯運(yùn)算符連接起來的式子。邏輯操作的操作數(shù)類型與關(guān)系運(yùn)算相同,其運(yùn)算結(jié)果也用整數(shù)表示。當(dāng)邏輯關(guān)系成立時(shí),其運(yùn)算結(jié)果為整數(shù)1;反之,為整數(shù)0。同樣,1或0可作為一個(gè)整數(shù)繼續(xù)參加運(yùn)算。邏輯表達(dá)式舉例:①a<=x&&x<=b判斷x的值是否在區(qū)間[a,b]②(a==b)&&(b==c)判斷a、b、c三個(gè)數(shù)是否相等③x<b||x<a判斷x小于b或者x小于a④c<'0'||c>'9'判斷變量c不是數(shù)字字符邏輯表達(dá)式求值的優(yōu)化邏輯表達(dá)式求值的優(yōu)化:在邏輯表達(dá)式求值時(shí),一旦能確定其值,那么不必再逐步求值。舉例。設(shè)inta=0,b=2,c=1;①a&&b++&&--c因a的值為0,那么可直接確定整個(gè)表達(dá)式的值為0,此時(shí)不再對(duì)后續(xù)的邏輯與項(xiàng)做計(jì)算,即b和c的值并不會(huì)改變。②a||b--||c++a的值為0,再與b做邏輯或運(yùn)算,此時(shí)結(jié)果為1,直接確定表達(dá)式的值為1,其后的運(yùn)算不再進(jìn)行。這樣,計(jì)算結(jié)果為1,a為0,b為1,c不變。逗號(hào)運(yùn)算符與逗號(hào)表達(dá)式逗號(hào)運(yùn)算符:優(yōu)先級(jí)最低。逗號(hào)表達(dá)式:<表達(dá)式1>,<表達(dá)式2>,…,<表達(dá)式n>按從左到右的順序依次求出各表達(dá)式的值,并把最后一個(gè)表達(dá)式的值作為整個(gè)逗號(hào)表達(dá)式的值。舉例。設(shè)inta=2,b;那么表達(dá)式a+=2,b=3+a的值為7。此時(shí),a的值為4,b的值為7。注意:并非所有的逗號(hào)都構(gòu)成逗號(hào)表達(dá)式。例如,max(a+b,c+d)中,逗號(hào)只是一個(gè)分隔符。條件運(yùn)算符與條件表達(dá)式條件運(yùn)算符:唯一的三目運(yùn)算符。條件表達(dá)式:<表達(dá)式1>?<表達(dá)式2>:<表達(dá)式3>條件表達(dá)式的運(yùn)算過程:先求表達(dá)式1的值,假設(shè)為0,那么求出表達(dá)式2的值(不求表達(dá)式3的值),并把該值作為運(yùn)算結(jié)果;否那么求出表達(dá)式3的值(不求表達(dá)式2的值),并把它作為運(yùn)算結(jié)果。舉例:①a>=b?a:b求a、b兩個(gè)數(shù)中的大數(shù)②cout<<(a>b?"a大于b\n":"a小于等于b\n");sizeof運(yùn)算符sizeof運(yùn)算符:?jiǎn)文窟\(yùn)算符,用于計(jì)算操作數(shù)類型或表達(dá)式的值占用內(nèi)存的字節(jié)數(shù)。格式為:sizeof(<類型名或表達(dá)式>)舉例:sizeof(int)//4(在32位系統(tǒng)中)sizeof(float)//4sizeof('\100')//1sizeof('a'+2.5)//8。因'a'+2.5的值為double型。sizeof(“Hello〞)//6。因"Hello"占6字節(jié)內(nèi)存。sizeof(1+2)//4(在32位系統(tǒng)中)sizeof('1'+'2')//4(在32位系統(tǒng)中)位運(yùn)算符*位運(yùn)算符:對(duì)其操作數(shù)按其計(jì)算機(jī)內(nèi)表示的二進(jìn)制數(shù)逐位地進(jìn)行邏輯運(yùn)算或移位運(yùn)算的運(yùn)算符。4個(gè)邏輯位運(yùn)算符:~、&、|、^2個(gè)移位運(yùn)算符:<<、>>位運(yùn)算的操作數(shù):只能是字符型和整型數(shù)據(jù)。位運(yùn)算的用途:主要用于系統(tǒng)程序設(shè)計(jì)。邏輯位運(yùn)算*~(按位取反):一元運(yùn)算符。它對(duì)其操作數(shù)的每個(gè)二進(jìn)位進(jìn)行“逐位取反操作〞,即將1的位改為0,將0的位改為1。例如:設(shè)字符型變量a為00010110那么~a的值為11101001&(按位與):二元運(yùn)算符。它對(duì)其兩邊的操作數(shù)的對(duì)應(yīng)位按位進(jìn)行邏輯與運(yùn)算。例如:設(shè)字符型變量a為00001111字符型變量b為10101010那么a&b為00001010邏輯位運(yùn)算*|(按位或):二元運(yùn)算符。將其兩邊的操作數(shù)的對(duì)應(yīng)位按位進(jìn)行邏輯或運(yùn)算。例如:設(shè)字符型變量c為0101011l字符型變量d為10100010那么c|d為11110111^(按位異或):二元運(yùn)算符。將其兩邊的操作數(shù)的對(duì)應(yīng)位按位進(jìn)行異或運(yùn)算。運(yùn)算規(guī)那么:僅當(dāng)對(duì)應(yīng)位相異時(shí),該位的結(jié)果為1;否那么為0。例如:設(shè)字符型變量c為0101011l字符型變量d為10100010那么c^d為11110101移位運(yùn)算*<<(左移運(yùn)算符):二元運(yùn)算符。a<<ba是一個(gè)整型數(shù)據(jù),b通常為一個(gè)正整數(shù),將a的二進(jìn)制數(shù)依次向左移動(dòng)b個(gè)二進(jìn)位,但變量a的值不變。移位時(shí),高位舍棄,低位補(bǔ)0。設(shè)變量a的值為2,那么b=a<<2//相當(dāng)于b=a*4變量b的值為8,而a的值仍為2。>>(右移運(yùn)算符):二元運(yùn)算符。與左移運(yùn)算符類似,但為向右移位。右移時(shí),移出的低位被舍棄,而高位的補(bǔ)位:對(duì)于無符號(hào)數(shù),高位補(bǔ)0;對(duì)于有符號(hào)數(shù),高位補(bǔ)符號(hào)位(為正補(bǔ)0,為負(fù)補(bǔ)1)。3.4常用庫函數(shù)標(biāo)準(zhǔn)庫函數(shù):由C++編譯系統(tǒng)提供,包括常用的數(shù)學(xué)函數(shù)、字符串處理函數(shù)、輸入/輸出等。標(biāo)準(zhǔn)庫函數(shù)的使用:編程時(shí)假設(shè)要用這些庫函數(shù),只需包含相關(guān)庫函數(shù)的頭文件就可直接調(diào)用。例如,要使用math.h頭文件聲明的標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)fabs(取絕對(duì)值)來計(jì)算數(shù)學(xué)式子y=(|x|+2)/2時(shí),應(yīng)寫為:#include<math.h>…//變量x和y的說明y=(fabs(x)+2)/2;常用數(shù)學(xué)庫函數(shù)取絕對(duì)值函數(shù)intabs(intx);//計(jì)算并且返回|x|doublefabs(doublex);//計(jì)算并且返回|x|longlabs(longx);//計(jì)算并且返回|x|三角函數(shù)doublesin(doublex);//求sin(x),x為弧度值doublecos(doublex);//求cos(x),x為弧度值doubletan(doublex);//求tg(x),x為弧度值doubleacos(doublex);//求arccos(x),-1≤x≤1doubleasin(doublex);//求arcsin(x),-1≤x≤1doubleatan(doublex);//求arctan(x)常用數(shù)學(xué)庫函數(shù)開平方函數(shù)doublesqrt(doublex);//求,x≥0指數(shù)及對(duì)數(shù)函數(shù)doubleexp(doublex);//求ex

doublepow(doublex,doubley);//求xy

doublelog(doublex);//求ln(x)doublelog10(doublex);//求lg(x)偽隨機(jī)函數(shù)偽隨機(jī)函數(shù)在stdlib.h頭文件中聲明,包括:①intrand(void);//產(chǎn)生一個(gè)0~0x7fff偽隨機(jī)數(shù)②voidsrand(unsignedseed);//設(shè)置產(chǎn)生偽隨機(jī)數(shù)的起點(diǎn)。假設(shè)每次使用相同//的seed,那么將產(chǎn)生相同的偽隨機(jī)數(shù)序列。舉例:①rand()%100//產(chǎn)生一個(gè)0到99之間的偽隨機(jī)數(shù)②rand()%9+1//產(chǎn)生一個(gè)1到9之間的偽隨機(jī)數(shù)第4章簡(jiǎn)單程序設(shè)計(jì)4.1表達(dá)式語句和空語句4.2復(fù)合語句4.3數(shù)據(jù)的輸入/輸出4.4順序結(jié)構(gòu)程序舉例作業(yè):1~44.1表達(dá)式語句和空語句表達(dá)式語句:在表達(dá)式后加分號(hào)構(gòu)成。舉例:x=25;//賦值語句y+=a*b+c,b++;//復(fù)合賦值表達(dá)式語句a+b;//算術(shù)表達(dá)式語句;//空語句:由一個(gè)分號(hào)組成i=5;;;//一個(gè)賦值語句和兩個(gè)空語句注意:分號(hào)是語句的一個(gè)組成局部,而不是語句之間的分隔符。4.2復(fù)合語句復(fù)合語句(又稱塊語句):由一對(duì)花括號(hào)“{〞、“}〞括起來的一條或多條語句構(gòu)成。復(fù)合語句在語法上當(dāng)作一個(gè)語句看待,任何在語法上需要一個(gè)語句的地方都可用復(fù)合語句。復(fù)合語句主要用作函數(shù)體和結(jié)構(gòu)語句的成分語句。復(fù)合語句的左右花括號(hào)的配對(duì):為防止多寫或少寫左括號(hào)或右括號(hào),最好盡量把左括號(hào)和與之對(duì)應(yīng)的右括號(hào)寫在正文的同一列上,以提高程序的可讀性。復(fù)合語句在復(fù)合語句中,除了普通語句外,還可以包含變量的定義。在復(fù)合語句中定義的變量稱為局部變量。它們只能被復(fù)合語句中的語句使用。例如:{

inta,b,max;//變量的定義cin>>a>>b;if(a>=b)max=a;elsemax=b;cout<<max<<endl;}4.3數(shù)據(jù)的輸入/輸出輸入/輸出(簡(jiǎn)稱I/O):程序運(yùn)行所需要的數(shù)據(jù)往往要從外設(shè)(如鍵盤、文件等)得到,程序的運(yùn)行結(jié)果通常也要輸出到外設(shè)(如顯示器、打印機(jī)、文件等)。C++語言沒有專門的I/O語句,所有I/O是通過I/O庫“iostream.h〞提供的預(yù)定義I/O流對(duì)象實(shí)現(xiàn)。輸入操作通過預(yù)定義輸入流對(duì)象cin來實(shí)現(xiàn),輸出操作通過預(yù)定義輸出流對(duì)象cout來實(shí)現(xiàn)。要使用cin和cout必須在程序的開頭增加一行:#include<iostream.h>預(yù)定義輸入流對(duì)象cincin:可以直接輸入根本數(shù)據(jù)類型的數(shù)據(jù),包括整數(shù)、實(shí)數(shù)、字符和字符串。格式:cin>>變量名1[>>變量名2>>…>>變量名n]其中,">>"稱為提取運(yùn)算符,表示將暫停程序的執(zhí)行,等待用戶從鍵盤上輸入相應(yīng)的數(shù)據(jù)。在提取運(yùn)算符后只能跟一個(gè)變量名,但">>變量名"可以重復(fù)屢次,即可給一個(gè)變量輸入數(shù)據(jù),也可給多個(gè)變量輸入數(shù)據(jù)。輸入十進(jìn)制整數(shù)和實(shí)數(shù)舉例:inti;floatx;cin>>i;//Acin>>x;//B當(dāng)執(zhí)行到A行語句時(shí),假設(shè)用戶從鍵盤輸入:350↙那么將350送給變量i。當(dāng)執(zhí)行到B行時(shí),假設(shè)輸入:0.618↙那么將0.618送給變量x。輸入十進(jìn)制整數(shù)和實(shí)數(shù)說明:①上述兩個(gè)數(shù)據(jù)也可一起輸入,效果相同:3500.618↙注意在輸入的數(shù)據(jù)之間用一個(gè)或多個(gè)空格隔開。②A行和B行的輸入也可合寫成:

cin>>i>>x;//C而上述兩種數(shù)據(jù)輸入方式同樣適用。輸入十進(jìn)制整數(shù)和實(shí)數(shù)③回車鍵的作用:⑴告知cin已輸入一行數(shù)據(jù),cin開始從輸入行中提取數(shù)據(jù),依次賦給它所列舉的變量;⑵分隔輸入數(shù)據(jù)。當(dāng)cin遇到回車鍵時(shí),假設(shè)仍有變量等待輸入數(shù)據(jù),那么繼續(xù)等待用戶輸入新的一行數(shù)據(jù)。④輸入數(shù)據(jù)的類型,必須與cin中列舉的變量一致,否那么輸入出錯(cuò)。例如,對(duì)于C行的語句,假設(shè)輸入:a0.618↙那么變量i的值為0,而變量x沒有獲得輸入數(shù)據(jù),并使后面的cin無法正確提取數(shù)據(jù)。輸入字符數(shù)據(jù)為字符變量輸入數(shù)據(jù)時(shí),輸入數(shù)據(jù)必須是字符型。舉例:charc1,c2;cin>>c1>>c2;//D執(zhí)行到D行時(shí),cin等待用戶輸入數(shù)據(jù),假設(shè)輸入:ab↙那么cin分別將字符a、b賦給變量c1和c2,而輸入:ab↙cin也分別將字符a、b賦給變量c1和c2。輸入字符數(shù)據(jù)在缺省的情況下,cin自動(dòng)跳過輸入的空格,即cin不能將輸入的空格賦給字符型變量。同樣,回車鍵也可作為輸入字符之間的分隔符,也不能將輸入的回車鍵字符賦給字符型變量。假設(shè)要把輸入的每個(gè)字符(包括空格和回車)都作為一個(gè)輸入字符賦給字符型變量,應(yīng)使用函數(shù)cin.get()。其格式為:cin.get(<字符型變量>);該語句一次只能從輸入行中提取一個(gè)字符。輸入字符數(shù)據(jù)舉例:將D行的語句改寫成:cin.get(c1);//Ecin.get(c2);執(zhí)行到E行時(shí),假設(shè)輸入:ab↙在輸入字符a前沒有空格,在字符a與b之間有一個(gè)空格,那么將字符a和空格分別賦給變量c1、c2,而在輸入行中仍保存字符b和回車鍵。輸入十六進(jìn)制或八進(jìn)制數(shù)據(jù)*輸入整數(shù)默認(rèn)時(shí)用十進(jìn)制,但也可用八進(jìn)制或十六進(jìn)制。假設(shè)按八進(jìn)制或十六進(jìn)制輸入,那么應(yīng)在cin中指明:hex為十六進(jìn)制,oct為八進(jìn)制,dec為十進(jìn)制。例如:inti,j,k;cin>>hex>>i;//指明輸入為十六進(jìn)制數(shù)cin>>j;//輸入仍為十六進(jìn)制數(shù)cin>>dec>>k;//指明輸入為十進(jìn)制數(shù)當(dāng)執(zhí)行到語句cin時(shí),假設(shè)輸入:111111↙那么將十六進(jìn)制數(shù)11和11、十進(jìn)制數(shù)11分別賦給變量i、j和k。輸入十六進(jìn)制或八進(jìn)制數(shù)據(jù)*使用非十進(jìn)制輸入數(shù)據(jù)時(shí),應(yīng)注意:⑴八進(jìn)制或十六進(jìn)制數(shù)的輸入,只適用于整型變量。⑵假設(shè)在cin中指明所用的數(shù)制后,指定數(shù)制一直有效,直到在后續(xù)的cin中指明另一數(shù)制為止。如上例中,輸入j的值時(shí),仍為十六進(jìn)制。⑶輸入十六進(jìn)制數(shù)時(shí),可用0x開始,也可不用0x開始;輸入八進(jìn)制數(shù)時(shí)可用0開始,也可不用0開始。原因是在cin中已指明輸入數(shù)據(jù)時(shí)所用的數(shù)制。預(yù)定義輸出流對(duì)象cout作用:可直接輸出根本數(shù)據(jù)類型的數(shù)據(jù),包括整數(shù)、實(shí)數(shù)、字符及字符串。格式:cout<<表達(dá)式1[<<表達(dá)式2<<…<<表達(dá)式n];其中"<<"稱為插入運(yùn)算符,它將緊跟其后的表達(dá)式的值輸出到顯示器當(dāng)前光標(biāo)位置。輸出字符或字符串舉例1:

cout<<"輸入變量的值:";執(zhí)行時(shí),在顯示器的當(dāng)前光標(biāo)位置顯示:輸入變量i的值:即cout將雙引號(hào)中的字符串常量按其原樣輸出。舉例2:

charc='a',b='b';cout<<"c="<<c<<",b="<<b<<'\n';執(zhí)行cout語句時(shí),輸出結(jié)果為:

c=a,b=b輸出十進(jìn)制整數(shù)和實(shí)數(shù)舉例:

inti=12;floatx=0.618f;cout<<i<<x<<endl;//Acout<<i<<','<<x<<endl;//Bcout<<setw(6)<<i<<setw(10)<<x<<endl;//C輸出結(jié)果為:120.61812,0.618120.618輸出十進(jìn)制整數(shù)和實(shí)數(shù)說明:⑴在cout語句中出現(xiàn)的endl表示要輸出一個(gè)換行符,與字符'\n'效果相同。⑵當(dāng)用cout輸出多個(gè)數(shù)據(jù)時(shí),缺省情況下,按每個(gè)數(shù)據(jù)的實(shí)際長(zhǎng)度輸出,即在每個(gè)輸出的數(shù)據(jù)之間沒有分隔符,如輸出結(jié)果的第一行所示,這是A行語句的輸出。顯然,無法分清哪個(gè)變量的輸出值是多少。⑶為了區(qū)分輸出的數(shù)據(jù)項(xiàng),在每個(gè)輸出數(shù)據(jù)之間要添加必要的輸出分隔符。分隔符可以是空格、制表符或換行符等。例如,B行語句在輸出數(shù)據(jù)之間添加逗號(hào)來分隔,如輸出結(jié)果的第二行所示。輸出十進(jìn)制整數(shù)和實(shí)數(shù)⑷用setw()指定輸出項(xiàng)的寬度:setw是“setwidth〞的縮寫,setw(6)指明其后的輸出項(xiàng)占用6個(gè)字符寬度,并向右對(duì)齊。執(zhí)行C行語句后的輸出如輸出結(jié)果的第三行所示。用setw()應(yīng)注意:①在程序的開始位置必須包含頭文件iomanip.h:#include<iomanip.h>②括號(hào)中必須給出一個(gè)表達(dá)式(值為正整數(shù)),它指明緊跟其后輸出項(xiàng)的寬度。③該設(shè)置僅對(duì)其后的一個(gè)輸出項(xiàng)有效。一旦按指定的寬度輸出其后的數(shù)據(jù)后,又恢復(fù)缺省的輸出方式。輸出八進(jìn)制數(shù)、十六進(jìn)制數(shù)*整型數(shù)據(jù)可指定以十六進(jìn)制或八進(jìn)制輸出。例如:

inta=12,b=10;cout<<hex<<a<<","<<b<<endl;cout<<oct<<a<<','<<b<<endl;輸出結(jié)果為:

c,a14,12其中,hex和oct分別指明以十六進(jìn)制和八進(jìn)制輸出。在cout中指明以一種進(jìn)制輸出整數(shù)后,對(duì)其后的輸出一直有效,直到指明其它進(jìn)制輸出整型數(shù)據(jù)為止。輸出用科學(xué)表示法表示的實(shí)數(shù)*實(shí)型數(shù)據(jù)可用科學(xué)表示法形式輸出。例如:floatx=0.618f,y=230.02f;cout.setf(ios::scientific,ios::floatfield);//Acout<<x<<'\t'<<y<<'\n';輸出結(jié)果為:6.180000e-0012.300200e+002A行指明按科學(xué)表示法輸出實(shí)數(shù)。一旦指明按科學(xué)表示法輸出實(shí)數(shù),那么其后的輸出均按科學(xué)表示法輸出,直到指明按定點(diǎn)數(shù)輸出為止。指定按定點(diǎn)數(shù)格式輸出(缺省的輸出方式)的語句為:cout.setf(ios::fixed,ios::floatfield);4.4順序結(jié)構(gòu)程序舉例例4.1計(jì)算數(shù)列a,2a,3a…的前n項(xiàng)的和,其中a和n的值在運(yùn)行時(shí)輸入。#include<iostream.h>voidmain(){intn;doublea,sum;cout<<"輸入a的值?";cin>>a;cout<<"輸入n的值?";cin>>n;sum=a*(1+n)*n/2;cout<<"數(shù)列和="<<sum<<endl;}程序運(yùn)行結(jié)果:輸入a的值?2↙

輸入n的值?10↙

數(shù)列和=110例4.2編程完成長(zhǎng)度單位英寸到厘米的轉(zhuǎn)換。請(qǐng)按以下輸入輸出格式編程:輸入格式:請(qǐng)輸入英寸值?5↙輸出格式:5吋=12.7厘米#include<iostream.h>voidmain(void){floatinch,cm;cout<<"請(qǐng)輸入英寸值?";

cin>>inch;cm=2.54f*inch;

cout<<inch<<"吋="<<cm<<"厘米\n";}程序運(yùn)行結(jié)果:請(qǐng)輸入英寸值?5↙5吋=12.7厘米編程時(shí),除了重視數(shù)據(jù)結(jié)構(gòu)和算法外,也要注重?cái)?shù)據(jù)輸入/輸出格式的設(shè)計(jì),以方便用戶的使用。第5章C++的流程控制語句5.1C++語

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論