版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度店長聘用合同特殊條款適用性分析
- 二零二五年度牛羊草料進(jìn)口代理服務(wù)合同樣本2篇
- 二零二五年度出國留學(xué)學(xué)費(fèi)支付及管理合同4篇
- 二零二五年度城市綠化打井工程監(jiān)理合同8篇
- 2025年度個(gè)人小型挖機(jī)租賃服務(wù)規(guī)范合同4篇
- 二零二五版嬰幼兒奶粉品牌授權(quán)及產(chǎn)品供應(yīng)鏈管理合同4篇
- 2025年度個(gè)人二手車轉(zhuǎn)讓及二手車增值服務(wù)合同
- 二零二五年度木工材料供應(yīng)鏈管理合同4篇
- 2025年度個(gè)人工程車租賃及道路救援服務(wù)合同2篇
- 2025年度個(gè)人車輛購置貸款延期還款合同4篇
- 回收二手機(jī)免責(zé)協(xié)議書模板
- (正式版)JC∕T 60023-2024 石膏條板應(yīng)用技術(shù)規(guī)程
- 人教版高中生物學(xué)新舊教材知識(shí)差異盤點(diǎn)
- (權(quán)變)領(lǐng)導(dǎo)行為理論
- 2024屆上海市浦東新區(qū)高三二模英語卷
- 2024年智慧工地相關(guān)知識(shí)考試試題及答案
- YY/T 0681.2-2010無菌醫(yī)療器械包裝試驗(yàn)方法第2部分:軟性屏障材料的密封強(qiáng)度
- GB/T 8005.2-2011鋁及鋁合金術(shù)語第2部分:化學(xué)分析
- 不動(dòng)產(chǎn)登記實(shí)務(wù)培訓(xùn)教程課件
- 不銹鋼制作合同范本(3篇)
- 2023年系統(tǒng)性硬化病診斷及診療指南
評(píng)論
0/150
提交評(píng)論