版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、c語言面試題目100及最佳答案作為IT行業(yè)人士需要掌握的最基本的計算機語言c語言,如今的地位只高不低,c語言掌握程度的高低往往在面試的時候可以完全表現(xiàn)出來,而有些問題是大家平時似乎是知道的,但卻不能完整準確地回答上來的,今天大家?guī)砭恼淼腃語言經典面試題 ,希望對大家有所幫助。1、請?zhí)顚慴ool , float, 指針變量 與“零值”比較的if語句。提示:這里“零值”可以是0, 0.0 , FALSE 或者“空指針”。例如int 變量n 與“零值”比較的if 語句為:if ( n = 0 )if ( n != 0 )以此類推。(1)請寫出bool flag 與“零值”比較的if 語句:【標
2、準答案】if ( flag ) if ( !flag )100 條經典 C語言筆試題目(2)請寫出float x 與“零值”比較的if 語句:【標準答案】 const float EPSINON = 0.00001;if (x = - EPSINON) & (x =” 或“=” 此類形式。100 條經典 C語言筆試題目(3)請寫出char *p 與“零值”比較的if 語句【標準答案】 if (p = NULL) if (p != NULL)2、以下為Linux下的32 位C 程序,請計算sizeof 的值。char str = “Hello” ;char *p = str ;i nt n =
3、10;請計算(1)sizeof (str ) = (2)s i zeof ( p ) =(3)sizeof ( n ) =【標準答案】(1)6、(2)4 、(3 )4(4)void Func ( char str100) ;請計算sizeof( str ) =(5)void * p = mall oc( 100 );請計算sizeof ( p ) =【標準答案】(4)4、(5)44、用變量a 給出下面的定義e) 一個有10個指針的數組,該指針是指向一個整型數的;f) 一個指向有10個整型數數組的指針;g) 一個指向函數的指針,該函數有一個整型參數并返回一個整型數;h) 一個有10個指針的數組,
4、該指針指向一個函數,該函數有一個整型參數并返回一個整型數;【標準答案】e)int * a10; f)int (*a)10g)int (*a)(int); h) int (*a10)(int)5、設有以下說明和定義:typedef u nion long i; int k5; char c; DATE;struct data int cat; DATE cow; double dog; too;DATE max;則語句printf(%d,sizeof(struct date)+sizeof(max); 的執(zhí)行結果是:_【標準答案】DATE是一個union, 變量公用空間. 里面最大的變量類型是i
5、nt5, 占用20個字節(jié). 所以它的大小是20data 是一個struct, 每個變量分開占用空間. 依次為int4 +DATE20 + double8 = 32.所以結果是20 + 32 = 52.當然 在某些16位編輯器下, int 可能是2字節(jié),那么結果是int2 + DATE10 + double8 = 206、請問以下代碼有什么問題:int main()char a;char *str=&a;strcpy(str,“hello”);printf(str);return 0;【標準答案】沒有為str分配內存空間,將會發(fā)生異常問題出在將一個字符串復制進一個字符變量指針所指地址。雖然可以正
6、確輸出結果,但因為越界進行內在讀寫而導致程序崩潰。7、請問以下代碼有什么問題:char* s=“AAA”;printf(%s,s);s0=B;printf(%s,s);有什么錯?【標準答案】“AAA” 是字符串常量。s是指針,指向這個字符串常量,所以聲明s的時候就有問題。cosnt char* s=“AAA”;然后又因為是常量,所以對是s0 的賦值操作是不合法的。8、int (*s10)(int) 表示的是什么啊【標準答案】int (*s10)(int) 函數指針數組,每個指針指向一個int func(intp aram) 的函數。9、c和c+ 中的struct有什么不同?【標準答案】c和c+
7、 中struct的主要區(qū)別是c中的struct不可以含有成員函數,而c+ 中的struct可以。c+ 中struct和class的主要區(qū)別在于默認的存取權限不同,struct默認為public ,而class默認為private10、void getmemory(char *p)p=(char *) malloc(100);strcpy(p,“hello world”);int main( )char *str=NULL;getmemory(str);printf(“%s/n”,str);free(str);return 0; 會出現(xiàn)什么問題?【標準答案】程序崩潰,getmemory中的mal
8、loc 不能返回動態(tài)內存,free ()對str操作很危險。11、char szstr10;strcpy(szstr,“0123456789”);產生什么結果?為什么?【標準答案】長度不一樣,出現(xiàn)段錯誤。100 條經典 C語言筆試題目12、數組和鏈表的區(qū)別?【標準答案】數組:數據順序存儲,固定大小;鏈表:數據可以隨機存儲,大小可動態(tài)改變13、void main()char aa10;printf(“%d”,strlen(aa);會出現(xiàn)什么問題?打印結果是是多少?【標準答案】sizeof()和初不初始化,沒有關系,strlen()和初始化有關,打印結果值未知。14、給定結構struct Acha
9、r t:4;char k:4;unsigned short i:8;unsigned long m; 問sizeof(A) = ?【標準答案】815、struct name1char str;short x;int num; ;求sizeof(name1)?【標準答案】816、struct name2char str;int num;short x; 求sizeof(name2)?【標準答案】1217、程序哪里有錯誤wap( int* p1,int* p2 )int * p;*p = *p1;*p1 = *p2;*p2 = *p;【標準答案】p 為野指針19、(void)ptr 和(void*
10、)ptr 的結果是否相同?其中ptr為同一個指針。【標準答案】(void)ptr 和(void*)ptr 值是相同的20、要對絕對地址0x100000賦值,我們可以用(unsigned int*)0x100000 = 1234;那么要是想讓程序跳轉到絕對地址是0x100000去執(zhí)行,應該怎么做?【標準答案】(void ()( )0x100000 ) ( );首先要將0x100000強制轉換成函數指針,即:(void (*)()0x100000然后再調用它:(void ()()0x100000)();22、關于內存的思考題(1)你能看出有什么問題?23、關于內存的思考題(2)你能看出有什么問題?
11、25、關于內存的思考題(3)你能看出有什么問題?26、關于內存的思考題(4)你能看出有什么問題?27、關鍵字volatile有什么含意? 并給出三個不同的例子?!緟⒖即鸢浮恳粋€定義為volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值了。精確地說就是,優(yōu)化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器里的備份。下面是volatile變量的幾個例子:1). 并行設備的硬件寄存器(如:狀態(tài)寄存器)2). 一個中斷服務子程序中會訪問到的非自動變量(Non-automatic variables)3). 多線程應用中被幾個任務共享
12、的變量28、嵌入式系統(tǒng)經常具有要求程序員去訪問某特定的內存位置的特點。在某工程中,要求設置一絕對地址為0x67a9的整型變量的值為0xaa66。編譯器是一個純粹的ANSI編譯器。寫代碼去完成這一任務?!緟⒖即鸢浮窟@一問題測試你是否知道為了訪問一絕對地址把一個整型數強制轉換(typecast )為一指針是合法的。這一問題的實現(xiàn)方式隨著個人風格不同而不同。典型的類似代碼如下:int * ptr;ptr= (int *)0x67a9;*ptr = 0xaa55;29、頭文件中的ifndef/define/endif 干什么用?【標準答案】防止該頭文件被重復引用。30、#include 和#inclu
13、de“filename.h” 有什么區(qū)別?【標準答案】對于#include ,編譯器從標準庫路徑開始搜索filename.h ;對于#include “filename.h” ,編譯器從用戶的工作路徑開始搜索filename.h 。31、const 有什么用途?(請至少說明兩種)【標準答案】: (1)可以定義const 常量(2)const 可以修飾函數的參數、返回值,甚至函數的定義體。被const 修飾的東西都受到強制保護,可以預防意外的變動,能提高程序的健壯性。32、static有什么用途?(請至少說明兩種)【標準答案】1. 限制變量的作用域(static全局變量);2. 設置變量的存儲域
14、(static局部變量)。33、堆棧溢出一般是由什么原因導致的?【標準答案】沒有回收垃圾資源。34、如何引用一個已經定義過的全局變量?【標準答案】可以用引用頭文件的方式,也可以用extern 關鍵字,如果用引用頭文件方式來引用某個在頭文件中聲明的全局變理,假定你將那個變量寫錯了,那么在編譯期間會報錯,如果你用extern 方式引用時,假定你犯了同樣的錯誤,那么在編譯期間不會報錯,而在連接期間報錯。35、全局變量可不可以定義在可被多個.C 文件包含的頭文件中?為什么?【標準答案】可以,在不同的C 文件中以static形式來聲明同名全局變量??梢栽诓煌腃文件中聲明同名的全局變量,前提是其中只能有
15、一個C文件中對此變量賦初值,此時連接不會出錯。36、隊列和棧有什么區(qū)別?【標準答案】隊列先進先出,棧后進先出。37、Heap與stack的差別?!緲藴蚀鸢浮縃eap是堆,stack是棧。Stack的空間由操作系統(tǒng)自動分配/釋放,Heap上的空間手動分配/釋放。Stack空間有限,Heap是很大的自由存儲區(qū)C 中的malloc 函數分配的內存空間即在堆上,C+中對應的是new 操作符。程序在編譯期對變量和函數分配內存都在棧上進行,且程序運行過程中函數調用時參數的傳遞也在棧上進行。38、用宏定義寫出swap(x,y),即交換兩數?!緲藴蚀鸢浮?define swap(x, y) (x)=(x)+(
16、y);(y)=(x)(y);(x)=(x)(y);39、寫一個“標準”宏,這個宏輸入兩個參數并返回較小的一個。【標準答案】#define Min(X, Y) (X)(Y)?(Y):(X)/ 結尾沒有;40、帶參宏與帶參函數的區(qū)別(至少說出5點)?【標準答案】帶參宏 帶參函數處理時間 編譯時 運行時參數類型 無 需定義程序長度 變長 不變占用存儲空間 否 是運行時間 不占運行時間 調用和返回時占41、關鍵字volatile有什么含意?【標準答案】提示編譯器對象的值可能在編譯器未監(jiān)測到的情況下改變。42、int main()int x=3;printf(%d,x);return 1;問函數既然不會
17、被其它函數調用,為什么要返回1?【標準答案】mian中,c標準認為0表示成功,非0表示錯誤。具體的值是某中具體出錯信息。43、已知一個數組tabl e ,用一個宏定義,求出數據的元素個數?!緲藴蚀鸢浮?define NTBL(table) (sizeof(table)/sizeof(table0)44、A.c 和B.c兩個c文件中使用了兩個相同名字的static變量,編譯的時候會不會有問題?這兩個static變量會保存到哪里(棧還是堆或者其他的)?【標準答案】static的全局變量,表明這個變量僅在本模塊中有意義,不會影響其他模塊。他們都放在靜態(tài)數據區(qū),但是編譯器對他們的命名是不同的。如果要使
18、變量在其他模塊也有意義的話,需要使用extern 關鍵字。45、static全局變量與普通的全局變量有什么區(qū)別?【標準答案】 static全局變量只初使化一次,防止在其他文件單元中被引用;46、static局部變量和普通局部變量有什么區(qū)別【標準答案】static局部變量只被初始化一次,下一次依據上一次結果值;47、static函數與普通函數有什么區(qū)別?【標準答案】static函數在內存中只有一份,普通函數在每個被調用中維持一份拷貝關于45-47 的參考文章全局變量(外部變量)的說明之前再冠以static 就構成了靜態(tài)的全局變量。全局變量本身就是靜態(tài)存儲方式,靜態(tài)全局變量當然也是靜態(tài)存儲方式。這
19、兩者在存儲方式上并無不同。這兩者的區(qū)別雖在于非靜態(tài)全局變量的作用域是整個源程序,當一個源程序由多個源文件組成時,非靜態(tài)的全局變量在各個源文件中都是有效的。而靜態(tài)全局變量則限制了其作用域,即只在定義該變量的源文件內有效,在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個源文件內,只能為該源文件內的函數公用,因此可以避免在其它源文件中引起錯誤。從以上分析可以看出,把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲方式即改變了它的生存期。把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域,限制了它的使用范圍。static函數與普通函數作用域不同。僅在本文件。只在當前源文件中使用的函數應該說明
20、為內部函數(static),內部函數應該在當前源文件中說明和定義。對于可在當前源文件以外使用的函數,應該在一個頭文件中說明,要使用這些函數的源文件要包含這個頭文件。48、程序的局部變量存在于_ 中,全局變量存在于_中,動態(tài)申請數據存在于中。【標準答案】程序的局部變量存在于棧(stack) 中,全局變量存在于靜態(tài)數據區(qū)中,動態(tài)申請數據存在于堆(heap)中。49、什么是預編譯,何時需要預編譯:【標準答案】、總是使用不經常改動的大型代碼體。、程序由多個模塊組成,所有模塊都使用一組標準的包含文件和相同的編譯選項。在這種情況下,可以將所有包含文件預編譯為一個預編譯頭。50、用兩個棧實現(xiàn)一個隊列的功能?
21、要求給出算法和思路!【參考答案】設2個棧為A,B, 一開始均為空.入隊:將新元素push入棧A;出隊:(1)判斷棧B 是否為空;(2)如果不為空,則將棧A中所有元素依次pop 出并push到棧B;(3)將棧B 的棧頂元素pop 出;51、對于一個頻繁使用的短小函數,在C 語言中應用什么實現(xiàn),在C+ 中應用什么實現(xiàn)?【標準答案】c用宏定義,c+ 用inline52、1. 用預處理指令#define 聲明一個常數,用以表明1年中有多少秒(忽略閏年問題)【參考答案】#define SECONDS_PER_YEAR (60 * 60 24 * 365)UL53、Typedef 在C 語言中頻繁用以聲明
22、一個已經存在的數據類型的同義字。也可以用預處理器做類似的事。例如,思考一下下面的例子:#define dPS struct s *typedef struct s * tPS;以上兩種情況的意圖都是要定義dPS 和tPS 作為一個指向結構s指針。哪種方法更好呢?(如果有的話)為什么?【參考答案】這是一個非常微妙的問題,任何人答對這個問題(正當的原因)是應當被恭喜的。答案是:typedef 更好。思考下面的例子:dPS p 1,p2;tPS p3,p4;第一個擴展為struct s * p1, p2;上面的代碼定義p1為一個指向結構的指,p2為一個實際的結構,這也許不是你想要的。第二個例子正確地
23、定義了p3 和p4 兩個指針。54、在C+ 程序中調用被C 編譯器編譯后的函數,為什么要加extern “C”?【標準答案】C+ 語言支持函數重載,C 語言不支持函數重載。函數被C+ 編譯后在庫中的名字與 C 語言的不同。假設某個函數的原型為:void foo(int x, int y);該函數被C 編譯器編譯后在庫中的名字為_foo ,而C+ 編譯器則會產生像_foo_int_int之類的名字。 C+提供了C 連接交換指定符號extern“C”來解決名字匹配問題。55、請簡述以下兩個for 循環(huán)的優(yōu)缺點?!緲藴蚀鸢浮?6、語句for( ;1 ;) 有什么問題?它是什么意思?【標準答案】死循環(huán)
24、,和while(1)相同。57、dowhile和whiledo有什么區(qū)別?【標準答案】前一個循環(huán)一遍再判斷,后一個判斷以后再循環(huán)。58、請寫出下列代碼的輸出內容#include int main()int a,b,c,d;a=10;b=a+;c=+a;d=10*a+;printf(“b,c ,d:%d,%d,%d”,b,c,d );return 0;【標準答案】10,12,12059、unsigned char *p1;unsigned long *p2;p1=(unsigned char *)0x801000;p2=(unsigned long *)0x810000;請問p1+5= ;p2+
25、5= ;【標準答案】0x801005、0x81002060、main()int a5=1,2,3,4,5;int * ptr=(int*)(&a+1);printf(“%d,%d”,(a+1),(ptr-1);請問輸出:【標準答案】2,561、請問下面程序有什么錯誤?int a602501000,i,j,k;for(k=0;k=1000;k+)for(j=0;j250;j+)for(i=0;i60;i+)aijk=0;【標準答案】把循環(huán)語句內外換一下。62、以下是求一個數的平方的程序,請找出錯誤:#define SQUARE(a)(a)*(a)int a=5;int b;b=SQUARE(a+
26、);【標準答案】宏在預編譯時會以替換的形式展開,僅僅會替換。涉及到宏的地方,不要用+- ,標準中對此沒有規(guī)定,因此最終結果將會依賴于不同的編譯器。執(zhí)行程序的答案可能是25、也有可能是36。63、#define Max_CB 500void LmiQueryCSmd(StructMSgCB * pmsg)unsigned char ucCmdNum;for(ucCmdNum=0;ucCmdNumMax_CB;ucCmdNum+); 這段代碼執(zhí)行有什么問題?【標準答案】死循環(huán)unsigned char /無符號字符型表示范圍0255char / 有符號字符型 表示范圍-12812764、嵌入式系統(tǒng)
27、中經常要用到無限循環(huán),你怎么用C編寫死循環(huán)?!緲藴蚀鸢浮縲hile(1)或者for(;?100 條經典 C語言筆試題目65、程序輸出結果是?【標準答案】8 ,10,12,14,1666、【標準答案】1667、int modifyvalue()return(x+=10);int c hangevalue(int x )return(x+=1);void m ain()int x =10;x+;changevalue(x);x+;modifyvalue();printf(“First output:%dn”,x);x+;changevalue(x);printf(“Second output:%d
28、n”,x);modifyvalue();printf(“Thirdoutput:%dn”,x);輸出?【標準答案】12、13、1368、不能做switch()的參數類型是:【標準答案】switch 的參數不能為實型。69、請寫出下列代碼的輸出內容i ncludemain()int a,b,c,d;a=10;b=a+;c=+a;d=10*a+;printf(“b,c ,d:%d,%d,%d”,b,c,d );return 0;【標準答案】10,12,12070、找出程序的錯誤?!緲藴蚀鸢浮?1、一語句實現(xiàn)x是否為2 的若干次冪的判斷?!緟⒖即鸢浮?void mai n()i nt a;scanf
29、(“%d”,&a);printf(“%c”,(a)&(a-1)?n:y); / 若是打印y,否則n72、中斷是嵌入式系統(tǒng)中重要的組成部分,這導致了很多編譯開發(fā)商提供一種擴展讓標準C 支持中斷。具代表事實是,產生了一個新的關鍵字_interrupt 。下面的代碼就使用了_interrupt 關鍵字去定義了一個中斷服務子程序(ISR),請評論一下這段代碼的。_interrupt double compute_area (double radius)double area = PI * radius * radius;printf( Area = %f, area);return area;【參考答
30、案】這個函數有太多的錯誤了,以至讓人不知從何說起了:1). ISR 不能返回一個值。如果你不懂這個,那么你不會被雇用的。2). ISR 不能傳遞參數。如果你沒有看到這一點,你被雇用的機會等同第一項。3). 在許多的處理器/編譯器中,浮點一般都是不可重入的。有些處理器/編譯器需要讓額處的寄存器入棧,有些處理器/編譯器就是不允許在ISR 中做浮點運算。此外,ISR 應該是短而有效率的,在ISR 中做浮點運算是不明智的。4). 與第三點一脈相承,printf() 經常有重入和性能上的問題。如果你丟掉了第三和第四點,我不會太為難你的。不用說,如果你能得到后兩點,那么你的被雇用前景越來越光明了。73、下
31、面的代碼輸出是什么,為什么?void foo(void)unsigned int a = 6;int b = -20;(a+b 6)? puts( 6) : puts(6” 。原因是當表達式中存在有符號類型和無符號類型時所有的數都自動轉換為無符號類型。因此-20 變成了一個非常大的正整數,所以該表達式計算出的結果大于6 。這一點對于應當頻繁用到無符號數據類型的嵌入式系統(tǒng)來說是豐常重要的。如果你答錯了這個問題,你也就到了得不到這份工作的邊緣。74、評價下面的代碼片斷:unsigned int zero = 0;unsigned int compzero = 0xFFFF;/*1s complem
32、ent of zero */【參考答案】對于一個int型不是16位的處理器為說,上面的代碼是不正確的。應編寫如下:unsigned int compzero = 0;這一問題真正能揭露出應試者是否懂得處理器字長的重要性。在我的經驗里,好的嵌入式程序員非常準確地明白硬件的細節(jié)和它的局限,然而PC機程序往往把硬件作為一個無法避免的煩惱。到了這個階段,應試者或者完全垂頭喪氣了或者信心滿滿志在必得。如果顯然應試者不是很好,那么這個測試就在這里結束了。但如果顯然應試者做得不錯,那么我就扔出下面的追加問題,這些問題是比較難的,我想僅僅非常優(yōu)秀的應試者能做得不錯。提出這些問題,我希望更多看到應試者應付問題的
33、方法,而不是答案。不管如何,你就當是這個娛樂吧75、下面的代碼片段的輸出是什么,為什么?char *ptr;if (ptr = (char *)malloc(0) = NULL)puts(“Gota null pointer”);elseputs(“Gota valid pointer”);【參考答案】這個你可以先大膽猜測下,然后再用你的編譯器嘗試著編譯下100 條經典 C語言筆試題目歡迎進入C語言程序筆試面試,編寫程序代碼單元。76、編寫strcpy 函數已知strcpy 函數的原型是 char *strcpy(char *strDest,const char *strSrc);其中strD
34、est是目的字符串,strSrc 是源字符串。(1)不調用C+/C 的字符串庫函數,請編寫函數strcpy 。(2)strcpy 能把 strSrc 的內容復制到strDest,為什么還要char * 類型的返回值?77、寫出二分查找的代碼?!緟⒖即鸢浮?int b inary_search(int* arr, int k ey, int n)int low = 0;int h igh = n - 1 ;int m id;while (low k)high = mid -1 ;else if (arrmid k)low = mid + 1;elsereturn mid;return -1;78
35、、請編寫一個C 函數,該函數給出一個字節(jié)中被置1 的位的個數?!緟⒖即鸢浮縰nsigned int T estAsOne0(char log)int i;unsigned int num=0, val;for(i=0; i i; / 移位val & = 0x01; / 與1 相與if(val)num+;return num;79、請編寫一個C 函數,該函數將給定的一個字符串轉換成整數?!緟⒖即鸢浮縤nt Invert(char* str)int num =0;while(*str!=0)int d igital=str-48;num=num10+digital;str=str+1;return
36、 num;80、請編寫一個C 函數,該函數將給定的一個整數轉換成字符串?!緟⒖即鸢浮縱oid IntToCharChange(int num, char* pval)char strval100;int i , j;int val0 = 0;int val1 = 0;val0 = num;for(i=0; i100; i+)val1 = val0 % 10; /取余val0 = val0 / 10; / 取整strvali = val1 + 48; / 數字字符if(val0 10)i+;strvali = val0 + 48;break;for(j=0; j 0)ret = 1;else i
37、f (ret 99)return;sourcej = 0;for(i=0; ij; i+)childi = sourcej-i-1; / 反序childi = 0;83、請編寫一個C 函數,該函數在給定的內存區(qū)域搜索給定的字符,并返回該字符所在位置索引值?!緟⒖即鸢浮縤nt s earch(char* cpSource, intn , char ch) / 起始地址,搜索長度,目標字符int i;for(i=0; in & *(cpSource+i) != ch; +i);return i;84、請編寫一個C 函數,該函數在一個字符串中找到可能的最長的子字符串,該字符串是由同一字符組成的?!緟?/p>
38、考答案】int C hildString(char*p) / 自己寫charq =p;int s tringlen=0, i=0,j=1,len=0,maxlen=1;while(q!=0) /不能用strlen, 求得長度stringlenStringlen+;q+;while( i String len )if(p+i)=(p+j)& & jmaxlen) / 統(tǒng)計最大子串長度maxlen=len+1;len=0;elselen=0;i+;j+;retu rn ma xlen;85、華為面試題:怎么判斷鏈表中是否有環(huán)?【參考答案】答:用兩個指針來遍歷這個單向鏈表,第一個指針p1,每次走一步
39、;第二個指針p2,每次走兩步;當p2 指針追上p1的時候,就表明鏈表當中有環(huán)路了。int testLinkRing(Link *head)Link *t1=head,*t2=head;while( t1-next & t2-next)t1 = t1-next;if (NULL = (t2 = t2-next-next)return 0; / 無環(huán)if (t1 = t2)return 1;return 0;86、有一浮點型數組A, 用C 語言寫一函數實現(xiàn)對浮點數組A進行降序排序,并輸出結果,要求要以數組A 作為函數的入口.( 建議用冒泡排序法)【參考答案】void BubbleSort(doub
40、le a rr, int n)int i,j ;int e xchange = 1 ;/ 交換標志for(i=1;i=i ;j) /對當前無序區(qū)Rin自下向上掃描if(arrj+1 arr j)/ 交換記錄arr0=arrj+1;/R0不是哨兵,僅做暫存單元arrj+1=arrj;arrj=arr0;exchange=1 ;/ 發(fā)生了交換,故將交換標志置為真if(!exchange) / 本趟排序未發(fā)生交換,提前終止算法return ; /endfor(外循環(huán))87、實現(xiàn)雙向鏈表刪除一個節(jié)點P,在節(jié)點P 后插入一個節(jié)點,寫出這兩個函數?!緟⒖即鸢浮? 刪除操作Status ListDelete
41、_DuL(DuLinkList &L,inti,Ele mType &e)if(!(p=G e tElemP_DuL(L,i) return ERROR;e=p-data;p-prior-next=p-next;p-next-prior=p-pror;free;return OK;/ 插入操作Status ListInsert_DuL(DuLinkList &L,inti,ElemType &e)if(!(p=G e tElemP_DuL(L,i)return ERROR;if(!(s=(DuLinkList)malloc(sizeof(DuLNode)return ERROR;s-data=
42、e;s-pri or =p;p- next - prior =s;p-next=s;s-next=p-next-next;return OK;88、把一個鏈表反向。【參考答案】從第一個元素開始,ps指向他,將他(ps)指向頭節(jié)點(ps-next = head) ,將ps設為頭節(jié)點(head = ps; )操作下一個元素(ps= pe-next;)等于是依次將每個元素翻到原頭節(jié)點前面。void reverse(test* head)test* pe = head;test* ps = head-next;while(ps)pe-next = ps-next;ps-next = head;head
43、 = ps;ps = pe-next;89、將二維數組行列元素互換,存到另一個數組中?!緟⒖即鸢浮?include main() int a 23=1,2,3,4,5,6;int b32,i,j;printf(“array a :n”);for(i=0;i=1;i+) for(j=0;j=2;j+) printf(%5d,aij);bji=aij;printf(n);printf(“array b :n”);for(i=0;i=2;i+) for(j=0;j=1;j+)printf(%5d,bij);printf(n);90、輸入一行字符,統(tǒng)計其中有多少個單詞。【參考答案】#include m
44、ain()char str i ng81;int i,num=0,word=0;char c;gets(string);for(i=0;(c=stringi)!=0;i+)if(c= )word=0;else if(word=0)word=1; num+; printf(“There are %d word s in the linen”,num);91、寫一個內存拷貝函數,不用任何庫函數.就是前些時候本版討論的那個問題?!緟⒖即鸢浮縱oid* m e mcpy(void* pvTo, const void* pvFrom, size_t size)assert(pvTo != NULL) &
45、 (pvFrom ! = NULL);byte* pbTo= pvTo;byte* pbFrom = pbFrom;while (size- 0)*pbTo+ = *pbFrom+;return pvTo;92、有1、2、3 、4個數字,能組成多少個互不相同且無重復數字的三位數?都是多少?【參考答案】#inc lude “stdio.h”#include “conio.h”main()int i,j,k;printf(n);for(i=1;i5;i+) /* 以下為三重循環(huán)*/for(j=1;j5;j+)for (k=1;k4;c=(04);d=b&c;printf(%on%on,a,d);94、打印出楊輝三角形(要求打印出10行如下圖)。【參考答案】main()int i,j;int a 1010;printf(n);for(i=0;i10;i+)ai0=1;aii=1;for(i=2;i10;i+)for(j=1;ji;j+)aij=ai-1j-1+ai-1j;for(i=0;i10;i+)for(j=0;j=i;j+)printf(%5d,aij);printf(n);getch();95、實現(xiàn)strcmp 函數。100 條經典 C語言筆試題目96、寫一個函數,求一個字符串的長度,在main函數中輸入字符串,并輸出其長度?!緟⒖?/p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026華能(福建漳州)熱電有限責任公司校園招聘筆試備考試題及答案解析
- 2026吉林松原市生態(tài)環(huán)境局所屬事業(yè)單位選拔10人筆試參考題庫及答案解析
- 2026上海聯(lián)勸公益基金會招聘筆試備考題庫及答案解析
- 2026東風汽車集團股份有限公司人事共享服務中心招聘(湖北)筆試備考題庫及答案解析
- 阿壩州消防救援支隊2026年面向社會公開招聘政府專職消防員(69人)筆試參考題庫及答案解析
- 2026內蒙古呼和浩特市自媒體協(xié)會招聘視頻拍攝剪輯、編導運營、活動策劃執(zhí)行等崗位筆試模擬試題及答案解析
- 2026貴州貴陽烏當區(qū)水務管理局公益性崗位招聘1人筆試備考試題及答案解析
- 2026興業(yè)銀行太原分行信用卡中心招聘筆試模擬試題及答案解析
- 2026年西安市經開第二學校教師招聘(4人)筆試備考試題及答案解析
- 2025年中職至大學階段(機電系統(tǒng)類)專業(yè)技能綜合測試試題及答案
- 福建省能源石化集團有限責任公司2025年秋季招聘備考題庫及一套完整答案詳解
- 2025年新聞記者資格證及新聞寫作相關知識題庫附答案
- DB32∕T 5188-2025 經成人中心靜脈通路裝置采血技術規(guī)范
- 深圳市2024-2025學年九年級上學期期末考試化學試卷(含答案)
- 白車身輕量化設計技術
- 華師 八年級 數學 下冊《17.2 平行四邊形的判定 》課件
- 主板維修課件
- 2026中央紀委國家監(jiān)委機關直屬單位招聘24人考試筆試模擬試題及答案解析
- 2026年內蒙古化工職業(yè)學院單招職業(yè)適應性考試必刷測試卷附答案解析
- GB 46750-2025民用無人駕駛航空器系統(tǒng)運行識別規(guī)范
- 湖南省長沙市雅禮教育集團2024-2025學年七年級(下)期末數學試卷
評論
0/150
提交評論