C++語言程序設(shè)計(jì)第十四講_第1頁
C++語言程序設(shè)計(jì)第十四講_第2頁
C++語言程序設(shè)計(jì)第十四講_第3頁
C++語言程序設(shè)計(jì)第十四講_第4頁
C++語言程序設(shè)計(jì)第十四講_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

……2111000100066地址21021121299910001001………………去211房間,那里有線索地址1000整數(shù)66第8章指針引例指針變量指向第8章指針inta;floatb;內(nèi)存單元按字節(jié)編號(hào)

charc;

int:4字節(jié)

float:

4字節(jié)

char:

變量類型不同,占據(jù)的字節(jié)數(shù)不同變量所占存儲(chǔ)單元首字節(jié)的編號(hào)就是變量的地址ab2000200220042006c2008…

1字節(jié)

0000000200010003……double:

8字節(jié)變量的地址

指針

變量的地址

指針變量

存放指針的變量指針變量的定義類型名*指針變量名1,*指針變量名2,...;如:int*i_p,*j_p;float*t;類型名(int、float、char等)規(guī)定了指針變量可以指向什么類型的變量。

*定義指針變量的標(biāo)志第8章指針注意:*并不是變量名的一部分。注意:指針變量中只能存放規(guī)定類型的變量的地址。

指針

變量的地址

指針變量

存放指針的變量指針變量的定義類型名*指針變量名1,*指針變量名2,...;給指針變量賦地址值&取址運(yùn)算符{inti=0,*i_p;i

i_p&ivoidmain()0……i_p=&i;指針變量i_p指向變量i第8章指針注意:只能用地址給指針變量賦值,不能用普通數(shù)據(jù)給指針變量賦值。

指針

變量的地址

指針變量

存放指針的變量指針變量的定義類型名*指針變量名1,*指針變量名2,...;給指針變量賦地址值&取址運(yùn)算符{inti=0,*i_p;通過指針變量間接訪問變量*i_p:訪問指針變量i_p所指向的變量i

i_p&i*voidmain()

……}0……i_p=&i;3*i_p=3;i=3;指針變量i_p指向變量i第8章指針

間接訪問運(yùn)算符

變量的地址

存放指針的變量程序舉例例1:以下程序段的輸出結(jié)果是

.int*var,ab;ab=100;var=&ab;ab=*var+10;cout<<*var<<endl;varab100&ab110110…………例2:寫出程序的運(yùn)行結(jié)果……

intk=2,m=4,n=6;

int*pk=&k,*pm=&m,*p;*p=*pk*(*pm);

cout<<n<<endl;

……k2m4n6pk&kpm&mp&n8*pk*(*pm)*p=88k*m

p=&n;n=8#include<iostream.h>voidmain(){

inti=100,j=200;

int*p1,*p2;p1=&i;p2=&j;*p1=*p1+1;p1=p2;*p1=*p1+1;

cout<<i<<""<<j;}101201例3:寫結(jié)果程序舉例i100j200p1&ip2&j201101&j程序舉例例4填空。該程序的功能是輸入兩個(gè)整數(shù),然后按從小到大的順序輸出。voidmain(){

inta,b;

int*maxp,*minp;

cin>>a>>b;

maxp=

e

cout<<*minp<<""<<*maxp;

=a<b?&a:&b;}

minpa>b?&a:&b;#include<iostream.h>指向數(shù)組元素的指針變量以一維數(shù)組為例voidmain()a[0]a[1]a[2]a[3]a[4]指針變量的定義pa數(shù)組首地址賦給指針變量&a[0]pa=&a[0];a指針變量指向數(shù)組元素若pa指向a[0],for(i=0;i<5;i++)例:對數(shù)組進(jìn)行輸入輸出。

{inta[5],i,*pa;則pa+i指向a[i]。通過指針訪問數(shù)組元素……由于pa+i指向a[i],則*(pa+i)間接訪問a[i]。for(i=0;i<5;i++)cout<<*(pa+i)<<"";}pa+1pa+4cin>>*(pa+i);

scanf("%d",pa+i);printf("%d

",*(pa+i);指針變量的運(yùn)算pa

指針變量加一

以整型數(shù)組為例:voidmain()20002004200820122016a[0]a[1]a[2]a[3]a[4]

指向下一個(gè)數(shù)組元素。指針變量減一

{inta[5],*pa=a;pa++;pa-=2;pa+=3;2000200420162008pa+n的地址:

pa+n*dd與類型有關(guān):

int:4float:4char:1指向上一個(gè)數(shù)組元素。……}指針變量的運(yùn)算p1

以整型數(shù)組為例:20002004200820122016a[0]a[1]a[2]a[3]a[4]兩個(gè)指針變量相減p1=&a[1];p2=&a[4];p2&a[1]&a[4]p2-p1的值是表示兩個(gè)指針之間元素的個(gè)數(shù)。兩個(gè)指針變量可以進(jìn)行關(guān)系運(yùn)算p1=&a[1];p2=&a[4];p1<p2的值是p1==p2的值是310指向一維數(shù)組的指針變量訪問數(shù)組元素的方式下標(biāo)法數(shù)組名指針

若p指向a[i]a[i]*(a+i)

若p指向a[0]則*(p+i)表示間接訪問a[i]

(直接訪問)則*p表示間接訪問a[i]a[0]a[1]a[2]a[3]a[4]a……a+1a+4a[0]a[1]a[2]a[3]a[4]p&a[0]……p+1p+4p[i]a[i]#include<stdio.h>voidmain(){chara[]="Stu-Dent",*pa;

for(pa=a;*pa!='\0';pa++)if(*pa>='A'&&*pa<='Z')*pa=*pa+32;elseif(*pa>='a'&&*pa<='z')*pa=*pa-32;

puts(a);}例5:寫結(jié)果。a[0]a[1]a[2]a[3]a[4]Stu-Dpa&a[0]ent\0a[5]a[6]a[7]a[8]s&a[1]T&a[2]U&a[3]&a[4]d&a[5]E&a[6]N&a[7]T&a[8]sTU-dENT程序舉例#include<stdio.h>voidmain(){

inta[]={1,2,3,4,5,6,7,8,9,10};

int*p;p=a;

printf("%d\n",*p+9);}10#include<stdio.h>voidmain(){

inta[]={3,2,5,6,7,4};

int*p=a;p++;

printf("%d\n",*(p+3));}7例6:寫結(jié)果程序舉例例7:寫結(jié)果。5程序舉例#include<iostream.h>voidmain(){charb[4]="ABC",*s;s=b;do{

cout<<*s%10; s++;}while(*s!='0');}b[0]b[1]b[2]b[3]ABC\0s&b[0]&b[1]6&b[2]7&b[3]例8:寫結(jié)果。ABC程序舉例#include<stdio.h>voidmain(){charb[4]="ABC",*s;s=b;do{

puts(s); s++;}while(*s!='0');}b[0]b[1]b[2]b[3]ABC\0s&b[0]&b[1]BC&b[2]C&b[3]例9:輸入12345678,寫出以下程序的運(yùn)行結(jié)果。#include<stdio.h>voidmain(){int

a[M],i,j,t,*p=a;for(i=0;i<M;i++)scanf("%d",a+i);i=0;j=M-1;while(i<j){t=p[i];p[i]=[j];p[j]=t;i++;j--;}for(i=0;i<M;i++,p++)printf("%3d",*p);a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]12345678ij8116722563345443

8

7

6

5

4

3

2

107程序舉例#defineM8}p&a[0]p[0]p[1]p[2]p[3]p[4]p[5]p[6]p[7]&a[1]&a[2]&a[3]&a[4]&a[5]&a[6]&a[7]作業(yè)實(shí)驗(yàn)指導(dǎo)書P136第1、2大題課本P173第一、二、三大題編譯預(yù)處理在編譯源程序之前,由預(yù)處理器執(zhí)行的指令。目的是對源程序進(jìn)行一些加工處理。預(yù)處理指令以“#”開頭,每條指令占一行。末尾不加分號(hào)。三種類型:1.文件包含指令2.宏定義指令3.條件編譯指令預(yù)處理指令文件包含

意義在一個(gè)文件中包含另一個(gè)文件的內(nèi)容Acpp1.cppBstdio.h#include<stdio.h>BAcpp1.cpp

一般形式#include"文件名"#include<文件名><>

預(yù)處理器到標(biāo)準(zhǔn)目錄下查找該文件""先在當(dāng)前目錄查找,找不到再到標(biāo)準(zhǔn)目錄找宏定義不帶參數(shù)的宏定義用一個(gè)名字代表一串文字。#define標(biāo)識(shí)符文本信息#definePI3.1415926#define標(biāo)識(shí)符用文本信息替換宏名帶參數(shù)的宏定義#define宏名(參數(shù)表)文本信息文本中要包含參數(shù)表中的參數(shù)宏展開時(shí)要先進(jìn)行參數(shù)替換#defineS(a,b)a*barea=S(3,2);3*2宏定義命令宏名voidmain(){s=PI*r*r;}預(yù)處理時(shí)進(jìn)行宏展開3.1415926voidmain(){}3

a2

b…………

宏定義舉例例1以下程序中for循環(huán)循環(huán)的次數(shù)是多少?程序的運(yùn)行結(jié)果是什么?

#defineN2#defineMN+1#defineNUM(M+1)*M/2voidmain(){inti;

for(i=1;i<=NUM;i++);

printf("%d\n",i);}宏展開(1)(M+1)*M/2(2)(N+1+1)*N+1/2(3)(2+1+1)*2+1/2=8答:執(zhí)行8次結(jié)果:9N+1M2

N#include<stdio.h>NUM(M+1)*M/2NUM

宏定義舉例例2寫結(jié)果。

F(m+n)(1)P*m+n*m+n(2)4*m+n*m+n20m+n

x4

P#include<iostream.h>#defineP4#defineF(x)P*x*xvoidmain(){intm=2,n=4;

cout<<F(m+n)<<endl;}=20宏展開

宏定義舉例例3寫結(jié)果。

F(m+n)(1)P*(m+n)*(m+n)(2)4*(m+n)*(m+n)36m+n

x4

P#include<iostream.h>#defineP4#defineF(x)P*(x)*(x)voidmain(){intm=2,n=4;

cout<<4/F(m+n)<<endl;}4/4*(m+n)*(m+n)宏展開

宏定義舉例例4寫結(jié)果。

F(m+n)(1)(P*(m+n)*(m+n))(2)(4*(m+n)*(m+n))0m+n

x4

P#include<iostream.h>#defineP4#defineF(x)(P*(x)*(x))voidmain(){intm=2,n=4;

cout<<4/F(m+n)<<endl;}4/(4*(m+n)*(m+n))

宏定義舉例例5寫結(jié)果。

f(a-1)

a-1*a-1*a-1

f((a-1))-48a-1x(a-1)

x#include<iostream.h>#definef(x)x*x*xvoidmain(){inta=3,s,t;s=f(a-1);t=f((a-1));

cout<<s<<""<<t<<endl;}(a-1)*(a-1)*(a-1)1、編寫程序,計(jì)算兩個(gè)矩陣(均為2行2列)之積。輸入分2*2行:前兩行為第一個(gè)矩陣,后兩行為第二個(gè)矩陣。樣例輸入:

12

45

35

17

2、編寫程序,輸出矩陣(3行3列)的左上三角。樣例輸入:

123

456

789

作業(yè)樣例輸出:

519

1755

樣例輸出:

123

45

7

3、編寫程序,輸出n層正方形圖案。正方形圖案最外層是第一層,每層用的數(shù)字和層數(shù)相同。樣例輸入:3

4、編寫程序,計(jì)算二維數(shù)組中各行之和、各列之和以及所有元素之和。樣例輸入:

23

123

456作業(yè)樣例輸出:

11111

12221

12321

12221

11111

樣例輸出:

615

579

21

5、編寫程序,找出m行n列的二維數(shù)組中每行元素的最大值以及每列元素的最小值。輸入分m+1行:第一行為m和n的值,以下m行代表二維數(shù)組,其中每一行包括n個(gè)數(shù)。輸出分

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論