言是有關係的
(我自己是工作了 2 年多, 所以說明工作中做到的事情, 我是做 firmware 相關的, 會碰到蠻多底層的東西, 還有 FPGA 可以講講)
3. 有筆試(是跟 C 語言相關的)
面試建議
p.s., 都要用 C 語言作答
1. 寫一段程式片段將原本的 string 裡面的五個字串裡的 'x' 轉換成 '0' ~ '4' 的字元
char string[5][10] = {"str-x", "str-x", "str-x", "str-x", "str-x"};
改成
{"str-0", "str-1", "str-2", "str-3", "str-4"}
2. 寫出 ReplaceVal() 這個 function 把輸入的 <Value> bit 8~15 改成 <Rebits>
/* For example
int Value=0x12"34"56;
int New;
New = ReplaceVal(Value, 0x"aa"); // New = 0x12"aa"56
*/
3. 以下程式碼有什麼問題?
main()
{
int j;
for (j = 1; j++; j <= 100)
{
int Result;
Result += j;
}
printf("1+...+100 = %d\n", Result);
}
Ans:
#include <stdio.h>
int main()
{
int j;
int Result = 0;
for (j = 1; j <= 100; j++)
{
Result += j;
}
printf("1+...+100 = %d\n", Result);
return 0;
}
解釋:
1. main() 沒有宣告回傳型別
2. Result 的作用域 (scope) 錯誤, 在 for 迴圈裡宣告, 卻在外部引用, 所以出現 error: ‘Result’ undeclared
3. Result 沒有初始化
4. for 語法寫反了, 正確格式:for (初始化; 條件; 更新)
4. 請用 while 寫出 dead loop(無窮迴圈)
5. 指出以下程式片段的兩個錯誤
typedef struct {
char * string;
int value;
} Mystruc;
Mystruc *test()
{
Mystruc *ptr;
char *Hello = "Hello";
ptr->value = 100;
strucpy(ptr->string, Hello);
return ptr;
}
void main()
{
Mystruc *ptr;
ptr = test();
printf("value=%x\n", ptr->value);
}
error1: 要加上 #include <string.h>
error2: ptr 沒有指向有效記憶體
宣告了 Mystruc *ptr; 但從來沒有 ptr = malloc(sizeof(Mystruc));
6. (a)(b) 兩種寫法都是一樣的結果, 哪種比較好?為什麼? x, y 最後為多少?
int x;
int y;
(a)
x=y=0; y=(x++)*5, printf("x=%x, y=%x\n", x, y);
(b)
y=0;
x=0;
y=(x++)*5;
printf("x=%x, y=%x\n", x, y) // output to console
x = ___ (1)
y = ___ (0)
比較好的原因:每個動作分開寫,比較清楚
7. 請寫出底下用到的 functions: GetData(), PrintData(), ChangeString() 的宣告.
main()
{
int data=0;
char *string="I am a string";
Getdata(&data);
PrintData(data);
ChangeString(&string);
}
請填空:
void GetData (________); Answer: -> int *data
void PrintData (________); Answer: -> int data
void ChangeString (________); Answer: -> char **string
8. 以一個 loop 填入二維陣列成為以下結果 (請用單一 loop)
int a[6][6];
a[0][0]=0 a[0][1]=1 a[0][2]=2 a[0][3]=3 a[0][4]=4 a[0][5]=5
a[1][0]=2 a[2][0]=4 a[3][0]=6 a[4][0]=8 a[5][0]=10