admin 管理员组

文章数量: 887174


2024年2月18日发(作者:微软泄露源码下载)

====Word行业资料分享--可编辑版本--双击可删====

(一)题型与分值分布

1、填空题(10小题,10分)

2、选择题(12小题,24分)

3、判断题(10小题,10分)

4、问答与分析题(6小题,28分)

5、程序填空题(4小题,18分)

6、程序设计题(1小题,10分)

(二)知识要点

一、C#基础知识

1、C#源文件的扩展名为cs,C#的编译器为csc。

2、C#的数据类型分为两大类:值类型和引用类型。

3、小数类型:double、float、decimal类型。

【例1】 在C#编制的财务程序中,需要创建一个存储流动资金金额的变量theMoney,则应该将该变量定义为__decimal__类型。

4、整数相除的结果为整数,小数相除的结果为小数。

【例2】已知某专业有x名男生,每间宿舍住y个人,使用c#表达式__(x + y - 1) / y_可以用于计算宿舍总数。

【例3】假设变量a、b、c为大于1的整数,则代数式1对应的c#表达式为 _____________1.0 /

abc(a * b * c)。

5、假设有两个整型数x和 y,则表达式 (x ^ y) ^ y值还原为x 。

6、将一个数左移N位相当于将一个数乘以2的n次方。

【例4】1<<8的结果为______256______。

7、基本数据类型的转换:隐式转换、强制转换、数据类型的自动提升。

【例5】设有如下变量说明: ( B )

byte myByte;

int myInt;

long myLong;

float myFloat;

以下赋值语句哪个需要强制转换。

A.myInt = myByte;

B.myInt = myLong;

C.myByte = 3;

D.myFloat = myLong;

【例6】以下代码的输出结果为: ( B )

int a = 3;

ine(" " + 2 + a); // 23

ine(2 + a); // 5

ine(2 + a + ""); // 5

ine(2 + "" + a); // 23

A.第2行出现编译错误

B.输出 23, 5, 5 和23.

C.输出5, 5, 5 和23.

D.输出 5, 5, 23 和23.

源-于-网-络-收-集

====Word行业资料分享--可编辑版本--双击可删====

8、流程控制:if、switch、while、for、break、continue等语句。

【例7】设有如下代码段,当变量x的取值为__2 或3___能使程序输出"Two" 。

switch ( x ){

case 1: ("One");break;

case 2:

case 3: "Two");break;

default: ("end");

}

【例8】以下程序的运行结果为 ( C )

int i,j,k;

for (i = 0; i < 3; i++) // i的范围: 0, 1, 2

for(j=1; j < 4; j++) // j的范围: 1, 2, 3

for(k=2; k<5; k++) // k的范围: 2, 3, 4

if((i == j) && (j==k)) // i = j = k, only 2

ine(i);

A. 0 B. 1 C. 2 D. 3

9、参数传递:

(1) 参数类型为int、double等基本数据类型时,实参与形参之间进行的是值传递。形参的变化不对实参造成影响。

【例9】请分析下面程序的输出结果

class Invoke

{

void Change(int x)

{

x = 3;

}

public static void Main(String[] args)

{

int x = 5;

Invoke e1 = new Invoke();

(x);

ine(x);

}

}

输出:5

(2) 当参数类型为数组,或者对象类型时,实参和形参之间进行地址传递。实参随着形参的变化而变化。

【例10】请分析下面程序的输出结果

class Invoke

{

int x;

void Change(Invoke obj)

{

源-于-网-络-收-集

====Word行业资料分享--可编辑版本--双击可删====

obj.x = 3;

}

public static void Main(String[] args)

{

Invoke e1 = new Invoke();

e1.x = 5;

(e1);

ine(e1.x);

}

}

输出: 3

(3)当参数为基本数据类型时,要使用关键字ref才能实现地址传递。

【例11】请分析下面程序的输出结果

class Test

{

public static void Main(String [] args)

{

int x = 8;

Change(ref x);

ine(x);

}

static void Change(ref int x){

x += 2;

}

}

输出:10

(4)输出型参数(out)用来从函数中返回结果。

10、方法重载指的是,一个类中允许出现多个同名的方法,只要参数个数或参数类型不同,编译器就认为这是两个不同的方法。

【例12】类Test1定义如下:

public class Test1

{

public float aMethod(float a,float b){ return 1; }

//here

}

将以下哪条语句插入here处将出现编译错误( B )

A.public float aMethod(float a, float b,float c){ return 1;}

B.public int aMethod(float a,float b){return 1; }

C.public int aMethod(int a, int b){ return 1; }

D.private float aMethod(int a,int b,int c){ return 1; }

11、字符编码

(1)C#中使用Unicode编码表示字符。

(2)在windows中文操作系统中,使用GBK/GB2312表示字符。

【例13】判断题:在windows中文操作系统中,创建的文本文件采用的默认的编码方案为Unicode。错,是GBK/GB2312

源-于-网-络-收-集

====Word行业资料分享--可编辑版本--双击可删====

二、面向对象程序设计

1、面向对象的基本概念。

【例1】请举例说明面向对象和面向过程思维方式的区别。

面向过程编程先确定算法,再确定数据结构。

面向对象编程先确定数据结构,再确定运算。

S矩算法。2.编写一个计算S矩额方法。3.求面积方法需要两个参数(矩形的长和宽)

面向对象:1.一个矩形可看成一个对象。2.一个矩形有两属性(长宽)和一个行为(求面积)。3.将所有矩形的共性抽取出来设一个矩形类。4.通过矩形对象行为就可以求出某个具体的矩形对象的面积。

【例2】在定义一个类的时候,良好的软件工程的做法是:将成员变量定义为private,被封装的变量通过public的setter和getter取得和设置。请简述原因。

1.可以对赋值进行合法性检查。

2.可以在用户使用格式和私有变量存储格式之间进行转换。

3.当数据的存储格式发生变化时,只需要改动get和set方法中的代码,其余代码不受影响。

4.控制变量的读写权限。

2、Object类是所有类的父类。

3、构造方法:(1)创建对象时被自动调用;(2)与类同名,不具有返回类型;(3)一旦编译器重载了构造方法后,不再自动生成不带参数的构造方法。

4、this关键字:一般用于构造函数,实例方法和实例访问器中访问成员。

5、base关键字:(1)使用base关键字引用父类的成员;(2)还可以通过base(参数列表)引用父类的构造方法。

6、 sealed关键字:(1)sealed类不能被继承;(2)sealed方法不能被重写。

【例3】判断题:在C#中,可以使用sealed关键字修饰抽象类。错,sealed不能被继承,抽象类就是用来被继承的

7、 virtual关键字:定义的方法可以被子类重写。对

8、 abstract关键字:定义的方法为抽象方法;定义的类为抽象类。对

9、 interface关键字:在C#中通过接口的定义实现多继承。对

10、引用类型转换:(1)子类对象可以当成父类对象使用;(2)父类对象只有经过强制转换后才能赋值给子类引用变量;(3)不能通过父类的引用访问子类对象新增加的成员。

【例4】设有如下类定义:

class A : Object

{

public string name = "A";

public void Sleep()

{

ine("I am a " + name);

}

}

class B : A

{

public static void Main(string[] args)

{

//here

源-于-网-络-收-集

====Word行业资料分享--可编辑版本--双击可删====

}

}

以下哪段代码可以位于here处 ( C )

A. Object a = new A(); ();

B.B b = new A(); ();

C. A c = new B(); ();

D.Object b = new B(); ();

11、动态绑定。

【例5】请分析下面程序的输出结果。

using System;

class A

{

public virtual void Func1() { ine("A:Func1() is calling"); }

}

class B : A

{

public override void Func1() { ine("B:Func1() is calling"); }

public void Func2() { ine("B:Func2() is calling"); }

}

class C

{

public static void CallA(A a)

{

if (a is B)

{

B b = (B)a; 1(); 2();

}

else

{

1();

}

}

public static void Main(string[] args)

{

A a = new A();

CallA(a);

ine(a is A);

}

}

输出: A:Func1() is calling

True

请思考:将语句A a = new A()改成A a = new B() 或B a = new B(),对应的输出结果为多少?

当 A a = new A()改成A a = new B() 或B a = new B()

输出: B:Func1() is calling

B:Func2() is calling

源-于-网-络-收-集

====Word行业资料分享--可编辑版本--双击可删====

True

12、异常处理机制: try语句块中包含可能发生异常的代码,catch语句块中包含异常发生时的处理代码,finally语句块中的代码在有无异常的时候都会执行。

【例6】当参数为4和0时,以下程序的执行结果为 ( A )

public static void divide(int a, int b) {

try {

int c = a / b;

} catch (Exception e) {

("Exception ");

return;

} finally {

("Finally");

}

}

A. 输出 Exception Finally B. 输出 Finally

C. 输出 Exception D. 无输出

【例7】下列代码中,哪些行将产生空指针异常。 ( A )

1 string s = null;

2 if ( s != null || > 0)

3 ine("s != null || > 0");

4 if ( s != null | > 0)

5 ine("s != null | > 0");

6 if ( s != null & > 0)

7 ine("s != null & > 0");

8 if ( s != null && > 0)

ine("s != null && > 0");

A.2 4 6 B.2 4 6 8

C.4 6 8 D.2 6 8

13、单例设计模式:饿汉式和懒汉式。在单例设计模式中,懒汉式的代码可能会引发线程不同步的问题。

三、windows窗体设计

1、委托的定义及使用。

委托是一种数据结构,它提供类似C++语言中函数指针功能,委托可指静态方法和对象实例方法。它是完全的面向对象且使用完全类型,程序员可利用委托在执行时期传入方法名称,动态决定调用的方法。

delegate类型的处理函数,并在此函数末。4.创建实例,传入准备调用的方法名。

2、C#使用____委托_____机制实现事件处理。

3、计时器控件。

【例1】在一个窗体应用程序中,需要在一分钟内自动浏览完文件夹中的60张图片,则需要设置计时器控件的Interval属性的值为 ( D )

A.10 B.600 C.100 D.1000

【例2】设有命令按钮btnText的单击事件代码如下,其中openFileDialog1为“打开文件对话框”对象,txtText为文本框对象。请阅读代码,并回答以下问题:(1)请简述该段代码的功能(2)请指出该段代码在执行过程中可能出现的问题,并给出解决办法。

源-于-网-络-收-集

====Word行业资料分享--可编辑版本--双击可删====

private void btnText_Click(object sender, EventArgs e)

{

lDirectory = "c:";

= "文本文件 (*.txt)|*.txt ";

= "打开文本文件";

if (alog() == )

{

= lText(me);

}

}

(1) 功能:通过“打开文件”对话框openFileDialog选择文本文件,并将文本文件的内容显示在txtText文本框中。

(2) 中文乱码问题。

Pvivate viod Fotml_Load(onject sdender, EvenArgs e)

{

//设置文本框为多行文本

ine=true;

//为文本框添加垂直滚动条

Bars=al;

}

Private void btnText_Click(object rgs e)

{

Diretory=”c:”;

=”文本文件

(*.txt)|*.txt|全部文件(*.*)|*.*”

=”打开文本文件”;

if(alog()==)

{

=lText(me,

oding(“GBK”));

//在中文windows操作系统中等价于

t

=lText(me,t);

}

}

四、数据库连接

1、在框架中,通过创建Connection对象建立与数据源之间的连接,通过创建Command对数据源执行各种SQL命令。

【例1】判断题:在框架中,连接SQL Server2005数据库与连接SQL Server Express2005数据库采用的连接符串不同。对

2、当只需要顺序读取数据库中的数据而不需要其他操作时,建议使用DataReader对象。

3、MD5算法。

思考:如何使用后台数据库中的userInfo(userName,userPass)表实现用户的登录与注册?其中,源-于-网-络-收-集

====Word行业资料分享--可编辑版本--双击可删====

userPass字段中存放的是由MD5算法加密后的用户密码。

/*使用MD5加密字符串的方法*/

public static string GetMd5Str(string myString)

{

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] fromData = es(myString);

byte[] toData = eHash(fromData);

string byteStr = null;

for (int i = 0; i < ; i++)

{

byteStr += toData[i].ToString("x");

}

return byteStr;

}

/* btnAdd_Click 方法实现用户信息的注册*/

private void btnAdd_Click(object sender, EventArgs e)

{

string userName = ();

string userPass = ();

string conStr = "server=.;database = studentcourse;integrated security = True";

SqlConnection sqlCon = new SqlConnection(conStr);

();

SqlCommand checkCmd = Command();

dText = "select * from userInfo where userName = @un ";

hValue("un", userName);

SqlDataReader reader = eReader();

if (())

{

("用户名已经存在");

}

else

{

e();

string sqlStr = "insert into userInfo(userName,userPass)values(@un,@pd)";

SqlCommand sqlCommand = new SqlCommand(sqlStr, sqlCon);

hValue("un", userName);

hValue("pd", GetMd5Str(userPass));

eNonQuery();

("添加成功", "提示");

}

();

}

/* btnOK_Click 方法实现用户的登录/

源-于-网-络-收-集

====Word行业资料分享--可编辑版本--双击可删====

private void btnOK_Click(object sender, EventArgs e)

{

string conStr = "server=.;database = studentcourse;integrated security = True";

SqlConnection sqlCon = new SqlConnection(conStr);

();

string sqlStr = "select userName,userPass from userInfo where userName = @userName";

SqlCommand sqlCommand = new SqlCommand(sqlStr, sqlCon);

hValue("@userName", ());

SqlDataReader reader = eReader();

if (!())

{

("用户名不存在!", "错误");

}

else if (reader["userPass"].ToString().Trim() == GetMd5Str(()))

{

("登录成功", "正确");

}

else

{

("密码错误", "错误");

}

();

}

4、SQL语句的注入攻击。

【例2】请举例说明什么是SQL语句注入攻击?试给出一种预防注入攻击的方法。

答:假设使用如下SQL语句查找给定学号的学生信息,

String s = “select * from student where sno=’” + sno + “’”;

Sno代表用户输入的学号。如果输入的是字符串:’ or ‘1’ =’

那么,执行该语句,将返回student表中的所有的学生信息。即该语句存在SQL语句的注入攻击。

可以采用传入参数的方式预防注入攻击,对应的代码改成:

string sqlStr = "select sno,sname from student where sno = @snoPar";

SqlCommand command = new SqlCommand(sqlStr, sqlCon);

ters. AddWithValue ("@snoPar",sno);

此时,当用户输入字符串:’ or ‘1’ =’ , 上述代码将在student表中查找学号为“:’ or ‘1’ =’”的学生信息,返回结果为空,即预防了上述的注入攻击。

4、数据库系统设计的三层架构:表示层(UI)、业务逻辑层(BLL)、数据访问层(DAL)

【例3】用.net做C/S或者B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?

三层。表示层UI:为用户提供交互界面。业务逻辑层BLL:负责关键业务的处理和数据传递。数据访问层DAL:负责数据库数据的访问。业务实体 Model :在各层中传递实体。通用类库Common:通用辅助类,如数据校验、数据加密、缓存处理等。

分层的优点:易于项目的扩展和修改。 易于代码的复用。易于分工协作。

源-于-网-络-收-集

====Word行业资料分享--可编辑版本--双击可删====

(三)程序设计题

1、请编写一个实现闰年测试的代码。闰年为能被4整除却不能被100整除,或能被400整除的年份。

public static bool isLeapYear(int year)

{

Return (year % 4 == 0 && year % 100 != 0 || year % 400 = 0)

}

2、请编写方法,实现一个长整数各位数之和的计算。

public static int sum(long num)

{

int sum = 0;

while (num)

{

sum += num % 10;

num /= 10;

}

return sum;

}

3、请编写一个计算两数最大公约数的方法。

【参考代码】使用递归。

public static int F(int a, int b)

{

int c = a % b;

if (c != 0)

{

return F(b, c);

}

else

{

return b;

}

}

4、找出1~100之间能被2整除的数,并将这些数以每行6个的格式输出。

【参考代码】

int count = 0;

for(int i=1; i<=100; i++)

{

if (i % 2 ==0)

{

(i + "t");

count ++;

if (count % 6 == 0)

ine();

源-于-网-络-收-集

====Word行业资料分享--可编辑版本--双击可删====

}

}

5、编程实现循环打印输出0-19之间的整数。

【参考代码】

using System;

using ing;

class Program

{

static void Main(string[] a1)

{

int i = 0;

ine(i);

while (true)

{

i = (i + 1) % 20;

ine(i);

(500); //设置时间间隔为秒

}

}

}

6、请编写一个方法,对小数进行四舍五入的计算。

【参考代码】

public static int Func(double a)

{

int b = (int)a;

if ((a-b) >= 0.5)

{

if (a > 0.0)

b++;

else

b--;

}

return b;

}

7、请编写一个实现通用函数定积分计算的方法。

【参考代码】

class Integral

{

public delegate double IntegralDelegate(double x);

public static double GetIntegral(double a, double b, IntegralDelegate f)

{

const int section = 1000;

源-于-网-络-收-集

====Word行业资料分享--可编辑版本--双击可删====

double increment = (b - a) / 1000;

double area = 0.0;

for (int i = 0; i <= section; i++)

{

area = area + f(a + increment * i) * increment;

}

return area;

}

}

8、请编写一个通用排序的方法。

【参考代码】

public class BubbleSorter

{

public delegate bool CompareOperation(object objPrev, object objNext);

static public void Sort(Object[] objArr, CompareOperation sortOp)

{

bool flag = false; //交换标志

for (int i = 1; i < ; i++)

{

flag = false;

for (int j = - 1; j >= i; j--)

{

if (sortOp(objArr[j], objArr[j - 1]))

{

object tmpObj = objArr[j];

objArr[j] = objArr[j - 1];

objArr[j - 1] = tmpObj;

flag = true;

}

}

if (!flag) //如果没有发生交换,终止算法

return;

}

}

}

9、请编程实现随机生成1000个0-99之间的整数,并完成每个整数出现的次数的统计。

【参考代码】

static void Main(string[] args)

{

int[] numbers = new int[1000];

Random rand = new Random();

for (int i = 0; i < ; i++)

{

numbers[i] = (100);

}

源-于-网-络-收-集

====Word行业资料分享--可编辑版本--双击可删====

int[] counts = new int[100];

foreach (int n in numbers)

{

++counts[n];

}

for (int i = 0; i < ; i++)

{

ine("数字{0}出现了{1}次", i, counts[i]);

}

y();

}

10、下面代码实现将十进制的整数转换为对应的二进制数串。

【参考代码】

static string ConvertIntToBinary(int n)

{

string binary = ;

int i = n;

int m = 0;

while (i > 1)

{

i = n / 2;

m = n % 2;

binary = ng() + binary;

n = i;

}

if (i > 0) binary = "1" + binary;

return binary;

}

11、请编写一个方法,求两个整数的之和,要求在方法体内不得使用+、-、×、÷。

【参考代码】

static int AddWithoutArithmetic(int num1, int num2)

{

if (num2 == 0)

return num1;

int sum = num1 ^ num2;

int carry = (num1 & num2) << 1;

return AddWithoutArithmetic(sum, carry);

}

12、假设某公司有几千名员工,请完成一个时间复杂度为O(n)的算法对该公司员工的年龄作排序,可使用O(1)的辅助空间。

【参考代码】该方法用长度为60的整数数组timesOfAge辅助空间,换来了O(n)的时间效率。不论对多少人的年龄进行排序,辅助数组的长度timesOfAge的大小固定,因此它的空间复杂度是个常数,源-于-网-络-收-集

====Word行业资料分享--可编辑版本--双击可删====

即O(1)。

void SortAges(int []ages)

{

const int oldestAge = 59;

int [] timesOfAge = new int[oldestAge + 1];

//数组timesOfAge统计每个年龄出现的次数

for(int i = 0; i <= oldestAge; i++)

timesOfAge[i] = 0;

for(int i = 0; i < ; i++)

{

int age = ages[i];

++timesOfAge[age];

}

int index = 0;

for(int i = 0; i <= oldestAge; ++ i)

{

for(int j = 0; j < timesOfAge[i]; ++ j)

{

ages[index] = i;

++ index;

}

}

}

13、多态性的应用。

例如:方法重载类

public class MathMtics

{

public int Max(int x, int y)//求两个整数的较大值

{if(x>y)

return x;

else

return y;

}

public char Max(char x,char y)//求两个字符的较大值

{

If(x>y)

return x;

else

return y

}

};

源-于-网-络-收-集


本文标签: 方法 代码 使用 对象 实现