C复习.docx
- 文档编号:3507970
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:20
- 大小:23.79KB
C复习.docx
《C复习.docx》由会员分享,可在线阅读,更多相关《C复习.docx(20页珍藏版)》请在冰豆网上搜索。
C复习
(一)题型与分值分布
1、填空题(10小题,10分)
2、选择题(12小题,24分)
3、问答与分析题(6小题,20分)
4、程序填空题(6小题,34分)
5、程序设计题(1小题,12分)
(二)知识要点
一、C#基础知识
1、C#源文件的扩展名为cs,C#的编译器为csc。
2、C#的数据类型分为两大类:
值类型和引用类型。
3、小数类型:
double、float、decimal类型。
【例1】在C#编制的财务程序中,需要创建一个存储流动资金金额的变量theMoney,则应该将该变量定义为__decimal_______类型。
4、整数相除的结果为整数,小数相除的结果为小数。
【例2】下面代码的输出结果为______22.5_____________。
Console.WriteLine(5/2);
Console.WriteLine(5.0/2);
【例3】假设变量a、b均为int型变量,且所赋的值均大于1,则代数式
对应的C#表达式为____1.0/a*b______________。
5、假设有两个整型数x和y,则表达式(x^y)^y值还原为x。
6、将一个数左移N位相当于将一个数乘以2的n次方。
【例4】256>>8的计算结果为______1______,1<<8的计算结果为________256_____。
7、基本数据类型的转换:
隐式转换、强制转换、数据类型的自动提升。
【例5】设有如下变量说明:
(b)
bytemyByte;intmyInt;
longmyLong;charmyChar;
以下赋值语句哪个需要强制转换。
A.myInt=myByte;B.myInt=(int)myLong;
C.myByte=3;D.myInt=myChar;
【例6】以下代码的输出结果为:
(B)
inta=3;
Console.WriteLine(""+2+a);
Console.WriteLine(2+3);
Console.WriteLine(2+3+"");
Console.WriteLine(2+""+3);
A.第2行出现编译错误B.输出23,5,5和23.
C.输出5,5,5和23.D.输出5,5,23和23.
8、流程控制:
if、switch、while、for、break、continue等语句。
9、参数传递:
(1)参数类型为int、double等基本数据类型时,实参与形参之间进行的是值传递。
形参的变化不对实参造成影响。
【例7】请分析下面程序的输出结果
classInvoke
{
voidChange(intx)
{
x=3;
}
publicstaticvoidMain(String[]args)
{
intx=5;
Invokee1=newInvoke();
e1.Change(x);
Console.WriteLine(x);
}
}
输出结果:
5
(2)当参数类型为数组,或者对象类型时,实参和形参之间进行地址传递。
实参随着形参的变化而变化。
【例8】请分析下面程序的输出结果
classInvoke
{
intx;
voidChange(Invokeobj)
{
obj.x=3;
}
publicstaticvoidMain(String[]args)
{
Invokee1=newInvoke();
e1.x=5;
e1.Change(e1);
Console.WriteLine(e1.x);
}
}
输出结果:
3
(3)当参数为基本数据类型时,要使用关键字ref才能实现地址传递。
【例9】请分析下面程序的输出结果
classTest
{
staticintx=7;
publicstaticvoidMain(String[]args)
{
x=8;
Change(refx);
Console.WriteLine(x);
}
staticvoidChange(refintx){
x+=2;
}
}
输出结果:
10
(4)输出型参数(out)用来从函数中返回结果。
10、方法重载指的是,一个类中允许出现多个同名的方法,只要参数个数或参数类型不同,编译器就认为这是两个不同的方法。
11、变量的作用域:
变量只能在定义它的复合语句中使用。
【例10】请指出下面代码编译出错的原因,并更正。
try
{
intsum=0;
for(inti=0;i<10;i++)
{
sum=sum+i;
}
}
catch(Exceptione)
{
Console.WriteLine(e.Message);
}
Console.WriteLine("sum={0}",sum);
局部变量只能在其复合语句中使用,应把sum移到try上面来定义。
二、面向对象程序设计
1、面向对象的基本概念。
面向对象编程先确定数据结构,再确定运算
2、Object类是所有类的父类。
3、构造方法:
(1)创建对象时被自动调用;
(2)与类同名,不具有返回类型;(3)一旦编译器重载了构造方法后,不再自动生成不带参数的构造方法。
【例1】请分析下面代码的出错的原因,并指正。
classA
{
intage;
publicA(intage)
{
this.age=age;
}
publicstaticvoidMain(string[]args)
{
Aa=newA(20);
}
}
创建对象时应该带有一个参数
4、this关键字
在方法定义中,使用this关键字代表使用该方法的对象的引用。
this可以看成是一个变量,它的值是当前对象的引用。
通常使用this处理方法中成员变量与参数同名的问题。
通过this(参数列表),调用其他构造方法。
5、base关键字:
(1)使用base关键字引用父类的成员;
(2)还可以通过base(参数列表)引用父类的构造方法。
6、sealed关键字:
(1)sealed类不能被继承;
(2)sealed方法不能被重写。
7、virtual关键字:
定义的方法可以被子类重写。
8、abstract关键字:
定义的方法为抽象方法;定义的类为抽象类。
9、interface关键字:
在C#中通过接口的定义实现多继承。
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、动态绑定。
【例3】请分析下面程序的输出结果。
usingSystem;
classA
{
publicvirtualvoidFunc1(){Console.WriteLine("A:
Func1()iscalling");}
}
classB:
A
{
publicoverridevoidFunc1(){Console.WriteLine("B:
Func1()iscalling");}
publicvoidFunc2(){Console.WriteLine("B:
Func2()iscalling");}
}
classC
{
publicstaticvoidCallA(Aa)
{
if(aisB)
{
Bb=(B)a;b.Func1();b.Func2();
}
else
{
a.Func1();
}
}
publicstaticvoidMain(string[]args)
{
Aa=newA();
CallA(a);
Console.WriteLine(aisA);
}
}
输出结果:
A:
Func1()iscalling
True
请思考:
将语句Aa=newA()改成Aa=newB()或Ba=newB(),对应的输出结果为多少?
B:
Func1()iscalling
B:
Func2()iscalling
True
12、异常处理机制:
try语句块中包含可能发生异常的代码,catch语句块中包含异常发生时的处理代码,finally语句块中的代码在有无异常的时候都会执行。
【例4】当参数为5和1时,以下程序的执行结果为(B)
publicstaticvoiddivide(inta,intb){
try{
intc=a/b;return;
}catch(Exceptione){
Console.WriteLine("Exception");
}finally{
Console.WriteLine("Finally");
}
}
A.输出ExceptionFinallyB.输出Finally
C.输出ExceptionD.无输出
【例5】下列代码中,哪些行将产生空指针异常。
(A)
1strings=null;
2if(s!
=null||s.Length>0)
3Console.WriteLine("s!
=null||s.Length>0");
4if(s!
=null|s.Length>0)
5Console.WriteLine("s!
=null|s.Length>0");
6if(s!
=null&s.Length>0)
7Console.WriteLine("s!
=null&s.Length>0");
8if(s!
=null&&s.Length>0)
Console.WriteLine("s!
=null&&s.Length>0");
A.246B.2468
C.468D.268
三、windows窗体设计
1、委托的定义及使用。
2、C#使用委托机制实现事件处理。
3、计时器控件。
【例1】在一个窗体应用程序中,需要在一分钟内自动浏览完文件夹中的60张图片,则需要设置计时器控件的Interval属性的值为_____1000_______。
四、数据库连接
1、通过在ADO.NET框架中,通过创建Connection对象建立与数据源之间的连接,通过创建Command对数据源执行各种SQL命令。
stringconStr="datasource=127.0.0.1;database=studentcourse;integratedsecurity=True";
SqlConnectionsqlCon=newSqlConnection(conStr);
sqlCon.Open();
stringuserName=txtUserName.Text.Trim();
stringsqlStr="selectuserName,userPassfromuserInfowhereuserName='"+userName+"'";
SqlCommandsqlCommand=newSqlCommand(sqlStr,sqlCon);
stringsqlStr=“select*fromstudent”;
SqlCommandcommand
=newSqlCommand(sqlStr,sqlCon);
2、MD5算法。
思考:
如何使用后台数据库中的userInfo(userName,userPass)表实现用户的登录与注册?
其中,userPass字段中存放的是由MD5算法加密后的用户密码。
/*使用MD5加密字符串的方法*/
publicstaticstringGetMd5Str(stringmyString)
{
MD5CryptoServiceProvidermd5=newMD5CryptoServiceProvider();
byte[]fromData=Encoding.Unicode.GetBytes(myString);
byte[]toData=md5.ComputeHash(fromData);
stringbyteStr=null;
for(inti=0;i { byteStr+=toData[i].ToString("x"); } returnbyteStr; } /*btnAdd_Click方法实现用户信息的注册*/ privatevoidbtnAdd_Click(objectsender,EventArgse) { stringuserName=txtUser.Text.Trim(); stringuserPass=txtPass.Text.Trim(); stringconStr="server=.;database=studentcourse;integratedsecurity=True"; SqlConnectionsqlCon=newSqlConnection(conStr); sqlCon.Open(); SqlCommandcheckCmd=sqlCon.CreateCommand(); checkCmd.CommandText="select*fromuserInfowhereuserName=@un"; checkCmd.Parameters.AddWithValue("un",userName); SqlDataReaderreader=checkCmd.ExecuteReader(); if(reader.Read()) { MessageBox.Show("用户名已经存在"); } else { reader.Dispose(); stringsqlStr="insertintouserInfo(userName,userPass)values(@un,@pd)"; SqlCommandsqlCommand=newSqlCommand(sqlStr,sqlCon); sqlCommand.Parameters.AddWithValue("un",userName); sqlCommand.Parameters.AddWithValue("pd",GetMd5Str(userPass)); sqlCommand.ExecuteNonQuery(); MessageBox.Show("添加成功","提示"); } sqlCon.Close(); } /*btnOK_Click方法实现用户的登录/ privatevoidbtnOK_Click(objectsender,EventArgse) { stringconStr="server=.;database=studentcourse;integratedsecurity=True"; SqlConnectionsqlCon=newSqlConnection(conStr); sqlCon.Open(); stringsqlStr="selectuserName,userPassfromuserInfowhereuserName=@userName"; SqlCommandsqlCommand=newSqlCommand(sqlStr,sqlCon); sqlCommand.Parameters.AddWithValue("@userName",txtUser.Text.Trim()); SqlDataReaderreader=sqlCommand.ExecuteReader(); if(! reader.Read()) { MessageBox.Show("用户名不存在! ","错误"); } elseif(reader["userPass"].ToString().Trim()==GetMd5Str(txtPass.Text.Trim())) { MessageBox.Show("登录成功","正确"); } else { MessageBox.Show("密码错误","错误"); } sqlCon.Close(); } 3、SQL语句的注入攻击。 【例1】请举例说明什么是SQL语句注入攻击? 试给出一种预防注入攻击的方法。 答: 假设使用如下SQL语句查找给定学号的学生信息, Strings=“select*fromstudentwheresno=’”+sno+“’”;注意引号 Sno代表用户输入的学号。 如果输入的是字符串: ’or‘1’=’1 那么,执行该语句,将返回student表中的所有的学生信息。 即该语句存在SQL语句的注入攻击。 可以采用传入参数的方式预防注入攻击,对应的代码改成: stringsqlStr="selectsno,snamefromstudentwheresno=@snoPar"; SqlCommandcommand=newSqlCommand(sqlStr,sqlCon); command.Parameters.AddWithValue("@snoPar",sno); 此时,当用户输入字符串: ’or‘1’=’,上述代码将在student表中查找学号为“: ’or‘1’=’1”的学生信息,返回结果为空,即预防了上述的注入攻击。 4、数据库系统设计的三层架构: 表示层(UI)、业务逻辑层(BLL)、数据访问层(DAL) (三)程序设计题 1、请编写一个实现闰年测试的代码。 闰年为能被4整除却不能被100整除,或能被400整除的年份。 【参考代码】 Console.WriteLine("请输入一个年份"); StringsYear=Console.ReadLine(); intyear; if(int.TryParse(sYear,outyear))//把输入的字符串转换为等价的INT型 { if(year%400==0||year%4==0&&year%100! =0) Console.WriteLine("闰年! "); else Console.WriteLine("非闰年! "); } 2、请编写一个计算一个长整数各位数之和的方法。 【参考代码】 publicstaticintGetSum(longs) { intsum=0; while(s>0) { sum=sum+(int)(s%10); s=s/10; } returnsum; } 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、请编写一个方法,对小数进行四舍五入的计算。 【参考代码】 publicstaticintFunc(doublea)//四舍五入返回肯定是整型 { intb=(int)a; if(Math.Abs(a-b)>=0.5) { if(a>0.0) b++; else b--; } returnb; } 6、请编写一个实现通用函数定积分计算的方法。 【参考代码】 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; } } 7、请编写一个通用排序的方法。 【参考代码】 publicclassBubbleSorter { publicdel
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 复习