C++筆試要點(代C語言要點)_第1頁
C++筆試要點(代C語言要點)_第2頁
C++筆試要點(代C語言要點)_第3頁
C++筆試要點(代C語言要點)_第4頁
已閱讀5頁,還剩37頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C++筆試部分要點:1.標識符(可作為變量名、數組名、函數名等)的命名規(guī)范①由52個英文大小寫字母,10個數字,ー個下劃線構成②以英文字母或下劃線開頭,不能是保留字(例子)下列符號中可以用作C++標識符的是A)MainB)foo-barC)elseD)3room常見錯誤及注意事項:①以數字開頭(如3room),②中間含有空格或非法字符(如foo-bar,或MyName)③區(qū)別大小寫(如Main與main不同,if與If不同)④保留字(如if、while等)不能作為標識符⑤但編譯預處理命令(如include、define、main等)不是保留字,它們可以被用作標識符。如,下列程序合法:#include<iostream.h>voidmain()(intinclude;cin?include;cout?include?endl;)#include<iostream.h>voidmain()(intmain;cin?main;cout?main?endl;#include<iostream.h>voidmain(){intdefine;cin?define;cout?define?endl;}2.各種類型常量書寫規(guī)范0650X9A3.26F 3.4f'CヘビV,ヽ,,,,ヽ,,,、、,0X9AL45L 451 35U35u2.3E8 22.3e-4 5.3e4'\24'MOI1'\x4.99a'"string”空字符へ0,,空格,1,空串””常見錯誤:①ハ進制數048,0后面跟大于?的數字②,\038T、0后面跟大于7的數字③十六進制數OxaG,Ox后面跟大于f/F的字符④5.3e4.2,指數部分寫成了帶小數點的實型數⑤-abcS單引號中括多個字符(例子)以下合法的常量是A)''28'B)'OXAB'C)2.3E8.0D)”ab\Ocd”#include<stdio.h>main()(printf(n%d,%d\nn,strlen(nab\Ocdn),sizeof(nab\Ocdn));)輸出2,63,基本類型數據在內存中的長度以及存放形式:整型數據:補碼形式存儲正整數的補碼與原碼相同實型數據:浮點形式存儲sizeof(char)=sizeof(unsignedchar)1字節(jié)sizeof(short)=sizeof(unsignedshort)2字節(jié)sizeof(int)=sizeof(unsignedint) 2字節(jié)sizeof(Iong)=sizeof(unsignedlong)4字節(jié)sizeof(float) 4 字節(jié)sizeof(double) 8 字節(jié)sizeof(char*)=sizeof(int*)=sizeof(float*)=...=2即所有指針類型的變量的長度都是2〇4.不同整型數據(長度不同)相互賦值原則char,int,short,long,(每種類型前都可加signed和unsigned)得:signedchar,signedint,signedshort,signedlong,unsignedchar,unsignedint,unsignedshort,unsignedlong均可用作整型量賦值時:短ー長截取“長”數據的低位,然后賦值長一短將“短”數據擴展成等長數據,然后賦值擴展原則:若短數據為無符號型,則前面補〇(unsigned)若短數據為有符號型,則前面補符號位(例子)短ー長已知2"=65536,請寫出下列程序段的輸出。inti=65538;cout?i?,\n,;輸出265538是長整型常量65538:00000000000000010000000000000010i:0000000000000010(例子)請寫出下列程序段的輸出。長一短voidmain()charcl=-3;unsignedcharc2=-3;/?短ー長?/intal=cl,a2=c2; /?長一短?/cout?al?,,,?a2?endl;輸出ー3,253-3:1111111111111101(32位)整型常數cl:11111101(8位) c2:11111101(8位)al:1111111111111101(16位)a2:0000000011111101(16位)5.類型轉換(賦值時的類型轉換,混合運算時的類型轉換)(例子)設有語句:for(ints=l,i=2;i<=6;i++)s*=i/2;執(zhí)行該語句后,S的值是〇A.1 B.12C.22 D.22.5【解析】若兩個量都是整型,則運算結果應是整型量。i/2的結果應是整型量,如i=3,貝リレ2的結果應是1。(例子)已知x=2.5,a=7,y=4.7求x+a%3*(int)(x+y)%2/4的值答案:2.5(例子)設有語句:chars[]=H246n,*ptr=s;cout?(char)(*(ptr+l)+l)?,\n,;執(zhí)行以上語句后,輸出〇A.5 B.6C.46D.56①coutw(*(ptr+l)+l)vv,\n二輸出什么?

②表達式(*(ptr+l)+l)的類型是什么?答案:①輸出53(%,的ASCH碼)②表達式類型是int型(例子)設有變量說明:inta=O,b=0;則表達式sizeof「a+b,)的值為:A.1 B.2C.4D.8(例子)設有變量說明:floata=0,b=0;則表達式sizeof(a+b)的值為:A.1 B.2C.4D.8【解析】橫向:必定轉換圖【解析】橫向:必定轉換圖2-3混合運算類型轉換原則doubleAv float,tlongA1.ハunsignedA.Jint 一-chai;short問題:①表達式3+5的類型?int型②sizeof(3+5)的值?2(3)coutv〈C3屮5,)vvendl;104(因為3和5的ASCII碼分別是5I和53)sizeof(*a**?b*)的值為?2sizeof(3)的值? 2sizeof(3)的值?1cout?3*?endl;3(8)cout?int(,3,)?endl;51.表達式的計算(逗號表達式,賦值表達式,邏輯表達式優(yōu)化,關系表達式,整數求余%,整數整除/)(例子)設定義了說明語句:intk,j;下列選項中,沒有語法錯誤的表達式是〇(k++)++B.(k+3)=5C.k-/=5D.k—j【解析】A.++不能作用于表達式C.賦值表達式的左值不能是表達式。D.k-j等價于(k--)-j,不是賦值表達式。自左至右掃描,盡量構成運算符。因此k—j不等價于k-(—j)o(例子)設有變量說明:inta=3,b=4,c=5;下列表達式中,值為〇的表達式是。A. B.a<=ba||b+c&&b-cD.!(a<b&&c<b||b)(例子)已知intx=l,y=3,m=0,n=0,k=0;k=(n=y>x)||(m=x<y);貝リ語句cout?m?\,?n?\,?k?endl;輸出的是〇A)1,1,0B)1,0,1C)1,1,1D)0,1,1(例子)若有語句intx=0,y=l,z=2;z=++x||++y;執(zhí)行以上語句后,變量x、y和z的值分別為答案:1,1,1以上兩題適用于如下規(guī)則邏輯運算優(yōu)化規(guī)則:不管優(yōu)先級,從左至右掃描,若I!前為“真”,或者&&前為“假”,則停止。(“或”運算的前ー個值若為真,則后一個表達式不算)(“與”運算的前ー個值若為假,則后一個表達式不算)(例子)請寫出下列程序段的輸出。intx=-5;if(0<x<10)〃〇小于ー5,錯,所以(0<-5)=O,O〈1O為(Vprintf(n**叭iT);elseprintf(n###\nn);本題答案:輸出***表示數學關系OvxvlO的正確寫法為:kx&&xvlO另外還有:,AY=ch&&ch<=1Z1不能寫成:'Ay=chv=Z(例子)若al,a2,a3和a4均為整型變量,則以下選項中,符合C++語法規(guī)則的表達式是〇A.al=25%3.3 B.a2=al+a3=3*5C.a3=078 D.a4=0Xa2解析:%要求運算量為整型+比=優(yōu)先級高078是非法常量.=與=的區(qū)別(例子)設有語句:inti=10,j=10;if(j=O)i=i*i;elsei=i+j;執(zhí)行以上語句后i的值為〇〃答案:10。J被賦值是〇,所以if里面是。,為假,若J被賦值是12(非零量即可),則輸出I00;(例子)設有語句:inti=10,j=0;if(j==O)i=i*i;elsei=i+j;執(zhí)行以上語句后i的值為〇//100.前后綴++, (例子)執(zhí)行以下程序段后,輸出結果是〇intx=9,y=8;inta,b,c;a=(--x==y++)?-x:++y; //注意=與==的區(qū)別b=x++;c=y;cout?a?,,,?b?,,,?c?endl;A)7,7,9B)8,8,8C)8,9,8D)1,10,9(例子)有語句:inty=100;while(y--cout?ny=n?y?n\nn;其輸出為:A)y=0 B)while構成無限循環(huán)C)y=1 D)y="I(例子)i=5;while(i++<10);運行結束后i=?答案:i=ll.運算符的優(yōu)先級和結合性(例子)以下程序輸出intx=5,y=6;y*=x+y;//等價于y=y*(x+y);cout?y?endl;【解析】?=的優(yōu)先級與=ー樣(例子)voidfun(int*a,int*b)〃a指向cl[0],b指向c2[0]{(*a)++;*b++;〃等價于*(b++),表達式b++的值是b的原始值,而++是作用在b上的*a++;(*b)++;cout?*a?,\f?*b?endl;)voidmain(void){intcl網={地20,30},c2[3]={40,50,60};fun(cl,c2);〃參數傳遞時,有int*a=cl;int*b=c2;cout?cl[0]?,\t,?cl[l]?endl;cout?c2[0]?,\t,?c2[l]?endl;)程序輸出的第一行是 ,第二行是第三行是〃答案:2051 1120 4051f語句的語義(else的匹配問題)(例子)寫出程序的輸出voidmain(){intx=2,y=-1,z=2;if(x<y)

if(y<0)z=0;elsez+=l;cout?z?,\n,;}C)1D)0A)3B)2C)1D)0【解析】else與距它最近的尚未匹配的if匹配,而不是靠書寫對齊來匹配(例子)寫出程序的輸出inta=l,b=2,c=3;if(a==b)if(b==c)printf(nif(b==c)printf(na=b=c\nn);注意:“表達式”中可以有變量。“常數i”只能是常數表達式,如,a1或3+2或3+N等,N是已定義的符號常數。(例子)設變量a,b是整型變量,下列switch語句中,語法正確的是:switch(a){casea:a++;break;caseb:b++;break;)switch(a+b){case1:b=a++;break;case1:a=-H-b;)switch(a*a){case10,12:++a;case14,16:++b;)switch(a/10+b){case3:b=a/10;break;default:a+=b;}(例子)#include<iostream.h>voidmain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y) ?一\{case0:a++;break;j:b++;breakj^^^:a++;b++;break;)cout?,,a=,,?a?,,,b=,,<<b?,\n,;程序輸出為:A)a=2,b=l B)a=l,b=lC)a=l,b=0 D)a=2,b=2(例子)voidmain(void){charc,*s="1234”;while(c=*s++)switch(c-'O'){case0:case1:printf("%c”,c+1);case2:printf("%c\n”,c+2);break;default:printf("%c\n",c+3);break;)printf("\n”);}程序的輸出的第一行是〇答案:23程序的完整輸出是:23467(例子)以下程序若輸入china#則輸出〃5,5voidmain()intvl=0,v2=0;charch;while(ch=getchar())!=*#*)switch(ch)|case'a':case'h':default:vl++;case’〇’:v2++;)cout?vl?','?v2?endl;).循環(huán)for語句中的條件表達式缺省,則條件為永“真”。(例子)設el和e3是表達式,與語句for(el;;e3)s;等同的語句是〇A.for(el;el;e3)s B.for(el;e3;e3)sC.for(el;0;e3)s D.for(el;1;e3)s⑵while(或for)與do-while的區(qū)別,循環(huán)體執(zhí)行的次數(3)循環(huán)的執(zhí)行次數(例子)設有循環(huán)語句:for(inti=0,x=0,s=0;i<=9&&x!=55;i++){scanf(“%d",&x);s+=x;)在這個循環(huán)語句中,循環(huán)體最多執(zhí)行為一次,最少執(zhí)行 次。答案:10 1(例子)執(zhí)行以下語句時,循環(huán)的次數是:for(intx=0,y=0;!x&&y<=5;y++);正確的程序是這樣

A.無次數B.0A.無次數B.0C.5D.6(例子)執(zhí)行以下語句時,循環(huán)的次數是:for(intx=0,y=0;!x&&y<=5;y—);A.無次數 B.0C.5D.6答案:我們習題匯編中給出的答案是A,省考試中心給出的標準答案是D(我們題目錄入錯誤)實際上此題在C語言環(huán)境中無正確答案,循環(huán)次數應該是32769次。y實際變化的過程是:TOC\o"1-5"\h\zy=0 (00000000 0000 0000)y=-l (11111111 1111 1111)y=-2 (11111111 1111 1110)y=-32768(-215)其內存內容是:(1000000000000000)再次減1,發(fā)生溢出(即比int型數值的下限還要小),y變?yōu)?(0111111111111111)值為32767(2J)即int型數值的上限。此yv=5不成立,循環(huán)結束。為了驗證了上述觀點,修改上述程序:#include<stdio.h>main(){intx,y;longcount=0;//count用于統(tǒng)計循環(huán)次數for(x=0,y=0;!x&&y<=5;y)count++;printf(n%ld\n",count);

輸出:32769.嵌套循環(huán),循環(huán)中的break,continue(例子)有一種只在循環(huán)語句或switch語句中使用的流程控制語句,表示該語句的關鍵字是(例子)//判斷一個二維數組是否關于主對角線對稱voidmain(void)|inta[4][4]={1,2,3,4,2,2,5,63,5,2,7,4,6,7,4};123422561234225635274674for(j=0;j<4;j++)for(i=0;i<=j;i++){if(a|j][i]==a[i][j])if(a|j][i]==a[i][j])continue;〃流程轉至リ哪里?if(flag)cout?nNo!n?endl;elsecout?nAllRight!n?endl;}輸出:AllRight!(例子)程序輸出為:#include<iostream.h>voidmain(){inti,j,sum=0;for(i=0;i<5;i++)for(j=0;j<6;j++){sum++;if(i==3)break;"break跳出哪一個循環(huán)?)cout?sum?,,,?i?,,,?j?endl;

輸出:25,5,6(例子16)#include<iostream.h>[T20-13-2[T20-13-2-3。40-55-6601_for(inti=0,s=0;i<4;i++)for(intj=0;j<4;j++)(if(a[i][j]<0)continue;if(a[i][j]==O)break;s+=a[i][j];}cout?s?endl;)程序的輸出是〇輸出:16(例子)voidmain(){intx=3,y=6,a=0;while(x++!=(y-=l))〃注意:比較時,x,y的值{a+=1; // 比較后,x,y的值if(y<x)break;)cout?nx=n?x?n,y=n?y?n,a=n?a?endl;)A)x=4,y=4,a=l B)x=5,y=5,a=lC)x=5,y=4,a=3 D)x=5,y=4,a=l(例子)程序讀入最多20個數,統(tǒng)計正數個數,并計算正數之和。要求或者輸入〇結束,或者若已讀入20個數自動結束。請?zhí)羁铡?include<iostream.h>voidmain(){inti,a[20],sum,count;sum=count=0;for(i=0;;i++){if(i>19);//break;cin?a[i];if(a[i]==0);//break;if(a[i]<0);//continue;sum+=a[i];count++;}cout?nsum=n?sum?,\t,?,,count=,,?count?endl;).函數原型說明,函數調用,函數的返回值(例子)下列關于C++函數的敘述中,正確的是A)每個函數至少要具有一個參數B)每個函數都必須返回一個值〇函數在被調用之前必須先聲明D)函數不能自己調用自己(例子)下列敘述中,不正確的是:ー個函數中可以有多個return語句B.函數可通過return語句返回數據C.必須用ー個獨立的語句來調用函數D.函數main也可以帶有參數【解析】函數調用可以作為表達式的一部分,如y=4+f(x);(例子)在以下的函數原型說明中,存在語法錯誤的是A.voidf(inta,int);voidf2(int,int);C.voidi3(int,int);D.intf4(intx;inty);15.函數的聲明原則:正確程序如下:#include<iostream>usingnamespacestd;intmain()(floatadd(floatx,floaty);floata,b,c;cout?,fpleaseentera,b:cin?a?b;c=add(a,b);coutvv"sum="?c?endl;return0;}floatadd(floatx,floaty){floatz;z=x+y;return(z);或者:#include<iostream>usingnamespacestd;floatadd(floatx,floaty){floatz;z=x+y;return(z);)intmain()(floata,b,c;cout?"pleaseentera,b:"cin?a?b;c=add(a,b);cout?"sum="?c?endl;return0;〃對add函數作聲明〃調用add〃定義add函數〃定義add函數〃調用add16.函數參數逆向求值(例子)寫出以下程序的輸出voidfun(intx,inty,intz)cout?x?y?z?\,;}voidmain(){inta=3,b=5;fun(++a,++b,a+b);cout?a?b?endl;}輸出:468,46(例子)voidmain(){inta=3;printf("%d%d%d\n”,a++,a++,a++);}輸出:543 F從后向前.存儲類別,靜態(tài)變量、全局變量的使用(例子)下列關于變量的敘述中,不正確的是:A.C++語言中將變量分為auto,static,extern和register四種存儲類型B.自動變量和外部變量的作用域為整個程序文件C,函數內定義的靜態(tài)變量的作用域為定義它的函數體D,外部靜態(tài)變量的作用域為定義它的文件內(例子)程序輸出為:intfun(intk){staticintm=l;//靜態(tài)變量,第一次到達該語句時初始化一次intn=2;m=k+m+n++;returnm;voidmain(){for(inti=0;i<3;i++)注意:i的值的變化,在循環(huán)和fun中都所以循環(huán)兩次cout?fun(i+4-)?*\t*;cout?,\n,;)答案:3 7.遞歸(如何解決?)畫圖(1)問題的規(guī)模向終結逼近(2)終結條件(例子)程序輸出為#include<iostream.h>voidfunc(charc){printf("%c",c);if(c〈’3')func(c+1);printf("%c",c);)voidmain(){func(’〇’);}答案:01233210(例子)#include<iostream.h>intm=10;voidfun(intn){m+=m;if(n<=l)cout?m?,\n,;else{fun(n-l);m+=m;cout?m?,\n,;)}voidmain(void){fun(3);fun(5);}程序輸出的第一行至第三行分別是ヽヽ 0答案:80 160 320(例子)#include<iostream.h>intf(intn,intx){x+=l;if(n==3)returnx;elsereturnx+f(n+l,x+1);)voidmain(void){cout?f(3,l)?endl;cout?f(2,l)?endl;cout?f(l,l)?endl;eout?f(0,l)?endl;}程序輸出的四行分別是ーヽーヽー和一〇答案:2 6 12 20(例子)在下面函數的橫線處填上適當的內容,使該函數能夠利用遞歸方法求解字符串str的長度(不得使用系統(tǒng)提供的字符串處理函數)。intGetLen(char*str)(if(L11 )return[21 ;elsereturnl+GetLen(str+l);}答案:【1]!str[O]或str[O]==,\O, [2]0.宏代換,技巧:“一定要手工寫出代換結果”(例子)程序輸出為#defineMOD(x,y)x%yvoidmain(){intz,a=5,b=10;z=MOD(b+3,a); 〃直接簡單代換,不加括號cout?z++?endl;}A)5B)3C)13D)14(例子)若有宏定義:#defineT(x,y)x*y/4則表達式T(3+4,4+4)的值為//20(例子)設有宏定義和變量說明:#defineT(x,y)x+yinta=T(3,4)*T(3,5);則變量a的初值為//2020.指針的意義,函數參數的形式(傳值調用)(普通變量、指針、作參數)考得較多定義指針:intx=8,*p;p=&x;*p間接訪問x,或者說?p與x訪問同一變量。>普通變量做參數:對應的實參與形參是不同的變量,不管是否同名。(值傳遞)>指針做參數:實參指針值賦給形參指針變量(參數單向傳遞)。(指針傳遞)(例子)在C中函數參數傳遞方式有兩種:第一種是值傳遞,第二種是傳遞。答案:指針(或地址)例1:普通變量做函數參數#include<iostream.h>voidswap(intx,inty)〃實參和形參占用不同的存儲空間{ 〃參數傳遞時,intx=x,inty=y,形參是局部變量intt;t=x;x=y;y=t;voidmain() 形參改變不能改變實參intx=3,y=9;swap(x,y);cout?x?*,*?y?endl;)輸出?3,9注意例2:指針做函數參爵ー#include<iostream.h>voidswap(int*px,int*py)〃實參指針和形參指針是不同的指針{ 〃參數傳遞時,int*px=pl,int*py=p2Eit=*px;*px=*py;*py=t;}voidmain()intx=3,y=9,*pl,*p2;pl=&x;p2=&y;swap(pl,p2);cout?x?*,*?y?endl;)輸出?9,3例3:指針做函數參數#include<iostream.h>voidswap(int*px,int*py)〃實參指針和形參指針是不同的指針{ 〃參數傳遞時,int*px=&x,int*py=&yint*tp;tp=px;px=py;py=tp;voidmain()(intx=3,y=9;swap(&x,&y);cout?x?,,,?y?endl;}輸出?3,9(例子)#include<iostream.h>voidfun(int*x,inty)/Z參數y是fun的局部變量,( 〃不影廟主函數中的X。y=*x+y; 〃參數x是指針,指向主函數中的y,*x=y%4; 〃fun函數中?x訪問主函數中的y?!▍祩鬟f時,int*x=&y,inty=xcout?*x?,,,?y?endl;}voidmain(void)intx=4,y=5;fun(&y,x);cout?x?,,,?y?endl;fun(&x,y);cout?x?,,,?y?endl;}程序輸出的第一行是,第二行是,第四行是 〇答案:1,9 4,1 1,1.返回指針值的函數(例子)#include<iostream.h>char*f(char*s,charch){char*p=s,*q=s;while(*q=*p++)if(*q!=ch)q++;//p往后跑的快returns;〃返回的是字符串首指針}voidmain(void){charsl[]=nHelloHowareyou”,§2[]="110010111”;cout?f(sl,,e,)?,\n,;cout?f(s2,,0,)?,\n,;)程序輸出第一行是ー,第二行是ー〇答案:HiloHowaryou111111【解析】函數f的功能是刪除字符串S中出現的字符Ch。.ー維數組的定義、做函數參數(參數的意義和形式)考得較多(例子)要定義數組A,使得其中每個元素的數據依次為:3、9、4、8、〇、〇、0,錯誤的定義語句是intA[]={3,9,4,8,0,0,0);intA[7]={3,9,4,8); //后面的元素值為〇intA[1={3,9,4,8); 〃數組長度是4D)intA[7]={3,9,4,8,0,0,0};說明:intA[7];若A是局部數組,則其元素值不確定若A是全局數組,則其元素值均為0若有:intA[7]={3};只要給出至少ー個初值,其余元素為0(例子)下列數組定義中,錯誤的是〇A.intal[2]={l}; B.inta2[][2]={{1},{2}};C.inta3|3]; D.inta4|][3];【解析】定義數組時(不論ー維還是二維),必須指定每ー維的大小。要么顯式寫出,要么從給出的初值中能夠判斷維數的大小。但是,若用數組做函數參數,寫形參時,對ー維數組來說,長度是否寫出無關緊要,因為傳遞的是首指針;對二維數組來說行數是否寫出也無關緊要,因為傳遞的是行指針,對行指針而言,關鍵是一行中有幾個元素,即列數,所以形參中列數必須寫出。(例子)針對數組定義intdata[101;,下列表述中錯誤的是A)用?data可訪問到數組的首元素〃數組元素下標從0開始B)用data[9]可訪問到數組的末元素C)用data[10]可訪問到數組元素會超出數組邊界〃越界data共有!0個元素,其首元素是data[l](例子)設定義了宏:#defineN2以下定義數組的選項中,存在語法錯誤的是:A.intn;scanf("%d'',&n);inta[n];intconstn=5;inta[n];〃n是常數

inta[2*N+l]〃2*N+1是常量表達式inta[]={1,2,3,4,5};doubleb[sizeof(a)];//sizeof(a)也是常量?ー維指針做參數:注意形參的寫法(形參是指針變量)訪問數組的各種方式!intfsum(intintfsum(int*b,intn)〃或intb[10]{inti,s=0;for(i=0;i<n;i++)

s+=b[i];return(s);) 〃在被調函數中可以:b++intfsum(intb|],intn){inti,s=0;for(i=0;i<n;i++)ぎ+=(*b++);return(s);voidmain(void)14,15);{inta[15]={1,2,3intshead,stail;shead=fsum(a,l0);〃第1次調用stail=fsum(&a[5],10);/Z第2次調用cout?shead?4/?stail?endl;14,15);(例子)寫出程序的輸出#include<iostream.h>(圖)voidfun(float*pl,float*p2,float*s){s=(float*)malloc(sizeof(float));*s=*pl+*(p2++);)voidmain()floata[2]={l.l,2.2};floatb[2]={10.0,20.0},*s=a;fun(a,b,s);*s);}程序輸出為:D)1.1D)1.1?ー維數組與指針inta[10J; 圖加t*P;}而*p=a;p=a;第i個元素的值a[i],*(a+i),p[i],*(p+i),p=p+i;*p第i個元素的地址a+i,&a[i],p+i,&p[i],p=p+i;p(例子)程序中有如下語句for(inti=0;i<5;i++)cout?*(p+i)?w,w;能夠依次輸出int型ー維數組DATA的前5個元素。由此可知,變量p的定義及初始化語句是。答案:int*p=DATA(例子)有如下定義和語句,其中04iV6,inta[]={1,3,5,7,9,11),*P,i;P=a;則對數組a的元素地址的正確表示是:A)&(a+i)B)a++C)&(p+i)D)&p[i](例子)#include<iostream.h>〃數組元素逆置,部分元素逆置voidf(int*s,intnl,intn2){intt;while(nl<n2){ t=*(s+nl);*(s+nl)=*(s+n2);*(s+n2)=t;nl++;n2-;)}voidmain(void){inta[10]={l,2,3,4,5,6,7,8,9,0},i,*p=a;f(P,o,3);f(p+2,1,6);for(i=l;i<10;i++){if(i%5==0)printf(n\nn);printf(n%dn,a[i]);}printf(n\nn);}程序輸出的第一行是ー,第二行是ー〇答案:3298 76510.字符指針初始化,字符指針指向字符數組(例子)以下四組語句中,不符合C++語法規(guī)則的是charstr[]=nGoodmorning";charstr[20];str="Goodmorning";char*p="Goodmorning";〃C和D等價char*p;p="Goodmorning";//字符串的值是其起始地址(例子)若有char*p="Hello";則以下選項中錯誤的是A.chara=*p; //*p是'H,B.char*s=*p;〃*p表示字符,不能賦值給指針sC.char*q=p+2;〃將指針p+2賦值給qD.p=p+2;.strlen和sizeof"China"字符串的長度是5,但其存儲空間是6〇(例子)設有說明語句:chars[J="ab\0\123\\\n79nstrlen(s)的值是〇A.2B.3C.8D.14而sizeof(s)的值是9〇(例子)以下語句的輸出是〇chars[20]="ATS\0JK\\";cout?strlen(s)?","?sizeof(s)?"," 〃注意s是數組名?sizeof("ATS\OJK\\n)?endl;答案:3,20,8(例子)注意字符串的意義:,MT結尾,strlen(nATS\nO12\l\\n)的結果是9strlen("ATS\012\l\\")的結果是6strlen(nATS\0\l\\")的結果是3chars[20];char*p=s;sizeof(p)?sizeof(s)?答案:2 20sizeof()括號中若是數組名,則求的是數組總空間;若是指針變量,則求的是指針變量自身的長度。(例子)若有doublea[3H4];則sizeof(a)的值是〇A.7 B.12 C.48D.96(例子)inta[3][4];intb[10];int(*pa)[4]=a,*pb=b;

則sizeof(a)的值是48則sizeof(pa)的值是2 〃任何類型的指針,長度都是2則sizeof(b)的值是40則sizeof(pb)的值是225.字符指針的意義(指針空間,串空間,*p的含義)考得較多char*pc,s[20],pc=s;pc=pc+i;*pc;pc[i],通過指針訪問字符數組中的字符pc通過指針訪問ー維字符數組整體cout?pc;輸出的是pc指向的字符串,而不是地址cout?*pc;輸出的是pc指向的字符字符串處理函數的參數為字符串首地址,即字符串中第1個字符的地址。(例子)charsl[10]="123n,s2[10]=nabcn;strcpy(sl+2,s2+l);〃輸出I2bc〃輸出2bcprintf(M%s〃輸出I2bc〃輸出2bccout?sl+1;cout?strlen(sl+l);〃輸出3strcpy(sl,nwl23n);strcpy(s2,**erwl23H);cout?strcmp(sl+l,s2+3);〃輸出0(例子)設有說明語句:chars[]=**123\t456\00089**,*p=s;執(zhí)行以下兩個語句:printf("%c\n”,*(p+5));printf("%s”,p+5);則輸出分別為和〇〃答案:5 56(例子)設有語句:inti;char*s=na\04+04V\0V\bn;for(i=0;*s++;i++);執(zhí)行以上語句后,變量i的值為〇//6若改為:inti;char*s="a\08+04\,\0V\bH;for(i=0;*s++;i++);則執(zhí)行以上語句后,變量i的值為:1(例子)#include<iostream.h>#include<string.h>voidswap(char*sl,char*s2)(chart;t=*sl;*sl=*s2;*s2=t;}voidmain(){charsl[]=”BD”,s2[]=”BC”,s3[]=”AB”;if(strcmp(sl,s2)>0)swap(sl,s2);if(strcmp(s2,s3)>0)swap(s2,s3);if(strcmp(sl,s2)>0)swap(sl,s2);printf("%s\n”,si);/Z第一行輸出ADprintf("%s\n”,s2);//第二行輸出BC

printf("%s\n",s3);/Z第三行輸出BB)(練習)下列程序的輸出結果是#include<iostream>

usingnamespacestd;intmain(){chara[]="Hello,Worldn;char*ptr=a;while(*ptr)(if(*ptr>='a'&&*ptr<=,z,)cout?char(*ptr+,A,-,a,); 〃字符的大小寫轉換elsecout?*ptr;ptr++;}return0;)A)HELLO,WORLD B)Hello,WorldC)hELLO,wORLD D)hello,world.常用字符串處理函數(strlen,strcpy,strcat,strcmp等)(另外還要會自己編寫字符串處理函數,實現系統(tǒng)的字符串處理函數相同的功能。)見實驗手冊算法總結.二維數組的定義和存放形式、做函數參數(實參和形參)考得較少,inta[4][5];intCp),51;\int(*p)[5]=a;〃兩行等價于一行P=a: 一p[i]UL*(*(p+i)+j),*(p[i]+j),(*(p+i))LH,第i行第j列元素的p[i]UL*(*(p+i)+j),*(p[i]+j),(*(p+i))LH,*(*(a+i)+j),(*(a+i))|j|,第i行第j列元素的地址イ(*(a+i)+j, *(p+i)+j, "べ川+j, P【i]+j,ノ元素指針行指針:如a,p,加1,移動一行元素位置(大元素)歹!]指針(元素指針):如a[i],*(a+i),*(p+i),*p加1?移動一列(ー個)元素位置行指針前加?變?yōu)榱兄羔?例子)有以下定義inta[3][4],(*p)[4]=a;對數組元素的錯誤引用是A)p[01H] B)*(p+l)[2]C)*(p[2]+3) D)*(a[l]+l)E)(*(p+D)[2]?二維指針做參數:注意形參的寫法(形參是指針變量)例:求二維數組全體元素之和二維數組嘴:等價地寫成:inttotal(int(*p)[4],intn)//n行數?:。{ 或:intp[3][4]inti,j,sum=O;for(i=0;i<n;i++)for(j=0;j<4;j++)sum+=*(*(p+i)+j);returnsum;〃在被調函數中可以:p++,因為p是ー個指針變量}voidmain(void){inta[3][4]={ },sum;sum=total(a,3);cout?sum?endl;.二維字符數組(例子)#include<iostream.h>#include<string.h>intisvowel(charc)//判斷c是否為元音字母{return(c==,a,||c==,e,||c=='i'||c=='o”|c=='u');}voidpluralize(char*s)〃使成復數{intlen=strlen(s);char*p=s+len-l;char*q=s+len-2;if(*p=='h'&&(*q=='c'||*q=='s'))strcat(p,"es");//strcat函數實現兩個字符串的拼接elseif(*p==,s,)strcat(p,"esn);elseif(*p=*y*)if(isvowel(*q))strcat(p,"s");elsestrcpy(p,”ies'‘);elseif(*p=*z*)if(isvowel(*q))strcat(p,nzesn);elsestrcat(p,nesn);elsestrcat(p,**sH);voidmain(void)( 〃二維字符數組,6個子串。charword[6][20]={”wish'',"bus","toy”,"navy","quiz","computer"};for(inti=0;i<6;i++)pluralize(word|i|);〃word[i]是第i行字符串的指針printf("%s\t”,word[i]);if((i+l)%2==0)printf(*\n*);))程序輸出第一行是ー,第二行是ー,第三行是ー〇答案:wishesbusestoysnaviesquizzescomputers另外:參見教材P156,例9.29和例9.30,尤其是例9.30?!ɡ?.30改寫例9.29,學習如何使用指針數組做函數參數。#include<iostream.h>#include<string.h>voidmain(){voidsort(char*[],int),print(char*[],int);〃函數原型說明,因為函數定義在后char*name[] 〃指針數組★={"George","Mary",“Susan","Tom","Davis"};intn=5;sort(name,n);print(name,n);)voidsort(char*name[],intn)〃函數定義,注意參數的寫法{char*ptr;inti,j,k;for(i=0;i<n-l;i++)(k=i;for(j=i+l;j<n;j++)if(strcmp(name[k],name[j])>0)k=j;if(k!=i){ptr=name[i];name[i]=name[k];name[k]=ptr;}))voidprint(char*name[],intn)〃函數定義,注意參數的寫法{for(inti=0;i<n;i++)cout?name[i]?endl;.將二維數組看成一維數組訪問(例子)若有變量說明:inta[3][3]={l,2,3,4,5,6,7,8,9},m,*ptr=&a[0][0];執(zhí)行語句:m=(*ptr)*(*(ptr+3))*(*(ptr+6));則m的值為:A)8B)21C)28D)48(例子)若有如下的說明和語句:inta[7][8],*ip;ip=(int*)a;使指針ip指向a[4][6]的正確答案是:A)ip+=3*8+6 B)ip4-=(3*8+6)*sizeof(int)C)ip+=4*8+6 D)ip+=(4*8+6)*sizeof(int).指針綜合題(行指針,指針數組,指向指針的指針)(例子)設有說明語句:float

溫馨提示

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

評論

0/150

提交評論