【C#程式設計文章】

  1. 例外狀況和例外處理 (C# 程式設計手冊)
  2. C# 編碼慣例 (C# 程式設計手冊)

【Unity遊戲程式設計】

【期末考及成績計算方式】

  1. 平時出席率與上課參與25%
  2. 平時作業(錄影,線上繳交) 30%
  3. 遊戲設計25% (團隊)
  4. 期末筆試30% (30題,線上考試,選擇題,21日,早上10點),題庫:

課堂用編譯器軟體下載(微軟免費版本):Visual Studio 下載

Syllabus
課程簡介教學目標成績表指定用書學習資源 題庫 評分方法
使學生熟悉結構化之程式語言並學習設計C#程式之過程以建立C#程式設計之能力。 課程臉書
  • 熟悉結構化之程式語言
  • 學習設計程式之過程
  • 建立程式設計之能力
  • 培養學生操作電腦之能力
  • 利於學生獲得相關證照之取得
  • 增加學生對程式設計之興趣
  • 激發學生利用程式設計之能力輔助日後相關課程之學習。
Visual C# 2015程式設計經典,蔡文龍,碁峰              
  • 平常成績(作業、小考等) 30%
  • 期中考 30%
  • 期末(考試與學期作業報告) 40%

第二學期 各週教學內容與習題資料 Week 1~9

W1 (2/22)W2 (3/1)W3 (3/8)W4 (3/15)W5 (3/22)W6 (3/29)W7 (4/5)W8 (4/12)W9 (4/19)
開學暖身操: 1.試寫一程式,輸入年齡,輸入年資,以85制計算,輸出要到民國幾年才能退休? 註:取得今年的年(字串) DateTime.Now.Year.ToString(); 2.試寫一程式,輸入台幣金額及日圓匯率,輸出等值的日圓數。 作業繳交處: http://tronclass.hk.edu.tw/course/125023/content#/
【程式範例】
using System;
namespace ConsoleApplication1
{
    class Program
    {
        static float max(float x, float y)
        {
            float max = x;
            if (max < y) max = y;
            return max;
        }
        static void Main(string[] args)
        {
            float x, y;
            Console.Write("輸入第1個要比較的數字(浮點數):");
            x = float.Parse(Console.ReadLine());
            Console.Write("輸入第2個要比較的數字(浮點數):");
            y = float.Parse(Console.ReadLine());
            Console.WriteLine("輸入的二數 {0} 和 {1} 之間大的數是 {2}", x, y, max(x, y));
            Console.ReadKey();
        }
    }
}
  【參考資料】

【本週作業】

完成 行動電話通話費的計算程式:問題連結

本週作業需完成二個版本:主控台版本及Windows Form版本。

【寫法提示】

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int fare = 0;
            int time = 0;
            double money = 0.0;
            char YN;

            do
            {

                Console.Write("請輸入月租費方案:");
                fare = Int32.Parse(Console.ReadLine());
                Console.Write("請輸入通話秒數:");
                time = Int32.Parse(Console.ReadLine());
                if (fare == 386)
                {
                    money = time * 0.08;
                    if (money <= 386) money = 386;
                    else if (money <= 386 * 2) money = money * 0.8;
                    else money = money * 0.7;
                }

                Console.WriteLine("您本月要繳的通話費為{0}", money);

                Console.Write("是否繼續執行?(Y/N)");
                YN = Console.ReadKey().KeyChar; //取得輸入的字元(單一個按鍵)
                Console.WriteLine();

            } while (YN == 'Y' || YN == 'y');
        }
    }
}
 
第六章  陣列的運用 這是 Office Online 提供的內嵌 Microsoft Office 簡報。
延續上週
1.程式作業解析 2.文字檔的讀取

https://msdn.microsoft.com/zh-tw/library/ezwyzy7b.aspx

【程式設計】【C#】使用OpenFileDialog來開啟文字檔案

3.設計小算盤  4.方法 (區域變數/方法變數 vs. 類別變數/物件變數) 這是 Office Online 提供的內嵌 Microsoft Office 簡報。
清明節放假
1.文字檔的讀取

參考資料 https://msdn.microsoft.com/zh-tw/library/ezwyzy7b.aspx

【程式設計】【C#】使用OpenFileDialog來開啟文字檔案

【程式設計】【C#】開啟CSV資料檔案(.csv)並處理資料

2.作業:延續上面資料檔的讀取,加總每個人3個成績並算出每個人的平均成績。 3.方法 (區域變數/方法變數 vs. 類別變數/物件變數) 這是 Office Online 提供的內嵌 Microsoft Office 簡報。
期中考 

第二學期各週教學內容與習題資料 Week 10~18

W10(4/26)W11(5/3)W12(5/10)W13(5/17)W14(5/24)W15(5/31)W16(6/7)W17(6/14)W18(6/21)
重要:本週講解關於物件導向的觀念

【程式設計】【C#】開啟CSV資料檔案(.csv)並處理資料 (有增加資料,和上週不同)

【作業1】將2維的浮點數陣列再增加一欄,填入每一位學生的成績平均。

【作業2】將2維的浮點數陣列再增加一列(最後一列),填入每次成績的平均(直的)。

【作業-挑戰題(加分)】將2維的浮點數陣列再增加一欄,找出前三名,第1名填1,第2名填2…,注意,必須處理同分的狀況。

【作業輸出參考:成績檔-排名 】

乒乓遊戲設計 【期末作業:小遊戲製作】 學期末,每位同學都要繳一個小遊戲,例: 乒乓遊戲進化版… 貪吃蛇 PacMan 青蛙過河 坦克大戰
分組活動 1.組員招募 2.組員工作角色指派 (程式、美工、音效、遊戲設計) 3.分組報告  
【程式設計】打磚塊遊戲  分組作業:下週早上九點,各組簡報,你們的打磚塊遊戲的特色版,加上你們的:
  • 遊戲設計
  • 美工設計
  • 音效設計
  • 程式設計
期末考試

第一學期 各週教學內容與習題資料 Week 1~9

W1 (091/14)W2 (091/21)W3 (091/28)W4 (10/5)W5 (10/12)W6 (10/19)W7 (10/26)W8 (11/2)W9 (11/9)
1.課程綱要介紹;2.教科書;3.參考書介紹;4.計分標準說明;5.C# 語言簡介

Visual Studio整合式開發環境介紹

第一週 作業 說明

作業繳交方式:請將作業過程錄影(使用免費的錄影工具ocam或active presenter),上傳至youtube,交給學藝整理連結。

流程控制 - 重複結構

作業 1 :

 

作業2:

做一個介面讓二個使用者輪流下,程式要求:
  1. 已經選了的方塊不能再選
  2. 判斷O或X瀛
  3. 重複程式或結束
tictactoe

對話方塊範例:

 DialogResult r = MessageBox.Show(winner + " win! 重玩?", "分成勝負了!", MessageBoxButtons.YesNo);

                if (r == DialogResult.Yes) //若使用者按了Yes,清空按鈕上的文字
                {

                    button1.Text = "";
                    button2.Text = "";
                    button3.Text = "";
                    button4.Text = "";
                    button5.Text = "";
                    button6.Text = "";
                    button7.Text = "";
                    button8.Text = "";
                    button8.Text = "";

                    isX = true; return;
                }
                else this.Close(); //不玩了,結束程式!

作業繳交方式: 1.安裝螢幕錄製軟體(oCam、everCam或其他),錄製作業製作過程及執行畫面,為了要識別是否為個人的作業,參考上面畫面,一開始就將自己的學號及學號設計放在畫面上,再做後面的動作。 2.將作業錄影檔上傳至Youtube或Vimeo等免費影音平台。 3.將作業錄影檔連結填到課程「程式設計」智慧大師:

%e7%a8%8b%e5%bc%8f%e8%a8%ad%e8%a8%88%e4%bd%9c%e6%a5%ad%e9%80%a3%e7%b5%90-%e6%99%ba%e6%85%a7%e5%a4%a7%e5%b8%ab
陣列- II
期中考 

各週教學內容與習題資料 Week 10~18

W10(11/16)W11(11/23)W12(11/30)W13(12/7)W14(12/14)W15(12/21)W16(12/28)W17(1/4)W18(1/11)
主題: 4~6課本習題作業解析 程式下載: 第4章:ch04%e7%bf%92%e8%a7%a32013 第5章:ch05%e7%bf%92%e8%a7%a32013 第6章:ch06%e7%bf%92%e8%a7%a32013 本週作業:(作業錄影連結請上課程的智慧大師平台填寫) 1. programming-numbersbigsmall 參考上圖,完成底下的程式: %e7%b0%a1%e5%96%ae%e7%9a%84%e6%af%94%e8%bc%83%e9%81%8b%e7%ae%97 2.完成魔方陣 %e9%ad%94%e6%96%b9%e9%99%a3%e8%bc%b8%e5%87%ba
主題: 1.流程圖 2.課本第6章習題解說 2.魔方陣的解說,if版本與取餘數循環版本,資料連結:http://wp.me/p7SbsS-JZ 本週作業: 程式作業: 1.設計一找零程式(畫面自行規劃設計),例:你上市場買菜,買了250元,付一千元,請問,菜販應該要怎麼找你錢才會使得找錢幣的數量是最低的? 2.輸入1個數字(畫面自行規劃設計),輸出其相對應的二進位、八進位及十六進位 紙本作業 繪出魔方陣的if版流程圖,作業紙課堂上發放。
本週作業: 完成一個巴斯卡三角形,此三角形列數為r,行數為c=2*r-1,程式要能輸入列數,據此產生rxc大小的巴斯卡三角形。 此次作業追加一個要求,過程中使用單步追蹤來確定程式執行各項變數的變化情況。 (作業錄影連結請上課程的智慧大師平台填寫)
巴斯卡三角形,一個元素的值為其左上角元素與右上角元素二個值的和。
巴斯卡三角形,一個元素的值為其左上角元素與右上角元素二個值的和。
 
  • Console 命令提示字元(DOS視窗)與Windows視窗 教材文章
  • 寫出字串至Console:Console.Write 與 Console.WrieLine
  • 進位的轉換解析,附:參考資料
  • 找零錢程式解析
本週作業,使用命令提示字元方式,錄影,先寫一行註解 標明 : 學號 姓名 作業名稱:分數分級(例)
  • 分數分級問題:將分數依 A:100~90 B:80~89 C:70~79 D:60~69 E:0~59 分等級
  • 華氏與攝氏的轉換

一、連續輸入範例:

using System;

public class Hello
{
    public static void Main()
    {
        string str1;
        int price, qty;
        Console.WriteLine();
        Console.WriteLine(" 富國電腦圖書廣場");
        Console.WriteLine("======================");
        Console.Write(" 1. 書名:");
        str1 = Console.ReadLine(); // 輸入書名並指定給 輸入書名並指定給str1變數

        Console.Write(" 2. 售價:");
        price = int.Parse(Console.ReadLine()); //將輸入的字串(數字)轉型成int整數型態的數值給price整數變數

        Console.Write(" 3. 數量:");
        qty = Convert.ToInt32(Console.ReadLine()); //將輸入的字串(數字)轉型成int整數型態的數值給qty整數變數,第2種轉換的方法

        Console.WriteLine("======================");
        Console.WriteLine(" 您訂購了 {0} 單價 {1} 元, 總金額:{2} 元", str1, price, price * qty);
        //另一種寫法:Console.WriteLine(" 您訂購了" + str1 + "單價" + price + "元, 總金額:" + (price * qty) + "元");

        Console.Read();
    }
}

二、輸出一字串,此字串有多筆數字,請將此字串中的數字解析出來,並將這些數字由小大到列印出來。 步驟:

  1. 使用字串分割方法String.Split,該方法會產生一個內含數字元素的字串陣列, 參考:https://msdn.microsoft.com/zh-tw/library/tabh47cf(v=vs.110).aspx
  2. 將上面步驟產出的字串中的元素,一個一個轉換成數字型態(int32, int16, float, double... ),將這些數字複製到另一個數字陣列。(新陣列的產生以上面陣列的長度作為建立新陣列大小的參數)
  3. 利用Array.Sort排序,參考:https://msdn.microsoft.com/zh-tw/library/system.array.aspx (預設是由小到大排序,如果要由大到小,如何做?)
  4. 使用foreach走訪陣列每一個元素,並列出來。
示範1:
using System;

namespace inputExample //將輸入的整行數字字串(數字間以空個分開)分割成字串數字
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("請數入一組數字(中間以空格隔開):");
            string input = Console.ReadLine(); //讀取整行,傳回字串

            string[] inputArray = input.Split(' '); //以空白字元方式將字串中的數字分割,並傳回所有數字的字串陣列
            
            foreach(string strNum in inputArray)  //走訪每一個在inputArray字串陣列中的元素,每次走訪的元素放入strNum變數中
            {
                Console.WriteLine(strNum);
            }

            Console.WriteLine("Press any key to close this application ... ");

            Console.ReadKey(); //讓程式等待使用者…
        }
    }
}
  示範2:
using System;

namespace inputExample //將輸入的整行數字字串(數字間以空個分開)分割成字串數字
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = Console.ReadLine(); //讀取整行,傳回字串

            string[] inputArray = input.Split(' '); //以空白字元方式將字串中的數字分割,並傳回所有數字的字串陣列
            int[] inputNumArray = new int[inputArray.Length];

            Console.WriteLine("將字串裏的數字一一印出:");

            int i = 0;
            foreach(string strNum in inputArray)  //走訪每一個在inputArray字串陣列中的元素,每次走訪的元素放入strNum變數中
            {
                inputNumArray[i] = Convert.ToInt32(strNum);
                i++;
                Console.WriteLine(strNum);
            }

            Array.Sort(inputNumArray);
            Console.WriteLine("rn將數字陣列排序,並列印資料:");

            foreach (int num in inputNumArray)  //走訪每一個在inputArray字串陣列中的元素,每次走訪的元素放入strNum變數中
            {
                Console.Write(num + "  " );
            }

            Console.WriteLine("rnPress any key to close this application ... ");

            Console.ReadKey(); //讓程式等待使用者…
        }
    }
}

三、找零錢程式

using System;

namespace inputExample
{
    class Program
    {
        static void Main(string[] args)  //找零錢程式
        {
            Console.Write("輸入消費金額:");
            string input = Console.ReadLine(); 
            int amount = int.Parse(input);

            Console.Write("輸入投入的金額:");
            input = Console.ReadLine();
            int money = int.Parse(input);

            money = money - amount; //要找的金額
            Console.WriteLine("找錢的種類及數量");
            Console.WriteLine("================");

            Console.WriteLine("500:{0}張", money / 500);
            money = money % 500;

            Console.WriteLine("100:{0}張", money / 100);
            money = money % 100;

            Console.WriteLine("50:{0}枚", money / 50);
            money = money % 50;

            Console.WriteLine("10:{0}枚", money / 10);
            money = money % 10;

            Console.WriteLine("5:{0}枚", money / 5);
            money = money % 5;

            Console.WriteLine("1:{0}枚", money);
            

            Console.WriteLine("rnPress any key to close this application ... ");

            Console.ReadKey(); //讓程式等待使用者…
        }
    }
}
 

四、提問:在做字串轉成數字時,字串若不符合數字格式的話,會產生例外狀況而結束程式,我們要如何檢查此例外狀況?並且做出適當的處置?(提示:try...catch)

五、本週作業,使用命令提示字元方式,錄影,先寫一行註解 標明 : 學號 姓名 作業名稱:分數分級(例)

  • 印出一數N的質因數 做法提示: 判斷2~(N-1)是否為N的因數,並且是否為質數
先學會求因數:
using System;

public class Hello
{
    public static void Main()
    {
        int N;
        Console.Write("請輸入1個整數:");
        N = int.Parse(Console.ReadLine());

        Console.Write("{0}的因數:1,", N);
        for (int i = 2; i <= N-1; i++)
        {
            if (N % i == 0) //如果整除,那麼i就是N的因數
            {
                Console.Write("{0},", i);
            }
        }
        Console.Write(N);

        Console.Read();
    }
}
質因數完整解法:
/*
 質因數
先求因數,再判斷因數是否為質數 
 */
using System;

public class Hello
{
    public static void Main()
    {
        int N;
        Console.Write("請輸入1個整數:");
        N = int.Parse(Console.ReadLine());

        Console.Write("{0}的質因數:", N);
        for (int i = 2; i <= N-1; i++)
        {
            if (N % i == 0)
            {
                bool isPrime = true;

                for (int j = 2; j <= i - 1; j++)
                {
                    if (i % j == 0) isPrime = false;
                }

                if (isPrime == true) Console.Write("{0},", i);
            }
        }

        Console.Write("b b"); //將最後一個逗點去掉
       
        Console.Read();
    }
}
 

.C#方法

using System;

public class Hello
{
    static int SUM(int n1, int n2) 
    {
        return n1 + n2;
    }
    static float SUM(float n1, float n2)
    {
        return n1 + n2;
    }
    public static void Main()
    {
        int n1, n2;
        Console.Write("請輸入第1個整數:");
        n1 = int.Parse(Console.ReadLine());

        Console.Write("請輸入第2個整數:");
        n2 = int.Parse(Console.ReadLine());

        Console.WriteLine("{0} + {1} = {2} ", n1, n2, SUM(n1,n2));

        Console.Read();
    }
}
 

方法 (C# 程式設計手冊)

.質因數解說

using System;

public class Hello
{
    public static void Main()
    {
        int N;
        Console.Write("請輸入1個整數:");
        N = int.Parse(Console.ReadLine());

        Console.Write("{0}的質因數:", N);
        for (int i = 2; i <= N-1; i++)
        {
            if (N % i == 0) //i是N的因數,底下再判斷i是否為質數
            {
                bool isPrime = true;

                for (int j = 2; j <= i - 1; j++)
                {
                    if (i % j == 0) isPrime = false; //只要2~i-1有1數可整除i,那麼i就一定不是質數
                }

                if (isPrime == true) Console.Write("{0},", i);
            }
        }

        Console.Write("b b"); //將最後一個逗點去掉
       
        Console.Read();
    }
}

.完全數解說

/*
完全數
 */
using System;


public class Hello
{
    static bool isPerfectNumber(int N)
    {
        int sum = 1;
        for (int i = 2; i <= N - 1; i++)
        {
            if (N % i == 0)
            {
                sum = sum + i;
            }
        }
        if (sum == N) return true;
        else return false;
    }
    public static void Main()
    {

        Console.Write("小於9999的完全數:");
        for (int i = 2; i <= 9999; i++)
        {
            if (isPerfectNumber(i) == true) Console.Write("{0},",i);
        }

        Console.Write("b b(end)");
       
        Console.Read();
    }
}
 

.本週作業:

  1. 大值判斷,寫一方法MAX,傳入2個整數(int),傳回其中較大者
  2. 小值判斷,寫一方法MIN,傳入2個整數(int),傳回其中較小者
  3. 質數判斷 寫一方法isPrime,傳入1個整數(int),判斷是否為質數,若是傳回true,不是的話傳回false
  4. 閏年判斷,寫一方法isLeapYear,傳入年份,型態為整數(int),判斷是否為閏年,若是傳回true,不是的話傳回false
  5. 利用第3題作出來的質數判斷方法,印出一數N的質因數。
  6. 本週作業反思:在解質因數問題時,使用方法呼叫與不使用方法呼叫(上週的作業)之間的差異。
本週程式作業.:連結

期末考試分成二段:

選擇題:close book,範圍為下面題庫。 (13:10考,30分鐘)

程式題:open book,可帶任何資料,範圍為整個學期的程式作業。 (13:50考,180分鐘)

學期考試題庫:

【C#-題庫】運算子 OPERATOR 【C#-題庫】資料型態 【C#-題庫】基本程式設計題目 【C#-題庫】控制結構 【C#-題庫】陣列 (Arrays) 【C#-題庫】字串 Strings 本週作業(3976):連結
期末考試