基于.net的应用开发技术-上机三

题目一:请定义一个交通工具(Vehicle)的类,其中有:

⦁ 字段:速度(speed),体积(size);

⦁ 方法:移动(move()),设置速度(setSpeed(int speed)),设置体积(setSize(int size))加速speedUp(),减速speedDown();

在测试类Vehicle中的main()中实例化一个交通工具对象,通过方法给它初始化speed,size的值,并打印出来。另外,调用加速,减速的方法对速度进行改变。

源程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MyExer3
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Vehicle v1 = new Vehicle();
            v1.SetSpeed(10);
            v1.SetSize(50);
            Console.WriteLine("初始化:speed={0},size={1}", v1.Speed, v1.Size);
            v1.SpeedUp(5);
            Console.WriteLine("加速后:" + v1.Speed);
            v1.SpeedDown(9);
            Console.WriteLine("减速后:" + v1.Speed);
            Console.ReadLine();
        }
    }
    class Vehicle { //定义一个交通工具类

        private int speed;
        private int size;

        public int Speed { 
        get { return speed; }
            set { speed = value; }
        }

        public int Size { 
        get { return size; }
            set { size = value; }
        }

        public void Move() { 
        }

        public void SetSpeed(int speed) {
            this.speed = speed;
            Console.WriteLine("速度为:"+speed);
        }

        public void SetSize(int size)
        {
            this.Size = size;
            Console.WriteLine("体积为:" + size);
        }

        public void SpeedUp(int a) {
            speed += a;
        }

        public void SpeedDown(int a) {
            speed -= a;
        }
    }
}

运行结果:

题目二:试编写一个函数compute(int a,int b,int sum,int sub,int mul,int quo ),其中sum、sub、mul、quo分别是a,b的和、差、积、商。并编写主函数测试上述函数。提示:和、差、积、商分别采用ref和out形参两种方式实现。

源程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace exer3
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int a = 10;
            int b = 5;
            int sum = 0;
            int sub = 0;
            int mul = 0;
            int quo = 0;
            Console.WriteLine("以下采用ref方式:");
            compute(2,ref b,sum,sub,mul,quo);
            Console.WriteLine("以下采用out方式:");
            compute2(a, out b, sum, sub, mul, quo);
            Console.ReadLine();
        }

        //ref方法
        public  static void compute(int a,ref int b, int sum, int sub, int mul, int quo) {
            sum = a + b;
            sub = a - b;
            mul = a * b;
            quo = a / b;
            string s = "和:" + sum + " 差:" + sub + " 积:" + mul + " 商:" + quo;
            Console.WriteLine(s);
        }

        public static void compute2(int a,out int b, int sum, int sub, int mul, int quo)
        {
            b = 3;
            sum = a + b;
            sub = a - b;
            mul = a * b;
            quo = a / b;
            string s = "和:" + sum + " 差:" + sub + " 积:" + mul + " 商:" + quo;
            Console.WriteLine(s);
        }
    }
}

运行结果:

题目三:定义一个接口,它含有两个方法:一个方法用于实现两个数中求最小的数,一个方法用于实现在2个数中求最大的数。定义一个类实现这个接口,再定义派生类中,给出方法Max()、方法Min()的实现; 试在主函数中通过委托MyDelegate的对象md来分别调用上述两个方法Max、Min求一个一维数组的最大值及最小值。

源程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace exer2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            MyTest myTest = new MyTest();
            MyDelegate md1 = new MyDelegate(myTest.Max);
            MyDelegate md2 = new MyDelegate(myTest.Min);
            Console.WriteLine("在一维数组[90,45,27]中最大值为:{0},最小值为:{1}" ,md1(90,45,27), md2(90, 45, 27));
            Console.ReadLine();
        }
    }

    public interface Sort {
        int Max(int a,int b,int c);
        int Min(int a,int b,int c);
    }

    public delegate int MyDelegate(int a,int b,int c);
    public class MyTest : Sort
    {
        public int Max(int a,int b,int c)
        {
            int max = 0;
            if (a > b)
            {
                max = a;
            }
            else {
                max = b;
            }
            if (max > c)
            {
                return max;
            }
            else { 
                return c;
            }
        }

        public int Min(int a, int b, int c)
        {
            int min = 0;
            if (a < b)
            {
                min = a;
            }
            else
            {
                min = b;
            }
            if (min < c)
            {
                return min;
            }
            else
            {
                return c;
            }
        }
    }
}

运行结果:

题目四:定义一个抽象的"Role"类,有用户名,密码,权限等成员变量

1)要求尽可能隐藏所有变量,再通过属性对各变量进行读写。再定义一个具有抽象的play()方法,

该方法只输出用户名,不返回任何值,同时至少定义两个构造方法。

2)从Role类派生出一个"Student"类,该类具有Role类的所有成员(构造方法除外),并扩展number成员变量,同时增加一个静态成员变量“telephone”。

同样要有至少两个构造方法,并定义覆盖play()方法。

3)在Main()方法中生成Student的对象,并测试这些对象的方法。

源程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace exer4
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Student student = new Student("biubiu","@lwy",false,105,12345);
            student.play();
            student.printStudent();
            Console.ReadLine();
        }
    }

    public abstract class Role {
        private string name;
        private string pwd;
        private bool authority;//权限

        public Role() { 
        }

        public Role(string name,string pwd,bool authority) {
            this.name = name;
            this.pwd = pwd;
            this.authority = authority;
        }

        public string Name {
            get { return name; }
            set { name = value; }
        }

        public string Pwd { 
        get { return pwd; }
        set { pwd = value; }
        }

        public bool Authority
        {
            get { return authority; }
            set { authority = value; }
        }

        public abstract void play();
    }

    public class Student : Role {
        private int number;
        static int telephone;

        public Student() { 
        }

        public Student(Role role, int number)
        {
            Role = role;
            this.number = number;
        }

        public Student(string name, string pwd, bool authority,int number,int tel) { 
            Name = name;
            Pwd = pwd;
            Authority = authority;
            this.number = number;
            telephone = tel;
        }

        public Role Role { 
            get { return Role; }
            set { Role = value; }
        }

        public int Number { 
            get { return number; }
            set{ number = value; }
        }

        public override void play() {
            Console.WriteLine("已执行play()");
        }

        public void printStudent() //打印输出Student类
        {
            Console.WriteLine("学生信息: 姓名:{0},密码:{1},是否具有权限:{2},学号:{3},电话:{4}", Name, Pwd, Authority, number, telephone);
        }
    }
}

运行结果:

题目五:创建C#控制台应用程序,建立一个点类CzPoint,为其定义两个double类型的私有字段成员x和y,分别表示点的横坐标和纵坐标;对CzPoint类进行相等和不等操作符重载。注:两个坐标点相等,则指它们的横坐标和纵坐标都相等。

在Main()方法中对两个坐标点是否相同进行测试。

源程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace exer5
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.Write("请输入第一个点的横坐标:");
            double x1=double.Parse(Console.ReadLine());
            Console.Write("请输入第一个点的纵坐标:");
            double y1 = double.Parse(Console.ReadLine());
            Console.Write("请输入第二个点的横坐标:");
            double x2 = double.Parse(Console.ReadLine());
            Console.Write("请输入第二个点的纵坐标:");
            double y2 = double.Parse(Console.ReadLine());
            CzPoint c1 = new CzPoint(x1, y1);
            CzPoint c2 = new CzPoint(x2, y2);
            Console.WriteLine(c1 == c2);
            Console.ReadLine();
        }
    }

    class CzPoint
    { //判断坐标是否相等
        private double x;
        private double y;

        public double X
        {
            get { return x; }
            set { x = value; }
        }

        public double Y
        {
            get { return y; }
            set { y = value; }
        }

        public CzPoint()
        {
        }

        public CzPoint(double x, double y)
        {
            this.x = x;
            this.y = y;
        }

        //重载相等
        public static string operator ==(CzPoint c1, CzPoint c2)
        {
            if (c1.x == c2.x && c1.y == c2.y)
            {
                return "两点相等";
            }
            else
            {
                return "两点不等";
            }
        }
        //重载不等
        public static string operator !=(CzPoint c1, CzPoint c2)
        {
            if (c1.x == c2.x || c1.y == c2.y)
            {
                return "两点相等";
            }
            else
            {
                return "两点不等";
            }
        }
    }
}

运行结果:

测试相等:

测试不等:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、 点和直线类(综合型题目) (1)创建C#控制台应用程序L4_1。 (2)在程序中新建一个点类CzPoint,为其定义两个double类型的私有字段成员x和y,分别表示点的横坐标和纵坐标。 (3)为CzPoint定义两个公有属性X、Y,分别用于封装对字段x和y的读写访问。 (4)定义CzPoint的带参数构造函数,在其中对字段x和y进行初始化。 (5)为CzPoint定义公有方法Move,用于按指定的水平距离和垂直距离移动坐标点。 (6)对CzPoint类进行相等和不相等操作符重载。两个坐标点相等,是指它们的横坐标和纵坐标都相等。 (7)在程序主方法中创建两个坐标点对象,判断它们是否相等;而后将第一个坐标点移动到第二个坐标点上,再判断它们是否相等。 (8)在程序中再新建一个直线类CzLine,为其定义两个double类型的字段成员a 和b,分别表示直线的斜率和截距;再定义字段封装属性A和B,但它们都是只读的。 (9)为CzLine定义两个构造函数,一个根据斜率和截距来创建直线对象,另一个则根据两个CzPoint对象来构造直线对象(直线穿过这两个点)。后一个的参考源代码如下(因涉及数学公式,故给出代码): public CzLine(CzPoint p1,CzPoint p2) { this.a=(p2.Y-p1.Y)/(p2.X-p1.X); this.b=p1.Y-this.a*p1.X; } (10)为CzLine定义公有方法Move,但它只用于平移直线,而不改变直线的斜率(即平移后的直线与原来的直线平行)。再为其定义公有方法Contains,用于判断某点是否在该直线上。 (11)类似的,为CzLine重载相等和不相等操作符。 (12)最后在程序主方法中采用不同的方式创建直线对象,并编译运行程序,测试它们的使用效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值