版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上一、知識(shí)點(diǎn)1 掌握指針、地址、指針類型、空指針(NULL)等概念;2 掌握指針變量的定義和初始化、指針的間接訪問、指針的加減運(yùn)算、指針變量比較運(yùn)算和指針表達(dá)式;3 掌握指針與數(shù)組、函數(shù)、字符串等的聯(lián)系;4 掌握動(dòng)態(tài)空間操作(new,delete);5 掌握引用參數(shù)的使用。二、例題分析與解答例題1:若有以下定義,則說法錯(cuò)誤的是( )。 int a=100,*p=&a ;A聲明變量p,其中*表示p是一個(gè)指針變量B變量p經(jīng)初始化,獲得變量a的地址C變量p只可以指向一個(gè)整形變量D變量p的值為100答案:D分析
2、:有指針變量定義可知A、C說法是正確的,故不能選。在語句中&p=a,表示指針變量取得變量a地址,B說法也正確,也不能選擇。D中不能說變量p的值為100,應(yīng)該*p的值為100,所以選擇D。 例題2:若有以下定義,則賦值正確的是( )。int a ,b , *p;float c, *q;Ap=&c Bq=p Cp=NULL Dq=new int答案:C分析:指針變量使用規(guī)定,不同類型的指針變量不能賦值,也不能取得普通變量地址,故A、B不正確,不能選擇。因?yàn)閝是float類型指針變量,不能申請(qǐng)int 類型地址,D不正確,也不能選擇。因?yàn)槿魏晤愋偷闹羔樧兞慷寄苋〉肗ULL指針
3、,所以C正確。 例題3:如果x是整型變量,則合法的形式是( )。A(x+5)B*xC&*xD*&x答案:D分析:因?yàn)镃+語言表達(dá)式?jīng)]有地址,A不正確。C+語言普通變量不能用*運(yùn)算,因此B和C也不正確。&x表示變量x的地址,*&x是x 地址的值,所以D正確。例題4:若要建立如下關(guān)系,錯(cuò)誤的語句組是( )。span style='mso-ignore:vglayout; ;z-index:1;left:0px;margin-left:144px;margin-top:1px; width:256px;height:38px' A
4、 B C D int *p=&x, x; int x, p=&x; int *p, x=10; int *p, x; *p=10; *p=10; *p=&x; p=&x ; x=10;答案:A分析:在變量類型說明語句中 *表示變量是指針變量,在其他語句中,*稱為指針運(yùn)算,用于訪問指針?biāo)赶虻膶?duì)象的值,&稱為取地址運(yùn)算,用來得到一個(gè)對(duì)象的地址。故B、C、D都是正確的,不能選擇。A中指針變量p取不到x地址,因?yàn)閤還沒有定義,所以選擇A。 例題5:若有語句int a10=0,1,2,3,4,5,6,7,8,9,*p=a;則( )不是對(duì)a數(shù)組元素的正確
5、引用(其中0i<10)。ApiB*(*(a+i)Cap-aD*(&ai)答案:B分析:指針就變量p取得數(shù)組a的首地址,由指針與數(shù)組關(guān)系知,pi表示數(shù)組元素第i+1元素值,pi=ai正確,故A不能選。*(a+i)表示一維數(shù)組a第i+1元素值,*(*(a+i)表示對(duì)第i+1元素值再取值是錯(cuò)誤操作,所以選B。ap-a=a0正確,故不能選擇C。*(&ai)也正確(見上題),也不能選D。 例題6:寫出下列程序運(yùn)行結(jié)果是( )。 #include void main() char ch34=“AAA”,”BB”,”CCC”,(*q)4=ch, *p; / ch是二維數(shù)組,
6、q是指向一維數(shù)組指針,并且一維數(shù)組每行只有4個(gè)字符/q并取得二維數(shù)組ch首地址int i; p=new char; /申請(qǐng)地址*p=b; /裝入字符b*(*q+3)=*p; for(i=0;i<3;i+) cout<<QI<<ENDL;< SPAN>A B C D AAAbBB AAAb AAA AAA BB BB bBB BB CCC CCC CCC CCC答案:A分析:二維字符數(shù)組初始化后值如下表: 01230AAA01BB0 2CCC0執(zhí)行語句*(*q+3)=*p后二維字符數(shù)組值: 01230AAAb1BB0
7、60;2CCC0在輸出語句中q0輸出是AAAbBB,q1輸出是BB,q2輸出CCC,只能選擇A。 例題7:寫出下列程序運(yùn)行結(jié)果:#includevoid main()int *pn, n=10,m=20; float *pf, px=3.14159,py=2.71828; pn=&n; *pn+=m; cout<<”n 現(xiàn)在的值是: ”<<*pn<<ENDL;< SPAN> pf=&px; py+=5*(*pf); cout<<”py現(xiàn)在的值是:”<<PY<<ENDL;< SPA
8、N>運(yùn)行結(jié)果是: n 現(xiàn)在的值是: 30pf 現(xiàn)在的值是:18.4262分析:指針是通過在變量前加一個(gè)“*”來定義,使用用“*”加變量名存取指針?biāo)傅闹担眠\(yùn)算“&”取變量的地址,但是不能存取無指向的指針?biāo)赶騼?nèi)容,這樣會(huì)導(dǎo)致系統(tǒng)故障。 例題8:寫出下列程序運(yùn)行結(jié)果:#includevoid main()int I,*p,a=10,20,30,40,50,60; p=a; for(I=0;I<5;I+) cout<<”a“<<I<<<AI<<T<<”*(A+”<<I<<<
9、;*(A+I)< SPAN><<t<<”*(p+”<<I<<<*(P+I)<<T<<”P“<<I<<<PI<<ENDL;< SPAN>運(yùn)行結(jié)果:a0=10 *(a+0)=10 *(p+0)=10 p0=10 a1=20 *(a+1)=20 *(p+1)=20 p1=20 a2=30 *(a+2)=30 *(p+2)=30 p2=30 a3=40 *(a+3)=40 *(p+3)=40 p3=40 a4=50 *(a+4)=50 *(p+4)=50 p4
10、=50 a5=60 *(a+5)=60 *(p+5)=60 p5=60 分析:分析程序根據(jù)指針與數(shù)組關(guān)系,引用數(shù)據(jù)可以有四種不同的表示方法:使用數(shù)組下標(biāo)變量;使用數(shù)據(jù)固有的指針數(shù)組名間接引用;使用指向數(shù)組的指針的間接引用;使用指向數(shù)組的指針下標(biāo)引用。 例題9:指出下列程序運(yùn)行結(jié)果:#includeint b44=10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25;void main()int (*a)4,*p; a=b; /指針變量a,取得二維數(shù)組第一行地址p=a1; /指針變量p,取得二維數(shù)組第二行第一列地址 for( int I=1;I
11、<=4;p=p+1,I+) /A行 cout<<*p<<'t'cout<<ENDL;< SPAN>for( I=0;I<=3;I+) /B行 cout<<*(*a+1)<<'t' a+; /C行cout<<ENDL;< SPAN>運(yùn)行結(jié)果是:14 15 16 1711 15 19 23分析:根據(jù)題意,指針變量p取得二維數(shù)組第二行第一列地址,進(jìn)行循環(huán)語句后,每循環(huán)一次,指針變量下移一個(gè)元素,A行循環(huán)輸出是14,15,16,17。指向一維數(shù)組指針a,取得二維數(shù)
12、組第一行地址,由指向一維數(shù)組指針定義,*a+1表示該行第一列元素地址,*(*a+1)表示該地址的值,所以B行輸出是11,15,19,23。 例題10:寫出下列程序運(yùn)行結(jié)果:#includevoid fun(int *& a, int &m) a=new intm; /A int * p=a; for(int i=0;i<M;I+)< SPAN> *p+=i*i+1; void main() int *b,n=5; fun(b,n); for(int i=0;i<N;I+)< SPAN> cout<<BI<<&
13、#39; SPAN ?;<> cout<<ENDL;< SPAN> deleteb; /B運(yùn)行結(jié)果是:1 2 5 10 17分析:指針變量在函數(shù)main中沒有取得地址,所以在A行中,對(duì)被調(diào)用函數(shù)fun給對(duì)應(yīng)的形參指針變量申請(qǐng)地址,即指針變量b和形參指針變量p指向同一組地址。B行對(duì)申請(qǐng)地址釋放。 例題11:下列函數(shù)change的功能是,將字符串中的小寫字母轉(zhuǎn)成大寫字母,請(qǐng)?zhí)羁铡?include#includevoid change( ) /1int i=0; for(i=0; ;i+) /2 if(ai>='a'&&am
14、p;ai<='z') ; /3void main()char p80; cout<<" n" cin.getline(p,80) ; /讀一行字符,中間可以有空格 change(p); cout<<P<<ENDL;< SPAN>如程序運(yùn)行時(shí)得到以下結(jié)果:請(qǐng)輸入一行字符:This is a book.THIS IS A BOOK.答案:(1)char *a 或 char a80(2) ai 或 ai!=0(3) ai= ai 32或ai-= ai 分析: (1) 由指針和
15、字符串關(guān)系知:當(dāng)實(shí)參是數(shù)組,形參可以是字符串變量,也可以是字符指針變量。(2) 循環(huán)語句結(jié)束條件是字符標(biāo)記0。(3) 大寫字母的ASCII碼比小室字母的ASCII碼小32。 例題12:下列函數(shù)swap實(shí)現(xiàn)數(shù)據(jù)交換功能功能,請(qǐng)?zhí)羁铡?includevoid swap(int *p,int *q)int temp; temp=*p; ; /1 ; /2void main()int a,b;int *p1,*p2;cout<<"請(qǐng)輸入兩個(gè)正數(shù):"cin>>a>>b;p1=&
16、amp;a;p2=&b;swap(p1,p2);cout<<"結(jié)果a和b的值:"<<A<<","<<B<<ENDL;< SPAN>如程序運(yùn)行時(shí)得到以下結(jié)果:請(qǐng)輸入兩個(gè)正數(shù):10 20結(jié)果a和b的值:20,10答案:(1) (1) *p=*q(2) (2) *q=temp;分析:實(shí)參和形參都是指針變量,所以指針變量p1和p指向同一個(gè)地址
17、,同樣p2和q也指向同一個(gè)地址。函數(shù)swap()是交換兩個(gè)數(shù),故應(yīng)填寫語句*p=*q、*q=temp。 例題13:下列函數(shù)sort實(shí)現(xiàn)對(duì)字符串按字典順序由小到大排序,請(qǐng)?zhí)羁铡?include#includevoid sort( ) /1char ; /2 int i,j; for(i=0;i<N-1;I+)< SPAN> for(j=0;j<N-1-I;J+)< SPAN> if(strcmp( ) /3 temp=pj; ; /4 pj+1=temp; void main() char *a5="student","
18、worker","cadre","soldier","apen" sort(a,5); for(int i=0;i<5;i+) cout<<AI<<ENDL;< SPAN>程序運(yùn)行結(jié)果如下:apencadresoldierstudentworker答案:(1)char *p,int n (2)*temp(3)pj,pj+1)>0(4)pj=pj+1分析:(1)由實(shí)參得知函數(shù)sort()有兩個(gè)形參,根據(jù)上題得char *p,int n。(2)有下面語句temp=pj可以得到tem
19、p是字符中指針。(3)根據(jù)冒泡排序方法和字符串比較函數(shù)得到pj,pj+1)>0。(4)字符串指針可以通過賦值語句傳遞值,字符串變量不能夠使用賦值語句傳遞值。 例題14:函數(shù)find功能是:在指針p所指數(shù)組中,查找值為x的元素,找到后,返回該元素的下標(biāo),否則返回-1,改正程序中語句錯(cuò)誤,能夠正確運(yùn)行。#include #include const int N=10; int find(int *p,int n,int x) /1 int i ; / 2 *(p+n)=x; /3 while(*p+i!=x) /4 i+; /5 if(i!=n) /6 return 1; /7 e
20、lse return -1; /8 void main() int i,pos,x; int *p=new int N; for(i=0;i<N;I+)< SPAN> *(p+i)=rand()%50; for(i=0;i<N;I+)< SPAN> cout<<*(p+i)<<'t' cout<<"ninput x: " cin>>x; pos=find(p,N,x); if(pos!=-1)cout<<"index= "<<POS
21、<<" char? LAYOUT-GRID-MODE: 18pt; MARGIN-LEFT: ,value="<<*(p+pos)<<endl; else cout<<"No find!"<<ENDL;< SPAN> 答案:(1) 2行語句改為 int i=0;(2) 4行語句改為 while(*(p+i)!=x);(3) 7行語句改為 return i 。分析:在函數(shù)find中,變量i沒有賦初值,按照規(guī)則任意取值,所以程序不正確。在while循環(huán)條件中*p+i表示指針p指向地址元素
22、值加i,不能起著指針移動(dòng)作用,改為*(p+i)表示數(shù)組第i個(gè)元素值起著順序查找作用。在函數(shù)中如果找到查找元素返回其下標(biāo),7行應(yīng)該是return i ,而不是return 1。 例題15:寫一個(gè)函數(shù),將一個(gè)n階方陣轉(zhuǎn)置。具體要求如下:(1)初始化一個(gè)矩陣A(5×5),元素值取自隨機(jī)函數(shù),并輸出。(2)將其傳遞給函數(shù),實(shí)現(xiàn)矩陣轉(zhuǎn)置。(3)在主函數(shù)中輸出轉(zhuǎn)置后的矩陣。(提示:程序中可以使用C+庫函數(shù)rand( ),其功能是產(chǎn)生一個(gè)隨機(jī)數(shù)065535,其頭文件為stdlib.h)分析:根據(jù)題目要求,本題的關(guān)鍵是實(shí)現(xiàn)矩陣的轉(zhuǎn)置,指針變量p指向矩陣c,由數(shù)組存放規(guī)則和指針變量的規(guī)則,得
23、到下列程序:#include#include#includeint a55,c55; /矩陣a、c定義為全局變量void zc(int b5,int n); /函數(shù)聲明語句void main()int i,j; srand(time(NULL); /產(chǎn)生一個(gè)時(shí)間 for(i=0;i<5;i+)for(j=0;j<5;j+)*(*(a+i)+j)=rand()%100 ; /產(chǎn)生一個(gè)隨機(jī)數(shù)cout<<"自動(dòng)生成矩陣為:n" for(i=0;i<5;i+) /輸出自動(dòng)生成的二維數(shù)組 for(j=0;j<5;j+)cout<<
24、9;t'<<*(*(a+i)+j); cout<<ENDL;< SPAN> zc(a,5); /調(diào)用轉(zhuǎn)置矩陣函數(shù)cout<<"轉(zhuǎn)置矩陣為:n" ;for(i=0;i<5;i+) for(j=0;j<5;j+)cout<<'t'<<*(*(c+i)+j); cout<<ENDL;< SPAN> void zc(int b5,int n)int i,j; int (*p)5; p=c; for(i=0;i<5;i+)for(j=0;j<
25、5;j+)*(*(p+i)+j)=*(*(b+j)+i); / 轉(zhuǎn)置三、習(xí)題及參考答案1選擇題:(1)如果x是整型變量,則合法的形式是( )。A(x+5)B*xC&*xD*&x答案:D (2)若有語句int a10=0,1,2,3,4,5,6,7,8,9,*p=a;則( )不是對(duì)a數(shù)組元素的正確引用(其中0i<10)。ApiB*(*(a+i)Cap-aD*(&ai)答案:B (3)以下程序的輸出結(jié)果是( )。#include void main() int a3=10,15,20; / a0=10,a1=15,a2=20int *p1=a,*p2=&am
26、p;a1; / p1取a0地址,p2取a1地址 *p1=*(p2-1)+5; / a0=15,a1=15,a2=20*(p1+1)=*p1-5; / a0=15,a1=10,a2=20cout<<A1<<ENDL;< SPAN>A5B10C15D20答案:B分析:見程序注釋 (4)執(zhí)行以下程序段后,m的值為 ( )。int a23=1,2,3,4,5,6;int m,*p=&a00;m=(*p)*(*(p+2)*(*(p+4);A15B14C13D12答案:A分析:C+語言,二維數(shù)組的存儲(chǔ)方式在計(jì)算機(jī)中仍然是按一維數(shù)組存儲(chǔ),并按行優(yōu)先,即是
27、先存儲(chǔ)第 一行元素,接著存儲(chǔ)第二行元素。語句p=&a00表示指針變量p取得二維數(shù)組第一個(gè)元素p00地址,注意不用語句p=a取二維數(shù)組首地址(同學(xué)考慮為什么?),*p、*(p+2)、*(p+4)的值分別為1、3、5,所以m=15。 (5)以下程序的輸出結(jié)果是( )。#include void fun(int x,int y,int *cp,int *dp) cp=x+y; /*cp=30+50=80dp=x-y; /*dp=30-50=-20void main()int a,b,c,d;a=30,b=50;fun(a,b,&c,&d);cout<<C
28、<<","<<D<<ENDL;< SPAN>A50,30B30,50C80,20D80,20答案:C分析:函數(shù)fun(a,b,&c,&d)中參數(shù) a,b是傳值,參數(shù)&c,&d是傳地址,因此形參cp和實(shí)參c共用一個(gè)存儲(chǔ)空間,形參dp和實(shí)參d共用一個(gè)存儲(chǔ)空間,所以改變指針變量cp所指向地址的值也就改變變量c的值,同樣改變指針變量dp所指向地址的值也就改變變量d的值,因此選C。 (6)要求函數(shù)的功能是交換x和y中的值,且通過正確調(diào)用返回交換結(jié)果。能正確執(zhí)行此功能的函數(shù)是( )。Afuna(i
29、nt *x,int *y)Bfunb(int x,int y) int *p=new int ; int t;p=*x; t=x;*x=*y; x=y;*y=*p; y=t; Cfunc(int *x,int *y)Dfund(int x,int y)*x=*y;*x=*x+*y; *y=*x; *y=*x-*y; *x=*x-*y; 答案:A分析:按照C+語言規(guī)則,通過參數(shù)帶回運(yùn)算值,只能是傳地址,不能是傳值 ,B和D的參數(shù)是傳值,故B和D不能選。C中傳回值都是指針變量y所指向地址的值,C也不能選。 (7)以下程序的輸出結(jié)果是( )。#include void main
30、()char *s=""int v1=0,v2=0,v3=0,v4=0;for (int k=0;sk;k+)switch(sk)default:v4+;case '1':v1+;case '3':v3+;case '2':v2+;cout<<V1<<","<<V2<<","<<V3<<","<<V4<<ENDL;< SPAN>A4,2,1,1 B4,9,3,1
31、C5,8,6,1D8,8,8,8答案:C分析:C+語言中的switch語句中,如果沒有break語句,一旦滿足某一條件進(jìn)入,就一直運(yùn)行到switch的結(jié)束,如在本題s1=1,除v1加1之外,v2和v3都要加1。故運(yùn)行結(jié)果是“5,,8,6,1”,選擇C。如果程序做下面修改: switch(sk)default:v4+; break;case '1':v1+; break;case '3':v3+;break;case '2':v2+;break;運(yùn)行結(jié)果是“4,2,1,1”,選擇A。 (8)設(shè)有如下定義,下面關(guān)于ptr正確敘述是( )。
32、int (*ptr)();Aptr是指向一維數(shù)組的指針變量Bptr是指向int 型數(shù)據(jù)的指針變量Cptr是指向函數(shù)的指針,該函數(shù)返回一個(gè)int型數(shù)據(jù)Dptr是一個(gè)函數(shù)名,該函數(shù)的返回值是指向int型數(shù)據(jù)的指針答案:C分析:參照函數(shù)指針定義。 (9)若有如下語句:int *pp,*p,a=10,b=20;pp=&p; /二級(jí)指針pp取一級(jí)指針p地址p=&a; /一級(jí)指針p取變量a地址p=&b; /一級(jí)指針p取變量b地址cout<<*p<<”,”<<*pp<<ENDL; 則輸出結(jié)果是( )。A10,20B10,10C
33、20,10D20,20答案:D分析:見程序注釋。 (10)設(shè)char *s;以下正確的表達(dá)式是( )。As=”computer”;B*s=”computer”;C*s=”computer”;D*s=c;答案:C分析:由char*s語句可知,*s表示是一個(gè)二級(jí)字符指針變量,*s是一個(gè)指向字符串的指針變量,故A、C、D都 不正確,只有B是正確的。 2編寫程序,在堆內(nèi)存中申請(qǐng)一個(gè)float型數(shù)組,把10個(gè)float型數(shù)據(jù)0.1、0.2、0.3、1.0賦予該數(shù)組,然后使用float型指針輸出該數(shù)組的各元素值并求出其累加和。#includevoid main() float *p=
34、new float10; /在堆內(nèi)申請(qǐng)一個(gè)float型數(shù)組 int i; float sum=0.0; for(i=0;i<10;i+) *(p+i)=(i+1)*.1; /給數(shù)組賦值0.1,0.2,1.0 cout<<*(p+i)<<'t' /輸出數(shù)組值sum+=*(p+i); /求和 cout<<"n sum= "<<SUM<<ENDL; 3編寫一個(gè)函數(shù)f,將傳入此函數(shù)的直角坐標(biāo)值轉(zhuǎn)換為極坐標(biāo)值,并返回主調(diào)函數(shù)中。求極坐標(biāo)的公式是: c=q=arctan(y/x)若要將兩值返回
35、主調(diào)函數(shù),有多種方式可以完成,請(qǐng)?jiān)囍?1) (1) 兩值均以指針形參帶回。void fun(double x,double y,double *c,double *q) cout<<X<<','<<Y<<ENDL;< SPAN>*c=sqrt(x*x+y*y);cout<<*c<<ENDL;< SPAN> *q=atan(y/x);(2)由指針形參帶回一個(gè)值,函數(shù)值返回另一個(gè)值。double fun(doubl
36、e x,double y,double *p)double c; c=sqrt(x*x+y*y); *p=atan(y/x);return c;(3)兩值均以引用形參返回。(提示:程序中可以使用C+庫函數(shù)sprt、pow及atan,它們的頭文件為math.h)void fun(double x,double y,double &a,double &b)a=sqrt(x*x+y*y); b=atan(y/x); 4使用指針編寫函數(shù)strcat(),實(shí)現(xiàn)兩個(gè)字符串的首尾連接(將字符串str2接到str1的后面,str1最后面的0被取消)。void strcat(char
37、*str1,char *str2)int i,m=0; while(str1m!='0') m+; /求數(shù)組str1長(zhǎng)度 i=0; while(str2i!='0') str1m+i=str2i;i+; /將字符串str2中有字符依次裝入字符串str1中 str1m+i='0' 5編寫從多個(gè)字符串中尋找最長(zhǎng)串的函數(shù)char *maxstr(char *str ,int n)其中,str是字符串?dāng)?shù)組,n是字符串個(gè)數(shù)。函數(shù)返回值為最長(zhǎng)串地址。char *maxstr(char *str,int n)int i,len,j=0; len=st
38、rlen(strj); /求數(shù)組str0長(zhǎng)度并賦給變量len for(i=1;i<N;I+)< SPAN> if(strlen(stri)>len) j=i;len= strlen(stri) ; /從第2個(gè)字符串開始,只要字符串長(zhǎng)度大于len,就賦給len并保留其下標(biāo) return strj; 6寫一個(gè)函數(shù),將一個(gè)n階方陣轉(zhuǎn)置。具體要求如下:(1)初始化一個(gè)矩陣A(5×5),元素值取自隨機(jī)函數(shù),并輸出。(2)將其傳遞給函數(shù),實(shí)現(xiàn)矩陣轉(zhuǎn)置。(3)在主函數(shù)中輸出轉(zhuǎn)置后的矩陣。(提示:程序中可以使用C+庫函數(shù)rand( ),其功能是產(chǎn)生一個(gè)隨機(jī)數(shù)0655
39、35,其頭文件為stdlib.h)見本章例15 7編寫一個(gè)程序,實(shí)現(xiàn)在命令行中以參數(shù)的形式接收兩個(gè)整數(shù),輸出這兩個(gè)整數(shù)的和。(提示:程序中可以使用C+庫函數(shù)atoi(),其功能是將字符串轉(zhuǎn)換成整型值,其頭文件為stdlib.h)#include#includevoid main(int argc,char *argv) int a,b; a=atoi(argv1); b=atoi(argv2); cout<<A<<"+"<<B<<"="<<A+B<<ENDL;< SP
40、AN> 8使用引用參數(shù)編制程序,實(shí)現(xiàn)兩個(gè)字符串變量的交換。例如開始時(shí):char *ap=”hello”;char *bp=”how are you”;交換后使ap和bp指向的內(nèi)容別是:ap:”how are you”bp:”hello”#include#includevoid swap(char *p,char *q)char temp20; strcpy(temp,p); strcpy(p,q); strcpy(q,temp);void main()char a20="hello",*ap=a; char b20="how are you&quo
41、t;,*bp=b;cout<<"交換前字符串值:n"cout<<"ap= "<<AP<<ENDL;< SPAN>cout<<"bp= "<<BP<<ENDL;< SPAN>swap(ap,bp);cout<<"交換后字符串值:n"cout<<"ap= "<<AP<<ENDL;< SPAN>cout<<"bp=
42、 "<<BP<<ENDL;< SPAN> 9下列程序能夠生成由10個(gè)整數(shù)組成的安全數(shù)組。其中put()函數(shù)的作用是將值放入數(shù)組中,get()函數(shù)的作用是取出數(shù)組中某元素的值,如果在put()函數(shù)和get()函數(shù)中遇到下標(biāo)越界則給出提示信息 “range error!”并退出程序。請(qǐng)完成put()函數(shù)和get()函數(shù)的定義。#include #include int &put(int n);int get(int n);int array10;int error=-1;void main() put(0)=10; put(1)=20
43、;put(9)=40; cout<<GET(0)<<ENDL;< SPAN>cout<<GET(1)<<ENDL;< SPAN>cout<<GET(9)<<ENDL;< SPAN>put(12)=1;運(yùn)行結(jié)果是:102030range error!請(qǐng)完成put()函數(shù)和get()函數(shù)的定義。答:int &put (int m) if(m>=0 && m<10) return arraym; else cout<<"range er
44、ror! "<<>int get(int m) if(m>=0 && m<10) return arraym;else cout<<"range error! "<<> 四、練習(xí)題1. 選擇題(1)若有以下定義,則變量p所占內(nèi)存空間的字節(jié)數(shù)是()。float *p;A.1 B.2 C.4 D.8 (2) 若有以下定義,則賦值錯(cuò)誤的是()。int a,*p,*q;A. *p=&a ; B.p=new int ; C
45、.q=NULL; D.p=q (3) 下列程序運(yùn)行結(jié)果是()。#includevoid main()int a=10,*q; if(q=NULL) cout<<"#"<<ENDL;< SPAN> else q=&a; cout<<*q<<ENDL;< SPAN>A. # B.10 C. 有語法錯(cuò)誤 D.*q(4)若程序段static char line=”Visual C+”; char *point=line;則point的值為( )。A. ”Visual C+” B. line的首
46、地址C. Visual D. 0 (5) 相同數(shù)據(jù)類型的數(shù)組名和指針變量均表示地址,以下不正確的說法是()。A. 數(shù)組名代表的地址不變,指針變量存放的地址可變。B. 數(shù)組名代表的存儲(chǔ)空間不變,指針變量指向的存儲(chǔ)空間長(zhǎng)度可變。C. A和B的說法均正確。D. 沒有差別。 (6) 若有以下定義,則下列操作錯(cuò)誤的是()。int a5=1,3,5,7,9,*p
47、=new int 5;A.p=a; B.*p=a; C.*(p+1)=a1; D.*p=*a (7) 若有以下定義,則釋放指針?biāo)竷?nèi)存空間的操作是()。 int *p=new int 10;A.delete r; B.delete *r C.delete r; delete r (8) 若有以下定義,下列值為6的表示式是()。int a35=1,2,2,4,6,8,10,20,30,40,50; A.*(a+2)+3 B.a23 C.*(*(a+1)+2) D.*(*(a+2)+3) (9)若int (*p)5;,則下列正確的敘述是()。A 是指針數(shù)組B (*p)5與*p5等價(jià)C p的指針,它可指向一維數(shù)組中任一元素D p是指針,它只能指向一個(gè)包含5個(gè)int類型元素的一維數(shù)組 (10)執(zhí)行下列程序
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 26342-2024國(guó)際間遺體轉(zhuǎn)運(yùn)棺柩
- 高考地理一輪復(fù)習(xí)第四章地球上的水及其運(yùn)動(dòng)第四節(jié)海-氣相互作用課件
- 吉林省德惠市第七中學(xué)七年級(jí)地理上冊(cè) 第一章 地球和地圖綜合教案 (新版)新人教版
- 二年級(jí)品德與生活上冊(cè) 3.3 做個(gè)快樂鳥3教學(xué)設(shè)計(jì) 新人教版
- 2024-2025學(xué)年高中政治上學(xué)期第4周《文化的繼承性與文化發(fā)展》教學(xué)設(shè)計(jì)
- 元稹-《菊花》課件
- 裝修甲醛合同(2篇)
- 2020-2024年上海市春考語文真題試卷匯編含答案
- 西南林業(yè)大學(xué)《地理學(xué)》2022-2023學(xué)年第一學(xué)期期末試卷
- 裝在套子里的人 (公開課獲獎(jiǎng)?wù)n件)
- 圓錐曲線的光學(xué)性質(zhì)及其應(yīng)用-(3)-PPT課件
- 三年級(jí)上冊(cè)語文期中質(zhì)量分析
- 滾珠絲杠基礎(chǔ)知識(shí)ppt課件
- (完整版)鋼結(jié)構(gòu)質(zhì)量通病及防治措施
- (高清正版)JJG 342-2014 凝膠色譜儀
- 潛孔鉆安全的操作規(guī)程
- 印刷品供貨總體服務(wù)方案
- 新生兒聽力篩查PPT幻燈片課件
- 招投標(biāo)業(yè)務(wù)工作失誤檢討書
- 網(wǎng)吧公司章程范本
- 同一溶質(zhì)不同濃度溶液混合濃度判斷
評(píng)論
0/150
提交評(píng)論