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
沒有留言:
張貼留言