發哥(聯發科)上機考題目整理 - HackMD

文章推薦指數: 80 %
投票人數:10人

#error C++ compiler required. #endif 2. Explain “struct” and “union”. Ans: struct = 在C 上        ownedthisnote   Published LinkedwithGitHub Like35 Bookmark Subscribe Edit #發哥(聯發科)上機考題目整理 [Ctest] 1.Explain"#error" `Ans:` 可以用來強制中斷編譯器並且輸出訊息,這是寫給編譯器看的,通常搭配Cflag,CXXflag使用,在編譯時中斷錯誤的流程。

#error預處理程序指令用於指示錯誤。

如果找到#error指令編譯器將發出致命錯誤,並且跳過進一步的編譯過程。

以下是在glibc中可見的範例 #if!defined(__cplusplus) #errorC++compilerrequired. #endif 2.Explain"struct"and"union" `Ans:` struct= 在C上 自訂一種資料型態裡面可以包含多種資料型態,並且會按照程式中定義時擺放的順序在內存中排序,按照宣告的順序擺放。

編譯器會自動為struct的成員分配空間。

在C++上struct被擴展到可以內建method,跟class的意義非常類似,只是繼承與存取權限預設皆為public相反的class預設為private,以及class有template的擴充struct沒有 union一種特殊的所有內容都從內存開頭開始存取的資料型態,並且他的大小由內部最大的那個資料型態來定義。

會用同一個存儲空間,只能存儲最後一個成員訊息。

只給其中一個成員給值而使用其他值就會壞掉 補充: typedef:保留字。

可以為資料型態建立別名。

ex:**typedefunsigneduint**;**typedefint(\*CMP)(int,int)** enum:C語言提供自定型態為enum,是一組由識別字所代表的整數常數。

除非特別指定,不然都是由0開始,接下來遞增1。

ex:**enumweek{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};** 3.Explain"volatile".Canweuse"const"and"volatile"inthesamevariable?Canweuse"volatile"inapointer? `Ans:` volatile加在變數前面。

是在指示編譯器每次對該變數進行存取時都要「立即更新」,不應該對其做任何最佳化。

因為有時候變數會先放在CPUregister中沒被寫到mem裡,若有其他人要透過他反應便會壞掉。

用volatile就可確保變數可以馬上反應 可以跟const合用,假設你要(監看)一個CPUflag時就是不錯的時機。

const限定一個變量不被改變 4.unsignedlongv1=0x00001111; unsignedlongv2=0x00001202; unsignedlongv; v=v1&(~v2); v=v|v2; ask:thevalueofv? `Ans:` 0x00001313 5.inta[5]={1,2,3,4,5}; int*p=(int*)(&a+1); ask:thevalueof*(a+1),(*p-1)? `Ans:` (&a+1)=undefine *(a+1)=2 (*p-1)=0 (這邊答案似乎有誤,(*p-1)應為undefined) 6.writeacode a)setthespecificbit b)clearthespecificbit c)inversethespecificbit(0->1;1->0) `Ans:` ``` #definesetBit(x,n)(x|=(1<typedefvoid(*pf)(char*); ``` 8.writeacodethatchecktheinputisamultipleof3ornotwithoutusingdivisionormod `Ans:` ```C //這個是剛好用3的特性來解 intdivide3(inta){ intans=0; while(a){ ans+=a&1; a>>=1; ans-=a&1; a>>=1; } return!(ans); } ///通用算法(Thiscanuseforanynumber) /* setNumber=abcde(2進位) abcde=abc<<2+de =abc*(4)+de =abc(*3)+(abc+de) 任何數字都可以用類似的方式拆出用&跟<>2)+(n&3); /*Recursivecalltillyougetn oraspecialterminatecondition*/ return(isMult3(n)); } ``` 9.Explainlvalueandrvalue. `Ans:` lvalue指等號的左值 rvalue指等號的右值 lvalue是一個物件的保存在單一運算式之外的物件 rvalue是一個物件在某個時間單位的結果 `++c`是lvalue `c++`是rvalue 10. ```=c inta[5]={1,2,3,4,5}; int*p=a; *(p++)+=123; *(++p)+=123; ``` 請問a陣列的每個值為何? `Ans:` 萬年面試題目 124212645 11. ```=c externvoidfunc1(void); externvoidfunc2(void); externvoidfunc3(void); externvoidfunc4(void); externvoidfunc5(void); voidmain(intn) { ifn==1executefunc1; ifn==2executefunc2; ifn==3executefunc3; ifn==4executefunc4; ifn==5executefunc5; } ``` 保證n一定是上面五個數字之一 不能用if和switchcase,請用你認為最快的方法實作main `Ans:` ```=c void(*fp[5])(); fp[0]=func1; fp[1]=func2; fp[2]=func3; fp[3]=func4; fp[4]=func5; fp[n-1](); ``` 12. ```=c externvoidfunc1(void); externvoidfunc2(void); externvoidfunc3(void); externvoidfunc4(void); externvoidfunc5(void); voidmain(intn) { ifn==33executefunc1; ifn==67executefunc2; ifn==324executefunc3; ifn==231executefunc4; ifn==687executefunc5; } ``` 保證n一定是上面五個數字之一 使用if,請用你認為最快的方法實作main `Ans:` 先把邏輯改成 ```c voidmain(intn) { //ifn==33executefunc1; //ifn==67executefunc2; //ifn==231executefunc4; //ifn==324executefunc3; //ifn==687executefunc5; if(n<231) if(n!=67) func1(); else func2(); elseif(n>231) if(n!=324) func3(); else func5(); else func4(); } ``` 都在兩次判斷內解決,這是我能想到最快的方法了。

13.寫一個function可傳入正整數參數N,回傳1+2+3+…+N的和 `Ans:` ```=C inlineintnSum(intN){ return(n+n*n)/2 ``` 14.reverseastring `Ans:` ```=C inlinevoidswap(char*a,char*b){ *a=*a^*b; *b=*a^*b; *a=*a^*b; } voidreversOne(char*s){ if(*(s+1)=='\0') return; reversOne(s+1); swap(s,s+1); } voidreversAll(char*s){ if((s=='\0')) return; while(s+1!='\0'){ reversOne(s); s++; } } ``` 15.寫一個“標準”巨集MIN,這個巨集輸入兩個參數並返回較小的一個。

`Ans:` ``` #definemin(a,b)((a)[n],[1]->[n-1],…[n]->[0]. `Ans:` a>b>c>d ```=c voidrevers(Node*head,Node**newhead){ if(head->next==NULL){ *newhead=head; return; } revers(head->next,newhead); head->next->next=head; head->next=NULL; return; } ``` ```c= /** *Definitionforsingly-linkedlist. *structListNode{ *intval; *structListNode*next; *}; */ structListNode*reverseList(structListNode*head){ structListNode*cur=head,*pre=NULL,*next=NULL; while(cur){ next=cur->next; cur->next=pre; pre=cur; cur=next; } returnpre; } ``` 20.Findthepossibleerror ```=c Intival; Int**p; Ival=*p; ``` `Ans:` referenceapointertoaint 21.WhatisthepossibleerrorofbelowSQRfunction. ```=c intSQR(volatileint*a){ return(*a)*(*a); } ``` `Ans:` aisvolatilesoa*amaynotbea^2 therightversion ```=c intSQR(volatileint*a){ intb=*a returnb*b; } ``` 22.用預處理指令#define聲明一個常數,用以表明1年中有多少秒(忽略閏年問題) `Ans:` #defineSECONDS_PER_YEAR(60*60*24*365)UL 23. 1.一個整型數(Aninteger) 2.一個指向整型數的指標(Apointertoaninteger) 3.一個指向指標的的指標,它指向的指標是指向一個整型數(Apointertoapointertoaninteger) 4.一個有10個整型數的陣列(Anarrayof10integers) 5.一個有10個指標的陣列,該指標是指向一個整型數的(Anarrayof10pointerstointegers) 6.一個指向有10個整型數陣列的指標(Apointertoanarrayof10integers) 7.一個指向函數的指標,該函數有一個整型參數並返回一個整型數(Apointertoafunctionthattakesanintegerasanargumentandreturnsaninteger) 8.一個有10個指標的陣列,該指標指向一個函數,該函數有一個整型參數並返回一個整型數(Anarrayoftenpointerstofunctionsthattakeanintegerargumentandreturnaninteger) `Ans:` 1.intp 2.int*p 3.int**p 4.intp[10] 5.int*p[10] 6.int(*p)[10] 7.int(*p)(int) 8.int(*p[10])(int) 24.使用bitwiseoperation ``` voidswap(int*a,int*b) { *a=*a^*b; *b=*a^*b; *a=*a^*b; } ``` 35 × Signin Email Password Forgotpassword or Byclickingbelow,youagreetoourtermsofservice. SigninviaFacebook SigninviaTwitter SigninviaGitHub SigninviaDropbox SigninviaGoogle NewtoHackMD?Signup



請為這篇文章評分?