# 北軟96 pB 成績計算器 ###### tags: `北軟96` ## 題目: 設計一成績計算器程式,可從輸入的一整個字串當中取出這 N 筆數字來進行計算,並使它具有下列功能: 1. 可計算這 N(3<N<11)筆數字的平均值、最小值、最大值,及標準差。 (12 分) 標準差的定義如下:$\sigma = \sqrt{\dfrac{1}{N}\displaystyle{\sum_{i=1}^{N}{(x_i-m_x)^2}}}$,在此 $x_i$表示第 i 筆數字, $m_x$表示這些數字的平均值。 2. 可偵測下列輸入錯誤,並要求重新輸入。(8 分) 1. 如 N=6, 可偵測輸入不滿 6 個數字 2. 輸入有不是 0-9 以及空格以外的字 3. 輸入的數字其數值大於 100 3. 具有預設值的功能,如 N=6,可載入字串為”10 30 50 60 80 100”,以便用來檢驗此程式的功能是否正常。(5 分) ![](https://i.imgur.com/b2SntMQ.png) ## 想法: 這題比pA還更直觀更水題,似乎完全沒啥獨特的想法。 唯一必須要做處理的是驗錯的try和catch,我們可以將每個字串split,如果Convert.ToInt16()出現了問題,他將會throw FormatException,那我們同理,也可以進行throw exception的方式來驗錯,會讓程式碼比較簡便。 ## 程式碼(C#): ```csharp= using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace problemB { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private bool verificater(string str) { string[] split = str.Split(' '); try { if (split.Length != 6) throw new Exception(); for (int i = 0; i < split.Length; i++) { int a = Convert.ToInt16(split[i]); if (a > 100) throw new Exception(); } } catch (Exception e) { return false; } return true; } private void button2_Click(object sender, EventArgs e) { textBox1.Text = "10 30 50 60 80 100"; } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { if(verificater(textBox1.Text) == false) { MessageBox.Show("輸入錯誤,請重新輸入"); return; } string[] split = textBox1.Text.Split(' '); int[] number = new int[6]; for(int i = 0; i < number.Length; i++) { number[i] = Convert.ToInt16(split[i]); } int aver = 0; for(int i = 0; i < number.Length; i++) { aver += number[i]; } aver /= 6; int max = number.Max(); int min = number.Min(); double cnt = 0; for(int i = 0; i < number.Length; i++) { cnt += Math.Pow(number[i] - aver, 2); } cnt /= 6; cnt = Math.Sqrt(cnt); label2.Text += "平均值 = " + aver + Environment.NewLine; label2.Text += "最大值 = " + max + Environment.NewLine; label2.Text += "最小值 = " + min + Environment.NewLine; label2.Text += "標準差 = " + cnt + Environment.NewLine; } } } ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up