期末考试试题卷(A)
适用班级: B100513/14/15/16 考试时间: 120分钟
注意:看清题目要求,书写整洁!
1、选择题(每小题2分,30题共计60分)
1.C#中每个int 类型的变量占用( )个字节的内存。
A. 1 B. 2 C. 4 D. 8
2.在C#中,表示一个字符串的变量应使用以下哪条语句定义?( )
A. CString str; B. string str; C. Dim str as string D. char * str;
3.在C#编制的财务程序中,需要创建一个存储流动资金金额的临时变量,则应使用下列哪条语句?( )
A. decimal theMoney; B. int theMoney; C. string theMoney; D. Dim theMoney as double
4.C#中,新建一字符串变量str,并将字符串"Tom's Living Room"保存到串中,
则应该使用下列哪条语句?( )
A. string str = "Tom\\'s Living Room"; B. string str = "Tom's Living Room";
C. string str("Tom's Living Room"); D. string str("Tom"s Living Room");
5.C#中MyClass 为一自定义类,其中定义了以下方法
public void Hello()
{
…
}
使用以下语句创建了该类的对象,并使变量obj 引用该对象:
MyClass obj = new MyClass();
那么,可如何访问类MyClass 的Hello 方法?( )
A. obj.Hello(); B. obj::Hello(); C. MyClass.Hello(); D. MyClass::Hello();
6.分析下列C#语句,注意类MyClass 没有访问修饰符:
namespace ClassLibrary1
{
class MyClass
{
public class subclass
{
int i;
}
}
}
若必须为类MyClass 添加访问修饰符,并使MyClass 的可访问域保持不变,则应选择( )。
A. private B. protected C. internal D. public
7.分析下列程序:
public class class4
{
private string _sData = "";
public string sData
{
set
{
_sData = value;
}
}
}
在Main 函数中,在成功创建该类的对象obj 后,下列哪些语句是合法的?( )
A. obj.sData = "It is funny!"; B. Console.WriteLine(obj.sData);
C. obj._sData = 100; D. obj.set(obj.sData);
8.在定义类时,如果希望类的某个方法能够在派生类中进一步进行改进,以处理不同的派生类的需要,则应将该方法声明成( )。
A. sealed 方法 B. public 方法 C. virtual 方法 D. override 方法
9.类MyClass 中有下列方法定义:
public void testParams(params int[] arr)
{
Console.Write ("使用Params参数!");
}
public void testParams(int x,int y)
{
Console.Write ("使用两个整型参数!");
}
请问上述方法重载有无二义性?若没有,则下列语句的输出为( ).
MyClass x = new MyClass();
x.testParams(0);
x.testParams(0,1);
x.testParams(0,1,2);
A. 有语义二义性; B. 使用Params 参数!使用两个整型参数!使用Params 参数!
C. 使用Params 参数!使用Params 参数!使用Params 参数!
D. 使用Params 参数!使用两个整型参数!使用两个整型参数!
10.C#程序中,可使用try…catch 机制来处理程序出现的( )错误。
A. 语法 B. 运行 C. 逻辑 D. 拼写
11.下列语句创建了多少个string 对象?( )
string [,] strArray = new string [3, 4];
A. 0 B. 3 C. 4 D. 12
12.接口Animal 定义如下:
public interface Animal
{
void Move();
}
则下列抽象类的定义中,哪些是不合法的?( )
A. abstract class Cat: Animal
{
abstract public void Move();
}
B. abstract class Cat: Animal
{
virtual public void Move()
{
Console.Write("Move!");
}
}
C. abstract class Cat: Animal
{
public void Move()
{
Console.Write("Move!");
}
}
D. abstract class Cat: Animal
{
public void Eat()
{
Console.Write("Eat!");
}
}
13.在使用FileStream 打开一个文件时,通过使用FileMode 枚举类型的( )成员,来指定操作系统打开一个现有文件并把文件读写指针定位在文件尾部。
A. Append B. Create C. CreateNew D. Truncate
14.在类的定义中,类的( )描述了该类的对象的行为特征。
A. 类名 B. 方法 C. 所属的名字空间 D. 私有域
15.以下类MyClass 的属性count 属于( )属性.
class MyClass
{
int i;
int count
{
get
{
return i;
}
}
}
A. 只读 B. 只写 C. 可读写 D. 不可读不可写
16.已知类MyClass 中事件MouseClicked 定义如下:
public static event MouseClickedListener MouseClicked;
执行下列语句:
MouseClicked += new MouseClickedListener(obj.DoSomething);
MouseClicked += new MouseClickedListener(obj.DoSomething);
然后引发该MouseClicked 事件,其结果为:( )
A. obj.DoSomething 方法被调用4 次 B. obj.DoSomething 方法被调用2 次
C. obj.DoSomething 方法被调用1 次 D. obj. DoSomething 方法不会被调用
17.假设变量x的值为25,要输出x的值,下列正确的语句是( )。
A. System.Console.writeline(“x”); B. System.Console.WriteLine(“x”);
C. System.Console.WriteLine(“x={0}”, x); D. System.Console.WriteLine(“x={x}”);
18.关于C#程序的书写,下列不正确的说法是( )。
A. 区分大小写 B. 一行可以写多条语句
C. 一条语句可写成多行 D. 一个类中只能有一个Main()方法,因此多个类中可以有多个Main()方法
19.在C#语言中,下列能够作为变量名的是( )。
A. if B. 3ab C. a_3b D. a-bc
20.在C#语言中,下面的运算符中,优先级最高的是( )。
A. % B. ++ C. /= D. >>
21.能正确表示逻辑关系“a >= 10 或a <= 0”的C#语言表达式是( )。
A. a >= 10 or a <= 0 B. a >= 10 | a <= 0 C. a >= 10 && a <= 0 D. a >= 10 || a <= 0
22.以下程序的输出结果是( )。
using System;
class Example1
{
public static void Main()
{
int a=5, b=4, c=6, d;
Console.WriteLine(“{0}”, d = a > b ? (a > c ? a : c) : b);
}
}
A.5 B.4 C.6 D.不确定
23.有如下程序:
using System;
class Example1
{
public static void Main()
{
int x = 1, a = 0, b = 0;
switch(x)
{
case 0:
b++;
break;
case 1:
a++;
break;
case 2:
a++;
b++;
break;
}
Console.WriteLine(“a = {0}, b = {1}”, a, b);
}
}
的输出结果是( )。
A. a = 2, b = 1 B. a = 1, b = 1 C. a = 1, b = 0 D. a = 2, b = 2
24.以下关于for循环的说法不正确的是( )。
A. for循环只能用于循环次数已经确定的情况 B. for循环是先判定表达式,后执行循环体语句
C. for循环体语句中,可以用break语句跳出循环体
D. for循环体语句中,可以包含多条语句,但要用花括号括起来
25.关于C#语言的方法,下列叙述中正确的是( )。
A. 方法的定义不能嵌套,但方法调用可以嵌套 B. 方法的定义可以嵌套,但方法调用不能嵌套
C. 方法的定义和调用都不能嵌套 D. 方法的定义和调用都可以嵌套
26.以下所列的各个方法头中,正确的是( )。
A. void play(var a: Integer, var b: Integer) B. void play(int a,b)
C. void play(int a, int b) D. Sub play(a as integer, b as integer)
27.下列程序的输出结果是( )。
using System;
class Example1
{
static long sub(int x, int y)
{
int z;
z = x * x + y * y;
return z;
}
public static void Main()
{
int a = 30;
sub(5, 2);
Console.WriteLine(“{0}”, a);
}
}
A. 0 B. 29 C. 30 D. 无定值
28.以下对枚举的定义,正确的是( )。
A. enum a = {one, two, three} B. enum a {a1, a2, a3};
C. enum a = {‘1’, ’2’, ’3’}; D. enum a {“one”, ”two”, ”three”};
29.调用重载方法时,系统根据( )来选择具体的方法。
A. 方法名 B. 参数的个数和类型 C. 参数名及参数个数 D. 方法的返回值类型
30.下列的( )不是构造函数的特征。
A. 构造函数的函数名和类名相同 B. 构造函数可以重载
C. 构造函数可以带有参数 D. 可以指定构造函数的返回值
2、程序填空题 (每空2分,10空共计20分)
1.请补充程序,使输出结果为:a=20,b=10
class Program
{
static void Main()
{
int a = 10, b = 20;
Swap( 1 , 2 );
Console.WriteLine("引用传递: a = {0}, b = {1}", a, b);
Console.ReadLine();
}
public static void Swap( 3 , 4 )
{
int z = x;
x = y;
y = z;
}
}
2.定义一个抽象类Vehicle,然后再定义它的一个派生类Truck,Truck类实现Vehicle类抽象方法和虚拟方法。请把程序补充完整。
public 5 class Vehicle
{
private float speed;
public float Speed
{
get { return speed; }
set { speed = value; }
}
public Vehicle(float speed)
{
this.speed = speed;
}
public virtual float Run(float distance)
{
return distance / speed;
}
public abstract void Speak();
}
public class Truck : Vehicle
{
private float weight;
public float Weight
{
get { return weight; }
}
private float load;
public float Load
{
get { return load; }
}
public Truck(int weight, int load) : base(50)
{
this.weight = weight;
this.load = load;
}
public 6 float Run(float distance)
{
return (1 + load / Weight / 2) * base.Run(distance);
}
public 7 void Speak()
{
Console.WriteLine("叭...叭...");
}
}
3.下面这段程序的功能是:把数列a1=1,a2=1, (n>2)的每一项求出来写到文件C:\\num.txt文件中去,然后我们根据要求的数列项从文件中把该项读出来。请把程序补充完整。
static void Main()
{
FileStream fs1 = new FileStream( 8 , FileMode.Create);
for (ushort a = 1, b = 1; a <= 10000; 9 )
{
ushort t = b;
b = a;
a = t;
fs1.WriteByte((byte)(a / 256)); //写入前8位
fs1.WriteByte((byte)(a % 256)); //写入后8位
}
fs1.Position = 0;
Console.Write("请输入要读取的数列项: ");
int i = int.Parse(Console.ReadLine());
fs1.Position = 2 * i;
int x = 10 ;
Console.WriteLine("数列项为: " + x);
fs1.Close();
Console.ReadLine();
}
3、编程题(每题10分,2题共计20分)
1.编写一个矩形类,私有数据成员为矩形的长(len)和宽(wid),无参构造函数将len和wid设置为0,有参构造函数设置长(len)和宽(wid)的值。另外,类还包括求矩形的周长、求矩形的面积、取矩形的长度、取矩形的宽度、修改矩形的长度和宽度为对应的形参值等公用方法。
2.编写出一个通用的人员类(Person),该类具有姓名(Name)、性别(Sex)、年龄(Age)等域。然后对Person 类的继承得到一个学生类(Student),该类能够存放学生的5门课的成绩,并能求出平均成绩,要求对该类的构造函数进行重载,至少给出三个形式。最后编程对Student类的功能进行验证。
洛阳理工学院 2010/2011学年第一学期 面向对象程序设计
期末考试评分标准(A)
适用班级: B100513/14/15/16 考试时间: 120分钟
注意:看清题目要求,书写整洁!
4、选择题(每小题2分,30题共60分)
1-5: CBAAA 6-10: CACBB
11-15:DDABA 16-20: BCDCB
21-25:DCCAA 26-30:CCBBD
程序填空题 (每空2分,10空共计20分)
1. ref a 2. ref b 3. ref int x 4. ref int y
5. abstract 6. override 7. override
8. "C:\\\\num.txt"或@"C:\\num.txt" 9. a += b或a=a+b 10. 256 * fs1.ReadByte() + fs1.ReadByte()
5、编程题(每题10分,2题共计20分)
1.编写一个矩形类,私有数据成员为矩形的长(len)和宽(wid),无参构造函数将len和wid设置为0,有参构造函数设置长(len)和宽(wid)的值。另外,类还包括求矩形的周长、求矩形的面积、取矩形的长度、取矩形的宽度、修改矩形的长度和宽度为对应的形参值等公用方法。
参:
class Rectangle 。。。。。。。1分
{
private float len; //长
private float wid; //宽 。。。。。。。1分
//无参构造函数
public Rectangle() 。。。。。。。1分
{
this.len = 0;
this.wid = 0;
}
//有参构造函数
public Rectangle(float length, float width) 。。。。。。。1分
{
this.len = length;
this.wid = width;
}
//取矩形的长度
public float GetLength() 。。。。。。。1分
{
return this.len;
}
//取矩形的宽度
public float GetWidth() 。。。。。。。1分
{
return this.wid;
}
//修改矩形的长度
public void SetLegth(float length) 。。。。。。。1分
{
this.len = length;
}
//修改矩形的宽度
public void SetWidth(float width) 。。。。。。。1分
{
this.wid = width;
}
//求矩形的周长
public float GetGirth() 。。。。。。。1分
{
return (this.len + this.wid) * 2;
}
//求矩形的面积
public float GetArea() 。。。。。。。1分
{
return this.len * this.wid;
}
}
2.编写出一个通用的人员类(Person),该类具有姓名(Name)、性别(Sex)、年龄(Age)等域。然后对Person 类的继承得到一个学生类(Student),该类能够存放学生的5门课的成绩,并能求出平均成绩,要求对该类的构造函数进行重载,至少给出三个形式。最后编程对Student类的功能进行验证。
参:
//通用的人员类:Person
class Person 。。。。。。。2分
{
protected string Name;
protected string Sex;
protected int Age;
public Person()
{
}
public Person(string name, string sex, int age)
{
this.Name = name;
this.Sex = sex;
this.Age = age;
}
}
//继承自人员类的学生类:Student
class Student : Person 。。。。。。。1分
{
//用于存储5门课成绩的整型数组
private int[] Score;
//构造函数1
public Student()
{
this.Name = "张三";
this.Sex = "男";
this.Age = 20;
this.Score = new int[] { 60, 70, 80, 90, 100 };
}
//构造函数2
public Student(string name, string sex, int age, int[] score)
: base(name, sex, age)
{
this.Score = score;
}
//构造函数3
public Student(int[] score) 。。。。。。。2分
{
this.Name = "王五";
this.Sex = "男";
this.Age = 19;
this.Score = score;
}
//求平均成绩
public float Avg() 。。。。。。。1分
{
int total = 0;
for (int i = 0; i < this.Score.Length; i++)
{
total = total + Score[i];
}
return total / Score.Length;
}
public void Display() 。。。。。。。1分
{
Console.WriteLine("姓名:{0}", this.Name);
Console.WriteLine("性别:{0}", this.Sex);
Console.WriteLine("年龄:{0}", this.Age);
Console.Write("成绩:");
foreach (int K in this.Score)
{
Console.Write(K + " ");
}
Console.WriteLine("平均成绩是:{0}", Avg());
Console.WriteLine();
}
}
class Program
{
static void Main(string[] args) 。。。。。。。3分
{
Student stu1 = new Student();
stu1.Display();
Student stu2 = new Student("李四", "女", 20, new int[] { 65, 75, 85, 95, 100 });
stu2.Display();
Student stu3 = new Student(new int[] { 70, 75, 80, 85, 90 });
stu3.Display();
}
}