電腦與問題解決 高慧君 台北市立南港高中 2010年4月
教學目標 培養學生演算法思維的技巧(垂直思考)。 培養學生運用電腦解決問題的能力。 授課重點 引導學生如何分析問題 引導學生如何擬定解題策略 引導學生如何(運用電腦)實作解題過程
軟體應用與電腦解題 第三單元:電腦軟體(應用軟體實作) 第五單元:電腦與問題解決(程式設計) 人類運用電腦來解決特定的問題,例如:上網查資料、使用試算表來統計與分析資料等 第五單元:電腦與問題解決(程式設計) 人類設計電腦程式來解決問題,電腦可取代人力,完成資料的自動化處理
為何選Visual C# 免費:Visual C# 2008 Express C#是C Like語言 提供主控台應用程式:易學易用 支持視窗軟體(Windows)的開發
教學內容 傳統主題:基礎程式設計 輸入與輸出 變數與陣列 運算式 流程控制 新興主題:mp3鬧鐘 視窗程式開發 多媒體程式開發
新增專案
操作環境介紹 執行程式 程式碼編輯區
程式進入點 Main()
程式碼 Console.WriteLine() 是一種資料輸出的方法 Console.ReadLine() 是一種資料輸入的方法
執行程式
資料的輸入與輸出
輸出資料到螢幕 Console.Write(); Console.WriteLine(); ※智慧型輸入 在打程式碼過程中,會自動顯示出物件的屬性方法供你選擇,很方便。
由鍵盤輸入資料 Console.Read(); Console.ReadLine();
由文字檔案輸入資料
變數與陣列
常用的資料型態 整數:int(32位元), long(64位元) 小數:float, double 字串:string 布林值:bool 控制項物件:Button, Label
陣列的宣告 語法1 (固定長度) 語法2 (不定長度) 資料型別[ ] 陣列名稱 = new 資料型別[陣列大小]; 例如:int[ ] score = new int[10]; 例如:Button[] Disk = new Button[] {disk1, disk2, disk3} 語法2 (不定長度) ArrayList 陣列名稱 = new ArrayList();
運算子
指定運算
算術運算 加 + 減 - 乘 * 除 / 取餘數 %
關係運算 關係運算子 意義 關係運算式 = = 相等 a = = b ! = 不相等 a ! = b < 小於 a < b < = 小於或等於 a < = b > 大於 a > b > = 大於或等於 a > = b
邏輯運算 邏輯運算子 意義 邏輯運算式 && 且(And) A && B | | 或(Or) A || B ! 非(Not) ! A
遞增及遞減運算 遞增運算(++) 遞減運算(--)
流程控制
循序結構 程式的執行順序,是由程式的第一行敘述開始,由上而下逐步執行到最後一行。
選擇結構 if (條件式) { 敘述區塊1; } else 敘述區塊2;
重複結構 條件式: while (條件式) { 敘述區塊; } 計數式: for (int i=初值; 條件; 增值) { 敘述區塊; }
解題練習
範例1:輸入與輸出 任務)請使用者輸入姓名與年齡。 static void Main(string[] args) { string YourName; int age; Console.Write("請輸入你的名字:"); YourName = Console.ReadLine(); Console.WriteLine("Hello, {0}", YourName); Console.Write("請輸入你的年齡:"); age = Int.Parse(Console.ReadLine()); Console.WriteLine("{0}您好!您是{1}歲", YourName, age); Console.ReadLine(); }
範例2:檔案讀取 任務)讓使用者輸入一個成績,判斷是否及格。 using System.IO; FileInfo file = new FileInfo("c:\\grade.txt"); StreamReader sr = file.OpenText(); int score1, score2, score3; double average; score1 = int.Parse(sr.ReadLine()); score2 = int.Parse(sr.ReadLine()); score3 = int.Parse(sr.ReadLine()); average = (score1 + score2 + score3) / 3.0; Console.WriteLine("平均是{0:f}分", average); Console.Read(); sr.Close();
範例3:選擇結構 任務)讓使用者輸入一個成績,判斷是否及格。 int Score; Console.WriteLine(“您好,請問您的國文成績是幾分?”); Score = int.Parse(Console.ReadLine()); if (Score<60) { Console.WriteLine(“不及格囉~您的國文是{0}分”, Score); } else Console.WriteLine(“恭喜及格~您的國文是{0}分”, Score);
範例4:重複結構 任務)讀入檔案的10個分數。使用for語法。 using System.IO; FileInfo file = new FileInfo("c:\\grade.txt"); StreamReader sr = file.OpenText(); for (int i=1; i<=10; i++) { Console.WriteLine(sr.ReadLine()); } Console.Read(); sr.Close();
範例5:重複結構 任務)讀入檔案的不定個數的分數。使用while語法。 using System.IO; FileInfo file = new FileInfo("c:\\grade.txt"); StreamReader sr = file.OpenText(); while (sr.Peek() > 0) Console.WriteLine(sr.ReadLine()); } Console.Read(); sr.Close();
範例6:陣列 任務)讀入檔案中的10個分數。 using System.IO; FileInfo file = new FileInfo("c:\\grade.txt"); StreamReader sr = file.OpenText(); int[ ] score = new int[10]; for (int i=0; i<10; i++) { score[i]= int.Parse(sr.ReadLine()); } Console.Read(); sr.Close();
範例7:陣列 任務)讀入檔案中的不定個數的分數。 using System.IO; FileInfo file = new FileInfo("c:\\macdonald.txt"); StreamReader sr = file.OpenText(); ArrayList score = new ArrayList(); while (sr.Peek() > 0) { score.Add(sr.ReadLine()); }
視窗軟體實作 mp3鬧鐘
新增視窗應用程式專案
從功能表的「工具─選擇工具箱項目」 選取Windows Media Player選項。
拖曳「一般─Windows Media Player」 控制項到表單中
拖曳「所有Windows Form─DateTimePicker」到表單中 設定「Format:Time」、「ShowUpDown:True」
程式邏輯 設定鬧鐘時間,選取欲播放的MP3歌曲 按下「開始」按鈕,程式會縮小到工作列。 待時間到時,程式會放大並播放MP3歌曲。
事件:調整表單大小 private void Form1_Resize(object sender, EventArgs e) { if (this.WindowState == FormWindowState.Minimized) notifyIcon1.BalloonTipText = "哈哈,看不到我了吧"; notifyIcon1.ShowBalloonTip(3000); this.ShowInTaskbar = false; } // end if }
事件:點擊常駐列圖示 private void notifyIcon1_DoubleClick(object sender, EventArgs e) { this.WindowState = FormWindowState.Normal; this.ShowInTaskbar = true; }
事件:按下選歌按鈕 private void button1_Click(object sender, EventArgs e) { OpenFileDialog myFD = new OpenFileDialog(); myFD.Filter= "聲音檔(*.mp3)|*.mp3"; if (myFD.ShowDialog() == DialogResult.OK) textBox1.Text = myFD.FileName; axWindowsMediaPlayer1.URL = myFD.FileName; axWindowsMediaPlayer1.Ctlcontrols.stop(); } // end if }
事件:按下播放按鈕 private void button2_Click(object sender, EventArgs e) { axWindowsMediaPlayer1.Ctlcontrols.play(); }
事件:按下停播按鈕 private void button3_Click(object sender, EventArgs e) { axWindowsMediaPlayer1.Ctlcontrols.stop(); }
事件:按下開始按鈕 private void button4_Click(object sender, EventArgs e) { timer1.Start(); this.WindowState=FormWindowState.Minimized; this.ShowInTaskbar = false; }
事件:計時器 private void timer1_Tick(object sender, EventArgs e) { if ((dateTimePicker1.Value.Hour == DateTime.Now.Hour) && (dateTimePicker1.Value.Minute == DateTime.Now.Minute) && (dateTimePicker1.Value.Second == DateTime.Now.Second)) if (this.WindowState == FormWindowState.Minimized) this.WindowState = FormWindowState.Normal; this.ShowInTaskbar = true; } notifyIcon1.BalloonTipText = "醒醒!!"; notifyIcon1.ShowBalloonTip(5000); timer1.Stop(); axWindowsMediaPlayer1.Ctlcontrols.play(); // Start the music!