# 聯發科 線上C測驗 2023版
## C - 選擇題
### 1
```
int funA(int &a,int b) //認知中C不能這樣用但選項中沒有compile error
{
a = (a%7==0) ? (a/7):(a%7);
b = (b%17==0) ? (b/17):(b%17);
return a+b;
}
int main(int argc, char *argv[])
{
int a=41;
int b=61;
int c=funcA(a,b);
printf("%d %d",a,c);
return 0;
}
```
ANS: 6,16
### 2
```
#include <stdio.h>
int func()
{
static int i=5;
if(--i)
{
func();
printf("%d ",i);
}
}
int main(int argc, char *argv[])
{
func();
return 0;
}
```
ANS: 0 0 0 0
### 3
```
void main()
{
char str[20] = "ABCDEF";
printf("%d %d",sizeof(str),strlen(str));
}
```
ANS: 20 6
### 4
```
#include <stdio.h>
int main()
{
int a[10][20][30]={0};
a[5][2][1] = 2;
return 0;
// which following will print the value 2?
A. printf("%d",*(((a+5)+2)+1));
B. printf("%d",***((a+5)+2)+1);
C. printf("%d",*(*(*(a+5)+2)+1));
D. None of these;
}
```
ANS: C
### 5
```
#define N 5
#define Y(n) ((N+1)*n)
int main()
{
int z = 2*(N+Y(3+2));
z = ?
}
```
ANS: 50
### 6
```
void main()
{
int i,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf("%d,%d,%d,%d",i,j,m,n);
}
```
ANS: 9,11,9,10
### 7
```
#define num 100
int change()
{
#undef num
#define num 10
return num;
}
int main()
{
int a=0;
printf("num = %d, ",num);
a = change();
printf("Sum = %d",num+a);
getch();
return 0;
}
```
ANS: num = 10, Sum = 20
### 8
```
#include <stdio.h>
void f(char**);
#define num 100
int main()
{
char *argv[] ={"ab","cd","ef","gh","ij","kl"};
f(argv);
return 0;
}
void f(char **p)
{
char *t;
t = (p+= sizeof(int))[-1];
printf("%s",t);
}
```
ANS: gh
## C - 填充題
### 1 請問sum為多少
```
#include <stdio.h>
int fun(int a,int *b)
{
static int c=0;
a += *b;
*b += a;
c += a + *b;
return c;
}
int main() {
int x,y,z,sum;
x = 5;
y = 7;
x = fun(x,&y);
z = fun(x,&y);
sum = x + y + z;
printf("%d",sum);
return 0;
}
```
ANS:250
### 2 請問output
```
#include <stdio.h>
#define THRD 0x8
int main() {
int ch = 26;
if(ch & 0xF > THRD)
{
printf("MORE %d",ch & 0xF);
}
else
{
printf("LESS %d",ch & 0xF);
}
return 0;
}
```
ANS:LESS 10
### 3 請問output
```
#include <stdio.h>
#define INC(x) x*=2,x+=1
int main() {
int i,j;
for(i=0;i<5;++i)
INC(j);
printf("%d",j);
return 0;
}
```
ANS:31
### 4 請問result,count
```
#include <stdio.h>
int count = 0;
int calc(int x)
{
count++;
return x>0 ? calc(x-1)+calc(x-2)+1 : 1;
}
int main() {
int result = calc(5);
printf("%d %d",result,count);
return 0;
}
```
ANS:25 25
### 5 請問output
```
#include <stdio.h>
#include <string.h>
char src[] = "Hello World";
char dst[20];
int main() {
strncpy(dst, src, sizeof(dst));
printf(":%zu:", strlen(dst));
memcpy(dst, src, 5);
printf(":%zu:", strlen(dst));
strncpy(dst, src, 5);
printf(":%zu:", strlen(dst));
return 0;
}
```
* ANS: ":11::11::11:"
### 6 請問output
```
#include <stdio.h>
void func(void)
{
static int i=0;
i++;
printf("%d",i);
}
int main() {
for(int a=0; a<8; a++)
{
func();
}
return 0;
}
```
ANS: 12345678
### 7 請填1跟2
![](https://i.imgur.com/AXsk31F.png)
### 8 請問輸出
```
#include <iostream>
union MyUnion
{
int a[2];
char b[8];
};
int main() {
MyUnion temp;
temp.a[0] = 3406;
std::cout << temp.b[0];
return 0;
}
```
ANS: N
## C++ - 選擇題
## C++ - 填充題
## 程式設計題
1. 回文判斷
陷阱:題目說輸出是"YES"跟"No",要改成"YES"跟"NO"才會pass。(考的是FW的通靈嗎)
2. SWAP(bit operation方式)
陷阱:兩個輸出的值中間要用"\n"換行