一、实验目的

  1. 掌握运算符重载。
  2. 掌握索引符的编写。
  3. 掌握常用非泛型集合类和集合类的使用;
  4. 掌握可空类型的使用

二、实验内容

(实验过程中编写的程序复制到本文件中,下课整理后上交)

  1. 运算符重载

复数包含实部和虚部,现要求生成一个复数类,包含:

1)属性

2)构造方法

3)重载ToString方法

4)重载两个运算符+和-

5)编写索引器操作double this[int index],当index为0时,可读写实部;当index为1时,可读写虚部。

5)编写静态方法static bool TryParse(string s, out Complex complex),将一个字符串解析为一个复数并输出,返回true。如果解析不成功,返回false。

提示:可使用double.TryParse(string s, out double value)方法;可使用string的IndexOf(char c)来搜索某个字符在字符串中的位置;可使用string的SubString(int start, int length)来提取子串。

源代码

using System;
using System.Diagnostics;namespace Homework17
{class Complex {private double real;private double image;/** 空参构造*/public Complex(){}/** 含参构造*/public Complex(double real, double image){this.real = real;this.image = image;}public double Real{get { return real; }set { real = value; }}public double Image{get { return image; }set { image = value; }}public double this[int index] {get {if (index == 0){return real;}else {return image;}}set {if (index == 0){real=value;}else{image = value;}}}/*** 重写toString方法,输出容易看的懂,方便*/public override String ToString(){return "(" + real + "+" + image + "i" + ")";}/* 复数的加法 */public static Complex operator +(Complex b, Complex c){return new Complex(b.Real+c.Real,b.Image+c.Image);}/* 复数的减法 */public static Complex operator -(Complex b, Complex c){return new Complex(b.Real - c.Real, b.Image - c.Image);}/* 复数的乘法 */public static Complex operator *(Complex b, Complex c){double real1;double image1;if (b.Image != 0 && c.Image != 0){//虚部不为0时real1 = (b.Real * c.Real) - (b.Image * c.Image);//两个虚部相乘是负数image1 = (b.Real * c.Image) + (b.Image* c.Real);}else{//当有其中一个虚部为0时real1 = (b.Real * c.Real);image1 = (b.Real * c.Image) + (b.Image * c.Real);}return new Complex(real1, image1); }public static bool TryParse(string s, out Complex complex) {complex = new Complex();try {double real;if (!double.TryParse(s.Substring(1, s.IndexOf('+') - 1), out real)){Console.WriteLine(real);return false;}double image;if (!double.TryParse(s.Substring(s.IndexOf('+') + 1, s.IndexOf('i')- s.IndexOf('+')-1), out image)){return false;}complex = new Complex(real, image);}catch(ArgumentOutOfRangeException e){return false;}return true;}public void printComplex(double real, double image){Console.WriteLine(new Complex(real, image));}}class Program{static void Main(string[] args){//这两行代码必须执行通过Complex c = new Complex(2, 3);c[0] = 2 * c[1];Test(c);//选做:优化代码,使得以下代码顺利执行c = new Complex(2, -3);Test(c);c = new Complex(2, 0);Test(c);c = new Complex(0, 2);Test(c);}public static void Test(Complex c){Console.WriteLine(c);Complex result;bool ok = Complex.TryParse(c.ToString(), out result);if (!ok)Console.WriteLine("错了");Console.WriteLine(result);Complex c2 = c + result;Console.WriteLine(c2);Debug.Assert(c2.Real == c.Real * 2);Debug.Assert(c2.Image == c.Image * 2);}}
}

运行结果

三、实验心得与体会

  1. 掌握运算符重载。
  2. 掌握索引符的编写。
  3. 掌握常用非泛型集合类和集合类的使用;
  4. 掌握可空类型的使用

参考文章

https://www.cnblogs.com/vsSure/p/8024802.html

https://blog.csdn.net/w15977858408/article/details/100783654

https://www.runoob.com/csharp/csharp-operator-overloading.html

C#——《C#语言程序设计》实验报告——泛型与集合——运算符重载相关推荐

  1. c语言程序设计实验报告2,C语言程序设计实验报告2.docx

    C语言程序设计实验报告2.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该 ...

  2. c 语言差错编码实验结果,C语言程序设计实验报告(四).doc11111111111111111.doc

    C语言程序设计实验报告(四).doc11111111111111111 C语言程序设计实验报告 姓 名吴文重学 号52系 别数学系班级2班主讲教师徐时芳指导教师徐时芳实验日期2011-11-8专业10 ...

  3. c语言选择循环实验报告,C语言程序设计实验报告选择与循环结构程序设计.doc

    C语言程序设计实验报告选择与循环结构程序设计.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的 ...

  4. c语言的简单程序设计实验报告,工程学院C语言程序设计实验报告

    <工程学院C语言程序设计实验报告>由会员分享,可在线阅读,更多相关<工程学院C语言程序设计实验报告(5页珍藏版)>请在人人文库网上搜索. 1.南京工程学院实验报告课程名称C 语 ...

  5. c语言程序设计植树,C语言程序设计实验报告——实验

    C语言程序设计实验报告--实验 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档 ...

  6. c语言程序设计数组实验报告,(C语言程序设计实验报告数组.doc

    (C语言程序设计实验报告数组 <C语言程序设计 >课程实验报告 实验名称 学 号_ 姓 名 ___ 班 别 实验日期: 年月日 实验报告日期: 年月日 指导老师: 实验地点: 成 绩: 评 ...

  7. c语言程序设计数组实验报告,c语言程序设计实验报告(数组).doc

    c语言程序设计实验报告(数组).doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3 ...

  8. c语言指针部分上机,北科大C语言程序设计实验报告8-指针-练习题代码(2次上机课内容)--...

    北科大C语言程序设计实验报告8-指针-练习题代码(2次上机课内容)-- 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文 ...

  9. c语言程序设计的实验报告,C语言程序设计实验报告

    以下为<C语言程序设计实验报告>的无排版文字预览,完整格式请下载 下载前请仔细阅读文字预览以及下方图片预览.图片预览是什么样的,下载的文档就是什么样的. 湖南科技大学 2019-2020第 ...

最新文章

  1. hibernate Expression详解
  2. 成员资格、授权和安全性(一)
  3. dell服务器 稳定性,设计优秀管理方便 戴尔R710服务器评测
  4. 网易Q2季报图解:游戏营收重回百亿 净利同比降29%
  5. 为什么都在吹鸿蒙,真的是吹爆鸿蒙
  6. 还在用 Win?教你从零把 Mac 打造成开发利器
  7. 【收集】11款Linux数据恢复工具
  8. 第十一天 安装Oracle数据库
  9. 智慧消防、消防管理、事件管理、维保巡检、应急管理、培训管理、值班管理、考试管理、设备列表、机构管理、应急预案、axure原型、rp原型
  10. Win10安装配置CLion+MinGW
  11. 厉害,刚刚官方宣布 IntelliJ IDEA 2020.2 EAP4发布了!
  12. “同样的”约束,不同的位置
  13. java开发环境变量的配置
  14. KPI关键绩效指标(Key Performance Indicator)
  15. 雨听|在wps中将某一页ppt导出为图片
  16. 【matplotlib】21.多图合并【python3、numpy、pandas、matplotlib完结】
  17. 推荐系统(十一) 2021-2022年工业界推荐算法实践经验汇总
  18. transition transform translate 之间的区别
  19. 在java里如何跨网页传参_【页面传值6种方式】- 【JSP 页面传值方法总结:4种】 - 【跨页面传值的几种简单方式3种】...
  20. 运筹学状态转移方程例子_动态规划 Dynamic Programming

热门文章

  1. java代码实现购物车小程序_使用Taro实现小程序商城的购物车功能模块的实例代码...
  2. 安卓虚拟linux系统教程,在Linux上模拟Android应用程序的3种方法 | MOS86
  3. java 获取 邮箱联系人_在android中读取联系人信息的程序,包括读取联系人姓名、手机号码和邮箱...
  4. PHP调用tushare,python调用tushare获取沪股通、深股通成份股数据
  5. 我的世界梦之边缘5服务器在维护吗,8月5日服务器例行维护公告(已完成)
  6. python复制多个文件_python 之 复制多个模板文件
  7. go mongodb排序查询_「赵强老师」MongoDB中的索引(下)
  8. python必刷面试_Python面试必刷题系列(5)
  9. 【数据挖掘实例】构建Xgboost模型,在电力用户的95598工单数据中的电费敏感用户预测(高敏用户模型)
  10. 二十九、Node.js连接Mysql和MongoDB数据库CURD操作