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

下載本文檔

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

文檔簡介

第二章

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

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

-C++語言概述

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

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

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

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

*2.1C++語言概述

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

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

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

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

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

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

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

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

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

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

實(shí)用程序。

Bv—BCPLv-CPLv-ALGOL60

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

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

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

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

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

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

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

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

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

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

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

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

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

-全面兼容c

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

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

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

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

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

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

//thisisasimplestprogram.

#include<iostream.h>

voidmain(void)

cout?"Hello!\n";

cout?"Welcometoc++!\n";

)

說明:(i)注解

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

(3)main函數(shù)

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

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

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

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

Hello!

WelcometoC++!

2.1.4C++字符集

語言的最基本單位是字符:

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

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

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

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

-特殊字符:

空格!#%-&*

_(下劃線)+二-

7>/\'〃

7

,()[]{}

*2.1.5詞法記號(hào)

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

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

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

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

類別關(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ī)則

曾以大寫字母、小寫字母或下劃線(_)開始。

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

-大寫字母和小寫字母代表不同的標(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)生的字符)和注釋的總稱。

?C++程序書寫自由

?〃、/**/

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

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

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

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

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

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

邏輯型(布爾型)

數(shù)據(jù)類型數(shù)組

指針

空類型

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

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

型)

枚舉

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

short"ngunsignedsigned

無符號(hào)整型unsignedint

例:無符號(hào)長整型unsignedlong

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

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

類型所占位數(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ù)類型的取值范圍。

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

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

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

O

用睇博(數(shù)據(jù)類型)可以確定數(shù)據(jù)類型的字節(jié)長度

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

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

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

數(shù)據(jù)類型

*常量與變量

#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)常量兩種。

一般常量_____________________

intsum;

讓我們來看右

sum=3+5;

邊的程序段:

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

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

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

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

字符常量

字符串常量

*1、整型常量

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

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

注意它們的書寫形式。

整型常量類型表達(dá)形式有無正負(fù)

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

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

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

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

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

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

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

一般形式0.123

指數(shù)形式123e5

3:

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

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

例:e3

2.1e3.5

.e3

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

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

例34.5f34.5

*3、字符常量

單引號(hào)括起來的一個(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從大寫字母轉(zhuǎn)為小寫字母。

例2:0?0=0

,2,?,0,=2

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

*轉(zhuǎn)義字符

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

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

\n表換行

?無論是不可顯示字符還是一般字符,都可用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語言中是字符串的結(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)括起來的一個(gè)或多個(gè)字符。

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

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

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

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

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

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

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

*5符號(hào)常量

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

圓面積的簡單C程序。其中的就是

main()

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

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

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

floatL,S;“3.14159”來替代PI。

r=10;

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

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

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

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

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

}

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

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

.布爾型變量的說明:

例: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)行過程中,其值

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

/變量名length

變量、變量值23

'變量類型int

1、命名

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

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

類名等C++專用名相同(如char,for,int等)。

注意:

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

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

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

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

用大寫字母;

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

用戶一般不用。

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

B12之類名字。

例:my_car小寫

my_Car駱駝

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

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

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

voidmain()

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

(

行過程中都發(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è)變量的變化情況類似。

N

Um

2、變量的定義

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

externdouble

register

auto

例:staticintnward=0,nkayword;

同一語句中,不能混合定義不同類型的變量。

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

■auto存儲(chǔ)類

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

■register存儲(chǔ)類

?存放在通用寄存器中。

■extern存儲(chǔ)類

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

■static存儲(chǔ)類

?在內(nèi)衣中盤以圖定地址存放的,在整個(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è)最簡單的表達(dá)式,其值

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

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

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

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

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

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

?由算術(shù)運(yùn)算符、操作數(shù)和括號(hào)構(gòu)成的表達(dá)式稱為算術(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

如果將第三條語句改為

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

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

在C++語言中,表達(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)兩邊類型不一至?xí)r,根據(jù)左邊類型轉(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超過了int

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

知道了。

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

*復(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為整型變量,則上述語句執(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á)式連接起來,就是關(guān)系表達(dá)

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

vv=>>===!=

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

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

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

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

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

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

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

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

-邏輯表達(dá)式

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

其結(jié)果類型為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

若寫成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類型

■執(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語句的一個(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的語句的關(guān)系

cout?a>b?a:b;

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

和3中較高的類型。

/7、sizeof操作符

?語法形式

sizeof(類型名)

或sizeof(表達(dá)式)

?結(jié)果值:

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

果類型所占的字節(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)算(?)

右移后,低位:舍棄

高位:無符號(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ù)類型的轉(zhuǎn)換

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

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

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

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

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

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

charshortintunsignedlongunsignedlongfloatdouble

低高

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

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

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

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

0轉(zhuǎn)換為false。

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

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

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

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

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

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

■語法形式:

類型說明符(表達(dá)式)

(類型說明符)表達(dá)式

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

為類型說明符所指定的類型。

注:inta=16,b=5;

floatx=10;

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

*2.3賦值語句

■格式:

賦值表達(dá)式;

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

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

而賦值語句不可。

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

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

*2.4簡單的輸入、輸出

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

C++中沒有專門的輸入輸出語句,是用I/O流類來實(shí)現(xiàn)。

在程序的開頭增加一行:

#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è)備(鍵盤)輸入

例:intx;

cin?x;

inta,b;

cin?a?b;

3)使用控制符

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

式。P36表2?6o

在程序的開頭增加一行:

#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)

問題的提出:(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語句

—三種形式

(表達(dá)式)語句

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

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

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

elsecout?y;

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

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

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

else語句n

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

語句;

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

{語句;

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

語句;

例(判輸入是否合理)

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語句

*-----嵌套

-一般形式

if()

if()語句1

else語句2

else

if()語句3

else語句4

■注意

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

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

intx=20;

If語句的嵌套二義性

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;

★如何解決多分之問題?

if(條件1)

語句1;

elseif(條件2)

語句2;

elseif(條件3)

語句3;

語句N;

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語句

-一般形式

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

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

常量表達(dá)式

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

不能相同,次序不影

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

default:語句n+

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

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

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

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

switch(表達(dá)式)

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

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

???

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

default::語句組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īng)注意的問題

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

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

floatf=4.0

switch(f)

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

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

則執(zhí)行default后面的語句,如沒有default語句則跳過switch語句

case語句起標(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í)行語句

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語句

?形式

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

執(zhí)行順序

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

例2?5

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

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

過程,可以用while語句實(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語句

?一般形式

do

while

執(zhí)行順序

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

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

與while語句的比較:

While語句執(zhí)行順序

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

再執(zhí)行語句

例2?6

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

#includetream.h>

voidmain(void)

intnrright__digit,newnum=0;

cout?"Enterthenumber:

cin?n;

cou

溫馨提示

  • 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)論