C++筆試題試題題庫_第1頁
C++筆試題試題題庫_第2頁
C++筆試題試題題庫_第3頁
C++筆試題試題題庫_第4頁
C++筆試題試題題庫_第5頁
已閱讀5頁,還剩252頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

C++筆試題(二十四)

1.以下三條輸出語句分別輸出什么?[C易]

charstrl口="abc";

charstr2[]=nabcu;

constcharstr3[]=Mabc',;

constcharstr4[]="abc";

constchar*str5="abc";

constchar*str6="abc11;

cout<<boolalpha<<(strl==str2)<<cndl;//輸Hd什么?false

cout<<boolalpha<<(str3==str4)<<endl;//輸出什么?false

cout<<boolalpha<<(str5==str6)<<cndl;//輸出什么?true

2.非C++內建型別A和B,在哪幾種情況下B能隱式轉化為A?[C++中等]

答:

a.classB:publicA{.....}〃B公有繼承自A,可以是問按繼承的oh?

b.classB{operatorA();}//B實現了隱式轉化為A的轉化@U

c.classA{A(constB&);}〃A實現了non-cxplicit的參數為B(可以有其他帶默認值的參數)

構造函數。>0&H

d./\&operator=(constA&);//賦值操作,雖不是正宗的隱式類型轉換,但也可以勉強算一

個P

3.以下代碼中的兩個sizeof用法有問題嗎?[C易]

voidUppcrCasc(charstr|])//將str中的小寫字母轉換成大寫字母

fbr(size_ti=0;i<sizeof(str)/sizeof(stt[0]);++i)

if(,a,<=str[i]&&str[i]<=,z*)

str[i]-=fa'-'A');

}

charstrfl二ZBcDe”;

cout<<"str字符長度為:"<<sizeof(str)/sizeof(str[0])<<endl;

UppcrCase(str);

cout<<str?endl;

4.以下代碼有什么問題?[C難]UrO

應該用voidchar2Hcx(unsignedcharc)

voidchar2Hex(charc)//將字符以16進制表示Hb

charch=c/0x10+'O';if(ch>9)ch+二(W-9-1);?3+C5B

charcl=c%OxlO+V;if(cl>9)cl+=CA'-9-l);LEf8

cout<<ch<<cl<<'';=4!6

}

charstr口=nIlove中國”;

fbr(size_ti=0;i<strlen(str);++I)

char2Hex(str[i]);

cout<<endl;

5.以下代碼有什么問題?[C++易]

structTest

{

Test(int){}

TestQ{}

voidfun。{}

};

voidmain(void)

(

Testa(1);

a.funQ;

Testb();

b.funQ;

6.以下代碼有什么問題?[C++易]

cout<<(true?l:"T*)<<encl;

〃返回類型不匹配(一個int,一個char*)

7.以下代碼能夠編譯通過嗎,為什么?[C++易]

unsignedintconstsizcl=2;

charstrl[sizel];

unsignedinttemp=0;

cin?temp;

unsignedintconstsize2=temp;

charstr2[sizc2];

8.以下代碼中的輸出語句輸出。嗎,為什么?[C++易]

structCLS

intm_i;

CI^(inti):m_i(i){}

CI60

(

CLS(O);〃這里其實是定義了另一個CIS變量

)

};

CLSobj;

cout<<c)bj.m_i<<endl;

9.C++中的空類,默認產生.哪些類成員函數?[C++易]

答:

classEmpty

{

public:

EmptyO;//缺省構造函數

Empty(constEmpty&);//拷貝構造函數

-EmptyO;//析構函數

Empty&operator=(constEmpty&);//賦值運算符

Empty*operator&0;//取址運算符

constEmpty*opcrator&Qconst;//取址運算符const

};

10.以下兩條輸出語句分別輸出什么?[C++難]

floata=l.Of;

cout<<(int)a<<endl;

cout<<(int&)a<<cndl;

cout<<boolalpha<<((int)a==(int&)a)<<endl;//輸出什么?I

floatb=O.Of;

cout<<(int)b<<endl;

cout<<(int&)b<<cndl;

cout<<boolalpha<<((int)b==(int&)b)<<endl;//輸出什么?

II.以下反向遍歷array數組的方法有什么錯誤?[STL易]

vectorarray;

array.push_back(1);

array.push_back(2);

array.push_back(3);

//i永遠大于0

for(vcctor:sizc_t)pci=array.sizc()-l;i>=0;-i)//反向遍歷array數組

cout<<array[i]<<endl;

12.以下代碼有什么問題?[STL易

typcdcfvectorIntArray;

IntArrayarray;

array.push_back(1);

array.push_back(2);

array.push_back(2);

array.push_back(3);

//刪除array數組中所有的2

for(IntArray::itcratoritor=array.bcgin();itor!=dO;IIitor)

(

if(2二=+itor)array.erase'itor);

〃這里需要重新計算itor

13.寫一個函數,完成內存之間的拷貝。[考慮問題是否全面]

答:

void*mymcmcpy(void*desjconstvoid*src,size_tcount)

{

char*pdest=static_cast<char*>(dcst);

constchar*psrc=static_cast<constchar*>(sre);

if(pdest>psrc&&pdcst<psrc+cout)能考慮到這種情況就行了

{

for(size_ti=count-l;i!=-l;—i)

pdestfi]=psrc[i];

}

else

(

for(size_ti=0;i<count;++I)

pdcst[i]=psrc[i];

returndest;

intmain(void)

charstr[]=M0123456789";

mymemcpy(str+1,str+0,9);

cout<<str<<endl;

system("Pause1');

return0;

本試題僅用于考查C++/C程序員的基本編程技能。內容限于C++/C常用語法,不涉及數

據結構、算法以及深奧的語法??荚嚦煽?/p>

能反映出考生的編程質量以及對C++/C的理解程度,但不能反映考生的智力和軟件開發能

力。

筆試時間90分鐘。請考生認真答題,切勿輕視。

C++筆試題(二十三)

Q1:請你分別劃劃QSI的七層網絡結構圖,和TCP/IP的五層結構圖?

:Q2:請你詳細的解釋一下IP協議的定義,在哪個層上面,主要有什么作用?

:TCP與UDP呢?

:總得來說前面兩道題目還是比較簡單的!

:Q3:請問交換機和路由器分別的實現原理是什么?分別在哪個層次上面實

:現的?

Q4:請問C++的類和C里面的struct有什么區別?

:Q5:請講一講析構函數和虛函數的用法和作用?

:Q6:全局變量和局部變討有什么區別?實怎么實現的?操作系統和編譯器

:是怎么知道的?

:Q7:一些寄存器的題目,我忘記了具體實什么題目,主要好像是尋址和內

:存管理等一些知識,不記得了。

:Qg8086是多少尉的系統?在數據總線上是怎么實現的?還有一些硬件方

:面的知識我既不清楚了。

:一般建議參加華為的研發面試的同學先要準備一下相關的知識,軟件的主要

:是看看C和數據結構方面的,硬件模電,數電和微機原理

兩道C面試題

1、一個學生的信息是:姓名,學號,性別,年齡等信息,用一個鏈表,把這些學生信息連

在一起,給出一個age,在些鏈表

中刪除學生年齡等于age的學生信息。

程序代碼

#Include"stdio.h1'

#Include"conio.h"

structstu{

charname[201;

charsex;

intno;

intage;

structstii*next;

}*linklist;

structstu*crcatlist(intn)

(

intI;

〃h為頭結點,p為前一結點,s為當前結點

structstu*h,*p,*s;

h=(structstu*)malloc(sizeof(structstu));

h->ncxt=NULL;

p二h;

for(i=0p<np++)

{

s=(structstu*)malloc(sizeof(structstu));

p->next=s;

printff'Pleaseinputtheinformationofthestudent:namesexnoage\n,f);

scanff'%s%c%d%d')s->namc,&s->scx,&s->no,&s->agc);

s->next=NULL;

P=s;

}

printfC'Crcatesuccessful!'*);

return(h);

voiddclctelist(structstu*s,inta)

structstu*p;

while(s->age!=a)

{P=§;

s=s->next;

}

if(s=NULL)

printf("Thcrecordisnotexist.");

else

p->ncxt=s->ncxt;

printf("Deletesuccessful!");

)

voiddisplay(structstu*s)

{

s=s->ncxt;

\vhile(s!=NULL)

{

printf("%s%c%d%d\n",s->name,s->sex,s->no,s->age);

s=s->next;

intmainQ

{

structstu*s;

intn,agc;

printff'Pleaseinputthelengthofseqlist:\nH);

scanff'%d'\&n);

s=creatlist(n);

display");

printff'Pleaseinputtheage:\nu);

scanff'%d",&age);

dclctclist(s,agc);

display(s);

return0;

2、實現一個函數,把一個字符串中的字符從小寫轉為大寫。

程序代碼

#1ncludc"stdio.h"

#Includc"conio.h"

voiduppers(char+s,char*us)

(

for(;*s!='\0,;sII,usII)

{

if(*s>=,a,&&*s<=,z,)

*us=*s-32;

else

*us=*s;

}

*us=\0';

}

intmainQ

{

char*s,*us;

charss[20];

printff'Pleaseinputastring:\n");

scanf("%sH,ss);

s=ss;

uppers",us);

printff'Theresultis:\n%s\nn,us);

getchO;

}

C++筆試題(二十二)

C++

一、請填寫BOOL,flog指針變量與“零值”比較的if語句。(10分)

請寫出BOOLflag與“零值”比較的if語句。(3分)

標準答案:

if(flag)

if(flag)

如下寫法均屬不良風格,不得分。

if(flag二二TRUE)

if(flag==1)

if(flag==FALSE)

if(flag==0)

請寫出floatx與“零值”比較的if語句。(4分)

標準答案示例:

constfloatEPS1NON=O.OJOOl;

if((x>=-EPSINON)&&(x<=EPSINON)

不可將浮點變量用“二="或"!=”與數字

比較,應該設法轉化成“>=”或“V=”此

類形式。

如下是錯誤的寫法,不得分。

if(x==0.0)

if(x!=0.0)

請寫出char*p與"零值"比較的if語句。(3分)

標準答案:

if(p=NULL)

if(p!=NULL)

如下寫法均屬不良風格,不得分。

if(p==O)

if(p!=0)

if(P)

if(!)

二、以下為WindowsNT下的32位C++程序,請計算sizcof的值(10分)

voidFunc(charstr[100])

(

請計算

sizeof(str)=4(2分)

}

charstrQ="Hello”;

char*p=str;

intn=10;

請計算

sizeof(str)=6(2分)

sizeof(p)=4(2分)

sizeof(n)=4(2分)

void*p=malloc(100);

請計算

sizeof(p)=4(2分)

三、簡答題(25分)

1、頭文件中的ifndef/dcfne/endif干什么用?(5分)

答:防止該頭文件被重第引用。

2、#includc<filenamc.h>和#include"fllcnamc.h”有什么區別?(5分)

答:對于#includcVfilenarreh》,編譯器從標準庫路徑開始搜索filename」】

對于#include“川ename.h",編譯器從用戶的工作路徑開始搜索filename.h

3、const有什么用途?(請至少說明兩種)(5分)

答:(1)可以定義const常量

(2)const可以修飾函數的參數、返回值,甚至函數的定義體。被const修飾的東

西都受到強制保護,可以預防意外的變動,能提高程序的健壯性。

4、在C++程序中調用被C編譯器編譯后的函數,為什么要加extern"C”?(5分)

答:C++語言支持函數重載,C語言不支持函數重載。函數被C++編譯后在庫中的名字

與C語言的不同。假設某個函數的原型為:voidfoo(intx,inty);

該函數被C編譯器編譯后在庫中的名字為_f。。,而C++編譯器則會產生像

_foo_inr_int之類的名字。

C++提供了C連接交換指定符號extern"C”來解決名字匹配問題。

5、請簡述以下兩個for循環的優缺點(5分)

for(i=0;i<N;i++)

{

if(condition)

DoSomcthingO;

else

DoOthcrthingO;

}

if(condition)

{

for(i=0;i<N;i++)

DoSomcthingO;

}

else

{

for(i=0;i<N;i++)

DoOtherthingQ;

}

優點:程序簡潔

缺點:多執行了N-1次邏輯判斷,并且

打斷了循環“流水線”作業,使得編譯

器不能對循環進行優化處理,降低了效

率。

優點:循環的效率高

缺點:程序不簡潔

四、有關內存的思考題(每小題5分,共20分)

voidGetMcmor\'(char*p)

p=(char*)malloc(100);

}

voidTest(void)

(

char*str=NULL;

GctMcmor\r(str);

strcpy(str,nhelloworld**);

printf(str);

}

請問運行Test函數會有什么樣的結果?

答:程序崩潰。

因為GetMemory并不能傳遞動態內存,

Test函數中的str一直都是NULLo

strcpy(str,Hhelloword);將使程序崩

潰。

char*GctMemor}r(void)

{

charp(J="helloworld**;

returnp;

}

voidTest(void)

{

char+sir=NULL;

str=GctMemoryO;

printf(str);

}

請問運行Test函數會有什么樣的結果?

答:可能是亂碼。

因為GctMcmory返回的是指向“棧內存”

的指針,該指針的地址不是NULL,但其原

現的內容已經被清除,新為容不可知。

voidGctMcmor\'2(char**p,intnum)

(

*p=(char*)malloc(num);

}

voidTcst(void)

char*str=NUI

GetMemoryr(&str,100);

strcpy(str,"hello");

printf(str);

}

請問運行Test函數會有什么樣的結果?

答:

(1)能夠輸出hell。

(2)內存泄漏

voidTest(void)

{

char*str=(char*)malloc(lOO);

strcpy(str,"hello");

free(str);

if(str!=NULL)

(

strcpy(str,"world");

printf(str);

}

}

請問運行Tesl函數會有什么樣的結果?

答:篡改動態內存區的內容,后果難以預

料,非常危險。

因為free(str);之后,str成為野指針,

if(str!二NULL)語句不起作用。

五、編寫strepy函數(10分)

已知strepy函數的原型是

char*sLrcpy(char*sirDcst,cunsLchar&rSrc);

其中strDest是目的字符串,strSrc是源字符串。

(1)不調用C++/C的字符串庫函數,請編寫函數strepy

char*strcpy(char*strDest,constchar*strSrc);

(

assert((strDest!=NULL)&&(strSrc!=NULL));〃2分

char"address=strDest;〃2分

\vhile((*strDest++=*strSrc++)!='\0')//2分

NULL;

returnaddress;〃2分

}

(2)strepy能把strSrc的內容復制到strDest,為什么還要char*類型的返回值?

答:為了實現鏈式表達式,〃2分

例如intlength=strlen(strcpy(strDcst,"helloworld"));

六、編寫類String的構造函數、析構函數和賦值函數(25分)

已知類String的原型為:

classString

public:

String(constchar*str=NULL);//普通構造函數

String(constString&othcr);//拷貝構造函數

-String(void);//析構函數

String&operate=(constString&other);//賦值函數

private:

char*m_data;//用于保存字符串

};

請編寫Siring的上述4個函數。

標準答案:

//String的析構函數

String::~String(void)〃3分

(

delete0m_data;

//由于m_data是內部數據類型,也可以寫成deletem_data;

}

//String的普通構造函數

String::String(c()nstchar*str'//6分

(

if(str二二NULL)

{

m_data=newcharfl];//若能加NULL判斷則更好

*m_data='\0';

)

else

(

intlength=strien(str);

m_data=newchar[length4-1];//若能加NULL判斷則更好

strcpy(m_data,str);

)

}

//拷貝構造函數

String::String(constString&other)〃3分

{

intlength=strlcn(other.m_data);

m_data=newchar[length+l];//若能加NULL判斷則更好

strcpy(m_data,other.m_data);

}

//賦值函數

String&String::opcratc=(constString&ochcr)〃13分

(

//(1)檢查自賦值〃4分

if(tliis==&other)

return*this;

〃⑵釋放原有的內存資源//3分

delete[]m_data;

//(3)分配新的內存資源,并復制內容〃3分

intlength=strlen(other.m_data);

m_data=newchar[length4-1];//若能加NULL判斷則更好

strcpy(m_data,other.m_data);

//(4)返回本對象的引用〃3分

return*this;

}

請編寫String的上述4個函數。

C++筆試題(二十一)

1、

下面的程序是否有錯誤,如果有錯,請說明原因。

structAl{inti;};

Alal;

al.i=O;

沒有錯誤

classAl{inti;};

A1al;

al.i=O;

有錯誤,未顯示權限定義符缺省為private。

2、下面程序是否有錯,有錯,請說明原因。:

charszTestf]="hello”;

char*constpsz二szTest;

psz[0]='b';

沒有錯誤,psz指向的字符串指針是常量,指針不能被修改,但指針指向的內容可

以修改

3、請指出下面代碼存在的潛在問題

classCC{

int*m_pCount;

public:

voidclear。{if(m_pCount)deletem_pCount;}

CCQ{m_pCount=newint;}

~CCQ{clearO;)

}

主要存在的問題是clear函數在deletem_pCount;后并沒有置指針為空(m_pC(nint=

NULL),這樣當第二次調用clear時,會出現問題。

4、下面的程序是否有錯誤,如果有錯,請說明原因。

char*constpszHelp="hello”;

pszHelpfO]二'a';

因為pszHclp指向一個常量字符串,所以根本不允許修改字符串內容。除非使用一個字

符數組。

5、查錯:下面這段代碼有什么錯誤?

classShape。

(

public:

Shape。;

virtual~Shapc();

virtualShape(constShape&):

(

不能聲明一個副本構造函數為虛擬。

6、查錯:下面的代碼有什么錯?

intmainQ

{

intSomeVariable=5;

cout<<"SomeVariable:"v<SomeVariable<<"\n;"

int*pVar=&SomcVariable;

pVar=9;

coutSomcVariabc”<<*pVar<<w\n";

return0;

)

程序編寫者的意圖是將9賦值給pVar所指的變量,不幸的是9卻賦成了pVar的值,因為遺

漏了間接訪問運算符(*),如果用pVar來賦值的話導致災難性錯誤。

7、分析下面代碼,指出問題

int*funcQ{inti=0;return&i;}

返回的是一個局部簡單類型變次地址,(由于?該函數結束M局部變量就被釋放,

返回的地址是無效的)程序可能會出錯,而且返回的指針不能采用delete進行刪除。

classCObjcct;

CObject*funobjQ{CObjectobj;???.return&obj;}

返回的是?個局部CObject類型變量地址,程序會出錯,而且返回的指針不能

采用delete進行刪除。

CSrringfunobjO{CStringsrrTcmp=_T("temp");returnstrTcmp;}

不會出錯,返回的CString會調用CString的拷貝構造函數返回。

8、查錯:下面的程序有什么錯誤?并修改。

#include<iostream.h>

int*FuncOne。;

intmainQ

(

int*pint=FuncOneQ;

cout<<wthevalueofpintbackinmainis:w<<*pint<<cndl

return0;

int*FuncOneO

int*pint=newint(5);

count<<wthevalueofpintinFunc(^)ncis:w<<*pint<<endl;

returnpint;

}

內存泄漏。

修改:

#include<iostream.h>

intFuncOncQ;

intmainQ

{

inttheint=FuncOneQ;

cout?wthevalueofpintbackinmainis:w<<theint<<endl;

return0;

|

intFuncOncQ

{

int*pint=newint(5);

cout<<wdievalueofpintinFuncOneis:w<<*pint<<endl;

inttemp=*pint;

deletepint;

returntemp;

)

9、分析代碼,給出i,j,k的結果。

inti=0,j=0;k=0;

if(++iIIj++II++k){}

主要是注意前置操作符和后置操作符的區別,還要考慮或操作在條件判斷中的

實現(如果一個為真,則不進行后續判斷)。

i=1,j=0,k=0

IO^inta[9];

int*p;

P二a;

請問哪一個不能表示a[l]?

Ap+1Bp++Ca++Da+l

分析:數組名a作為代表數組的首地址,是一個常量指針,既然是常埴當然是不容修改

的,所以什+是錯誤的。p=a中的p、a表示相同的地址,但是p是指針變量,既然是變

量當然可以修改了。所以p++可以表示a[1]

答案:C

11、以下代碼的輸出結果是:B

inti=l,j=2;

intk=i+++j;

cout<<k<<endl;

A2B3C4D5

分析:i+++j是首先結合i++,然后再+j,但是i++是事后計算,也就是說先算i+j然后

再i++,所以k的值是1+2=3。然后i才自增到2。如果是intk=++i+j,則i先自增,然

后加j,結果為4。

12、請說出程序運行的結果

classA{

public:

virtualvoidfuncQ{cout<<"laminbase”<<endl;};

)

classB:publicA(

public:

virtualvoidfuncQ{cout<<“1aminderived”<<end);}

}

voidmain。

{

B*bb=newB;

bb->funcQ;

A*aa=(A*)bb;

aa->Rinc();

}

Iaminderived

Iaminderived

主要考察虛函數的使用

13、x=x+l,x+=l,K++,哪個效率最高?為什么?

分析:

X=x+1最低,因為其執行過程如下:

a)讀取右x的地址

b)x+l

c)讀取左x的地址

d)將右值傳給左邊的x(編譯器并不認為左右x的地址相同)

x+=l其次,執行過程如下:

(1)讀取右X的地址

(2)x+l

(3)將得到的值傳給x(因為x的地址已經讀出)

x++效率最高,執行過程如下:

(1)讀取右x的地址

(2)x自增1

14、Ifthereare“inta=5,b=3;w,thevaluesofaandbare___andafterexcute

“!a&&b++”.(如果有"inta=5,b=3;\則在執行“!a&&b++”后a和b的值是什么)

A5,3B0,lC0,3D5,4

分析:由于“!a”運算結束后,整個表達式的值已肯定為假,所以不必再去計算后面的

式子。

答案:A

15、Therearetwointvariables:aandb,don'tuse"iF'?:’,"switch“orother

judgmentstatements,findoutthebiggestoneofthetwonumbers(有兩個int變量a和b,不用

“if”、“switch”或其他判斷語句,找出兩個數中間比較大的)

答案:

intmax=((a+b+abs(a-b))/2

16、如何將a、b的值進行交換,并且不使用任何中間變量?

按位異或運算,不用擔心越界問題。按位異或運算符””是雙目運算符,其功能是參

與運算的兩數各對應的二進制位相異或,當對應的二進制位相異時,結果位1。

答案:

a=aAb;

b=aAb;

a=aAb;

---關于define:

17、whatwillbetheoutputofthefollowingcode(以下代碼的輸出結果是什么)?

#defineSQR(x)(x*x)

mainQ

{inta,b=3;

a=SQR(bI2);

printf("\n%d",a);

)

A25B11

CWouldvaryfromcompliertocompilerDerror

分析:宏定義展開時容易造成:義性問題。a=SQR0+2)這一語句展開后為(b+2*b-2),

結果為11;并不是想象中的(b+2)*(b+2)。要想得到這個結果,必須將宏定義語句改成

^defineSQR(x)((x)*(x:),這樣輸出的結果是25。

答案:B

18、用預處理指令#define聲明一個常熟,用以表明1年中有多少秒(忽略閏年問題)。

分析:

通過這道題目告官想考以下幾件事情:

a)#define語法的基本知識(例如:不能以分號結束,括號的使用等等)

b)要懂得預處理器將為你計算常數表達式的值,因此,寫出是如何計算一年中有多少

秒而不是計算出實際的值,會更有意義。

c)意識到這個表達式會使得一個16位機的整型數溢出,因此要用到長整型符號L,

告訴編譯器這個常數是長整型數。

答案:#defincSECONDES_PER_YEAR(60*60*24*365)UL

19、寫出一個“標準"宏MIN,這個宏輸入兩個參數并返回較小的一個。

分析:該測試是為以下目的而測的:

a)#de£ne語法的基本知識

b)三重條件操作符的知識。這個操作符存在C語言中的原因是它使得編譯器能產生

比if-then-else更優化的代碼。

c)懂得在宏中小心的把參數用括號括起來。

答案:#defineMIN(A,B)((A)<=(B)?(A):(B))

20、whatwillbetheoutputofthefollowingCcode(以下代碼的輸出結果是什么)?

#defineproduct(x)(x*x)

intmain。

{inti=3,j,k;

j=product(i++);

k=product(++i);

printf(“產%d,k=%d”,j,kj;

return0;

)

結果:j=9,k=49

分析:需要主要的是宏與函數最主要的區別是:宏參數只是簡單的替換.因此peduct(i++)

替換后為i++*i++,先乘后自增。由于=3,因此j=9,比時i的值為5。product(++i)替換后

為++i*++i,先自增后乘,子增后i=7,所以k的值為49

------endof關于define:

------sizeof

21、下面代碼的輸出結果是什么?

//include<iostrcam.h>

#include<stdlib.h>

#includc<string.h>

struct{

shorta1;

shorta2;

shorta3;

}A;

struct{

longal;

shorta2;

)B;

intmainQ

{char*ssl=,,0123456789";

charss20=,'O123456789";

charss3[100]=',0123456789";

intss4[100];

charqQ=,,a\n";

char*strl=(char*)malloc(100);

cout?sizeof(ssl)?M

cout?sizeof(ss2)?H

cout?sizeof(ss3)?nM;

cout?sizcof(ss4)<<"

cout<<sizeof(q)<<H

cout<<sizeof(strl)<<H

cout?sizeof(A)?M

c°ut<<sizeof(B)<v"

return0;

}

分析:

SSI是一個字符指針,不論何種類型的指針,指針的大小是一個定值,就是4。

ss2是一個字符數組,該數組最初未設定大?。河删唧w填充值來頂。填充值是

“0123456789”,1個字符所占空間是1位,10個就是10位,再加上隱含的“\0",所以一

共是11位。

ss3也是一個字符數組,這個數組開始預分配100,1個字符所占空間是1位,所以大小

為100*l=100o

ss4是一個整型數組,這個數組開始預分配100,但每個整型變量所占空間是4位,所

以大小為100*4=400o

q與ss2類似,其中的“\n”占用一位,再加上隱含的“\0",所以一共是3位。

str1與ssl類似,是一個指針,所以大小為4。

A和B是兩個結構體,在默認情況下,為了方便對結構體內元素的訪問和管理,當結構

體內的元素長度都小于處理器的位數的時候,便以結構體里面最長的數據元素為對齊單位,

也就是說,結構體的長度一定是最長的數據元素長度的瞥數倍。如果結構體內存在長度大于

處理器位數的元素,那么就以處理器的位數為對齊單位。但是結構體內類型相同的連續元素

將在連續的空間內,和數組一樣。

結構體A中有3個short類型的變量,各自以2字節對齊,相加為6,同時為2的整數

倍。B中al為4字節對齊,a2取2字節對齊,結構體大小為6字節,6不是4的整數倍,補

空字節,增加到8時,符合所有條件,則sizeoffB尸8。

答案:4111004003468

22、下面代碼的輸出結果是什么?

#include<iostream.h>

usingnamespacestd;

classAl{

public:

inta;

staticintb;

A1Q;

?Al。;

};

classA2{

public:

inta;

charc;

A2Q;

?A20;

);

intmainQ

cout?sizcof(Al)?HH;

cout<<sizeof((A2)<<H**;

return0;

}

分析:因為靜態變昂是存放在全局區的,而sizeof計算棧中分配的大小,所以計算sizecRAl)

時,staticintb的大小不會計算在內。因此sizeof(Al)的值為4,即inta的大小。

為了照顧數據對齊,int大小為4,char大小為1,所以sizeof(A2)大小為8。

23、一個空類占多少空間?多重繼承的空類呢?

答案:一?個空類所占空間為1,多重繼承的空類所占空間還是lo但是虛擬繼承設計到

虛表(V表,虛指針),所以虛擬繼承的空類所占空間為4。

----endof(sizeoQ

怎樣用最快的方法判斷鏈表是否有環?一群碩編程題

C++筆試題(二十)

網易的筆試題。

1、10個人分成4組有幾種分法?

解法1:分兩步,第一步:有以下九種分組方法。第二步將每種分法的可能組和數相加。

1117C10(7)

1126C10(6)*C4(2)

1135C10(5)*C5(3)

1144C10(4)*C6(4)/P2(2)

1225C10(5)*C5(2)*C(3)2/p2(2)

1234C10(4)*C6(3)*C3(2)

1333C10(3)*C7(3)*C4(3)/P3(3)

2224C10(2)*C8(2)*C6(2)/P3(3)

2233C10(2)*C8(2)*C6(3)/P2(2)/P2(2)

解法二:[4A10-(C41)3人10+(C42)2A10-(C43)1A10]/(4*3*2)

每個人有4中狀態,所以有4人10種

如果某一組為空則C41中可能,在這種可能中每個人就有3種狀態,所以要減去(C4

1)3人10

上述一組為空情況中多減去了有兩組為空的情況,所以加(C42)2人10

上述兩組為空情況中多加上了有三組為空的情況,所以減(C43)1人10

因為組無分別,所以除以(4*3*2)

2、如圖:

78910

61211

54312

16151413

設”1〃的坐標為[0,0)''7〃的坐標為(-1,-1)編寫一個小程序,使程

序做到輸入坐標(X”)之后顯示出相應的數字。

#include<stdio.h>

voidmain(void)

{

intcircleX,circleY,circle,xzy,num,numX,numY,i;

scanf("%d%d"z&x,&y);

〃計算屬于第幾圈

if(x>=l)

circleX=x;

elseif(x<=0)

circleX=l-x;

if(y>=l)

circleY=y;

elseif(y<=0)

circleY=l-y;

circle=circleX>circleY?circleX:circleY;

〃獲得本圈第一個數及其坐標

num=4*(circle-l)*(circle-l)+l;

numX=circle-l;

numY=l-circle;

〃杳詢輸入坐標對應的數

for(i=0;i<2*circle-2;i++)

if(numX==x&&numY==y)

{

printf("Thenumberis:%d\n",num);

return;

}

numX—;

num++;

)

for(i=0;i<2*circle-l;i++)

{

if(numX==x&&numY==y)

printf("Thenumberis:%d\n"znum);

return;

?

numY++;

num++;

)

for(i=0;i<2*circle-l;i++)

{

if(numX==x&&numY==y)

<

printf("Thenumberis:%d\n"znum);

return;

}

numX++;

num++;

}

for(i=0;i<2*circle;i++)

{

lf(numX==x&&numY==y)

{

printf("Thenumberis:%d\n",num);

return;

?

numY—;

num++;

}

}

}

3、#include

//exampleinputandoutput

//in123out131

//in1234567892100out12345678910021

longmex(longajongbjongc)

{longd;

if(b==O)return0;

if(b==l)returna%c;

d=mex(a,b/2zc);

d*=d;

這里忘了;〃這里不全,我在網上沒找到,有知道的朋友請回帖告知,

謝謝!

d*=mex(a,b%2,c);

d%=c;

returnd;

?

intmain(void)

<longx,y,z;

while(l)

{if(scanf(%d%d%d,&x,&y,&z)>3)return0;

if(x<0){printf("toosmall\n");continue;}

if(y<0){printf("toosmall\nH);continue;}

if(z<l){printf("toosmall\n");continue;}

if(y>z){printf("toobig\n");continue;}

if(z>1000000010){printfC'toobig\n");continue}

printf(%d%d%d,x,z,mex(x,y,z);

}}

根據這個程序,當已知一個輸入,算出輸出,如:輸入131則輸出123輸

入12345678910021輸出1234567892100

C++筆試題(十九)

A

一個C程序的執行是從。

A)本程序的main函數開始,到main函數結束

B)本程序文件的第一個函數開始,到本程序文件的最后一個函數結束

C)本程序的main函數開始,到本程序文件的最后一個函數結束

D)本程序文件的第一個函數開始,到本程序main函數結束

*2

C

以下敘述正確的是:

A)在C程序中,main函數必須位于程序的最前面

B)C程序的每行中只能寫一條語句

C)C語言本身沒有輸入輸出語句

D)在對一個C程序進行編譯的過程中,可發現注釋中的拼寫錯誤

*3

D

以下敘述不正確的是。

A)一個C源程序可由一個或多個函數組成

B)一個C源程序必須包含一個main函數

QC程序的基本組成單位是函數

D)在C程序中,注釋說明只能位于一條語句的后面

*4

C

C語言規定:在一個源程序中,main函數的位置。

A)必須在最開始

B)必須在系統調用的庫函數的后面

0可以任意

D)必須在最后

*5

B

一個C語言程序是由

A)一個主程序和若干子程序組成B)函數組成

C)若干過程組成D)若干子程序組成

*6

A

在C語言中(以16位PC機為例),5種基本數據類型的存儲空間長度的排列順序為

A)char<int<longint<=float<double

B)char=int<1ongint<=float<double

C)char<int<longint=float=doublc

D)char=int=1ongint<=float<double

*7

C

若x,i,j和k都是int型變星,則執行下面表達式后x的值為

x=(i=4,j=16,k=32)

A)4B)16Q320)52

*8

B

假設所有變量均為整型廁表達式行2854++,武0的值是:

A)7B)8C)6D)2

*9

A

卜.列四組選項中,均不是C語言關鍵字的選項是

A)(lcfincB)gctcQincludcD)\vhilc

IFcharscanfgo

typeprintfcasepow

*10

B

下面四個選項中,均是C語言關鍵字的選項是

A)autoB)switchQsignedD)if

cnumtypcdcfunionstruct

includecontinuescanftype

*11

C

下面四個選項中,均是不合法的用戶標識符的選項是。

A)AB)floatC)b-aD)—123

P_0laOgototemp

do-Aint1NT

*12

C

C語言中的標識符只能由字母、數字和下劃線三種字符組成,且第一個字符

A)必須為字母

溫馨提示

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

評論

0/150

提交評論