已閱讀5頁,還剩69頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第三講 指針引用運算符語句,2,本講內容,上次作業(yè)講解 指針及其應用 引用 運算符 循環(huán)語句 本講作業(yè),3.1 指針和引用,指針 指針和數組 引用,指針,具有指針類型的變量統(tǒng)稱為指針變量。 指針變量所表示的數據值是某個變量在內存中的地址值。稱這個指針指向該變量。 指針的類型是它所指向變量的類型,而不是指針本身數據值的類型,因為任何指針本身數據值的類型都是unsigned long int型。 如: int a=5; int *p= /定義一個指向整型變量空間的指針,并初始化為整型變量a的起始地址,使p指向a。,1、指針概念,2、指針的定義,格式為: *; 例如: int *pi; /一個指向整型變量的指針 float *pl; char *pc; char (*pa)3; /一個指向數組空間的指針 int *pp; /一個指向指針變量空間的指針 注:類型的不同,并不影響指針本身空間大小的不同(都是內存地址值),但卻決定了指針所指向的空間的不同,也帶來了對指針所指向空間的不同操作。,一、賦值運算 定義一個指針后,必須先給它賦值后才能引用,否則易出錯。 如: int a=1,*p1, *p2; p1= /給p2所指向的變量賦值,3、指針的運算,1,2,3,此處無,代表取值,二、加一或減一運算 如: int a10,*p; p=a; /p指向數組a中的a0元素 p=p+1; /這時p指向a1,三、相減運算(一定條件下) 如: int a10,*p1,*p2; p1= /所得為指針間相隔的元素個數,0x00428D54,指針地址是無符號長整形:4 byte,C+中,數組元素可以用下標表示也可用指針表示。 1、一維數組的指針表示 如: int a5; a2=3; /下標表示 ai *(a+2)=3; /指針表示 *(a+i) 其中a是數組名,C+規(guī)定數組名是一個常量指針,其值是該數組首元素的地址值。 如: int a5,*p; p=a;/與p= /錯誤!為什么?,指針和數組,2、二維數組的指針表示 如: int b34; b23=3; /下標表示 bij *(*(b+2)+3)=3; /指針表示 *(*(b+i)+j) 其中b是二維數組名, 對于b而言,b0等是其元素,但要注意這些元素的類型并不是int型,而是相當于int 3型。 因此,我們稱b0等為第0行。 其中b0行中有b00 b02三個元素,注意這些元素的類型才是int型。 則有以下表示方式: b12 *(b1+2) (*(b+1)2 *(*(b+1)+2),#include “iostream.h“ void main() int a12,*p=a; for(int i=0;i12;i+) *p=i+1; /元素賦值 if(i%4=0)coutendl; cout*p“t“; p=p+1; ,a12,p,a0,a1,a2,a9,a10,a11,*p a0,指針下跳1, *p a1,給一維數組賦值并按每4個一行方式輸出,a23,a00,int a34; int *pa=a00; /指針指向數組首元素 for(int i=1;i=12;i+) *pa=i; /給元素賦值 cout*pa“t“; / 輸出元素的值 pa=pa+1; /指針往下走一單元 /如果是4的倍數換行 if(i%4=0)coutendl; ,給二維數組賦值并按每4個一行方式輸出,行i,組j,列k,a,b,c,d,0,u,v,w,x,0,s6,p,char s6=“abcde“; char *p=s; coutp“or“s; p=p+1; coutp;,例3.1 #include void main( ) static int a5=5,4,3,2,1; int i , j; i=a0+a4; /下標表示 j=*(a+2)+*(a+4); /指針表示 couti“t“j; int *pa=a; pa=pa+1;/pa=?*pa=? pa+; ;/pa=?*pa=? a0、a1、a2=? ,6 4,1005 4,1009 3,5 4 3,例3.2 #include void main( ) static int b 4=1,2,3,4,5,6; b02=7;b12=8; cout*b“t“*(b+1) )“n“; cout*(*b+1)“t“*(*(b+1)+2) “n“; coutb02+b12+b22; ,7,8,輸出結果為:1 4 2 8 15,#include “iostream.h“ void main() static char s1=“abcde“,s25=m,n,p,q,0; char *ps=s1; couts1“ or “s2endl; coutpsn; couts21s22s13s14endl; cout*ps*(ps+2)*(ps+4)*ps+2; ,abcde or mnpq abcde npde ace99,S1,S2,ps,int A4,A0,A1,A2,A3,1000,1004,1008,100C,int B44,B0,B1,B2,B3,用數組存放26個字母并輸出,#include “iostream.h“ void main() char s 26; for(int i=0;i26;i+) si=A+i;/ si=65+i /給數組元素賦值 coutsi“ “; /輸出數組 ,A B C D E F G H I J K L M N O P Q,引用作為一種數據類型,通常被認為是另一種變量的別名。 其定義格式為: 則m是對a的一個引用,所有對m的操作都是對a的操作。 注意:引用必須初始化,且一旦被初始化后不能再被重新賦值。即不能改變引用目標。,3.2 引用,8,引用可以針對一個常量。 如: int ,3.3 運算符,算術運算符 關系運算符 邏輯運算符 位操作運算符 賦值運算符 其他運算符 運算符的優(yōu)先級和結合性,算術運算符,單目運算符(-(負) 雙目運算符(+(加)、-(減)、*(乘)、/(除)、%(模,求余) 優(yōu)先級為: 負號級別最高,其次為* / %,再就是+ -。 要求: 操作數為數值型數據 其中%要求為整型 /與%的第二操作數不為0 特別注意“/”,當分子分母都是整數是做整除!,1、普通算術運算符,2、增1和減1運算符 增量操作表示加1,減量操作表示減1。 如:int a=4; a+; /等效于a=a+1; +a; /等效于a=a+1; a-; /等效于a=a-1; -a; /等效于a=a-1; 增量操作符有前增量與后增量之分。 前增量操作+a的意義為:先修改操作數的值再將增1后的a值作為表達式的值。 而后增量操作a+的意義為:先將a的值作為表達式的值確定下來,再將a增1。,如: int a=3; int b=+a; int c=a+; 則:a:5,b:4,c:4。 相應的,有-a和a-。 增量和減量操作符都是單目操作符。,近水樓臺先得月,3,4,5,4,4,4,關系運算符,C+提供了6種關系運算符: (小于)、(大于)、=(小于等于)、 =(大于等于)、 = =(等于)、!=(不等于) 關系運算符都是雙目運算符。 優(yōu)先級: 、=、 =四種比= =、!=兩種要高 要求: 兩個操作數為同一類型 其結果值為1(代表邏輯真)或0(代表邏輯假)。,邏輯運算符,三種邏輯運算符: &(邏輯與)、|(邏輯或)、!(邏輯非)。 其中邏輯非為單目運算符,邏輯與和邏輯或為雙目運算符。 優(yōu)先級: !的優(yōu)先級最高,而&又比|要高。 邏輯表達式中的操作數是作為邏輯量,但C+并不專門提供邏輯類型,只用1與0來代表邏輯結果真與假。對于參與邏輯運算的操作數,其值為0代表邏輯假,為非0時代表邏輯真。 如: ?。╝= =9),位操作運算符,位運算是指直接對int型或char型數據的各位進行運算。 C+中的位運算符有兩類: 1、按位邏輯運算符 共有四種: (按位取反運算符) 、(按位與運算符)& (按位異或運算符)、(按位或運算符)| 如:a:01101110,則a為10010001 (按位取反) 如:a:10101101,b:11001011 則:a&b為10001001 (都為1時才為1) ab為01100110 (同號為0,異號為1) a|b為11101111 (都為0時才為0) 優(yōu)先級:高于&,&高于,高于|。,2、移位運算符() 移位運算是指將一個操作數中的各位都向左(用)移動若干位。 如: a:10001101 則: a4為00001000,賦值運算符,如: I=j=k=5; 則等效于: k=5;j=k;I=j; 當賦值號兩邊的數據類型不一致時,編譯器會在賦值前將右操作數自動轉換為同左操作數相同的類型。 如: int a=3.14; /a:3 注意: 1、賦值運算符=與比較運算符= =的混淆。 2、int x=1; 與int x; x=1;在概念上的區(qū)別。,在C+中,將算術運算符、位運算符同賦值運算符結合可形成復合賦值運算符。 一共有十種: +=、-=、*=、/=、%=、=、 &=、=、|=。 如: a+=b 等效于 a=a+b 注意: 運算時右邊的表達式是被作為一個整體參與運算的。 如: a*=3+b 等效于 a=a*(3+b) 而不是等效于 a=a*3+b,x=015 00001101 y=0x2b 00101011 x|y 00101111 47 xy 00100110 38 x&y 00001001 9 x 1 1 1 1 0 0 1 0 y 1 1 0 1 0 1 0 0 x+y 10 0 0 0 0 1 1 0 x=4 0000 00102,例題:位運算,已知:unsigned int x=015,y=0x2b,A: !a,int a(5),b(3);求表達式、a、b的值,9,1,0,5,3,1,5,3,3,1,3,15,10,4,8,8,3,1,5,3,簡稱:短路,A: d+-rd; B: *pd*rd; C: +*pd-rd; D: +rd-d;,int d(5),*pd=&d,&rd=d,求表達式的值,A:0 B: 25 C:0 D: 0;,其他運算符,1、條件運算符 語法為: (條件表達式)?(條件為真時的表達式) :(條件為假時的表達式) 如: x=ab? a : b; /實現(xiàn)把a和b 中較小的值賦給x 條件運算符是C+中唯一的一個三目運算符。,2、逗號運算符 語法為: 表達式1,表達式2,表達式n C+將順序計算表達式1,表達式2,表達式n的值。而整個逗號表達式的值是表達式n的值。 如: int a,b,c,d; d=(a=1,b=a+2,c=b+3); 則: a、b、c、d的值分別為1、3、6、6,最后一個表達式的值就是逗號表達式的值,3、強制類型轉換運算符 用來將指定的表達式的值強制為所指定的類型。 格式為:() 或:() 如: int a; double b=3.8921; a= int (b)+(int) b; 則:a值為6 注意: 是對所求表達式的值指定類型,并不是改變b變量的類型。,運算符的優(yōu)先級和結合性,1、優(yōu)先級 共15種優(yōu)先級。分別為: 元素/成員-單目-雙目-三目-賦值-逗號 常用的雙目運算符的優(yōu)先級又分為: 算術-移位-關系-邏輯位-邏輯,2、結合性 大多數為從左至右,只有三類是從右至左。 分別為: 單目、三目和賦值,除最高的元素成員,最低的逗號外,其余的一二三賦值, 對雙目運算:算術關系邏輯 ,移位邏輯位放中間,口訣:,3.5 表達式,表達式的種類 表達式的值和類型 表達式中的類型轉換,表達式的種類,表達式是由運算符和操作數組成的式子。 常見的有如下6種: 算術表達式。如:a+5.2/3.0 邏輯表達式。如:!a&8|7 關系表達式。如:m=n 賦值表達式。如:a=7 條件表達式。如:a4?+a:-a 逗號表達式。如:a+5,a=7,a+=4,表達式的值和類型,任何一個表達式經過計算都應有一個確定的值和類型。 計算一個表達式的值時要注意兩點: 先確定運算符的功能。 再確定計算順序。要注意優(yōu)先級和結合性的影響。 一個表達式的類型由運算符種類和操作數類型來決定。 如:1、算術表達式 int a=7*2+ -3%5-4/3; /a:10 float b=510+3.2e3-5.6/0.03 /b:3523.33 int m(3),n(4); a=m+-( -n); /a:0 m:4 n:3,如:2、關系表達式 char x(m),y(n);int n; n=x3)+(y-x=1); / n:3,如:3、邏輯表達式 int a(3),b(0); !a /a:3 a|b|b+ /b:0 注意:C+規(guī)定:在一個邏輯表達式中,當計算出一個子表達式的值后便可確定整個邏輯表達式的值時,后面的子表達式就不再計算。,簡稱:短路,如:4、條件表達式 int a(3),b(4),c; c=ab?+a:+b; /c:5 c=a-b?a+b:a-3?b:a; /c:8 從右向左結合 c=a-b?a+b:(a-3?b:a); /相當于,如:5、賦值表達式 int x(1),y(3),z(5); /從右向左結合 x+=y*=z-=2; /?(10,9,3) z=(x*=2)+(y+=4)+2; /? (2,7,11),如:6、逗號表達式 int a,b,c; a=1,b=2,c=a+b+3; /c:6 c=(a+,a+=b,a+b); /c:6,表達式中的類型轉換,1、隱含轉換 一般雙目運算中的兩個操作數的類型是要一致,不一致則自動將低類型的數據向高類型轉換,然后再運算并得到高類型的表達式值。 所謂的類型高低關系如下: short,char-int-long-double,float-double 如:3+4.0 a-4 2、強制轉換 將某種類型強制轉換為指定的類型。并分為顯式和隱式兩種。 如:b=a+int(3.14); /顯式轉換 如:int a(5),b; b=a+3.14; /兩次隱式轉換,類型定義,即通過關鍵字typedef來為現(xiàn)有類型取別名。 如:typedef double wages,bonus; 作用: 改善程序的可讀性。(取一個有意義的類型別名) 減少定義變量的過于繁瑣。 提高程序的可移植性。, ,第1行一個 第2行二個 。 第N行N個,int i,j,n; coutn; for(int i=1;i=n;i+) for(j=1;j=i;j+) cout“*“; /打印若干個 coutendl; /換行 , ,for(j=1;j=n-i+1;j+), ,第1行:4個,接著1個,換行 第2行:3個,接著3個,換行 第3行:2個,接著5個,換行 第4行:1個,接著7個,換行 第5行:0個,接著9個,換行,每行的個數:5-i 每行的個數: 2*i-1 每次循環(huán)要做三件事: 先打印(5-i) 個 后,接著打印(2*i-1)個,再換行,for(int i=1;i=5;i+) for(j=1;j=5-i;j+) cout“; /打印若干個 for(k=1;k=2*i-1;k+) cout“; /打印若干個 coutendl; /換行 ,1,2,3,4,7,打印九九乘法口訣表,#include “iostream.h“ #include “iomanip.h“ /manipulate,操作 void main() int i,j; for(i=1;i=9;i+) for(j=1;j=9;j+) couti“*“j“=“setw(2)i*j“ “; coutendl; ,設置后面內容寬度為2,for(j=1;j=10-i;j+),for(j=1;j=i;j+),for(i=1;i=9;i+) for(k=1;k=9-i;k+)cout“ “;/7個空格 for(j=1;j=i;j+) couti“*“(9-i+j)“=“ setw(2)i*(9-i+j)“ “; Coutendl; ,3,2,#include “iostream.h“ #include “iomanip.h“/manipulate,操作 void main() int i,j; for(i=1;i=10;i+) for(j=1;j=11-i;j+) cout“ “;/2個空格 for(j=1;j=i;j+) /限定為兩個位置的長度 coutsetw(2)i“ “; coutendl; ,條件語句格式: if() else if() else if() else if() else,條件語句,格式如下: switch() case: case: case: default: /可無 ,語義為: 根據對整型表達式的計算得到的值,從第一個case常量開始從上到下逐個進行匹配,若相等,則以此為入口,順序向下執(zhí)行各條語句序列。,開關語句,格式如下: switch() case:; break; case:; break; case:;break; default: /可無 ,通過加break強行跳轉語句,在執(zhí)行完第一個語句序列后,就強行跳出switch結構,格式: for(e1;e2;e3),計算e2,執(zhí)行,非0,0,退出 循環(huán),計算e1,計算d3,e1; while(e2) ; e3; ,for循環(huán)語句,格式: break; 該語句在程序中可用于下列兩種情況: 1、在開關語句中,其功能是退出開關語句,執(zhí)行其后的語句; 2、在循環(huán)體中,其功能是用來退出該重循環(huán),break語句,#define M 10 void main() int num,sum(0); coutnum; if(num0) break; sum+=num; cout“sum=“sumendl; ,求10個數之和,遇負數終止,格式: continue; 功能:只用在循環(huán)體中,用來結束該次循環(huán)。 在循環(huán)體中遇到continue語句時,本次循環(huán)結束,回到循環(huán)條件判斷是否執(zhí)行下一次循環(huán)。,continue語句,#define M 10 void main() int num,sum(0); coutnum; if(num0) continue; sum+=num; cout“sum=“sumendl; ,求10個中的正數之和,m是素數的條件是不能被2,3,m-1整除。 long m; coutm; /輸入 for (int I=2;I= m) coutm“is prime.n“; else coutm“isnt prime.n“; /輸出,判斷整數 m其是否為素數,快速算法:判斷它能否被2到sqrt(m)之間的數整除,若不能則是素數。 long m; coutm; int sqrtm=sqrt(m); for (int I=2;I=sqrtm+1) coutm“is prime.n“; else coutm“isnt prime.n“; /輸出,判斷素數的快速算法,分析程序運行結果。 int I(1),a(0); for (;I=5;I+) do i+; a+; while(I3); I+; couta“,“Iendl;,7,本講作業(yè)1,1、編程實現(xiàn)兩個浮點數的四則運算; 2、編程求出50至100之內的素數并輸出; 3、求兩個數的最大公約數和最小公倍數; 4、求一元二次方程ax2+bx+c=0的解; 5、打印如下圖形:,1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6 10 10 10 10 10 10 10 10 10,1、打印以下圖形: A ABC ABCDE ABCDEFG ABCDEFG.S,本講作業(yè)2,2、百錢買百雞。公雞每只7元,母雞每只5元,小雞1元3只,用100地元買100只雞(每種雞都要有),請問公雞母雞小雞各有多少? 3、編程求水仙花數。水仙花數是指一個三位數,如果其各位數的立方和剛好等于該數本身)。如153135333 4、求1000以內的所有完數(指一個數恰好等于它的包括1在內的所有因子之和)。如6123,5、將100元兌換成10、5、1元,有哪些兌換方法?,void main() double d1,d2; char op; double temp; coutd1opd2; switch(op) case+:temp=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度城鎮(zhèn)土地使用權轉讓及配套設施建設合同協(xié)議3篇
- 二零二五年度小額貸款個人信用借款合同范本2篇
- 二零二五年度電子商務銷售結算合同3篇
- 二零二五年度建筑施工安全環(huán)保事故處理協(xié)議3篇
- 二零二五年度個人住宅買賣合同示范范本
- 酒店管理工作中的風險管控
- 醫(yī)院行業(yè)美工的醫(yī)療廣告
- 培訓行業(yè)課程安全操作指南
- 電子工程師的領域探索
- 二零二五年度農產品直銷銷售合同范本
- 《帶一本書去讀研:研究生關鍵學術技能快速入門》筆記
- 知識圖譜智慧樹知到答案2024年浙江大學
- 2024年度-美團新騎手入門培訓
- 高一數學寒假講義(新人教A專用)【復習】第05講 三角函數(學生卷)
- 農村高中思想政治課時政教育研究的中期報告
- 醫(yī)院定崗定編方案文檔
- 4-熔化焊與熱切割作業(yè)基礎知識(一)
- 2023年200MW儲能電站儲能系統(tǒng)設計方案
- 個人安全與社會責任的基本知識概述
- 簡易勞務合同電子版
- 明代文學緒論
評論
0/150
提交評論