###### tags: `school`
# 🌈專二C語言
:::danger
**C語言筆記(方便的函式、容器) :**
https://hackmd.io/ypk7-J5tRTCi746YzR8WMQ
:::
## 三數比大小 (2020/09/28)
```cpp=
#include <stdio.h>
int main(void)
{
printf("Enter two integers,and I will tell you\n");
printf("the relationships they satisfy: \n");
int num1;
int num2;
int num3;
scanf_s("%d %d %d", &num1, &num2, &num3);
if (num1 >= num2 and num1 > num3) {
printf("\n%d is greatest\n", num1);
}
if (num2 >= num3 and num2 > num1) {
printf("\n%d is greatest\n", num2);
}
if (num3 >= num1 and num3 > num2) {
printf("\n%d is greatest\n", num3);
}
if (num3 == num1 and num3 == num2) {
printf("\n%d,%d,%d is equal\n", num1, num2, num3);
}
}
```
## 算出平均分數(2020/09/28)
```cpp=
#include <stdio.h>
int main(void)
{
int a;
float sum = 0;
int i = 0;
do
{
printf("輸入分數(負數停止輸入):\n");
scanf_s("%d", &a);
if (a < 0)
break;
sum += a;
i++;
} while (1);
printf("平均分數為:%f", sum / i);
}
```
## 請輸入Z值(2020/10/12)
```cpp=
#include <iostream>
#include <stdio.h>
#include <math.h>
int main()
{
printf("請輸入Z值:");
int Z;
scanf_s("%d", &Z);
double x;
double y;
double a=1;
double b=3;
double c=0;
double positive=0;
double negetive=0;
if (Z==0)
{
printf("Error");
}
else if (Z==1)
{
printf("pi=4.000000");
}
else if (Z % 2 != 0 )
{
for (x = 1; x <= (Z + 1) / 2; x++)
{
positive += (4 /a );
a += 4;
}
for (y = 1; y <= (Z - 1) / 2; y++)
{
negetive += (4 / b);
b += 4;
}
c = positive - negetive;
printf("pi=%f", c);
}
else
{
for (x = 1; x <= Z / 2; x++)
{
positive += (4 / a);
a += 4;
}
for (y = 1; y <= Z / 2; y++)
{
negetive += (4 / b);
b += 4;
}
c = positive - negetive;
printf("pi=%f", c);
}
}
```
## 本金利率本利和(2020/10/12)
```cpp=
#include<iostream>
#include<map>
using namespace std;
int main()
{
printf("輸入本金:");
double principal;
scanf("%lf", &principal);
printf("輸入利率(小數):");
double rate;
scanf("%lf", &rate);
printf("輸入目標:");
double goal;
scanf("%lf", &goal);
int year = 1;
double total;
for(total=principal;total<goal;)
{
total *= (1 + rate);
printf("目前本利和:%lf\n",total);
}
}
```
## 固定月額本利和(2020/10/19)
```cpp=
#include <iostream>
#include <stdio.h>
int main()
{
printf("請輸入本金:");
double principal;
scanf_s("%lf", &principal);
printf("請輸入年利率(浮點數):");
double rate;
scanf_s("%lf", &rate);
double rate1 = rate / 12;
printf("請輸入固定月額:");
double money;
scanf_s("%lf", &money);
printf("請輸入存款目標:");
double goal;
scanf_s("%lf", &goal);
double total;
for (total = principal; total < goal;)
{
total=(total+money)* (1 + rate1);
printf("本月複利本合為%lf\n", total);
}
}
```
## 成績等第(2020/10/19)
```cpp=
using namespace std;
int main()
{
unsigned int acount = 0;
unsigned int bcount = 0;
unsigned int ccount = 0;
unsigned int dcount = 0;
unsigned int fcount = 0;
printf("請輸入成績(負數停止輸入):\n");
int grade,leveal;
while (true){
scanf("%d", &grade);
if(grade<0)
break;
leveal = grade / 10;
switch(leveal) {
case 10:
case 9:
++acount;
break;
case 8:
++bcount;
break;
case 7:
++ccount;
break;
case 6:
++dcount;
break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:
++fcount;
break;
default:
printf("%d", "Incorrect letter grade entered.\n");
printf("Enter a new grade.\n");
break;
}
}
printf("Totals for each letter grade are:\n");
printf("A:%u\n", acount);
printf("B:%u\n", bcount);
printf("C:%u\n", ccount);
printf("D:%u\n", dcount);
printf("F:%u\n", fcount);
}
```
## 輸入分數在全班的第 %d 名(2020/12/07)
```c=
#include <iostream>
#define SIZE 20
int scoCounter[101]; //計數器(計算成績出現次數)
void bubbleSort(unsigned int a[], unsigned int b[]);
void average(unsigned int av[]);
int middle(int a, int b);
int binarySearch(unsigned int sc[], int searchScore, int low, int high);
int main()
{
//學號
unsigned int num[SIZE] = { 12,13,14,15,16,17,19,21,22,23,
24,26,27,28,29,31,32,33,36,37 };
//成績
unsigned int sco[SIZE] = { 66,67,66,70,73,74,75,75,62,32,44,
46,27,12,80,63,66,90,11,66 };
//平均
average(sco);
puts("");
//氣泡排序
bubbleSort(sco,num);
//二元搜尋法
int score;
printf("輸入分數:");
scanf_s("%d", &score);
int result=binarySearch(sco,score,0,SIZE-1);
if (result != -1)
{
printf("學號:%d 分數:%d 在全班的第 %d 名\n",num[result] ,score, SIZE-result);
}
else
{
printf("找不到分數:%d\n", score);
}
}
void average(unsigned int av[])
{
float scoreSum = 0;
for (int i = 0; i <= SIZE - 1; i++)
{
scoreSum += av[i];
}
printf("學生總平均為%.2f\n", scoreSum / SIZE);
}
void bubbleSort(unsigned int a[], unsigned int b[])
{
for (unsigned int pass = 1; pass < SIZE; ++pass)
{
for (int j = 0; j < SIZE - 1; ++j)
{
if (a[j] > a[j + 1])
{
unsigned int scoHold = a[j];
a[j] = a[j + 1];
a[j + 1] = scoHold;
unsigned int numHold = b[j];
b[j] = b[j + 1];
b[j + 1] = numHold;
}
}
}
printf("STUDENT SCORE\n");
for (int i = 0; i <= SIZE - 1; i++)
{
printf("%6u%13u\n", b[i], a[i]);
}
}
int middle(int a, int b)
{
int m = (a + b) / 2;
return m;
}
int binarySearch(unsigned int sc[], int searchScore, int low, int high)
{
while (low <= high)
{
int m = middle(low, high); //取得中位數
if (searchScore==sc[m])
{
return m;
}
else if (searchScore < sc[m])
{
high = m - 1;
}
else
{
low = m + 1;
}
}
return -1;
}
// 執行程式: Ctrl + F5 或 [偵錯] > [啟動但不偵錯] 功能表
// 偵錯程式: F5 或 [偵錯] > [啟動偵錯] 功能表
// 開始使用的提示:
// 1. 使用 [方案總管] 視窗,新增/管理檔案
// 2. 使用 [Team Explorer] 視窗,連線到原始檔控制
// 3. 使用 [輸出] 視窗,參閱組建輸出與其他訊息
// 4. 使用 [錯誤清單] 視窗,檢視錯誤
// 5. 前往 [專案] > [新增項目],建立新的程式碼檔案,或是前往 [專案] > [新增現有項目],將現有程式碼檔案新增至專案
// 6. 之後要再次開啟此專案時,請前往 [檔案] > [開啟] > [專案],然後選取 .sln 檔案
```
## 輸入想找的學號(成績表排列、中位數)(2020/12/07)
```c=
// ConsoleApplication1.cpp : 此檔案包含 'main' 函式。程式會於該處開始執行及結束執行。
//
#include <iostream>
void bouble(int b[],int a[]);
int binary(int b[], int key, int low, int high);
int runk2(int b[], int key, int low, int high);//排名
void printArray(int a[]);
#define SIZE 20
int main()
{
int n;
int a[SIZE] =
{ 66,67,66,70,73,74,75,75,62,32,
44,46,27,12,80,63,66,90,11,66 };//分數2
int b[SIZE] =
{ 12,13,14,15,16,17,19,21,22,23,
24,26,27,28,29,31,32,33,36,37 };//學號2
int grade[SIZE] =
{ 66,67,66,70,73,74,75,75,62,32,
44,46,27,12,80,63,66,90,11,66 };//分數
int stu[SIZE] =
{ 12,13,14,15,16,17,19,21,22,23,
24,26,27,28,29,31,32,33,36,37 };//學號
//氣泡排序
bouble(b,a);
//總分
int total = 0;
for (int j = 0; j < SIZE; ++j) {
total += a[j];
}
printf("\n總共:%d人。\n總分為:%d分。\n平均:%.4f。\n中位數:%d。\n", SIZE, total, (double)total / SIZE, a[SIZE / 2]);
//輸入學號
printf("輸入想找的學號:");
scanf_s("%d", &n);
int ans = binary(stu, n, 0, 19);//學號 分數
int num = runk2(b, n, 0, 19);//排名
if (ans != -1) {
printf("成績表:\n學號:%d。總分:%d。名次:%d。",stu[ans],grade[ans],20-num);
}
else {
printf("沒找到。");
}
}
void bouble(int b[],int a[])
{
for (int pass = 1; pass < SIZE; ++pass) {
for (int j = 0; j < SIZE - 1; ++j) {
if (a[j] > a[j + 1]) {
int hold;
hold = a[j];
a[j] = a[j + 1];
a[j + 1] = hold;
int holdstu;
holdstu = b[j];
b[j] = b[j + 1];
b[j + 1] = holdstu;
}
}
}
printf("學號(排列後:)");
printArray(b);
printf("\n分數(排列後:)");
printArray(a);
}
int binary(int stu[], int key, int low, int high) //二元
{
while (low <= high) {
int middle = (low + high) / 2;
if (key == stu[middle]) {
return middle;
}
else if (key < stu[middle]) {
high = middle - 1;
}
else {
low = middle + 1;
}
}
return -1;
}
int runk2(int b[], int key, int low, int high) //線性排列
{
for (int i = low; i <= high; i++) {
if (key == b[i]) {
return i;
}
}
}
void printArray(int a[]) //陣列輸出
{
for (int j = 0; j < SIZE; ++j) {
if (j % 20 == 0) {
puts("");
}
printf("%2u ", a[j]);
}
}
// 執行程式: Ctrl + F5 或 [偵錯] > [啟動但不偵錯] 功能表
// 偵錯程式: F5 或 [偵錯] > [啟動偵錯] 功能表
// 開始使用的提示:
// 1. 使用 [方案總管] 視窗,新增/管理檔案
// 2. 使用 [Team Explorer] 視窗,連線到原始檔控制
// 3. 使用 [輸出] 視窗,參閱組建輸出與其他訊息
// 4. 使用 [錯誤清單] 視窗,檢視錯誤
// 5. 前往 [專案] > [新增項目],建立新的程式碼檔案,或是前往 [專案] > [新增現有項目],將現有程式碼檔案新增至專案
// 6. 之後要再次開啟此專案時,請前往 [檔案] > [開啟] > [專案],然後選取 .sln 檔案
```
## 成績表單......(2020/12/14)
```c=
// 1214.cpp : 此檔案包含 'main' 函式。程式會於該處開始執行及結束執行。
//
#include <iostream>
#include<stdio.h>
#define STUDENTS 10
#define EXAMS 4
double average(int set0fGrades[], int tests);
void printArray(int grades[][EXAMS], int pupils, int tests);
double mun(int set0fGrades[], int tests);
int min(int grades[][EXAMS], int pupils, int tests);
int max(int grades[][EXAMS], int pupils, int tests);
int main(void)
{
int studentGrades[STUDENTS][EXAMS] =
{
{93,68},
{86,94},
{76,65},
{68,54},
{95,64},
{77,75},
{96,98},
{35,99},
{83,74},
{55,84} };
puts("The array is:");
for (int student = 0; student < STUDENTS; ++student) {
//總分
studentGrades[student][2] = mun(studentGrades[student], 2);
//平均
studentGrades[student][3] = average(studentGrades[student], 2);
}
//表單
printArray(studentGrades, STUDENTS, EXAMS);
//最大最小平均值
printf("\n\nLOWEST grade:%d\nHIGGEST grade:%d\n", min(studentGrades, STUDENTS, 3), max(studentGrades, STUDENTS, 3));
}
//副程式↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
//總分
double mun(int set0fGrades[], int tests)
{
int total = 0;
for (int i = 0; i < 2; ++i) {
total += set0fGrades[i];
}
return total;
}
//平均值
double average(int set0fGrades[], int tests)
{
int total = 0;
for (int i = 0; i < 2; ++i) {
total += set0fGrades[i];
}
return (double)total / tests;
}
//最小值
int min(int grades[][EXAMS], int pupils, int tests)
{
int low = 100;
for (int i = 0; i < pupils; i++) {
for (int j = 3; j <= tests; j++)
{
if (grades[i][j] < low) {
low = grades[i][j];
}
}
}
return low;
}
//最大值
int max(int grades[][EXAMS], int pupils, int tests)
{
int high = 0;
for (int i = 0; i < pupils; i++) {
for (int j = 3; j <= tests; j++)
{
if (grades[i][j] > high) {
high = grades[i][j];
}
}
}
return high;
}
//輸出表單
void printArray(int grades[][EXAMS], int pupils, int tests)
{
printf("%s", " [數學] [計概] [總分] [平均]");
for (int i = 0; i < pupils; ++i) {
printf("\nstudentGrades[%u]", i);
for (int j = 0; j < tests; ++j) {
printf("%5d ", grades[i][j]);
}
}
}
// 執行程式: Ctrl + F5 或 [偵錯] > [啟動但不偵錯] 功能表
// 偵錯程式: F5 或 [偵錯] > [啟動偵錯] 功能表
// 開始使用的提示:
// 1. 使用 [方案總管] 視窗,新增/管理檔案
// 2. 使用 [Team Explorer] 視窗,連線到原始檔控制
// 3. 使用 [輸出] 視窗,參閱組建輸出與其他訊息
// 4. 使用 [錯誤清單] 視窗,檢視錯誤
// 5. 前往 [專案] > [新增項目],建立新的程式碼檔案,或是前往 [專案] > [新增現有項目],將現有程式碼檔案新增至專案
// 6. 之後要再次開啟此專案時,請前往 [檔案] > [開啟] > [專案],然後選取 .sln 檔案
```
## 成績表單2(2020/12/28)
```c=
// 1228.cpp : 此檔案包含 'main' 函式。程式會於該處開始執行及結束執行。
//
#include <iostream>
#include<stdio.h>
#define SIZE 10
#define EXAM 4
void bubbleSort(char name[][20], int studentGrade[][EXAM]);
void printArr(char name[][20],int studentGrade[][EXAM], bool isBeforeSort);
void average(int studentGrade[][EXAM]);
int mid(int studentGrade[][EXAM]);
int search(int studentGrade[][EXAM], int key);
void swap(int* element1Ptr, int* element2Ptr);
void copy1(char* const s1, const char* const s2);
void copy2(char* s1, const char* s2);
int main()
{
const char *stu_name[SIZE] = {"Danny","Marry","Jimmy","Peter","Sue","John","Hearts","Diamans","Clubs","Spades"};
char stu1_name[10][20];
int studentGrade[SIZE][EXAM] = { {1,74,55,0},{2,56,88,0}, {3,84,11,0}, {4,88,52,0}, {5,100,100,0}, {6,0,0,0}, {7,51,81,0}, {8,74,14,0}, {9,77,55,0}, {10,97,68,0} };
int searchScore;
for (int i = 0; i < SIZE; i++)
copy1(stu1_name[i], stu_name[i]);
printArr(stu1_name, studentGrade, true);
average(studentGrade);
bubbleSort(stu1_name,studentGrade);
printArr(stu1_name,studentGrade, false);
printf("\n\n請輸入平均成績:");
scanf_s("%d", &searchScore);
int idx = search(studentGrade, searchScore);
if (idx == -1)
printf("\n Not Found");
else
printf("學號:%d\n平均成績:%d\n名次:%d\n", studentGrade[idx][0], studentGrade[idx][3], SIZE - idx);
}
//中間值
int mid(int studentGrade[][EXAM]) {
return studentGrade[SIZE / 2][3];
}
//平均
void average(int studentGrade[][EXAM]) {
for (int i = 0; i < SIZE; i++) {
studentGrade[i][3] = (studentGrade[i][1] + studentGrade[i][2]) / 2;
}
}
//搜索
int search(int studentGrade[][EXAM], int key)
{
int low = 0;
int high = SIZE;
int mid = (low + high) / 2;
while (low <= high)
{
if (studentGrade[mid][3] == key)
{
return mid;
}
else if (studentGrade[mid][3] > key)
{
high = mid - 1;
}
else if (studentGrade[mid][3] < key)
{
low = mid + 1;
}
mid = (low + high) / 2;
}
return -1;
}
//氣泡排序
void bubbleSort(char name[][20], int studentGrade[][EXAM]) {
char* temp;
for (int pass = 1; pass < SIZE; ++pass) {
for (int i = 0; i < SIZE - 1; ++i) {
if (studentGrade[i][3] > studentGrade[i + 1][3]) {
for (int j = 0; j < EXAM; j++)
swap(&studentGrade[i][j], &studentGrade[i + 1][j]);
temp = name[i];
copy1(temp, name[i + 1]);
copy1(name[i], name[i + 1]);
copy1(name[i], temp);
}
}
}
}
//印出
void printArr(char name[][20], int studentGrade[][EXAM], bool isBeforeSort) {
if (isBeforeSort)
puts("\n排序前成績:\n");
else
puts("\n排序後成績:\n");
printf("學號 ");
for (int i = 0; i < SIZE; ++i) {
printf("%4d ", studentGrade[i][0]);
printf("%4s", name[i]);
}
puts("\n");
for (int j = 1; j < EXAM; j++) {
if (!isBeforeSort || j != EXAM - 1) {
if (j != EXAM - 1)
printf("\n成績 ");
else
printf("平均 ");
for (int i = 0; i < SIZE; ++i) {
printf("%10d ", studentGrade[i][j]);
}
if (j == EXAM - 2) {
puts("");
puts("");
}
}
}
if (!isBeforeSort) {
puts("");
printf("名次 ");
for (int j = 0; j < SIZE; j++) {
printf(" %7d ", SIZE - j);
}
puts("");
printf("\n\n中位數: %d\n", mid(studentGrade));
printf("最大平均: %d\n", studentGrade[SIZE - 1][3]);
printf("最小平均: %d\n", studentGrade[0][3]);
}
}
void swap(int* element1Ptr, int* element2Ptr) {
int hold = *element1Ptr;
*element1Ptr = *element2Ptr;
*element2Ptr = hold;
}
void copy1(char* const s1, const char* const s2)
{
for (int i = 0; (s1[i] = s2[i]) != '\0'; ++i);
}
void copy2(char* s1, const char* s2)
{
for (; (*s1 = *s2) != '\0'; ++s1, ++s2);
}
// 執行程式: Ctrl + F5 或 [偵錯] > [啟動但不偵錯] 功能表
// 偵錯程式: F5 或 [偵錯] > [啟動偵錯] 功能表
// 開始使用的提示:
// 1. 使用 [方案總管] 視窗,新增/管理檔案
// 2. 使用 [Team Explorer] 視窗,連線到原始檔控制
// 3. 使用 [輸出] 視窗,參閱組建輸出與其他訊息
// 4. 使用 [錯誤清單] 視窗,檢視錯誤
// 5. 前往 [專案] > [新增項目],建立新的程式碼檔案,或是前往 [專案] > [新增現有項目],將現有程式碼檔案新增至專案
// 6. 之後要再次開啟此專案時,請前往 [檔案] > [開啟] > [專案],然後選取 .sln 檔案
```
## 第一題 輸入學生成績 算平均 依遞增遞減排序(2021/3/8)

```c++=
#include <iostream >
#include<stdio.h>
#define SIZE 10
#define EXAM 4
void bubbleSort(char name[][20], int
studentGrade[][EXAM], int(*compare)(int a, int b));
void printArr(char name[][20], int studentGrade[][EXAM], bool isBeforeSort);
void average(int studentGrade[][EXAM]);
void swap(int* element1Ptr, int* element2Ptr);
void copy1(char* s1, const char* s2); //字串拷貝
int ascending(int a, int b);
int descending(int a, int b);
int main()
{
const char* stu_name[SIZE] = {
"Danny","Mary","Jimmy","Peter","Sue","John","Hearts",
"Diamonds","Clubs","Spades" };
char stu1_name[10][20];
int studentGrade[SIZE][EXAM] = { {1,74,55,0},{2,56,88,0},
{3,84,11,0}, {4,88,52,0}, {5,100,100,0}, {6,0,0,0}, {7,51,81,0},
{8,74,14,0}, {9,77,55,0}, {10,97,68,0} };
int searchScore;
for (int i = 0; i < SIZE; i++)
copy1(stu1_name[i], stu_name[i]);
printArr(stu1_name, studentGrade, true);
printf("\n");
average(studentGrade);
printf("%s", "遞增順序排序\n");
bubbleSort(stu1_name, studentGrade, ascending);
printArr(stu1_name, studentGrade, false);
printf("\n");
printf("%s", "遞減順序排序\n");
bubbleSort(stu1_name, studentGrade, descending);
printArr(stu1_name, studentGrade, false);
}
void copy1(char* s1, const char* s2)
{
for (; ((*s1 = *s2) != '\0'); ++s1, ++s2);
}
void average(int studentGrade[][EXAM])
{
for (int i = 0; i < SIZE; i++)
{
studentGrade[i][3] = (studentGrade[i][1] + studentGrade[i][2]) / 2;
}
}
void bubbleSort(char name[][20], int
studentGrade[][EXAM], int(*compare)(int a, int b)) {
char temp[20];
for (int pass = 1; pass < SIZE; ++pass) {
for (int i = 0; i < SIZE - 1; ++i) {
if ((*compare)(studentGrade[i][3], studentGrade[i + 1][3]))
{
for (int j = 0; j < EXAM; j++)
swap(&studentGrade[i][j], &studentGrade[i + 1][j]);
copy1(temp, name[i]);
copy1(name[i], name[i + 1]);
copy1(name[i + 1], temp);
}
}
}
}
void printArr(char name[][20], int studentGrade[][EXAM], bool isBeforeSort)
{
if (isBeforeSort)
{
puts("\n排序前成績:\n");
printf("學號 姓名 國文 數學 \n");
for (int i = 0; i < SIZE; ++i)
printf("%4d %8s %6d %6d \n", studentGrade[i][0], name[i],
studentGrade[i][1], studentGrade[i][2]);
}
else
{
puts("\n排序後成績:\n");
printf("學號 姓名 國文 數學 平均 名次\n");
for (int i = 0; i < SIZE; ++i)
printf("%4d %8s %6d %6d %6d %4d\n", studentGrade[i][0],
name[i], studentGrade[i][1], studentGrade[i][2], studentGrade[i][3],
i + 1);
puts("\n");
puts("");
}
}
void swap(int* element1Ptr, int* element2Ptr) {
int hold = *element1Ptr;
*element1Ptr = *element2Ptr;
*element2Ptr = hold;
}
int ascending(int a, int b) //確定元素是否按升序/順序排序不正常
{
return b < a; // 如果b小於a則應該交換
}
int descending(int a, int b) //確定元素是否按升序/順序排序不正常
{
return b > a; //如果b大於a則應該交換
}
```
## 第二題 算出有幾個 大寫 小寫 數字 (2021/3/8)
```c++=
// 第二題.cpp : 此檔案包含 'main' 函式。程式會於該處開始執行及結束執行。
//
#include <iostream>
#include<stdio.h>
#include<ctype.h>
int upper(char *str);
int lower(char*str);
int num(char* str);
int main(void)
{
int(*f[3])(char*) = { upper, lower, num };
char str[] = "abcDEFG000";
for (int c = 0; c <= 2; c++)
{
(*f[c])(str);
}
}
int upper(char* str)
{
int size = strlen(str); //函式會回傳字串的長度,其中的"字串"是必要項目,即為要計算長度的 String。
int count = 0;
for (int c = 0; c <= size; c++)
{
if (isupper(str[c]))
{
count++;
}
}
printf("大寫有:%d個\n", count);
return 0;
}
int lower(char* str)
{
int size = strlen(str);
int count = 0;
for (int c = 0; c <= size; c++)
{
if (islower(str[c]))
{
count++;
}
}
printf("小寫有:%d個\n", count);
return 0;
}
int num(char* str)
{
int size = strlen(str);
int count = 0;
for (int c = 0; c <= size; c++)
{
if (isdigit(str[c]))
{
count++;
}
}
printf("數字:%d個\n", count);
return 0;
}
///////////////////////
```
## 給兩個字串s1,s2找出重複出現次數並列印 (2021/3/15)
```c++=
#include<stdio.h>
#include<string.h>
int main(void)
{
char s1[100] = ""; //長度限制
printf("輸入字串");
scanf_s("%s", s1, 100);
printf("輸入要搜尋的字串");
char s2[100] = " ";
scanf_s("%s", s2, 100);
int c = 0;
for (int i = 0; i < strlen(s1) - strlen(s2) + 1; i++) //+1往後找
{
if(strncmp(s2,s1+i,strlen(s2)) == 0)
{
c++;
}
}
printf("共 %d次",c);
}
```
## 印出字串中的浮點數(2021/3/15)
```c++=
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main()
{
char s1[20] = "3.14 bubu 3.1415926";
const char* string = s1;
char* stringPtr;
double d = strtod(string, &stringPtr);
printf("double value %.5f and the string \"%s\"\n", d, stringPtr);
}
```
## 學生成績改為結構陣列且大到小排序(需有排序 報表列副程式)(2021/3/15)
```c++=
#include <iostream>
#include<stdio.h>
#define SIZE 10
#define EXAM 4
typedef struct student
{
char name[20];
int math;
int computer;
double average;
};
typedef struct card Card;
void bubbleSort(char name[][20], int studentGrade[][EXAM], int(*compare)(int a, int b));
void printArr(char name[][20], int studentGrade[][EXAM], bool isBeforeSort);
void average(int studentGrade[][EXAM]);
void swap(int* element1Ptr, int* element2Ptr);
void copy1(char* s1, const char* s2); //字串拷貝
int ascending(int a, int b);
int main()
{
Card deck[SIZE];
const char* stu_name[SIZE] = {
"Danny","Mary","Jimmy","Peter","Sue","John","Hearts",
"Diamonds","Clubs","Spades" };
char stu1_name[10][20];
int studentGrade[SIZE][EXAM] = { {1,74,55,0},{2,56,88,0},
{3,84,11,0}, {4,88,52,0}, {5,100,100,0}, {6,0,0,0}, {7,51,81,0},
{8,74,14,0}, {9,77,55,0}, {10,97,68,0} };
int searchScore;
for (int i = 0; i < SIZE; i++)
copy1(stu1_name[i], stu_name[i]);
printArr(stu1_name, studentGrade, true);
printf("\n");
average(studentGrade);
printf("%s", "遞增順序排序\n");
bubbleSort(stu1_name, studentGrade, ascending);
printArr(stu1_name, studentGrade, false);
printf("\n");
}
void copy1(char* s1, const char* s2)
{
for (; ((*s1 = *s2) != '\0'); ++s1, ++s2);
}
void average(int studentGrade[][EXAM]) {
for (int i = 0; i < SIZE; i++) {
studentGrade[i][3] = (studentGrade[i][1] + studentGrade[i][2]) / 2;
}
}
void bubbleSort(char name[][20], int
studentGrade[][EXAM], int(*compare)(int a, int b)) {
char temp[20];
for (int pass = 1; pass < SIZE; ++pass) {
for (int i = 0; i < SIZE - 1; ++i) {
if ((*compare)(studentGrade[i][3], studentGrade[i + 1][3]))
{
for (int j = 0; j < EXAM; j++)
swap(&studentGrade[i][j], &studentGrade[i + 1][j]);
copy1(temp, name[i]);
copy1(name[i], name[i + 1]);
copy1(name[i + 1], temp);
}
}
}
}
void printArr(char name[][20], int studentGrade[][EXAM], bool isBeforeSort) {
if (isBeforeSort)
{
puts("\n排序前成績:\n");
printf("學號 姓名 國文 數學 \n");
for (int i = 0; i < SIZE; ++i)
printf("%4d %8s %6d %6d \n", studentGrade[i][0], name[i],
studentGrade[i][1], studentGrade[i][2]);
}
else
{
puts("\n排序後成績:\n");
printf("學號 姓名 國文 數學 平均 名次\n");
for (int i = 0; i < SIZE; ++i)
printf("%4d %8s %6d %6d %6d %4d\n", studentGrade[i][0],
name[i], studentGrade[i][1], studentGrade[i][2], studentGrade[i][3],
i + 1);
puts("\n");
puts("");
}
}
void swap(int* element1Ptr, int* element2Ptr) {
int hold = *element1Ptr;
*element1Ptr = *element2Ptr;
*element2Ptr = hold;
}
int ascending(int a, int b) //確定元素是否按升序/順序排序不正常
{
return b < a; // 如果b小於a則應該交換
}
```
## 第一題 OR XOR AND (2021/3/29)
```c++=
// ConsoleApplication1.cpp : 此檔案包含 'main' 函式。程式會於該處開始執行及結束執行。
//
#include <stdio.h>
void displayBits(unsigned int value);
// prototype
int main(void)
{
unsigned int x;
unsigned int y;
printf("%s", "Enter a nonnegative int: ");
scanf_s("%u", &x);
printf("%s", "Enter a nonnegative int: ");
scanf_s("%u", &y);
displayBits(x);
displayBits(y);
puts("and");
displayBits(x&y);
puts("or");
displayBits(x | y);
puts("xor");
displayBits(x ^ y);
}
void displayBits(unsigned int value)
{
unsigned int displayMask = 1 << 31;
for (unsigned int c = 1; c <= 32; ++c)
{
putchar(value & displayMask ? '1' : '0');
value <<= 1;
if (c % 8 == 0)
{
putchar(' ');
}
}
putchar('\n');
}
```
## 第二題 &數字換成二進位後 左移右移(2021/3/29)
```c++=
#include<string.h>
#include<stdio.h>
void dis1(unsigned int value);
void dis2(unsigned int value,unsigned int a,unsigned int b );
int main(void)
{
unsigned int x;
printf("input number");
scanf_s("%d", &x);
int a;
printf("1 left 2 right");
scanf_s("%d", &a);
int b;
printf("how many step to move");
scanf_s("%d", &b);
dis1(x);
dis2(x, a, b);
}
void dis1(unsigned int value)
{
unsigned int displayMask = 1 << 31;
printf("(原)%u", value);
unsigned int c;
for (c = 1; c <= 32; c++)
{
putchar(value & displayMask ? '1' : '0');
value <<= 1;
if (c % 8 == 1)
{
putchar(' ');
}
}
putchar('\n');
}
void dis2(unsigned int value, unsigned int a, unsigned int b)
{
unsigned int displayMask = 1 << 31;
printf("(後)%u", value);
if (a == 1)
{
value = value << b;
}
else if (a == 2)
{
value = value >> b;
}
else
{
printf("error");
}
unsigned int c;
for (c = 1; c <= 32; c++)
{
putchar(value & displayMask ? '1' : '0');
value <<= 1;
if (c % 8 == 1)
{
putchar(' ');
}
}
putchar('\n');
}
```
## 第三題(2021/3/29)
```c++=
#include<stdio.h>
#include <stdio.h>
struct clientData
{
unsigned int StuNum; // 4 bytes
char Name[20]; // 20 bytes
float average; // 4 byte float , 8 bytes double
};
void CreateBlankFile(void);
void KeyInData(void);
void OutputFile(void);
int main(void)
{
FILE* cfPtr;
errno_t err; // fopen_s
int SelectFunction;
// Open for read (will fail if file "crt_fopen_s.c" does not exist)
printf("Select funtion (1:create blank file,2:Key in data, 3:Print file data, 0: Exit Program\n");
scanf_s("%d", &SelectFunction);
printf("\n");
while (SelectFunction != 0)
{
if (SelectFunction == 1)
CreateBlankFile();
if (SelectFunction == 2)
KeyInData();
if (SelectFunction == 3)
OutputFile();
printf("Select funtion (1:create blank file,2:Key in data, 3:Print file data, 0: Exit Program\n");
scanf_s("%d", &SelectFunction);
printf("\n");
}
}
void CreateBlankFile(void)
{
FILE* cfPtr;
errno_t err; // fopen_s
if ((err = fopen_s(&cfPtr, "accounts.dat", "wb")) != 0)
puts("File could not be opened.");
else
{
struct clientData blankClient = { 0,"" , 0.0 };
for (unsigned int i = 1; i <= 100; ++i)
{
fwrite(&blankClient, sizeof(struct clientData), 1, cfPtr); //將一個為原組為計的區塊資料寫到檔案中
}
fclose(cfPtr);
}
}
void KeyInData(void)
{
FILE* cfPtr;
errno_t err; // fopen_s
if ((err = fopen_s(&cfPtr, "accounts.dat", "rb+")) != 0)
{
puts("File could not be opened.");
}
else
{
struct clientData client = { 0,"",0.0 };
printf("Enter student number (1 to 100, 0 to end input:)");
scanf_s("%d", &client.StuNum);
while (client.StuNum != 0)
{
// printf("%s", "Enter lastname ,firstname,balance:");
printf("%s", "Enter Name: ");
scanf_s("%s", client.Name, 20);
printf("\n");
printf("%s", "Enter average: ");
scanf_s("%f", &client.average);
printf("\n");
fseek(cfPtr, (client.StuNum - 1) * sizeof(struct clientData), SEEK_SET);
fwrite(&client, sizeof(struct clientData), 1, cfPtr);
printf("%s", "Enter student number: ");
scanf_s("%d", &client.StuNum);
}
fclose(cfPtr);
}
}
void OutputFile(void)
{
FILE* cfPtr;
errno_t err;
if ((err = fopen_s(&cfPtr, "accounts.dat", "rb")) != 0)
{
puts("File could not be opened.");
}
else
{
printf("Student Number Name Average \n");
}
while (!feof(cfPtr))
{
struct clientData client = { 0,"",0.0 };
int result = fread(&client, sizeof(struct clientData), 1, cfPtr);
if (result != 0)
{
printf("%10d%18s%15.3f\n", client.StuNum, client.Name, client.average);
}
}
fclose(cfPtr);
}
```
## 2021年4月12號 共一題
```c++=
#include <stdio.h>
#include <stdlib.h>
// self-referential structure
struct listNode
{
int data;
struct listNode* nextPtr; // pointer to next node
};
typedef struct mystu
{
int StuNum;
int math;
int computer;
}student;
typedef struct listNode ListNode; //; synonym for struct listNode
typedef ListNode* ListNodePtr; // synonym for ListNode*
// prototypes
void insert(ListNodePtr* sPtr, int value);
void printList(ListNodePtr currentPtr);
int main(void)
{
ListNodePtr startPtr = NULL; // initially there are no nodes
student mystu = { 0,0,0 };
// printf("%s", "? ");
// unsigned int choice; // user's choice
// scanf("%u", &choice);
for (int i = 0; i < 5; i = i + 1)
{
printf("第%d個:\n", i + 1);
printf("%s", "輸入學生學號");
scanf_s("\n%d", &mystu.StuNum);
insert(&startPtr, mystu.StuNum);
printf("%s", "輸入數學成績");
scanf_s("\n%d", &mystu.math);
insert(&startPtr, mystu.math);
printf("%s", "輸入計概成績");
scanf_s("\n%d", &mystu.computer);
insert(&startPtr, mystu.computer);
}
printList(startPtr);
puts("End of run.");
}
void insert(ListNodePtr* sPtr, int value)
{
ListNodePtr newPtr = (ListNodePtr)malloc(sizeof(ListNode));
if (newPtr != NULL) { // is space available
newPtr->data = value; // place value in node
newPtr->nextPtr = NULL; // node does not link to another node
ListNodePtr previousPtr = NULL;
ListNodePtr currentPtr = *sPtr;
// loop to find the correct location in the list
while (currentPtr != NULL && value > currentPtr->data) {
previousPtr = currentPtr; // walk to ...
currentPtr = currentPtr->nextPtr; // ... next node
}
// insert new node at beginning of list
if (previousPtr == NULL) {
newPtr->nextPtr = *sPtr;
*sPtr = newPtr;
}
else { // insert new node between previousPtr and currentPtr
previousPtr->nextPtr = newPtr;
newPtr->nextPtr = currentPtr;
}
}
else {
printf("%d not inserted. No memory available.\n", value);
}
}
// print the list
void printList(ListNodePtr currentPtr)
{
// if list is empty
puts("The list is:");
// while not the end of the list
while (currentPtr != NULL) {
printf("%d --> ", currentPtr->data);
currentPtr = currentPtr->nextPtr;
}
puts("NULL\n");
}
```
## 2021年4月26號 第九週 共一題
```c++=
#include <stdio.h>
#include <stdlib.h>
// self-referential structure
struct listNode
{
int data;
int math;
int computer;
struct listNode* nextPtr; // pointer to next node
};
typedef struct listNode ListNode; //; synonym for struct listNode
typedef ListNode* ListNodePtr; // synonym for ListNode*
// prototypes
void insert(ListNodePtr* sPtr, int value,int math,int computer);
int datadelete(ListNodePtr* sPtr, int value);
void printList(ListNodePtr currentPtr);
int isEmpty(ListNodePtr sPtr);
int main(void)
{
ListNodePtr startPtr = NULL;
int item;
int i, math, computer;
for (int i = 0; i < 5; i = i + 1)
{
printf("第%d個:\n", i + 1);
printf("%s", "輸入學生學號");
scanf_s("\n%d", &item);
printf("%s", "輸入數學成績");
scanf_s("\n%d", &math);
printf("%s", "輸入計概成績");
scanf_s("\n%d", &computer);
insert(&startPtr, item,math, computer);
}
if (!isEmpty(startPtr))
{
printf("%s", "Enter character to be deleted: ");
scanf_s("\n%d", &item);
if (datadelete(&startPtr, item))
{
printf("%d deleted.\n", item);
printList(startPtr);
}
else
{
printf("%d not found.\n\n", item);
}
}
}
void insert(ListNodePtr* sPtr, int value, int math, int computer)
{
ListNodePtr newPtr = (ListNodePtr)malloc(sizeof(listNode)); // create node
if (newPtr != NULL) { // is space available
newPtr->data = value;
newPtr->math = math;
newPtr->computer = computer;// place value in node
newPtr->nextPtr = NULL; // node does not link to another node
ListNodePtr previousPtr = NULL;
ListNodePtr currentPtr = *sPtr;
// loop to find the correct location in the list
while (currentPtr != NULL && value > currentPtr->data) {
previousPtr = currentPtr; // walk to ...
currentPtr = currentPtr->nextPtr; // ... next node
}
// insert new node at beginning of list
if (previousPtr == NULL) {
newPtr->nextPtr = *sPtr;
*sPtr = newPtr;
}
else { // insert new node between previousPtr and currentPtr
previousPtr->nextPtr = newPtr;
newPtr->nextPtr = currentPtr;
}
}
else {
printf("%c not inserted. No memory available.\n", value);
}
}
int datadelete(ListNodePtr* sPtr, int value)
{
// delete first node if a match is found
if (value == (*sPtr)->data) {
ListNodePtr tempPtr = *sPtr; // hold onto node being removed
*sPtr = (*sPtr)->nextPtr; // de-thread the node
free(tempPtr); // free the de-threaded node
return value;
}
else
{
ListNodePtr previousPtr = *sPtr;
ListNodePtr currentPtr = (*sPtr)->nextPtr;
// loop to find the correct location in the list
while (currentPtr != NULL && currentPtr->data != value)
{
previousPtr = currentPtr; // walk to ...
currentPtr = currentPtr->nextPtr; // ... next node
}
// delete node at currentPtr
if (currentPtr != NULL) {
ListNodePtr tempPtr = currentPtr;
previousPtr->nextPtr = currentPtr->nextPtr;
free(tempPtr);
return value;
}
}
return '\0';
}
int isEmpty(ListNodePtr sPtr)
{
return sPtr == NULL;
}
// print the list
void printList(ListNodePtr currentPtr)
{
// if list is empty
puts("The list is:");
// while not the end of the list
while (currentPtr != NULL) {
printf("%d %d %d --> ", currentPtr->data,currentPtr->math,currentPtr->computer);
currentPtr = currentPtr->nextPtr;
}
puts("NULL\n");
}
//----------------------------------------------------------------------
// 0426.cpp : 此檔案包含 'main' 函式。程式會於該處開始執行及結束執行。
//
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
struct stuData
{
unsigned int StuNum;
int math, computer;
struct stuData* nextPtr;
};
typedef struct stuData StuData;
typedef StuData* StuDataPtr;
// prototypes
void insert(StuDataPtr* sPtr, int value, int math, int computer);
void printList(StuDataPtr currentPtr);
int delete1(StuDataPtr* sPtr, int value);
int main(void)
{
StuDataPtr startPtr = NULL; // initially there are no nodes
int item; // char entered by user
int i, math, computer;
for (i = 0; i < 5; i++) {
printf("%s", "Enter a ID: ");
scanf_s("\n%d", &item);
printf("%s", "Enter a math: ");
scanf_s("\n%d", &math);
printf("%s", "Enter a computer: ");
scanf_s("\n%d", &computer);
insert(&startPtr, item, math, computer);
}
printList(startPtr);
printf("%s", "請輸入要刪除的學號 ");
int a;
scanf_s("%d", &a);
if (delete1(&startPtr,a))
{
printList(startPtr);
}
else
{
printf("%s", "無此學號");
}
}
// insert a new value into the list in sorted order
void insert(StuDataPtr* sPtr, int value, int math, int computer)
{
StuDataPtr newPtr = (StuDataPtr)malloc(sizeof(StuData)); // create node
if (newPtr != NULL) { // is space available
newPtr->StuNum = value;
newPtr->math = math;
newPtr->computer = computer;// place value in node
newPtr->nextPtr = NULL; // node does not link to another node
StuDataPtr previousPtr = NULL;
StuDataPtr currentPtr = *sPtr;
// loop to find the correct location in the list
while (currentPtr != NULL && value > currentPtr->StuNum) {
previousPtr = currentPtr; // walk to ...
currentPtr = currentPtr->nextPtr; // ... next node
}
// insert new node at beginning of list
if (previousPtr == NULL) {
newPtr->nextPtr = *sPtr;
*sPtr = newPtr;
}
else { // insert new node between previousPtr and currentPtr
previousPtr->nextPtr = newPtr;
newPtr->nextPtr = currentPtr;
}
}
else {
printf("%c not inserted. No memory available.\n", value);
}
}
// print the list
int delete1(StuDataPtr* sPtr, int value)
{
// delete first node if a match is found
if (value == (*sPtr)->StuNum) {
StuDataPtr tempPtr = *sPtr; // hold onto node being removed
*sPtr = (*sPtr)->nextPtr; // de-thread the node
free(tempPtr); // free the de-threaded node
return value;
}
else {
StuDataPtr previousPtr = *sPtr;
StuDataPtr currentPtr = (*sPtr)->nextPtr;
// loop to find the correct location in the list
while (currentPtr != NULL && currentPtr->StuNum != value) {
previousPtr = currentPtr; // walk to ...
currentPtr = currentPtr->nextPtr; // ... next node
}
// delete node at currentPtr
if (currentPtr != NULL) {
StuDataPtr tempPtr = currentPtr;
previousPtr->nextPtr = currentPtr->nextPtr;
free(tempPtr);
return value;
}
}
return '\0';
}
void printList(StuDataPtr currentPtr)
{
// if list is empty
if (currentPtr == NULL) {
puts("List is empty.\n");
}
else {
puts("The list is:");
// while not the end of the list
while (currentPtr != NULL) {
printf("%d %d %d --> ", currentPtr->StuNum, currentPtr->math, currentPtr->computer);
currentPtr = currentPtr->nextPtr;
}
puts("NULL\n");
}
}
// 執行程式: Ctrl + F5 或 [偵錯] > [啟動但不偵錯] 功能表
// 偵錯程式: F5 或 [偵錯] > [啟動偵錯] 功能表
// 開始使用的提示:
// 1. 使用 [方案總管] 視窗,新增/管理檔案
// 2. 使用 [Team Explorer] 視窗,連線到原始檔控制
// 3. 使用 [輸出] 視窗,參閱組建輸出與其他訊息
// 4. 使用 [錯誤清單] 視窗,檢視錯誤
// 5. 前往 [專案] > [新增項目],建立新的程式碼檔案,或是前往 [專案] > [新增現有項目],將現有程式碼檔案新增至專案
// 6. 之後要再次開啟此專案時,請前往 [檔案] > [開啟] > [專案],然後選取 .sln 檔案
```
## 2021年5月3號 第十週 共一題 算正方體 長方體 圓柱體 體積
```c++=
// ConsoleApplication2.cpp : 此檔案包含 'main' 函式。程式會於該處開始執行及結束執行。
//
#include <iostream>
using namespace std;
void squareByReference(int&);
float cylinder(int&, int&);
float volum( int&, int& ,int&);
int main()
{
cout << "輸入邊長算正方體體積:";
int x;
cin >> x;
squareByReference(x);
cout << "正方體體積: " << x << endl;
cout << "\n";
int y = 0, radius = 0;
cout << "輸入高算圓柱體體積:";
cin >> y;
cout << "輸入半徑算圓柱體體積:";
cin >> radius;
cout << "圓柱體體積:\n " << cylinder(y,radius)<< endl;
cout << "\n";
cout << "輸入長邊算長方體體積:";
int a;
cin >> a;
cout << "輸入短邊算長方體體積:";
int b;
cin >> b;
cout << "輸入高算長方體體積:";
int c;
cin >> c;
cout << "長方體體積: " << volum(a,b,c) << endl;
}
void squareByReference(int& numberRef)
{
numberRef = numberRef* numberRef* numberRef;
}
float cylinder(int &height, int&radius)
{
return (float)height * 3.1415926 * radius * radius;
}
float volum(int& height, int& width, int& high)
{
return (float)height * width * high;
}
## 2021年5月16號 第十三週 共一題
```c++=
// 多載的square函式.cpp : 此檔案包含 'main' 函式。程式會於該處開始執行及結束執行。
//
#include <iostream>
using namespace std;
int volume(int& x)
{
return x = x * x * x;
}
float volume(int& a, int& b)
{
return (float)b * 3.1415926 * a * a;
}
float volume(int& a, int& b, int& c)
{
return (float)a * b * c;
}
int main()
{
int int1, int2, int3;
cout << "輸入1個數算正方體體積\n輸入2個數算圓柱體體積\n輸入3個數算長方體體積\n ";
cin >> int1;
cout << "ans=" << volume(int1) << endl;
cin >> int1 >> int2;
cout << "ans=" << volume(int1, int2) << endl;
cin >> int1 >> int2 >> int3;
cout << "ans=" << volume(int1, int2, int3) << endl;
}
```
## 2021年5月24、31、6/7號 共三題
24 : https://terabox.com/s/1M796HsXVsf1UDsZf_KqQCw
31 : https://terabox.com/s/1T5ITQ5MT4_GWobvDAJ8ZYQ
07 : https://terabox.com/s/1R6d13z1HQWJQDFDoZf7o1g
## GradeBook輸入寵物名、年齡,判斷
link : https://replit.com/@LIANGcode/GradeBookShu-Ru-Chong-Wu-Ming-Nian-Ling-Pan-Duan#petset.cpp
**main.cpp**
```C++=
#include "pet.h"
#include <iostream>
using namespace std;
int main() {
string nameofPet;
int ageofPet;
string y;
cout << "\n請輸入寵物名 : " << endl;
getline(cin, nameofPet);
GradeBook gradeBook1(nameofPet);
cout << "請輸入寵物年齡:\n " << endl;
cin >> ageofPet;
GradeBook gradeBook2(ageofPet);
cout << "\n輸入Y為印出列表:";
cin >> y;
if (y != "Y")
{
cout << "取消\n";
}
else
{
cout << "寵物名 :" << gradeBook1.getName()
<< "\n寵物年齡 " << gradeBook2.getAge() << endl;
}
}
```
**petset.cpp**
```c++=
#include <iostream>
#include "pet.h"
using namespace std;
GradeBook::GradeBook(string name) :Name(name) {}
GradeBook::GradeBook(int age) :Age(age) {}
void GradeBook::set(string name)
{
Name = name;
}
void GradeBook::set2(int age)
{
Age = age;
}
string GradeBook::getName()const
{
if (Name != " ")
{
return Name;
}
else
{
return("!!!請輸入姓名資料!!!");
}
}
int GradeBook::getAge() const
{
if (Age > 0 && Age <= 20)
{
return Age;
}
else
{
puts("!!!請輸入年齡範圍為1-20!!!");
}
}
```
## 06/07轉民國(上課)
code link : https://replit.com/@LIANGcode/0607Zhuan-Min-Guo-Shang-Ke#main.cpp
## 17.6 西元轉民國(例外處理)
code link : https://replit.com/@LIANGcode/176-Xi-Yuan-Zhuan-Min-Guo-Li-Wai-Chu-Li#main.cpp
## Date object destructor
code link :https://replit.com/@LIANGcode/Date-object-destructor#main.cpp
## Date 期末考(輸入西元日期轉民國,解構子,加月份判斷)
code link :https://replit.com/@LIANGcode/Date-Qi-Mo-Kao#main.cpp
## 期末考2
code link :https://replit.com/@LIANGcode/Qi-Mo-Kao-2#main.cpp