A. Circle类的继承

定义圆类Circle,包含半径r,属性R能判断半径r的合理性(r>0),计算圆面积的方法double Area()。

从Circle类派生出圆柱体类Cylinder类。该类新增圆柱体的高h,属性H能判断高h的合理性(h>0),新增计算圆柱体体积的方法double Volume()。

如果半径、高不合法,就设置其值为0。

在Main方法中,创建一个Cylinder对象,输入半径和高(两行输入),并输出该对象的底面半径,高,底面积以及体积(面积和体积用double Math.round(doulbe b, int digit) digit取1。

(要求:不使用构造方法,并且类中的字段为私有,方法为公有)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
using System;
// Written by Sheauhaw Jang
// 2020-11-03 10:10:09
namespace CSharp_Week6_A
{
class Circle
{
private double r;
public double R
{
get { return r; }
set { r = value > 0 ? value : 0; }
}
public double Area() { return Math.PI * R * R; }
}
class Cylinder : Circle
{
private double h;
public double H
{
get { return h; }
set { h = value > 0 ? value : 0; }
}
public double Volume() { return Area() * H; }
}
static class OutputConvert
{
public static void OutputString(string sop, params double[] opv)
{
string[] ops = new string[4];
for (int i = 0; i < 4; ++i)
{
opv[i] = Math.Round(opv[i], 1);
ops[i] = Convert.ToString(opv[i]);
}
Console.WriteLine(string.Join(" ", ops));
}
}
class Program
{
static void Main(string[] args)
{
Cylinder ans = new Cylinder();
ans.R = Convert.ToDouble(Console.ReadLine());
ans.H = Convert.ToDouble(Console.ReadLine());
OutputConvert.OutputString(" ", ans.R, ans.H, ans.Area(), ans.Volume());
}
}
}

B. Circle类的继承——带参构造方法

定义圆类Circle,包含半径r,属性R能判断半径r的合理性(r>0),计算圆面积的方法double Area()。

从Circle类派生出圆柱体类Cylinder类。该类新增圆柱体的高h,属性H能判断高h的合理性(h>0),新增计算圆柱体体积的方法double Volume()。

如果半径、高不合法,就设置其值为0。

在Main方法中,创建一个Cylinder对象,输入半径和高(两行输入),并输出该对象的底面积、体积。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
using System;
// Written by Sheauhaw Jang
// 2020-11-03 10:27:06
namespace CSharp_Week6_B
{
class Circle
{
private double r;
public double R
{
get { return r; }
set { r = value > 0 ? value : 0; }
}
public double Area() { return Math.PI * R * R; }
}
class Cylinder : Circle
{
private double h;
public double H
{
get { return h; }
set { h = value > 0 ? value : 0; }
}
public double Volume() { return Area() * H; }
}
static class OutputConvert
{
public static void OutputString(string sop, params double[] opv)
{
string[] ops = new string[opv.Length];
for (int i = 0; i < opv.Length; ++i)
{
opv[i] = Math.Round(opv[i], 1);
ops[i] = Convert.ToString(opv[i]);
}
Console.WriteLine(string.Join(" ", ops));
}
}
class Program
{
static void Main(string[] args)
{
Cylinder ans = new Cylinder();
ans.R = Convert.ToDouble(Console.ReadLine());
ans.H = Convert.ToDouble(Console.ReadLine());
OutputConvert.OutputString(" ", ans.Area(), ans.Volume());
}
}
}

C. 点线类练习

从点类(Point):包含:带可选参数的构造方法Point(int x=0, int y=0),

输出坐标点的方法ShowPoint以及读写坐标x、y的属性方法。

派生类(Line):计算线段的长度。Line类中新增表示线段终点的字段EndPoint,起点字段StartPoint。

计算线段距离的方法Distance以及输出线段起点和终点的方法ShowLine。

在主函数中,创建两个点对象,输出线段的距离。

【注:】本题编译通过即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using System;
// Written by Sheauhaw Jang
// 2020-11-03 11:09:15
namespace CSharp_Week6_C
{
class Point
{
public const int dim = 2;
private int[] xs = new int[dim];
public int X
{
get { return xs[0]; }
set { xs[0] = value; }
}
public int Y
{
get { return xs[1]; }
set { xs[1] = value; }
}
public int At(int x) { return x < dim ? xs[x] : 0; }
public Point(int x = 0, int y = 0) { X = x; Y = y; }
public void ShowPoint() { Console.WriteLine("({0}, {1})", X, Y); }
}
class Line
{
Point StartPoint, EndPoint;
public Line(Point sp, Point ep) { StartPoint = sp; EndPoint = ep; }
public void ShowLine()
{
Console.Write("StartPoint:");
StartPoint.ShowPoint();
Console.Write("EndPoint:");
EndPoint.ShowPoint();
}
Func<int, int> sq = x => x * x;
public double Distance()
{
int sqd = 0;
for (int i = 0; i < Point.dim; ++i)
sqd += sq(StartPoint.At(i) - EndPoint.At(i));
return Math.Sqrt(sqd);
}
public void ShowDistance() { Console.WriteLine(Distance()); }
}
class Program
{
static void Main(string[] args)
{
Point a = new Point(0, 0);
Point b = new Point(1, 1);
Line ab = new Line(a, b);
ab.ShowDistance();
}
}
}

D. Student类的继承练习

实现两个类。

StuGrade类。该类的作用是成绩相关的操作。包括:

私有字段 int[] gra(学生成绩);

构造函数 StuGrade(params int[] stusgra);用于初始化私有字段gra;

公有方法 public double AvgGrade();返回学生成绩的平均值。

Student类。包含:

2个public 自实现属性string Name(学生姓名)、string StuNum(学号);

1个private字段 string stuClass(学生班级);

1个StuGrade对象 stuG;

1个公有方法public bool IsStuNo(string s,out int res)。检测学号是否合法。其中s是待检查的学号。学号必须是8位数字,21开头。不是8位数字res置1,非21开头res置2。合法res=学号。

1个公有方法public bool AddStu(string name, string sno, StuGrade stug, string stuclass= "数学")。如果学号合法的对象,将姓名、学号、成绩、班级(默认是数学)赋值,返回true。否则,不赋值,返回false。

在Main函数中,新建Student类对象stu,并接收控制台输入的信息.

【样例输入】

姓名,学号

成绩

如果输入学号合法,输出 学号:Success!AverageGrade:平均分

如果输入学号非法,输出 学号:Invalid!Error Code:res的值

例如:

新建对象Student stu1,尝试对stu1设置信息Alex,20812000, 成绩是:1, 2, 3, 4, 5。将按照如下格式输出

20812000:Invalid!Error Code:2

新建Student类对象stu2 ,尝试对stu2设置信息Bob,21812000, 成绩是:1, 2, 3。将按照如下格式输出

21812000:Success!AverageGrade:2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
using System;
// Written by Sheauhaw Jang
// 2020-11-03 10:30:01
namespace CSharp_Week6_D
{
class StuGrade
{
private int[] gra;
public StuGrade(params int[] stusgra)
{
gra = stusgra;
}
public double AvgGrade()
{
double ans = 0;
foreach (int sig in gra)
ans += sig;
ans /= gra.Length;
return ans;
}
}
class Student
{
public string Name { get; set; }
public string StuNum { get; set; }
private string stuClass;
StuGrade stuG;
const int vlen = 8;
const string chpre = "21";
public static bool IsStuNo(string s, out int res)
{
if (s.Length != vlen) { res = 1; return false; }
for (int i = 0; i < chpre.Length; ++i)
if (s[i] != chpre[i])
{
res = 2;
return false;
}
res = Convert.ToInt32(s);
return true;
}
public bool AddStu(string name, string sno, StuGrade stug, string stuclass = "数学")
{
int nov;
if (!IsStuNo(sno, out nov))
return false;
Name = name;
StuNum = sno;
stuG = stug;
stuClass = stuclass;
return true;
}
}

public static class InputConvert
{
public static int[] GetInputArray(char SplitOperator)
{
string[] instr = Console.ReadLine().Split(SplitOperator);
int[] invar = new int[instr.Length];
for (int i = 0; i < invar.Length; ++i)
invar[i] = Convert.ToInt32(instr[i]);
return invar;
}
}
class Program
{
static void Main(string[] args)
{
string[] nameid = Console.ReadLine().Split(',');
int res;
if (!Student.IsStuNo(nameid[1], out res))
Console.WriteLine("{0}:Invalid!Error Code:{1}", nameid[1], res);
else
{
StuGrade sg = new StuGrade(InputConvert.GetInputArray(','));
Console.WriteLine("{0}:Success!AverageGrade:{1}", nameid[1], sg.AvgGrade());
}
}
}
}