C#考试复习.docx
《C#考试复习.docx》由会员分享,可在线阅读,更多相关《C#考试复习.docx(41页珍藏版)》请在冰豆网上搜索。
C#考试复习
第一部分概述
单选
下列哪个选项不属于冯诺依曼体系的计算机组成部分?
(按照教材上的说明,此题无解,但是若考虑到冯诺依曼那个时代,还没有硬盘,数据直接在内存中存储,计算之后直接输出,硬盘是到后期才有的。
所以,就选B。
)
A)内存
B)硬盘
C)键盘
D)CPU
单选
软件可以分为系统软件和应用软件,下列哪个属于系统软件?
C
A)IE7.0浏览器
B)B2B购物系统
C)WindowsVista家庭版
D)ERP财务系统
多选
下列关于计算机软件的特征描述中,哪两个选项是正确的?
AC
A)计算机软件是指按照特定的顺序组织、能够使计算机具有特定的信息处理能力。
B)计算机软件可以循环利用,没有生命周期。
C)计算机软件标志一定功能,完成一定任务或产生一定结果。
D)计算机软件价格昂贵,仅仅适合于专业科研人员使用
单选
以下哪个选项不属于算法的特征
A)输入输出
B)简洁性
C)可行性
D)确切性
E)有穷性
答案:
B见教材P4
单选
计算机软件是指令、数据和什么的集合?
A)文档
B)代码
C)逻辑
D)程序
答案:
A
第二部分C#与VS2008
单选
在VS2008的解决方案资源管理器中,使用哪种方式标示项目为启动项目?
C
A)在项目名后标记(启动项目)
B)高亮显示
C)粗体
D)其他三项都有
多选
在“工具”菜单中选择“选项”命令,可以更改启动VS2008时默认出现的用户界面,以下哪些是VS2008支持的启动界面?
ABCD
A)空环境,不打开任何界面。
B)最后一次加载的项目
C)打开起始页
D)打开主页
多选
创建项目后,希望在当前项目中增加一个WindowsForm界面,以下哪些方法可以实现?
AB
A)使用类视图,右键后选择“添加”,再选择“类”
B)在解决方案资源管理器中,右键当前项目,选择“添加”,再选择“新项目”
C)点击“文件”,选择子菜单中的“打开”再选择“项目”
D)点击“文件”,选择子菜单中的“新建”再选择“项目”(这是新建,不是在原有项目中增加。
)
判断:
“类视图”窗口可以用来浏览当前项目中的文件、命名空间和类
答案:
错误,查看文件要通过解决方案资源管理器
多选
下列C#代码中有哪些错误?
UsingSystem
*
*这是多行注释的格式//这一行有错
*
*
classTesting
{
staticvoidMain()
{
intAge=21;intWeight;stringname=”Jack”;
Console.WriteLine(Age.ToString())(这一行没有正确的结束)
//Console.WriteLine(name.ToString());
}
}
A)单行代码没正确的结束符号
B)多段代码写在同一行中
C)代码中存在大小写敏感问题
D)不正确的注释符号的使用
答案:
BD
单选
在VS2008中,哪个窗口中可以查看当前项目的类和类型的层次信息?
A)属性
B)资源视图
C)类视图
D)解决方案资源管理器
答案:
C
VS2008的安装环境要求,包括硬件和软件两方面的要求
第三部分变量、数据类型和表达式
多选:
下列变量名中,哪些不合法?
AB
A)homyu.shinu
B)string
C)_43zz
D)Int
单选
当你需要使用某一种数据类型表达同一类事物的不同状态,如男人、女人,春夏秋冬等,C#中最直观可靠的方案是?
C
A.用int类型,分别用0,1,2,3......表示
B.使用struct结构
C.使用enum枚举
D.C#中无法做到
判断:
以下代码执行后,String类型变量a的值仍然是“OriginalValue”
classProgram
{
staticvoidMain(string[]args)
{
stringa="OriginalValue";
b(a);
Console.WriteLine(a);
}
staticprivatevoidb(stringc)
{
c="changed";
}
}
正确
判断:
在同一行代码中,等于运算符的优先级高于关系运算符
答案:
错误,这里的等于运算符是“==”其优先级低于关系运算符。
单选
假设a不等于b,且b不等于false,下列哪个表达式的计算结果是false?
B
A)a=b
B)a==b
C)a!
=b
D)a<>b
多选
下列关于“||”运算符的描述中,哪些是正确的?
A)“||”运算符不是关键字
B)“||”运算符执行短路运算
C)“||”运算符是一种比较运算符
D)在使用“||”运算符的运算中,如果结果为真,则运算符左右两边的操作数都为真
答案:
AB
关于短路和非短路运算
判断:
+,-,*,/,%都是三元运算符错误
在C#2008的环境中,int32类型变量可以直接隐式转换成char类型变量。
错误
经过表达式a=3+1>5?
0:
1计算,a的值是多少?
答案:
1
本题考查学生对运算符优先级的掌握情况。
在这一表达式中涉及赋值运算符,算术运算符,关系运算符,条件运算符。
这几类运算符的优先级从高到低依次是:
算术运算符,关系运算符,条件运算符,赋值运算符。
所以,先执行“+“运算,其次再进行大小比较,然后再进行条件运算,最后是赋值。
为1。
多选
从下列选项中,选择变量result值是false的表达式
A)boolresult=(1!
=1);
B)boolresult=0;(错误,不可以将int隐式转换为bool型)
C)boolresult=(4==5);
D)boolresult=(1=1);
答案:
AC
多选
以下选项中哪种变量声明方式可以通过编译
A)intzb
B)constintvalue=2
C)conststringtext
D)Int32_k=7
答案:
ABD
补充内容:
C#3.0var关键字的使用
第四部分分支和循环
单选:
分析以下代码,循环结束后i的值是多少?
for(inti=0;i<=10;i++)
if(i%5==0)
continue;
A.11
B.10
C.6
D.5
答案A
单选:
要在循环执行过程中中断并跳出循环,应该使用哪个语句?
C
A.switch
B.goto
C.break
D.continue
多选
Switch多分支语句的控制表达式可以支持以下哪些类型?
ABCD(实验证明,四个都可以,书上描述不正确)
A.enum类型
B.string类型
C.char类型
D.integer类型
多选
计算机程序通常是由若干语句组成的,组成程序的常用结构分别是下列哪几种?
ABC
A.分支结构
B.顺序结构
C.循环结构
D.跳转结构
改错:
以下代码输出1-100之间的偶数,但编译出错,请找出出错的那一行,并改正。
classProgram
{
staticvoidMain(string[]args)
{
for(i=1;i<=100;i++)//变量i没有定义,需要在这一行之前加上”inti;”定义语句
{
if(i%2==0)
Console.Write(i+"");
}
}
}
填空:
以下代码的功能是找出0-20之间所有能被4整除,但不能被5整除的数,并输出它们的和。
请填空。
staticvoidMain(string[]args)
{
intSum=0;
for(inti=0;i<=20;i++)
{
if(i%4==0&&i%5!
=0)
{
Sum+=i;
continue;
}
}
Console.WriteLine("sum={0}",Sum);
}
划线处为填空处,已填答案。
单选
关于如下程序结构的描述中,哪个是正确的?
for(;;)
{
循环体;
}
A)一直执行循环体,就是死循环
B)不执行循环体
C)执行循环体一次
D)程序不符合语法要求
答案:
A
单选
写出程序运行结果:
classProgram
{
staticvoidMain(string[]args)
{
for(inti=1;i<=16;i++)
if(i%4==0)
Console.Write(i.ToString()+"");
}
}
答案:
481216
程序改错
从输入的字符串中找出小写字母并输出.请查出以下代码的错误,并在其后的空白处填写正确的代码。
classProgram
{
staticvoidMain(string[]args)
{
stringinputString=Console.ReadLine();
stringlowerCase=string.Empty;
foreach(charchininputString)
{
if(ch<='z'||ch>='a')
lowerCase+=ch.ToString();
}
Console.WriteLine("小写字母有:
"+lowerCase);
}
}
划线处改为:
ch<='z'&&ch>='a'
填空
下面的程序要完成的是,输入一个自然数,输出它是奇数还是偶数,请分析以下代码并在空白处填空。
(划线处为填空处。
)
staticvoidMain(string[]args)
{
intInputNumber=int.Parse(Console.ReadLine());
switch(InputNumber%2)
{
case1:
Console.WriteLine("奇数");break;
default:
Console.WriteLine("偶数");break;
}
}
单选
下面的结构图对应于那种程序语句结构?
(其中A是程序段,P是条件。
)
A)if…else
B)while
C)foreach
D)do..while..
答案:
B
单选
分析一下while语句,最终i的值是多少?
inti=0;
while(i++<=10)
if(i%5==0)
break;
A)12
B)11
C)10
D)5
答案:
D
分析以下程序,求运行结果
staticvoidMain(string[]args)
{
intSum1=0,Sum2=0;
inti=0;
while(++i<10)
{
Sum1+=1;
}
i=0;
do
{
Sum2+=1;
}while(++i<10);
Console.WriteLine("Sum1={0},Sum2={1}",Sum1,Sum2);
}
运行结果:
Sum1=9,Sum2=10;
单选:
分析以下代码:
staticvoidMain(string[]args)
{
charn;
n=char.Parse(Console.ReadLine());
if(n<'g')
{
if(n<'r')
Console.WriteLine("One");
else
{
if(n!
='x')
Console.WriteLine("Two");
else
Console.WriteLine("Three");
}
}
}
A)n=’y’输出“Three“
B)n=’d’输出“One“
C)n=’x’输出“Two“
D)n=’d’没有输出
答案:
B
以下程序的功能是,输入一个字符串,若字符串中有数字,则计算这些数字的和。
staticvoidMain(string[]args)
{
stringinputString=string.Empty;
intsResult=0;
inputString=Console.ReadLine();
foreach(charchininputString)
{
if(ch>='0'&&ch<='9')
sResult+=Convert.ToInt32(ch.ToString());
}
if(sResult==0)
Console.WriteLine("输入的字符串中没有数字。
");
else
Console.WriteLine("sResult={0}",sResult);
}
划线处为填空处。
第五部分面向对象
关键字partial:
其作用是在一个文件中定义一个类的某部分,然后在另一个文件中再进一步定义这个类。
文件1
publicpartialclassMyClass
{
publicvoidTest1()
{
Console.WriteLine("Test1");
}
}
classProgram
{
staticvoidMain(string[]args)
{
MyClassmc=newMyClass();
mc.Test1();
mc.Test2();
}
}
文件2
publicpartialclassMyClass
{
publicvoidTest2()
{
Console.WriteLine("Test2");
}
}
横线处为填空处
多选:
以下哪些选项正确描述了“属性”及“索引器”之间的关系和概念?
A)索引器是一种特殊的属性,通过索引器可以像引用数组一样引用类本身。
B)想要声明一个只读属性必须在属性前加readonly(不对,只读属性是只有get访问器)
C)索引器可以为静态成员(错,实行可以是静态的,而索引器必须是实例成员)
D)属性get方法没有参数,索引器可以传递参数
答案:
AD
判断:
类和对象的区别是,类是对象的实例,而对象是类的抽象。
错误,说反了。
填空题
以下代码需要实现的功能是:
变量rusult通过方法TestMethod得到一个1到100的随机数,请对代码进行填空。
(本题考察学生对out和ref两个关键字的掌握情况,划线处为要求填空的项目)
classProgram
{
staticvoidTestMethod(outintrandomNum)
{
Randomrd=newRandom();
randomNum=rd.Next(1,100);
}
staticvoidMain(string[]args)
{
intresult;
TestMethod(outresult);
Console.WriteLine("随机数为:
"+result);
}
}
以下程序的功能是:
产生0-7的随机数,如果这个数是在1-5之间,显示“Workday”,如果是“6-7”之间,显示“Weekend”,其他数显示“NoDay”.请按照题目要求对代码进行填空。
staticvoidMain(string[]args)
{
Randomrm=newRandom();//生成随机数
boolflag=true;
stringtestFlag;
intday;
while(flag)
{
Console.WriteLine("Doyouwanttotest?
");
testFlag=Console.ReadLine().ToUpper();
if(testFlag=="Y")
flag=true;
else
flag=false;
day=rm.Next(0,7);
Console.WriteLine(day);
switch(day)
{
case0:
Console.WriteLine("NoDay");break;
case1:
case2:
case3:
case4:
case5:
Console.WriteLine("WorkDay");break;
case6:
case7:
Console.WriteLine("Weekend");break;
}
}
}
单选:
在C#中,TestClass为一个自定义的类,其中有以下属性定义:
publicvoidProperty{…}
使用以下语句创建该类的对象,并使用对象obj名对其进行引用。
TestClassobj=newTestClass();
可以通过什么方式访问Property属性?
B
A.MyClass.Property;
B.obj.Property;
C.obj:
:
Property;
D.obj.Properity();
单选
封装是指使用抽象的数据类型将数据和基于数据的_________包装在一起,封装的主要目的就是为了达到接口和___________的分离。
B
A.操作,数据
B.操作,实现
C.接口,实现
D.接口,操作
多选
SampleDelegate是一个委托,与方法SampleMethod1和SampleMethod2有着相同的签名。
以下代码中,哪一些能够实现多播委托?
ACD
A.SampleDelegated3=newSampleDelegate(SampleMethod1)+newSampleDelegate(SampleMethod2);
B.SampleDelegated3=SampleMethod1+SampleMethod2;(错误)
C.SampleDelegated3=SampleMethod1;
d3+=SampleMethod2;
D.SampleDelegated1=SampleMethod1;
SampleDelegated2=SampleMethod2;
SampleDelegated3=d1+d2;
多选
关于封装的优点,哪些是正确的?
ABC
A.提高数据安全性
B.简化问题,容易操作
C.降低耦合度
D.增强代码重用性(这一条貌似没错,但是应该是面向对象的优点,不属于封装的优点)
判断
1.面向对象将数据和对数据的操作作为一个相互依赖,不可分割的整体,采用了数据抽象和信息隐蔽技术。
正确
2.属性就是实体特征的抽象,比如,对象猫可以有体重、身长等属性。
正确
3.以下代码的功能是在派生类class1中实现对虚方法printf()的重写。
(正确)
abstractpublicclassBaseClass
{
publicvirtualstringprintf()
{
return"这是虚方法";
}
}
publicclassclass1:
BaseClass
{
publicstringprintf()
{
return"这是新方法";
}
}
分析以下代码段,求运行结果
delegatestringSampleDelegate(string_value);
classProgram
{
staticvoidMain(string[]args)
{
SampleDelegated3=newSampleDelegate(SampleMethod1)+newSampleDelegate(SampleMethod2);
Console.WriteLine(d3("test"));
}
publicstaticstringSampleMethod1(string_value1)
{
return_value1+"1";
}
publicstaticstringSampleMethod2(string_value2)
{
return_value2+"2";
}
}
答案:
test2
本题考查学生对“委托”这一概念的掌握情况,可以将两个有返回值的方法都赋给某一个委托,但是最终的返回值是取决于最后一个方法的返回值。
多选
关于结构和类的描述,哪些选项不正确?
A)结构中初始化实例化字段是错误的(正确)
B)结构不能继承(正确)
C)结构实例化需要用new(不用也行)
D)结构和类都是引用类型(错,结构是值类型,类是引用类型)
答案:
CD
多选:
下列关于“方法重载”的描述中,哪些是正确的?
A)方法ConsoleW(int_value)是方法ConsoleW(string_value)的重载
B)方法重载即“同样的方法名但传递的参数不同”
C)构造函数不可以重载
D)方法重载可以扩充现有类的功能
答案:
ABD选项C错误,构造函数是可以重载的。
判断:
对象和对象之间的关系可以分为三类:
包含、继承和关联。
正确,见教材P90
publicdelegatevoidMyTestDelegate(stringstr1,stringstr2);
classProgram
{
staticvoidMain(string[]args)
{
MyTestDelegateMyTest=Compare;
MyTest("Bob","Magic");
}
staticvoidCompare(stringstr1,stringstr2)
{
switch(string.Compare(str1,str2))
{
case1:
Console.WriteLine("Greater");break;
case0:
Console.WriteLine("equal");break;
case-1:
Console.WriteLine("losser");break;
default:
Console.WriteLine("error");break;
}
}
}
划线处为填空处,本题考查委托的概念及委托的赋值和使用。
单选
下列关于继承的说法中,哪个选项不正确?
A)派生类只能从一个类中继承,但可以通过接口实现多重继承
B)类可以定义虚方法,虚属性等,它的派生类