第2章 數據類型和表達式_第1頁
第2章 數據類型和表達式_第2頁
第2章 數據類型和表達式_第3頁
第2章 數據類型和表達式_第4頁
第2章 數據類型和表達式_第5頁
已閱讀5頁,還剩53頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第二章 數據類型和表達式2.1 基本數據類型 見表2-1 當有其他修飾符時,int 可以省略 浮點型有單精度類型float,雙精度類型double,長精度類型long double char和int有時統稱為整數類型。char型變量在內存中以字符ASCII碼值存儲。2.2 常量和變量 2.2.1. 常量 1. 整型常量 八進制:以0為前綴 十六進制:以0X或0 x為前綴 cout010endl; /顯示為8 cout0 x10endl; /顯示為16 整型常量以L(或l)后綴表示長整型,以U(u)后綴表示無符號整數,以UL(ul)后綴表示無符號長整數。 2. 浮點型常量 只有十進制表示,有兩種

2、表示:小數表示法, 科學表示法。 F(或f)表示單精度浮點數,L(或l)表示長精度。 #include using namespace std; void main() float i = 2.1; getchar(); getchar(); 編譯后的提示: visual studio 2010projectsmytestmytestmytest.cpp(7): warning C4305: 初始化: 從double到float截斷 float i = 2.1f; 生成成功 3. 字符常量 兩種表示方法: (1)單引號加字符 A + (2)轉義序列表示法, 1) 加ASCII碼值, 其中碼值用

3、三位八進制或二位十六進制表示 八進制 ddd 十六進制 xhh 2) 部分常用字符的轉義序列表示方法見 表2-2(3)字符常量A char ch = A; 等價的用法有: char ch = 101 不能省略單引號 char ch = x41 char ch = 65 是八進制,不是十進制 char ch = 65; int(A) 顯示碼值(4)字符常量 和A相比,多了一種用法 char ch = (4) 字符常量的運算 coutA-B; -1 coutA+1 66 coutchar(A+1) B4. 字符串常量(1)用英文雙引號括起來的序列 “this is ” “abc” “456” “a

4、”b”c” “a” 注意與a的區別,”a”要占2個字節(2) 字符串最后一個字符是0,即空字符,表示字符串結束 char *p = “a”; cout *p+0endl; cout *(p+1)+0endl; 輸出 97 0 (3) 用指針指向字符串或用string類定義變量。 (4) 字符串不能算術操作 “A”-”B” 錯誤6. 符號常量 (1)const const int size =80; 同時給定初值,下面用法錯誤 const int size; size = 80; (2)#define size 802.3 數組 2.3.1 數組的定義 int a3 int b232.3.2 數

5、組的賦值 int a5=1,2,3,4,5 int a =1,2,3,4,5 int a5=1,2,3 int b23 = 1,2,3,4,5,6 int b23 = 1,2,3,4,5,6 int m3; m0=5; m1=3; m2=1; 2.3.3 字符數組 是指數組元素是char型的一種數組,可以存放字符或字符串。 char s14 = a,b,c,d; char s25 = a,b,c,d,0; char s25 = “abcd”; char s2 = “abcd”; char s35 = “abcde”; 錯誤 char ss34 = “abc”,”mnp”,”xyz”; char

6、 ss 4 = “abc”,”mnp”,”xyz”;2.4 枚舉 enum; 每個枚舉符是一個用標識符表示的整型變量,在默認情況下,第一個枚舉符對應0,后一個枚舉符比前一個大1??梢越o枚舉符顯式賦值,隨后的枚舉符依次比前面的大1。 enum colorRED,BLUE=2,YELLOW,BLACK; enum color c1=RED, c2=BLUE, c3=YELLOW; coutc1 c2 c3;2.5 指針和引用 2.5.1 指針 是用來存放某個變量的地址值的一種變量。 *, ,; int *pi; float *pl; char *pc; char (*pa)3 /指向一維數組的指針

7、 int (*pf)(); /指向函數的指針 int *pp; /指針的指針,即二級指針C+規定,數組名是一個常量指針,其值是數組首元素的地址。 int a5; /a為一級指針 int b23; /b為二級指針(1) 一、二指針對數組元素的訪問 int a3 = 1, 3, 5; int b23 = 2, 4, 6, 8, 10, 12; couta0 *(a+0) b00 “ *(*(b+0)+0)endl; couta1“ ”*(a+1)“ ”b11“ ” *(*(b+1)+1)endl; /或*(b1+1) 輸出: 1 1 2 2 3 3 10 10 不同類型的數組可以通過 +整數 訪問

8、 int a3 = 1, 3, 5; double b3 = 1.1, 3.3, 5.5; /int double 在計算機內部的長度不同,都可以如下訪問 cout*a“ ”*(a+1)“ ”*(a+2)endl; /加int的長度 cout*b“ ”*(b+1)“ ”*(b+2)endl; /加double的長度 (2) 指向變量的指針 int a = 2; int *p = &a; coutp *p; 輸出:0012FF60 2(3) 函數指針#include using namespace std;int fun(); /先聲明void main() int (*p)() = f

9、un; /注意fun前沒有&cout(*p)();getchar();getchar();int fun() return 3; 輸出: 3 (4) 指向一維數組的指針 int aa3 = 1, 3, 5,7,9,11; int (*p)3 = aa; /p,aa都是二級指針 cout&aa00 aa0 aa p;輸出:0012FF48 0012FF48 0012FF48 0012FF48 int aa3 = 1, 3, 5; int (*p)3 = &aa; /p,aa分別為二,一級指針 cout&aa0 aa p; 輸出: 0012FF54 0012FF54

10、 0012FF54 int aa3 = 1, 3, 5; int *p = aa; cout&aa0 aa p; 輸出: 0012FF54 0012FF54 0012FF54 (5) 指針數組 數組中的每個元素為指針。 一個定義的實例: int * pa3, pa為二級指針,注意和數組指針區別,int (*pa)3 int a3 = 1,2,3; int *pa3 = &a0, &a1, &a2; cout*pa0 *pa1 *pa2; 輸出: 1 2 3(6) 字符指針 指向字符串的指針。 char *p=abcd,*q;q=mnpq;coutpendlq;輸

11、出: abcd mnpq#include string s = yellow;coutsendl;輸出:yellow2.5.4 引用 引用是某個已知變量或對象的別名。引用不是變量,沒有值和地址,不占內存空間。 創建引用 & = 注意 (1)&是說明符(與取變量地址區別) (2)創建引用的時候要初始化(比較const) int m; int &rm = m; /比較 int *rm = &m; 下面用法錯誤 int m; int &rm; rm=m; 編譯顯示: error C2530: rm必須初始化引用示例: int a = 3; int &m

12、 = a; int n = m; couta m nendl; int *p = &m; m=m+5; cout&a p a mendl; 輸出: 3 3 3 0012FF60 0012FF60 8 81. 引用的功能 用做函數的參數或函數的返回值; 函數不能返回對局部對象的引用;示例:int& f(int index,int a) int r=aindex; return r; /錯誤,改為int &r=aindex; 2. 指針與引用的區別 (1)指針通過地址間接訪問某個變量,引用通過別名直接訪問某個變量;(2)引用必須初始化,一旦被初始化后不得再作為其他變

13、量的別名;2.6.1算術運算符1、普通算術運算符單目算術運算符:-(取負)、+(取正);雙目算術運算符:+、-、*、/、%(只用于int型);單目運算符優先級高于雙目運算符;2、增1和減1運算符單目運算符:+、-;+運算符的兩種方式:前綴方式與后綴方式; int a(1); /int a=1; int c = +a; coutc aendl; int b(1); c = b+; coutc b、=、=、=、!= 前四種優先級高于后兩種;2.6.3邏輯運算符 雙目運算符:&、| 優先級:!、&、| 單目運算符:! &(|):當前一個表達式為假(真),后一個表達式不計算2.

14、6.4位操作運算符1、邏輯位運算符 單目邏輯位運算符: 雙目邏輯位運算符:&、|、 雙目邏輯位運算符的優先級: 、&、|;2、移位運算符 雙目運算符:; 時移掉的位被丟棄,左邊移出的空位補0或符號位;注意區別 ! & & | |示例int i = 7, j= 5;cout(i&j)“ ”(i|j) /要加()或int() (ij)endl;輸出:5 7 2cout(2&0)“ ”(2&2)“ ”(0&0); /要加()輸出:0 1 0int i = 7, j= 5;cout1) (i1)endl;輸出:3 142.6.5賦值運算符

15、 簡單賦值運算符:= 復合賦值運算符:+=、-=、*=、/=、%=、&=、|=、=、=int i = 5;i-=2;couti;輸出:32.6.6其他運算符1、三目運算符 格式:d1?d2:d3 功能:先計算d1,若其非零,表達式的值為d2的值,否則為d3的值; 表達式類型:d2和d3中類型較高者的類型;2、逗號運算符 格式:d1,d2,dn 表達式的值和類型:由最后一個表達式確定; 優先級在所有運算符中最低;3、sizeof運算符2.6.6其他運算符 格式: 功能:返回其后的類型說明符或表達式所表示的數在內存中所占的字節;例如 sizeof(int) int a = 10; size

16、of(a)4、單目運算符&和* &:取地址; *:用在指針名前,表示取指針的內容;5、強制類型運算符sizeof();或sizeof(); 格式: ();或 () ; 強制類型轉換可將高類型轉換為低類型,是一種不安全的轉換;示例:double f(3.85);int h;h=int(f); 該轉換是暫時的,一次性的;示例:int a(3),m;double b;b=3.56+double(a);m=a+5;2.6.7運算符的優先級和結合性 P52,表2.3 4/3 = 1 4.0/3.0 =1.3333 4.0/3 = 1.3333. 5%3 = 2 5%-3 = 2 -5%3

17、 = -2 -5%-3 = -2 表示按位異或,指數用pow(double,int)來計算(#include)。2.7.1表達式的種類 由運算符和操作數組成的式子; 常見的表達式k算術表達式;k邏輯表達式;k關系表達式;k賦值表達式;k條件表達式;k逗號表達式; 注意事項:k連續的兩個運算符之間用空格分隔;k可用括號來改變運算符優先級;k雙目運算符的左右可以用空格符和操作數分開;k過長的表達式可分成幾個表達式;2.7.2表達式的值和類型一、確定表達式的值二、表達式求值方法與確定類型的方法 先確定運算符的功能; 確定計算順序:先考慮優先級,再考慮結合性;例2.11:分析下列程序的輸出結果(算術表

18、達式)。#include void main() unsigned a(0 xab),b(20); a&=b; a=a; coutatby; x=y; x|=yy; y&=x+1; coutxtyendl;輸出:020-1 1例2.12:分析下列程序的輸出結果(關系表達式)。#include void main() char x(m),y(n); int n; n=xy; coutnendl; n=x=y-1; coutn3)+(y-x=1); coutnendl; 輸出:113例2.8:分析下列程序的輸出結果(邏輯表達式)。#include void main() int x

19、,y,z; x=y=z=1; -x&+y&+z; coutxtytzendl; +x&+y&+z; coutxtytzendl; +x&y-|+z; coutxtytzendl; 賦值運算符的結合性是從右到左,表達式的值為右邊變量的值。 &:前一個表達式為假,后一個表達式不計算,同理|輸出:011122212例2.14:分析下列程序的輸出結果(條件表達式)。#include void main() int a(3),b(4),c; c=ab?+a:+b; couta,b,cendl; c=a-b?a+b:a-3?b:a; couta,b,cend

20、l;3,5,53,5,8注意三目運算符的判斷條件輸出例2.15:分析下列程序的輸出結果(賦值表達式)。#include void main() int x(1),y(3),z(5); x+=y*=z-=2; coutx, y, zendl; x*=y/=z-=x; coutx, y, zendl; x=y=z=2; z=(x+=2)+(y+=4)+2; coutx, y“, zendl; 注意5/2 =2 5.0/2.0=2.5輸出:10,9,3-10,-1,-74,6,12例2.16:分析下列程序的輸出結果(逗號表達式)。#include void main() int a,b,c; a=1

21、,b=2,c=a+b+3; couta, b, cendl; c=(a+,a+=b,a+b); couta, b, cendl;逗號表達式的值和類型是組成逗號表達式的最后一個表達式的值和類型。 1,2,64,2,6輸出2.7.3表達式中的類型轉換一、隱含轉換 雙目運算中操作數的類型轉換; 是一種保值轉換,轉換類型由低到高; 轉換規則:int unsigned long unsigned long doubleshort,charfloat int a=2; double b = a + 3.5; 隱式強制轉換:k在賦值表達式中,當左值(賦值運算符左邊的值)和右值(賦值運算符右邊的值) 的類型不

22、同時,一律將右值類型強制轉換為左值的類型;k在函數有返回值的調用中,將return后面的表達式的類型強制轉換為該函數的類型;二、強制轉換 顯式強制轉換(通過強制轉換運算符實現),轉換是暫時的,一次性的。 double f=3.85; int h; h=int(f); 總結: k隱含轉換:在算術運算、邏輯運算符、關系運算符、位運算符這些雙目運算中,低類型向高類型自動轉換。k強制轉換:或加類型轉換符號(顯式),或在賦值表達式,return中類型不一致時的轉換(隱式)。k C+規定高類型向低類型轉換時要強制轉換,否則警告。2.8類型定義1、格式typedef ;例如:typedef double wages,bouns;wages weekly;bouns

溫馨提示

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

評論

0/150

提交評論