---
# System prepended metadata

title: 居易韌體工程師 2024/12
tags: [面試]

---

## 面試時間:2024/12
### 1.   Check the following staments (a)-(g)
(a)
```
#include<stdio.h>
main
{
    int c;
    c=5;
    printf("%d\n", c);
}
```
* Ans:
```
int main() {
    ...
}
```

(b)
```
if(a>b) then c=0;
```
* Ans:
```
C 語言中沒有 then 關鍵字，應該刪除。
```

(c)
```
if a>b {c=0;}
```
* Ans:
```
if 條件判斷後需要括號，應為 if (a > b)。
```

(d)
```
if(a>b) c=0;
```
* Ans:
```
單行 if 條件語法正確。
```

(e)
```
c=0
b=0;
```
* Ans:
```
漏掉 ; 分號。
```

(f)
```
if(a>b) c=0 else b=0;
```
* Ans:
```
if(a > b) c = 0; else b = 0;
```

(g)
```
int square(int x);
{
    return x*x;
}
```
* Ans:
```
int square(int x) {
    return x * x;
}
```


### 2. What is in a[8] after the following code is executed?
```
for(i=0; i<10; i++) a[i]=9-i;
for(i=0; i<10; i++) a[i]=a[a[i]];
```
* Ans:
```
a[8] = 1
```

### 3. What does the following program print out?
```
#include<stdio.h>
#include<stdlib.h>
typedef struct ex* ptr;
struct ex {ptr ff; int k;};

main()
{
    ptr x, y ,t;
    x = malloc(sizeof *x);
    y = malloc(sizeof *y);
    x->ff=y;
    y->ff=x;
    x->k=1;
    y->k=1;
    
    for(t=x;t->k<100;t=t->ff)
        t->k=x->k+y->k;
    printf("%d\n",t->k);
}
```
* Ans:
```
128
```

### 4. What is the output of the following program segment?Note:Assume the following program are running on a 32-bit big-endian CPU

(a)
```
unsigned char c='-';
switch(c){
case '-':
    printf("%c\n", c);
    break;
case '+':
    printf("%c\n", c);
    break;
case '*':
    printf("%c\n", c);
    break;
case '/':
    printf("%c\n", c);
    break;
default:
    printf("default\n");
    break;
}
```
* Ans:
```
-
```

(b)
```
#define test(a,b) ((a>b)?1:0)
int i = 0;
int j = 1;
printf("%d\n", test(i,j));
```
* Ans:
```
0
```

(c)
```
int i = 0;
int *p = &i;
*p = 1;
printf("%d\n", i);
```
* Ans:
```
1
```

### 5. 
(a) Explain what does "BIG ENDIAN" and "LITTLE ENDIAN" mean on different CPU types?
(b) Assume the following program running on a 32-bit CPU, please descibe the results on the standard output for big-endian and little-endian CPU.
``` 
#include<stdio.h>
void main (void)
{
    unsigned long x;
    unsigned char *p;
    int i ;
    
    x=0x11223344UL;
    p=(unsigned char *) &x;
    for(i = 0; i<sizeof(unsigned long), i++){
        printf("%x ", *p++);
    }
    printf("\n");
}
``` 
For big-endian CPU output?
For little-endian CPU output?
* Ans:
big-endian
```
11 22 33 44
```

little-endian
```
44 33 22 11
```
