---
# System prepended metadata

title: 2023 OOP - 期中考詳解
tags: [2023 OOP]

---

---
tags: 2023 OOP 
---
# 2023 OOP - 期中考答案 & 評分標準


## Part I.
> Choose the best answer to the following questions. (If you answer a question correctly,you obtain 3 points; if you got the wrong answer, you are deducted (倒扣) 3 points.)
#### 
選擇題的答案不多做說明，有問題可以詢問教授。

#### Ans
:::info
1-5: acbdb
6-8: cba
:::


## Part II.
> Discussion problems (申論題).

### 1. (10%)
Determine whether the following program segment contain errors. If you believe there is an error, explain how it can be corrected and what is the output in the screen. [Note: For a particular program segment, it is possible that no errors are present in the segment.]

```=c
#include <iostream>
using namespace std;
int main()
{
    int a, b, c;
    a = 5000;
    cout << setfill('!') << setw(6) << a;
}
```
#### Ans: 
:::info
(1) There is an error. To fix it, one must add the following before “int main()” ``` #include <iomanip> ``` (5%)
(2) After doing the step above, the output on the screen should be ```!!5000``` (5%)

```=c
#include <iostream>
#include <iomanip> /// ans(1)
using namespace std;
int main()
{
    int a, b, c;
    a = 5000;
    cout << setfill('!') << setw(6) << a; //ans(2) Output: !!5000
    
}
```
:::
### 2. (8%)
Given the class definition:
```=c
class CreateAndDestroy
{
    public:
        CreateAndDestroy() { cout << "constructor called, "; }
        ~CreateAndDestroy() { cout << "destructor called, "; }
};
```
What will the following program output?
```=c
int main()
{
    for ( int i = 0; i <= 2; i++ )
        CreateAndDestroy x;
    return 0;
}
```
#### Ans
:::info
```"constructor called, destructor called, constructor called, destructor called, constructor called, destructor called,."```(No "\n")(8%)
:::
### 3. (8%) 
Determine whether the following program segment contain errors. If you believe there is an error, explain how it can be corrected.
```=c
#include <iostream>
using namespace std;
T opt( T x, T y)
{
    T a = x;
    if ( y < a )
    a = y;
}
int main()
{
    int int1, int2;
    cout << "Input two integer values: ";
    cin >> int1 >> int2;
    cout << "The optimum value is: "
    << opt( int1, int2);
}

```

#### Ans
:::info
(1). Add ```“template < class T >”``` before “T maximum( T x, T y)” (5%)
(2). Under “a = y;” add ```“return a;”``` (5%)
```=c
#include <iostream>
using namespace std;
template < class T > // ans(1)
T opt( T x, T y)
{
    T a = x;
    if ( y < a )
    a = y;
    return a; // ans(2)
}
int main()
{
    int int1, int2;
    cout << "Input two integer values: ";
    cin >> int1 >> int2;
    cout << "The optimum value is: "
    << opt( int1, int2);
}

```
:::
## Part III
> Bonus points: Please write down your suggestions about this course. (5 extra points) 

## Part IV: 
> The programing exam.


### 1. (15%)
:::info
基本上有寫到對應的就有分數
1. namespace: 5%
2. template: 5%
3. pass by reference/value: 5%
:::

### 2. (20%)
:::info
共10個，每個 2%
* 3個constructor 
1. constructor of the class department
2. constructor of the class course
3. constructor of the class student
* 7個function
1. "add_course()"
2. "remove_course()"
3. "search_course()"
4. "list_all_course()"
5. "list_course_all_student()"
6. "add_course_new_student()"
7. "search_course_studentName_byId()"
:::
### 3. (15%)
:::info
由於寫出來的人較少，會根據實作內容比例評分。
1. 撰寫 class node (5%)
2. 撰寫 class huffman_tree (10%)
:::
