c#实验报告17.docx
- 文档编号:10982494
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:25
- 大小:35.06KB
c#实验报告17.docx
《c#实验报告17.docx》由会员分享,可在线阅读,更多相关《c#实验报告17.docx(25页珍藏版)》请在冰豆网上搜索。
c#实验报告17
实验报告
学院:
计算机与信息学院专业:
软件工程年级:
2008
姓名:
学号:
实验室号:
田312/313计算机号:
实验日期:
2010年4月2日指导教师签字:
成绩:
报告退发(订正、重做)
实验一基本的代码风格
(一)
1、实验目的
掌握基本的代码风格;
能指出不符合基本代码风格的代码。
2、实验仪器(环境):
计算机及VisualStudio.NETC#
3、实验操作方法:
了解和熟悉.NETC#IDE(集成开发环境)的使用方法,输入程序,对程序进行编译、调试和运行。
4、报告内容:
(1)新建一个控制台应用程序,含有Console.WriteLine("Hello,{0}","World!
");的输出语句,并执行通过此程序,把看到的结果截屏写入报告;
输入代码为:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceConsoleApplication2
{
classProgram
{
staticvoidMain(string[]args)
{
Console.WriteLine("helloworld");
Console.Read();
}
}
}
执行程序截屏如图1.1
图1.1
(2)将以下代码合理地分行,并改正其中不符合所学规范的地方,并逐条加以报告:
bitmap=newBitmap(size.Width,size.Height,System.Drawing.Imaging.PixelFormat.Format32bppArgb);
if(f==ImageFormat.Jpeg.Guid||f==ImageFormat.Tiff.Guid
||f==ImageFormat.Png.Guid||f==ImageFormat.Exif.Guid){
supportsPropertyItems=true;}
else{
supportsPropertyItems=false;}
这句要求分成两行:
doublecontainerAspectRatio=(double)container.ClientWidth/container.ClientHeight;
privatestaticvoidExchage(objecta,objectb){
objecttemp;
temp=a;a=b;b=temp;
}
⑤如何给下面各个变量加注释,注释内容分别是累加和、因子、索引、长度:
intnum,factor,index,length;
⑥自找一段稍长的代码,使用空行分隔代码块
⑦使用缩进改进以下程序:
intkmp_match(char[]t,char[]p,int[]flink,intn,intm)
{
inti=0,j=0;
While(i { While(j! =-1&&p[j]! =t[i]) { j=flink[j]; } if(j==m-1) { returni–m+1; } i++; j++; } Return-1; } ⑧举出因换行采用缩进的例子; ⑨C#文本编辑器用Tab键进行代码缩进方式是怎么设置的? 请设置用Tab键大小,选择“插入空格”模式。 写出设置过程并说说“插入空格”模式的好处。 实验报告 学院: 计算机与信息学院专业: 软件工程年级: 2008 姓名: 学号: 实验室号: 田312/313计算机号: 实验日期: 2010年4月9日指导教师签字: 成绩: 报告退发(订正、重做) 实验二基本的代码风格 (二) 1、实验目的 掌握基本的代码风格中大括号的使用以及保持项目文件条例性的方法; 能指出不符合基本代码风格的代码。 2、实验仪器(环境): 计算机及VisualStudio.NETC# 3、实验操作方法: 了解和熟悉.NETC#IDE(集成开发环境)的使用方法,输入程序,对程序进行编译、调试和运行。 4、报告内容: (1)K&R的大括号位置风格的练习: 自己寻找3个程序代码(要能在.NETC#IDE环境中通过运行),按照K&R风格输入这些代码,并提供源代码及截图报告这些代码的运行结果; (2)C#使用的大括号位置风格的练习: 自己寻找3个程序代码(要能在.NETC#IDE环境中通过运行),按照C#使用的大括号位置风格输入这些代码,并提供源代码及截图报告这些代码的运行结果; (3)开发过程中,很可能只写了某个类或者函数的空声明,如何处理这种空复合体? 请举例说明; (4)对于 if(a>b)x++; elsey++; 或者 for(inti=0;i<10;i++) dest[i]=source[i]; 这种单个语句体的结构该如何写得更易读一些,请各举一例加以说明; (5)在原项目的命名空间下新建了一个名为SubFolder的新文件夹,观察C#会自动将文件夹作为子命名空间的名称以及这个文件夹下的新建代码文件就自动以原项目的命名空间.SubFolder作为默认的命名空间。 截图报告此现象; (6)用#region和#endregion标记这两个指令在VisualStudio.NET编辑器中将其中的代码折叠或展开,便于浏览和编辑。 试试会不会对程序的编译与运行产生影响,说说此两指令的作用。 截图输出自己的实验结果。 实验报告 学院: 计算机与信息学院专业: 软件工程年级: 2008 姓名: 学号: 实验室号: 田312/313计算机号: 实验日期: 2010年4月16日指导教师签字: 成绩: 报告退发(订正、重做) 实验三注释与命名 1、实验目的 正确掌握注释语句的使用方法; 掌握正确的命名方法。 2、实验仪器(环境): 计算机及VisualStudio.NETC# 3、实验操作方法: 了解和熟悉.NETC#IDE(集成开发环境)的使用方法,输入程序,对程序进行编译、调试和运行。 4、报告内容: (1)举出if语句中在“判断还未发生之前,引入了判断之后的事情的注释”的例子,说说这种注释的不良之处以及如何改进并给出改进后的例子。 例子应能在C#环境下通过运行; 例子: inta=1; intb=2; //当a>b的时候输出a>b,否则出去b>a if(a>b) Console.WriteLine("a>b"); else { Console.WriteLine("b>a"); } Console.Read(); 注释: 这种注释形式会产生一个基本的错误: 由于代码长度的增加,if结构会变得更长,离被注释的代码太远,注释与代码的位置相差太远,不利于代码清晰。 这主要是因为注释与相应的代码相隔太远,所以解决方法就是: 将注释的内容分开,采取更符合逻辑的方式,将注释与其相应的代码写在一起。 inta=1; intb=2; //当a>b的时候输出a>b if(a>b) Console.WriteLine("a>b"); //,否则出去b>a else { Console.WriteLine("b>a"); } Console.Read(); (2)找出C#集成开发环境里系统自动生成的代码中含有类似TODO注释的语句,并说说这类注释的含义; (3)多行注释时格式上应注意些什么? 请给出例子; (4)类似以下的变量命名存在哪些问题: privateint年龄; privateintâge; privateintage; (5)什么是命名中的Pascal规则和Camel规则? 2个字母、3个字母或以上分别应怎么处理? 举例说明之; (6)考虑到跨语言编程,在命名上应注意哪些问题? (7)什么是匈牙利命名法? 请举例说明。 实验报告 学院: 计算机与信息学院专业: 软件工程年级: 2008 姓名: 学号: 实验室号: 田312/313计算机号: 实验日期: 2010年4月23日指导教师签字: 成绩: 报告退发(订正、重做) 实验四数据处理 1、实验目的 正确掌握数据类型; 掌握变量的使用、枚举的使用; 理解使用魔数应注意的问题; 避免表达式的副作用。 2、实验仪器(环境): 计算机及VisualStudio.NETC# 3、实验操作方法: 了解和熟悉.NETC#IDE(集成开发环境)的使用方法,输入程序,对程序进行编译、调试和运行。 4、报告内容: (1)叙述十进制浮点数的整数部分和小数部分转换成二进制的方法,并给出转换实例; (2)运行如下程序,说说为什么无法出现期望的输出(Console.WriteLine("OK! ");) doublei=0.0; while(i<10) { i+=0.2; Console.WriteLine(i.ToString()); //if(Math.Abs(i-6.0)<0.01) if(i==6.0) { Console.WriteLine("OK! "); } } 而将//if(Math.Abs(i-6.0)<0.01)语句中的注释符去掉,将下一句的if语句注释,又能看到期望输出的语句了,这又是为什么? 把运算结果截图并说明原因; (3)理解枚举类型的声明形式: enumname[: base_type] { enumerator_list } 并自行举例在C#环境下运行,说说base_type的默认数据类型是什么类型的,不能是什么类型的; (4)何谓魔数(或称幻数)? 举例说说我们学习的第一类魔数和第二类魔数是各指什么样的数,为什么说第一类魔数的存在是合理且不可避免的,第二类魔数则有着极大的危害? (5)什么是带有副作用的运算符? 举例说明带有副作用的运算符个数并非关键,真正产生歧义而影响可读性的,是与带有副作用的运算符相关的操作数。 实验报告 学院: 计算机与信息学院专业: 软件工程年级: 2008 姓名: 学号: 实验室号: 田312/313计算机号: 实验日期: 2010年4月30日指导教师签字: 成绩: 报告退发(订正、重做) 实验五过程及函数 1、实验目的 正确使用分支结构中的条件语句; 正确使用switch语句; 了解可变长参数的函数; 了解带ref和out参数的函数。 2、实验仪器(环境): 计算机及VisualStudio.NETC# 3、实验操作方法: 了解和熟悉.NETC#IDE(集成开发环境)的使用方法,输入程序,对程序进行编译、调试和运行。 4、报告内容: (1)说说下面两个判断语句的区别,请在C#环境下带入实际值运行并将两种结果截屏写入本报告中。 为保持程序在不同语言环境下的通用性,编码时应该采用下面哪一个? 1)if(! (x%2)) { Console.WriteLine(“偶数”); } 2)if(x%2==0) { Console.WriteLine(“偶数”); } (2)在C#环境中运行如下程序,再改变m的值,查看结果;如果缺其中某break;语句会有什么结果? 为什么要有default语句? 给出截图报告。 intm=4; stringdesc=null; switch(m) { case1: case2: case3: desc="第一季度"; break; case4: case5: case6: desc="第二季度"; break; case7: case8: case9: desc="第三季度"; break; case10: case11: case12: desc="第四季度"; break; default: desc="无此数相应的季度"; break; } Console.WriteLine("{0}",desc); (3)可变长参数的函数的练习 usingSystem; usingSystem.Collections.Generic; usingSystem.Text; publicclassMyClass { publicstaticvoidUseParams(paramsint[]list) { for(inti=0;i Console.WriteLine(list[i]); Console.WriteLine(); } publicstaticvoidUseParams2(paramsobject[]list) { for(inti=0;i Console.WriteLine(list[i]); Console.WriteLine(); } publicstaticvoidMain() { UseParams(1,2,3,5); UseParams2(1,'a',"test",true,false); int[]myarray=newint[5]{10,11,12,14,16}; UseParams(myarray); //Console.ReadLine(); } } 运行以上函数,并分别改变调用UseParams()函数的参数的个数;对于UseParams2()函数,改变数据类型及个数;改变myarray数组元素的个数; 将结果截屏输出。 (4)带ref和out参数的函数的练习 usingSystem; usingSystem.Collections.Generic; usingSystem.Text; namespaceConsoleApplication5 { classProgram { staticvoidMain(string[]args) { inti=0; Console.WriteLine("Originalvalueofi: \t"+i); Console.WriteLine("nowcallingacommonfunction"); CommonFunctin(i); Console.WriteLine("nowthevalueofi: \t"+i); //asoutpara,hasnovalueinitialize Console.WriteLine("nowcallingaoutfunction"); OutFunction(outi); Console.WriteLine("nowthevalueofi: \t"+i); Console.ReadLine(); //asrefpara,hasvaluebefore Console.WriteLine("nowcallingareffunction"); RefFunction(refi); Console.WriteLine("nowthevalueofi: \t"+i); Console.ReadLine(); } staticvoidOutFunction(outinti) { i=100; } staticvoidRefFunction(refinti) { i=200; } staticvoidCommonFunctin(inti) { i=999; } } } 观察参数i在运行上述三个函数后的变化情况,给输出的截屏并解释结果。 实验报告 学院: 计算机与信息学院专业: 软件工程年级: 2008 姓名: 学号: 实验室号: 田312/313计算机号: 实验日期: 2010年5月7日指导教师签字: 成绩: 报告退发(订正、重做) 实验六结构、类、封装 1、实验目的 正确理解结构与类、封装等概念; 正确使用理解简单数值类型与引用类型。 2、实验仪器(环境): 计算机及VisualStudio.NETC# 3、实验操作方法: 了解和熟悉.NETC#IDE(集成开发环境)的使用方法,输入程序,对程序进行编译、调试和运行。 4、报告内容: (1)值类型和引用类型的关系 usingSystem; classDemo { publicstaticvoidMain() { intx=123; objectobj1=x;//这种操作称为装箱操作,把一个值类型转换成引用类型 x=x+100; Console.WriteLine("x={0}",x);//值类型 Console.WriteLine("obj1={0}",obj1);//引用类型 } } 运行上述程序,观察x和obj1的变化。 上述是一个把值类型包装成引用类型的处理过程(装箱操作)。 当一个值类型被要求转换成一个object对象时,装箱操作自动进行,它首先创建一个对象实例,然后把值类型的值复制到这个对象实例,最后由object对象引用这个实例。 usingSystem; classDemo { publicstaticvoidMain() { intx=123,y; objectobj1=x;//装箱操作 x=x+100;//改变x的值,此时obj1的值并不随之改变 y=(int)obj1;//拆箱操作,必须进行强制类型转换 Console.WriteLine("x={0}",x); Console.WriteLine("obj1={0}",obj1); } } 运行上述程序,观察x和obj1的变化。 上述是将object类型转换成值类型。 首先检查由object引用的对象实例值类型的包装值,然后把实例中的值拷贝到值类型的变量y中。 (2)Time类的构造函数及其重载 usingSystem; publicclassTime { privateinthour,minute,second; publicTime() { hour=minute=second=0;//可以这样写,但按所学规范要求比较好 } publicTime(inth) { hour=h; minute=second=0;//可以这样写,但按所学规范要求比较好 } publicTime(inth,intm) { hour=h; minute=m; second=0; } publicTime(inth,intm,ints) { hour=h; minute=m; second=s; //Console.WriteLine("hour={0},minute={1},Sum={2}",h,m,s); } } classtest { publicstaticvoidMain() { Timet1,t2,t3,t4;//对t1,t2,t3,t4分别调用不同的构造函数 t1=newTime(); t2=newTime(8); t3=newTime(8,30); t4=newTime(8,30,30); } } 运行上述程序,谈谈自己对构造函数的认识以及对其参数的初始化的理解; (3)Finalize函数练习 usingSystem; publicclassPoint { privateintx,y; ~Point()//前门加~表明是析构函数 { Console.WriteLine("Point的垃圾处理器"); } } publicclassCircle: Point { privatedoubleradius; ~Circle() { Console.WriteLine("Circle的垃圾处理器"); } } classTest { publicstaticvoidMain() { Circleb=newCircle(); b=null; GC.Collect(); GC.WaitForPendingFinalizers(); //Console.Read(); } } 运行上述程序,对于GC.Collect()、GC.WaitForPendingFinalizers()函数的作用查帮助系统。 理解该程序的作用并写出自己的理解。 (4)使用属性来访问字段 usingSystem; //SafePerson结构使用属性来公开对age字段值的访问 publicstructSafePerson { privateintage; publicintAge { get { returnage; } set { if(value>=0) { age=value; } else { thrownewArgumentOutOfRangeException( "Agemustbegreaterthanorequaltozero"); } } } } //UnsafePerson结构将age字段直接暴露在外 publicstructUnsafePerson { publicintAge; } publicclassProgram { publicstaticvoidMain() { SafePersonsafePerson; UnsafePersonunsafePerson; safePerson.Age=-3;//将会引发异常 unsafePerson.Age=-3;//不会有任何提示 } } 上述代码中为什么safePerson.Age=-3;将会引发异常而unsafePe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c# 实验 报告 17