C軟件工程師筆試題_第1頁
C軟件工程師筆試題_第2頁
C軟件工程師筆試題_第3頁
C軟件工程師筆試題_第4頁
C軟件工程師筆試題_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

一、請?zhí)顚態(tài)OOL,float,指針變量與“零值”比較的if語句。(10分)

提示:這里“零值”可以是0,0.0,FALSE或者“空指針”。例如int變量n與“零值”比較

的if語句為:if(n==0)if(n!=0)

以此類推。請寫出BOOLflag與“零值”比較的if語句:

標(biāo)準(zhǔn)答案:if(flag)

if(Iflag)

如下寫法均屬不良風(fēng)格,不得分。

if(flag==TRUE)if(flag==1)if(flag==FALSE)if(flag==0)

請寫出floatx與“零值”比較的if語句:

標(biāo)準(zhǔn)答案示例:

constfloatEPSINON=0.00001;

if((x>=-EPSINON)&&(x<=EPSINON)不可將浮點(diǎn)變量用"=="或"!=”與數(shù)字比較,應(yīng)該

設(shè)法轉(zhuǎn)化成“>="或“<=”此類形式。如下是錯(cuò)誤的寫法,不得分。

if(x==0.0)if(x!=0.0)

請寫出char*p與"零值”比較的if語句:

標(biāo)準(zhǔn)答案:

if(p==NULL)

if(p!=NULL)

如下寫法均屬不良風(fēng)格,不得分。

if(p==0)if(p!=0)if(p)if(!)

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

charstr[]=,,HelloM;char*p=str;intn=10;

sizeof(str)=6sizeof(p)=4sizeof(n)=4

voidFunc(charstr[100])

{請計(jì)算sizeof(str)=4}

void*p=malloc(100);

請計(jì)算sizeof(p)=4

三、簡答題(25分)

1、頭文件中的ifndef/define/endif干什么用?

防止該頭文件被重復(fù)引用

2、#include〈filename.h>和#include"filename.h”有什么區(qū)別?

答:對于#include<filename.h>,編譯器從標(biāo)準(zhǔn)庫路徑開始搜索filename.h

對于#includeufilename.h,編譯器從用戶的工作路徑開始搜索filename.h

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

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

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

強(qiáng)制保護(hù),可以預(yù)防意外的變動(dòng),能提高程序的健壯性。

4、在C++程序中調(diào)用被C編譯器編譯后的函數(shù),為什么要加extern“C”聲明?

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

語言的不同。假設(shè)某個(gè)函數(shù)的原型為:voidfoo(intx,inty);

該函數(shù)被C編譯器編譯后在庫中的名字為一f。。,而C++編譯器則會(huì)產(chǎn)生像_foo_int_int之類的

名字。

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

5、請簡述以下兩個(gè)for循環(huán)的優(yōu)缺點(diǎn)

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

{if(condition)

DoSomething();

elseDoOtherthing();

)

//第二個(gè)

if(condition){

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

DoSomething();}

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

DoOtherthing。;}優(yōu)點(diǎn):程序簡潔

缺點(diǎn):多執(zhí)行了N-1次邏輯判斷,并且打斷了循環(huán)“流水線”作業(yè),使得編譯器不能對循環(huán)

進(jìn)行優(yōu)化處理,降低了效率。優(yōu)點(diǎn):循環(huán)的效率高

缺點(diǎn):程序不簡潔

四、有關(guān)內(nèi)存的思考題(20分)

voidGetMemory(char*p)

{p=(char*)malloc(100);

)

voidTest(void)

{char*str=NULL;

GetMemory(str);

strcpy(str,"helloworld");

printf(str);}

請問運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?

答:程序崩潰,getmemory中的malloc不能返回動(dòng)態(tài)內(nèi)存,free。對str操作很危險(xiǎn)博

主:getmemory中p是形參,是一個(gè)指針變量,getmemory(str)調(diào)用后,傳入的是指針變量

保存的對象地址,p=(char*)malloc(lOO)實(shí)際上是把申請的動(dòng)態(tài)內(nèi)存空間的首地址付給p指

向的地址(即str指向的地址null),這個(gè)是錯(cuò)誤的。應(yīng)該修改成指向指針的指針void

getmemoryfchar**p),這樣malloc返回的地址付給*p(即str變量本身)。

char*GetMemory(void)

{charp[]="helloworld";

returnp;}

voidTest(void){char*str=NULL;

str=GetMemory();

printf(str);}

請問運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?

答:可能是亂碼。

因?yàn)镚etMemory返回的是指向“棧內(nèi)存”的指針,該指針的地址不是NULL,但其原現(xiàn)的

內(nèi)容已經(jīng)被清除,新內(nèi)容不可知。

RetMenory執(zhí)行完畢,p資源被回收,指向未知地址。返回地址,str的內(nèi)容應(yīng)是不可預(yù)測的,

打印的應(yīng)該是str的地址

VoidGetMemory2(char**p,intnum)

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

}voidTest(void)

{char*str=NULL;

GetMemory(&str,100);

strcpy(str,"hello");

printf(str);}

請問運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?

答:⑴能夠輸出hello

(2)內(nèi)存泄漏

voidTest(void){char*str=(char*)malloc(lOO);

strcpy(str,"hello");

free(str);

if(str!=NULL)

{strcpy(str,"world");

printf(str);}}

請問運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?

答:篡改動(dòng)態(tài)內(nèi)存區(qū)的內(nèi)容,后果難以預(yù)料,非常危險(xiǎn)。

因?yàn)閒ree(str);之后,str成為野指針,

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

五、已知函數(shù)的原型是

strcpychar*strcpy(char*strDestzconstchar*strSrc);

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

(1)不調(diào)用C++/C的字符串庫函數(shù),請編寫函數(shù)strcpy

答:char*my_strcpy(char*strdest,constchar*strsrc)

(

assert(strdest!=NULL)&&(strsrc!=NULL))

char*address=strdest;

while((*strdest++=*strsrc++)!=NULL)

returnaddress;

)

(2)strcpy能把strSrc的內(nèi)容復(fù)制到strDest,為什么還要char*類型的返回值?

答:為了實(shí)現(xiàn)鏈?zhǔn)奖磉_(dá)式?!?分

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

六、編寫類String的構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù)(25分)

已知類String的原型為:

classString

{public:

String(constchar*str=NULL);//普通構(gòu)造函數(shù)

String(constString&other);//拷貝構(gòu)造函數(shù)

String(void);//析構(gòu)函數(shù)

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

private:

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

);

請編寫String的上述4個(gè)函數(shù)。

〃普通構(gòu)造函數(shù)

String::String(constchar*str)

(

if(str==NULL)

(

m_data=newchar[l];//得分點(diǎn):對空字符串自動(dòng)申請存放結(jié)束標(biāo)志'\0'的

〃加分點(diǎn):對m_data加NULL判斷

*m_data='\0';

)

else

(

intlength=strlen(str);

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

strcpy(m_datazstr);

)

}

“String的析構(gòu)函數(shù)

String::~String(void)

(

delete[]m_data;//或deletem_data;

)

〃拷貝構(gòu)造函數(shù)

String::String(constString&other)//得分點(diǎn):輸入?yún)?shù)為const型

(

intlength=strlen(other.m_data);

m_data=newchar[length+l];〃加分點(diǎn):對m_data力口NULL判斷

strcpy(m_data,other.m_data);

)

〃賦值函數(shù)

String&String::operate=(constString&other)//得分點(diǎn):輸入?yún)?shù)為const型

(

if(this==&other)〃得分點(diǎn):檢查自賦值

return*this;

delete[]m_data;〃得分點(diǎn):釋放原有的內(nèi)存資源

intlength=strlen(other.m_data);

m_data=newchar[length+l];〃加分點(diǎn):對m_data力口NULL判斷

strcpy(m_data,other.m__data);

return*this;〃得分點(diǎn):返回本對象的引用

)

編寫一個(gè)函數(shù),要求輸入年月日時(shí)分秒,輸出該年月日時(shí)分秒的下一秒。如輸入2004年12

月31日23時(shí)59分59秒,則輸出2005年1月1日。時(shí)0分。秒。

voidResetTheTime(int*year,int*month,int*date,int*hour;int*minute,int*second)

intdayOfMonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};

if(*year<011*month<111*month>1211

*date<111*date>3111*hour<011*hour>2311

*minute<0||*minute>59||*second<011*second>60)

return;

if(*year%400==011*year%100!=0&&*year%4==0)

dayOfMonth[l]=29;

if(*second>=60)

(

*second=0;

*minute+=1;

if(*minute>=60)

(

*minute=0;

*hour+=1;

if(*hour>=24)

(

*hour=0;

*date+=1;

if(*date>dayOfMonth[*month-l])

(

*date=1;

*month+=1;

if(*month>12)

(

*month=l;

*year+=1;

)

)

)

)

)

return;

1.全局變量和局部變量在內(nèi)存中是否有區(qū)別?如果有,是什么區(qū)別?

全局變量儲存在靜態(tài)數(shù)據(jù)庫,局部變量在堆棧

2.static有什么用途?(請至少說明兩種)

1.限制變量的作用域2.設(shè)置變量的存儲域

不能做switch。的參數(shù)類型是:

switch的參數(shù)不能為實(shí)型。

如何引用一個(gè)已經(jīng)定義過的全局變量?

答:extern

可以用引用頭文件的方式,也可以用extern關(guān)鍵字,如果用引用頭文件方式來引用某個(gè)在

頭文件中聲明的全局變理,假定你將那個(gè)變寫錯(cuò)了,那么在編譯期間會(huì)報(bào)錯(cuò),如果你用extern

方式引用時(shí),假定你犯了同樣的錯(cuò)誤,那么在編譯期間不會(huì)報(bào)錯(cuò),而在連接期間報(bào)錯(cuò)

全局變量可不可以定義在可被多個(gè).C文件包含的頭文件中?為什么?

答:可以,在不同的C文件中以static形式來聲明同名全局變量。

可以在不同的C文件中聲明同名的全局變量,前提是其中只能有一個(gè)C文件中對此變量賦

初值,此時(shí)連接不會(huì)出錯(cuò)

char*ss="0123456789";

sizeof(ss)結(jié)果4===》ss是指向字符串常量的字符指針,sizeof獲得的是一個(gè)指針的之

所占的空間,應(yīng)該是長整型的,所以是4

sizeof(*ss)結(jié)果1===》*ss是第一個(gè)字符其實(shí)就是獲得了字符串的第一位。所占的內(nèi)

存空間,是char類型的,占了1位

請找出下面代碼中的所以錯(cuò)誤

說明:以下代碼是把一個(gè)字符串倒序,如“abed”倒序后變?yōu)椤癲eba”

1、#includeHstring.h"

2、main()

3、(

4、char*src="hello,world";

5、char*dest=NULL;

6、intlen=strlen(src);

1、dest=(char*)malloc(len);

8、char*d=dest;

9^char*s=src[len];

10>while(len-!=0)

11、d++=s—;

、

12printf("%s"zdest);

13、return0;

14、)

答:

方法1:

intmain(){

char*sre="hello,world";

intten=strlen(src);

char*dest=(char*)malloc(len+l);〃要為\0分配一個(gè)空間

char*d=dest;

char*s=&src[len?l];〃指向最后一個(gè)字符

while(len-!=0)

*d++=*s-;

*d='\0';〃尾部要加\0

printf("%s\n"zdest);

free(dest);//使用完,應(yīng)當(dāng)釋放空間,以免造成內(nèi)存匯泄露

return0;

方法2:

#include<stdio.h>

#include<string.h>

main()

(

charstr[]="hello,world";

intlen=strlen(str);

chart;

for(inti=0;i<len/2;i++)

(

t=str[i];

str[i]=str[len-i-l];str[len-i-l]=t;

)

printf(“%s”,str);

return0;

}

.用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的功能?要求給出算法和思路!

設(shè)2個(gè)棧為A,B,一開始均為空.

入隊(duì):

將新元素push入棧A;

出隊(duì):

⑴判斷棧B是否為空;

⑵如果不為空,則將棧A中所有元素依次pop出并push到棧B;

⑶將棧B的棧頂元素pop出;

char*constp;〃常量指針,p的值不可以修改

charconst*p;〃指向常量的指針,指向的常量值不可以改

constchar*p;〃和charconst*p

main()

(

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

int*ptr=(int*)(&a+l);

printf("%d,%d",*(a+l),*(ptr-l));

}輸出:2,5

*(a+l)就是a[l],*(ptr-l)就是a[4],執(zhí)行結(jié)果是2,5

&a+l不是首地址+1,系統(tǒng)會(huì)認(rèn)為加一個(gè)a數(shù)組的偏移,是偏移了一個(gè)數(shù)組的大小(本例是

5個(gè)int)

int*ptr=(int*)(&a+l);則ptr實(shí)際是&(a[5]),也就是a+5

原因如下:&a是數(shù)組指針,其類型為int(*)[5];

而指針加1要根據(jù)指針類型加上一定的值,

不同類型的指針+1之后增加的大小不同

a是長度為5的int數(shù)組指針,所以要加5*sizeof(int)

所以ptr實(shí)際是a[5]

但是prt與(&a+l)類型是不一樣的(這點(diǎn)很重要)

所以prt-1只會(huì)減去sizeoffint*)

a,&a的地址是一樣的,但意思不一樣,a是數(shù)組首地址,也就是a⑼的地址,&a是對象(數(shù)

組)首地址,a+1是數(shù)組下一元素的地址,即a[l],&a+l是下一個(gè)對象的地址,即a[5].

char*s="AAA";

printf("%s"zs);

s[O]='B';

printf("%s",s);

有什么錯(cuò)?

"AAA"是字符串常量。s是指針,指向這個(gè)字符串常量,所以聲明s的時(shí)候就有問題。

cosntchar*s="AAA";

然后又因?yàn)槭浅A?,所以對是s[0]的賦值操作是不合法的。

int(*s[10])(int)函數(shù)指針數(shù)組,每個(gè)指針指向一個(gè)intfunc(intparam)的函數(shù)。

.交換兩個(gè)變量的值,不使用第三個(gè)變量。即a=3,b=5,交換之后a=5,b=3;

有兩種解法,一種用算術(shù)算法,一種用人(異或)

a=a+b;b=a-b;a=a-b;

ora=aAb;//只能對int,char..

b=aAb;

a=aAb;

3.c和C++中的struct有什么不同?

c和C++中struct的主要區(qū)別是c中的struct不可以含有成員函數(shù),而C++中的struct可以。

C++中struct和class的主要區(qū)別在于默認(rèn)的存取權(quán)限不同,struct默認(rèn)為public,而class默

認(rèn)為private

1:(void*)ptr和(*(void**))ptr的結(jié)果是否相同?其中ptr為同一個(gè)指針

.(void*)ptr和(*(void**))ptr值是相同的

改錯(cuò):

intmain(void){

int**p;

intarr[100];

p=&arr;

return0;}

解答:

搞錯(cuò)了,是指針類型不同,

int**p;〃二級指針

&arr;〃得到的是指向第一維為100的數(shù)組的指針

#include<stdio.h>

intmain(void){

int**p,*q;

intarr[100];

q=arr;

p=&q;

return0;

}

下面這個(gè)程序執(zhí)行后會(huì)有什么錯(cuò)誤或者效果:

#defineMAX255

intmain()

{unsignedcharA[MAX],i;//i被定義為unsignedchar

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

A[i]=i;

}解答:死循環(huán)加數(shù)組越界訪問(C/C++不進(jìn)行數(shù)組越界檢查)

MAX=255數(shù)組A的下標(biāo)范圍為:0..MAX-l,這是其一..其二.當(dāng)i循環(huán)到255時(shí),循環(huán)內(nèi)執(zhí)行:

A[255]=255;這句本身沒有問題..但是返回for(i=0;i<=MAX;i++)語句時(shí),

由于unsignedchar的取值范圍在(O..255),i++以后i又為0了..無限循環(huán)下去.

設(shè)編號為1,2,…n的n個(gè)人圍坐一圈,約定編號為k(l<=k<=n)的人從1開始報(bào)數(shù),數(shù)

到m的那個(gè)人出列,它的下一位又從1開始報(bào)數(shù),數(shù)到m的那個(gè)人又出列,依次類推,直

到所有人出列為止,由此產(chǎn)生一個(gè)出隊(duì)編號的序列。

數(shù)組實(shí)現(xiàn):

ttinclude<stdio.h>

#include<malloc.h>

intJosephu(intn,intm)

(

intflag,i,j=0;

int*arr=(int*)malloc(n*sizeof(int));

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

arr[i]=1;

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

(

flag=0;

while(flag<m)

(

if(j==n)

j=0;

if(arr[j])

++flag;

++j;

)

arr[j-1]=0;

print"第%4d個(gè)出局的人是:%4d號\n",i,j);

free(arr);

returnj;

)

intmain()

(

intn,m;

scanf("%d%d",&n,&m);

printf(“最后勝利的是%d號!\n”,Josephu(n,m));

system("pause");

return0;

)

鏈表實(shí)現(xiàn):

#include<stdio.h>

#include<malloc.h>

typedefstructNode

(

intindex;

structNode*next;

JJosephuNode;

intJosephu(intn,intm)

(

inti,j;

JosephuNode*head,*tail;

head=tail=(JosephuNode*)malloc(sizeof(JosephuNode));

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

(

tail->index=i;

tail->next=(JosephuNode*)malloc(sizeof(JosephuNode));

tail=tail->next;

)

tail->index=i;

tail->next=head;

for(i=1;tail!=head;++i)

(

for(j=1;j<m;++j)

(

tail=head;

head=head->next;

)

tail->next=head->next;

printf("第%4d個(gè)出局的人是:%4d號\n”,i,head->index);

free(head);

head=tail->next;

i=head->index;

free(head);

returni;

}

intmain()

(

intn,m;

,,

scanf(%d%d"/&n,&m);

printf(“最后勝利的是%d號!\n”,Josephu(n,m));

system("pause");

return0;

)

斐波拉契數(shù)列遞歸實(shí)現(xiàn)的方法如下:

intFunct(intn)

(

if(n==0)return1;

if(n==l)return1;

retrurnFunct(n-l)+Funct(n-2);

)

請問,如何不使用遞歸,來實(shí)現(xiàn)上述函數(shù)?

請教各位高手!

解答:intFunct(intn)〃n為非負(fù)整數(shù)

(

inta=0;

intb=l;

intc;

if(n==0)c=l;

elseif(n==l)c=l;

elsefor(inti=2;i<=n;i++)〃應(yīng)該n從2開始算起

(

c=a+b;

a=b;

b=c;

)

returnc;

)

在對齊為4的情況下

structBBB

(

longnum;

char*name;

shortintdata;

charha;

shortba[5];

)*P;

p=0xl000000;

p+0x200=;

(Ulong)p+0x200=;

(char*)p+0x200=;

希望各位達(dá)人給出答案和原因,謝謝拉

解答:假設(shè)在32位CPU上,

sizeof(long)=4bytes

sizeof(char*)=4bytes

sizeof(shortint)=sizeof(short)=2bytes

sizeof(char)=1bytes

由于是4字節(jié)對齊,

sizeof(structBBB)=sizeof(*p)

=4+4+2+1+1/*補(bǔ)齊*/+2*5+2/*補(bǔ)齊*/=24bytes(經(jīng)Dev-C++驗(yàn)證)

p=0xl000000;

p+0x200=;

=0x1000000+0x200*24

(Ulong)p+0x200=____;

=0x1000000+0x200

(char*)p+0x200=;

=0x1000000+0x200*4

寫一個(gè)函數(shù),它的原形是intcontinumax(char*outputstr,char*intputstr)

功能:

在字符串中找出連續(xù)最長的數(shù)字串,并把這個(gè)串的長度返回,并把這個(gè)最長數(shù)字串付給其中

一個(gè)函數(shù)參數(shù)outputstr所指內(nèi)存。例如:"abcdl2345edl25ssi23456789”的首地址傳給

intputstr后,函數(shù)將返回

9,outputstr所指的值為123456789

intcontinumax(char*outputstr,char*inputstr)

(

char*in=inputs"*out=outputstr,*temp,*final;

intcount=0,maxlen=0;

while(*in!='\0')

(

if(*in>47&&*in<58)

for(temp=in;*in>47&&*in<58;in++)

count++;

else

in++;

if(maxlen<count)

(

maxlen=count;

count=0;

final=temp;

)

)

for(inti=0;i<maxlen;i++)

(

*out=*final;

out++;

final++;

)

*out="\0';

returnmaxlen;

}

不用庫函數(shù),用c語言實(shí)現(xiàn)將一整型數(shù)字轉(zhuǎn)化為字符串

方法1:

intgetlen(char*s){

intn;

for(n=0;*s!='\0';s++)

n++;

returnn;

}

voidreverse(chars[])

(

intc,i,j;

for(i=0,j=getlen(s)-1;i<j;i++,j-){

c=s[i];

s[i]=s[j];

s[j]=c;

)

)

voiditoafintn,chars[])

(

inti,sign;

if((sign=n)<0)

n=-n;

i=0;

dof/*以反序生成數(shù)字*/

s[i++]=n%10+,O,;/*getnextnumber*/

}while((n/=10)>0);/*deletethenumber*/

if(sigr)<0)

s[i++]='-';

s[i]='\0';

reverse(s);

)

方法2:

#include<iostream>

usingnamespacestd;

voiditochar(intnum);

voiditochar(intnum)

(

inti=0;

intj;

charstra[10];

charstrb[10];

while(num)

(

stra[i++]=num%10+48;

num=num/10;

)

stra[i]='\0';

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

(

strb[j]=stra[i-j-l];

)

strbU]=3;

cout?strb?endl;

intmain()

(

intnum;

cin?num;

itochar(num);

return0;

用指針的方法,將字符串“ABCD1234efgh”前后對調(diào)顯示

#include<stdio.h>

#include<string.h>

#include<dos.h>

intmain()

(

charstr[]="ABCD1234efgh";

intlength=strlen(str);

char*pl=str;

char*p2=str+length-1;

while(pl<p2)

(

charc=*pl;

*pl=*p2;

*p2=c;

++pl;

-p2;

)

printf("strnowis%s\n"zstr);

system("pause");

return0;

)

有一個(gè)數(shù)組a[1000]存放0-1000;要求每隔二個(gè)數(shù)刪掉一個(gè)數(shù),到末尾時(shí)循環(huán)至開頭繼續(xù)進(jìn)行,

求最后一個(gè)被刪掉的數(shù)的原始下標(biāo)位置。

方法2:鏈表

#include<iostream>

usingnamespacestd;

#definenull0

structnode

(

intdata;

node*next;

);

intmain()

(

node*head=newnode;

head->data=O;

head->next=null;

node*p=head;

for(inti=l;i<1000;i++)

node*tmp=newnode;

tmp->data=i;

tmp->next=null;

head->next=tmp;

head=head->next;

}

head->next=p;

while(p!=p->next)

(

p->next->next=p->next->next->next;

p=p->next->next;

)

cout?p->data;

return0;

}

試題:

voidtest2()

{

charstring[10],strl[10];

inti;

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

(

strl[i]='a';

}

strcpy(string,strl);

)

解答:對試題2,如果面試者指出字符數(shù)組strl不能在數(shù)組內(nèi)結(jié)束可以給3分;如果面試者

指出strcpyfstring,strl)調(diào)用使得從strl內(nèi)存起復(fù)制到string內(nèi)存起所復(fù)制的字節(jié)數(shù)具有不確

定性可以給7分,在此基礎(chǔ)上指出庫函數(shù)strcpy工作方式的給10分;

strl不能在數(shù)組內(nèi)結(jié)束:因?yàn)閟trl的存儲為:{a,a,a,a,a,a,a,a,a,a},沒有'\0〈字符串結(jié)束符),所以

不能結(jié)束

strcpy(char*sl,char*s2)他的工作原理是,掃描s2指向的內(nèi)存,逐個(gè)字符付到si所指向的

內(nèi)存,直到碰到'\0',因?yàn)閟trl結(jié)尾沒有所以具有不確定性,不知道他后面還會(huì)付什么東

東。

正確應(yīng)如下

voidtest2()

(

charstring口0],strl[10];

inti;

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

(

strl[i]='a'+i;〃把a(bǔ)bcdefghi賦值給字符數(shù)組

str[i]=\O';〃加上結(jié)束符

strcpy(string,strl);

分析:

intarr[]={6,7,8,9,10};

int*ptr=arr;

*(ptr++)+=123;

printf(u%d%d",*ptr,*什+ptrj);

輸出:88

過程:對于*(ptr++)+=123;先做加法6+123,然后++,指針指向7;對于printf("%d%d”,*ptr,

*(++ptr));從后往前執(zhí)行,指針先++,指向8,然后輸出8,緊接著再輸出8

已知一個(gè)單向鏈表的頭,請寫出刪除其某一個(gè)結(jié)點(diǎn)的算法,要求,先找到此結(jié)點(diǎn),然后刪除。

slnodetype*Delete(slnodetype*Head,int1?丫){}中if(Hea

溫馨提示

  • 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)僅提供信息存儲空間,僅對用戶上傳內(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

提交評論