物件導向的習題

基礎篇

C# 簡介

開發環境

變數與運算

流程控制

陣列

函數

物件

例外處理

函式庫篇

檔案處理

資料結構

正規表達式

Thread

應用篇

視窗程式

媒體影音

網路程式

遊戲程式

手機程式

資料庫

雲端運算

特殊功能

委派

擴展方法

序列化

LinQ

WPF

網路資源

教學影片

投影片

教學文章

軟體下載

考題解答

101習題

  1. 請實作浮點數 (double) 陣列物件 Array
    • 必須包含「初始化建構函數 (傳入浮點陣列)、append (新增到尾端)」等函數。
  2. 請繼承陣列物件,實作堆疊物件 Stack
    • 必須包含「push、pop」等函數。
  3. 請繼承陣列物件,實作向量物件 Vector
    • 必須包含「add (兩向量相加)、inner (兩向量內積)、neg (負向量)、sub (兩向量相減)」等函數。

解答程式

using System;

namespace ccc.container
{
    class Program
    {
        static void Main(string[] args)
        {
            double pi = 3.14159;
            double e = 2.71828;

            Array a1 = new Array(10);
            a1.append(pi);
            a1.append(e);

            Stack s1 = new Stack(10);
            s1.push(pi);
            s1.push(e);
            double x = s1.pop();
            Console.WriteLine("x=" + x);

            double[] a = new double[] { 1.0, 2.0, 3.0 };
            double[] b = new double[] { 3.0, 2.0, 1.0 };
            Vector v1 = new Vector(a);
            Vector v2 = new Vector(b);
            v1.add(v2);
            v1.sub(v2);
            v1.neg();
            Console.WriteLine("v1.inner(v2)=" + v1.inner(v2));
        }
    }

    class Array
    {
        public double[] a;
        public int count = 0;

        public Array(int size)
        {
            a = new double[size];
        }

        public Array(double[] pa)
        {
            a = new double[pa.Length];
            for (int i = 0; i < a.Length; i++)
            {
                a[i] = pa[i];
            }
        }

        public void append(double t) {
            a[count] = t;
            count++;
        }
    }

    class Stack : Array
    {
        public Stack(int size) : base(size)
        {
        }

        public void push(double t)
        {
            append(t);
        }

        public double pop()
        {
            count--;
            return a[count];
        }
    }

    class Vector : Array
    {
        public Vector(double[] pa) : base(pa)
        {
        }

        public void add(Vector v2)
        {
            for (int i = 0; i < a.Length; i++)
            {
                a[i] = a[i] + v2.a[i];
            }
        }

        public void neg()
        {
            for (int i = 0; i < a.Length; i++)
            {
                a[i] = -1*a[i];
            }
        }

        public void sub(Vector v2)
        {
            for (int i = 0; i < a.Length; i++)
            {
                a[i] = a[i] - v2.a[i];
            }
        }

        public double inner(Vector v2)
        {
            double result = 0.0;
            for (int i = 0; i < a.Length; i++)
            {
                result += a[i] * v2.a[i];
            }
            return result;
        }
    }
}
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License