C#练习题及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
第1章
一.选择题
1关于C#程序的书写,下列不正确的说法是【 D 】。
A) 区分大小写 B) 一行可以写多条语句 C) 一条语句可以写成多行
D)
一个类中只能有一个 Main() 方法,因此多个类中可以有多个
Main() 方法。
2. C#应用程序项目文件的扩展名是【
A 】。
C) sln
D) suo A) csproj B) cs 3•运行C#程序可以通过按【
A 】键实现。
A) F5 B) Alt+F5 C) Ctrl+F5
D) Alt+Ctrl+F5
4. 公共语言运行库可简写为( C )。
A) MSIL B) JIT C) CLR D) MSDN 5 .NET 编程语言不包括下面哪种语言? (D) A) Visual Basic B) Visual C++ C) Visual C# D) JAVA
第2章
.选择题
A) a>=10 or a<=0 B) a>=10 | a<=0 C) a>=10 && a<=0 D) a>=10 || a<=0 7.以下程序的输出结果是【 C 】。
using System; 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);1. 在C#语言中, 下列能够作为变量名的是【 C
】。
A) if B) 3ab
C) a_3b
2.
在C#语言中, 转义字符不可以表示【 B 】。
A) 任何字符 B)字符串 C)字母 3.
表达式 5/2+5%2-1 的值是【 B 】。
A) 4 B) 2 C) 2.5 4. 下列数值类型的数据精度最高的是【 C 】。
A) int B) float C) decimal
5.
在C#语言中, 下面的运算符中,优先级最高的是【 B 】
A) % B) ++ C) *=
D) a-bc D)小数点 D) 3.5 D) ulong D) >
D 】。
6.能正确表示逻辑关系 a > 10或a w 0”的C#语言表达式是【
}
A) 5B) 4C) 6D) 不确定8.要使用变量score 来存储学生某一门课程的成绩(百分制,可能出现小数部分) ,则最好将其定义为【C】类型的变量。
A) int B) decimal C) float D) double 9.已定义下列变量:
int n; float f;double df;
df=10; n=2;
下列语句正确的是【 C 】。
A) f=12.3;B) n=df;C) df=n=100;D) f=df;
10.下列表达式或语句中,有语法错误的是【 A 】。
A) n=12%3.0; ( n 为int 型) B) 12/3.0
C) 12/3D) ‘ a'>' b'
11.下面有关变量和常量的说法,正确的是【 B 】。
A) 在程序运行过程中,变量的值是不能改变的,而常量是可以改变的
B) 常量定义必须使用关键字const
C) 在给常量赋值的表达式中不能出现变量
D) 常量在内存中的存储单元是固定的,变量则是变动的
12、下列类型转换中正确的是【 A 】
(A) int i= 'A' (B) long L=1.1f (C) int i=(float)1.1 (D) int i=1.1
13、以下选项中,合法的赋值语句是( B )
(A) int a==1 (B) int i=1;int j=i++;
(C) int a=a+1=2; (D) int i=int (j);
14、下列运算符中属于关系运算符的是( A )
(A) == (B) = (C) += (D) -=
15、阅读下面的程序,程序的运行结果为( C )
int a=10,b=4,c=20,d=6; label1.Text=a++*b+c*--d;
(A)144 (B)160 (C)140 (D)164
16、阅读下面的程序,程序的运行结果为( B )
int x=3,y=4,z=5;
String s=”xyz ” label1.Text=s+x+y+z;
(A)xyz12 (B)xyz345 (C)xyzxyz (D)12xyz
17、阅读下面的程序,程序的运行结果为( B )
int i=10,j=3;
float m=213.5f,n=4.0f; label1.Text=i%j+ ”;” label2.Text=m%n+ ”;”
(A)1.0 和1.5 (B)1 和1.5 (C)1.0 和2.5 (D)1 和2.5
、程序改错题
1、在编写贪吃蛇游戏中,使用变量输出贪吃蛇游戏当前的状态、运行速度、得分,参
using System; class Program
{
public static void Main( stri ng[] args)
考程序如下,但该程序还存在一些错误,请调试改正。
private void button1_Click ( object sender, EventArgs e ) {
int speed = 0; int score = 0; String status="";
Iabel1.text = "游戏正在进行 ... /n"
speed = 0; score = 30; status =
"正常运行";
label1.Text = label1.Text + label1.Text += label1.Text + label1.Text += label1.Text +
当前速度:"+ speed + "像素/秒"; "当前得分:"+ score + "分";
"当前状态:"+ status;
2、模拟连连看游戏判断是否打破记录的程序,参考程序如下,但该程序还存在一些错误,
请调试改正。
private void button1_Click ( object sender, EventArgs e )
{
int a = 32; //代表原纪录 int b =
101; //代表新纪录
int c=(a<b) ?"打破记录": "未打破记录"
labell.Text = "原记录:" +a+"\n"; labell.Text += "新记录: \n" +b+"\n";
labell.Text += "当前结构:
:\n" +c+"\n"
•选择题
1.在C#语言中,if 语句后面的表达式应该是【 B 】。
A )逻辑表达式 C )关系表达式
2.在C#语言中,if 语句后面的表达式,不能是【
B )条件表达式 D )布尔类型的表达式 B 】。
A )逻辑表达式 B )算数表达式
C )关系表达式
D )布尔类型的表达式 3.在C#语言中,switch 语句用【A 】来处理不匹配 case 语句的值。
A) default B) an yelse C ) break
4.下列程序的输出结果是【
D) goto
C 】。
{ 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.以下叙述正确的是【D 】。
A) do ..... while语句构成的循环不能用其他语句构成的循环来代替
B) do ..... while语句构成的循环只能用break语句结束循环
C) 用do ...... while语句构成的循环,在while后的表达式为true时结束循环
D) 用do ...... while语句构成的循环,在while后的表达式应为关系表达式或逻辑表达式
6.以下关于for 循环的说法不正确的是【A 】。
A) for 循环只能用于循环次数已经确定的情况
B) for 循环是先判定表达式,后执行循环体
C) 在for 循环中,可以用break 语句跳出循环体
D) for 循环体语句中,可以包含多条语句,但要用花括号括起来
7.以下关于if 语句和switch 语句的说法,正确的【CD 】。
A) 如果在if 语句和switch 语句中嵌入break 语句,则在程序执行过程中,一旦执行到break
语句,就会结束相应的执行,转向执行其后面的语句
B) 凡是能够使用if 语句的地方就可以使用switch 语句,反之亦然
C) if语句有3种基本形式:if…、if…else…和if…else if…else…
D) if 语句是实现“单判断二分支”的选择结构,switch 语句是实现“单判断多分支”的选择
结构。
8.以下关于for 循环的说法,不正确的是【C 】。
A) for 语句中的3 个表达式都可以省略
B) for语句中的3个表达式中,若第2个表达式的值为true,则执行循环体中的语句,
直到第 3 个表达式的返回值为false
C) for 语句中的3个表达式中,第2个表达式必须是布尔类型的表达式,其他两个可以是任意
类型的表达式。
D) for 语句中的3个表达式中,第1个表达式执行且仅执行一次;每当循环体语句被执行后,
第 3 个表达式都跟着被执行一次。
9. C#提供的4种跳转语句中,不推荐使用的是【D】。
A) return B) break C) continue D) goto
10 执行下列语句序列后,i 和j 的值分别是【C 】
int i=3,j=5;
if(i-1>j) i--;else j--;
A) 2,4 B)2,5 C)3,4 D)3,5 11 下列语句序列执行后,j 的值是【B 】
int j=5,i=6;
while(i 3)-;
A)1 B)2 C)3 D)4
12以下for循环的执行次数是【B】
for(i nt i=1;(i==1)&(i>2);i++)
A)无限次B) 一次也不执行C)执行1次D)执行2次13以下由do-while语句构成的循环执行次数是【C ]
int m=1;
do{++m}while(m<1);
A)有语法错误,不能执行B) 一次也不执行C)执行1次
二•改错题
1、根据消费总额进行打折,消费总额在100元以上(含100元)时打
90元)100元以下时打8折,50元以上(含50元)90元以下时打9 折。
参考程序如下,但是该参考程序有错误,请调试并改正。
private void button1_Click( object sender, EventArgs e)
{
int totalAmount = int .Parse(textBox1.Text); // 消费总额
if (totalAmount < 0)
{
label1.Text = "输入有误!";
}
Else if (totalAmount >= 100)
{
label1.Text = "打7折";
}
Else if (totalAmount > 90)
{
label1.Text = "打8折";
}
Else if (totalAmount > 50)
{
label1.Text = "打9折";
}
Else
{
label1.Text = "不打折";
}
D)执行2次
7折,90元以上(含折,50元以下的不打
2、从键盘输入2012年的某一月份,打印出该月份的天数。
参考程序如下,该参考程序还存在一定
的错误,请调试改正。
private void button1_Click( object sender, EventArgs e)
{
int day;
int month = int .Parse(textBox1.Text); // 月份
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:;
day=31;
break;
case 4:
case 6:
case 9:
case 11:
day=30;
break;
default :
day=-1;
break;
}
if (day==-1)
{
label1.Text= "无效输入”;
}
else
{
label1.Text= "2012 年"+month+"月的共有"+day+"天
}
}
3、利用for循环打印出以下格式的内容,参考程序如下,但该参考程序有一定的错误,请调试改
正。
*****
*
private void button1_Click( object sender, EventArgs e)
for (int i=5;i>0;i--) // 打印列
{
for (int j=0;j<i;j++); //打印行并控制每行的*数量
{
label1.Text+= "*"
}
label1.Text+= "\n"
}
}
1 •下面哪个语句是创建数组的正确语句【c】。
A) float f[]=new float [6] B) float f[6]=new float[6]
C) float [] f= new float[6] D) float f=new float[6]
2. 已知表达式int[] m={0,1,2,3,4,5,6},下面哪个表达式的值与数组的下标量总数相等【B 】
A) m.Le ngth() B) m.Le ngth
C) m.Le ngth-1 D) m.Le ngth()-1
3 •数组中各个元素的数据类型是【A】。
A)相同的B)不同的
C)部分相同的D)任意的
4. 语句int []a=new int[12]定义了几个数组元素【A 】。
A) 12 B) 13
C) 11 D)0
二.改错题
1、编写用数组保存某个学生的三门课程的成绩的程序,参考程序如下,但该参考程序有一
些错误,请调试改正。
private void button1_Click( object sender, EventArgs e)
{
Int []score = new int [3];
score[1]=90;
score[2]=80;
score[0]=70;
for (int i=0;i<3;i++)
{
label1.Text=label1.Text+ "成绩"+(i+1)+ ":" +score[i];
}
•选择题
1下列的()不是构造函数的特征【 A )
构造函数的函数名和类名相同 C )构造函数可以带有参数 2.已知类 MyClass 定义如下: class MyClass
{
int a1=1; D 】。
B )构造函数可以重载
D )可以指定构造函数的返回值类型
private int a2=2; protected int a3=3; public int a4=4; }
obj 是MyClass 的一个对象,则下列哪条语句是正确的?(
A) obj.a1=2; B) obj.a2=2; 3 C) obj.a3=2;
D) obj.a4=2;
3. 已知类 MyClass 定义如下: class MyClass {
static int a1=1; //没指定默认是私有的 protected int a3=3; static public int a4=4; }
obj 是MyClass 的一个对象,则下列哪条语句是正确的【
A) obj.a1=2; C) MyClass.a1=2; 4.分析下列程序 class Class1 {
ushort u1;
public Class1(ushort u) {
this.u1=u; }
}
则以下哪条语句能够正确创建对象?【
A) Class1 c1=new Class1('u');
C) Class1 c1=new Class1(); 5. 分析下列程序 class Class1
B) Classi c1=new Class1("u"); D) Classi c1=new Class1(5.7);
第五章
D 】。
A 】。
B) obj.a4=2; D) MyClass.a4=2;
ushort u1;
public Class1(ushort u) {
this.u 仁u; }
}
则以下哪条语句能够正确创建对象?【
A) Class1 c 仁new Class1('u');
C) Class1 c 仁new Class1(); 6. 分析下列程序 public class People {
int age=8; public int Age
{
get { return age;} // 只读不可写
}
}
则调用下列语句,输出的是?【
People p=new People(); Co nsole.Write(p.Age++);
A) 8 C)编译错误
B) Classi c 仁new Class1("u"); D) Classi c 仁new Classi(5.7);
类的字段和方法的默认访问修饰符是【 A) public
B) private
下列关于构造函数的描述中, 【A 】是正确的。
A)构造函数名必须与类名相同 B)构造函数不可以重载 C)构造函数不能带参数
D)构造函数可以声明返回类型
10. C#中的TestClass 为一自定义类,其中有如下属性定义:
public void Property{ ........ }
使用以下语句创建了该类的对象,并让变量
obj 引用该对象。
TestClass obj=new TestClass();
那么,可通过【 B 】方式访问类 TestClass 的Property 属性。
A) MyClass. Property B) obj. Property C) TestClass. Property D)obj. Property() 11. 调用重载方法时,系统根据【 B 】来选择具体的方法。
A)方法名
B)参数的个数和类型 C)参数名及参数个数
D)方法的返回值类型
7. 要使一个类能被同一命名空间中的其他类访问,但不能被这个命名空间以外的类访问,
该类可以【A
不使用任何修饰符 使用private 修饰符 使用const 关键字
使用protected 修饰符
】。
A) B) C) D) A 】。
B) 9 D) 0
B 】。
C) protected
D) internal
9.
12•下列的【D】不是构造函数的特征。
A)构造函数的函数名与类名系统B)构造函数可以重载
C)构造函数可以带有参数D)可以指定构造函数的返回值类型13•类ClassA有一个名为M1的方法,在程序中有如下一段代码,假设该段代码是可以执行的,则声明M1方法时一定使用了【B】修饰符。
ClassA Aobj=n ew ClassA();
ClassA.M1();
A) public B) static C) private D) virtual 14•已知类B是由类A继承而来,类A中有一个名为M的非虚方法,现在希望在类B中也定义一个名为M的方法,且两方法的参数个数和类型完全相同,若希望编译时不出现警告信息,则在类B中声明该方法时,应使用【B】关键字。
A) static B) new C) override 15•下列关于类的定义,错误的是【D】。
A) class A B) class A
{ void f(){ } { void f(){}
} };
C) class A B) class A
{ private void f(){ return; } { f(){}
} }
16•在类A中试图重载构造函数,并使用构造函数创建对象:
class A
A)语句2和语句4
C)语句1、语句2和语句3
17•假设类B继承了类A,下列说法错误的是【
A)类B中的成员可以访问类
B)类B中的成员可以访问类
C)类B中的成员可以访问类
D)类B中的成员可以访问类
程序设计题
1设计和编码实现一个实用的计算器,具体要求如下: D) virtual
{ A(){ }
public void A(i nt x) { }
回值类型
public A(i nt x,i nt y) { } }
class program
{ static void Main( stri ng[] args)
{ A a=new A();
A b=new A(100,200);
}
}
其中,正确的语句包括【B】。
〃语句1
〃语句2 〃不可以指定构造函数的返
〃语句3
〃语句4
〃语句5
B)语句1、语句3和语句5
D)语句4和语句5
C】。
A中的公有成员A中的保护成员A中的私有成员A中的静态成员
(1) 界面设计整洁美观,参考界面如图1所示
(2) 点击数字按钮和操作符按钮能够在输入框正确显示信息
(3) 点击“=”按钮至少能够计算一个操作符的表达式
(4) 点击“清空”按钮能够将内容清空
(5) 点击“=”按钮能够计算两个操作符以上的表达式
(6) 能够正确显示标题,标题信息为“计算器”
图1计算器参考界面
2设计和实现一个登录界面(使用student.rar 中的数据库,参考界面如图2和图3所示),
具体要求如下:
1) 界面设计美观
2) 如果数据库不存在该用户,则提示用户不存在
3) 如果存在用户,则提示密码错误
4) 学号和密码正确,则提示登录成功
5 )能够关闭数据库
图2学生管理系统登录失败页面一
图3学生管理系统登录失败页面
3编写- 个长方形类Recta ngles
(1)成员数据:in t le ngth, int
width
(2)构造方法:Recta ngles(i nt, i
nt)
(3)成员方法:
1) 打印长方形面积printArea()
2) 打印长方形周长printPermeter()
(4)界面展示要求美观,能够显示周长和面积,参考界面如图4所示
图4面积计算示例图
4编写一个书本类Book,包含:
(1) 4个字段(每个字段的类型能够和实际生活对应):
书名(bookName、
作者名(authorName)、
书号(isbn)、
库存(stock);
(2) 每个字段拥有对应的读写属性
(3) 1个方法:
printinfo :用于输出书本的相关信息。
(5)界面展示要求美观,能够显示书本的相关信息,参考界面如图 5 所示
图 5 面积计算示例图。