# C++程式設計
僑光科技大學 資訊科技系
111學年度第1學期
開課班級:日資科111孝
上課時間:星期四第2-4節
課程學分:必修3學分
授課老師:高吉隆
###### tags: `課程大綱`
----
## 課程介紹
* 課程大綱
* 教學目標
* 每週目標
* 成績計算
----
### 課程大綱
* 變數、常數與資料型態
* 運算式與運算子、流程控制
* 陣列、字串、指標與位址
* 函數入門與進階應用
* 自訂資料型態
* 物件導向程式設計
* 類別、繼承與多形
* 檔案入門與基本處理
----
### 教學目標
* 透過C++程式語言認識程式撰寫的技巧
* 透過程式範例的閱讀與實作增進程式能力
----
|週| 章|前 9 週上課目標 |演練|作業|考試|
|:-:|-|--------------- |:-:|-|-|
| 1 |1| 程式設計與 C++ |V
| 2 |2| 變數與資料型態 |V
| 3 |3| 運算式與運算子 |V
| 4 |4| 流程控制結構 |V
| 5 |5| 陣列與字串 |V||
| 6 |6| 指標與位址 ||1-3章
| 7 |7| 函數入門 |V||1-3章
| 8 |8| 函數的進階應用 |V|4-6章
| 9 || 期中考週 |||4-6章
----
|週| 章|後 9 週上課目標 |演練|作業|考試|
|:-:|-|--------------- |:-:|-|-|
| 10 |9| 前置指令與巨集 |V
| 11 |10| 自訂資料型態 |V|7-9章
| 12 |11| 物件導向程式 |V||7-9章
| 13 |12| 類別進階應用 |V
| 14 |13| 運算子多載 |V|10-12
| 15 |14| 繼承與多形 |V||10-12
| 16 |15| 檔案與基本處理 |V
| 17 |16| 例外處理與樣版 |V|13-15
| 18 || 期末考週 |||13-15
----
## 評分標準
* 平時成績:25%
* 點名紀錄:10%(1-18週)
* 上課演練:15%(1-16章)
* 期中成績:30%
* 作業1-2:10%(5%/次)
* 考試1-2:20%(10%/次)
* 期末成績:45%
* 作業3-5:15%(5%/次)
* 考試3-5:30%(10%/次)
----
### 教科書
* 名稱:C++程式設計與運算思維實務-輕鬆掌握物件導向設計技巧的16堂課(第二版)
* 出版社:博碩文化
* 作者:吳燦銘、ZCT策劃
![](https://i.imgur.com/3K09BHQ.png)
----
### 上課方式
* 上課講解:投影片教學
* 因書籍著作權因素,不提供投影片
* 課堂點名:配合學校政策(10%)
* 依照學校系統課程缺曠紀錄計算
* 課中演練:隨堂範例說明(15%)
* 下課前繳交線上平台隨堂範例練習
* 課後作業:上機程式測驗、課後評量(25%)
* 於指定日期前繳交至僑光教學平台
* 隨堂考試:上機程式測驗、課後評量(50%)
* 於指定日期上課時間考試
----
### 上課講解
* 投影片上課,但不提供投影片
* 教學、作業及考試的題目都出自書籍
* 為提高教學效果,建議同學都能買書
* 同學可共用1本書,或使用二手書
* 教科書統一訂購:原價550元
* 團購價:75折為413元
* 減輕同學壓力:導師補助113元
* 每本新書:300元,約55折
* 只要保存良好、可做記號但不亂塗鴨
* 可留自用,導師可以200元回購
* 導師可提供給學弟妹200元購買舊書
----
### 上課點名
* 依學校點名系統計分方式計算,佔總分10%
* 若該門課無任何請假、缺曠,可拿100分
* 計分方式:3節x18週=54堂
* 原則上3節課只點1節,通常是第2或3節
* 點名缺曠每1節扣1.5點,請假扣1點
* 若無法到課,請務必請假,一律通過
* 累積達2/9即扣12點,即達<預警>
* 若扣12點,約可拿78分
* 累積達1/3即扣18點,即達<扣考>
* 若扣18點,約可拿67分
* 若扣超過18點,不再點名,分數為50
----
### 課中演練
* 請至以下網址註冊或登入:[Code Judger](https://www.codejudger.com/)
* 請使用OCU帳號:
* 帳號:s111XXXXX@ocu.edu.tw
* 密碼:初始值為19911223
* 進入後請修改密碼
----
### 課後作業
* 每3章作業,每1位同學都寫10題
* 上機程式測驗:按題號寫1題
* 程式碼(30%):請於每行程式加上註解
* 出版社附程式範例:[下載](https://download.drmaster.com.tw/download/example/MM32203_examples.zip)
* 執行結果截圖(20%):請紀錄執行過程
* 流程圖(20%):請繪製完整流程圖
* 第2題:課後評量,按題號寫1題
* 課本中的答案(30%):幾乎都找得到
* 第1-3、4-6、7-9、10-12、13-15章各交1次
* 每次作業佔5%:請以Word編輯,並轉成PDF檔
* 題目公告、作業繳交:請至[僑光教學平台](http://wis.ocu.edu.tw/mooc/index.php)
----
### 階段考試
* 第1-3、4-6、7-9、10-12、13-15章各考1次
* 題目來源:上機程式測驗和課後評量
* 題目類型:滿分120分
* 4選1單選題:約80分
* 如40題,每題2分
* 程式填空題:約40分
* 如4題,每題10分
* 依班上平均分數每人加相同分數至平均75左右
* 超過100分,以100分計算,超過部分累積他次
---
## Visual Studio Code 安裝
* 安裝VSC編輯器:[下載](https://az764295.vo.msecnd.net/stable/64bbfbf67ada9953918d72e1df2f4d8e537d340e/VSCodeUserSetup-x64-1.72.0.exe)後,並安裝
* 安裝C++編譯器 MinGW64:[下載](https://github.com/jmeubank/tdm-gcc/releases/download/v10.3.0-tdm64-2/tdm64-gcc-10.3.0-2.exe)後,並安裝
* 選擇Create,並選擇MinGW-w64
* 路徑選擇至:C:\TDM-GCC-64
* 重新啟動VSC,建立新目錄:C:\C++
* 新增檔案,輸入程式,儲存為A.cpp:[下載](https://vr.ocu.tw/c++/CH6.zip)
* 按【F5】執行,選擇C++(GDB/LLDB),
* 選擇C:\TDM-GCC-64\bin\g++.exe
```c=
#include<iostream>
int main() {
std::cout << "Hello World!";
return 0;
}
```
----
## 教學示範
* 網址:[http://gg.gg/12leyf](https://hackmd.io/_5vr5boOTxeFmn6ikN_bjg)
----
### 課中演練 CH01_01.cpp
* 請輸出以下三行字串!
我在僑光科技大學
資訊科技系的
第一個C++語言程式
```c=
#include <iostream>
using namespace std;
int main() {
cout << "我在僑光科技大學" << endl;
cout << "資訊科技系的" << endl;
cout << "第一個C++語言程式";
return 0;
}
```
---
### 課中演練 CH02_01.cpp
* 請於程式中宣告2個整數變數:
1. 變數名稱為a,無初始值。
2. 變數名稱為b,初始值設為12。
* 並將以上2變數顯示如下:
* 變數a=0
* 變數b=12
```c=
#include <iostream>
using namespace std;
int main() {
int a;
int b = 12;
cout << "變數a=" << a << endl;
cout << "變數b=" << b;
return 0;
}
```
----
### 課中演練 CH02_02.cpp
請於程式中宣告2個變數,並顯示所佔位元組:
| 類型 | 變數名稱 | 初始值 |
|-|-|-|
| 短整數 | number1 | 0200(八進位) |
| 整數 | number2 | 0x33f(十六進位) |
並將以上2變數顯示如下:
短整數=128所佔位元組:2
整數=831所佔位元組:4
----
```c=
#include<iostream>
using namespace std;
int main() {
short int number1=0200;//宣告短整數變數,並以八進位數設定其值
int number2=0x33f;//宣告整數變數,並以十六進位數設定其值
cout<<"短整數="<<number1<<"所佔位元組:"<<sizeof(number1)<<endl;
cout<<"整數="<<number2<<"所佔位元組:"<<sizeof(number2)<<endl;
return 0;
}
```
----
### 課中演練 CH02_03.cpp
請於程式中宣告2個變數,並顯示所佔位元組:
1. 類型為單精確度浮點數,變數名稱為Num1,初始值設為1.742f
2. 類型為倍精確度浮點數,變數名稱為Num2,初始值設為4.159
並將以上2變數顯示如下:
單精確度浮點數=1.742所佔位元組:4
倍精確度浮點數=4.159所佔位元組:8
----
```c=
#include <iostream>
using namespace std;
int main() {
float Num1 = 1.742f; // 宣告float變數
double Num2 = 4.159; // 宣告double變數
cout<<"單精確度浮點數="<<Num1<<"所佔位元組="<<sizeof(Num1)<<endl;
cout<<"雙精確度浮點數="<<Num2<<"所佔位元組="<<sizeof(Num2)<<endl;
return 0;
}
```
----
### 課中演練 CH02_04.cpp
請於程式中宣告2個變數,並顯示所佔位元組:
1. 類型為字元,變數名稱為Char1,初始值設為0xA
2. 類型為字元,變數名稱為Char2,初始值設為'\\'
並將以上2變數顯示如下:
字元=
所佔位元組:1
字元=\\所佔位元組:1
----
```c=
#include <iostream>
using namespace std;
int main() {
char Char1=0xA;//換行的十六進位ASCII碼
char Char2='\\';//反斜線的跳脫字元
cout<<"字元="<<Char1<<"所佔位元組:"<<sizeof(Char1)<<endl;
cout<<"字元="<<Char2<<"所佔位元組:"<<sizeof(Char2)<<endl;
return 0;
}
```
----
### 課中演練 CH02_05.cpp
請於程式中宣告2個變數,並顯示所佔位元組:
1. 類型為布林,變數名稱為Bool1,初始值設為10
2. 類型為布林,變數名稱為Bool2,初始值設為5 > 8
並將以上2變數顯示如下:
布林=1所佔位元組:1
布林=0所佔位元組:1
----
```c=
#include <iostream>
using namespace std;
int main() {
bool Bool1= 10;
bool Bool2= 5 > 8;
cout<<"布林="<<Bool1<<"所佔位元組:"<<sizeof(Bool1)<<endl;
cout<<"布林="<<Bool2<<"所佔位元組:"<<sizeof(Bool2)<<endl;
return 0;
}
```
---
### 課中演練 CH03_01.cpp
請於程式中宣告2個整數變數,並分別用算術運算子顯示各種運算結果:
1. 變數名稱為A,初始值設為21
2. 變數名稱為B,初始值設為6
並將以下2個運算結果顯示如下:
A=21, B=6
A/B=3
A%B=3
----
```c=
#include<iostream>
using namespace std;
int main() {
int A = 21, B = 6;
cout << "A=" << A << ", B=" << B << endl;
cout << "A/B=" << A/B << endl;
cout << "A%B=" << A%B << endl;
return 0;
}
```
---
### 課中演練 CH03_02.cpp
請於程式中宣告2個整數變數,並分別用關係運算子顯示各種運算結果:
1.變數名稱為A,初始值設為11
2.變數名稱為B,初始值設為15
並將以下2個運算結果顯示如下:
A=11, B=15
A!=B=1
A>=B=0
----
```c=
#include<iostream>
using namespace std;
int main() {
int A = 11, B = 15;
cout << "A=" << A << ", B=" << B << endl;
cout << "A!=B=" << (A!=B) << endl;
cout << "A>=B=" << (A>=B);
return 0;
}
```
----
### 課中演練 CH03_03.cpp
請於程式中宣告2個整數變數,並分別用位元運算子顯示各種運算結果:
1.變數名稱為A,初始值設為13
2.變數名稱為B,初始值設為57
並將以下2個運算結果顯示如下:
A=13, B=57
A&B=9
A|B=61
----
```c=
#include<iostream>
using namespace std;
int main() {
int A=13, B=57;
cout << "A=" << A << ", B=" << B << endl;
cout << "A&B=" << (A&B) << endl;
cout << "A|B=" << (A|B);
return 0;
}
```
----
### 課中演練 CH03_04.cpp
請於程式中宣告2個整數變數,並分別用遞增或遞減運算子顯示各種運算結果:
1.變數名稱為A,初始值設為5
2.變數名稱為B,無初始值
經過以下2個運算後,顯示A, B變數值:
```c=
B=A++
B=++A
```
將A, B值顯示如下:
A=5, B=0
B=A++, A=6, B=5
B=++A, A=7, B=7
----
```c=
#include<iostream>
using namespace std;
int main() {
int A=5, B;
cout << "A=" << A << ", B=" << B << endl;
B=A++;
cout << "B=A++, A=" << A << ", B=" << B << endl;
B=++A;
cout << "B=++A, A=" << A << ", B=" << B << endl;
return 0;
}
```
----
### 課中演練 CH03_06.cpp
請於程式中宣告4個整數變數,計算出成績的總分及平均,並使用強制資料型態轉換,顯示運算結果,含小數位數:
1.變數名稱為sorce1,初始值設為78
2.變數名稱為sorce2,初始值設為69
3.變數名稱為sorce3,初始值設為92
4.變數名稱為sum,初始值設為0
計算總分及平均後,顯示數值,並包括小數:
sum=239
average=79.6667
----
```c=
#include<iostream>
using namespace std;
int main() {
int score1 = 78, score2 = 69, score3 = 92;
int sum =0;
sum = score1 + score2 + score3;
cout << "sum=" << sum << endl;
cout << "average=" << (float) sum/3;
return 0;
}
```
---
### 課中演練 CH04_01.cpp
```c=
#include <iostream>
using namespace std;
int main() {
int score = 0;
cout << "請輸入國文成績:" << endl;
cin >> score;
if(score >= 60)
cout << "本科成績及格。" << endl;
else
cout << "本科成績不及格。" << endl;
return 0;
}
```
----
### 課中演練 CH04_02.cpp
```c=
#include <iostream>
using namespace std;
int main() {
int Score;
cout << "輸入學生的分數:" << endl;
cin >> Score;
if (Score > 100)
cout << "超過 100 分" << endl;
else if (Score < 0)
cout << "不會有負的分數吧" << endl;
else if (Score >= 60)
cout << "不錯喔,得到 " << Score << " 分";
else
cout << "不太理想喔,只得了 " << Score << " 分";
return 0;
}
```
----
### 課中演練 CH04_04.cpp
```c=
#include <iostream>
using namespace std;
int main() {
char select;
cout << "(A)義大利" << endl;
cout << "(B)巴黎" << endl;
cout << "(C)日本" << endl;
cout << "請輸入你要旅遊的地點:" << endl;
cin >> select;
switch(select) {
case 'a':
case 'A':
cout<<"義大利5日遊$35000" << endl;
break;
case 'b':
case 'B':
cout<<"巴黎7日遊$40000" << endl;
break;
case 'c':
case 'C':
cout<<"日本5日遊$25000" << endl;
break;
default:
cout<<"選項錯誤" << endl;
}
return 0;
}
```
----
### 課中演練 CH04_05.cpp
```c=
#include <iostream>
using namespace std;
int main() {
int i, n, sum=0;
cin >> n;
for(i = 1; i <= n; i++)
sum += i;
cout << "1+2+...+" << n << "=" << sum;
return 0;
}
```
----
### 課中演練 CH04_06.cpp
```c=
#include <iostream>
using namespace std;
int main() {
int i, j;
for (i = 1; i <= 9; i++) {
for (j = 2; j <= 9; j++) {
cout << j << '*' << i << '=' << j * i << ' ';
}
cout << endl;
}
return 0;
}
```
----
### 課中演練 CH04_08.cpp
```c=
#include <iostream>
using namespace std;
int main() {
int sum = 0, i = 0, S = 0;
cout << "請問連續整數加總到多少會超過S值,請輸入S值:" << endl;
cin >> S;
do {
i ++;
sum += i;
} while(sum <= S) ;
cout << "連續整數加總到" << i << "會超過" << S;
return 0;
}
```
---
### 課中演練 CH05_01.cpp
```c=
#include <iostream>
using namespace std;
int main()
{
int score[6] = {50, 80, 70};
for (int i = 3; i < 6; i++)
{
cout << "第" << i + 1 << "個元素為:" << endl;
cin >> score[i];
}
for (int i = 0; i < 6; i++)
cout << "score[" << i << "]=" << score[i] << endl;
return 0;
}
```
----
### 課中演練 CH05_02.cpp
```c=
#include <iostream>
using namespace std;
int main()
{
int score[4][5], fail[4] = {0}, sum[4] = {0};
for (int i = 0; i < 4; i++)
{
cout << "請輸入" << i + 1 << "號的國、英、數、自、社五科成績:" << endl;
for (int j = 0; j < 5; j++)
{
cin >> score[i][j];
sum[i] += score[i][j];
if (score[i][j] < 60)
fail[i] += 1;
}
}
for (int i = 0; i < 4; i++)
cout << i + 1 << "號的總分:" << sum[i] << ",平均:" << sum[i] / 5.0 <<
",共有" << fail[i] << "科不及格" << endl;
return 0;
}
```
----
### 課中演練 CH05_05.cpp
```c=
#include <iostream>
using namespace std;
int main()
{
char Str[6][30] = {"張繼 楓橋夜泊",
"==============",
"月落烏啼霜滿天",
"江楓漁火對愁眠",
"姑蘇城外寒山寺",
"夜半鐘聲到客船"};
int i;
for (i = 0; i < 6; i++)
cout << Str[i] << endl;
return 0;
}
```
----
### 課中演練 CH05_06.cpp
```c=
#include <iostream>
#include <string>
using namespace std;
int main()
{
char ch[] = ", ";
string firstname; //宣告字串類別
string lastname; //宣告字串類別
string input1("請輸入姓氏:");
string input2 = "請輸入名字:";
cout << input1 << endl;
cin >> lastname; //輸入字串
cout << input2 << endl;
cin >> firstname; //輸入字串
string fullname = firstname + ch + lastname; //以運算子作字串的串接
cout << "您的全名為:" << fullname << endl;
return 0;
}
```
----
### 課中演練 CH05_08.cpp
```c=
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str1 = "Overseas Chinese University";
string key = "";
cout << "請在以下字串\"" << str1 << "\",要找的字串:" << endl;
cin >> key;
size_t pos = str1.find(key);
if (pos != str1.npos)
cout << "在字串的第" << pos << "個位置找到" << key << "字串";
else
cout << "找不到!";
return 0;
}
```
----
### 課中演練 CH07_02.cpp
```c=
#include <iostream>
using namespace std;
int my_pow(int x, int r)
{
int i, sum = 1;
for (i = 0; i < r; i++)
sum = sum * x;
return sum;
}
int main()
{
int x, r;
cout << "請輸入兩個數字:" << endl;
cin >> x;
cin >> r;
cout << x << "的" << r << "次方=" << my_pow(x, r) << endl; //呼叫my_pow()函數
return 0;
}
```
{"metaMigratedAt":"2023-06-17T07:12:19.287Z","metaMigratedFrom":"Content","title":"C++程式設計","breaks":"true","contributors":"[{\"id\":\"9eed60a5-6546-4dfd-8445-07f81bcfde52\",\"add\":15373,\"del\":3291}]"}