《C#程序设计基础入门教程》课后习题答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《C#程序设计基础入门教程》习题答案
第1章C#开发入门
一、填空题
1、.dll、.exe
2、CLR
3、编译、运行
4、互操作性
5、Console.WriteLine()
二、选择题
1、C
2、B
3、C
4、A
5、D
三、问答题
1、它是一个全新的、集成的、面向对象的开发平台,它以公共语言运行时(Common Language Runtime,
简写CLR)为基础,支持多种编程语言。
2、.NET平台是一个环境,而C#只是一门语言,并不是它的一部分。
C#语言编写的程序可以在.NET
平台上运行。
四、编程题
1、参考答案
class Program
{
staticvoid Main(string[] args)
{
Console.WriteLine("这是我的第一个C#程序!");
Console.ReadKey();
}
}
第2章C#编程基础(上)
一、填空题
1、class
2、true和false
3、5
4、值数据类型、引用数据类型
5、1、4
6、& && | ||
7、0
8、单行注释、多行注释、文档注释
9、break
10、1000
二、判断题
1、错
2、错
3、错
4、对
5、错
三、选择题
1、AD
2、BCD
3、C
4、C
5、C 6 、A7、AC8、AC9、BD10、A
四、程序分析题
1、编译不通过。
int值4和b相加时,由于变量b的类型为byte,取值范围没有int类型大,存不下int
类型的值,因此编译不通过。
2、编译不通过。
这是因为y是在最里层的代码块中定义的一个变量,只有在那个代码块中才可使用,
在使用y = x;语句时已经超过了y变量的作用域,所以编译无法通过。
3、编译不通过。
因为switch语句中的每个分支语句之间需要使用break关键字隔开,如果没有break
语句就会报错。
4、打印结果为:
9
8
7
五、问答题
1、标识符可以由任意顺序的大小写字母、数字、下划线(_)和@符号组成,但标识符不能以数字开
头,且不能是C#中的关键字。
2、如果使用“&”在表达式之间进行连接,那么无论任何情况,“&”两边的表达式都会参与计算。
如果使用“&&”进行连接,当“&&”左边的表达式为false,则不会执行其右边的表达式。
例如定义int x = 2,y = 0; bool b = x < y & x / 2 > 0表达是会发生被0除异常,因为x / y的表达式执行了。
而bool b = x < y & x / 2 > 0是不会出现这种异常的,因为x < y为false,表达式x / y不会执行。
3、相同点:
1、二者都可以多次执行循环体。
2、二者都可以进行循环次数确定的循环操作。
不同点:
1、在循环次数不确定的情况下,一般会使用while循环。
2、在while循环中,条件表达式中的变量都会定义在while语句的外面,而在for循环中,
条件表达式中的变量都会定义在for语句中。
六、编程题
1、参考答案
public class Test01
{
public static void Main(string[] args)
{
int x = 5;
if (x % 2 != 0)
{
Console.WriteLine("x是一个奇数");
}
else
{
Console.WriteLine("x是一个偶数");
}
Console.ReadKey();
}
}
2、参考答案
public class Test02
{
public static void Main(string[] args)
{
int sum=0;
for (int i = 1; i <=99; i++)
{
if (i % 2 != 0)
{
sum += i;
}
}
Console.WriteLine("1-99之间的奇数和为:"+sum);
Console.ReadKey();
}
}
第3章C#编程基础(下)
一、填空题
1、void
2、方法名相同、方法签名不同
3、自身
4、params
5、逐语句、逐过程
6、帕斯卡命名规范
7、结束条件
8、9
9、断点
10、6
二、判断题
1、对
2、错
3、对
4、对
5、错
三、选择题
1、AC
2、BC
3、C
4、B
5、B6 、BD 7、C8、A9、AC10、A
四、程序分析题
1、编译不通过,Say()方法没有返回值。
2、编译不能通过,在给TestFunc()方法传参时必须加上ref。
3、编译不能通过,参数为out类型的方法,必须在方法内对参数赋值。
五、简答题
1、方法重载是指:允许在一个类中同名方法的存在,但是方法的参数列表必须不同。
实现重载的条
件是方法名必须相同,参数类型或个数必须不同。
当调用该方法时,根据参数的不同可以产生不同的结果。
2、ref参数是用于传递参数的引用,而不是参数的值。
out参数则用于将值从方法体内传到方法体。
ref参数必须在方法调用前赋值,out参数必须在方法内进行赋值。
3、逐语句调试会进入方法的内部调试,单步执行方法体的每一句带代码。
逐过程调试就是不会进入方法体内部,而是把方法当做一行代码来执行。
六、编程题
1、参考答案
class Program
{
public static void Main(string[] args)
{
int sum = Func(99);
Console.WriteLine("sum = " + sum);
Console.ReadKey();
}
public static int Func(int n)
{
int sum = n;
if (n < 1)
{
sum += 1;
}
else
{
sum += Func(n - 2);
}
return sum;
}
}
2、参考答案
class Program
{
public static void Main(string[] args)
{
int result=0;
Console.Write("请输入x的值:");
int input=int.Parse(Console.ReadLine());
result = Result(input);
Console.WriteLine("y的结果为:{0}",result);
Console.ReadKey();
}
public static int Result(int x)
{
if (x > 0)
{
return x + 3;
}
else if (x < 0)
{
return x * x - 1;
}
else
{
return 0;
}
}
}
3、参考答案
class Program
{
public static void Main(string[] args)
{
int[] arr = { 25, 24, 12, 76, 101, 96, 28 }; Console.Write("冒泡排序前:");
PrintArray(arr); //打印数组元素
BubbleSort(arr); //调用排序方法
Console.Write("冒泡排序后:");
PrintArray(arr); //打印数组元素
Console.ReadKey();
}
//定义打印数组的方法
public static void PrintArray(int[] arr)
{
//循环遍历数组的元素
for (int i = 0; i < arr.Length; i++)
{
Console.Write(arr[i] + " "); //打印元素和空格 }
Console.WriteLine();
}
//定义对数组排序的方法
public static void BubbleSort(int[] arr)
{
//定义外层循环
for (int i = 0; i < arr.Length - 1; i++)
{
//定义内层循环
for (int j = 0; j < arr.Length - i - 1; j++)
{
if (arr[j] > arr[j + 1]) //比较相邻元素
{
//下面的三行代码用于交换两个元素
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
}
第4章面向对象基础
一、填空题
1、封装、继承、多态
2、new
3、成员变量、局部变量
4、类
5、静态的
6、模板
7、静态方法类名.方法名
8、内部类
9、字段private
10、对象初始化器
二、判断题
1、对
2、对
3、错
4、对
5、错
三、选择题
1、B
2、D
3、B
4、ABC
5、ABCD
6、ACD
7、ABCD
8、ABCD
9、D 10、D
四、程序分析题
1、程序不能编译通过,因为在类A中的成员变量secret用private修饰,所以在类Test1中无法访问。
2、程序不能编译通过,因为在静态方法method()中不能访问非静态成员变量x。
3、程序能够编译通过,运行的结果为“inner”。
五、简答题
1、构造方法是类的一个特殊成员,它会在类实例化对象时被自动调用。
而普通方法只有在使用的时候才会被调用。
在定义构造方法时要求方法名与类名相同、在方法名的前面没有返回值类型的声明、在方法中不能使用return语句返回一个值。
2、面向对象的三大特性:封装、继承、多态。
封装是将对象的特性和行为封装起来,不需要外界只具
体的实现细节,使用时直接调用即可。
继承主要用来描述类与类之间的关系,通过继承可以复用已有的代码并在此基础上进行扩展。
多态是指同一操作用于不同对象,会产生不同的执行结果。
六、编程题
1、参考答案
class Student
{
private String name;
private double grade;
public Student()
{
}
public Student(String name, double grade) {
= name;
this.grade = grade;
}
public String getName()
{
return name;
}
public void setName(String name)
{
= name;
}
public double getGrade()
{
return grade;
}
public void setGrade(double grade)
{
this.grade = grade;
}
}
public class Test01
{
public static void main(String[] args)
{
Student stu1 = new Student();
stu1.setName("zhangsan");
stu1.setGrade(99);
Student stu2 = new Student("lisi", 100);
}
}
2、参考答案
c lass SingleExample
{
private static SingleExample instance;
private SingleExample(){} //无参构造方法
public static SingleExample Method()
{
if(instance==null)
{
Instance=new SingleExample();
}
}
}
第5章面向对象高级
一、填空题
1、继承
2、抽象方法、抽象类
3、using
4、派生类或子类
5、base
6、sealed
7、new
8、Object
9、try、catch
10、virtual、override
二、判断题
1、错
2、对
3、错
4、对
5、对
三、选择题
1、B
2、C
3、ABD
4、ABCD
5、C
6、AC
7、C
8、ACD
9、A 10、B
四、分析题
1、不能编译通过,由于Dog和Cat类没有继承关系。
无法将cat()隐式转换为Dog()类型。
2、不能编译通过,Dog类中的shout()方式是密封的,在BlackDog类中不能重写该方法。
3、程序能够编译通过。
4、编译不能通过,因为Dog类中没有实现Animal接口中的全部方法。
五、简答题
1、方法重写是:当子类继承父类中的方法时,父类方法的功能不能满足子类的需求,通过重写父类
的方法可以增加或修改相应的功能。
实现方法重写的条件是:要求子类的方法名、参数类型和参数个数必须与父类方法相同,而且父类方法必须使用virtual关键字修饰,子类方法必须使用override 关键字修
2、多态就是不属于同一个类的多个对象调用相同方法,产生的结果不同。
实现多态有三种方式:方
法,抽象类,接口。
3、抽象类使用abstract关键字,抽象类中可以有抽象方法,也可以有非抽象方法。
接口使用interface关键字,接口中所有的方法都是抽象方法。
六、编程题
1、参考答案
class Program
{
static void Main(string[] args)
{
Student student = new Student("小明",18);
Undergraduate degree = new Undergraduate("小刚",28,"学士");
student.Show();
degree.Show();
Console.ReadKey();
}
}
class Student
{
public string Name
{
get;
set;
}
public int Age
{
get;
set;
}
public Student(string name,int age)
{
= name;
this.Age = age;
}
public void Show()
{
Console.WriteLine("姓名:{0} 年龄:{1}",Name,Age);
}
}
class Undergraduate:Student
{
public string Degree
{
get;
set;
}
// 调用父类的构造方法
public Undergraduate(string name, int age, string degree):base(name,age) {
= name;
this.Age = age;
this.Degree = degree;
}
public new void Show()
{
Console.WriteLine("姓名:{0} 年龄:{1} 学位:{2}",Name,Age ,Degree);
}
}
2、参考答案
class Program
{
static void Main(string[] args)
{
Square square = new Square();
Circle circle = new Circle();
Console.WriteLine("正方形的面积为:{0}",square.Area(2));
Console.WriteLine("圆形的面积为: {0}",circle.Area(3));
Console.ReadKey();
}
}
//定义一个接口
interface Shape
{
double Area(double x); //定义一个实现计算面积的抽象方法
}
//实现接口Shape
class Square:Shape
{
//计算正方形的面积
public double Area(double x)
{
return x*x;
}
}
class Circle:Shape
{
//计算圆形的面积
public double Area(double x)
{
return Math.PI*x*x;
}
}
第6章W inForm基础
一、填空题
1、Form1[设计]、Form1.cs
2、SelectedItem
3、Run()
4、控制Tick事件触发的频率
5、Form1.Designer.cs
6、Form1.resx
7、Program.cs
8、Control
9、Load
10、ExpandAll()
二、判断题
1、对
2、对
3、对
4、对
5、对
三、选择题
1、D
2、D
3、B
4、C
5、A
6、A
7、D
8、B
9、B 10、A
四、程序分析题
一、
1、btnSecond.Visible=false;
2、btnSecond.Visible=true;
btnFirst.Visible=false;
3、btnSecond.Visible=false;
btnFirst.Visible=true;
二、
1、string[] musics = { "真的爱你", "无悔这一生" };
for (int i = 0; i < musics.Length; i++)
{
cmbShow.Items.Add(musics[i]);
}
2、cmbShow.SelectedIndex = 0;
3、!string.IsNullOrEmpty(txtName.Text)
4、cmbShow.Items.Add(txtName.Text);
5、cmbShow.SelectedIndex = cmbShow.Items.Count - 1;
6、txtName.Text = "";
7、MessageBox.Show("请输入歌曲的名字!");
五、简答题
1、WinForm项目的文件结构包括五个部分,分别是Properties、引用、App.config、Form1.cs、Program.cs,
其中Properties用来设置项目的属性,引用用来设置对其他项目命名空间的引用,App.config用来设置数据库的配置信息,Form1.cs文件用来设置窗体界面以及编写逻辑代码,Program.cs文件用来
设置项目运行时的主窗体。
2、属性:
1、Name属性在指示代码中用来标识该对象的名称。
2、Text属性用来表示与控件关联的文本。
3、Visible属性用来确定该控件时可见的还是隐藏的。
4、Enabled属性用来指示是否启用该控件
5、Tag属性表示与对象关联的用户定义数据。
事件:
1、Load事件在窗体加载时被触发。
2、Click事件在单击控件时发生。
3、MouseEnter事件在鼠标进入控件的可见部分时发生。
4、MouseLeave事件在鼠标离开控件的可见部分时发生。
5、FontChanged事件在控件的Font属性值更改时引发的事件。
六、编程题
1、运行效果图
弹出消息框显示“用户名或密码不能为空!”
弹出消息框显示“用户名或密码不正确!”
弹出消息框显示“登陆成功!”
参考逻辑代码
public partial class FormLogin : Form
{
public FormLogin()
{
InitializeComponent();
}
private void btnLogin_Click(object sender, EventArgs e)
{
string name = txtName.Text;
string password = txtPassword.Text;
if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(password)) {
MessageBox.Show("用户名或密码不能为空!");
}
else if (txtName.Text == "user" && txtPassword.Text == "itcast") {
MessageBox.Show("登陆成功!");
}
else
{
MessageBox.Show("用户名或者密码不正确!");
}
}
}
2、运行效果图
显示湖北省下的三个市
参考逻辑代码
public partial class FormCity : Form
{
public FormCity()
{
InitializeComponent();
}
private void Form5_Load(object sender, EventArgs e)
{
cmbProvince.Items.AddRange(new string[] { "河北省", "湖北省" });
cmbProvince.SelectedIndex = 0;
}
private void cmbProvince_SelectedIndexChanged(object sender, EventArgs e) {
cmbCity.Items.Clear();
if (cmbProvince.SelectedIndex == 0)
{
cmbCity.Tag = "0";
cmbCity.Items.AddRange(new string[] { "唐山市", "石家庄市", "邯郸市" });
cmbCity.SelectedIndex = 0;
}
if (cmbProvince.SelectedIndex == 1)
{
cmbCity.Tag = "1";
cmbCity.Items.AddRange(new string[] { "武汉市", "荆州市", "十堰市" });
cmbCity.SelectedIndex = 0;
}
}
}
第7章C#常用类
一、填空题
1、String类、StringBuilder类
2、字符
3、ToCharArray()
4、2
5、int
6、StringBuilder类创建的字符串的长度是可变的
7、TimeSpan()
8、Length
9、Now
10、Append()
二、判断题
1、错
2、对
3、错
4、对
5、错
三、选择题
1、D
2、C
3、A
4、B
5、B
6、B
7、C
8、A
9、B 10、C
四、分析题
1、编译不能通过,因为string对象的索引器为只读,不能对其赋值。
2、编译不能通过,因为方法IsNullOrEmpty()是String类的静态方法。
3、编译不能通过,无法将StringBuilder类型隐式转换为String类型。
五、简答题
1、相同点:都是用来处理字符串的类。
不同点:String具有不可变性,StringBuilder是可变的,当需要多次操作字符串是,StringBuilder 性能较高
2、例如string s=”abc”; s=s+”d”; 此时原有的abc字符串并没有改变,而是重写指向了abcd字符串。
六、编程题
1、参考答案
public static void Main(string[] args)
{
string str = "HelloWorld";
StringBuilder sb=new StringBuilder();
for (int i = 0; i < str.Length; i++)
{
//如果是小写字母
if (str[i] >= 'a' && str[i] <= 'z')
{
//将字符转换为字符串并使用ToUpper()转换为大写
sb.Append( str[i].ToString().ToUpper());
}
else
{
sb.Append( str[i].ToString().ToLower());
}
}
//输出动态字符串的内容
Console.WriteLine(sb.ToString());
Console.ReadKey();
}
2、参考答案
static void Main(string[] args)
{
char[] chineseWord = { '零', '一', '二', '三', '四', '五', '六', '七', '八', '九' };
string timeStr = "2014.01.01";
StringBuilder sb = new StringBuilder();
//将字符串分割成数组
string[] times = timeStr.Split(new char[]{'.'},
StringSplitOptions.RemoveEmptyEntries);
//遍历数组
for (int timesCount = 0; timesCount < times.Count(); timesCount++)
{
//获取当前循环到的字符串
string str=times[timesCount];
//拼接年部分转换后的字符串
if (timesCount == 0)
{
int index;
for (int strCount = 0; strCount < str.Length; strCount++) {
index = Convert.ToInt32(str[strCount].ToString());
sb.Append(chineseWord[index]);
}
sb.Append("年"); break;
}
else//月份或天转换后的字符串
{
sb.Append(JoinStr(str, chineseWord));
switch (timesCount)
{
case 1:sb.Append("月"); break;
case 2:sb.Append("日"); break;
}
}
}
Console.WriteLine(sb.ToString());
Console.ReadKey();
}
//用于拼接月或日转换后的字符串。
private static string JoinStr(string str, char[] chineseWord)
{
StringBuilder sb = new StringBuilder();
int index;
//循环月份或天的字符串
for (int strCount = 0; strCount < str.Length; strCount++)
{
//索引为0时表示月或天的第一位
if (strCount == 0)
{
//可取值0,1,2,3
switch (str[0])
{
case '0': ; break;
case '1': sb.Append("十"); break;
case '2': sb.Append("二十"); break;
case '3': sb.Append("三十"); break;
}
}
else
{
//将传递的字符串对应的索引位上的值转换成数字。
index = Convert.ToInt32(str[strCount].ToString());
//当月份的第二位为0时什么都不用做否则找到汉字数组中对应的汉字
if (index != 0)
{
sb.Append(chineseWord[index]);
}
}
}
return sb.ToString();
}
3、参考答案
public static void Main(string[] args)
{
string str = "一日,天气炎热。
两香蕉在路上散步,一香蕉抱怨道:“好热,好热啊。
”遂脱衣。
另一香蕉遂倒";
StringBuilder sb = new StringBuilder();
if (str.Contains("脱衣"))
{
int index = str.IndexOf("脱衣");
string str1 = str.Substring(0,index);
string str2 = str.Substring(index + 2);
sb.Append(str1);
sb.Append("**");
sb.Append(str2);
}
Console.WriteLine(sb.ToString());
Console.ReadKey();
}
第8章文件操作
一、填空题
1、输入流、输出流
2、Copy()
3、GetParent()
4、System.IO
5、Directory、DirectoryInfo
6、[Serializable]
7、GetFullPath()
8、序列化
9、FileMode
10、FileStream
二、判断题
1、错
2、对
3、对
4、错
5、错
三、选择题
1、A
2、C
3、ABD
4、C
5、C
6、AB
7、A
8、D
9、C 10、A
四、程序填空题
1、File.Exists(@"D:\1.txt")、@"D:\1.txt",@"D:\2.txt"、File.Copy、File.Delete
2、sr.ReadLine()、sw.Dispose()
五、简答题
1、流是对计算机输入输出设备之间数据传输的一种抽象,例如通过键盘输入数据、显示器显示程序
的运行结果等这些都是流。
2、StreamReader和StreamWriter类都是以用于处理文本文件的,只是StreamReader用于读取文件,
StreamWriter用于写入文件。
3、File类和FileInfo类都可以对文件进行创建、移动、查询和删除等操作,不同的是File类是一个静
态类,而FileInfo是一个实例类,它的所有方法必须通过实例化对象后才能调用。
六、编程题
1、参考答案
class Program
{
static void Main(string[] args)
{
string source = "source.txt";
string target = "target.txt";
//创建文件流
using (FileStream fsRead = new FileStream(source, FileMode.Open))
{
using (FileStream fsWrite = new FileStream(target, FileMode.Create)) {
//创建写入流
//缓冲区
byte[] bytes = new byte[1024];
//循环读取文件流
while (true)
{
int r = fsRead.Read(bytes, 0, bytes.Length);
if (r <= 0)
{
break;
}
//写入文件
fsWrite.Write(bytes, 0, bytes.Length);
}
}
}
Console.WriteLine("文件source的内容已写入文件target中");
Console.ReadKey();
}
2、参考答案
class Program
{
static void Main(string[] args)
{
//读取文件中的所有行
string[] strAllLines = File.ReadAllLines(@"D:\itcast\pwd.txt");
bool b = false;
//允许输入4次错误密码
for (int count = 1; count <= 5; count++)
{
Console.WriteLine("第{0}次输入用户名:",count);
string name = Console.ReadLine();
Console.WriteLine("第{0}次输入密码:",count);
string pwd = Console.ReadLine();
//循环遍历文件中存储的用户名和密码进行匹配
for (int line = 0; line < strAllLines.Length; line++)
{
//将文件中每一行中的用户名和密码分割开(用户名:密码)
string[] linstr = strAllLines[line].Split(new char[] { ':' },
StringSplitOptions.RemoveEmptyEntries);
//匹配成功调处当前内层循环
if (name == linstr[0] && pwd == linstr[1])
{
b = true;
break;
}
}
//登录成功跳出外层循环
if (b)
{
break;
}
else
{
if(count<5)
{
Console.WriteLine("第{0}次输入密码错误,请重新输入",count);
}
else
{
Console.WriteLine("密码输入错误,游戏结束");
}
}
}
第9章集合
一、填空题
1、集合
2、AddRange()
3、Clear()
4、ArrayList Hashtable
5、个数
6、Count
7、Sort()
8、键值
9、Add()
10、Max() Min()
二、判断题
1、错
2、对
3、对
4、错
5、对
三、选择题
1、D
2、B
3、BD
4、B
5、AD
6、BD
7、A
8、C
9、CD10、D
四、程序分析题
1、编译不通过。
泛型集合list在初始化时已经指定类型占位符T为string类型,也就是list集合只能
添加string类型的元素。
本题中,list集合加入了一个int类型的元素,所以编译不通过。
2、输出结果为:
1:张三
2:李四
3:王五
3、编译不通过。
集合hash是键值对类型集合,键值对集合没有Sort方法,所以编译不通过。
五、简答题
1、参考答案
相同点:
1、ArrayList集合与List<T>集合的元素长度可变
2、ArrayList集合与List<T>集合都实现了IEnumerable接口,可以使用foreach对二者进行
遍历。
不同点:
1、ArrayList可以存储任意多种类型元素。
List<T>集合只能存储任意一种类型元素。
2、List<T>集合有对其内部同类元素进行某种操作的方法,如Sum()方法可以对List<T>集合
内部元素进行求和。
Max()方法可以求得List<T>内部元素的最大值等。
而ArrayList集合
内部元素类型不能确定,所以没有上述方法。
2、参考答案
C#中提供了一系列特殊的类,这些类可以存储任意类型的对象,并且长度可变,统称为集合。
常用的类有List<T>、Dictionary<TKey,TValue>、ArrayList、Hashtable。
常用的接口有IEnumerable、ICollection。
3、参考答案
Hashtable集合的特点有:
1、Hashtable是以键值对的形式来存储元素。
2、Hashtable中的键和值都是object类型。
3、Hashtable中的键值对类型是DictionaryEntry类型。
六、编程题
1、参考答案
class Test1
{
static void Main(string[] args)
{
List<int> list = new List<int>();
list.AddRange(new int[]{1,3,5,2,4,6});
list.Sort();
for (int i = 0; i < list.Count; i++)
{
Console.Write(list[i]+"\t");
}
Console.ReadKey();
Console.WriteLine();
list.RemoveAt(4);
for (int i = 0; i < list.Count; i++)
{
Console.Write(list[i] + "\t");
}
Console.ReadKey();
}
}
2、参考答案
class Test2
{
static void Main(string[] args)
{
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("第一名", "真的爱你");
dic.Add("第二名", "海阔天空");
dic.Add("第三名", "光辉岁月");
dic.Add("第四名", "喜欢你");
dic.Add("第五名", "不再犹豫");
foreach (string key in dic.Keys)
{
Console.WriteLine(key+":"+dic[key]); }
Console.ReadKey();
}
}。