![C++筆試要點(diǎn)(代C語(yǔ)言要點(diǎn))_第1頁(yè)](http://file4.renrendoc.com/view/33ad7ffd2cff1228de2392e5e12a03ab/33ad7ffd2cff1228de2392e5e12a03ab1.gif)
![C++筆試要點(diǎn)(代C語(yǔ)言要點(diǎn))_第2頁(yè)](http://file4.renrendoc.com/view/33ad7ffd2cff1228de2392e5e12a03ab/33ad7ffd2cff1228de2392e5e12a03ab2.gif)
![C++筆試要點(diǎn)(代C語(yǔ)言要點(diǎn))_第3頁(yè)](http://file4.renrendoc.com/view/33ad7ffd2cff1228de2392e5e12a03ab/33ad7ffd2cff1228de2392e5e12a03ab3.gif)
![C++筆試要點(diǎn)(代C語(yǔ)言要點(diǎn))_第4頁(yè)](http://file4.renrendoc.com/view/33ad7ffd2cff1228de2392e5e12a03ab/33ad7ffd2cff1228de2392e5e12a03ab4.gif)
![C++筆試要點(diǎn)(代C語(yǔ)言要點(diǎn))_第5頁(yè)](http://file4.renrendoc.com/view/33ad7ffd2cff1228de2392e5e12a03ab/33ad7ffd2cff1228de2392e5e12a03ab5.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C++筆試部分要點(diǎn):
1.標(biāo)識(shí)符(可作為變量名、數(shù)組名、函數(shù)名等)的命名規(guī)范
①由52個(gè)英文大小寫(xiě)字母,10個(gè)數(shù)字,一個(gè)下劃線(xiàn)構(gòu)
成
②以英文字母或下劃線(xiàn)開(kāi)頭,不能是保留字
(例子)下列符號(hào)中可以用作C++標(biāo)識(shí)符的是
A)MainB)foo-barC)elseD)3room
常見(jiàn)錯(cuò)誤及注意事項(xiàng):
①以數(shù)字開(kāi)頭(如3room),
②中間含有空格或非法字符(如foo-bar,或MyName)
③區(qū)別大小寫(xiě)(如Main與main不同,if與If不同)
④保留字(如if、while等)不能作為標(biāo)識(shí)符
⑤但編譯預(yù)處理命令(如include、define、main等)不是
保留字,它們可以被用作標(biāo)識(shí)符。
如,下列程序合法:
//include<iostream.h>
voidmain()
(
intinclude;
cin?include;
cout?include?endl;
)
//include<iostream.h>
voidmainO
(
intmain;
cin?main;
cout?main?endl;
)
#include<iostream.h>
voidmainQ
intdefine;
cin?define;
cout?define?endl;
)
2.各種類(lèi)型常量書(shū)寫(xiě)規(guī)范
0650X9A0X9AL45L45135U35u
3.26F3.4f2.3E822.3e-45.3e4
'C'\t''\n''\24'MOI*'\x4.99a'
Tn3"string”
空字符*\0\空格,,,空串””
常見(jiàn)錯(cuò)誤:
①八進(jìn)制數(shù)048,0后面跟大于7的數(shù)字
②,038,,\0后面跟大于7的數(shù)字
③十六進(jìn)制數(shù)OxaG,Ox后面跟大于f/F的字符
④5.3e4.2,指數(shù)部分寫(xiě)成了帶小數(shù)點(diǎn)的實(shí)型數(shù)
⑤fabcS單引號(hào)中括多個(gè)字符
(例子)以下合法的常量是
A)'\28'B)'OXAB'C)2.3E8.0D)nab\OcdH
^include<stdio.h>
main()
(
printf(H%d,%d\nH,strlen(Hab\OcdH),sizeof(nab\OcdH));
)輸出2,6
3.基本類(lèi)型數(shù)據(jù)在內(nèi)存中的長(zhǎng)度以及存放形式:
整型數(shù)據(jù):補(bǔ)碼形式存儲(chǔ)正整數(shù)的補(bǔ)碼與原碼相同
實(shí)型數(shù)據(jù):浮點(diǎn)形式存儲(chǔ)
sizeof(char)=sizeof(unsignedchar)1字節(jié)
sizeof(short)=sizeof(unsignedshort)2字節(jié)
sizeof(int)=sizeof(unsignedint)2字節(jié)
sizeof(long)=sizeof(unsignedlong)4字節(jié)
sizeof(float)4字節(jié)
sizeof(double)8字節(jié)
sizeof(char*)=sizeof(int*)=sizeof(float*)=...=2
即所有指針類(lèi)型的變量的長(zhǎng)度都是2o
4.不同整型數(shù)據(jù)(長(zhǎng)度不同)相互賦值原則
char,int,short,long,
(每種類(lèi)型前都可加signed和unsigned)得:
signedchar,signedint,signedshort,signedlong,
unsignedchar,unsignedint,unsignedshort,unsignedlong
均可用作整型量
賦值時(shí):短一長(zhǎng)截取“長(zhǎng)”數(shù)據(jù)的低位,然后賦值
長(zhǎng)一短將“短”數(shù)據(jù)擴(kuò)展成等長(zhǎng)數(shù)據(jù),然后賦值
擴(kuò)展原則:若短數(shù)據(jù)為無(wú)符號(hào)型,則前面補(bǔ)0(unsigned)
若短數(shù)據(jù)為有符號(hào)型,則前面補(bǔ)符號(hào)位
(例子)短一長(zhǎng)
已知216=65536,請(qǐng)寫(xiě)出下列程序段的輸出。
inti=65538;cout?i?'\n';輸出2
65538是長(zhǎng)整型常量
65538:00000000000000010000000000000010
i:0000000000000010
(例子)請(qǐng)寫(xiě)出下列程序段的輸出。長(zhǎng)一短
voidmain()
charcl=-3;unsignedcharc2=-3;/*短―長(zhǎng)*/
intal=cl,a2=c2;/*長(zhǎng)―短*/
cout<<al?y?a2?endl;輸出-3,253
-3:1111111111111101(32位)整型常數(shù)
cl:11111101(8位)c2:11111101(8位)
al:1111111111111101(16位)a2:0000000011111101(16位)
5.類(lèi)型轉(zhuǎn)換(賦值時(shí)的類(lèi)型轉(zhuǎn)換,混合運(yùn)算時(shí)的類(lèi)型轉(zhuǎn)換)
(例子)設(shè)有語(yǔ)句:for(ints=l,i=2;i<=6;i++)s*=i/2;
執(zhí)行該語(yǔ)句后,s的值是o
A.1B.12
C.22D.22.5
【解析】
若兩個(gè)量都是整型,則運(yùn)算結(jié)果應(yīng)是整型量。
i/2的結(jié)果應(yīng)是整型量,如i=3,則i/2的結(jié)果應(yīng)是1。
(例子)已知x=2.5,a=7,y=4.7
求x+a%3*(int)(x+y)%2/4的值
答案:2.5
(例子)設(shè)有語(yǔ)句:
chars[]=H246",*ptr=s;
cout?(char)(*(ptr+l)+l)?,\n,;
執(zhí)行以上語(yǔ)句后,輸出o
A.5B.6C.46D.56
①coutw(*(ptr+l)+l)?*\n*;輸出什么?
②表達(dá)式(*(ptr+l)+l)的類(lèi)型是什么?
答案:①輸出53(5的ASCH碼)
②表達(dá)式類(lèi)型是int型
(例子)設(shè)有變量說(shuō)明:inta=O,b=0;
則表達(dá)式sizeof(卬+E)的值為:
A.1B.2C.4D.8
(例子)設(shè)有變量說(shuō)明:floata=0,b=0;
則表達(dá)式sizeof(a+b)的值為:
A.1B.2C.4D.8
【解析】
圖2-3混合運(yùn)算類(lèi)型轉(zhuǎn)換原則
doubleY-----float
橫向:必定轉(zhuǎn)換A
,t
long
A
1.,
unsigned
A
.J
intv—-char,short
問(wèn)題:
①表達(dá)式3+5的類(lèi)型?int型
②sizeof(3+5)的值?2
③coutvv(3+5)vvendl;104
(因?yàn)楹偷拇a分別是和
④35ASCII5153)
⑤sizeof('a'*'b')的值為?2
⑥sizeof(3)的值?2
⑦sizeof(3)的值?1
cout?3*?endl;3
⑧cout?int(,3,)?endl;51
6.表達(dá)式的計(jì)算
(逗號(hào)表達(dá)式,賦值表達(dá)式,邏輯表達(dá)式優(yōu)化,關(guān)系表達(dá)式,
整數(shù)求余%,整數(shù)整除/)
(例子)設(shè)定義了說(shuō)明語(yǔ)句:
intk,j;
下列選項(xiàng)中,沒(méi)有語(yǔ)法錯(cuò)誤的表達(dá)式是O
A.(k++)++B.(k+3)=5C.k-/=5D.k—j
【解析】
A.++不能作用于表達(dá)式
B.C.賦值表達(dá)式的左值不能是表達(dá)式。
D.k-j等價(jià)于(k-)-j,不是賦值表達(dá)式。
自左至右掃描,盡量構(gòu)成運(yùn)算符。
因此k---j不等價(jià)于k-(―j)o
(例子)設(shè)有變量說(shuō)明:inta=3,b=4,c=5;下列表達(dá)式中,
值為0的表達(dá)式是O
A.卬&&3B.a<=b
C.a||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);
貝!I語(yǔ)句cout?m?,,,?n?,,,?k?endl;
輸出的是o
A)1,1,0B)1,0,1C)1,1,1D)0,1,1
(例子)若有語(yǔ)句
intx=0,y=l,z=2;
z=+4-x||++y;
執(zhí)行以上語(yǔ)句后,變量x、y和z的值分別為
答案:1,1,1
以上兩題適用于如下規(guī)則
邏輯運(yùn)算優(yōu)化規(guī)則:不管優(yōu)先級(jí),從左至右掃描,若II前
為“真”,或者&&前為“假”,則停止。
(“或”運(yùn)算的前一個(gè)值若為真,則后一個(gè)表達(dá)式不算)
(“與”運(yùn)算的前一個(gè)值若為假,則后一個(gè)表達(dá)式不算)
(例子)請(qǐng)寫(xiě)出下列程序段的輸出。
intx=-5;
if(0<x<10)//0小于-5,錯(cuò),所以(0<-5)=0,0<10為
T
printf(n***\n'');
else
printf(H###\n");
本題答案:輸出***
表示數(shù)學(xué)關(guān)系0<x<10的正確寫(xiě)法為:ivx&&x<10
另外還有:,AY=ch&&ch<=
不能寫(xiě)成:'A,v=chv=Z
(例子)若al,a2,a3和a4均為整型變量,則以下選項(xiàng)中,
符合C++語(yǔ)法規(guī)則的表達(dá)式是O
A.al=25%3.3B.a2=al+a3=3*5
C.a3=078D.a4=0Xa2
解析:
%要求運(yùn)算量為整型
+比=優(yōu)先級(jí)高
078是非法常量
7.=與==的區(qū)別
(例子)
設(shè)有語(yǔ)句:
inti=10,j=10;
if(j=O)i=i*i;
elsei=i+j;
執(zhí)行以上語(yǔ)句后i的值為o//答案:10oj被賦值
是0,所以if里面是0,為假,若j被賦值是12(非零量即
可),則輸出100;
(例子)
設(shè)有語(yǔ)句:
inti=10,j=0;
if(j==O)i=i*i;
elsei=i+j;
執(zhí)行以上語(yǔ)句后i的值為o//100
8.前后綴++,---
(例子)執(zhí)行以下程序段后,輸出結(jié)果是O
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
(例子)有語(yǔ)句:
inty=100;
while(y--
cout?Hy=n?y?H\nn;其輸出為:
A)y=0B)while構(gòu)成無(wú)限循環(huán)
C)y=1D)y=-1
(例子)i=5;while(i++<10);運(yùn)行結(jié)束后i=?
答案:i=U
9.運(yùn)算符的優(yōu)先級(jí)和結(jié)合性
(例子)以下程序輸出
intx=5,y=6;
y*=x+y;//等價(jià)于y=y*(x+y);
cout?y?endl;
【解析】*=的優(yōu)先級(jí)與=一樣
(例子)
voidfun(int*a,int*b)〃a指向cl[0],b指向c2[0]
(
(*a)++;
*b++;//等價(jià)于*(b++),表達(dá)式b++的值是b的原始值,
而++是作用在b上的
*a++;
(*b)++;
cout?*a?,\t,?*b?endl;
)
voidmain(void)
(
intcl[3]={10,20,30},c2[3]={40,50,60};
fun(cl,c2);〃參數(shù)傳遞時(shí),有int*a=cl;int*b=c2;
cout?cl[O]?,\t,?cl[l]?endl;
cout?c2[0]?,\t,?c2|l]?endl;
)
程序輸出的第一行是,第二行是,第三行是
〃答案:205111204051
lO.if語(yǔ)句的語(yǔ)義(else的匹配問(wèn)題)
(例子)寫(xiě)出程序的輸出
voidmain()
{intx=2,y=-1,z=2;
if(x〈y)
if(y<0)z=0;
elsez+=l;
cout?z?*\n,;
)
A)3B)2C)1D)0
【解析】eke與距它最近的尚未匹配的if匹配,而不是靠書(shū)
寫(xiě)對(duì)齊來(lái)匹配
(例子)寫(xiě)出程序的輸出
inta=l,b=2,c=3;
if(a==b)
if(b==c)printf("a=b=c\ii");
elseprintf(Ha!=b\nH);
答案:無(wú)輸出
整型、枚舉類(lèi)型或
11.switch語(yǔ)句---字符型
switch俄達(dá)
case
case常數(shù)2:...
case常數(shù)3:...
default:...
注意:“表達(dá)式”中可以有變量?!俺?shù)i”只能是常數(shù)表達(dá)
式,如3或3+2或3+N等,N是已定義的符號(hào)常數(shù)。
(例子)
設(shè)變量a,b是整型變量,下列switch語(yǔ)句中,語(yǔ)法正確的
是:
A.switch(a){
casea:a++;break;
caseb:b++;break;
)
B.switch(a+b){
case1:b=a++;break;
case1:a=++b;
)
C.switch(a*a){
case10,12:++a;
case14,16:++b;
)
D.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
case1:b++;break^^/
case2:a++;b++;break;
)
cout?,,a=,,?a?,,,b=,,<<b?,\n,;
程序輸出為:
A)a=2,b=lB)a=l,b=l
C)a=l,b=0D)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”);
)
程序的輸出的第一行是o
答案:23
程序的完整輸出是:
23
4
6
7
(例子)以下程序若輸入china#則輸出115,5
voidmain()
intvl=0,v2=0;
charch;
while(ch=getchar())!='#')
switch(ch)
{
case'a':
case'h':
default:vl+4-;
case'o':v2++;
)
cout?vl?,,,?v2?endl;
12.循環(huán)
(1)for語(yǔ)句中的條件表達(dá)式缺省,則條件為永“真
(例子)設(shè)el和e3是表達(dá)式,與語(yǔ)句for(el;;e3)s;等同的
語(yǔ)句是o
A.for(el;el;e3)sB.for(el;e3;e3)s
C.for(el;0;e3)sD.for(el;1;e3)s
⑵while(或for)與do-while的區(qū)別,循環(huán)體執(zhí)行的次數(shù)
(3)循環(huán)的執(zhí)行次數(shù)
(例子)設(shè)有循環(huán)語(yǔ)句:
for(inti=0,x=0,s=0;i<=9&&x!=55;i++)
(
tt,,
scanf(%d?&x);
s+=x;
)
在這個(gè)循環(huán)語(yǔ)句中,循環(huán)體最多執(zhí)行為一次,最少執(zhí)行
_____次。
答案:101
(例子)執(zhí)行以下語(yǔ)句時(shí),循環(huán)的次數(shù)是:
for(intx=0,y=0;!x&&y<=5;y++);正確的程序是這樣
A.無(wú)次數(shù)B.0C.5D.6
(例子)執(zhí)行以下語(yǔ)句時(shí),循環(huán)的次數(shù)是:
for(intx=0,y=0;!x&&y<=5;y—);
A.無(wú)次數(shù)B.0C.5D.6
答案:我們習(xí)題匯編中給出的答案是A,
省考試中心給出的標(biāo)準(zhǔn)答案是D(我們題目錄入錯(cuò)誤)
實(shí)際上此題在C語(yǔ)言環(huán)境中無(wú)正確答案,循環(huán)次數(shù)應(yīng)該是
32769次。
y實(shí)際變化的過(guò)程是:
y=0(0000000000000000)
y=-l(1111111111111111)
y=-2(inimimimo)
???
y=-32768(-215)其內(nèi)存內(nèi)容是:
(1000000000000000)
再次減1,發(fā)生溢出(即比int型數(shù)值的下限還要小),y變
為:
(0111111111111111)
值為32767(2第一1)即int型數(shù)值的上限。
此yv=5不成立,循環(huán)結(jié)束。
為了驗(yàn)證了上述觀點(diǎn),修改上述程序:
#include<stdio.h>
main()
(
intx,y;
longcount=0;//count用于統(tǒng)計(jì)循環(huán)次數(shù)
for(x=0,y=0;!x&&y<=5;y~)count++;
printf(H%ld\nM,count);
輸出:32769
13.嵌套循環(huán),循環(huán)中的break,continue
(例子)有一種只在循環(huán)語(yǔ)句或switch語(yǔ)句中使用的流程控
制語(yǔ)句,表示該語(yǔ)句的關(guān)鍵字是
(例子)〃判斷一個(gè)二維數(shù)組是否關(guān)于主對(duì)角線(xiàn)對(duì)稱(chēng)
voidmain(void)
{
inta[4][4]={l,2,3,4,2,2,5,6,3,5,2,7,4,6,7,4};
inti,j,flag=0;
1234
2256
for(j=0;j<4;j++)3527
for(i=0;i<=j;i++)4674
(
if(a[j][i]==a[i][j])continue;〃流程轉(zhuǎn)到哪里?
if(flag)cout?HNo!n?endl;
elsecout?HAllRight!H?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跳出哪一個(gè)循環(huán)?
)
cout?sum?y?i?y?j?endl;
輸出:25,5,6
(例子16)
#include<iostream.h>
voidmain(void)
{inta[4][4]={{l,2,0,-2,-3,0},{4,0,-5,5},{-6,6,0,7});
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[“[j];
)
cout?s?endl;
)
程序的輸出是O
輸出:16
(例子)
voidmain()
{intx=3,y=6,a=0;
while(x++!=(y-=l))〃注意:比較時(shí),x,y的值
{a+=1;//比較后,x,y的值
if(y<x)break;
)
cout?Hx=H?x?H,y=H?y?H,a="?a?endl;
)
A)x=4,y=4,a=lB)x=5,y=5,a=l
C)x=5,y=4,a=3D)x=5,y=4,a=l
(例子)程序讀入最多20個(gè)數(shù),統(tǒng)計(jì)正數(shù)個(gè)數(shù),并計(jì)算正
數(shù)之和。要求或者輸入0結(jié)束,或者若已讀入20個(gè)數(shù)自動(dòng)
結(jié)束。請(qǐng)?zhí)羁铡?/p>
#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?Hsum=,,?sum?,\t,?Hcount=H?count?endl;
)
14.函數(shù)原型說(shuō)明,函數(shù)調(diào)用,函數(shù)的返回值
(例子)下列關(guān)于C++函數(shù)的敘述中,正確的是
A)每個(gè)函數(shù)至少要具有一個(gè)參數(shù)
B)每個(gè)函數(shù)都必須返回一個(gè)值
C)函數(shù)在被調(diào)用之前必須先聲明
D)函數(shù)不能自己調(diào)用自己
(例子)下列敘述中,不正確的是:
A.一個(gè)函數(shù)中可以有多個(gè)return語(yǔ)句
B.函數(shù)可通過(guò)return語(yǔ)句返回?cái)?shù)據(jù)
C.必須用一個(gè)獨(dú)立的語(yǔ)句來(lái)調(diào)用函數(shù)
D.函數(shù)main也可以帶有參數(shù)
【解析】函數(shù)調(diào)用可以作為表達(dá)式的一部分,如y=4+f(x);
(例子)在以下的函數(shù)原型說(shuō)明中,存在語(yǔ)法錯(cuò)誤的是
A.voidf(inta,int);B.voidf2(int,int);
C.voidf3(int,int);D.intf4(intx;inty);
15.函數(shù)的聲明原則:
正確程序如下:
#include<iostream>
usingnamespacestd;
intmain()
(
floatadd(floatx,floaty);〃對(duì)add函數(shù)作聲明
floata,b,c;
coutvv"pleaseentera,b:"
cin?a?b;
c=add(a,b);〃調(diào)用add
coutvv"sum="?c?endl;
return0;
)
floatadd(floatx,floaty)〃定義add函數(shù)
(
floatz;
z=x+y;
return(z);
)
或者:
#include<iostream>
usingnamespacestd;
floatadd(floatx,floaty)〃定義add函數(shù)
(
floatz;
z=x+y;
return(z);
intmain()
{
floata,b,c;
cout?f,pleaseentera,b:"
cin?a?b;
c=add(a,b);〃調(diào)用add
cout?sum="?c?endl;
return0;
16.函數(shù)參數(shù)逆向求值
(例子)寫(xiě)出以下程序的輸出
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(u%d%d%d\n,\a++,a++,a++);
}
輸出:543從后向前
17.存儲(chǔ)類(lèi)別,靜態(tài)變量、全局變量的使用
(例子)
下列關(guān)于變量的敘述中,不正確的是:
A.C++語(yǔ)言中將變量分為auto,static,extern和register四
種存儲(chǔ)類(lèi)型
B.自動(dòng)變量和外部變量的作用域?yàn)檎麄€(gè)程序文件
C.函數(shù)內(nèi)定義的靜態(tài)變量的作用域?yàn)槎x它的函數(shù)體
D.外部靜態(tài)變量的作用域?yàn)槎x它的文件內(nèi)
(例子)
程序輸出為:
intfun(intk)
{staticintm=l;〃靜態(tài)變量,第一次到達(dá)該語(yǔ)句時(shí)初始化一次
intn=2;
m=k+m+n++;
returnm;
)
voidmain()
{for(inti=0;i〈3;i++)在意:i的值的變化,在循環(huán)和fun
中都“++”,所以循環(huán)兩次
cout?fun(i++)?,\t,;
cout?,\n,;
)
答案:37
18.遞歸(如何解決?)畫(huà)圖
(D問(wèn)題的規(guī)模向終結(jié)逼近
(2)終結(jié)條件
(例子)程序輸出為
#include<iostream.h>
voidfunc(charc)
(
printf("%c",c);
if(c<3)func(c+1);
printf("%c",c);
)
voidmain()
{func('0');}
答案: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);)
程序輸出的第一行至第三行分別是、、
_____O
答案:80160320
(例子)
#include<iostream.h>
intf(intn,intx)
(
X+=1;
if(n==3)returnx;
else
returnx+f(n+l,x+1);
)
voidmain(void)
(
cout?f(3,l)?endl;
cout?f(2,l)?endl;
cout?f(l,l)?endl;
cout?f(0,l)<<cndl;
)
程序輸出的四行分別是—、—、—和—O
答案:261220
(例子)在下面函數(shù)的橫線(xiàn)處填上適當(dāng)?shù)膬?nèi)容,使該函數(shù)能
夠利用遞歸方法求解字符串str的長(zhǎng)度(不得使用系統(tǒng)提供
的字符串處理函數(shù))。
intGetLen(char*str)
{
if([11)return[21;
elsereturnl+GetLen(str+l);
)
答案:【1]!str[O]或str[O]=,\O,[2]0
19.宏代換,技巧:“一定要手工寫(xiě)出代換結(jié)果”
(例子)程序輸出為
#defineMOD(x,y)x%y
voidmain()
(
intz,a=5,b=10;
z=MOD(b+3,a);〃直接簡(jiǎn)單代換,不加括號(hào)
cout?z++?endl;
)
A)5B)3C)13D)14
(例子)若有宏定義:
#defineT(x,y)x*y/4
則表達(dá)式T(3+4,4+4)的值為//20
(例子)設(shè)有宏定義和變量說(shuō)明:
#defineT(x,y)x+y
inta=T(3,4)*T(3,5);
則變量a的初值為//20
20.指針的意義,函數(shù)參數(shù)的形式(傳值調(diào)用)
(普通變量、指針、作參數(shù))考得較多
定義指針:intx=8,*p;p=&x;
*p間接訪(fǎng)問(wèn)x,或者說(shuō)*p與x訪(fǎng)問(wèn)同一變量。
>普通變量做參數(shù):對(duì)應(yīng)的實(shí)參與形參是不同的變量,不管
是否同名。(值傳遞)
>指針做參數(shù):實(shí)參指針值賦給形參指針變量(參數(shù)單向傳
遞)。(指針傳遞)
(例子)在C中函數(shù)參數(shù)傳遞方式有兩種:第一種是值傳遞,
第二種是傳遞。
答案:指針(或地址)
例1:普通變量做函數(shù)參數(shù)
#include<iostream.h>
voidswap(intx,inty)〃實(shí)參和形參占用不同的存儲(chǔ)空間
{〃參數(shù)傳遞時(shí),intx=x,inty=y,形參是局部變量
intt;t=x;x=y;y=t;
)---------------------
voidmain()形參改變不能改變實(shí)參
intx=3,y=9;
swap(x,y);
cout?x?*,*?y?endl;
)
輸出?3,9■■
注意
例2:指針做函數(shù)參異一
#include<iostream.h>
voidswap(int*px,int*py)
〃實(shí)參指針和形參指針是不同的指針
{〃參數(shù)傳遞時(shí),int*px=pl,int*py=p2
EI
t=*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:指針做函數(shù)參數(shù)
//include<iostream.h>
voidswap(int*px,int*py)
〃實(shí)參指針和形參指針是不同的指針
{//參數(shù)傳遞時(shí),int*px=&x,int*py=&y
int*tp;
tp=px;px=py;py=tp;”交換的是指針
)
voidmain()
(
intx=3,y=9;
swap(&x,&y);
cout?x?y?y?endl;
)
輸出?3,9
(例子)
#include<iostream.h>
voidfun(int*x,inty)//參數(shù)y是fun的局部變量,
(〃不影響主函數(shù)中的X。
y=*x+y;〃參數(shù)x是指針,指向主函數(shù)中的y,
*x=y%4;〃fun函數(shù)中*x訪(fǎng)問(wèn)主函數(shù)中的y。
〃參數(shù)傳遞時(shí),int*x=&y,inty=x
cout?*x?y?y?endl;
)
voidmain(void)
intx=4,y=5;
fun(&y,x);
cout?x?,,*?y?endl;
fun(&x,y);
cout?x?*,,?y?endl;
)
程序輸出的第一行是,第二行是,第四行是
______O
答案:1,94,11,1
21.返回指針值的函數(shù)
(例子)
#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[]=HHelloHowareyou”,s2[]=n110010111”;
cout?f(sl,,e,)?,\n,;
cout?f(s2,,0,)?,\n,;
)
程序輸出第一行是—,第二行是—O
答案:
HiloHowaryou
111111
【解析】函數(shù)f的功能是刪除字符串S中出現(xiàn)的字符Ch。
22.一維數(shù)組的定義、做函數(shù)參數(shù)(參數(shù)的意義和形式)
考得較多
(例子)要定義數(shù)組A,使得其中每個(gè)元素的數(shù)據(jù)依次為:
3、9、4、8、0、0、0,錯(cuò)誤的定義語(yǔ)句是
A)intA[]={3,9,4,8,0,0,0};
B)intA[7]={3,9,4,8);//后面的元素值為0
C)intA[]={3,9,4,8};〃數(shù)組長(zhǎng)度是4
D)intA[7]={3,9,4,8,0,0,0};
說(shuō)明:intA[7];若A是局部數(shù)組,則其元素值不確定
若A是全局?jǐn)?shù)組,則其元素值均為0
若有:intA[7]={3};只要給出至少一個(gè)初值,其余元素為0
(例子)下列數(shù)組定義中,錯(cuò)誤的是o
A.intal[2]={l};B.inta2[][2]={{1},{2}};
C.inta3[3];D.inta4[][3];
【解析】定義數(shù)組時(shí)(不論一維還是二維),必須指定每一
維的大小。要么顯式寫(xiě)出,要么從給出的初值中能夠判斷維
數(shù)的大小。但是,若用數(shù)組做函數(shù)參數(shù),寫(xiě)形參時(shí),對(duì)一維
數(shù)組來(lái)說(shuō),長(zhǎng)度是否寫(xiě)出無(wú)關(guān)緊要,因?yàn)閭鬟f的是首指針;
對(duì)二維數(shù)組來(lái)說(shuō)行數(shù)是否寫(xiě)出也無(wú)關(guān)緊要,因?yàn)閭鬟f的是行
指針,對(duì)行指針而言,關(guān)鍵是一行中有幾個(gè)元素,即列數(shù),
所以形參中列數(shù)必須寫(xiě)出。
(例子)針對(duì)數(shù)組定義intdata[10];,下列表述中錯(cuò)誤的是
A)用*data可訪(fǎng)問(wèn)到數(shù)組的首元素〃數(shù)組元素下標(biāo)從0開(kāi)始
B)用data[9]可訪(fǎng)問(wèn)到數(shù)組的末元素
C)用data[10]可訪(fǎng)問(wèn)到數(shù)組元素會(huì)超出數(shù)組邊界〃越界
D)data共有10個(gè)元素,其首元素是data"]
(例子)設(shè)定義了宏:
#defineN2
以下定義數(shù)組的選項(xiàng)中,存在語(yǔ)法錯(cuò)誤的是:
A.intn;scanf("%d",&n);inta[n];
B.intconstn=5;inta[n];//n是常數(shù)
C.inta[2*N+l]//2*N+1是常量表達(dá)式
D.inta[]={1,2,3?4,5};doubleb[sizeof(a)];
//sizeof(a)也是常量
?一維指針做參數(shù):注意形參的寫(xiě)法(形參是指針變量)
訪(fǎng)問(wèn)數(shù)組的各種方式!
例題:
intfsum(intb[|,intn)intfsum(int*b,intn)〃或intb[10]
{inti,s=0;{inti,s=0;
for(i=0;i<n;i++)for(i=0;i<n;i++)
s+=(*b++);s+=b[i];
return(s);return(s);
))〃在被調(diào)函數(shù)中可以:b++
voidmain(void)
{inta[15]={1,2,3....14,15);
intshead,stail;
shead=fsum(a,10);〃第1次調(diào)用
stail=fsum(&a[5],10);〃第2次調(diào)用
cout?shead?4,??stail?endl;
)
(例子)寫(xiě)出程序的輸出
#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);
}
程序輸出為:
A)11.1B)12.1C)21.1D)1.1
?一維數(shù)組與指針
inta[10];圖
第i個(gè)元素的值a[i],*(a+i),p[i],*(p+i),p=p+i;*p
第i個(gè)元素的地址a+i,&a[i],p+i,p=p+i;p
(例子)程序中有如下語(yǔ)句
for(inti=0;i<5;i++)coutvv*(p+i)vv",";
能夠依次輸出int型一維數(shù)組DATA的前5個(gè)元素。由
此可知,變量p的定義及初始化語(yǔ)句是o
答案:int*p=DATA
(例子)有如下定義和語(yǔ)句,其中0WiV6,
inta[]={1,3,5,7,9,U},*p,i;p=a;
則對(duì)數(shù)組a的元素地址的正確表示是:
A)&(a+i)B)a++C)&(p+i)D)&p[i]
(例子)
//include<iostream.h>〃數(shù)組元素逆置,部分元素逆置
voidf(int*s,intnl,intn2)
{intt;
while(nl<n2)
{t=*(s+nl);
*(s+n1)=*(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,0,3);
f(p+2,l,6);
for(i=l;i<10;i++)
{if(i%5==0)printf(H\nn);
printf(H%dM,a[i]);
)
printf(H\nH);
)
程序輸出的第一行是—,第二行是—O
答案:329876510
23.字符指針初始化,字符指針指向字符數(shù)組
(例子)以下四組語(yǔ)句中,不符合C++語(yǔ)法規(guī)則的是
A.charstr[]=nGoodmorning";
B.charstr[20];str="Goodmorning**;
C.char*p=HGoodmorning”;〃C和D等價(jià)
D.char*p;p=HGoodmorning0;//字符串的值是其起始地址
(例子)若有char*p=nHelloH;則以下選項(xiàng)中錯(cuò)誤的是
A.chara=*p;//*p是'H,
B.char*s=*p;〃*p表示字符,H"不能賦值給指針s
C.char*q=p+2;〃將指針p+2賦值給q
D.p=p+2;
24.strlen和sizeof
“China”字符串的長(zhǎng)度是5,但其存儲(chǔ)空間是6。
(例子)設(shè)有說(shuō)明語(yǔ)句:
chars[]=Hab\0\123\\\n79H
strlen(s)的值是。
A.2B.3C.8D.14
而sizeof(s)的值是9o
(例子)以下語(yǔ)句的輸出是o
chars[20]=nATS\0JK\\H;
cout?strlen(s)?H,n
?sizeof(s)?n,n〃注意s是數(shù)組名
?sizeof(HATS\OJK\\H)?endl;
答案:3,20,8
(例子)注意字符串的意義:結(jié)尾,
strlen(HATS\nO12\l\\n)的結(jié)果是9
strlen(HATS\012\l\\H)的結(jié)果是6
strlen(HATS\0\l\\H)的結(jié)果是3
chars[20];
char*p=s;
sizeof(p)?sizeof(s)?答案:220
sizeof()括號(hào)中若是數(shù)組名,則求的是數(shù)組總空間;
若是指針變量,則求的是指針變量自身的長(zhǎng)度。
(例子)若有doublea[3][4];則sizeof(a)的值是。
A.7B.12C.48D.96
(例子)inta[3][4];intb[10];int(*pa)[4]=a,*pb=b;
則sizeof(a)的值是48
則sizeof(pa)的值是2〃任何類(lèi)型的指針,長(zhǎng)度都是2
則sizeof(b)的值是40
則sizeof(pb)的值是2
25.字符指針的意義(指針空間,串空間,*p的含義)
考得較多
char*pc,s[20],
pc=s;Dc=pc+i;*DC;
>pc[i],通過(guò)指針訪(fǎng)問(wèn)字符數(shù)組中的字符
>pc通過(guò)指針訪(fǎng)問(wèn)一維字符數(shù)組整體
cout?pc;輸出的是pc指向的字符串,而不是地址
cout?*pc;輸出的是pc指向的字符
字符串處理函數(shù)的參數(shù)為字符串首地址,即字符串中第1個(gè)
字符的地址。
(例子)
charsl[10]=M123H,s2[10]=MabcH;
strcpy(si+2,s2+l);
printf(M%s,\si);〃輸出21bc
cout?sl+1;〃輸出2bc
cout?strlen(sl+l);//輸出3
strcpy(sl,Hwl23H);
strcpy(s2,nerwl23H);
cout?strcmp(sl+l,s2+3);〃輸出0
(例子)
設(shè)有說(shuō)明語(yǔ)句:
chars[]=n123\t456\00089M,*p=s;
執(zhí)行以下兩個(gè)語(yǔ)句:
printf("%c\n”,*(p+5));
printf(w%s,\p+5);
則輸出分別為和?!ù鸢福?56
(例子)
設(shè)有語(yǔ)句:
inti;char*s=Ha\04+04\,\0V\bH;
for(i=0;*s++;i++);
執(zhí)行以上語(yǔ)句后,變量i的值為o//6
若改為:
inti;char*s=Ha\08+04V\0V\bH;
for(i=0;*s++;i++);
則執(zhí)行以上語(yǔ)句后,變量i的值為:1
(例子)//include<iostream.h>
#include<string.h>
voidswap(char*sl,char*s2)
(
chart;
t=*sl;*sl=*s2;*s2=t;
)
voidmain()
(
charsl[]=HBDH,s2[]=HBCH,s3[]=HABn;
if(strcmp(sl,s2)>0)swap(sl,s2);
if(strcmp(s2,s3)>0)swap(s2,s3);
if(strcmp(sl,s2)>0)swap(sl,s2);
printfCt%s\n,\si);//第一行輸出AD
printfC<%s\n,\s2);//第二行輸出BC
printfr%s\n,\s3);//第三行輸出BB
)
(練習(xí))下列程序的輸出結(jié)果是
#include<iostream>
usingnamespacestd;
intmain()
chara[]=HHello,Worldn;
char*ptr=a;
while(*ptr)
(
if(*ptr>=,a,&&*ptr<=,zf)
cout?char(*ptr+,A,-,a,);//字符的大小寫(xiě)轉(zhuǎn)換
else
cout?*ptr;
ptr++;
)
return0;
)
A)HELLO,WORLDB)Hello,World
C)hELLO,WORLDD)hello,world
26.常用字符串處理函數(shù)
(strlen,strcpy,strcat,strcmp等)
(另外還要會(huì)自己編寫(xiě)字符串處理函數(shù),實(shí)現(xiàn)系統(tǒng)的字符串
處理函數(shù)相同的功能。)見(jiàn)實(shí)驗(yàn)手冊(cè)算法總結(jié)
27.二維數(shù)組的定義和存放形式、做函數(shù)參數(shù)(實(shí)參和形參)
考得較少,
inta[4][5];
int(*P)[5];1intrp)[5]=a;〃兩行等價(jià)于一行
p=a;.
第i行第j列元素的值
*(*(a+i)+j),*(*(p+i)+j),
*(a[i]+j),*(p[i]+j),
(*(a+i))U],(*(p+i))U],
第i行第j列元素的地吟&p[i][j],
(*(a+i)+j,*(p+i)+j,
元素指針
行指針:如a,p,
加1,移動(dòng)一行元素位置(大元素)
歹U指針(元素指針):如a[i],*(a+i),*(p+i),*p
加b移動(dòng)一列(一個(gè))元素位置
行指針前加*變?yōu)榱兄羔?/p>
(例子)有以下定義inta[3][4],(*p)[4]=a;
對(duì)數(shù)組元素的錯(cuò)誤引用是
A)B)*(p+l)[2]
C)*(p[2]+3)D)*(a[l]+l)
E)r(P+i))[2j
?二維指針做參數(shù):注意形參的寫(xiě)法(形參是指針變量)
而I十一熱將加4W一寺七面二維數(shù)組形參可等價(jià)地寫(xiě)成:
例:求一維數(shù)組全體兀素之和.
inttotal(int(*p)[4],intn)//n行數(shù).P
{或:mtp[3]|4]
inti,j,sum=O;
for(i=0;i<n;i++)
for(j=0;j<4;j++)
sum+=*(*(p+i)+j);
returnsum;〃在被調(diào)函數(shù)中可以:p++,
因?yàn)镻是一個(gè)指針變量
)
voidmain(void)
{inta[3][4]={.....},sum;
sum=total(a,3);
cout?sum?endl;
28.二維字符數(shù)組
(例子)
#include<iostream.h>
//include<string.h>
intisvowel(charc)〃判斷c是否為元音字母
{return(c==,a,||c==,e,||c=='i'||c=='o'||c=='u');}
voidpluralize(char*s)〃使成復(fù)數(shù)
(
intlen=strlen(s);
char*p=s+len-l;
char*q=s+len-2;
if(*p==,hf&&(*q=='c'||*q=='s'))strcat(p,"esH);
//strcat函數(shù)實(shí)現(xiàn)兩個(gè)字符串的拼接
elseif(*p=='s')strcat(p,HesH);
elseif(*p=='y')
if(isvowel(*q))strcat(p,HsH);
elsestrcpy(p,HiesH);
elseif(*p==,z,)
if(isvowel(*q))strcat(p,HzesH);
elsestrcat(p,nesH);
elsestrcat(p,MsH);
voidmain(void)
(〃二維字符數(shù)組,6個(gè)子串。
charword[6][20]={"wish'',''bus","toy",
"navy'',"quiz",''computer"};
for(inti=0;i<6;i++)
pluralize(word|i]);//word[i]是第i行字符串的指針
printf(<t%s\f,,word[i]);
if((i+l)%2==0)printf('\n');
}
)
程序輸出第一行是—,第二行是—,第三行是—0
答案:
wishesbuses
toysnavies
quizzescomputers
另外:參見(jiàn)教材P156,例9.29和例9.30,尤其是例9.30。
〃例9.30改寫(xiě)例9.29,學(xué)習(xí)如何使用指針數(shù)組做函數(shù)參數(shù)。
#include<iostream.h>
#include<string.h>
voidmain()
(
voidsort(char*[],int),print(char*[],int);
〃函數(shù)原型說(shuō)明,因?yàn)楹瘮?shù)定義在后
char*name[]〃指針數(shù)組★
={HGeorgeH,MMaryn,HSusanH,nTomn,HDavisH};
intn=5;
sort(name,n);
print(name,n);
)
voidsort(char*name[],intn)〃函數(shù)定義,注意參數(shù)的寫(xiě)法
{
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)
〃函數(shù)定義,注意參數(shù)的寫(xiě)法
(
for(inti=0;i<n;i++)
cout?name[i]?endl;
29.將二維數(shù)組看成一維數(shù)組訪(fǎng)問(wèn)
(例子)若有變量說(shuō)明:
inta[3H3]={l,2,3,4,5,6,7,8,9},m,*ptr=&a[O][OJ;
執(zhí)行語(yǔ)句:
m=(*ptr)*(*(ptr+3))*(*(ptr+6));貝!]m的值為:
A)8B)21C)28D)48
(例子)若有如下的說(shuō)明和語(yǔ)句:
inta[7][8],*ip;ip=(int*)a;
使指針ip指向a[4]⑹的正確答案是:
A)ip+=3*8+6B)ip+=(3*8+6)*size
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國(guó)車(chē)身附件潤(rùn)滑脂行業(yè)投資前景及策略咨詢(xún)研究報(bào)告
- 2025年度攪拌站輪胎綠色制造與循環(huán)經(jīng)濟(jì)合同
- 2025年度新型建筑材料研發(fā)設(shè)計(jì)合同模板
- 2025年度供應(yīng)鏈交易居間合同范本正規(guī)范本
- 2025年度砂石場(chǎng)關(guān)鍵詞勞動(dòng)合同特殊工種專(zhuān)項(xiàng)條款規(guī)定
- 2025年度債券擔(dān)保合同書(shū)(制造業(yè)轉(zhuǎn)型升級(jí)項(xiàng)目擔(dān)保版)
- 2025年度工傷賠償協(xié)議書(shū)范本制作服務(wù)合同
- 2025年度城市地下綜合管廊工程設(shè)計(jì)居間合同
- 2025年度空氣凈化設(shè)備研發(fā)與生產(chǎn)合同
- 2025年度工業(yè)用空氣源熱泵余熱回收利用合同
- 《移動(dòng)互聯(lián)網(wǎng)應(yīng)用開(kāi)發(fā)》課程標(biāo)準(zhǔn)
- 竣工資料封面
- 膿毒血癥指南
- 中國(guó)航天知識(shí)
- 安徽華納化學(xué)工業(yè)有限公司年產(chǎn)1000噸均苯四甲酸二酐、300噸潤(rùn)滑油助劑項(xiàng)目環(huán)境影響報(bào)告書(shū)
- YY 9706.230-2023醫(yī)用電氣設(shè)備第2-30部分:自動(dòng)無(wú)創(chuàng)血壓計(jì)的基本安全和基本性能專(zhuān)用要求
- 第8課紅樓春趣同步練習(xí)(含答案)
- C139營(yíng)銷(xiāo)模型簡(jiǎn)介(含案例)課件
- 《制藥分離工程》課程實(shí)施大綱
- 死亡醫(yī)學(xué)證明書(shū)辦理委托書(shū)
- 《壓力容器安全技術(shù)監(jiān)察規(guī)程》
評(píng)論
0/150
提交評(píng)論