2019独角兽企业重金招聘Python工程师标准>>>
1.本段程序实现的功能
1)通过积分的几何意义计算积分:计算函数曲线与坐标轴围成部分的面积,方法为将面积分为小块的矩形,依次计算矩形的面积并相加
2)程序通过Integration函数计算积分,该函数有三个参数:attr、left、right,分别代表:选用哪个函数进行计算、积分下界和积分上界。写一个函数,参数和返回值都是double类型,只要在其上加上[RemarkAttribute("函数标识")],并将“函数标识”字符串传入到attr参数中,Integration函数就可以自动选择这个函数进行积分计算了
2.函数实现
///
/// 示例函数1:f(x)=x*2
///
/// 自变量x
///
[RemarkAttribute("Double")]
public static double Function1(double x)
{return x * 2;
}///
/// 示例函数2:f(x)=x^2
///
/// 自变量x
///
[RemarkAttribute("Square")]
public static double Function2(double x)
{return x * x;
}///
/// 示例函数3:(x-1)^2+y^2=1 (y>=0)
///
/// 自变量x
///
[RemarkAttribute("HalfCircle")]
public static double Function3(double x)
{double result = 1 - (x - 1) * (x - 1);return Math.Sqrt(result >= 0 ? result : 0);
}///
/// 特性 RemarkAttribute,用在函数上,其 Remark 属性决定了
/// 积分函数 Integration 应该选择程序中的哪个函数进行计算
///
[AttributeUsage(AttributeTargets.Method)]
public class RemarkAttribute : Attribute
{string remark;public string Remark {get { return remark; }}//构造函数public RemarkAttribute(string comment) {remark = comment;}
}///
/// 计算积分
///
/// 原函数RemarkAttribute特性名
/// 积分下界
/// 积分上界
///
public static double Integration(string attr, double left, double right)
{//1.找到 RemarkAttribute 特性为 attr 的方法&#xff08;需要 using System.Reflection;&#xff09;MethodInfo[] mi &#61; typeof(Program).GetMethods();MethodInfo mthd &#61; null;foreach (MethodInfo m in mi){Type t2 &#61; typeof(RemarkAttribute);RemarkAttribute ra &#61; (RemarkAttribute)Attribute.GetCustomAttribute(m, t2);if (ra !&#61; null && ra.Remark &#61;&#61; attr){mthd &#61; m;break;}}//2.如果没有找到 RemarkAttribute 特性为 attr 的方法则报出异常if (mthd &#61;&#61; null){throw new Exception("没有特性为 " &#43; attr &#43; " 的方法");}//3.调用找到的方法&#xff0c;通过积分的几何意义求解面积double result &#61; 0;for (double i &#61; left; i < right; i &#43;&#61; 1E-6){result &#43;&#61; (double)mthd.Invoke(null, new object[] { i &#43; 5E-7 }) * 1E-6;}return result;
}
3.Main函数调用
static void Main(string[] args)
{Console.WriteLine("f(x)&#61;x*2 在 [0,2] 的积分&#xff1a;");Console.WriteLine(Integration("Double", 0, 2).ToString("#0.000"));Console.WriteLine("f(x)&#61;x^2 在 [0,2] 的积分&#xff1a;");Console.WriteLine(Integration("Square", 0, 2).ToString("#0.000"));Console.WriteLine("(x-1)^2&#43;y^2&#61;1 (y>&#61;0) 在 [0,2] 的积分&#xff1a;");//即函数 f(x)&#61;1-(x - 1)*(x-1) (0<&#61;x<&#61;2) 在 [0,2] 的积分Console.WriteLine(Integration("HalfCircle", 0, 2).ToString("#0.000"));Console.ReadLine();
}
4.运行示例