c#的基础练习题

    这里转载一下c#的一些练习题,帮助巩固一下接口知识和重写方面的知识点

C#面向对象编程-练习题

 

1.C#中的方法重写使用关键字(a)。

a)    override

b)   overload

c)    static

d)   Inherit

2.以下的C#代码,试图用来定义一个接口:

public interface IFile{

      intA;

      intdelFile()   {

            A = 3;

      }

      voiddisFile();

}

关于以上的代码,以下描述错误的是(d)。(选择一项)

a)    以上的代码中存在的错误包括:不能在接口中定义变量,所以int A代码行将出现错误

b)   以上的代码中存在的错误包括:接口方法delFile是不允许实现的,所以不能编写具体的实现函数

c)    代码void disFile();定义无错误,接口可以没有返回值

d)  代码void disFile();应该编写为void disFile(){}; //接口中不能去实现函数

 

3.在C#中,接口与抽象基类的区别在于(a)。

a)     抽象基类可以包含非抽象方法,而接口只能包含抽象方法

b)     抽象基类可以被实例化,而接口不能被实例化

c)     抽象基类不能被实例化,而接口可以被实例化

d)     抽象基类就是接口,它们之间无差别

4.在开发某图书馆的图书信息管理系统的过程中,开始为教材类图书建立一个TextBook类;现在又增加了杂志类图书,于是需要改变设计,则下面最好的设计应该是(c)。

a)     建立一个新的杂志类Journal。

b)     建立一个新的杂志类Journal,并继承TextBook类。

c)     建立一个基类Book和一个新的杂志类Journal,并让Journal类和TextBoook类都继承于Book类。

d)     不建立任何类,把杂志图书的某些特殊属性加到TextBoook类中。

5.可以使用(a)关键字重写方法。

a)    Override

b)   New

6.以下叙述正确的是:(bc)

      A.接口中可以有虚方法。         B.一个类可以实现多个接口。

      C.接口不能被实例化。           D.接口中可以包含已实现的方法。

7.下列代码输出为( b):

class Father{

   public void F(){ Console.WriteLine("A.F"); }

   public virtualvoid G() { Console.WriteLine("A.G"); }

}

class Son: Father{

   new public voidF() { Console.WriteLine("B.F"); }//隐藏了父类中的方法,父类中的F方法还存在

   public overridevoid G() { Console.WriteLine("B.G"); }//重写了父类中的方法,父类中的G方法就不存在了

}

class override_new{

   static voidMain() {

      Son b = newSon();

      Father a = b;

      a.F();//通过父类声明的对象 调用隐藏方法,会调用父类中的 A.F

      b.F();//通过子类声明的对象 调用隐藏方法,会调用子类中的  B.F

      a.G();// B.G

      b.G();//B.G

   }

}

A.       A.F    B.F   A.G   B.G

B.       A.F    B.F   B.G   B.G

C.       A.F    A.F   B.G   B.G

D.      B.F    B.F   B.G   B.G

8.写出程序的输出结果:

    public classA

       {

              public virtual void Fun1(int i)

              {

                     Console.WriteLine(i);

              }

              public void Fun2(A a)

              {

                     a.Fun1(1);

                     Fun1(5);

              }

       }

       publicclass B:A     {

              public override void Fun1(int i)

              {

                     base.Fun1(i+1);

              }

              public static void Main()             {

                     Bb=new B();

                     Aa=new A();

                     a.Fun2(b);//b.Fun1(1)a.Fun1(5) //2  5

                     b.Fun2(a);//a.Fun1(1)b.Fun1(5)// 1   6

              }

}

答案:2 5 1 6

9.在C#中,允许多接口继承,从多个接口时,使用“:”后跟继承的接口的名字,多个接口名称之间使用(c)符号进行分割。(选择一项)

 a)”.’

b)”->”

c)”,”

d)”::”

10.阅读以下的C#代码:

class A

       {

              public virtual void printStr(string str)

              {

                     Console.WriteLine(str);

              }

       }

       class B:A

       {

              public override void printStr(string str)

              {

                     str=str+"重写的方法";

                     Console.WriteLine(str);

              }

       }

       classDefaultInitializerApp

       {

              public static void Main()

              {

                     Bb=new B();

                     Aa=b;

                     a.printStr("打印");

                     b.printStr("打印");

                     Console.ReadLine();

              }

       }

运行程序后将在控制台窗口打印( a )。(选择一项)

a.     打印 重写的方法 打印 重写的方法

b.    打印   打印重写的方法

c.    打印

d.    程序有误,不能运行

11.在C#的语法中,(a)关键字可以实现在派生类中对基类的虚函数进行重载(选一项)

a>  override

b> new

c>  static

d> virtual

12.请问,此程序输出结果是()

abstract classBaseClass{
public virtual void MethodA(){Console.WriteLine("BaseClass");}
public virtual void MethodB(){}
}
class Class1: BaseClass{

public voidMethodA(){Console.WriteLine("Class1");}
public override void MethodB(){}
}
class Class2: Class1{
new public void MethodB(){}
}
class MainClass{
public static void Main(string[] args){Class2 o = new Class2();o.MethodA(); }
}

A. BaseClass
B. BassClass Class1
C. Class1
D. Class1 BassClass

13.请问,此程序输出结果是(a)

public abstractclass A { public A() { Console.WriteLine('A'); }
public virtual void Fun() { Console.WriteLine("A.Fun()"); } }
public class B: A { public B() { Console.WriteLine('B'); }
public new void Fun() { Console.WriteLine("B.Fun()"); }
public static void Main() { A a = new B();a.Fun(); } }

A. A B A.Fun()
   B. A B B.Fun()
   C. B A A.Fun()
   D. B A B.Fun()

14.以下叙述正确的是(bc):
A. 接口中可以有虚方法。   

B. 一个类可以实现多个接口。
C. 接口不能被实例化。      

D. 接口中可以包含已实现的方法。

15.以下关于C#代码的说法正确的是(a)。(选择一项)

Public abstract Animal

{

       Publicabstract void Eat();

       Publicvoid Sleep()

{

}

}

 

a.     该段代码正确

b.     代码错误,因为类中存在非抽象方法

c.     代码错误,因为类中的方法没有实现

d.     通过代码“Animal an = newAnimal();”可以创建一个Animal对象

16.在c#中,关于继承和接口,以下说法正确的是(b) (单选)

a.c#允许许多接口实现,也允许多重继承

b.c#允许多接口实现,但不允许多重继承

c.c#不允许多接口实现,但允许多重继承

d.c#不允许多重接口实现,也不允许多重继承

17.在C#中,已知下列代码的运行结果是“老虎吃动物”,请问在空白处1和空白处2

分别应该填写的代码是(c)

       Public class Animal

       {

              Public空白处1 void Eat()

              {

                     Consone.WriteLine(“我要吃”);

}

}

Publicclass Tiger:Animal

       {

              Public空白处2 void Eat()

              {

                     Consone.WriteLine(“老虎吃动物”);

}

Public calssTest

{

       Staticvoid Main()

       {

              Animal an = new Tiger();

              an.Eat;

}

}

}

a)    Virtual, new

b)    override, virtual

c)    virtual, override

d)    new, virtual

18.在C#中,下列关于抽象类和接口的说法,正确的是(b)(选择一项)

       a) 在抽象类中,所以的方法都是抽象方法

       b) 继承自抽象类的子类必须实现起父类(抽象类)中的所以抽象方法

       c) 在接口中,可以有方法实现,在抽象类中不能有方法实现

       d) 一个类可以从多个接口继承,也可以从多个抽象类继承

19.关于以下C#代码的说法正确的是(b)

Publicabstract class Animal{

       Public abstract void Eat();

}

Publicclass Tiger:Animal{

       Public override void Eat(){

       Console.WriteLine(“老虎吃动物”);

}

}

Publicclass Tigress:Tiger{

       Static void Main(){

              Tigresstiger=new Tigress();

tiger.Eat();

}

 

}

a.      代码正确,但没有输出

b.      代码正确,并且输出为”老虎吃动物”;

c.      代码错误,因为Tigress类没有实现抽象基类Animal中的抽象方法

d.      代码错误,因为抽象基类Animal的Eat方法没有实现

 

20. 在c#中 某程序员定义了一个IDataBase接口,以及实现该接口的类CDataBase ,下列关于该段代码说法正确的是(d)(选择一项)

public interface IDataBase 

         {

                  void OpenTable(string tableName);

                  void UpdataTable(string tableName);

         }

         publicclass CDataBase:IDataBase

         {

                  public void OpenTable(stringtableName)

                  {

                           Console.WriteLine("打开数据表");

 

                  }

                  public void UpdataTable(stringtableName)

                  {

                           Console.WriteLine("更新数据表");

 

                  }

                  static void Main()

                  {

                           CDataBase db =new CDataBase();

                           db.OpenTable("Customers");

                  }

         }

 

a)该段代码错误,因为在定义接口时,接口中的方法没有提供实现

b)该段代码错误,因为接口中声明的方法不是公有的,应此在CDataBase类中不能访问接口中的方法

c)该段代码正确,同时由于客户没有调用UpdataTable方法,可以把CDataTable类中的UpdataTable去掉,代码仍然正确

d)该段代码正确,但是如果在IDataBase 接口中声明一个方法void Execute(string sql);则必须在CDataBase中实现该方法

21.c#中  下列代码运行结果是(a)(选择一项)

public class Student{

                  public virtual void Exam(){

                           Console.WriteLine("学生都要考试");

                  }

}

public class Undergraduate:Student{

                  public new void Exam(){

                           base.Exam();

                           Console.WriteLine("大学生有选择考试科目的权利");

                  }

}

public class Test{

                  static void Main()       {

                  Student stu = newUndergraduate();

                  stu.Exam();

         }

}

a)学生都要考试

b)大学生有选择考试科目的权利

c)大学生都要考试

  大学生有选择考试科目的权利

d)学生都要考试

学生都要考试

22.c#中 下列代码的运行结果是(a)(选择一项)

struct Student{

     public int age;

     public string name;

     publicStudent(int age,stringname){

              this.age=age;

              this.name=name;

     }

}

public class Test{

     static void Mian(){

              Studentstu1= new Student(18,"小方");

              Studentstu2= new Student(24,"小刚");

              stu2=stu1;//在c#中结构体是值类型,在这里赋值只会赋值其中变量的值

              stu1.age=30;

              stu1.name="小燕";

              Console.WriteLine(stu2.age);

              Console.WriteLine(st2.name);

     }

}

a)18 小方

b)18 小燕

c)30 小燕

d)30 小方

23.在C#中,下列(a)关键字用于重写基类的虚拟方法。(选择一项)

a)override

b)new

c)base

d)virtual

 

  • 8
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 声明两个变量:int n1 = 10, n2 = 20;要求将两个变量交换,最后输出n1为20,n2为10。扩展(*):不使用第三个变量如何交换? 2. 用方法来实现:将上题封装一个方法来做,方法有两个参数分别为num1,num2,将num1与num2交换。提示:方法有两个参数n1,n2,在方法中将n1与n2进行交换,使用ref。(*) 3. 请用户输入一个字符串,计算字符串中的字符个数,并输出。 4. 用方法来实现:计算两个数的最大值。思考:方法的参数?返回值?扩展(*):计算任意多个数间的最大值(提示:使用可变参数,params)。 5. 用方法来实现:计算1-100之间的所有整数的和。 6. 用方法来实现:计算1-100之间的所有奇数的和。 7. 用方法来实现:判断一个给定的整数是否为“质数”。 8. 用方法来实现:计算1-100之间的所有质数(素数)的和。 9. 用方法来实现:有一个整数数组:{ 1, 3, 5, 7, 90, 2, 4, 6, 8, 10 },找出其中最大值,并输出。不能调用数组的Max()方法。 10. 用方法来实现:有一个字符串数组:{ "马龙", "迈克尔乔丹", "雷吉米勒", "蒂姆邓肯", "科比布莱恩特" },请输出最长的字符串。 11. 用方法来实现:请计算出一个整型数组的平均值。{ 1, 3, 5, 7, 90, 2, 4, 6, 8, 10 }。要求:计算结果如果有小数,则显示小数点后两位(四舍五入)。Math.Round() 12. 请通过冒泡排序法对整数数组{ 1, 3, 5, 7, 90, 2, 4, 6, 8, 10 }实现升序排序。 13. 有如下字符串:【"患者:“大夫,我咳嗽得很重。” 大夫:“你多大年记?” 患者:“七十五岁。” 大夫:“二十岁咳嗽吗”患者:“不咳嗽。” 大夫:“四十岁时咳嗽吗?” 患者:“也不咳嗽。” 大夫:“那现在不咳嗽,还要等到什么时咳嗽?”"】。需求:①请统计出该字符中“咳嗽”二字的出现次数,以及每次“咳嗽”出现的索引位置。②扩展(*):统计出每个字符的出现次数。 14. 将字符串" hello world,你 好 世界 ! "两端空格去掉,并且将其中的所有其他空格都替换成一个空格,输出结果为:"hello world,你 好 世界 !"。 15. 制作一个控制台小程序。要求:用户可以在控制台录入每个学生的姓名,当用户输入quit(不区分大小写)时,程序停止接受用户的输入,并且显示出用户输入的学生的个数,以及每个学生的姓名。效果如图:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值