2016年2月28日 星期日

考古題

1. C/C++ 類:
   1.1 const int* p 和 int* const q 兩者之差別?

       一、 const int* p  指標內容不可更動。
           //*p=10;/*錯誤*/
      二、 int * const p 指標不可更動。//p++;/*錯誤*/
                                               
   1.2 32-bit machine用C語言對位址 0x00005000 的第三個bit設成0,第五個bit設成1。
       unsigned int a=0x00005000
       a &= 0xFFFFFFFB(1111 1111 1111 1111 .... .... .... .... 1011)
       b |=   0x000000010(0000 0000 0000 0000 .... .... .... ...1 0000)
                                               
   1.3 指標與陣列的差別?
      就記憶體方向來看,"指標"所用的記憶體位置不為連續,而"矩陣"所配置的空間為連續。
   1.4 試寫出一個Macro求出兩數之最大值。
      #define MAX(a,b)   ((a)>= (b) (a):(b))
   1.5 #define SUM(a,b)  a+b
                若是 SUM(2,5)*10 的答案是什麼?                        
如何定義巨集?
語法 1:#define 巨集名稱 [替代內容]
語法 2:#define 巨集名稱(引數列) 運算式
功能:巨集名稱可用來定義常用的常數、字串、簡單的數學公式                   或函式。
(1)習慣大寫命名
(2)不用分號結尾
(3)當運算overflow時記得加上UL
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
(4)定義運算函式時要小心()的使用

ex1.
#define SQR(x)      ((x)*(x))..... (a)
#define SQR(x)      (x*x).............(b)
(a)與(b)式分別帶入3+2所表示的結果會不相同

(a)會是(3+2)*(3+2) =25
(b)會是3+2*3+2 =11

ex2.
#define SUM(a,b)  a+b
int main(void) {
int c;
c= SUM(2,5)*10; //c=a+b*10;
printf("%d" , c );
return 0;
}
求c為多少? c=52 ,
                                                     
   1.6 給予10個任意整數,輸出其最小值、最大值、平均值。
      float a[10];
      float max=min=avg=sum=0;
      for(int i=0;i<10;i++)
      { cin >> a[i];  }
      for(int j=0;j<10;j++)
      { if(a[j]>max) max=a[j];
        if(a[j]<min) min=a[j];
        sum=sum+a[j];
       }
         avg=sum/10;
                                   
   1.7 __interrupt double isr(double r)
      {
         double area = PI*r*r ;
         printf("%f\n",area) ;
         return area ;
      }
      說明並解釋上述之interrupt service routine 之錯誤處?

   1.8  寫出一個字串拷貝程式: void StrCpy(char* dst , char* src) ;
void strcpy(char *s, char *t) // array version
{
 int i;
 i = 0;
 while((s[i] = t[i]) != '\0')
i++;
}

void strcpy(char *s, char *t) // pointer version
{
 while((*s = *t) != '\0') {
s++;
t++;
 }
}
   1.9  寫出整數轉換字串程式
#include "stdafx.h"
#include<iostream>
#include<sstream>
using namespace std;

template<class T>
void to_string(string & result, const T& t)
{
ostringstream oss;//創建一個流
oss << t;//把值傳遞如流中
result = oss.str();//獲取轉換後的字符轉並將其寫入result
}
int main()
{
string s1, s2, s3;
to_string(s1, 10.5);//double到string
to_string(s2, 123);//int到string
to_string(s3, true);//bool到string
cout << s1 << endl << s2 << endl <<s3;
system("pause");
return 0;
}

   1.10 寫出一個程式若輸入為 12345678 , 則返回值為 56781234
       DWORD  fun(DWORD num)

   1.11  int  fun(int x)
        {
          int count = 0 ;

           while(x){
             count++ ;
             x = x & (x-1) ;
          }
          return count ;
        }
       若x=456;則return值為多少?

   1.12  void func(void){
          static int i = 0 ;
          i++ ;
          printf("%d" , i ) ;
        }
        連續呼叫 func 10 次,印出的值為何?

   1.13  何謂this指標?何謂template?何謂virtual function?

   1.14  寫出一個程式輸入幾點幾分,return 值為時針與分針的角度
        (需注意若為9:00則其角度為90度,非270度)


 2. OS類:
    2.1 何謂reentrant程式,設計reentrant需注意什麼?

    2.2 解釋stack與heap

    2.3 何謂deadlock?

    2.4 說明 mutex 與 semaphore

    2.5 設計OS的重點在哪些?

    2.6 如何 Linux 與 windows 互相傳送檔案?

    2.7 何謂DLL?

    2.8 uClinux 與 Linux 最大差異在哪?

    2.9 何謂即時多工系統?

 3. 計組、硬體類:
   3.1 何謂DMA,有何好處?

    3.2 何謂Little endian / Big endian

    3.3 何謂 JTAG? 何謂ICE?

    3.4 解釋 write back 與 write through

    3.5 列舉幾個serial port, parallel port

    3.6 說明 Watchdog 之運作機制

 4. 網路類:
    4.1 分別說明switch、hub、router、gateway

    4.2 何謂IP fragment?

    4.3 說明DHCP server功能

    4.4 說明IP、subnet mask

    4.5 說明 3-way handshaking

沒有留言:

張貼留言