C#复习资料
一、选择题
1.CLR是一种()
A.程序设计语言 B.运行环境 C.开发环境 D. API编程接口
2.C#语言源代码文件的后缀名为()
A..c# B .cc C. .csp D. .cs
3.构建桌面应用程序需要.NET提供的类库是()
4. Form 与C++等语言相比,C#的简单性主要体现在()
A.没有鼓励的全局函数 B.没有指针
C.不能使用未初始化的变量
D.解决了“DLL地狱”
5.C#中导入某一命名空间的关键字是()
A.using
6.C#中程序的入口方法名是()
A.Main
二、简答题
1.C#语言的主要优势有哪些
2.如何看待C#、CLR和.NET之间的关系
3.VS2010平台如何有效地实现各类应用程序的管理
4.最常见的C#项目有哪几类简述创建他们的基本操作步骤
第二章 C#语言基础
一、选择题
#中的值类型包括三种,它们是()
A.整型、浮点型、基本类型 B.数值类型、字符类型、字符串类型
C.简单类型、枚举类型、结构类型
D.数值类型、字符类型、枚举类型、
#的引用类型包括类、接口、数组、委托、object和string。其中object()根类
A.只是引用类型的
B.只是值类型的
C.只是string类型的
D.是所有值类型和引用类型的
3.浮点常量有三种格式,下面()组的浮点常量都属于double类型。
A. , , , ,
, , ,
4.下面字符常量表示有错误的一组是()
A.’\\’, ’\u0027’, ’\x0027’
B. ‘\n’, ’\t’, ’\037’
C.’a’ , ’\u0061’ , (char)97
D.’\x0030’ , ’\0’ , ‘0’
5.下列标识符命名正确的是()
A. _int,Int,@int ,_using,@using ,NO_1, D. A3,_A3,@A3
6.当表达式中混合了几种不同的数据类型时,C#会基于运算的顺序将他们自动转换成同一类型。但下面()类型和decimal类型混合在一个表达式中,不能自动提升为decimal.
A. float
B. int D. byte
7.设有说明语句 int x=8;则下列表达式中,值为2的是()
+=x-=x; %=x-2; >8x=0:x++; x=x+x;
#数组主要有三种形式,它们是()
A.一维数组、二维数组、三维数组
B.整型数组、浮点型数组、字符型数组
C.一维数组、多维数组、不规则数组
D.一维数组、二维数组、多维数组
9.设有说明语句 double[,,]tab=new double [2,3,4];那么下面叙述正确的是()
A. tab是一个三维数组,它的元素一共有24个
B. tab是一个有三个元素的一维数组,它的元素初始值分别是2,3,4
C. tab是一个维数不确定的数组,使用时可以任意调整
D. tab是一个不规则数组,数组元素的个数可以变化
#的构造函数分为实例构造函数和静态构造函数,实例构造函数可以对()进行初始化,静态构造函数只能对()进行初始化。
A.静态成员
B.非静态成员
C.静态成员或非静态成员
D. 静态成员和非静态成员
#实现了完全意义上的面向对象,所以它没有(),任何数据域和方法都必须封装在类体中。
A.全局变量
B.全局常数
C.全局方法
D.全局变量、全局常量和全局方法
12.方法中的值参数是()的参数。
A.按值传递
B.按引用传递
C.按地址传递
D.不传递任何值
13.下面对方法中的ref和out参数说明错误的是()
和out参数传递方法相同,都是把实在参数的内存地址传递给方法,实参与形参指向同一个内存存储区域,但ref要求实参必须在调用之前明确赋过值
是将实参传入形参,out只能用于从方法中传出值,而不能从方法调用处接收实参数据
和out参数传递的是实参的地址,所以要求实参和形参的数据类型必须一致
D.ref和out参数要求实参和形参的数据类型或者一致,或者实参能被隐式地转化为形参的类型
14.下列叙述中,正确的是()
A.接口中科院有虚方法
B.一个类科院实现多个接口
C.接口能被实例化
D.接口中科院包含已实现的方法
二、简答题
1.判断下列标识符的合法性。
4foots exam-1 using main Who_an_I Large&Small _Years val(7) 2xy
2.下列常量是否合法弱不合法,指出原因;若合法,指出它的数据类型。
32767 35u 3L ‘\87’ true “a”‘a’‘\96\45’ .5 5UL
3.指出下列哪些表示字符哪些表示字符串哪些既不表示字符也不表示字符串
‘0x66’ China “中国”“”‘\0x33’“\n\tox34”‘\r’
‘\\’‘’“\0x33”‘\0’“Computer System!\n”
“\\\\doc\\share\\” @”\\doc\share\” @”Joe said””Hello””to me”“Joe said\”Hello\”to me”
4.将下列代数式写成C#的表达式。
(1)ax2+bx+c (2)(x+y)3(3)(a+b)/(a-b)
5.计算下列表达式的值。
(1)x+y%4*(int)(x+z)%3/2 其中,x=,y=13,z=
(2)(int)x%(int)y+(float)(z*w) 其中,x=,y=,z=3,w=4
6.写出下列表达式运算后a的值,设原来的a都是10。
(1)a+=a;(2)a%=(7%2);(3) a*=3+4;
(4)a/=a+a;(5)a-=a;(6)a+=a-=a*=a;
三、填空题
1.C#中可以把任何类型的值赋给object类型变量,当值类型赋给object类型变量时,系统要进行( )操作;而将object类型变量赋给一个值类型变量,系统要进行( )操作,并且必须加上( )类型转换。
2.C#特有的不规则数组是数组的数组,也就是说它的数组元素是( ),并且它的内部每个数组的长度( )。
3.数组在创建时可以根据需要进行初始化,需要注意的是,初始化时,不论数组的维数是多少,都必须显式地初始化数组的( )元素。
四、程序分析
1.程序运行结果:______________
class Exe1
{
Static void Main(string[] args)
{
int x,y,z;
bool s;
x=y=z=0;
s=x++!=0||++y!=0&&++y!=0;
(“x={0},y={1},z={2},s={3}”,x,y,z,s); ();
}
}
2.程序运行结果:_________________
class Exe2
{
Static void Main(string[] args)
{
int a,b;
a=b=1;
b+=a/b++;
(“a={0},b={1},”,a,b);
b+=--a+(++b);
(“a={0},b={1}”,a,b);
();
}
}
3.程序运行结果:________________ class Exe3
{
Static void Main(string[] args) {
int Hb,Lb,x;
x=ox1af034;
Hb=(x>>16)&0xFFFF;
Lb=x&0x00ff;
(“Hb is {0}\t”,Hb);
(“Lb is {0}”,Lb);
();
}
}
4.程序运行结果:_________
class Exe4
{
Static void Main(string[] args)
{
int a=2,b=7,c=5;
switch(a>0)
{
case true:
switch(b<10)
{
case true: (“^”);break; case false: (“!”);break; }
break;
case false:
switch(c==5)
{
case false: (“*”);break; case true: (“#”);break; }
break;
}
();
}
}
5.程序运行结果:___________
class Exe5
{
Static void Main(string[] args)
{
int[] x;
x=new int[10];
int[] y={1,2,3,4,5,6,7,8,9,10}; const int SIZE=10;
int[] z;
z=new int[SIZE];
for (int i=0; i<;i++)
{
z[i]=i*2+1;
(“{0,4}”,z[i]);
();
}
}
6.下面程序的功能是:输出100以内能被3整除且个位数为6的所有整数,请填空。class Exe6
{
Static void Main(string[] args)
{
int i,j;
for(i=0;________;i++)
{
j=i*10+6;
if(_________)
{
continue;
}
(“{0}”,j);
}
();
}
}
7.程序运行结果:____________
public class Test
{
public void change1(string s)
{
s=s+”Change1”;
}
Public void change2(ref string s)
{
s=s+”Change2”;
}
public void change3(string s1,out string s2) {
s1=s1+”Change3”;
s2=s1;
}
}
class Exe7
{
static void Main(string[] args)
{
string s1,s2;
s1=”Hello,”;
Test t1=new Test();
(s1);
(“s1 after call to change1 is {0}”,s1);
(ref s1);
(“s1 after call to change2 is {0}”,s1);
(s1,out s2);
(“s1 after call to change3 is {0}”,s1);
(“s2 after call to change3 is {0}”,s2);
();
}
}
五、编程题
1.斐波那契数列中的前两个数是1和1,从第三个数开始,每个数等于前两个数的和,编程计算此数列的前30个数,且每行输出5个数。
2.从键盘上输入一个整数n的值,按下式求出y,并输出n和y的值(y用浮点数表示)。
y=1!+2!+3!+4!+……+n!
3.设计一个程序,输出所有水仙花数,所有水仙花数是一个三位整数,其各位数字的立方和等于该数本身,例如,153=13+53+33。
4.设计一个程序,输入一个四位整数,将各位数字分开,并按其反序输出。例如:输入1234,则输出4321。要求必须用循环语句实现。
5.求π/2的金是指的公式为:π/2=(2/1)*(2/3)*(3/4)*(4/5)*……*(2n/2n-1)*(2n/2n+1)*……
其中,n=1,2,3,……。设计一个程序,求出当n=1000是π的近似值。
6.设计一个程序,输入一个十进制数,输出相应的十六进制数。
7.当x>1时,Hermite多项式定义为:
1 n=0
H n(x)= 2x n=1
2xH n-1-2(n-1)H n-2(x) n>1
当输入浮点数x和整数n后,求出Hermite多项式前n项的值。
8.找出数组a中最大值的下标,输出下标及最大值。
9.判断s所指的字符串是否是“回文”(即顺读和逆读是相同的字符)。
10.输入一组非0整数(以0作为结束标志)到一位数组中,求出这一组数的平均值,并统
计出正数和负数的个数。
11.设计一个程序,求一个4*4矩阵两对角线元素之和。
12.输入一个字符串,串内有数字和非数字字符,例如,“abc2345 345fdf678 jdhfg945”,将其中连续的数字作为一个整数,依次存放到另一个整型数组b中。如将2345存放到b[0]。
345存放到b[1],678放入b[2],……统计出字符串中的整数个数,并输出这些整数。
第三章 C#面向对象编程
一、选择题
1.C#语言的核心是面向对象编程(OOP),所有OOP语言都应至少具有三个特性:()
A.封装、继承和多态
B.类、对象和方法
C.封装、继承和派生
D.封装、继承和接口
2.以下有关属性的叙述正确的是:()
A.要求与字段域一一对应
B.只包含get访问器的属性是只写属性
C.不能把它当变量使用
D.在静态属性访问器中可访问静态数据
3.假设class Mclass类的一个方法的签名为:public void Max(out int max,params int[]a),m1是Mclass类的一个对象,maxval是一个int型的值类型变量,arrayA是一个int型的数组对象,则下列调用该方法有错的是()
A. (out maxval)
B. (out maxval,4,5,2)
C. (out maxval,ref arrayA)
D. (out maxval,3,
4.枚举类型是一组命名的常量集合,所有整型都可以作为枚举类型的基本类型,如果类型省
略,则约定为()
A.uint
二、简答题
1.举一个现实世界中继承的例子,用类的层次图表示出来。
2.什么是抽象类和密封类它们有什么不同
3.分别在什么情况下使用隐式数值转换和显式数值转换
三、填空题
1.析构函数不能由程序显式地调用,而是由系统在_________时自动调用。如果这个对象是一个派生类对象,那么在调用析构函数时,除了执行派生类的析构函数,也会执行基类的析构函数,其执行顺序与构造函数__________.
2.C#实现了完全意义上的面向对象,所以它没有____,任何数据域、方法都必须封装在类中。
3.在类中,如果一个数据成员被声明为static的,则说明这个类的所有实例都共享这个static
数据成员。在类体外,static成员不能通过_______来访问,它必须通过________来访问。
四、程序分析
1.下面的程序,输入不同参数,如:5、hello、0、212等,观察并分析运行结果。
class Test
{
static void Main(string[] args)
{
while(true)
{
String s=();
if(s==”exit”) break;
try
{
int i = 10/(s);
(“结果是”+i);
}
catch(IndexOutOfRangeException e) {
;
}
catch(FormatException e)
{
;
}
catch(DivideByZeroException e)
{
;
}
catch(OverflowException e) {
;
}
}
();
}
}
2.指出下面代码中错误的地方,并进行修改。using System;
……
namespace PavelTsekov
{
interface I1
{
void MyFunction1();
}
interface I2
{
void MyFunction2();
}
class Test:I1,I2
{
public void ()
{
("Now I can say this here is I1 implemented!");
}
public void ()
{
("Now I can say this here is I2 implemented!");
}
}
class AppClass
{
static void Main(string[] args)
{
Test t=new Test();
();
();
();
}
}
}
3.分析下面的代码,指出Digit和byte直接的转换方式,并说明原因。using System;
……
namespace Digit
{
public class Digit
{
byte value;
public Digit(byte value)
{
if(value<0||value>9)
throw new ArgumentException();
=value;
}
public static implicit operator byte(Digit d) {
return ;
}
}
class Program
{
static void Main(string[] args)
{
Digit dig=new Dight(7);
byte num=dig;
("num={0}",num);
();
}
}
}