(一)题型与分值分布1、填空题(10小题,10分)2、单项选择题(8小题,16分)3、多项选择题(5小题,15分)4、问答与分析题(8小题,41分)5、程序填空题(3小题,18分)(二)知识要点一、C#基础知识1、C#源文件的扩展名为cs,C#的编译器为csc。2、MSIL是独立于CPU的指令集,它可以被高效地转换为特定于某种CPU的代码3、C#的数据类型分为两大类:值类型和引用类型。4、小数类型:double、float、decimal类型。【例1】在C#编制的财务程序中,需要创建一个存储流动资金金额的变量theMoney,则应该将该变量定义为__decimal__类型。5、整数相除的结果为整数,小数相除的结果为小数。【例2】已知某专业有x名男生,每间宿舍住y个人,使用c#表达式__(x+y-1)/y_可以用于计算宿舍总数。【例3】假设变量a、b、c为大于1的整数,则代数式abc1对应的c#表达式为___1.0/(a*b*c)___。6、假设有两个整型数x和y,则表达式(x^y)^y值还原为x。7、将一个数左移N位相当于将一个数乘以2的n次方。8、基本数据类型的转换:隐式转换、强制转换、数据类型的自动提升。9、流程控制:if、switch、while、for、break、continue等语句。【例4】以下程序的运行结果为(C)inti,j,k;for(i=0;i3;i++)//i的范围:0,1,2for(j=1;j4;j++)//j的范围:1,2,3for(k=2;k5;k++)//k的范围:2,3,4if((i==j)&&(j==k))//i=j=k,only2Console.WriteLine(i);A.0B.1C.2D.310、参数传递:(1)参数类型为int、double等基本数据类型时,实参与形参之间进行的是值传递。形参的变化不对实参造成影响。(2)当参数类型为数组,或者对象类型时,实参和形参之间进行地址传递。实参随着形参的变化而变化。(3)当参数为基本数据类型时,要使用关键字ref才能实现地址传递。(4)输出型参数(out)用来从函数中返回结果。11、方法重载指的是,一个类中允许出现多个同名的方法,只要参数个数或参数类型不同,编译器就认为这是两个不同的方法。【例5】类Test1定义如下:publicclassTest1{publicfloataMethod(floata,floatb){return1;}//here}将以下哪条语句插入here处将出现编译错误(B)A.publicfloataMethod(floata,floatb,floatc){return1;}B.publicfloataMethod(floatc,floatd){return1;}C.publicintaMethod(inta,intb){return1;}D.privatefloataMethod(inta,intb,intc){return1;}二、面向对象程序设计1、面向对象的基本概念。【例1】请举例说明面向对象和面向过程思维方式的区别。2、Object类是所有类的父类。3、构造方法:(1)创建对象时被自动调用;(2)与类同名,不具有返回类型;(3)一旦编译器重载了构造方法后,不再自动生成不带参数的构造方法。4、this关键字5、base关键字:(1)使用base关键字引用父类的成员;(2)还可以通过base(参数列表)引用父类的构造方法。6、sealed关键字:(1)sealed类不能被继承;(2)sealed方法不能被重写。7、virtual关键字:定义的方法可以被子类重写。8、abstract关键字:定义的方法为抽象方法;定义的类为抽象类。9、interface关键字:(1)在C#中通过接口的定义实现多继承。(2)C#的接口中不能定义常量。(3)接口中只能包含抽象方法,但接口中的方法不能显式加上public、static修饰符。10、引用类型转换:(1)子类对象可以当成父类对象使用;(2)父类对象只有经过强制转换后才能赋值给子类引用变量;(3)不能通过父类的引用访问子类对象新增加的成员。【例2】设有如下类定义:classA:Object{publicstringname=A;publicvoidSleep(){Console.WriteLine(Iama+name);}}classB:A{publicstaticvoidMain(string[]args){//here}}以下哪段代码可以位于here处(C)A.Objecta=newA();a.Sleep();B.Bb=newA();b.Sleep();C.Ac=newB();c.Sleep();D.Objectb=newB();b.Sleep();11、动态绑定及多态性的应用。(请思考:在一个绘图软件中,如何实现不同图形面积的计算?)12、异常处理机制:try语句块中包含可能发生异常的代码,catch语句块中包含异常发生时的处理代码,finally语句块中的代码在有无异常的时候都会执行。【例3】下列代码中,哪些行将产生空指针异常。(A)1strings=null;2if(s!=null||s.Length0)3Console.WriteLine(s!=null||s.Length0);4if(s!=null|s.Length0)5Console.WriteLine(s!=null|s.Length0);6if(s!=null&s.Length0)7Console.WriteLine(s!=null&s.Length0);8if(s!=null&&s.Length0)Console.WriteLine(s!=null&&s.Length0);A.246B.2468C.468D.26813、单例设计模式:饿汉式和懒汉式。三、WFP程序设计1、委托的定义及使用。【例1】C#使用____委托_____机制实现事件处理。2、布局管理器:StackPanel、Grid、DockPanel【例2】__Grid___布局管理器,类似网页中的table,以表格方式布局元素。3、打开和保存文件对话框。【例3】设有命令按钮btnText的单击事件代码如下,其中txtText为文本框对象。请阅读代码,并回答以下问题:(1)请简述该段代码的功能(2)请指出该段代码在执行过程中可能出现的问题,并给出解决办法。privatevoidbtnText_Click(objectsender,EventArgse){OpenFileDialogofd=newOpenFileDialog();ofd.Filter=文本文件(*.txt)|*.txt;if(ofd.ShowDialog()==true){txtText.Text=File.ReadAllText(ofd.FileName);}}(1)功能:通过“打开文件”对话框openFileDialog选择文本文件,并将文本文件的内容显示在txtText文本框中。(2)中文乱码问题。txtText.Text=File.ReadAllText(openFileDialog1.FileName,System.Text.Encoding.Default);四、数据库连接1、在ADO.NET框架中,通过创建Connection对象建立与数据源之间的连接,通过创建Command对数据源执行各种SQL命令。2、MD5算法。3、SQL语句的注入攻击。【例1】请举例说明什么是SQL语句注入攻击?试给出一种预防注入攻击的方法。答:假设使用如下SQL语句查找给定学号的学生信息,Strings=“select*fromstudentwheresno=’”+sno+“’”;Sno代表用户输入的学号。如果输入的是字符串:’or‘1’=’那么,执行该语句,将返回student表中的所有的学生信息。即该语句存在SQL语句的注入攻击。可以采用传入参数的方式预防注入攻击,对应的代码改成:stringsqlStr=selectsno,snamefromstudentwheresno=@snoPar;SqlCommandcommand=newSqlCommand(sqlStr,sqlCon);command.Parameters.AddWithValue(@snoPar,sno);此时,当用户输入字符串:’or‘1’=’,上述代码将在student表中查找学号为“:’or‘1’=’”的学生信息,返回结果为空,即预防了上述的注入攻击。(三)程序设计题1、请编写一个实现闰年测试的代码。闰年为能被4整除却不能被100整除,或能被400整除的年份。2、请编写一个计算一个长整数各位数之和的方法。3、请编写一个计算两数最大公约数的方法。【参考代码】使用递归。publicstaticintF(inta,intb){intc=a%b;if(c!=0){returnF(b,c);}else{returnb;}}4、找出1~100之间能被2整除的数,并将这些数以每行6个的格式输出。【参考代码】intcount=0;for(inti=1;i=100;i++){if(i%2==0){Console.Write(i+\t);count++;if(count%6==0)Console.WriteLine();}}5、编程实现循环打印输出0-19之间的整数。【参考代码】usingSystem;usingSystem.Threading;classProgram{staticvoidMain(string[]a1){inti=0;Console.WriteLine(i);while(true){i=(i+1)%20;Console.WriteLine(i);Thread.Sleep(500);//设置时间间隔为0.5秒}}}6、请编写一个方法,对小数进行四舍五入的计算。【参考代码】publicstaticintFunc(doublea){intb=(int)a;if(Math.Abs(a-b)=0.5){if(a0.0)b++;elseb--;}returnb;}7、请编写一个实现通用函数定积分计算的方法。【参考代码】classIntegral{publicdelegatedoubleIntegralDelegate(doublex);publicstaticdoubleGetIntegral(doublea,doubleb,IntegralDelegatef){constintsection=1000;doubleincrement=(b-a)/1000;doublearea=0.0;for(inti=0;i=section;i++){area=area+f(a+increment*i)*increment;}returnarea;}}8、请编写一个通用排序的方法。【参考代码】publicclassBubbleSorter{publicdelegateboolCompareOperation(objectobjPrev,objectobjNext);staticpublicvoidSort(Object[]objArr,CompareOperationsortOp){boolflag=false;//交换标志for(inti=1;iobjArr.Length;i++){flag=false;for(intj=objArr.Length-1;j=i;j--){if(sortOp(objArr[j],objArr[j-1])){objecttmpObj=objArr[j];objArr[j]=objArr[j-1];objArr[j-1]=tmpObj;flag=true;}}if(!flag)//如果没有发生交换,终止算法return;}}}9、请编程实现随机生成1000个0-99之间的整数,并完成每个整数出现的次数的统计。【参考代码】staticvoidMain(string