目录02
一、简介03
二、题目要求04
1、**介绍04
2、主要结构05
3、其他要求06
三、需求分析及解决方法06
1、从面相过程到面相对象06
2、宏定义问题07
3、数据存储08
4、文件读取08
5、多线程09
四、总结10
附件10一、引言。
c#是微软发布的一种面向对象的于netframework之上的高级程序设计语言。c#是一种安全的、稳定的、简单的、优雅的由c和c++衍生出来的面向对象的编程语言。它在继承c和c++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。
c#综合了vb简单的可视化操作和c++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为。net开发的首选语言。
c#在某种程度上可以看作是。net 面向windows环境的一种编程语言。在过去的十几年里,microsoft给windows 和windows api添加了许多功能,vb和c++也经历了许多变化。
虽然vb和c++最终已成为非常强大的语言,但这两种语言也存在问题,因为它们保留了原来的一些内容。对于visual basic来说,它的主要优点是很容易理解,许多编程工作都很容易完成,基本上隐藏了windows api和com组件结构的内涵。其缺点是visual basic从来没有实现真正意义上的面向对象,所以大型应用程序很难分解和维护。
另外,因为vb 的语法继承于basic的早期版本(basic主要是为了让初学者更容易理解,而不是为了编写大型商业应用程序),所以不能真正成为结构化或面向对象的编程语言。另一方面,c++在ansi c++语言定义中有其自己的根。它与 ansi不完全兼容,因为microsoft是在ansi 定义标准化之前编写c++编译器的,但已经相当接近了。
遗憾的是,这导致了两个问题。其一, ansi c++是在十几年前的技术条件下开发的,因此不支持现在的概念(例如unicode字符串和生成xml文档),某些古老的语法结构是为以前的编译器设计的(例如成员函数的声明和定义是分开的)。其二,microsoft同时还试图把c++演变为一种用于在windows上执行高性能任务的语言—— 在语言中避免添加大量microsoft专用的关键字和各种库,其结果是在windows中,该语言成为了一种非常杂乱的语言。
让一个c++开发人员说说字符串有多少个定义方式就可以说明这一点:char*、 lptstr、string、cstring (mfc版本)、cstring (wtl 版本)、wchar_t*和 olechar*等。现在进入。
net 时代—一种全新的环境,它对这两种语言都进行了新的扩展。microsoft给c++添加了许多microsoft专用的关键字,并把vb演变为保留了一些基本的vb语法,但在设计上完全不同,从实际应用的角度来看, 是一种新语言。在这里,microsoft决定给开发人员另一个选择—专门用于。
net、 具有新起点的语言,即 visual c# .net。microsoft 在正式场合把 c# 描述为一种简单、现代、面向对象、类型非常安全、派生于c和c++的编程语言。
大多数独立的评论员对其说法是“派生于 c、c++和j**a”。这种描述在技术上是非常准确的,但没有涉及到该语言的真正优点。从语法上看,c#非常类似于c++和j**a,许多关键字都是相同的,c#也使用类似于c++和j**a的块结构,并用括号({}来标记**块,用分号分隔各行语句。
对c#**的第一印象是它非常类似于c++或j**a**。但在这些表面上的类似性后面,c#学习起来要比 c++容易得多,但比j**a难一些。其设计与现代开发工具的适应性要比其他语言更高,它同时具有visual basic的易用性、高性能以及c++的低级内存访问性。
c#包括以下一些特性:完全支持类和面向对象编程,包括接口和继承、虚函数和运算符重载的处理;定义完整、一致的基本类型集;对自动生成 xml 文档说明的内置支持;自动清理动态分配的内存; 可以用用户定义的特性来标记类或方法。这可以用于文档说明,对编译有一定的影响(例如,把方法标记为只在调试时编译);对。
net 基类库的完全访问权,并易于访问windows api;可以使用指针和直接内存访问, c#语言可以在没有它们的条件下访问内存;以vb的风格支持属性和事件;改变编译器选项,可以把程序编译为可执行文件或。net组件库,该组件库可以用与activex控件(com 组件)相同的方式由其他**调用;c#可以用于编写 动态web页面和xml web服务。应该指出,对于上述大多数特性,和 managed c++也具备。
但 c#从一开始就使用。net,对。net特性的支持不仅是完整的,而且提供了比其他语言更合适的语法。
c#语言本身非常类似于j**a,但其中有一些改进,因为j**a并不是为应用于。net环境而设计的。最后还要指出 c#的两个局限性。
其一是该语言不适用于编写时间急迫或性能非常高的**例如一个要运行1000或1050次的循环,并在不需要这些循环时,立即清理它们所占用的资源。在这方面,c++可能仍是所有低级语言中的佼佼者。其二是c#缺乏性能极高的应用程序所需要的关键功能,包括保证在**的特定地方运行的内联函数和析构函数。
但这类应用程序非常少。
二、题目介绍。
1.题目要求。
修改一份c语言**为c#**。
2.**介绍。
一个非常简单的遗传算法源**,是由denis cormier (north carolina state university)开发的,sita (university of north carolina at charlotte)修正。**保证尽可能少,实际上也不必查错。对一特定的应用修正此**,用户只需改变常数的定义并且定义“评价函数”即可。
注意**的设计是求最大值,其中的目标函数只能取正值;且函数值和个体的适应值之间没有区别。该系统使用比率选择、精华模型、单点杂交和均匀变异。
如果用gaussian变异替换均匀变异,可能得到更好的效果。**没有任何图形,甚至也没有屏幕输出,主要是保证在平台之间的高可移植性。读者可以从目录 coe/evol中的文件中获得。
要求输入的文件应该命名为‘系统产生的输出文件为‘输入的文件由几行组成:数目对应于变量数。且每一行提供次序——对应于变量的上下界。
如第一行为第一个变量提供上下界,第二行为第二个变量提供上下界,等等。
3.**主要结构。
i.数据定义。
#define popsize 50population size */
#define maxgens 1000max. number of generations */
#define nvars 3no. of problem variables */
#define pxover 0.8probability of crossover */
#define pmutation 0.15probability of mutation */
#define true 1
#define false 0
int generationcurrent generation no. *
int cur_bestbest individual */
ii.存储结构。
struct genotype /*genotype (gt), a member of the population */
double gene[nvarsa string of variables */
double fitnessgt's fitness */
double upper[nvarsgt's variables upper bound */
double lower[nvarsgt's variables lower bound */
double rfitnessrelative fitness */
double cfitnesscumulative fitness */
struct genotype population[popsize+1]; population */
struct genotype newpopulation[popsize+1]; new population; *
iii.基本函数。
void initialize(void);
double randval(double, double);
void evaluate(void);
void keep_the_best(void);
void elitist(void);
void select(void);
void crossover(void);
void xover(int,int);
void swap(double *,double *)
void mutate(void);
void report(void);
4.其他要求。
1.实现多线程操作。
2.在多线程间实现信息的交互。
3、需求解析及解决办法。
1.从面向过程到面向对象。
i.问题分析及整改方案。
因为在c#中为全面的面对对象的编程,所以对用面向过程的c语言程序必须全面的修改成面向对象的方式。基于面对对象和面向过程的思想的实现方式的不同以及类具有的封装继承与多态,我们主要要做的就是把原先c语言的面向过程的函数修改成类的方法。同时可以把整个过程封装成一个类也可以把功能封装成一个类实现。
经过权衡本着**精炼的原则我们决定封装成一个类。
ii.主要实现**。
namespace test_li
class program
public static void initialize();
public static double randval(double, double);
public static void evaluate();
public static void keep_the_best();
public static void elitist();
public static void select();
public static void crossover();
public static void xover(int,int);
public static void swap(double , double);
public static void mutate();
public static void report();
public static void start();
static void main(string args)
2.宏定义问题。
i.问题的分析及整改方案。
在面向对象的语言中,一般不会出现宏定义。因为宏定义在面向过程中生存时间长,可以随时调用,使用起来方便。但是对于面向对象来说,所有的属性变量都是随着类的实例化而生成随着类的消亡而消亡,共一定意义上说在面向对象的语言中没有宏定义的存在意义 。
或许说只有一直存在的类没有一直存在的宏。介于我们这次用的是一个类,所以解决宏定义的方法就是把宏定义转化成静态的私有属性即可。
ii.主要**实现。
private const int popsize =50population size */
private const int maxgens =1000max. number of generations */
private const int nvars =3no. of problem variables */
private const double pmutation =0.15probability of mutation */
private const int true =1;
private const int false =0;
public int generationcurrent generation no. *
public int cur_bestbest individual */
3.数据存储问题。
i.问题分析及整改方案。
作为一个面对对象的编程语言,虽然所在c#里面也存在结构体的定义,但是按照面向对象的思想,存储结构应该也是一个数据存储的类,这样在理解和关系的划分中更清楚。但是用一个简单的类和一个镶嵌类那个更能表现出其中的关系。一方面我们这个类仅仅只是用作数据的存储,比较简单。
另一方面我们这个类应该是隶属于整个功能类的一个数据属性。所以用一个镶嵌类比较适合。
C语言作业报告
题目 1 第一个上台的小组。班级 计机113 组号 第一组 成员 林少烈黎冠杰卢灿关旗少罗启恩陈庆裕陈伟鸿。第一部分 一 分析题目1 求13的13次方的最后三位数。1.构造案例1 通过讨论,我们总结错误用另一种方法求出13的13次方的后三位,就是只求每次乘积的后三位,对13的13次方中每次乘积都进行...
C大作业报告
c 大作业报告。姓名 常皓。学号 03101261 班级 031013 销售公司员工管理。设计一个虚基类staff 员工 包含编号 姓名和年龄保护数据成员以及相关的成员函数 由staff派生出销售员类salesman,包含销售额保护数据成员以及相关的成员函数 c 大作业报告。姓名 常皓。学号 031...
C语言作业报告
c语言课程设计。实验报告。设计人 郭天赐 23220102204162 设计目的 该程序设计用于登录图书信息,并提供信息的查询,更改,删除,增加,保存,排序等功能,系统还提供自动存储功能。在于运转一个良好的图书管理系统。设计要求 图书信息包括 登录号 书名 作者名 分类号 出版单位 出版时间 等。试...