指針引用運算符語句課件_第1頁
指針引用運算符語句課件_第2頁
指針引用運算符語句課件_第3頁
指針引用運算符語句課件_第4頁
指針引用運算符語句課件_第5頁
已閱讀5頁,還剩143頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三講

指針引用運算符語句

第三講

指針引用運算符語句本講內(nèi)容上次作業(yè)講解指針及其應(yīng)用引用運算符循環(huán)語句本講作業(yè)2本講內(nèi)容上次作業(yè)講解23.1指針和引用指針指針和數(shù)組引用3.1指針和引用指針3指針

具有指針類型的變量統(tǒng)稱為指針變量。指針變量所表示的數(shù)據(jù)值是某個變量在內(nèi)存中的地址值。稱這個指針指向該變量。

指針的類型是它所指向變量的類型,而不是指針本身數(shù)據(jù)值的類型,因為任何指針本身數(shù)據(jù)值的類型都是unsignedlongint型。

如:

inta=5;int*p=&a;

//定義一個指向整型變量空間的指針,并初始化為整型變量a的起始地址,使p指向a。1、指針概念5p1001a

10012003指針具有指針類型的變量統(tǒng)稱為指針變量。1、指針42、指針的定義格式為:<類型>*<指針變量名>;例如:

int*pi;

//一個指向整型變量的指針

float*pl;

char*pc;char(*pa)[3];

//一個指向數(shù)組空間的指針

int**pp;

//一個指向指針變量空間的指針

注:類型的不同,并不影響指針本身空間大小的不同(都是內(nèi)存地址值),但卻決定了指針?biāo)赶虻目臻g的不同,也帶來了對指針?biāo)赶蚩臻g的不同操作??梢灾赶?,但還未指向P2003100120一個整型空間10012、指針的定義格式為:<類型>*<指針變5一、賦值運算定義一個指針后,必須先給它賦值后才能引用,否則易出錯。

如:

inta=1,*p1,*p2;p1=&a;

//賦給同類型的變量地址值p2=p1;

//賦給同類型的指針變量的值

*p1=2;//給p1所指向的變量賦值*p2=3;//給p2所指向的變量賦值

3、指針的運算P1a*P1*P2P2.123此處無**代表取值一、賦值運算3、指針的運算P1a*P1P26二、加一或減一運算如:inta[10],*p;p=a;//p指向數(shù)組a中的a[0]元素p=p+1;

//這時p指向a[1]三、相減運算(一定條件下)如:

inta[10],*p1,*p2;p1=&a[2];p2=&a[5];

//分別指向數(shù)組中的不同元素

intm=p2-p1;

//所得為指針間相隔的元素個數(shù)P20031001a[0]a100110051009100d1011a[1]a[2]a[3]a[4]P200310050x00428D54指針地址是無符號長整形:4byte二、加一或減一運算三、相減運算(一定條件下)P20031007C++中,數(shù)組元素可以用下標(biāo)表示也可用指針表示。1、一維數(shù)組的指針表示如:

inta[5];

a[2]=3;

//下標(biāo)表示a[i]

*(a+2)=3;

//指針表示*(a+i)其中a是數(shù)組名,C++規(guī)定數(shù)組名是一個常量指針,其值是該數(shù)組首元素的地址值。如:

inta[5],*p;p=a;//與p=&a[0]等效

p=p+1;*p=4;

//將4賦給a[1]

注意:a=a+1;

//錯誤!為什么?指針和數(shù)組C++中,數(shù)組元素可以用下標(biāo)表示也可用指針表示。指針和數(shù)組82、二維數(shù)組的指針表示如:

intb[3][4];b[2][3]=3;//下標(biāo)表示b[i][j]*(*(b+2)+3)=3;

//指針表示*(*(b+i)+j)其中b是二維數(shù)組名,對于b而言,b[0]等是其元素,但要注意這些元素的類型并不是int型,而是相當(dāng)于int[3]型。因此,我們稱b[0]等為第0行。其中b[0]行中有b[0][0]~b[0][2]三個元素,注意這些元素的類型才是int型。則有以下表示方式:

b[1][2]*(b[1]+2)(*(b+1))[2]*(*(b+1)+2)b[0]b[1]b[2]b[0][0]b[0][1]b[0][2]b[0][3]b[1][0]b[1][1]b[1][2]b[1][3]b[2][0]b[2][1]b[2][2]b[2][3]b2、二維數(shù)組的指針表示b[0]b[0][0]b9#include"iostream.h"voidmain(){inta[12],*p=a;for(inti=0;i<12;i++){ *p=i+1;//元素賦值if(i%4==0)cout<<endl; cout<<*p<<"\t"; p=p+1; }}123456789101112a[12]pa[0]a[1]a[2]a[9]a[10]a[11]*pa[0],指針下跳1,*pa[1]給一維數(shù)組賦值并按每4個一行方式輸出#include"iostream.h"12345678910123456789101112a[2][3]a[0][0]inta[3][4];int*pa=&a[0][0];//指針指向數(shù)組首元素for(inti=1;i<=12;i++){

*pa=i;//給元素賦值cout<<*pa<<"\t";//輸出元素的值pa=pa+1;//指針往下走一單元

//如果是4的倍數(shù)換行if(i%4==0)cout<<endl;}給二維數(shù)組賦值并按每4個一行方式輸出123456789101112a[2][3]a[0][0]i11行i組j列kabcd\0uvwx\0abcde\0s[6]pchars[6]="abcde";char*p=s;cout<<p<<"or"<<s;p=p+1;cout<<p;行i組j列kabcd\0uvwx\0abcde\0s[6]p12[例3.1]#include<iostream.h>voidmain(){staticinta[5]={5,4,3,2,1};inti,j;i=a[0]+a[4];//下標(biāo)表示j=*(a+2)+*(a+4);//指針表示cout<<i<<"\t"<<j;int*pa=a;pa=pa+1;//pa=?*pa=?pa++;;//pa=?*pa=?

a[0]、a[1]、a[2]=?}

101154321a[0]a(1001)100110051009100d1011a[1]a[2]a[3]a[4]1009641005410093543[例3.1]10115a[0]a(1001)1001a[1]13

[例3.2]

#include<iostream.h>voidmain(){staticintb[][4]={{1,2,3},{4},{5,6}};b[0][2]=7;b[1][2]=8;cout<<**b<<"\t"<<**(b+1))<<"\n";cout<<*(*b+1)<<"\t"<<*(*(b+1)+2)<<"\n";cout<<b[0][2]+b[1][2]+b[2][2];}b[0]b[1]b[2]b[0][0]b[0][1]b[0][2]b[0][3]b[1][0]b[1][1]b[1][2]b[1][3]b[2][0]b[2][1]b[2][2]b[2][3]b12304000560078輸出結(jié)果為:142815[例3.2]b[0]b[0][0]b178輸14#include"iostream.h"voidmain(){ staticchars1[]="abcde",s2[5]={'m','n','p','q','\0'}; char*ps=s1; cout<<s1<<"or"<<s2<<endl; cout<<ps<<'\n'; cout<<s2[1]<<s2[2]<<s1[3]<<s1[4]<<endl; cout<<*ps<<*(ps+2)<<*(ps+4)<<*ps+2;}abcdeormnpqabcdenpdeace99abcde\0mnpq\0S1S2ps#include"iostream.h"abcdeor15intA[4]A[0]A[1]A[2]A[3]100010041008100CintB[4][4]B[0]B[1]B[2]B[3][0][1][2][3]intA[4]A[0]A[1]A[2]A[3]1000116用數(shù)組存放26個字母并輸出#include"iostream.h"voidmain(){ chars[26]; for(inti=0;i<26;i++){s[i]='A'+i;//s[i]=65+i //給數(shù)組元素賦值cout<<s[i]<<"";//輸出數(shù)組}

}ABCDEFGHIJKLMNOPQ用數(shù)組存放26個字母并輸出ABCDEFGHI17引用作為一種數(shù)據(jù)類型,通常被認為是另一種變量的別名。其定義格式為:

<類型>&<引用名>=<變量名>;如:inta=3;int&m=a;m=m+5;則m是對a的一個引用,所有對m的操作都是對a的操作。注意:引用必須初始化,且一旦被初始化后不能再被重新賦值。即不能改變引用目標(biāo)。3.2引用ma3.8引用作為一種數(shù)據(jù)類型,通常被認為是另一種變量的別名。3.218引用可以針對一個常量。

如:int&d=120;這時,引用的是一個系統(tǒng)為保存常量120而自動建立的臨時變量空間。相當(dāng)于:intt=120;int&d=t;引用可以針對一個常量。193.3運算符算術(shù)運算符關(guān)系運算符邏輯運算符位操作運算符賦值運算符其他運算符運算符的優(yōu)先級和結(jié)合性3.3運算符算術(shù)運算符20算術(shù)運算符單目運算符(-(負))雙目運算符(+(加)、-(減)、*(乘)、/(除)、%(模,求余)優(yōu)先級為:負號級別最高,其次為*/%,再就是+-。要求:操作數(shù)為數(shù)值型數(shù)據(jù)其中%要求為整型/與%的第二操作數(shù)不為0特別注意“/”,當(dāng)分子分母都是整數(shù)是做整除!1、普通算術(shù)運算符算術(shù)運算符單目運算符(-(負))1、普通算術(shù)運算符212、增1和減1運算符增量操作表示加1,減量操作表示減1。如:inta=4;

a++;

//等效于a=a+1;

++a;

//等效于a=a+1;

a--;

//等效于a=a-1;

--a;

//等效于a=a-1;增量操作符有前增量與后增量之分。前增量操作++a的意義為:先修改操作數(shù)的值再將增1后的a值作為表達式的值。而后增量操作a++的意義為:先將a的值作為表達式的值確定下來,再將a增1。2、增1和減1運算符22如:inta=3;intb=++a;intc=a++;則:a:5,b:4,c:4。相應(yīng)的,有--a和a--。增量和減量操作符都是單目操作符。近水樓臺先得月4a值表達式值a值表達式值++aa++345444如:近水樓臺先得月4a值表達式值a值表達式值++aa++3423關(guān)系運算符C++提供了6種關(guān)系運算符:〈(小于)、〉(大于)、〈=(小于等于)、〉=(大于等于)、==(等于)、!=(不等于)

關(guān)系運算符都是雙目運算符。優(yōu)先級:〈、〉、〈=、〉=四種比==、!=兩種要高要求:兩個操作數(shù)為同一類型其結(jié)果值為1(代表邏輯真)或0(代表邏輯假)。關(guān)系運算符C++提供了6種關(guān)系運算符:24邏輯運算符三種邏輯運算符:

&&(邏輯與)、||(邏輯或)、!(邏輯非)。其中邏輯非為單目運算符,邏輯與和邏輯或為雙目運算符。優(yōu)先級:!的優(yōu)先級最高,而&&又比||要高。邏輯表達式中的操作數(shù)是作為邏輯量,但C++并不專門提供邏輯類型,只用1與0來代表邏輯結(jié)果真與假。對于參與邏輯運算的操作數(shù),其值為0代表邏輯假,為非0時代表邏輯真。如:?。╝==9)邏輯運算符三種邏輯運算符:25位操作運算符位運算是指直接對int型或char型數(shù)據(jù)的各位進行運算。C++中的位運算符有兩類:1、按位邏輯運算符共有四種:(按位取反運算符)~、(按位與運算符)&(按位異或運算符)^、(按位或運算符)|如:a:01101110,則~a為10010001(按位取反)如:a:10101101,b:11001011則:a&b為10001001(都為1時才為1)a^b為01100110(同號為0,異號為1)a|b為11101111(都為0時才為0)優(yōu)先級:~高于&,&高于^,^高于|。位操作運算符位運算是指直接對int型或char型數(shù)據(jù)的各位進262、移位運算符(<<、>>)移位運算是指將一個操作數(shù)中的各位都向左(用<<)或向右(用>>)移動若干位。如:a:10001101則:

a<<3為01101000a>>4為000010002、移位運算符(<<、>>)27賦值運算符如:

I=j=k=5;則等效于:

k=5;j=k;I=j;當(dāng)賦值號兩邊的數(shù)據(jù)類型不一致時,編譯器會在賦值前將右操作數(shù)自動轉(zhuǎn)換為同左操作數(shù)相同的類型。如:

inta=3.14;//a:3注意:1、賦值運算符=與比較運算符==的混淆。2、intx=1;

與intx;x=1;在概念上的區(qū)別。

賦值運算符如:28在C++中,將算術(shù)運算符、位運算符同賦值運算符結(jié)合可形成復(fù)合賦值運算符。一共有十種:+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=。如:

a+=b

等效于a=a+b注意:運算時右邊的表達式是被作為一個整體參與運算的。如:

a*=3+b等效于a=a*(3+b)而不是等效于a=a*3+b在C++中,將算術(shù)運算符、位運算符同賦值運算符結(jié)合可形成復(fù)合29x=015=00001101y=0x2b=00101011x|y=0010111147x^y=0010011038x&y=000010019~x=11110010~y=11010100~x+~y=100000110x<<=3=01101000104y>>=4=0000

00102例題:位運算已知:unsignedintx=015,y=0x2bx=015=00001101例題:位運算已知:u30A:!a&&b++B:a||b+4&&a*bC:a=1,b=2,a>b?++a:++bD:++b,a=10,a+5E:a+=b%=a+bb=b%(a+b),a=a+b;F:a!=b>2<=a+1;inta(5),b(3);求表達式、a、b的值910,5,31,5,33,1,315,10,48,8,31,5,3簡稱:短路A:!a&&b++inta(5),b(3);求表達式、a31A:d+-rd;B:*pd*rd;C:++*pd-rd;D:++rd-d;intd(5),*pd=&d,&rd=d,求表達式的值A(chǔ):0B:25C:0D:0;A:d+-rd;intd(5),*pd=&d,&rd=d32其他運算符1、條件運算符語法為:(條件表達式)?(條件為真時的表達式):(條件為假時的表達式)如:x=a<b?a:b;//實現(xiàn)把a和b

中較小的值賦給x條件運算符是C++中唯一的一個三目運算符。

ABTFP其他運算符1、條件運算符ABTFP332、逗號運算符語法為:表達式1,表達式2,…表達式nC++將順序計算表達式1,表達式2,…表達式n的值。而整個逗號表達式的值是表達式n的值。如:

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

則:

a、b、c、d的值分別為1、3、6、6最后一個表達式的值就是逗號表達式的值2、逗號運算符最后一個表達式的值就是逗號表達式的值343、強制類型轉(zhuǎn)換運算符用來將指定的表達式的值強制為所指定的類型。格式為:<類型說明符>(<表達式>)或:(<類型說明符>)<表達式>

如:

inta;doubleb=3.8921;a=int(b)+(int)b;則:a值為6注意:是對所求表達式的值指定類型,并不是改變b變量的類型。3、強制類型轉(zhuǎn)換運算符35運算符的優(yōu)先級和結(jié)合性1、優(yōu)先級共15種優(yōu)先級。分別為:

元素/成員->單目->雙目->三目->賦值->逗號常用的雙目運算符的優(yōu)先級又分為:

算術(shù)->移位->關(guān)系->邏輯位->邏輯

2、結(jié)合性大多數(shù)為從左至右,只有三類是從右至左。分別為:單目、三目和賦值

除最高的元素成員,最低的逗號外,其余的一二三賦值,對雙目運算:算術(shù)關(guān)系邏輯,移位邏輯位放中間口訣:運算符的優(yōu)先級和結(jié)合性1、優(yōu)先級2、結(jié)合性除最高的元素成員,363.5表達式表達式的種類表達式的值和類型表達式中的類型轉(zhuǎn)換3.5表達式表達式的種類37表達式的種類表達式是由運算符和操作數(shù)組成的式子。常見的有如下6種:

算術(shù)表達式。如:a+5.2/3.0邏輯表達式。如:!a&&8||7關(guān)系表達式。如:'m'>='n'賦值表達式。如:a=7條件表達式。如:a>4?++a:--a逗號表達式。如:a+5,a=7,a+=4表達式的種類表達式是由運算符和操作數(shù)組成的式子。38表達式的值和類型任何一個表達式經(jīng)過計算都應(yīng)有一個確定的值和類型。

計算一個表達式的值時要注意兩點:先確定運算符的功能。再確定計算順序。要注意優(yōu)先級和結(jié)合性的影響。一個表達式的類型由運算符種類和操作數(shù)類型來決定。如:1、算術(shù)表達式

inta=7*2+-3%5-4/3;//a:10floatb=510+3.2e3-5.6/0.03//b:3523.33intm(3),n(4);a=m++-(--n);//a:0m:4n:3表達式的值和類型任何一個表達式經(jīng)過計算都應(yīng)有一個確定的值和類39如:2、關(guān)系表達式

charx('m'),y('n');intn;n=x<y;//n:1n=x==y-1;//n:1n=('y'!='Y')+(5>3)+(y-x==1);//n:3如:3、邏輯表達式

inta(3),b(0);!a&&a+b&&a++;//a:3a||b||b++//b:0注意:C++規(guī)定:在一個邏輯表達式中,當(dāng)計算出一個子表達式的值后便可確定整個邏輯表達式的值時,后面的子表達式就不再計算。簡稱:短路如:2、關(guān)系表達式如:3、邏輯表達式簡稱:短路40如:4、條件表達式

inta(3),b(4),c;c=a>b?++a:++b;//c:5c=a-b?a+b:a-3?b:a;//c:8從右向左結(jié)合c=a-b?a+b:(a-3?b:a);//相當(dāng)于如:5、賦值表達式

intx(1),y(3),z(5);//從右向左結(jié)合x+=y*=z-=2;//?(10,9,3)z=(x*=2)+(y+=4)+2;//?(2,7,11)如:6、逗號表達式

inta,b,c;a=1,b=2,c=a+b+3;//c:6c=(a++,a+=b,a+b);//c:6

如:4、條件表達式如:5、賦值表達式如:6、逗號表達式41表達式中的類型轉(zhuǎn)換1、隱含轉(zhuǎn)換一般雙目運算中的兩個操作數(shù)的類型是要一致,不一致則自動將低類型的數(shù)據(jù)向高類型轉(zhuǎn)換,然后再運算并得到高類型的表達式值。所謂的類型高低關(guān)系如下:short,char->int->long->double,float->double如:3+4.0'a'-4

2、強制轉(zhuǎn)換將某種類型強制轉(zhuǎn)換為指定的類型。并分為顯式和隱式兩種。如:b=a+int(3.14);//顯式轉(zhuǎn)換如:inta(5),b;b=a+3.14;//兩次隱式轉(zhuǎn)換表達式中的類型轉(zhuǎn)換1、隱含轉(zhuǎn)換42類型定義即通過關(guān)鍵字typedef來為現(xiàn)有類型取別名。如:typedefdoublewages,bonus;作用:

改善程序的可讀性。(取一個有意義的類型別名)減少定義變量的過于繁瑣。提高程序的可移植性。類型定義即通過關(guān)鍵字typedef來為現(xiàn)有類型取別名。43*********************第1行一個*第2行二個*。。。。。第N行N個*inti,j,n;cout<<"請輸入要打印的行數(shù):";cin>>n;for(inti=1;i<=n;i++){

for(j=1;j<=i;j++)cout<<"*";//打印若干個*

cout<<endl;//換行}*********************for(j=1;j<=n-i+1;j++)*第1行一個*inti,j,n;******for(j=144@@@@*@@@***@@*****@****************第1行:4個@,接著1個*,換行第2行:3個@,接著3個*,換行第3行:2個@,接著5個*,換行第4行:1個@,接著7個*,換行第5行:0個@,接著9個*,換行每行@的個數(shù):5-i每行*的個數(shù):2*i-1每次循環(huán)要做三件事:先打印(5-i)個@后,接著打印(2*i-1)個*,再換行for(inti=1;i<=5;i++){for(j=1;j<=5-i;j++)cout<<"@";//打印若干個@

for(k=1;k<=2*i-1;k++)cout<<"*";//打印若干個*cout<<endl;//換行}@@@@*第1行:4個@,接著1個*,換行每行@的個數(shù):5-4512124634734747打印九九乘法口訣表#include"iostream.h"#include"iomanip.h"http://manipulate,操作voidmain(){inti,j;for(i=1;i<=9;i++) {for(j=1;j<=9;j++) cout<<i<<"*"<<j<<"="<<setw(2)<<i*j<<""; cout<<endl; }}設(shè)置后面內(nèi)容寬度為2for(j=1;j<=10-i;j++)for(j=1;j<=i;j++)打印九九乘法口訣表#include"iostream.h"48for(i=1;i<=9;i++){for(k=1;k<=9-i;k++)cout<<"";//7個空格for(j=1;j<=i;j++)cout<<i<<"*"<<(9-i+j)<<"="<<setw(2)<<i*(9-i+j)<<"";Cout<<endl;}for(i=1;i<=9;i++)49323250#include"iostream.h"#include"iomanip.h"http://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++)

//限定為兩個位置的長度

cout<<setw(2)<<i<<"";

cout<<endl;}}#include"iostream.h"51條件語句格式:if(<條件1>)<語句1>elseif(<條件2>)<語句2>elseif(<條件2>)<語句2>……elseif(<條件n>)<語句n>else<語句n+1>條件語句條件語句格式:條件語句52000<條件1><語句1><條件2><語句2><條件n><語句n><語句n+1>非0非0非0000<條件1><語句1><條件2><語句2><條件n><語53格式如下:switch(<整型表達式>){case<整常型表達式1>:<語句序列1>case<整常型表達式2>:<語句序列2>……case<整常型表達式n>:<語句序列n>default:<語句序列n+1>//可無}語義為:根據(jù)對整型表達式的計算得到的值,從第一個case常量開始從上到下逐個進行匹配,若相等,則以此為入口,順序向下執(zhí)行各條語句序列。開關(guān)語句格式如下:語義為:開關(guān)語句54格式如下:switch(<整型表達式>){case<整常型表達式1>:<語句序列1>;break;case<整常型表達式2>:<語句序列2>;break;……case<整常型表達式n>:<語句序列n>;break;default:<語句序列n+1>//可無}通過加break強行跳轉(zhuǎn)語句,在執(zhí)行完第一個語句序列后,就強行跳出switch結(jié)構(gòu)格式如下:通過加break強行跳轉(zhuǎn)語句,在執(zhí)行完第一個語句序55格式:for(e1;e2;e3)<語句體>計算e2執(zhí)行<語句>非00退出循環(huán)計算e1計算d3e1;while(e2){<語句>;e3;}

for循環(huán)語句格式:計算e2執(zhí)行<語句>非00退出計算e1計算d3e1;f56格式:break;該語句在程序中可用于下列兩種情況:1、在開關(guān)語句中,其功能是退出開關(guān)語句,執(zhí)行其后的語句;2、在循環(huán)體中,其功能是用來退出該重循環(huán)break語句格式:break語句57#defineM10voidmain(){ intnum,sum(0); cout<<"inputnumber:"; for(inti=0;i<M;i++) { cin>>num; if(num<0)break; sum+=num; } cout<<"sum="<<sum<<endl;}求10個數(shù)之和,遇負數(shù)終止#defineM10求10個數(shù)之和,遇負數(shù)終止58格式:continue;功能:只用在循環(huán)體中,用來結(jié)束該次循環(huán)。在循環(huán)體中遇到continue語句時,本次循環(huán)結(jié)束,回到循環(huán)條件判斷是否執(zhí)行下一次循環(huán)。continue語句格式:continue語句59#defineM10voidmain(){ intnum,sum(0); cout<<"inputnumber:"; for(inti=0;i<M;i++) { cin>>num; if(num<0)continue; sum+=num; } cout<<"sum="<<sum<<endl;}求10個中的正數(shù)之和#defineM10求10個中的正數(shù)之和60m是素數(shù)的條件是不能被2,3,…,m-1整除。

longm;cout<<"pleaseinputanumber:\n";cin>>m;//輸入for(intI=2;I<m;I++) if(m%I==0)break;//處理if(I>=m)cout<<m<<"isprime.\n";elsecout<<m<<"isn'tprime.\n";//輸出

判斷整數(shù)

m其是否為素數(shù)m是素數(shù)的條件是不能被2,3,…,m-1整除。判斷整數(shù)

m其61快速算法:判斷它能否被2到sqrt(m)之間的數(shù)整除,若不能則是素數(shù)。

longm;cout<<"pleaseinputanumber:\n";cin>>m;

intsqrtm=sqrt(m);for(intI=2;I<=sqrtm;I++) if(m%I==0)break;//處理if(I>=sqrtm+1)cout<<m<<"isprime.\n";elsecout<<m<<"isn'tprime.\n";//輸出

判斷素數(shù)的快速算法快速算法:判斷它能否被2到sqrt(m)之間的數(shù)整除,若不能62分析程序運行結(jié)果。

intI(1),a(0);for(;I<=5;I++)

{

do{i++; a++;}while(I<3);

I++;

}cout<<a<<","<<I<<endl;

Ia1021i<3成立32i<3不成立45for(;I<=5;I++)6378for(;I<=5;I++)分析程序運行結(jié)果。Ia1021i<3成立32i<3不成立4563本講作業(yè)11、編程實現(xiàn)兩個浮點數(shù)的四則運算;2、編程求出50至100之內(nèi)的素數(shù)并輸出;3、求兩個數(shù)的最大公約數(shù)和最小公倍數(shù);4、求一元二次方程ax2+bx+c=0的解;5、打印如下圖形:122333444455555666666………101010101010101010本講作業(yè)11、編程實現(xiàn)兩個浮點數(shù)的四則運算;641、打印以下圖形:AABCABCDEABCDEFG…ABCDEFG….S本講作業(yè)22、百錢買百雞。公雞每只7元,母雞每只5元,小雞1元3只,用100地元買100只雞(每種雞都要有),請問公雞母雞小雞各有多少?3、編程求水仙花數(shù)。水仙花數(shù)是指一個三位數(shù),如果其各位數(shù)的立方和剛好等于該數(shù)本身)。如153=13+53+334、求1000以內(nèi)的所有完數(shù)(指一個數(shù)恰好等于它的包括1在內(nèi)的所有因子之和)。如6=1+2+35、將100元兌換成10、5、1元,有哪些兌換方法?1、打印以下圖形:本講作業(yè)22、百錢買百雞。公雞每只7元,母65voidmain(){doubled1,d2;charop;doubletemp;cout<<"inputd1opd2:";cin>>d1>>op>>d2;switch(op){case'+':temp=d1+d2;break;case'-':temp=d1-d2;break;case'*':temp=d1*d2;break;case'/':temp=d1/d2;break;default:cout<<"error!\n";}cout<<d1<<op<<d2<<"="<<temp<<endl;}voidmain()66#include<iostream.h>#include<math.h>#defineMIN51#defineMAX100voidmain(){inti,j,k,n(0);for(i=MIN;i<=MAX;i+=2){k=(int)sqrt(double(i));for(j=2;j<=k;j++)if(i%j==0)break;

if(j>=k+1){if(n%6==0)cout<<endl;n++;cout<<""<<i;

}//if

}//forcout<<endl;}//結(jié)束編程求出50至100之內(nèi)的素數(shù)if(j>=k+1)編程求出50至100之內(nèi)的素數(shù)67求兩個數(shù)的最大公約數(shù)inta,b,r;cout<<"輸入第一個數(shù):";cin>>a;cout<<"輸入第二個數(shù):";cin>>b;if(a<b)r=a,a=b,b=r;//交換兩數(shù)r=a%b;while(r) {a=b;b=r;r=a%b;}//輾轉(zhuǎn)相除cout<<"最大公約數(shù):"<<b<<endl;求兩個數(shù)的最大公約數(shù)inta,b,r;68求兩個數(shù)的最小公倍數(shù)inta,b,s;cout<<"輸入第一個數(shù):";cin>>a;cout<<"輸入第二個數(shù):";cin>>b;s=a;while(1) { if(s%b==0)break;s+=a;}cout<<"最小公倍數(shù):"<<s<<endl;求兩個數(shù)的最小公倍數(shù)inta,b,s;69inta,b;cout<<"輸入第一個數(shù):";cin>>a;cout<<"輸入第二個數(shù):";cin>>b;while(a!=b) { if(a>b)a-=b;if(a<b)b-=a; }cout<<"最大公約數(shù):"<<a<<endl;求兩個數(shù)的最大公約數(shù)(2)inta,b;求兩個數(shù)的最大公約數(shù)(2)70inta,b,k;cout<<"輸入第一個數(shù):";cin>>a;cout<<"輸入第二個數(shù):";cin>>b;k=a*b;while(a!=b) { if(a>b)a-=b;if(a<b)b-=a; }cout<<"最小公倍數(shù):"<<k/a<<endl;求兩個數(shù)的最小公倍數(shù)(2)inta,b,k;求兩個數(shù)的最小公倍數(shù)(2)71inta,b;cout<<"輸入第一個數(shù):";cin>>a;cout<<"輸入第二個數(shù):";cin>>b;if(a<b)r=a,a=b,b=r;//交換兩數(shù)for(inti=b;i>=1;i--) if(a%i==0&&b%i==0){cout<<"最大公約數(shù):"<<i<<endl;break;}

求兩個數(shù)的最大公約數(shù)(3)inta,b;求兩個數(shù)的最大公約數(shù)(3)72inta,b,k;cout<<"輸入第一個數(shù):";cin>>a;cout<<"輸入第二個數(shù):";cin>>b;if(a<b)r=a,a=b,b=r;//交換兩數(shù)

for(inti=a;;i++) if(i%a==0&&i%b==0){cout<<"最小公約數(shù):"<<i<<endl;break;}求兩個數(shù)的最小公倍數(shù)(方法3)inta,b,k;求兩個數(shù)的最小公倍數(shù)(方法3)73指針引用運算符語句課件74第三講

指針引用運算符語句

第三講

指針引用運算符語句本講內(nèi)容上次作業(yè)講解指針及其應(yīng)用引用運算符循環(huán)語句本講作業(yè)76本講內(nèi)容上次作業(yè)講解23.1指針和引用指針指針和數(shù)組引用3.1指針和引用指針77指針

具有指針類型的變量統(tǒng)稱為指針變量。指針變量所表示的數(shù)據(jù)值是某個變量在內(nèi)存中的地址值。稱這個指針指向該變量。

指針的類型是它所指向變量的類型,而不是指針本身數(shù)據(jù)值的類型,因為任何指針本身數(shù)據(jù)值的類型都是unsignedlongint型。

如:

inta=5;int*p=&a;

//定義一個指向整型變量空間的指針,并初始化為整型變量a的起始地址,使p指向a。1、指針概念5p1001a

10012003指針具有指針類型的變量統(tǒng)稱為指針變量。1、指針782、指針的定義格式為:<類型>*<指針變量名>;例如:

int*pi;

//一個指向整型變量的指針

float*pl;

char*pc;char(*pa)[3];

//一個指向數(shù)組空間的指針

int**pp;

//一個指向指針變量空間的指針

注:類型的不同,并不影響指針本身空間大小的不同(都是內(nèi)存地址值),但卻決定了指針?biāo)赶虻目臻g的不同,也帶來了對指針?biāo)赶蚩臻g的不同操作??梢灾赶?,但還未指向P2003100120一個整型空間10012、指針的定義格式為:<類型>*<指針變79一、賦值運算定義一個指針后,必須先給它賦值后才能引用,否則易出錯。

如:

inta=1,*p1,*p2;p1=&a;

//賦給同類型的變量地址值p2=p1;

//賦給同類型的指針變量的值

*p1=2;//給p1所指向的變量賦值*p2=3;//給p2所指向的變量賦值

3、指針的運算P1a*P1*P2P2.123此處無**代表取值一、賦值運算3、指針的運算P1a*P1P280二、加一或減一運算如:inta[10],*p;p=a;//p指向數(shù)組a中的a[0]元素p=p+1;

//這時p指向a[1]三、相減運算(一定條件下)如:

inta[10],*p1,*p2;p1=&a[2];p2=&a[5];

//分別指向數(shù)組中的不同元素

intm=p2-p1;

//所得為指針間相隔的元素個數(shù)P20031001a[0]a100110051009100d1011a[1]a[2]a[3]a[4]P200310050x00428D54指針地址是無符號長整形:4byte二、加一或減一運算三、相減運算(一定條件下)P200310081C++中,數(shù)組元素可以用下標(biāo)表示也可用指針表示。1、一維數(shù)組的指針表示如:

inta[5];

a[2]=3;

//下標(biāo)表示a[i]

*(a+2)=3;

//指針表示*(a+i)其中a是數(shù)組名,C++規(guī)定數(shù)組名是一個常量指針,其值是該數(shù)組首元素的地址值。如:

inta[5],*p;p=a;//與p=&a[0]等效

p=p+1;*p=4;

//將4賦給a[1]

注意:a=a+1;

//錯誤!為什么?指針和數(shù)組C++中,數(shù)組元素可以用下標(biāo)表示也可用指針表示。指針和數(shù)組822、二維數(shù)組的指針表示如:

intb[3][4];b[2][3]=3;//下標(biāo)表示b[i][j]*(*(b+2)+3)=3;

//指針表示*(*(b+i)+j)其中b是二維數(shù)組名,對于b而言,b[0]等是其元素,但要注意這些元素的類型并不是int型,而是相當(dāng)于int[3]型。因此,我們稱b[0]等為第0行。其中b[0]行中有b[0][0]~b[0][2]三個元素,注意這些元素的類型才是int型。則有以下表示方式:

b[1][2]*(b[1]+2)(*(b+1))[2]*(*(b+1)+2)b[0]b[1]b[2]b[0][0]b[0][1]b[0][2]b[0][3]b[1][0]b[1][1]b[1][2]b[1][3]b[2][0]b[2][1]b[2][2]b[2][3]b2、二維數(shù)組的指針表示b[0]b[0][0]b83#include"iostream.h"voidmain(){inta[12],*p=a;for(inti=0;i<12;i++){ *p=i+1;//元素賦值if(i%4==0)cout<<endl; cout<<*p<<"\t"; p=p+1; }}123456789101112a[12]pa[0]a[1]a[2]a[9]a[10]a[11]*pa[0],指針下跳1,*pa[1]給一維數(shù)組賦值并按每4個一行方式輸出#include"iostream.h"12345678984123456789101112a[2][3]a[0][0]inta[3][4];int*pa=&a[0][0];//指針指向數(shù)組首元素for(inti=1;i<=12;i++){

*pa=i;//給元素賦值cout<<*pa<<"\t";//輸出元素的值pa=pa+1;//指針往下走一單元

//如果是4的倍數(shù)換行if(i%4==0)cout<<endl;}給二維數(shù)組賦值并按每4個一行方式輸出123456789101112a[2][3]a[0][0]i85行i組j列kabcd\0uvwx\0abcde\0s[6]pchars[6]="abcde";char*p=s;cout<<p<<"or"<<s;p=p+1;cout<<p;行i組j列kabcd\0uvwx\0abcde\0s[6]p86[例3.1]#include<iostream.h>voidmain(){staticinta[5]={5,4,3,2,1};inti,j;i=a[0]+a[4];//下標(biāo)表示j=*(a+2)+*(a+4);//指針表示cout<<i<<"\t"<<j;int*pa=a;pa=pa+1;//pa=?*pa=?pa++;;//pa=?*pa=?

a[0]、a[1]、a[2]=?}

101154321a[0]a(1001)100110051009100d1011a[1]a[2]a[3]a[4]1009641005410093543[例3.1]10115a[0]a(1001)1001a[1]87

[例3.2]

#include<iostream.h>voidmain(){staticintb[][4]={{1,2,3},{4},{5,6}};b[0][2]=7;b[1][2]=8;cout<<**b<<"\t"<<**(b+1))<<"\n";cout<<*(*b+1)<<"\t"<<*(*(b+1)+2)<<"\n";cout<<b[0][2]+b[1][2]+b[2][2];}b[0]b[1]b[2]b[0][0]b[0][1]b[0][2]b[0][3]b[1][0]b[1][1]b[1][2]b[1][3]b[2][0]b[2][1]b[2][2]b[2][3]b12304000560078輸出結(jié)果為:142815[例3.2]b[0]b[0][0]b178輸88#include"iostream.h"voidmain(){ staticchars1[]="abcde",s2[5]={'m','n','p','q','\0'}; char*ps=s1; cout<<s1<<"or"<<s2<<endl; cout<<ps<<'\n'; cout<<s2[1]<<s2[2]<<s1[3]<<s1[4]<<endl; cout<<*ps<<*(ps+2)<<*(ps+4)<<*ps+2;}abcdeormnpqabcdenpdeace99abcde\0mnpq\0S1S2ps#include"iostream.h"abcdeor89intA[4]A[0]A[1]A[2]A[3]100010041008100CintB[4][4]B[0]B[1]B[2]B[3][0][1][2][3]intA[4]A[0]A[1]A[2]A[3]1000190用數(shù)組存放26個字母并輸出#include"iostream.h"voidmain(){ chars[26]; for(inti=0;i<26;i++){s[i]='A'+i;//s[i]=65+i //給數(shù)組元素賦值cout<<s[i]<<"";//輸出數(shù)組}

}ABCDEFGHIJKLMNOPQ用數(shù)組存放26個字母并輸出ABCDEFGHI91引用作為一種數(shù)據(jù)類型,通常被認為是另一種變量的別名。其定義格式為:

<類型>&<引用名>=<變量名>;如:inta=3;int&m=a;m=m+5;則m是對a的一個引用,所有對m的操作都是對a的操作。注意:引用必須初始化,且一旦被初始化后不能再被重新賦值。即不能改變引用目標(biāo)。3.2引用ma3.8引用作為一種數(shù)據(jù)類型,通常被認為是另一種變量的別名。3.292引用可以針對一個常量。

如:int&d=120;這時,引用的是一個系統(tǒng)為保存常量120而自動建立的臨時變量空間。相當(dāng)于:intt=120;int&d=t;引用可以針對一個常量。933.3運算符算術(shù)運算符關(guān)系運算符邏輯運算符位操作運算符賦值運算符其他運算符運算符的優(yōu)先級和結(jié)合性3.3運算符算術(shù)運算符94算術(shù)運算符單目運算符(-(負))雙目運算符(+(加)、-(減)、*(乘)、/(除)、%(模,求余)優(yōu)先級為:負號級別最高,其次為*/%,再就是+-。要求:操作數(shù)為數(shù)值型數(shù)據(jù)其中%要求為整型/與%的第二操作數(shù)不為0特別注意“/”,當(dāng)分子分母都是整數(shù)是做整除!1、普通算術(shù)運算符算術(shù)運算符單目運算符(-(負))1、普通算術(shù)運算符952、增1和減1運算符增量操作表示加1,減量操作表示減1。如:inta=4;

a++;

//等效于a=a+1;

++a;

//等效于a=a+1;

a--;

//等效于a=a-1;

--a;

//等效于a=a-1;增量操作符有前增量與后增量之分。前增量操作++a的意義為:先修改操作數(shù)的值再將增1后的a值作為表達式的值。而后增量操作a++的意義為:先將a的值作為表達式的值確定下來,再將a增1。2、增1和減1運算符96如:inta=3;intb=++a;intc=a++;則:a:5,b:4,c:4。相應(yīng)的,有--a和a--。增量和減量操作符都是單目操作符。近水樓臺先得月4a值表達式值a值表達式值++aa++345444如:近水樓臺先得月4a值表達式值a值表達式值++aa++3497關(guān)系運算符C++提供了6種關(guān)系運算符:〈(小于)、〉(大于)、〈=(小于等于)、〉=(大于等于)、==(等于)、!=(不等于)

關(guān)系運算符都是雙目運算符。優(yōu)先級:〈、〉、〈=、〉=四種比==、!=兩種要高要求:兩個操作數(shù)為同一類型其結(jié)果值為1(代表邏輯真)或0(代表邏輯假)。關(guān)系運算符C++提供了6種關(guān)系運算符:98邏輯運算符三種邏輯運算符:

&&(邏輯與)、||(邏輯或)、!(邏輯非)。其中邏輯非為單目運算符,邏輯與和邏輯或為雙目運算符。優(yōu)先級:!的優(yōu)先級最高,而&&又比||要高。邏輯表達式中的操作數(shù)是作為邏輯量,但C++并不專門提供邏輯類型,只用1與0來代表邏輯結(jié)果真與假。對于參與邏輯運算的操作數(shù),其值為0代表邏輯假,為非0時代表邏輯真。如:?。╝==9)邏輯運算符三種邏輯運算符:99位操作運算符位運算是指直接對int型或char型數(shù)據(jù)的各位進行運算。C++中的位運算符有兩類:1、按位邏輯運算符共有四種:(按位取反運算符)~、(按位與運算符)&(按位異或運算符)^、(按位或運算符)|如:a:01101110,則~a為10010001(按位取反)如:a:10101101,b:11001011則:a&b為10001001(都為1時才為1)a^b為01100110(同號為0,異號為1)a|b為11101111(都為0時才為0)優(yōu)先級:~高于&,&高于^,^高于|。位操作運算符位運算是指直接對int型或char型數(shù)據(jù)的各位進1002、移位運算符(<<、>>)移位運算是指將一個操作數(shù)中的各位都向左(用<<)或向右(用>>)移動若干位。如:a:10001101則:

a<<3為01101000a>>4為000010002、移位運算符(<<、>>)101賦值運算符如:

I=j=k=5;則等效于:

k=5;j=k;I=j;當(dāng)賦值號兩邊的數(shù)據(jù)類型不一致時,編譯器會在賦值前將右操作數(shù)自動轉(zhuǎn)換為同左操作數(shù)相同的類型。如:

inta=3.14;//a:3注意:1、賦值運算符=與比較運算符==的混淆。2、intx=1;

與intx;x=1;在概念上的區(qū)別。

賦值運算符如:102在C++中,將算術(shù)運算符、位運算符同賦值運算符結(jié)合可形成復(fù)合賦值運算符。一共有十種:+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=。如:

a+=b

等效于a=a+b注意:運算時右邊的表達式是被作為一個整體參與運算的。如:

a*=3+b等效于a=a*(3+b)而不是等效于a=a*3+b在C++中,將算術(shù)運算符、位運算符同賦值運算符結(jié)合可形成復(fù)合103x=015=00001101y=0x2b=00101011x|y=0010111147x^y=0010011038x&y=000010019~x=11110010~y=11010100~x+~y=100000110x<<=3=01101000104y>>=4=0000

00102例題:位運算已知:unsignedintx=015,y=0x2bx=015=00001101例題:位運算已知:u104A:!a&&b++B:a||b+4&&a*bC:a=1,b=2,a>b?++a:++bD:++b,a=10,a+5E:a+=b%=a+bb=b%(a+b),a=a+b;F:a!=b>2<=a+1;inta(5),b(3);求表達式、a、b的值910,5,31,5,33,1,315,10,48,8,31,5,3簡稱:短路A:!a&&b++inta(5),b(3);求表達式、a105A:d+-rd;B:*pd*rd;C:++*pd-rd;D:++rd-d;intd(5),*pd=&d,&rd=d,求表達式的值A(chǔ):0B:25C:0D:0;A:d+-rd;intd(5),*pd=&d,&rd=d106其他運算符1、條件運算符語法為:(條件表達式)?(條件為真時的表達式):(條件為假時的表達式)如:x=a<b?a:b;//實現(xiàn)把a和b

中較小的值賦給x條件運算符是C++中唯一的一個三目運算符。

ABTFP其他運算符1、條件運算符ABTFP1072、逗號運算符語法為:表達式1,表達式2,…表達式nC++將順序計算表達式1,表達式2,…表達式n的值。而整個逗號表達式的值是表達式n的值。如:

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

則:

a、b、c、d的值分別為1、3、6、6最后一個表達式的值就是逗號表達式的值2、逗號運算符最后一個表達式的值就是逗號表達式的值1083、強制類型轉(zhuǎn)換運算符用來將指定的表達式的值強制為所指定的類型。格式為:<類型說明符>(<表達式>)或:(<類型說明符>)<表達式>

如:

inta;doubleb=3.8921;a=int(b)+(int)b;則:a值為6注意:是對所求表達式的值指定類型,并不是改變b變量的類型。3、強制類型轉(zhuǎn)換運算符109運算符的優(yōu)先級和結(jié)合性1、優(yōu)先級共15種優(yōu)先級。分別為:

元素/成員->單目->雙目->三目->賦值->逗號常用的雙目運算符的優(yōu)先級又分為:

算術(shù)->移位->關(guān)系->邏輯位->邏輯

2、結(jié)合性大多數(shù)為從左至右,只有三類是從右至左。分別為:單目、三目和賦值

除最高的元素成員,

溫馨提示

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

評論

0/150

提交評論