C复习题.docx
《C复习题.docx》由会员分享,可在线阅读,更多相关《C复习题.docx(11页珍藏版)》请在冰豆网上搜索。
![C复习题.docx](https://file1.bdocx.com/fileroot1/2023-1/12/2f1a2e28-33fe-4932-8b79-702727bb6371/2f1a2e28-33fe-4932-8b79-702727bb63711.gif)
C复习题
1、简述private、protected、public、internal修饰符的作用
private只有在声明他们的类和结构体中才可访问
Protected在它的类中或派生类中访问
Public对访问成员没有限制
Internal对同一项目的文件中,内部类型或成员才是可访问的
2、值类型和引用类型的区别,结构体与类的区别
值类型的值是存放在堆栈中的,改变其值,不改变变量原有的值,而引用类型的值是存放在栈中的,其引用的地址是存放在堆栈中的,改变其值也就改变了变量原有的值。
值类型不允许包含null值,然而可空类型可以将null赋值给值类型。
,类属于引用类型的数据类型,结构体属于值类型的数据类型,这两种数据类型的本质区别主要是各自指向的内存位置不同
3、C#中的接口、类、抽象类的有什么不同
接口是一种契约,是不可实例化的,并且可以继承多个接口,类可以继承多个接口,类只能单继承类,接口中不可有方法体,并且不能指定修饰符。
抽象类是类的一种特殊形式抽象类中可以有方法的实现,也可以指定方法的访问修饰符。
但不能实例化
4、简述一下static修饰符的有关功能
被static修饰的成员不能通过实例来访问
a、修饰字段,表示只有一个副本
b、修饰方法,表示此方法于实例无关的,应该是线程安全的
c、修饰类,表示此类是静态类,此类不能实例化
d、修饰构造函数,表示此构造函数在实例化,或第一此调用静态成员时调用,只调用一次。
5、说明一下new修饰符有关用处?
1、实例化如:
NewClass()
2、publicnew隐藏基类的方法
3、在泛型类申明中的任何类型参数都必须有公共的无参构造函数
6、使用sealed、virtual、override、abstract修饰的类有什么特点?
sealed表示不可继承的
virtual表示虚方法,可被覆盖
override,覆盖基类方法
abstract表示抽象方法,该类不可实例化
7、如何区别重载方法?
不同的参数类型,不同的参数个数,不同的参数顺序
8、.override与重载的区别
重载是方法的名称相同。
参数或参数类型不同,进行多次重载以适应不同的需要
Override是进行基类中函数的重写。
为了适应需要。
9、在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?
u
using引入名称空间或者使用非托管资源
new新建实例或者隐藏父类方法
10、请列出c#中几种循环的方法,并指出他们的不同
A:
4种:
For:
使用于确定次数的循环
Foreach:
使用于遍历的元素只读
Do…while:
次数不确定条件随机变化但至少要保证能被执行一次
While:
次数不确定条件随机变化
11、有哪些主要的数据类型?
它们之间是怎样进行相互转换的?
值类型包括整数类型、字符类型、浮点类型、布尔类型、结构类型和枚举类型。
引用类型包括类、接口、委托、数组、字符串等。
C#中提供了隐式类型转换和显式类型转换。
12、类和对象的区别和关系是什么?
类是对象的抽象,它为属于该类的全部对象提供了统一的抽象描述。
关系类是对象的模板,对象是类的实例。
13、静态字段与非静态字段有什么区别?
加static修饰字段时,则该字段为静态字段,静态字段不属于某个实例对象,只与类相关联,因此,对静态字段的访问只与类关联,访问时使用类名.字段,实例字段的访问与实例对象关联,访问时使用对象名.字段。
14、接口声明主要由几部分组成,各部分的作用是什么?
接口声明形式:
访问修饰符interface接口名
其中:
接口的访问修饰符有new、public、protected、internal和private,各个修饰符都代表不同的访问权限。
new修饰符仅允许在类中定义的接口内使用,它指定接口隐藏同名的继承成员。
public、protected、private和internal修饰符用于控制接口的可访问性,与前面所介绍的意义相同。
接口名称通常以I开头。
要实现该接口,必须有类继承该接口。
15、在某些场合中,使用接口继承而不是类继承,为什么?
程序需要许多彼此无关的对象类型来提供特定功能,此时更适合使用接口
接口可以在基类不同的类之间实现多态性
接口比基类更加灵活,因为可以定义实现多个接口的单个实现
若不需要从基类继承实现,则接口是更好的选择
若不能使用类继承,则可以使用接口
16、C#中处理异常采用的结构化异常处理语句有哪些?
并简要说明。
C#中共包含3种结构化异常处理语句:
try…catch语句,try…finally语句和try…catch…finally语句。
其中:
try块语句中用来指明有可能出现异常的代码;catch块内指明对所出现的异常的处理,若没有异常,则catch块不执行;finally块是无论是否发生异常均要执行的代码,主要用来清理资源或执行要在try块末尾执行的其它操作,或不需要清理代码,则可以不使用该块。
17、什么是继承?
继承是这样的一种能力,它可以使用现有类的所有功能,并且在无须重新编写原来的类的情况下对这些功能进行扩展。
使用继承而产生的类被称为派生类或子类,被继承的类称为基类或父类。
18、什么是多态性?
继承使得在原有的类基础之上,对原有的程序进行扩展,从而提高程序开发的速度,实现代码的复用。
同一种方法作用于不同对象可以产生不同的结果,这就是多态性。
C#中的多态包括两类:
编译时多态性和运行时的多态性。
1、完下列语句后,x和y各为何值?
①intx=20;
inty=++x;
X=__21__,y=___21__
②intx=-10;
inty=(x>=1)?
100:
10;
X=_-10___,y=__10_
③intx=100;
inty=(x==1)?
++x:
x++;
X=_100___,y=_101____
2、执行以下程序段后,变量x的值是6,变量y的值是20。
intx=5,y=10;
if(x<=10&&y>=10)
{
x++;
y+=10;
}
else
{
x--;
y--;
}
3、分析下面这段代码,执行后count的值为________15__________。
inti,j,count=0;
for(i=3;i>0;i--)
for(j=0;j<5;j++){count++;}
4、执行下面的程序段后,变量a、b的值分别为____1___1______。
intx=2,a=0,b=0;
switch(x)
{
case0:
b++;
break;
case1:
a++;
break;
case2:
a++;
b++;
break;
}
5、有循环控制程序段如下:
执行该程序后,输出结果是____632_____。
intx=5,y=4,z=1;
while(x++!
=(y-=1))
{
z+=1;
if(ybreak;
}
MessageBox.Show("x="+x.ToString()+","+"y="+y.ToString()+","+"z="+z.ToString())
6、写出以下程序运行结果______452942___________。
usingSystem;
classTest
{01234567
staticint[]a={11,12,13,14,15,16,17,18};
publicstaticvoidMain()
{
ints0,s1,s2;
s0=s1=s2=0;
for(inti=0;i<8;i++)
{
switch(a[i]%3)
{
case0:
s0+=Test.a[i];break;12+15+18
case1:
s1+=Test.a[i];break;13+16
case2:
s2+=Test.a[i];break;11+14+17
}
}
Console.WriteLine(s0+""+s1+""+s2);
}
}
7、有以下程序段:
inti=0,s=0;
do
{
if(i%2==1)
{
i++;
continue;
}
i++;
s+=i;
}
while(i<5);
MessageBox.Show("s="+s.ToString());
执行后输出结果是___9___。
8、该程序的运行结果为:
__100___101___20__101__20__。
publicclassA
{
publicinta=100;
publicvoidm()
{
a++;
Console.WriteLine(a);
}
}
classB:
A
{
newpublicinta=20;
newpublicvoidm()
{
base.m();
Console.WriteLine(a);
}
publicstaticvoidMain()
{
Ax=newA();
Console.WriteLine(x.a);
x.m();
By=newB();
Console.WriteLine(y.a);
y.m();
}
}
9、写出以下程序运行结果为____8__11__14__17_.
usingSystem;
classTest
{
constintN=5;
publicstaticvoidMain(){
inta=0;
for(inti=1;i{
intc=0,b=5;
a+=3;c=a+b;
Console.write(c+“”);
}}
10、写出以下程序运行结果______________120___。
publicclassStudent
{
publicstringname;
publicstringnumber;
publicdoublesubsidy=80;
publicStudent(stringname,stringnumber)
{
this.name=name;
this.number=number;
}
publicvoidShowInfo()
{
Console.WriteLine("{0}\n{1}",name,number);
Console.WriteLine("{0}",AdvSubsidy.Caculate(this));
}
}
publicclassAdvSubsidy
{
publicstaticdoubleCaculate(StudentE)
{return(1.5*(E.subsidy));}
}
publicclassAppMain
{
publicstaticvoidMain()
{
Students1=newStudent("zhanghua","200454240");
s1.ShowInfo();
}
}
11、写出以下程序运行结果为____84.78_______.
classRound
{
publicdoubler;
publicRound(doubler)
{this.r=r;}
publicvirtualdoubleArea()
{return(3.14*r*r);}
}
classSphere:
Round
{
publicSphere(doubler)
:
base(r)
{}
publicoverridedoubleArea()
{return(3.14*r*r*r);}
}
classApp
{
staticvoidMain()
{
Spheres=newSphere(3);
Console.WriteLine(s.Area());
}
}
12、写出以下程序运行结果为__i=7_____s=12______。
usingSystem;
classTest
{
publicstaticvoidMain()
{
ints=0;
for(inti=1; ;i++){
if(s>10)break;
if(i%2==0) s+=i;
}
Console.writeLine("i,s="+i+","+s);
}}
1、编写Test类,包含name、age和addr,创建一个Testt=newTest(“张三”,22,”抚顺”);使用Display方法,将姓名、年龄和住址输出,并在Main中调用显示。
classTest
{
publicstringname;
publicintage;
publicstringaddr;
publicTest(stringname,intage,stringaddr)
{
this.name=name;
this.age=age;
this.addr=addr;
}
publicvoidDisplay()
{
Console.WriteLine("姓名是"+name);
Console.WriteLine("年龄是"+age);
Console.WriteLine("住址是"+addr);
}
staticvoidMain(string[]args)
{
Testt=newTest("张三",22,"抚顺");
t.Display();
}
}
2、根据如下界面,写出程序:
stringusername;
stringpassword;
username=textBox1.Text.Trim();
password=textBox2.Text.Trim();
if(username=="admin"&&password=="123456")
{
MessageBox.Show("登录成功!
","登录信息提示");
}
else
{
MessageBox.Show("登录失败!
","登录信息提示");
}
3、编一个程序,定义常量Pi=3.14159265,从键盘上输入半径r,求出圆的面积。
PublicconstdoublePi=3.14159265;
{doubler;
doubles;
Console.WriteLine("请输入圆的半径:
");
r=double.Parse(Console.ReadLine());//
s=Pi*r*r;
Console.WriteLine("圆的面积:
"+s);}