東南大學(xué)C 課件第2章c++簡(jiǎn)單程序設(shè)計(jì)_第1頁(yè)
東南大學(xué)C 課件第2章c++簡(jiǎn)單程序設(shè)計(jì)_第2頁(yè)
東南大學(xué)C 課件第2章c++簡(jiǎn)單程序設(shè)計(jì)_第3頁(yè)
東南大學(xué)C 課件第2章c++簡(jiǎn)單程序設(shè)計(jì)_第4頁(yè)
東南大學(xué)C 課件第2章c++簡(jiǎn)單程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩157頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第二章

C++簡(jiǎn)單程序設(shè)計(jì)

*本章主要內(nèi)容

-C++語(yǔ)言概述

-基本數(shù)據(jù)類(lèi)型和表達(dá)式

■數(shù)據(jù)的輸入與輸出

-算法的基本控制結(jié)構(gòu)

-自定義數(shù)據(jù)類(lèi)型

*2.1C++語(yǔ)言概述

2.1.1C++語(yǔ)言的產(chǎn)生

-C++是從c語(yǔ)言發(fā)展演變而來(lái)的:

C語(yǔ)言的開(kāi)發(fā)史源于高級(jí)語(yǔ)言和UNIX操作系統(tǒng)的發(fā)展要求。

早期的系統(tǒng)程序設(shè)計(jì),使用的是匯編語(yǔ)言,其優(yōu)點(diǎn):

(1)能體現(xiàn)計(jì)算機(jī)硬件指令級(jí)的特性,表達(dá)能力強(qiáng);

(2)運(yùn)行效率高。

其缺點(diǎn):可讀性,可移植性及描述問(wèn)題的性能不如高級(jí)語(yǔ)言。

這樣很自然有如下想法:能否用具有足夠表達(dá)能力的高級(jí)語(yǔ)言

來(lái)進(jìn)行系統(tǒng)軟件的設(shè)計(jì)呢?Bell實(shí)驗(yàn)室做了這一嘗試。

1970:在PDP?11/2()機(jī)上實(shí)現(xiàn)了B語(yǔ)言,并用它編寫(xiě)了UNIX系統(tǒng)的

實(shí)用程序。

Bv—BCPLv-CPLv-ALGOL60

在B語(yǔ)言基礎(chǔ)上,改進(jìn)其缺陷,發(fā)展出了C語(yǔ)言,

其設(shè)計(jì)目標(biāo):

(1)保持BCPL和B的精練性及接近硬件的特點(diǎn)

(2)恢復(fù)這些語(yǔ)言失去的通用性

1972:第一個(gè)C編譯投入使用

1973:UNIX用C改寫(xiě),加入多道程序功能,發(fā)生質(zhì)變

現(xiàn)在,UNIX已得到廣泛推廣,成為公認(rèn)的第一標(biāo)準(zhǔn)的操作系統(tǒng)

隨著UNIX的進(jìn)一步開(kāi)發(fā),C也交織在一起被迅速推廣。

1983:對(duì)C擴(kuò)充,發(fā)展為C++。

-C++語(yǔ)言的標(biāo)準(zhǔn)化工作從1989年開(kāi)始,于1994

年制定了ANSIC++標(biāo)準(zhǔn)草案。以后又經(jīng)過(guò)不斷

完善,成為目前的C++。

*212C++的特點(diǎn)

-全面兼容c

?它保持了C的簡(jiǎn)潔、高效和接近匯編語(yǔ)言等特點(diǎn)

?對(duì)C的類(lèi)型系統(tǒng)進(jìn)行了改革和擴(kuò)充

?C++也支持面向過(guò)程的程序設(shè)計(jì),不是一個(gè)純

正的面向?qū)ο蟮恼Z(yǔ)言

-支持面向?qū)ο蟮姆椒?/p>

*2.1.3C++程序?qū)嵗焕?4

//thisisasimplestprogram.

#include<iostream.h>

voidmain(void)

cout?"Hello!\n";

cout?"Welcometoc++!\n";

)

說(shuō)明:(i)注解

(2)編譯預(yù)處理

(3)main函數(shù)

(4)語(yǔ)句括號(hào){}

(5)語(yǔ)句分號(hào);

*C++程序?qū)嵗?/p>

運(yùn)行結(jié)果:

Hello!

WelcometoC++!

2.1.4C++字符集

語(yǔ)言的最基本單位是字符:

字符--->詞--->語(yǔ)句--->函數(shù)--->程序。

字符集是構(gòu)成C++語(yǔ)言的基本元素

■大小寫(xiě)的英文字母:A~Z,a?z

-數(shù)字字符:0?9

-特殊字符:

空格!#%-&*

_(下劃線(xiàn))+二-

7>/\'〃

7

,()[]{}

*2.1.5詞法記號(hào)

-詞法記號(hào)是最小的詞法單位

-1、關(guān)鍵字C++預(yù)定義的單詞。是指C++中有特殊含義

的字,是不能重新定義的。程序員不可用之作為自己定

義的變量或函數(shù)的名字。

類(lèi)別關(guān)鍵字個(gè)數(shù)舉例

ANSIC32char,for等

ANSIC++61(增加29個(gè))class,public等

BC/AC擴(kuò)展了一些asm等

■2、標(biāo)識(shí)符程序員聲明的單詞,它命名程序正文中的

■一些實(shí)體。

?標(biāo)識(shí)符的構(gòu)成規(guī)則

曾以大寫(xiě)字母、小寫(xiě)字母或下劃線(xiàn)(_)開(kāi)始。

年可以由以大寫(xiě)字母、小寫(xiě)字母、下劃線(xiàn)(_)或數(shù)字0~9組成。

-大寫(xiě)字母和小寫(xiě)字母代表不同的標(biāo)識(shí)符。

歷例Rectangle>Draw、JineNo.1

3、文字在程序中直接使用布號(hào)表示的數(shù)據(jù)

"包括數(shù)字、字符、字符串和布爾文字

4、操作符用于實(shí)現(xiàn)各種運(yùn)算的符號(hào)。+-

5、分隔符用于分隔各個(gè)詞法記號(hào)或程序正文:()

{},:;

6、空白:空格、制表符(TAB鍵產(chǎn)生的字符)、換行符

(Enter鍵所產(chǎn)生的字符)和注釋的總稱(chēng)。

?C++程序書(shū)寫(xiě)自由

?〃、/**/

*2.2基本數(shù)據(jù)類(lèi)型和表達(dá)式

-2.2.1基本數(shù)據(jù)類(lèi)型

數(shù)據(jù):是程序命令操作的對(duì)象

數(shù)據(jù)類(lèi)型:是指將數(shù)據(jù)根據(jù)表達(dá)形式的不同而劃分的類(lèi)別。

C++的數(shù)據(jù)類(lèi)型一般分為如下幾種:

基本數(shù)據(jù)類(lèi)型-實(shí)型(浮點(diǎn)型)

邏輯型(布爾型)

數(shù)據(jù)類(lèi)型數(shù)組

指針

空類(lèi)型

'非基本數(shù)據(jù)類(lèi)結(jié)構(gòu)

型(用戶(hù)定義數(shù)據(jù)類(lèi)聯(lián)合

型)

枚舉

類(lèi)

數(shù)據(jù)類(lèi)型修飾符:

short"ngunsignedsigned

無(wú)符號(hào)整型unsignedint

例:無(wú)符號(hào)長(zhǎng)整型unsignedlong

無(wú)符號(hào)短整型unsignedshort

至于它們之間的差異,請(qǐng)看下表(p24):(16位計(jì)算機(jī))

類(lèi)型所占位數(shù)數(shù)的范圍

int16-32768?32767

short[int]16-32768?32767

long[int]32-2147483648?2147483647

unsigned[inti160?65535

unsignedshort160?65535

unsignedlong320?4294967295

*

1

011111111111111

+.3145678923

數(shù)符

小數(shù)部分指數(shù)

注意:

(1)整型和實(shí)型的幾種不同方式

(2)注意各種數(shù)據(jù)類(lèi)型的取值范圍。

(3)注意C無(wú)布爾類(lèi)型。C語(yǔ)言在表達(dá)邏輯運(yùn)算的結(jié)果時(shí),用

整數(shù)0代表邏輯“假”,用非0的整數(shù)值(如1)表示邏輯“真”

OC++中增添了布爾類(lèi)型bool,但并非每個(gè)C++編譯器都支持

O

用睇博(數(shù)據(jù)類(lèi)型)可以確定數(shù)據(jù)類(lèi)型的字節(jié)長(zhǎng)度

?cout?usizeofintisu?sizeof(int)?endl;

C++強(qiáng)類(lèi)型語(yǔ)言一要求程序設(shè)計(jì)者在使用數(shù)據(jù)

之前對(duì)數(shù)據(jù)的類(lèi)型進(jìn)行聲明。

數(shù)據(jù)類(lèi)型

*常量與變量

#include<iostream.h>

voidmain(void)

constintPRICE=30;

變量先定intnum,total;

義后使用、^floatv,r,h;

、mim=4n-付虧

total=num*PRICE;

cout?total?endl;

變量r=2.5;

h=3.2;

v=3.14159*r*r*h;

cout?v?endl;

}

*2.2.2常量

常量——就是其值不能被改變的量,它相當(dāng)于數(shù)學(xué)中的常數(shù)。

在程序中出現(xiàn)的分為一般常量和符號(hào)常量?jī)煞N。

一般常量_____________________

intsum;

讓我們來(lái)看右

sum=3+5;

邊的程序段:

printf(66sum=%d?\sum);

其中的“3”和“5”都是一般常量。

常量由于數(shù)據(jù)類(lèi)型整型常量

的不同而被分為:實(shí)型常量

字符常量

字符串常量

*1、整型常量

整義常量即以文字形式出現(xiàn)的整數(shù)。

分十進(jìn)制整數(shù)、八進(jìn)制整數(shù)和十六進(jìn)制整數(shù),

注意它們的書(shū)寫(xiě)形式。

整型常量類(lèi)型表達(dá)形式有無(wú)正負(fù)

十進(jìn)制957有正負(fù)123L1231長(zhǎng)整型

八進(jìn)制01667只有正

十六進(jìn)制0xB7只有正

★/2、實(shí)型常量

實(shí)型常量即以文字形式出現(xiàn)的實(shí)數(shù),又稱(chēng)浮點(diǎn)型。

它分一般形式和指數(shù)形式。

實(shí)型常量類(lèi)型表達(dá)形式

一般形式0.123

指數(shù)形式123e5

3:

(1)指數(shù)形式的書(shū)寫(xiě)。E或e的前面必須要有數(shù)字,且E后

面的指數(shù)必須為整數(shù)。

例:e3

2.1e3.5

.e3

⑵一個(gè)實(shí)型常數(shù)缺省說(shuō)明為double,如表示float型,則

在實(shí)數(shù)后加f或F。

例34.5f34.5

*3、字符常量

單引號(hào)括起來(lái)的一個(gè)字符例‘公

?每個(gè)字符常數(shù)占一個(gè)字節(jié)

?每個(gè)字符常數(shù)有一個(gè)編碼數(shù)字值一ASCH碼表中的碼值

例如:'A':65'B':66'a':976b9:98...

?字符常量可象數(shù)量一樣進(jìn)行運(yùn)行、比較

例1:if(c>=6A,&&c<=6Z5)c=c+6a,-6A9;

將字符變量c從大寫(xiě)字母轉(zhuǎn)為小寫(xiě)字母。

例2:0?0=0

,2,?,0,=2

如果c是一數(shù)字字符,則就是它對(duì)應(yīng)數(shù)字的數(shù)值

*轉(zhuǎn)義字符

?非圖形字符(如回車(chē)、制表符等)及、“等字符,因它們有特殊作用,所以

表示這些字符本身時(shí),應(yīng):p25o

\n表?yè)Q行

?無(wú)論是不可顯示字符還是一般字符,都可用8進(jìn)制數(shù)、16進(jìn)制數(shù)表示

,\ddd:一至三位8進(jìn)制數(shù)。

,\xhh:一至二位16進(jìn)制數(shù)。

例如:'\001,表示碼值為(01)8的ASCII字符。

'A,也可用表示

'\(F為空白符,即NULL,碼值為0,在C語(yǔ)言中是字符串的結(jié)束

標(biāo)志。(與'(F和空格符不同)

例:coutvv“\x07operating\tsystem\n”;

operatingsystem

■字符數(shù)據(jù)的使用方法例:

inta=6b5;

?字符數(shù)據(jù)和整型數(shù)據(jù)之間

可以運(yùn)算。charc=97;

cout?a?endl;

?字符數(shù)據(jù)與整型數(shù)據(jù)可以

互相賦值。cout?c?endl;

輸出:

98

4、字符串常量

完母用型常量是用雙引號(hào)括起來(lái)的一個(gè)或多個(gè)字符。

例如,將1用雙引號(hào)括起來(lái),此時(shí)“1”代表的是一個(gè)字符串型常量,

與字符型常量’1,也是有區(qū)別的。

C++規(guī)定以字符‘\0,作為字符串結(jié)束標(biāo)志。如,一個(gè)字符串“HELLO”,在內(nèi)存

中以八0”為結(jié)尾?!癨0”在輸出時(shí)不作顯示,只用來(lái)表示字符串的結(jié)束。

注意“P”與?不同。前者為字符串,在機(jī)內(nèi)存儲(chǔ)形式

為IPI\0I,而就是一常數(shù)P。

字符串型常量“HELLO”H\0

*5符號(hào)常量

#definePI3.14159這是一個(gè)知道圓半徑,求圓周長(zhǎng)、

圓面積的簡(jiǎn)單C程序。其中的就是

main()

符號(hào)常量,它的值在一開(kāi)始就被預(yù)處理

(命令“#defiiie”定義為實(shí)數(shù)了,

intr;故程序在運(yùn)行和編譯時(shí)會(huì)自動(dòng)用

floatL,S;“3.14159”來(lái)替代PI。

r=10;

符號(hào)常量比起一般常量來(lái),不但使用

L=2*PI*r;方便,實(shí)際值容易修改,而且更形象

S=PI*r*r;化,便于記憶。

printf(“周長(zhǎng)=%八11”人);

printf(“面積=%八正卓);

}

★★6數(shù)據(jù)類(lèi)型口,皿一

¥—布爾型數(shù)據(jù)

.布爾型變量的說(shuō)明:

例:boolflag;

.布爾型數(shù)據(jù)的取值:

只有false和true兩個(gè)值

*C++中:

constfloatpi=3.14159;

*常量定義中初始化的值可以是一個(gè)常量表達(dá)式:

constintsize=100*sizeof(int);

constintnumber=max(15,23);(錯(cuò))

注意:#define與const的區(qū)別

*2.2.3變量

變量是什么?變量——程序在運(yùn)行過(guò)程中,其值

會(huì)發(fā)生改變的量。

/變量名length

變量、變量值23

'變量類(lèi)型int

1、命名

C++規(guī)定必須以字母或下劃線(xiàn)打頭,后面跟字母、數(shù)字或下

劃線(xiàn)(如:a,Z_5e,_D7d等),并且不能與保留字、函數(shù)名、

類(lèi)名等C++專(zhuān)用名相同(如char,for,int等)。

注意:

(a)長(zhǎng)度:早期的C編譯程序只認(rèn)前8個(gè)字符。VC允許

256個(gè)字符。但一般不要超過(guò)31個(gè)字符為宜

(b)約定:?變量名、函數(shù)名、和數(shù)據(jù)類(lèi)型名等用小寫(xiě)字母

?自定義的類(lèi)型名(如類(lèi))、符號(hào)常量名及宏

用大寫(xiě)字母;

?下劃線(xiàn)開(kāi)頭的名字常為系統(tǒng)程序(庫(kù)函數(shù)用),

用戶(hù)一般不用。

?要有意義:如用Sum表示“求和變量”,不要用aaa,Al,

B12之類(lèi)名字。

例:my_car小寫(xiě)

my_Car駱駝

iMyCar匈牙利標(biāo)識(shí)法(WINDOWS標(biāo)準(zhǔn)命名法)

*下面我們看一段關(guān)于變量的程序:

程序中的num],niim2和sum者B

voidmain()

是變量。它們的值在程序的運(yùn)

(

行過(guò)程中都發(fā)生了變化。變量

intnuml,num29sum;

numl=10;num2=25;定義后,各變量的初值都是不

sum=numl+num2;確定的。numl的第一個(gè)確切

cout?66sum=66?sum?endl;值是10,當(dāng)再次給numl賦值

numl=-5;num2=numl+3;

sum=numl+num2;時(shí),numl的值又變成-5。其

cout?66sum=u?sum?endl;他兩個(gè)變量的變化情況類(lèi)似。

N

Um

2、變量的定義

變量:需要定義,說(shuō)明其存儲(chǔ)屬性和數(shù)據(jù)類(lèi)型。

externdouble

register

auto

例:staticintnward=0,nkayword;

同一語(yǔ)句中,不能混合定義不同類(lèi)型的變量。

*變量的存儲(chǔ)類(lèi)型

■auto存儲(chǔ)類(lèi)

?屬手承矍填立的,其存儲(chǔ)空間可以被若干變

■register存儲(chǔ)類(lèi)

?存放在通用寄存器中。

■extern存儲(chǔ)類(lèi)

?在所有函數(shù)和程序段中都可引用。

■static存儲(chǔ)類(lèi)

?在內(nèi)衣中盤(pán)以圖定地址存放的,在整個(gè)程序

屋仃期間都有效。

變量賦值與初始化

(1)doublearea,radius=23;

(2)doublearea,radius;

radius=23;

2.2.4算術(shù)運(yùn)算符與算術(shù)表達(dá)式

■表達(dá)式:

?一個(gè)常量或標(biāo)識(shí)對(duì)象的標(biāo)識(shí)符是一個(gè)最簡(jiǎn)單的表達(dá)式,其值

是常量或?qū)ο蟮闹?/p>

?一個(gè)表達(dá)式的值可以用來(lái)參與其它操作,即用作其它運(yùn)算符

的操作數(shù),這就形成了更復(fù)雜的表達(dá)式

?包含在括號(hào)中的表達(dá)式仍是一個(gè)表達(dá)式,其類(lèi)型和值于未加

括號(hào)時(shí)的表達(dá)式相同

-算術(shù)表達(dá)式:

?由算術(shù)運(yùn)算符、操作數(shù)和括號(hào)構(gòu)成的表達(dá)式稱(chēng)為算術(shù)表達(dá)式

?a+b+(c-b)/2+5

■1、基本算術(shù)運(yùn)算符

+-*/%(取余)

4___________(若整數(shù)相除,結(jié)果取

整)

■優(yōu)先級(jí)與結(jié)合性

先乘除,后加減,同級(jí)自左至右

P33

(1)/整除

5/2=2

5.0/2.0=2.5

若/的兩操作數(shù)都為整數(shù),則為整除:

例inti=15;

floatf;

f=i/10;

結(jié)果為:f=l

如果將第三條語(yǔ)句改為

f=(float)i/10;W=i/10.0;

則結(jié)果為:f=L5

在C++語(yǔ)言中,表達(dá)式(7/3+1)+5/6的值是()。

A)2B)3C)4D)不能確定

B

*(2.)%取余

(余的符號(hào)與被除數(shù)相同,不允許對(duì)浮點(diǎn)數(shù)操作)

3%4=34%4=0

例ttinclude<iostream.h>

voidmain()

{intn;

n=40%5;cout<<〃40%5:z/<<n<<endl;//(0)

n=40%7;cout<<〃40%7:<<n<<endl;//(5)

n=40%-7;cout<<〃40%-7:<<n<<endl;//(5)

n=-40%7;cout<<〃-40%7:<<n<<endl;//(-5)

n=-40%-7;cout<<〃-40%-7:<<n<<endl;//(-5)

*2、增量和減量++,

(1.)a++

取a作為表達(dá)式的值,然后a=a+1

(2.)++a

先a=a+1;然后取a作為表達(dá)式的值

(3.)a---取a;a=a—1

(4.)---aa=a—1,取a

例:inta=3;

intb=++a;44

4t4<

cout<<a<<<<b<<endl;54

intc=a++;

cout<<a<<u4<<<c<<endl;

.賦福運(yùn)算二

V賦值運(yùn)算符用于將一個(gè)數(shù)據(jù)傳給一個(gè)變量。

■例如:intx;x=5;將值5傳給變量X。其中二號(hào)即賦值運(yùn)算符。

■A:(1)雙目運(yùn)算符,從右到左d二a二b

.(2)賦值操作是一個(gè)表達(dá)式,

-每個(gè)表達(dá)式在求值后都有一個(gè)確定的值,其值

為賦值號(hào)左邊表達(dá)式的值

■例:cout<<(x=5)<<endl;

-(3)當(dāng)賦值號(hào)兩邊類(lèi)型不一至?xí)r,根據(jù)左邊類(lèi)型轉(zhuǎn)

inta=10;floatx=70000.5;

x=a;

將a的值10賦給x,x的值為lO.Oo

inta=10;floatx=70000.5;a=x;

將x的值70000.5賦給a,但70000.5超過(guò)了int

的取值范圍,于是將超過(guò)的部分扔掉了,a是多少不

知道了。

特別注意,上面的賦值語(yǔ)句,編譯時(shí)是可以通過(guò)的。

*復(fù)合的賦值運(yùn)算符

■有10種復(fù)合運(yùn)算符:

+=,-=,*=,/=,%=,

?=?=&=A=l=

■例:a+=3等價(jià)于a=a+3

等價(jià)于x=x*(y+8)

賦值運(yùn)算符和賦值表達(dá)式

—賦值表達(dá)式舉例

a=5表達(dá)式值為5

a=b=c=5表達(dá)式值為5‘a(chǎn)’b,c均為5

a=5+(c=6)表達(dá)式值為11,a為11,c為6

a=(b=4)+(c=6)

表達(dá)式值為10,a為10,b為4,c為6

a=(b=10)/(c=2)

表達(dá)式值為5,a為5,b為10,c為2

a+=a-=a*a相當(dāng)于:a=a+(a=a?a*a)

例:x=6;

B

x+二X-=x*x;

若X為整型變量,則上述語(yǔ)句執(zhí)行后x的值是—(4)_。

A.36B.-60C.60D.—24

4、逗號(hào)運(yùn)算和逗號(hào)表達(dá)式

■格式:

表達(dá)式1,表達(dá)式2

■求解順序及結(jié)果:

先求解1,再求解2,最終結(jié)果為表達(dá)式2的值

■例1

a=3*5.a*4最終結(jié)果為60

例2inta,b,c;

d=(a=l,b=a+2,c=b+3);

cout?d?endl;

6

*、關(guān)系運(yùn)算與關(guān)系表達(dá)式

-用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來(lái),就是關(guān)系表達(dá)

-關(guān)系運(yùn)算是比較簡(jiǎn)單的一種邏輯運(yùn)算,優(yōu)先次序?yàn)椋?/p>

vv=>>===!=

優(yōu)先級(jí)相同(高)優(yōu)先級(jí)相同(低)

-關(guān)系表達(dá)式是一種最簡(jiǎn)單的邏輯表達(dá)式

其結(jié)果類(lèi)型為bool,值只能為true或false0

■例如:a>b,c<=a+b,x+y==3

*邏輯運(yùn)算與邏輯表達(dá)式

-邏輯運(yùn)算符:

!(非)&&(與)||(或)

優(yōu)先次序:高一低

-邏輯表達(dá)式

例如:(a>b)&&(x>y)

其結(jié)果類(lèi)型為bool,值只能為true或

falseo

*

a!a

truefalse

falsetrue

aba||b

111

101

011

000

優(yōu)先級(jí):

*/%;

+-;

><>=<=

&&

注意:

(1).比較運(yùn)算符

==與=

if(x==9)

cout<<“xisnoto'n";

if(x=9)

cout<<“Xisnoto'n"

(2).不等于運(yùn)算符

if(x!=9)

if(x=!9)

*

(3).邏輯非

if(!(x==9))

例.!cx>ax—6若cx=15,ax=5

(!ex)>(ax—6)

!(cx>ax—6)

(4).10>=X>=5

若寫(xiě)成5<=X<=10從左到右(衡為1)

X>=5&&X<=10

例:a<b&&x>y||a<b-!c

(a<b)&&(x>y)||(a<(b-(!c))

若x,y,z的初值均為1,則執(zhí)行表達(dá)式w=++x||++y&&++z

后,x,y,z的值分別為o

A)x=l,y=l,z=2B)x=2,y=2,z=2

C)x=2,y=l,z=2D)x=2,y=l,z=l(D)

*6、條件運(yùn)算符與條件表達(dá)式

.一般形式:

表達(dá)式1?表達(dá)式2:表達(dá)式3

表達(dá)式1必須是bool類(lèi)型

■執(zhí)行順序:

?先求解表達(dá)式1,

?若表達(dá)式1的值為true,則求解表達(dá)式2,表達(dá)式2的值為

最終結(jié)果

?若表達(dá)式1的值為false,則求解表達(dá)式3,表達(dá)式3的值

為最終結(jié)果

例x=a<b?a:b該例是IF…ELSE語(yǔ)句的一個(gè)替代

if(a<b)

x=a;

else

x=b;

注意:(1)條件運(yùn)算符優(yōu)于賦值運(yùn)算符比關(guān)系運(yùn)算符和算術(shù)運(yùn)算符都低

例max=(a>b)?a:b+l

(2)條件運(yùn)算符的結(jié)合性為“自右向左”

{Ji]a>b?a:c>d?c:d即a>b?a:(c>d?c:d)

(3)條件表達(dá)式與一般if的語(yǔ)句的關(guān)系

cout?a>b?a:b;

(4)表達(dá)式2、3的類(lèi)型可以不同,條件表達(dá)式的最終類(lèi)型為2

和3中較高的類(lèi)型。

/7、sizeof操作符

?語(yǔ)法形式

sizeof(類(lèi)型名)

或sizeof(表達(dá)式)

?結(jié)果值:

“類(lèi)型名”所指定的類(lèi)型或“表達(dá)式”的結(jié)

果類(lèi)型所占的字節(jié)數(shù)。

■例:cout?sizeof(double)?endl;

*8、位運(yùn)算一按位與(&)

-運(yùn)算規(guī)則

?將兩個(gè)運(yùn)算量的每一個(gè)位進(jìn)行邏輯與操作

-舉例:計(jì)算3&5

3:00000011

5:(&)00000101

3&5:00000001

■用途:

?將某一位置0,其它位不變。例如:

將char型變量a的最低位置0:a=a&0376;

?取指定位。

例如:有charc;inta;

取出a的低字節(jié),置于c中:c=a&0377;

*位運(yùn)算——按位或()

-運(yùn)算規(guī)則

?將兩個(gè)運(yùn)算量的每一個(gè)位進(jìn)行邏輯或操作

■舉例:計(jì)算3|5

3:00000011

5:(1)00000101

3|5:00000111

-用途:

?將某些位置1,其它位不變。

例如:將int型變量a的低字節(jié)置1:

a=a|Oxff;

*位運(yùn)算一按位異或O

-運(yùn)算規(guī)則

?兩個(gè)操作數(shù)進(jìn)行異或:

若對(duì)應(yīng)位相同,則結(jié)果該位為0,

若對(duì)應(yīng)位不同,則結(jié)果該位為1,

■舉例:計(jì)算07廠例2

071:00111001

052:「)00101010

07T052:00010011

*位運(yùn)算一按位異或C)

■用途:

?使特定位翻轉(zhuǎn)(與0異或保持原值,與I異或取反)

例如:要使01111010低四位翻轉(zhuǎn):

01111010

n00001111

01110101

*位運(yùn)算―取反(?)

單目運(yùn)算符:對(duì)一個(gè)二進(jìn)制數(shù)按位取反。

例:025:0000000000010101

?025:1111111111101010

*位運(yùn)算一移位

.左移運(yùn)算(?)

左移后,低位補(bǔ)0,高位舍棄。

.右移運(yùn)算(?)

右移后,低位:舍棄

高位:無(wú)符號(hào)數(shù):補(bǔ)0

有符號(hào)數(shù):補(bǔ)“符號(hào)位”

★例1:

■chara=-8;

■cout?int(a)?endl;

■cout?(a?2)?endl;

11111000

11111110

oo

o

o

oo

oo

2oo

oo

oo

v

v

CM

*9、運(yùn)算符優(yōu)先級(jí)

括號(hào)高

++,■?,sizeof

*,/,%

十,■

——?I-

JB

位運(yùn)算

&&

II

?;

限值運(yùn)算

逗號(hào)運(yùn)算

10、混合運(yùn)算時(shí)數(shù)據(jù)類(lèi)型的轉(zhuǎn)換

**——隱含轉(zhuǎn)換

■一些二元運(yùn)算符(算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算

符和賦值運(yùn)算符)要求兩個(gè)操作數(shù)的類(lèi)型一致。

■在算術(shù)運(yùn)算和關(guān)系運(yùn)算中如果參與運(yùn)算的操作數(shù)類(lèi)型不一致,編譯

系統(tǒng)會(huì)自動(dòng)對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換(即隱含轉(zhuǎn)換),基本原則是將低類(lèi)型

數(shù)據(jù)轉(zhuǎn)換為高類(lèi)型數(shù)據(jù)。

charshortintunsignedlongunsignedlongfloatdouble

低高

混合運(yùn)算時(shí)數(shù)據(jù)類(lèi)型的轉(zhuǎn)換

*——隱含轉(zhuǎn)換

-邏輯運(yùn)算要求參與運(yùn)算的操作數(shù)必須是bool型,如果操

作數(shù)是其它類(lèi)型,編譯系統(tǒng)會(huì)自動(dòng)將非。數(shù)據(jù)轉(zhuǎn)換為true,

0轉(zhuǎn)換為false。

■位運(yùn)算的操作數(shù)必須是整數(shù),當(dāng)二元位運(yùn)算的操作數(shù)是

不同類(lèi)型的整數(shù)時(shí),也會(huì)自動(dòng)進(jìn)行類(lèi)型轉(zhuǎn)換,

■賦值運(yùn)算要求左值與右值的類(lèi)型相同,若類(lèi)型不同,編

譯系統(tǒng)會(huì)自動(dòng)律將右值轉(zhuǎn)換為左值的類(lèi)型。

★混合運(yùn)算時(shí)數(shù)據(jù)類(lèi)型的轉(zhuǎn)換

——強(qiáng)制類(lèi)型轉(zhuǎn)換

■語(yǔ)法形式:

類(lèi)型說(shuō)明符(表達(dá)式)

(類(lèi)型說(shuō)明符)表達(dá)式

-強(qiáng)制類(lèi)型轉(zhuǎn)換的作用是將表達(dá)式的結(jié)果類(lèi)型轉(zhuǎn)換

為類(lèi)型說(shuō)明符所指定的類(lèi)型。

注:inta=16,b=5;

floatx=10;

x=(float)a+a/b;(19.0)

*2.3賦值語(yǔ)句

■格式:

賦值表達(dá)式;

.賦值語(yǔ)句與賦值表達(dá)式的區(qū)別:

賦值表達(dá)式可以包含在其它表達(dá)式中,

而賦值語(yǔ)句不可。

例:if((a=b)>0)t=a;

不可寫(xiě)為:if((a=b;)>O)t=a;

*2.4簡(jiǎn)單的輸入、輸出

這是C++中新加的非常簡(jiǎn)單易用的輸入、輸出方式,

C++中沒(méi)有專(zhuān)門(mén)的輸入輸出語(yǔ)句,是用I/O流類(lèi)來(lái)實(shí)現(xiàn)。

在程序的開(kāi)頭增加一行:

#include<iostream.h>

1)用插入操作符“VV”向標(biāo)準(zhǔn)輸出流cout中插入字符。

?向標(biāo)準(zhǔn)輸出設(shè)備(顯示器)輸出

例:intx;

cout?ux=u?x;

2)用抽取操作符“>>”從標(biāo)準(zhǔn)輸入流cin中抽取字符

?從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤(pán))輸入

例:intx;

cin?x;

inta,b;

cin?a?b;

3)使用控制符

有時(shí)缺省輸出格式不能滿(mǎn)足要求,這時(shí)可以用控制符控制輸出的格

式。P36表2?6o

在程序的開(kāi)頭增加一行:

#include<iomanip.h>

■#include<iostream.h>

■#include<iomanip.h>

■voidmain()

■cout?setw(5)?setprecision(3)?3.1415?endl;

■)

■3.14

2.5算法的基本控制結(jié)構(gòu)

問(wèn)題的提出:(1)-1(x<0)

y=o(x=o)

1(x>0)

(2)統(tǒng)計(jì)任意一個(gè)人群的平均身高

算法

算法的基本控制結(jié)構(gòu):

順序結(jié)構(gòu)

?分支結(jié)構(gòu)

循環(huán)結(jié)構(gòu)

.程序流程圖

★★2.4.1if語(yǔ)句

—三種形式

(表達(dá)式)語(yǔ)句

例:if(x>y)cout?x;

if(表達(dá)式)語(yǔ)句1else語(yǔ)句2

例:if(x>y)cout?x;

elsecout?y;

if(表達(dá)式1)語(yǔ)句1

elseif(表達(dá)式2)語(yǔ)句2

elseif(表達(dá)式3)語(yǔ)句3

else語(yǔ)句n

1.IF(條件表達(dá)式)

語(yǔ)句;

或IF(條件表達(dá)式)

{語(yǔ)句;

或IF(條件表達(dá)式);空語(yǔ)句作IF中的語(yǔ)句

語(yǔ)句;

例(判輸入是否合理)

ttinclude<iostream.h>

voidmain()

{unsignedintage;

cout<<"Whatisthestudent,sage...

cin>>age;

if(age<10)

cout<<"Theagemaybewrong”;

例判閏年

ttinclude<iostream.h>

voidmain()

{intyear;

cout<<"Pleaseinputayear...”;

cin>>year;

//thinkaboutthesequenceofthelogicalexpression

if(year%4==0&&year%100!=0||year%400==0)

cout<<〃Theyearisleapyear〃;

else

cout<<"Theyearisn'tleapyear

if語(yǔ)句

*-----嵌套

-一般形式

if()

if()語(yǔ)句1

else語(yǔ)句2

else

if()語(yǔ)句3

else語(yǔ)句4

■注意

語(yǔ)句1、2、3、4可以是復(fù)合語(yǔ)句,每層的if與

else配對(duì),或用{}來(lái)確定層次關(guān)系。

intx=20;

If語(yǔ)句的嵌套二義性

if(x>=0)

if(x<50)因?yàn)閕f可以嵌套,所有在嵌套時(shí)有時(shí)會(huì)出歧義,

cout?66xisok\nw;例如上例中,else是與第一個(gè)if配對(duì),

else還是與第二個(gè)if配對(duì)?

cout?66xisnotok\n^^;這種時(shí)候,系統(tǒng)就認(rèn)為:else與最近的一個(gè)if相對(duì)應(yīng)

二冰K

if(I%3==0)

if(I%7==0)

coutVVIVVendl;〃輸出能被3整除,能被7整除

else

cout?I<<endl;〃輸出能被3整除,不能被7整除

(2)if(I%3==0)

{if(I%7==0)

cout?I?endl;〃輸出能被3整除,能被7整除

}

else

cout?I<<endl;//輸出不能被3整除不管是否被7整除

*

例2?3

輸入兩個(gè)整數(shù),比較兩個(gè)數(shù)的大小。

*#i*nclude<iostream.h>

voidmain()

(

int*,y;

cout?nEnterxandy:n;

cin?x?y;

if(x!=y)

if(x>y)

cout?nx>yn?endl;

else

cout?nx<yn?endl;

else

cout?nx=yn?endl;

)

運(yùn)行結(jié)果1:

Enterxandy:58

x<y

運(yùn)行結(jié)果2:

Enterxandy:88

x=y

運(yùn)行結(jié)果3:

Enterxandy:128

x>y

■功能:在三個(gè)數(shù)中取最大的

■#include<iostream.h>

■voidmain()

■{intx,y,z;

■cin?x?y?z;

■intmax=x;

■if(z>y)

■{if(z>x)

rout?max

■max=z;}

■else

{if(y>x)

■#include<iostream.h>

■voidmain()

■intx,y,z;

■cin?x?y?z;

■intmax=x;

■If(y>max)

■max=y;

■if(z>max)

max=z;

amount<10

//total=5.Mamount10<=amount<=100

5.68*0.95*amountamount>100

鏟就Feaf昨h>

voidmain()

unsignedintamount=0;

floattotal=0;

cout?nPleaseinputanumber:n;

cin?amount;

if(amount<10)

total=5.88*long(amount);

else

if(amount<=100)

total=5.68*long(amount);

else

total=5.68*0.95*long(amount);

cout?"Paythemoney:n?total?nPleasen;

★如何解決多分之問(wèn)題?

if(條件1)

語(yǔ)句1;

elseif(條件2)

語(yǔ)句2;

elseif(條件3)

語(yǔ)句3;

語(yǔ)句N(xiāo);

intgrade;

if(grade>=85&&grade<=l00)

cout?wa\n,9;

elseif(grade>=70&&grade<85)

cout?Mb\nw;

elseif(grade>=60&&grade<75)

coutvv"c\n”;

elseif(grade<60)

cout?66d\nw;

else

coutvv“eiror\n”;

2.4.2switch語(yǔ)句

-一般形式

switch(表達(dá)式)可以是整型、字符型、枚舉型

case常量表達(dá)式1語(yǔ)句1

常量表達(dá)式

case2每個(gè)常量表達(dá)式的值

不能相同,次序不影

case常量表達(dá)式n語(yǔ)句n響執(zhí)行結(jié)果。

default:語(yǔ)句n+

可以是多個(gè)語(yǔ)句,但不

執(zhí)行順序必用{}。

以case中的常量表達(dá)式值為入口標(biāo)號(hào),由此開(kāi)始順序執(zhí)

行。因此,每個(gè)case分支最后應(yīng)該加break語(yǔ)句。

switch(表達(dá)式)

case常量表達(dá)式1:語(yǔ)句組1

case常量表達(dá)式2:語(yǔ)句組2

???

case常量表達(dá)式N:語(yǔ)句組N

default::語(yǔ)句組N+1

*特殊的多分支結(jié)構(gòu)

例2?4

輸入一個(gè)0~6的整數(shù),轉(zhuǎn)換成星期輸出。

#include<iostream.h>

voidmain(void)

{intday;

cin?day;

switch(day)

(

case0:cout?"Sunday"?endl;

break;

case1:cout?"Monday"?endl;

break;

case2:cout?"Tuesday"?endl;

break;

¥cas*e3:cout?"Wednesday"?endl;

break;

case4:cout?"Thursday"?endl;

break;

case5:cout?"Friday"?endl;

break;

case6:cout?"Saturday"?endl;

break;

default:

cout?"DayoutofrangeSunday..Saturday"

?endl;

break;

}

)

使用switch語(yǔ)句應(yīng)注意的問(wèn)題

(1)switch后面的(表達(dá)式)只能是整型、字符型或枚舉型,

case常量表達(dá)式的類(lèi)型應(yīng)與其匹配。

floatf=4.0

switch(f)

(2)當(dāng)表達(dá)式的值等于某一個(gè)case后面的“常量表達(dá)式”時(shí),就執(zhí)行此case

后面的語(yǔ)句;當(dāng)所有case后面的“常量表達(dá)式”時(shí)都沒(méi)有與表達(dá)式的值相

則執(zhí)行default后面的語(yǔ)句,如沒(méi)有default語(yǔ)句則跳過(guò)switch語(yǔ)句

case語(yǔ)句起標(biāo)方作用:

(A)標(biāo)號(hào)不能重名

case6A9:cout?.....;

case65:cout?.....;

(B)不改變控制流程,力Inbreak中止switch

case'A':cout〈〈“85T00\n”;break;

case'B':cout〈〈“70-84\n'';break;

case'C':cout<<“60-69\n”;break;

(C)各個(gè)case(包括default)的出現(xiàn)次序可以任意(力Dbrealk)

(D)多個(gè)case可以共用一組執(zhí)行語(yǔ)句

case,A':

case,B':

case,C':cout〈〈”60up\n99;break;

但:case'A',6B9,6C9:cout<<6660up\nw;break;(錯(cuò))

(4)switch可以嵌套

inti,j

switch(i)

(

case1:........

case2:........

case3:

switch(j)

case1:

caes2:

)

case4:...

}

與可以互相補(bǔ)沖

(5)ifswitchcase100:

intgrade;

if(grade>=85&&grade<=l00)case99

coutvv"a\n”;

elseif(grade>=70&&grade<85)

coutvv"b\n";case85:coutvv“a\n”;

elseif(grade>=60&&grade<75)case84:

cout?Mc\nw;

elseif(grade<60)case83:

cout?ud\n,9;

else

coutw“error'll";case75:cout?66b\nw;

#include<iostream.h>

#lifcHae=<stdtin;h>

voidmain()

{floatnuml,num2,result;charoper;

cin?numl?oper?num2;

switch(oper)

{caseresult=numl+num2;break;

caseresult=numl-num2;break;

caseresult=numl*num2;break;

caseresult=numl/num2;break;

default:cout?n\nillegaloperator11;exit(l);

cout?result;

軍港口何有效地完成重復(fù)

1、while語(yǔ)句

?形式

while(表達(dá)式)語(yǔ)句

執(zhí)行順序

先判斷表達(dá)式的值,為true時(shí),再執(zhí)行語(yǔ)句。

例2?5

求自然數(shù)1~10之和

分析:本題需要用累加算法,累加過(guò)程是一個(gè)循環(huán)

過(guò)程,可以用while語(yǔ)句實(shí)現(xiàn)。

includ*os京am.h>

oidmain()

inti(1),sum(O);初始化(循環(huán)變量)

while(i<=10)繼續(xù)條件

sum+=i;

循環(huán)體

i++;

)改變循環(huán)變量

cout?"sum="?sum

?endl;

)運(yùn)行結(jié)果:

sum=55

whi1e(i<=10)whi1e(sum+=i++,iV=l0);

sum+=i++;

do-while語(yǔ)句

?一般形式

do

while

執(zhí)行順序

先執(zhí)行循環(huán)體語(yǔ)句,后判斷條件。

表達(dá)式為true時(shí),繼續(xù)執(zhí)行循環(huán)體

與while語(yǔ)句的比較:

While語(yǔ)句執(zhí)行順序

先判斷表達(dá)式的值,為true時(shí),

再執(zhí)行語(yǔ)句

例2?6

輸入一個(gè)整數(shù),將各位數(shù)字反轉(zhuǎn)后輸出。

#includetream.h>

voidmain(void)

intnrright__digit,newnum=0;

cout?"Enterthenumber:

cin?n;

cou

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論