当前位置:文档之家› C#习题集

C#习题集

第2章简单的C#程序设计

一.选择题

1.C#中程序的入口方法是【 B 】方法。

A) main B) Main C) begin D) Program

2.假设变量x的值为25,要输出x的值,下列正确的语句是【 C 】。

A) System.Console.writeline(“x”);B) System.Console.WriteLine(“x”);

C) System.Console.WriteLine(“x={0}”,x);D) System.Consol e.WriteLine(“x={x}”);

3.要退出应用程序的执行,应执行下列的【】语句。

A) Application.Exit(); B) Application.Exit;

C) Application.Close(); D) Application.Close;

4.关于C#程序的书写,下列不正确的说法是【】。

A) 区分大小写

B) 一行可以写多条语句

C) 一条语句可以写成多行

D) 一个类中只能有一个Main()方法,因此多个类中可以有多个Main()方法。

5.公共语言运行库即【】。

A) CRL B) CLR C) CRR D) CLS

6..NET平台是一个新的开发框架,【】是.NET的核心部分。

A) C# B) .NET Framework C) https://www.doczj.com/doc/98302491.html, D) 公共语言运行库7.C#应用程序项目文件的扩展名是【】。

A) csproj B) cs C) sln D) suo

8.C#应用程序解决方案文件的扩展名是【】。

A) csproj B) cs C) sln D) suo

9.运行C#程序可以通过按【】键实现。

A) F5 B) Alt+F5 C) Ctrl+F5 D) Alt+Ctrl+F5

10.C#语言中类模块代码文件的扩展名是【】。

A) csproj B) cs C) sln D) suo

11.构建桌面应用程序需要.NET提供的类库是【】。

A) https://www.doczj.com/doc/98302491.html, B) Windows Form C) XML D) https://www.doczj.com/doc/98302491.html,

12.C#中导入某一命名空间的关键字是【】。

A) use B) using C) import D) include

13..NET Framework将【】定义为一组规则,所有.NET语言都应遵守这个规则,才能创建可以与其他语言互操作的应用程序。

A) JIT B) CLR C) MSIL D) https://www.doczj.com/doc/98302491.html,

14.在https://www.doczj.com/doc/98302491.html,中,在【】中可以查看当前项目的类和类的层次信息。

A) 解决方案资源管理器B) 类视图窗口

C) 对象浏览器窗口D) 属性窗口

15.在.NET Framewor中,MSIL是指【】

A) 接口限制B)中间语言C) 核心代码D) 类库

16.【】是独立于CPU的指令集,它可以被高效地转换为本机机器语言。

A) CLR B) CTS C) CLS D) MSIL

17.利用C#开发应用程序通常有三种类型,不包括【】。

A) 控制台应用程序B) Web应用程序

C) SQL程序D) Windows应用程序

18.【】包含在. NET Framework的各语言之间兼容的数据类型。

A) JIT(Just-In-Time Compiler即时编译器)B) CTS(通用类型系统)

C) CLS(公共语言规范)D) MSIL(微软中间语言)

19.C#源代码经过【】次编译,才能在本机上执行。

A) 1 B) 2C) 3 D) 0

20.所有.NET支持的编程语言编写的源代码经过一次编译后,被编译成【】。

A) 机器代码B) MSIL代码C) CLS代码D) C#源代码

21.在.NET中,关于CLR和MSIL的叙述正确的是【】。

A) 应用程序在CLR环境被编译成MSIL,MSIL将能够被任何计算机执行

B) 应用程序被编译两次,第一次生成MSIL,MSIL在运行时被CLR快速编译

C) 应用程序被编译两次,但第二次CLR编译比第一次慢

D) 借取CLR,MISL被编译成机器代码,该机器代码能够在不同计算机下执行

22.CLR为.NET提供如下方面的功能或者服务,除了【】。

A) 无用存储单元收集B) 代码验证和类型安全

C) 代码访问安全D) 自动消除程序中的逻辑错误

23..NET Framework是一种新的开发平台,它具有两个主要组件,分别是【】和.NET基础类库。

A) 公共语言运行库B) Web服务C) 命名空间D) Main()函数

24.控制台应用程序使用【】命名空间中的类处理输入和输出。

A) System B) System.Web

C) System.Windows.Forms D) System.Data

25.【】类型的应用程序适合于交互性操作较少的情况。

A) 控制台应用程序B) Windows应用程序

C) Web应用程序D) 以上都不是

26.以下对Read() 和ReadLine()方法的叙述中正确的是【】。

A) Read()方法一次只能从输入流中读取一个字符,返回该字符的ASCII码值。

B) Read()方法一次可以从输入流中读取一个字符串

C) ReadLine()方法一次只能从输入流中读取一个字符

D) ReadLine()方法只有当用户按下Enter键时返回,而Read()方法不是

27.以下对Write() 和WriteLine()方法的叙述中正确的是【】。

A) Write()方法在输出字符串的后面添加换行符

B) 使用Write()方法输出字符串时,光标将会位于字符串的后面

C) 使用Write()方法和WriteLine()方法输出数值变量时,必须要先将数值转换成字符串

D) 使用不带参数的WriteLine()方法时,将不会产生任何输出

28.以下关于控制台应用程序和Windows应用程序的叙述中正确的是【】。

A) 控制台应用程序中有一个Main静态方法,而Windows应用程序中没有

B) Windows应用程序中有一个Main静态方法,而控制台应用程序中没有

C) 控制台应用程序和Windows应用程序中都没有Main静态方法

D) 控制台应用程序和Windows应用程序中都有一个Main静态方法

二.填空题

1..NET框架包括【公共语言运行库(CLR)】和.NET基础类库。

2.为便于管理多个项目,在https://www.doczj.com/doc/98302491.html,集成环境中引入【解决方案资源管理器】,用来对企业级解决方案涉及的多个项目进行管理。

3.C#是作为【C++ 】语言的替代品种出现的。

4.要使lable控件显示给定的文字“您好。”,应在设计状态下设置它的【Text 】属性值。

5.C#要求程序中的每个元素都要属于一个【类】。

6.在C#程序中,程序的执行总是从【Main 】方法开始的。

7.在C#中,进行注释有两种方法:使用“//”和使用“/* */”符号对,其中【// 】只能进行单行注释。

8.要在控制台程序运行时输出信息,可使用Console类的【Write 或WriteLine 】方法。三.问答题

1.C#语言的特点是什么?

2.说明Visual https://www.doczj.com/doc/98302491.html,、.NET Framework和C#之间的联系。

3.Visual Studio 2008包含哪几种开发语言?

4.控制台应用程序有哪些常用的输入输出方法?

5.简述命名空间的作用。

6.什么是解决方案?什么是项目?解决方案与项目有什么关系?

第3章C#程序设计基础

一.选择题

1.在C#语言中,下列能够作为变量名的是【】。

A) if B) 3ab C) a_3b D) a-bc

2.下列标识符中,非法的是【】。

A) MyName B) c sharp C) abc2cd D) _123

3.C#的数据类型分为【】。

A) 值类型和调用类型B) 值类型和引用类型

C) 引用类型和关系类型D) 关系类型和调用类型

4.C#中的值类型包括三种,它们是【】。

A) 整型、浮点型和基本类型B) 数值类型、字符类型和字符串类型

C) 简单类型、枚举类型、结构类型D) 数值类型、字符类型、枚举类型

5.下列选项中,【】是引用类型。

A) enum类型B) struct类型C) string类型D) int类型

6.以下类型中,不是值类型的是【】。

A) 整数类型B)布尔类型C) 类类型D) 字符类型

7.在C#语言中,转义字符不可以表示【】。

A) 任何字符B)字符串C)字母D)小数点

8.下列数值类型的数据精度最高的是【】。

A) int B) float C) decimal D) ulong

9.要使用变量score来存储学生某一门课程的成绩(百分制,可能出现小数部分),则最好将其定义为【】类型的变量。

A) int B) decimal C) float D) double

10.在C#中,每个int类型的变量占用【】个字节的内存。

A) 1 B) 2 C) 4 D) 8

11.以下C#语句中,常量定义正确的是【】。

A) const double PI 3.1415926; B) const double PI= 3.1415926;

C) define double PI 3.1415926; D) define double PI=3.1415926;

12.在C#中,表示一个字符串的变量应使用以下【】语句定义。

A) str as String;B) String str;C) String *str; D) char *str;

13.在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";

14.在C#语言中,下面的运算符中,优先级最高的是【】。

A) % B) ++C) *= D) >

15.表达式5/2+5%2-1的值是【】。

A) 4 B) 2C) 2.5 D) 3.5

16.能正确表示逻辑关系“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

18.已定义下列变量:

int n; float f; double df;

df=10; n=2;

下列语句正确的是【】。

A) f=12.3; B) n=df; C) df=n=100; D) f=df;

19.下列表达式或语句中,有语法错误的是【】。

A) n=12%3.0;(n为int型)B) 12/3.0

C) 12/3 D) …a?>?b?

20.以下装箱、拆箱语句中,错误的有【】。

A) object obj=100; int m=(int)obj; B) object obj=100; int m=obj;

C) object obj=(int)100; int m=(int)obj; D) object obj=(object)100; int m=(int)obj; 21.下面有关变量和常量的说法,正确的是【】。

A) 在程序运行过程中,变量的值是不能改变的,而常量是可以改变的

B) 常量定义必须使用关键字const

C) 在给常量赋值的表达式中不能出现变量

D) 常量在内存中的存储单元是固定的,变量则是变动的

22.代码public static const int A=1;中的错误是【】。

A) A需要定义类型B) 格式错误

C) const不能用static修饰符D) const不能用public修饰符

23.以下对枚举类型的定义,正确的是【】。

A) enum a={one,two,three}; B) enum a{a1,a2,a3};

C) enum a{'1', '2', '3'}; D) enum a{ "one","two","three" };

25.枚举型常量的值不可以是【】类型。

A) int B) long C) ushort D) double

26.执行下列两条语句后,结果s2的值为【】。

string s="abcdefgh";

string s2=s.Substring(2,3);

A) "bc" B) "cd" C) "bcd" D) "cde"

二.填空题

1.在C#中,使用【const】关键字来声明符号常量。

2.在C#中,表达式Math.Pow(2,-2)的值是【0.25】。

3.为计算表达式e x+y的值,应使用的C#语言的表达式是【Math.Exp(x+y)】。

4.C#语言规定,变量在使用之前必须先【定义】。

5.下列程序完成的功能是:从键盘上输入一个直角三角形的斜边长度和一个角的度数,计算出另两条直角边的长度并输出。请填空。

class Program

{ public static void Main(string[] args)

{ double a, b, c, d, jd;

c= Convert.ToSingle(Console.ReadLine()); //输入斜边的长度

jd=Convert.ToSingle(Console.ReadLine()); //输入角的度数

d=【jd *Math .PI /180 】;

a=c*Math.Sin(d);

b=【c*Math .Cos (d) 】;

Console.WriteLine("a={0},b={1}",a,b); //输出两直角边的值

}

}

6.设x为int型变量,请写出描述“x是奇数”的C#语言表达式【x%2==1 】。

7.请写出描述“-10≤x≤10”的C#语言表达式【x>=-10 && x<=10 】。

8.在代码中明确表示将某种数据类型转换为另一种数据类型称为【显式类型转换】。

9.下面程序的运行结果是【】。

class Program

{ public static void Main(string[] args)

{ string str1="星期一\\星期二\\星期三";

string str2=@"星期一\\星期二\\星期三";

Console.WriteLine("str1={0}",str1);

Console.WriteLine("str2={0}",str2);

}

}

str1=星期一\星期二\星期三

str2=星期一\\星期二\\星期三

10.C#中的字符串有两类:规则字符串和逐字字符串,定义逐字字符串时,应在其前面加上【@】号。

11.下列程序的执行结果是【False 】。

class Program

{ public static void Main(string[] args)

{ string str1,str2;

str1="abdde"; str2="abcde";

Console.WriteLine("{0}",str1==str2);

}

}

12.已知str的值为”abcdefgh”,则表达式str.Substring(1,3)的值为【bcd 】。

13.若要从字符串str的第3个字符开始取5个字符作为一个子串赋给sstr,可以使用语句【sstr=str.Substring(2,5) 】实现。

14.以下程序的执行结果是【123】。

public static void Main(string[] args)

{ string str="1a2b3c";

int i;

for(i=0;i

if(str[i]>='0'&& str[i]<='9') Console.Write(str[i]);

}

15.将一个值类型隐式或显示地转换成一个object类型称为【装箱】。所谓拆箱就是将一个【object 类型】显式地转换成一个值类型。

16.下列程序段的输出结果是【True 】。

int a=1,b=2,c=3;

Console.WriteLine(a>b&&b==c||a

17.下列程序的执行结果是【my,your,5,15 】。

class Program

{ enum team{my,your=4,his,her=his+10};

public static void Main(string[] args)

{ Console.WriteLine("{0},{1},{2},{3} ",team.my, team.your,

(int)team.his, (int)team.her);

}

}

18.以下程序的输出结果是【6】。

class Program

{ public static void Main(string[] args)

{ int a=5,b=4,c=6,d;

Console.WriteLine(“{0}”,d=a>b?(a>c?a:c):b);

}

}

19.以下程序的输出结果是【】。

class Program

{ public static void Main(string[] args)

{ int[] a = new int[3] { 1, 2, 3 };

for (int i = 0; i < 3; i++) Console.Write("{0} ", a[i]);

Console.WriteLine();

int[] b = a;

for (int i = 0; i < 3; i++) b[i] = 2 * b[i];

for (int i = 0; i < 3; i++) Console.Write("{0} ", a[i]);

Console.WriteLine();

Console.Read();

}

}

1 2 3

2 4 6

20.以下程序的输出结果是【】。

class Program

{ public static void Main(string[] args)

{ int a=4,b=5,m,n;

m=(a++)+(b++); n=a+b;

Console.WriteLine("m={0} n={1}",m,n);

m=(++a)+(++b); n=a+b;

Console.WriteLine("m={0} n={1}",m,n);

}

}

m=9 n=11

m=13 n=13

三.问答题

1.什么是字符类型和字符串类型?两者有何区别和联系?

2.是否可以定义这样的数组:它即包含int类型数据,也包含float类型数据?为什么?3.变量与常量有何区别?

4.什么是数据类型转换?有哪几种方法?

5.数据类型的隐式转换和显式转换分别在什么场合使用?它们可以相互替换吗?6.除(/)运算对整型数据和浮点型数据有何不同?

7.简述C#中有哪些数据类型。

8.说明C#值类型与引用类型数据的区别。

9.简述C#中结构类型和枚举类型的声明方法。

10.简述C#中常用类的静态方法和非静态方法的差异。

第4章C#控制语句

一.选择题

1.在C#语言中,if语句后面的表达式应该是【】。

A) 逻辑表达式B) 条件表达式C) 关系表达式D) 布尔类型的表达式2.在C#语言中,if语句后面的表达式,不能是【】。

A) 逻辑表达式B) 算数表达式C) 关系表达式D) 布尔类型的表达式3.在C#语言中,switch语句用【】来处理不匹配case语句的值。

A) default B) anyelse C) break D) goto

4.下列程序的输出结果是【】。

public static void Main(string[] args)

{ 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

5.以下叙述正确的是【】。

A) do……while语句构成的循环不能用其他语句构成的循环来代替

B) do……while语句构成的循环只能用break语句结束循环

C) 用do……while语句构成的循环,在while后的表达式为true时结束循环

D) 用do……while语句构成的循环,在while后的表达式应为关系表达式或逻辑表达式

6.以下关于for循环的说法不正确的是【】。

A) for循环只能用于循环次数已经确定的情况

B) for循环是先判定表达式,后执行循环体

C) 在for循环中,可以用break语句跳出循环体

D) for循环体语句中,可以包含多条语句,但要用花括号括起来

7.以下关于if语句和switch语句的说法,正确的【】。

A) 如果在if语句和switch语句中嵌入break语句,则在程序执行过程中,一旦执行到break语

句,就会结束相应的执行,转向执行其后面的语句

B) 凡是能够使用if语句的地方就可以使用switch语句,反之亦然

C) if语句有3种基本形式:if…、if…else…和if…else if…else…

D) if语句是实现“单判断二分支”的选择结构,switch语句是实现“单判断多分支”的选择结构。8.以下关于for循环的说法,不正确的是【】。

A) for语句中的3个表达式都可以省略

B) for语句中的3个表达式中,若第2个表达式的值为true,则执行循环体中的语句,直到第3

个表达式的返回值为false

C) for语句中的3个表达式中,第2个表达式必须是布尔类型的表达式,其他两个可以是任意

类型的表达式。

D) for语句中的3个表达式中,第1个表达式执行且仅执行一次;每当循环体语句被执行后,

第3个表达式都跟着被执行一次。

9.C#提供的4种跳转语句中,不推荐使用的是【】。

A) return B) break C) continue D) goto

二.填空题

1.在switch语句中,在每个分支的最后应有一条【break】语句。

2.在C#中,实现循环的语句主要有【while】、do……while和【for】语句。

3.在循环执行过程中,希望当某个条件满足时强行退出循环,应使用【break】语句。

4.下列程序完成的功能是求出所有的水仙花数。(所谓水仙花数是指这样的数:该数是三位数,其各位数字的立方和等于该数。例如:153=13+53+33,所以153是一个水仙花数。)请填空。

class Program

{ public static void Main(string[] args)

{ int a, b, c, t;

for(i=100; i<=【999 】; i++)

{ t=i;

a=t%10; t=t/10; b=t%10; c=t/10;

if(【i==a*a*a+b*b*b+c*c*c】) Console.WriteLine("i={0} ",i);

}

}

}

5.下列程序的功能是:输出100以内能被3整除且个位数为6的所有整数。请填空。

class Program

{ public static void Main(string[] args)

{ int i, j;

for(i=0;【i<10 】; i++)

{ j=i*10+6;

if(【j%3==0】) Console.Write ("{0} ", j);

}

}

}

6.下列程序的功能是:产生100个两位随机正整数,求这些数中所有能被3整除的数的和,以及所有不能被3整除的数的各位数字和。请填空。

static void Main(string[] args)

{ float sum1=0,sum2=0;

int i,num;

Random randObj1=new Random();

for(i=1;i<=100;i++)

{ num=【randObj1.Next(10,100) 】;

if(num%3==0)

{ sum1=sum1+num; 【continue; 】}

sum2=sum2+num%10;

sum2=sum2+num/10;

}

Console.WriteLine("能被3整除的数的和为:{0}",sum1);

Console.WriteLine("不能被3整除的所有数的各位数字和为:{0}",sum2);

Console.Read ();

}

三.读程序题

1.有以下程序代码,若执行时从键盘上输入9,则输出结果是【10 】。

class Program

{ public static void Main(string[] args)

{ int n;

n=int.Parse (Console.ReadLine());

if (n++<10) Console.WriteLine("{0}", n);

else Console.WriteLine("{0}", n--);

Console.Read();

}

}

2.下列程序的运行结果是【i=11, s=0 】。

class Program

{ public static void Main(string[] args)

{ int i=0,s=1;

do

{ s/=s+1;

i++;

}while(i<=10);

Console.WriteLine("i={0}, s={1} ",i,s);

}

}

3.下列程序的运行结果是【m=51,n=50 】。

class Program

{ public static void Main(string[] args)

{ int i=0,m=0,n=0;

while(i<=100)

{ if(i%2==0) m+=1;

else n=n+1;

i++;

}

Console.WriteLine("m={0},n={1}",m,n);

}

}

4.下列程序的运行结果是【m=3】。

static void Main(string[] args)

{ int a=15,b=21,m=0;

switch (a%2)

{ case 0: m++; break;

case 1: m++;

switch (b%2)

{ case 0: m++; break;

default: m=m+2; break;

}

break;

}

Console.WriteLine("m={0}", m);

}

4.下列程序的运行结果是【s=10】。

static void Main(string[] args)

{ int i, j, s=0;

for( i=2; i<6; i=i+2 )

{ s=1;

for( j=i; j<6; j++) s+=j;

}

Console.WriteLine("s={0}", s);

}

5.下列程序的运行结果是【a=32】。

static void Main(string[] args)

{ int i=0, a=0;

while( i<20 )

{ for( ; ; )

{ if(i%10==0) break;

else i--;

}

i+=11; a+=i;

}

Console.WriteLine("a={0}", a);

}

四.编程题

1.设计一个控制台应用程序,将用户输入的正整数反向显示出来。如输入12345,则输出54321。

static void Main(string[] args)

{ int digit, num;

Console.Write("输入一个整数:");

num = int.Parse(Console.ReadLine());

Console.Write("反向显示结果:");

while (num != 0)

{ digit = num % 10; //依次求个位、十位、…上的数字digit

num = num / 10;

Console.Write(digit);

}

Console.WriteLine();

Console.Read();

}

2.设计一个控制台应用程序,读入一组整数(以输入0结束),分别输出其中奇数和偶数的和。

static void Main(string[] args)

{ int n, s1 = 0, s2 = 0;

do{ n = int.Parse(Console.ReadLine());

if (n % 2 == 1) s1 += n;

else s2 += n;

} while (n != 0);

Console.WriteLine("奇数之和={0}", s1); Console.WriteLine("偶数之和={0}", s2); Console.Read(); }

3.设计一个控制台应用程序, 输入正整数n ,计算s=1+(1+2)+(1+2+3)+…+(1+2+…+n) 。

static void Main(string[] args)

{ int n, i, j, s = 0, p=0; Console.Write("n:");

n = int.Parse(Console.ReadLine()); for (i = 1; i <= n; i++) { p = p + i; s += p; }

Console.WriteLine("s={0}", s); Console.Read(); }

4.设计一个控制台应用程序,利用下面的公式编程计算π的值。

)2000(1

21321715131-14π=---+?+-+=n n n

static void Main(string[] args)

{ double pi=0.0;

int n;

for (n=1;n<=2000;n++)

if (n%2==1) pi=pi+1.0/(2*n-1); else pi=pi-1.0/(2*n-1); pi=4*pi;

Console.WriteLine("π={0}", pi); }

第5章数组和集合

一.选择题

1.在C#中定义一个数组,以下正确的是【】。

A) int a=new int[5]; B) int[] a= new int[5];

C) int a=new int[5]; D) int[5] a=new int[];

2.下列语句中,不能正确定义长度为4的数组a的语句是【】。

A) int[] a=new int[]{1,2,3,4}; B) int[] a= {1,2,3,4};

C) int[] a=new int[4]{1,2,3}; D) int[] a=new int[4]{1,2,3,4};

3.假定int类型变量占用4个字节,若有定义:

int[] x=new int[10]{0,2,4,4,5,6,7,8,9,10};

则数组x在内存中所占字节数是【】。

A) 10 B) 20 C) 40 D) 80

4.以下数组定义语句中不正确的是【】。

A) int[] a=new int[5]{1,2,3,4,5}; B) int[,] a=new int[3][4] ;

C) int[][] a=new int[3][0]; D) int[] a={1,2,3,4,5};

5.以下定义并初始化一维数组的语句中正确的是【】。

A) int a[] = {1,2,3,4,5}; B) int[] a=new int[];

C) int[] a=new int[]{1,2,3,4,5}; D) int[] a; a={1,2,3,4,5};

6.以下定义并初始化一维数组的语句中正确的是【】。

A) int a= new int[]; B) int[] a=new int[];

C) int[] a=new int[]{1,2,3,4,5}; D) int[] a=new int[n]{1,2,3,4,5};

7.以下定义并初始化数组的语句中正确的是【】。

A) int a[][]=new int[4,5]; B) int[][] a=new int[4,5];

C) int a[,]=new int[4,5]; D) int[,] a=new int[4,5];

8.有定义语句:int[,] a=new int[5,6]; 则下列正确的数组元素引用是【】。

A) a(3,4) B) a(3)(4) C) a[3][4] D) a[3,4]

9.对于foreach语句和for语句,下列说法错误的是【】。

A) for语句与foreach语句在结构上不一样,前者有3个表达式,表达式间用分号隔开;后者仅

有一个“表达式”,形式为“数据类型变量in 集合表达式”

B) 语句for(;true;);是合法的,但是个死循环;“foreach(true);”也是合法的,也是一个死循环

C) 语句for(;true;);是合法的,但是个死循环;而“foreach(true);”是非法的

D) 语句块“ int[] a={1,2}; foreach(int i in a);”是合法的。

10.在C#中,关于Array和ArrayList的维数,以下说法正确的是【】。

A) Array可以有多维,而ArrayList只能是一维

B) Array只能是一维的,而ArrayList可以有多维

C) Array和ArrayList都只能是一维

D) Array和ArrayList都可以是多维

11.以下List集合声明中正确的是【】。

A) List f=new List(); B) List f=new List ();

C) List f=new List (); D) List f=new List;

二.填空题

1.数组定义与赋初值语句如下:int[] a={1,2,3,4,5}; 则a[2]的值为【3】。

2.下列程序段执行后,a[4]的值为【4 】。

int[] a={1,2,3,4,5};

a[4]=a[a[2]];

3.下列数组定义语句中:int[] a=new int[3]; ,定义的数组a占的字节数为【12】。

4.下列数组定义语句中,数组将在内存中占用【160 】个字节。

double[,] d=new double [4,5];

5.要定义一个3行4列的单精度二维数组f,使用的定义语句为【float[,] f=new float [3,4];】。6.要定义一个int型的参差数组a,数组有两行,第一行一个元素,第二行两个元素并赋初值3和4,使用的语句如下,请填空。

int[][] a=【new int[2][]】;

a[0]=【new int[1] 】;

a[1]=【new int[2]{3,4} 】;

7. 下列程序完成的功能是采用二分查找方法在给定的有序数组a中查找用户输入的值,并提示相应

的查找结果。请填空。

public static void Main(string[] args)

{ double [] a=new int[10]{0, 1.2, 2.5, 3, 4.6, 5.0, 6.7, 7.6, 8.2, 9};

double k;

int low=0, high=9, mid;

Console.Write("输入查找数据:");

k=double.Parse(Console.ReadLine());

while (【(1)】)

{ mid=(low+high)/2;

if (a[mid] == k)

{ Console.WriteLine("a[{0}]={1}", mid, k);

return;

}

else if (a[mid] > k) 【(2)】;

else low = mid + 1;

}

Console.WriteLine("未找到{0}", k);

}

(1)low<=high (2)high =mid-1

三.读程序题

1.下列程序的输出结果是【852】。

class Program

{ public static void Main(string[] args)

{ int i;

int[] a=new int[10];

for(i=9;i>=0;i--) a[i]=10-i;

Console.WriteLine(“{0}{1}{2}”,a[2],a[5],a[8]);

}

}

2.下面程序的运行结果是【】。

class Program

{ public static void Main(string[] args)

{ const int SIZE=10;

int[] y={1,2,3,4,5,6,7,8,9,10};

int[] z=new int[SIZE];

for (int i = 0; i < z.Length; i++)

{ z[i] = i * 2 + y[i];

Console.Write("{0} ", z[i]);

}

Console.Read();

}

1 4 7 10 13 16 19 2

2 25 28

2.下面程序的运行结果是【】。

static void Main(string[] args)

{ const int M = 5;

int[][] yhsj = new int[M][];

int i, j;

for (i = 0; i < M; i++) yhsj[i] = new int[i + 1];

for (i = 0; i < M; i++) { yhsj[i][0] = 1; yhsj[i][i] = 1; }

for (i = 2; i < M; i++)

for (j = 1; j < i; j++)

yhsj[i][j] = yhsj[i - 1][j - 1] + yhsj[i - 1][j];

for (i = 0; i < M; i++)

{ for (j = 0; j <= i; j++) Console.Write("{0} ", yhsj[i][j]);

Console.WriteLine();

}

Console.Read();

}

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

3.下面程序的运行结果是【s=28】。

static void Main(string[] args)

{ int s = 0;

int[][] a = new int[2][];

a[0] = new int[3] { 1, 2, 3 };

a[1] = new int[4] { 4, 5, 6, 7 };

for (int i = 0; i < a.Length; i++)

for (int j = 0; j < a[i].Length; j++)

s = s + a[i][j];

Console.Write("s={0}",s);

}

3.下面程序的运行结果是【3】。

static void Main(string[] args)

{ int[] num = { 1, 3, 5 };

ArrayList arr = new ArrayList();

for(int i=0;i

arr.Insert(1, 2);

Console.WriteLine("{0}",arr[2]);

}

4.下面程序的运行结果是【9,7,5,3,1 】。

static void Main(string[] args)

{ int[] num = { 1,3,5,7,9 };

Array.Reverse(num);

foreach (int m in num) Console.Write("{0} ",m);

Console.Read();

}

5.下面程序的运行结果是【】。

static void Main(string[] args)

{ ArrayList myarr = new ArrayList();

myarr.Add("Visual"); myarr.Add("C#");

myarr.Add("2008"); myarr.Insert(0,"Welcome");

myarr.Insert(1, "to"); myarr.Remove("2008");

foreach (String s in myarr) Console.Write(s+" ");

Console.WriteLine();

}

Welcome to Visual C#

四.编程题

1.设计一个控制台应用程序,假设10个整数用一个一维数组存放,求其最大值和次大值。

static void Main(string[] args)

{ int[] a = new int[10]{1,8,3,4,7,9,6,10,2,5};

int n=10,max1,max2,i;

max1=a[0]>a[1]?a[0]:a[1]; max2=a[0]>a[1]?a[1]:a[0];

for (i=2;i

if (max1

Console.WriteLine("max1={0},max2={1}",max1,max2);

}

2.设计一个控制台应用程序,用两个二维数组分别存放5个学生4门功课的考试成绩,求每位考生的平均成绩,并输出结果。

static void Main(string[] args)

{ const int Max = 5; //考生数

int[] Ave = new int[Max]; //定义一个一维数组存储考生的总成绩

int[,] grade={{88,75,62,84},{96,85,75,92}, {68,63,72,78},

{95,89,76,98}, {76,65,72,63}};

//定义二维数组存储考生成绩for(int i=0; i

for(int j=0; j<4; j++) Ave[i] += grade[i,j];

for (int k = 0; k < Max; k++)

Console.WriteLine("考生{0}平均成绩={1} ",k+1, Ave[k]/4.0);

}

3.设计一个控制台应用程序,用两个一维数组分别存放5个学生的学号和姓名,分别按学号和姓名进行排序,并输出排序后的结果。

class Program

{ const int Max = 5;

static void disp(int[] no,string[] name, string str)

{ Console.WriteLine(str);

Console.Write("学号:\t");

for (int i = 0; i < no.Length; i++)

Console.Write("{0}\t",no[i]);

Console.WriteLine();

Console.Write("姓名:\t");

for (int i = 0; i < name.Length; i++)

Console.Write("{0}\t", name[i]);

Console.WriteLine();

}

static void Main(string[] args)

{ int[] no = new int[] { 2, 4, 5, 1, 3};

string[] name = new string[]

{"Smith","John","Mary","Cherr","Tomn"};

disp(no, name,"排序前:");

Array.Sort(no, name);

disp(no, name,"按学号排序后:");

Array.Sort(name, no);

disp(no, name, "按姓名排序后:");

Console.Read();

}

}

第6章面向对象程序设计

一.选择题

1.下面有关类和对象的说法中,不正确的是【】。

A) 类是系统提供的一种数据类型B) 对象是类的实例

C) 类和对象的关系是抽象和具体的关系D) 任何一个对象只能属于一个具体的类2.面向对象的特点主要概括为【】。

A) 可分解性、可组合型性和可分类性B) 继承性、封装性和多态性

C) 封装性、易维护性、可扩展性和可通用性D) 抽象性、继承性和封装性

3.要使一个类能被同一命名空间中的其他类访问,但不能被这个命名空间以外的类访问,该类可以【】。

A) 不使用任何修饰符B) 使用private修饰符

C) 使用public修饰符D) 使用internal修饰符

4.在C#中,【】访问修饰符修饰的字段只能由当前程序集访问。

A) private B) public C) protected D) internal

5.类的字段和方法的默认访问修饰符是【】。

A) public B) private C) protected D) internal

6.下列关于构造函数的描述中,不正确的是【】。

A) 构造函数中,不可以包含return语句B) 一个类只能有一个构造函数

C) 实例构造函数在生成类实例时被自动调用D) 用户可以定义无参构造函数

7.下列关于构造函数的描述中,【】是正确的。

A) 构造函数名必须与类名相同B) 构造函数不可以重载

C) 构造函数不能带参数D) 构造函数可以声明返回类型

8.下列的【】不是构造函数的特征。

A) 构造函数的函数名与类名相同B) 构造函数可以重载

C) 构造函数可以带有参数D) 可以指定构造函数的返回值类型

9.类ClassA有一个名为M1的方法,在程序中有如下一段代码,假设该段代码是可以执行的,则声明M1方法时一定使用了【】修饰符。

ClassA Aobj=new ClassA();

ClassA.M1();

A) public B) public static C) private D) virtual

10.在C#中,从属性的读写特性上来进行分类,可以划分为以下3种,除了【】。

A) 只读属性B) 只写属性C) 读写属性D) 不可读不可写属性11.在C#中,以下关于属性的描述中正确的是【】。

A) 属性是以public关键字修饰的字段,以public关键字修饰的字段也可称为属性

B) 属性是访问字段值的一种灵活机制,属性更好地实现了数据的封装和隐藏

C) 要定义只读属性只需在属性名前加上readonly关键字

D) C#的类中不能自定义属性

12.以下类MyClass的属性count属于【】属性。

class MyClass

{ int i;

int count { get { r eturn i; } }

}

A) 只读B) 只写属性C) 读写D) 不可读不可写

13.C#中的TestClass为一自定义类,其中有如下属性定义:

public int Property{ …… }

使用以下语句创建了该类的对象,并让变量obj引用该对象。

TestClass obj=new TestClass();

那么,可通过【】方式访问类TestClass的Property属性。

A) MyClass. Property B) obj. Property

C) TestClass. Property D) obj. Property()

14.关于C#语言的方法,下列叙述正确的是【】。

A) 方法的定义不能嵌套,但方法的调用可以嵌套

B) 方法的定义可以嵌套,但方法的调用不能嵌套

C) 方法的定义和调用都不能嵌套

D) 方法的定义和调用都可以嵌套

15.以下所列的各方法头部中,正确的是【】。

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)

16.在类A中定义了属性y:

class A

{ public int y

{ get { return 1; }

set { }

}

}

并试图通过下列代码来实现对属性y的访问:

A b=new A();

b.y=2;

int x=b.y;

对此,下列说法正确的是【】。

A) 属性y可读可写,因此变量x的值为2

B) 属性y可读,但不可写,因此语句“b.y=2;”是错误的

C) 属性y可写,但不可读,因此语句“int x=b.y;”是错误的

D) 属性y可读可写,变量x的值为1

17.有以下类声明:

public class Class1

{ private string _sData="OK!";

privare string sData

{ set { _sData = value;} }

}

在Main函数中,在成功创建该类的对象obj后,以下【】语句是合法的。

A) obj. _sData="Hello!" B) obj. set(obj.sData);

C) obj. sData="Hello!"D) Console.WriteLine(obj. sData); 18.在类的定义中,类的【】描述了该类的对象的行为特征。

A) 字段B) 方法C) 属性D) 类名19.调用重载方法时,系统根据【】来选择具体的方法。

A) 参数的类型B) 参数的个数和类型

C) 参数个数D) 方法的返回值类型

20.下列关于方法重载的说法中,完全正确的是【】。

A) 重载方法的参数个数必须不同B) 重载方法必须具有不同的形参列表

C) 重载方法必须具有不同的返回值类型D) 重载方法的参数类型必须不同

21.关于静态成员,下列说法正确的是【】。

A) 同一个类中的静态成员,类实例化后,在不同的对象中形成不同的静态成员

B) 在类实例化后,同类型的对象都共享类的静态成员,静态成员只有一个版本

C) 在类定义时静态成员属于类,在类实例化后静态成员属于对象

D) 在类实例化后静态成员已被实例化,因此不同的对象有不同的静态成员

22.下列关于静态方法的说法,错误的是【】。

A) 静态方法不对特定实例进行操作,不与实例相关联

B) 使用静态方法的语法格式:类名.静态方法(实参列表)

C) 静态方法只能访问类中的静态成员,不能访问非静态成员

D) 静态方法不能访问类中的静态成员

23.已知:int a=100;

void Func(ref int b) { …… }

则下列函数调用正确的是【】。

A) Func(ref(10*a)) B) Func(ref 10*a) C) Func(ref(a) )D) Func(ref a)

24.下面对方法中的ref和out参数说明错误的是【】。

A) ref和out参数传递方法相同,都是把实参的内存地址传递给形参,实参与形参指向同一个内

存存储区域,但ref要求实参必须在调用之前明确赋过值

B) ref是将实参传入形参,out只能用于从方法中传出值,而不能从方法调用处接受实参数据。

C) ref和out参数因为传递的是实参的地址,所以要求实参和形参的数据类型必须一致

D) ref和out参数要求实参和形参的数据类型或者一致,或者实参能被隐式地转化为形参的类型25.设方法Max的签名为:public void Max(out int max, params int[] a),maxval是一个int型的值类型变量,arrayA是一个int型的数组对象,则下列调用该方法的语句中有错的是【】。

A) Max(maxval,4,5,3) B) Max(out maxval, 4, 5, 3)

C) Max(out maxval, arrayA) D) Max(out maxval, 4, 5)

26. 有以下类声明:

class Class1

{ public static int Count = 0;

public Class1()

{ Count++; }

}

在执行以下语句后,Class1.Count的值是【】。

Class1 o1 = new Class1();

Class1 o2 = new Class1();

A) 1 B) 2 C) 3 D) 0

27.在类MyClass中有下列方法定义:

public void test(params int[] arr) { Console.Write("使用params参数!"); }

public void test(int x, int y) { Console.Write("使用两个整形参数!"); }

请问上述方法重载有无二义性?若没有,则下列语句的输出为【】。

Myclass x=new MyClass();

x.test(0); x.test(0,1); x.test(0,1,2);

A) 有语义二义性

B) 使用params参数!使用params参数!使用params参数!

C) 使用params参数!使用两个整形参数!使用params参数!

D) 使用params参数!使用两个整形参数!使用两个整形参数!

相关主题
文本预览
相关文档 最新文档