第59卷 算法与程序设计—关键字与构造函数—河北省计算机类—考纲百套卷
|
2份
|
31页
|
49人阅读
|
0人下载
内容正文:
编写说明:河北省对口招生计算机类《考纲百套卷》,依据《河北省普通高等学校对口招生考试大纲(2028版专业课)计算机类》编写。本专辑涵盖9门课程,第一部分是专业核心模块训练卷,第二部分为各门课程的综合训练卷。本专辑共98份试卷。
本试卷是第59卷为专业核心模块训练卷,按《算法与程序设计》中"算法程序卷14——关键字与构造函数"范围和要求编写。具体内容为:掌握关键字this、this访问属性、this调用成员方法、this调用构造方法;掌握关键字static、静态字段、静态属性、静态方法;掌握构造函数的语法格式和用法
河北省对口招生职业技能考试
算法与程序设计 试卷
(算法程序卷14——关键字与构造函数)
考试时间:90分钟 满分:100分
一、单项选择题(共20题,每题2分,共40分)
1. C#中,this关键字的作用是()
A.访问基类成员 B.访问当前类的成员,解决名称冲突 C.创建对象 D.声明静态成员
2. C#中,以下关于类的说法,正确的是()
A.一个类只能有一个构造函数 B.构造函数可以没有参数
C.构造函数不能重载 D.构造函数返回int
3. C#中,static修饰的字段属于()
A.每个实例独有 B.所有实例共享 C.只读不可写 D.堆上存储
4. C#中,static方法的特点是()
A.只能访问实例成员 B.不需要对象即可调用 C.不能有参数 D.不能有返回值
5. C#中,以下关于this关键字的说法,正确的是()。
A.this指向当前对象实例 B.可以用this访问本类成员
C.this在实例方法中隐式存在 D.以上都正确
6. C#中,static修饰的成员是()。
A.静态成员,属于类本身而非对象 B.每个对象共享一份
C.可以不创建对象直接通过类名访问 D.以上都正确
7. C#中,构造函数的名称是()。
A.与类名相同 B.固定为Constructor C.固定为New D.可以任意命名
8. C#中,如果不为类定义构造函数,编译器会()。
A.生成默认构造函数(无参构造函数) B.编译错误 C.什么都不生成 D.生成带参构造函数
9. C#中,static字段和实例字段的区别是()。
A.静态字段所有对象共享一份,实例字段每个对象各一份 B.静态字段存储在堆上
C.两者没有区别 D.实例字段不能被类名访问
10. C#中,静态方法的特点是()。
A.通过类名直接调用 B.不能访问实例成员 C.没有this指针 D.以上都正确
11. C#中,this关键字的作用不包括()。
A.访问当前对象的成员 B.将对象作为参数传递给其他方法
C.声明静态变量 D.在构造函数中调用其他构造函数
12. C#中,base和this都可以在构造函数中使用,正确的调用形式是()。
A.base(参数) B.this(参数)
C.在一个构造函数中base和this只能选一个先调用 D.以上都正确
13. C#中,静态构造函数的特点是()。
A.没有访问修饰符 B.只执行一次 C.用于初始化静态成员 D.以上都正确
14. C#中,this调用构造函数的语法格式正确的是()。
A.this.构造函数名(参数) B.this(参数)
C.构造函数名(this, 参数) D.以上都不正确
15. C#中,静态属性的特点是()。
A.属于类本身,通过类名访问 B.属于对象实例,通过对象访问
C.只能访问实例字段 D.不能有get和set访问器
16. C#中,以下关于构造函数重载的说法,正确的是()。
A.构造函数不能重载 B.重载的构造函数参数列表必须不同
C.重载的构造函数返回值类型必须不同 D.重载的构造函数名称必须不同
17. C#中,this关键字不能用于()中。
A.实例方法 B.构造函数 C.静态方法 D.实例属性的访问器
18. C#中,静态成员初始化的顺序是()。
A.与声明顺序一致 B.与声明顺序相反 C.随机初始化 D.在实例成员初始化之后
19. C#中,以下关于构造函数的说法,错误的是()。
A.构造函数在创建对象时自动调用 B.构造函数可以有访问修饰符
C.构造函数可以返回void D.构造函数可以重载
20. C#中,使用this访问当前类的属性时,语法格式正确的是()。
A.this.属性名 B.属性名.this C.this(属性名) D.属性名(this)
二、填空题(共10空,每空1分,共10分)
21. C#中,______关键字用于访问当前对象的成员,解决成员名称冲突。
22. C#中,______关键字修饰的成员属于类本身,而非对象实例。
23. C#中,构造函数的名称必须与______相同,且没有返回值类型。
24. C#中,this关键字可以在构造函数中调用本类的其他构造函数,语法为______。
25. C#中,static修饰的字段称为______,所有对象实例共享同一份。
26. C#中,如果手动定义了带参构造函数,编译器______(填“会”或“不会”)自动生成默认无参构造函数。
27. C#中,静态方法只能访问______成员,不能访问实例成员。
28. C#中,this关键字可以访问当前类的______和成员方法。
29. C#中,静态构造函数用于初始化______成员,只执行一次。
30. C#中,构造函数的作用是______对象实例并初始化其成员。
三、判断题(共5题,每题2分,共10分)
31. C#中,this关键字可以访问基类的成员。( )
32. C#中,static修饰的静态方法可以访问实例字段和静态字段。( )
33. C#中,一个类可以有多个构造函数,实现构造函数重载。( )
34. C#中,静态成员必须通过对象实例才能访问。( )
35. C#中,构造函数可以有返回值,返回值类型为void。( )
四、程序分析题(共1题,每题10分,共10分)
36. 阅读下面的C#程序,分析其功能并写出运行结果。
using System;
class Student
{
static string className; // 静态字段
string name; // 实例字段
int age;
// 静态构造函数
static Student()
{
className = "高一(1)班";
}
// 无参构造函数
public Student()
{
this.name = "未知";
this.age = 16;
}
// 带参构造函数,调用无参构造函数
public Student(string name) : this()
{
this.name = name;
}
// 实例方法,使用this访问实例成员
public void ShowInfo()
{
Console.WriteLine("班级:" + className);
Console.WriteLine("姓名:" + this.name);
Console.WriteLine("年龄:" + this.age);
}
}
class Program
{
static void Main()
{
Student s1 = new Student("张三");
Student s2 = new Student();
s1.ShowInfo();
Console.WriteLine("------------------");
s2.ShowInfo();
}
}
程序运行结果:___________________
五、写运行结果题(共2题,每题5分,共10分)
37. 分析下面C#程序段的输出结果:
using System;
class Program
{
static int count = 0; // 静态字段
public Program()
{
count++;
}
static void Main()
{
Program p1 = new Program();
Program p2 = new Program();
Program p3 = new Program();
Console.WriteLine("创建的对象个数:" + count);
}
}
程序运行结果:___________________
38. 分析下面C#程序段的输出结果:
using System;
class Test
{
static void ShowStatic()
{
Console.WriteLine("这是静态方法");
}
void ShowInstance()
{
Console.WriteLine("这是实例方法");
}
}
class Program
{
static void Main()
{
Test.ShowStatic();
Test t = new Test();
t.ShowInstance();
}
}
程序运行结果:___________________
六、程序改错题(共1题,每题5分,共5分)
39. 下面程序使用this关键字访问类的成员并调用构造函数,但有2处错误,请找出并改正:
using System;
class Person
{
string name;
int age;
// 带参构造函数
public Person(string name, int age)
{
name = name; // 错误1
this.age = age;
}
// 无参构造函数,调用带参构造函数
public Person() : this // 错误2
{
Console.WriteLine("无参构造函数被调用");
}
public void Show()
{
Console.WriteLine("姓名:" + name + ",年龄:" + age);
}
}
class Program
{
static void Main()
{
Person p = new Person("李四", 20);
p.Show();
}
}
请找出程序中的错误,并写出正确答案。
七、程序填空题(共3题,每题5分,共15分)
40. 下面程序使用this关键字访问类的属性并调用构造函数,请填写空白处:
using System;
class Book
{
private string title;
private double price;
// 无参构造函数
public Book()
{
this.title = "未知书籍";
this.price = 0.0;
}
// 带参构造函数,调用无参构造函数
public Book(string title, double price) : _____
{
_____ = title; // 使用this访问属性
_____ = price; // 使用this访问属性
}
public void ShowBookInfo()
{
Console.WriteLine("书名:" + this.title + ",价格:" + this.price);
}
}
class Program
{
static void Main()
{
Book b = new Book("C#程序设计", 59.9);
b.ShowBookInfo();
}
}
41. 下面程序定义了静态字段和静态方法,请填写空白处:
using System;
class Calculator
{
// 静态字段,用于统计计算次数
_____ int count = 0;
// 静态方法,实现加法运算
_____ int Add(int a, int b)
{
count++;
return a + b;
}
// 静态方法,显示计算次数
static void ShowCount()
{
Console.WriteLine("累计计算次数:" + _____);
}
}
class Program
{
static void Main()
{
Console.WriteLine(Calculator.Add(3, 5));
Console.WriteLine(Calculator.Add(10, 20));
Calculator.ShowCount();
}
}
42. 下面程序使用this关键字调用成员方法,请填写空白处:
using System;
class Student
{
string name;
public Student(string name)
{
this.name = name;
_____; // 使用this调用ShowName方法
}
public void ShowName()
{
Console.WriteLine("学生姓名:" + _____); // 使用this访问name字段
}
}
class Program
{
static void Main()
{
Student s = new Student("王五");
}
}
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:河北省对口招生计算机类《考纲百套卷》,依据《河北省普通高等学校对口招生考试大纲(2028版专业课)计算机类》编写。本专辑涵盖9门课程,第一部分是专业核心模块训练卷,第二部分为各门课程的综合训练卷。本专辑共98份试卷。
本试卷是第59卷为专业核心模块训练卷,按《算法与程序设计》中"算法程序卷14——关键字与构造函数"范围和要求编写。具体内容为:掌握关键字this、this访问属性、this调用成员方法、this调用构造方法;掌握关键字static、静态字段、静态属性、静态方法;掌握构造函数的语法格式和用法
河北省对口招生职业技能考试
算法与程序设计 试卷
(算法程序卷14——关键字与构造函数)
考试时间:90分钟 满分:100分
一、单项选择题(共20题,每题2分,共40分)
1. C#中,this关键字的作用是()
A.访问基类成员 B.访问当前类的成员,解决名称冲突 C.创建对象 D.声明静态成员
【答案】B
【解析】this关键字的核心作用是访问当前对象的成员(字段、属性、方法),当局部变量与类成员名称冲突时,可通过this区分;A选项访问基类成员用base关键字;C选项创建对象用new关键字;D选项声明静态成员用static关键字。
2. C#中,以下关于类的说法,正确的是()
A.一个类只能有一个构造函数 B.构造函数可以没有参数 C.构造函数不能重载 D.构造函数返回int
【答案】B
【解析】构造函数可分为无参构造函数和带参构造函数,无参构造函数即没有参数的构造函数;A选项错误,一个类可以有多个构造函数(构造函数重载);C选项错误,构造函数支持重载;D选项错误,构造函数没有返回值类型,也不返回任何值。
3. C#中,static修饰的字段属于()
A.每个实例独有 B.所有实例共享 C.只读不可写 D.堆上存储
【答案】B
【解析】static修饰的字段为静态字段,属于类本身,所有对象实例共享同一份,修改一个实例的静态字段,所有实例访问到的该字段值都会改变;A选项是实例字段的特点;C选项错误,静态字段可读写(除非用readonly修饰);D选项错误,静态字段存储在栈上,实例字段存储在堆上。
4. C#中,static方法的特点是()
A.只能访问实例成员 B.不需要对象即可调用 C.不能有参数 D.不能有返回值
【答案】B
【解析】static方法为静态方法,属于类本身,无需创建对象,直接通过“类名.方法名()”即可调用;A选项错误,静态方法只能访问静态成员,不能访问实例成员;C选项错误,静态方法可以有参数;D选项错误,静态方法可以有返回值。
5. C#中,以下关于this关键字的说法,正确的是()。
A.this指向当前对象实例 B.可以用this访问本类成员 C.this在实例方法中隐式存在 D.以上都正确
【答案】D
【解析】this关键字的核心特性:①指向当前对象实例,代表当前对象;②可通过this访问本类的实例成员(字段、属性、方法);③在实例方法、构造函数、实例属性的访问器中,this隐式存在,可省略不写(名称冲突时必须写)。因此A、B、C选项均正确。
6. C#中,static修饰的成员是()。
A.静态成员,属于类本身而非对象 B.每个对象共享一份 C.可以不创建对象直接通过类名访问 D.以上都正确
【答案】D
【解析】static修饰的成员(静态字段、静态属性、静态方法)统称为静态成员,其特点:①属于类本身,不属于任何对象实例;②所有对象实例共享同一份静态成员;③无需创建对象,直接通过“类名.静态成员名”访问。因此A、B、C选项均正确。
7. C#中,构造函数的名称是()。
A.与类名相同 B.固定为Constructor C.固定为New D.可以任意命名
【答案】A
【解析】构造函数的命名规则:名称必须与所在类的类名完全一致,且没有返回值类型(包括void);B、C、D选项均不符合构造函数的命名规范。
8. C#中,如果不为类定义构造函数,编译器会()。
A.生成默认构造函数(无参构造函数) B.编译错误 C.什么都不生成 D.生成带参构造函数
【答案】A
【解析】若程序员未手动定义任何构造函数,C#编译器会自动生成一个默认的无参构造函数,该构造函数无参数、无具体实现,仅用于创建对象;若手动定义了构造函数(无论带参还是无参),编译器则不会再生成默认无参构造函数。
9. C#中,static字段和实例字段的区别是()。
A.静态字段所有对象共享一份,实例字段每个对象各一份 B.静态字段存储在堆上 C.两者没有区别 D.实例字段不能被类名访问
【答案】A
【解析】静态字段与实例字段的核心区别:①归属不同:静态字段属于类,实例字段属于对象;②共享性不同:静态字段所有对象共享,实例字段每个对象各有一份;B选项错误,静态字段存储在栈上;C选项错误,两者区别明显;D选项错误,实例字段只能通过对象访问,不能通过类名访问,但这不是两者的核心区别。
10. C#中,静态方法的特点是()。
A.通过类名直接调用 B.不能访问实例成员 C.没有this指针 D.以上都正确
【答案】D
【解析】静态方法的核心特点:①调用方式:无需创建对象,通过类名直接调用;②访问权限:只能访问静态成员,不能访问实例成员;③无this指针:this指向当前对象实例,静态方法属于类,不依赖对象,因此没有this指针。因此A、B、C选项均正确。
11. C#中,this关键字的作用不包括()。
A.访问当前对象的成员 B.将对象作为参数传递给其他方法 C.声明静态变量 D.在构造函数中调用其他构造函数
【答案】C
【解析】this关键字的作用包括:①访问当前对象的成员(A选项正确);②将当前对象作为参数传递给其他方法(如Method(this));③在构造函数中调用本类的其他构造函数(如:this());C选项声明静态变量用static关键字,与this无关。
12. C#中,base和this都可以在构造函数中使用,正确的调用形式是()。
A.base(参数) B.this(参数) C.在一个构造函数中base和this只能选一个先调用 D.以上都正确
【答案】D
【解析】构造函数中,base用于调用基类的构造函数,this用于调用本类的其他构造函数,两者调用形式均为“关键字(参数)”(A、B选项正确);注意:在同一个构造函数中,base和this不能同时调用,只能选择一个,且必须放在构造函数体的最前面(C选项正确)。因此D选项正确。
13. C#中,静态构造函数的特点是()。
A.没有访问修饰符 B.只执行一次 C.用于初始化静态成员 D.以上都正确
【答案】D
【解析】静态构造函数的核心特点:①无访问修饰符(public、private等均不能加);②无参数、无返回值;③只执行一次(在第一次访问类的静态成员或创建类的对象时执行);④主要用于初始化类的静态成员。因此A、B、C选项均正确。
14. C#中,this调用构造函数的语法格式正确的是()。
A.this.构造函数名(参数) B.this(参数) C.构造函数名(this, 参数) D.以上都不正确
【答案】B
【解析】在构造函数中调用本类的其他构造函数,语法格式为“: this(参数)”,无需写构造函数名,参数需与被调用的构造函数参数列表匹配;A、C选项均不符合语法规范。
15. C#中,静态属性的特点是()。
A.属于类本身,通过类名访问 B.属于对象实例,通过对象访问 C.只能访问实例字段 D.不能有get和set访问器
【答案】A
【解析】静态属性用static修饰,属于类本身,需通过“类名.静态属性名”访问(A选项正确);B选项是实例属性的特点;C选项错误,静态属性只能访问静态字段;D选项错误,静态属性可以有get访问器(只读)和set访问器(可写)。
16. C#中,以下关于构造函数重载的说法,正确的是()。
A.构造函数不能重载 B.重载的构造函数参数列表必须不同 C.重载的构造函数返回值类型必须不同 D.重载的构造函数名称必须不同
【答案】B
【解析】构造函数支持重载,重载的核心要求是:参数列表(参数个数、参数类型、参数顺序)必须不同;A选项错误,构造函数可以重载;C选项错误,构造函数没有返回值类型,不存在返回值类型不同的说法;D选项错误,重载的构造函数名称必须与类名一致,因此名称相同。
17. C#中,this关键字不能用于()中。
A.实例方法 B.构造函数 C.静态方法 D.实例属性的访问器
【答案】C
【解析】this关键字依赖于对象实例,只能用于实例相关的成员中(实例方法、构造函数、实例属性的访问器);静态方法属于类,不依赖对象实例,因此不能使用this关键字。
18. C#中,静态成员初始化的顺序是()。
A.与声明顺序一致 B.与声明顺序相反 C.随机初始化 D.在实例成员初始化之后
【答案】A
【解析】类中多个静态成员(静态字段、静态属性)的初始化顺序,与它们在代码中的声明顺序一致;C选项错误,初始化顺序固定;D选项错误,静态成员在类加载时初始化,实例成员在创建对象时初始化,因此静态成员初始化在实例成员之前。
19. C#中,以下关于构造函数的说法,错误的是()。
A.构造函数在创建对象时自动调用 B.构造函数可以有访问修饰符 C.构造函数可以返回void D.构造函数可以重载
【答案】C
【解析】A选项正确,构造函数的作用就是在创建对象(new关键字)时自动调用,用于初始化对象;B选项正确,构造函数可以有访问修饰符(如public、private),控制构造函数的访问权限;C选项错误,构造函数没有返回值类型,不能写void;D选项正确,构造函数支持重载。
20. C#中,使用this访问当前类的属性时,语法格式正确的是()。
A.this.属性名 B.属性名.this C.this(属性名) D.属性名(this)
【答案】A
【解析】this访问当前类的属性、字段、方法时,语法格式均为“this.成员名”;B、C、D选项均不符合语法规范,其中C选项是this调用构造函数的格式。
二、填空题(共10空,每空1分,共10分)
21. C#中,______关键字用于访问当前对象的成员,解决成员名称冲突。
【答案】this
【解析】this关键字的核心作用之一是访问当前对象的成员,当局部变量与类成员名称相同时,通过this可明确指定访问的是类成员,解决名称冲突。
22. C#中,______关键字修饰的成员属于类本身,而非对象实例。
【答案】static
【解析】static(静态)关键字修饰的成员(字段、属性、方法)属于类本身,不依赖于对象实例,所有对象共享同一份静态成员。
23. C#中,构造函数的名称必须与______相同,且没有返回值类型。
【答案】类名
【解析】构造函数的命名规则:名称必须与所在类的类名完全一致,且不能指定任何返回值类型(包括void)。
24. C#中,this关键字可以在构造函数中调用本类的其他构造函数,语法为______。
【答案】this(参数)
【解析】在构造函数中调用本类其他构造函数时,需在构造函数声明后加“: this(参数)”,参数需与被调用的构造函数参数列表匹配,无参数则写this()。
25. C#中,static修饰的字段称为______,所有对象实例共享同一份。
【答案】静态字段
【解析】static修饰的字段称为静态字段,归属类本身,所有对象实例共享同一份,修改一个实例的静态字段,所有实例访问到的该字段值都会改变。
26. C#中,如果手动定义了带参构造函数,编译器______(填“会”或“不会”)自动生成默认无参构造函数。
【答案】不会
【解析】编译器仅在程序员未手动定义任何构造函数时,才会自动生成默认无参构造函数;若手动定义了带参构造函数(或无参构造函数),编译器则不再生成默认无参构造函数。
27. C#中,静态方法只能访问______成员,不能访问实例成员。
【答案】静态
【解析】静态方法属于类,不依赖对象实例,而实例成员依赖对象实例,因此静态方法只能访问静态成员(静态字段、静态属性、静态方法),不能访问实例成员。
28. C#中,this关键字可以访问当前类的______和成员方法。
【答案】属性(或字段、实例成员)
【解析】this关键字用于访问当前对象的实例成员,包括实例字段、实例属性和实例方法,因此此处可填“属性”“字段”或“实例成员”。
29. C#中,静态构造函数用于初始化______成员,只执行一次。
【答案】静态
【解析】静态构造函数无参数、无访问修饰符,仅用于初始化类的静态成员(静态字段、静态属性),且在类加载时只执行一次。
30. C#中,构造函数的作用是______对象实例并初始化其成员。
【答案】创建(或实例化)
【解析】构造函数的核心作用有两个:一是创建(实例化)对象实例,二是初始化对象的成员(字段、属性),在使用new关键字创建对象时自动调用。
三、判断题(共5题,每题2分,共10分)
31. C#中,this关键字可以访问基类的成员。( )
【答案】×
【解析】this关键字用于访问当前类的实例成员,访问基类的成员需使用base关键字,因此该说法错误。
32. C#中,static修饰的静态方法可以访问实例字段和静态字段。( )
【答案】×
【解析】静态方法属于类,不依赖对象实例,而实例字段依赖对象实例,因此静态方法只能访问静态字段,不能访问实例字段,该说法错误。
33. C#中,一个类可以有多个构造函数,实现构造函数重载。( )
【答案】√
【解析】构造函数支持重载,只要多个构造函数的参数列表(参数个数、类型、顺序)不同,即可在同一个类中定义多个构造函数,用于不同场景下的对象初始化,该说法正确。
34. C#中,静态成员必须通过对象实例才能访问。( )
【答案】×
【解析】静态成员属于类本身,无需创建对象实例,直接通过“类名.静态成员名”即可访问;实例成员才需要通过对象实例访问,因此该说法错误。
35. C#中,构造函数可以有返回值,返回值类型为void。( )
【答案】×
【解析】构造函数的特点是没有返回值类型,也不返回任何值,不能写void关键字,因此该说法错误。
四、程序分析题(共1题,每题10分,共10分)
36. 阅读下面的C#程序,分析其功能并写出运行结果。
using System;
class Program
{
static void Main()
{
int[,] arr = { {1,2},{3,4},{5,6} };
Console.WriteLine(arr.GetLength(0));
Console.WriteLine(arr.GetLength(1));
}
}
程序运行结果:___________________
【答案】3
2
五、写运行结果题(共2题,每题5分,共10分)
36. 阅读下面的C#程序,分析其功能并写出运行结果。
using System;
class Student
{
static string className; // 静态字段
string name; // 实例字段
int age;
// 静态构造函数
static Student()
{
className = "高一(1)班";
}
// 无参构造函数
public Student()
{
this.name = "未知";
this.age = 16;
}
// 带参构造函数,调用无参构造函数
public Student(string name) : this()
{
this.name = name;
}
// 实例方法,使用this访问实例成员
public void ShowInfo()
{
Console.WriteLine("班级:" + className);
Console.WriteLine("姓名:" + this.name);
Console.WriteLine("年龄:" + this.age);
}
}
class Program
{
static void Main()
{
Student s1 = new Student("张三");
Student s2 = new Student();
s1.ShowInfo();
Console.WriteLine("------------------");
s2.ShowInfo();
}
}
程序运行结果:___________________
【答案】
班级:高一(1)班
姓名:张三
年龄:16
------------------
班级:高一(1)班
姓名:未知
年龄:16
【解析】
1. 程序定义Student类,包含静态字段className、实例字段name和age,以及静态构造函数、无参构造函数、带参构造函数和实例方法ShowInfo();
2. 静态构造函数在类加载时执行一次,将className赋值为“高一(1)班”(静态字段所有对象共享,因此s1和s2的className均为此值);
3. 创建s1时,调用带参构造函数Student("张三"),该构造函数通过:this()调用无参构造函数,先将name赋值为“未知”、age赋值为16,再将name修改为“张三”;
4. 创建s2时,调用无参构造函数,将name赋值为“未知”、age赋值为16;
5. 调用ShowInfo()方法,输出班级(静态字段)、姓名和年龄(实例字段),因此输出上述结果。
37. 分析下面C#程序段的输出结果:
using System;
class Program
{
static int count = 0; // 静态字段
public Program()
{
count++;
}
static void Main()
{
Program p1 = new Program();
Program p2 = new Program();
Program p3 = new Program();
Console.WriteLine("创建的对象个数:" + count);
}
}
程序运行结果:___________________
【答案】创建的对象个数:3
【解析】count是静态字段,所有对象共享同一份;构造函数在创建对象时自动调用,每次调用构造函数都会使count自增1;程序中共创建3个Program对象(p1、p2、p3),count自增3次,最终值为3,因此输出结果为“创建的对象个数:3”。
38. 分析下面C#程序段的输出结果:
using System;
class Test
{
static void ShowStatic()
{
Console.WriteLine("这是静态方法");
}
void ShowInstance()
{
Console.WriteLine("这是实例方法");
}
}
class Program
{
static void Main()
{
Test.ShowStatic();
Test t = new Test();
t.ShowInstance();
}
}
程序运行结果:___________________
【答案】
这是静态方法
这是实例方法
【解析】ShowStatic()是静态方法,无需创建对象,直接通过“Test.ShowStatic()”调用,输出“这是静态方法”;ShowInstance()是实例方法,需先创建Test对象t,再通过“t.ShowInstance()”调用,输出“这是实例方法”,因此输出上述结果。
六、程序改错题(共1题,每题5分,共5分)
39. 下面程序使用this关键字访问类的成员并调用构造函数,但有2处错误,请找出并改正:
using System;
class Person
{
string name;
int age;
// 带参构造函数
public Person(string name, int age)
{
name = name; // 错误1
this.age = age;
}
// 无参构造函数,调用带参构造函数
public Person() : this // 错误2
{
Console.WriteLine("无参构造函数被调用");
}
public void Show()
{
Console.WriteLine("姓名:" + name + ",年龄:" + age);
}
}
class Program
{
static void Main()
{
Person p = new Person("李四", 20);
p.Show();
}
}
请找出程序中的错误,并写出正确答案。
【答案】
错误1:name = name; 改正:this.name = name;
错误2:public Person() : this 改正:public Person() : this("默认姓名", 18)(参数可合理设置,需与带参构造函数参数列表匹配)
【解析】
1. 错误1:局部变量name与类的实例字段name名称冲突,直接写name = name,赋值的是局部变量自身,未给类的实例字段赋值;需通过this.name指定访问类的实例字段,因此改为this.name = name。
2. 错误2:无参构造函数通过this调用带参构造函数时,语法格式错误,需写this(参数),且参数需与带参构造函数(string name, int age)的参数列表匹配;可设置默认参数(如"默认姓名"、18),因此改为public Person() : this("默认姓名", 18)。
七、程序填空题(共3题,每题5分,共15分)
40. 下面程序使用this关键字访问类的属性并调用构造函数,请填写空白处:
using System;
class Book
{
private string title;
private double price;
// 无参构造函数
public Book()
{
this.title = "未知书籍";
this.price = 0.0;
}
// 带参构造函数,调用无参构造函数
public Book(string title, double price) : _____
{
_____ = title; // 使用this访问属性
_____ = price; // 使用this访问属性
}
public void ShowBookInfo()
{
Console.WriteLine("书名:" + this.title + ",价格:" + this.price);
}
}
class Program
{
static void Main()
{
Book b = new Book("C#程序设计", 59.9);
b.ShowBookInfo();
}
}
【答案】this(); this.title; this.price
【解析】
1. 第一空:带参构造函数需调用无参构造函数,语法为: this(),因此填this();
2. 第二空、第三空:需使用this访问类的实例字段title和price,将参数值赋值给实例字段,因此分别填this.title和this.price。
41. 下面程序定义了静态字段和静态方法,请填写空白处:
using System;
class Calculator
{
// 静态字段,用于统计计算次数
_____ int count = 0;
// 静态方法,实现加法运算
_____ int Add(int a, int b)
{
count++;
return a + b;
}
// 静态方法,显示计算次数
static void ShowCount()
{
Console.WriteLine("累计计算次数:" + _____);
}
}
class Program
{
static void Main()
{
Console.WriteLine(Calculator.Add(3, 5));
Console.WriteLine(Calculator.Add(10, 20));
Calculator.ShowCount();
}
}
【答案】static; static; count
【解析】
1. 第一空:count是静态字段,用于统计计算次数,需用static修饰,因此填static;
2. 第二空:Add()是静态方法,需用static修饰,才能通过“类名.方法名()”调用,因此填static;
3. 第三空:ShowCount()是静态方法,可直接访问静态字段count,因此填count。
42. 下面程序使用this关键字调用成员方法,请填写空白处:
using System;
class Student
{
string name;
public Student(string name)
{
this.name = name;
_____; // 使用this调用ShowName方法
}
public void ShowName()
{
Console.WriteLine("学生姓名:" + _____); // 使用this访问name字段
}
}
class Program
{
static void Main()
{
Student s = new Student("王五");
}
}
【答案】this.ShowName(); this.name
【解析】
1. 第一空:需使用this调用本类的实例方法ShowName(),语法为this.ShowName(),因此填this.ShowName();
2. 第二空:需使用this访问本类的实例字段name,将其拼接输出,因此填this.name。
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$