《C#程序设计基础入门教程》课后习题答案_第1页
《C#程序设计基础入门教程》课后习题答案_第2页
《C#程序设计基础入门教程》课后习题答案_第3页
《C#程序设计基础入门教程》课后习题答案_第4页
《C#程序设计基础入门教程》课后习题答案_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《C#程序设计基础入门教程》习题答案C#开发入门一、填空题.dll、.exeCLR编译、运行互操作性Console.WriteLine()二、选择题C 2、B 3、C 4、A 5、D三、问答题它是一个全新的、集成的、面向对象的开发平台,它以公共语言运行时(CommonLanguageRuntime,简写CLR)为基础,支持多种编程语言。.NET平台是一个环境,而C#只是一门语言,并不是它的一部分。C#语言编写的程序可以在.NET平台上运行。四、编程题1、参考答案classProgram{staticvoidMain(string[]args){Console.WriteLine("这是我的第一个C#程序!");Console.ReadKey();}}C#编程基础(上)一、填空题classtrue和false5值数据类型、引用数据类型1、4&&&|||0单行注释、多行注释、文档注释break1000二、判断题错 2、错 3、错 4、对 5、错三、选择题AD 2、BCD 3、C 4、C 5、C 6、A 7、AC 8、AC 9、BD 10、A四、程序分析题编译不通过。int值4和b相加时,由于变量b的类型为byte,取值范围没有int类型大,存不下int类型的值,因此编译不通过。编译不通过。这是因为y是在最里层的代码块中定义的一个变量,只有在那个代码块中才可使用,在使用y=x;语句时已经超过了y变量的作用域,所以编译无法通过。编译不通过。因为switch语句中的每个分支语句之间需要使用break关键字隔开,如果没有break语句就会报错。打印结果为: 9 8 7五、问答题1、标识符可以由任意顺序的大小写字母、数字、下划线(_)和@符号组成,但标识符不能以数字开头,且不能是C#中的关键字。2、如果使用“&”在表达式之间进行连接,那么无论任何情况,“&”两边的表达式都会参与计算。如果使用“&&”进行连接,当“&&”左边的表达式为false,则不会执行其右边的表达式。例如定义intx=2,y=0;boolb=x<y&x/2>0表达是会发生被0除异常,因为x/y的表达式执行了。而boolb=x<y&x/2>0是不会出现这种异常的,因为x<y为false,表达式x/y不会执行。3、相同点: 1、二者都可以多次执行循环体。 2、二者都可以进行循环次数确定的循环操作。 不同点:在循环次数不确定的情况下,一般会使用while循环。在while循环中,条件表达式中的变量都会定义在while语句的外面,而在for循环中,条件表达式中的变量都会定义在for语句中。六、编程题1、参考答案publicclassTest01{publicstaticvoidMain(string[]args){intx=5;if(x%2!=0){Console.WriteLine("x是一个奇数");}else{Console.WriteLine("x是一个偶数");}Console.ReadKey();}}2、参考答案publicclassTest02{publicstaticvoidMain(string[]args){intsum=0;for(inti=1;i<=99;i++){if(i%2!=0){sum+=i;}}Console.WriteLine("1-99之间的奇数和为:"+sum);Console.ReadKey();}}C#编程基础(下)一、填空题void方法名相同、方法签名不同自身params逐语句、逐过程帕斯卡命名规范结束条件9断点6二、判断题对2、错3、对4、对5、错三、选择题AC2、BC3、C4、B5、B6、BD7、C8、A9、AC10、A四、程序分析题编译不通过,Say()方法没有返回值。编译不能通过,在给TestFunc()方法传参时必须加上ref。编译不能通过,参数为out类型的方法,必须在方法内对参数赋值。五、简答题1、方法重载是指:允许在一个类中同名方法的存在,但是方法的参数列表必须不同。实现重载的条件是方法名必须相同,参数类型或个数必须不同。当调用该方法时,根据参数的不同可以产生不同的结果。2、ref参数是用于传递参数的引用,而不是参数的值。out参数则用于将值从方法体内传到方法体。ref参数必须在方法调用前赋值,out参数必须在方法内进行赋值。3、逐语句调试会进入方法的内部调试,单步执行方法体的每一句带代码。逐过程调试就是不会进入方法体内部,而是把方法当做一行代码来执行。六、编程题1、参考答案classProgram{publicstaticvoidMain(string[]args){intsum=Func(99);Console.WriteLine("sum="+sum);Console.ReadKey();}publicstaticintFunc(intn){intsum=n;if(n<1){sum+=1;}else{sum+=Func(n-2);}returnsum;}}2、参考答案classProgram{publicstaticvoidMain(string[]args){intresult=0;Console.Write("请输入x的值:");intinput=int.Parse(Console.ReadLine());result=Result(input);Console.WriteLine("y的结果为:{0}",result);Console.ReadKey();}publicstaticintResult(intx){if(x>0){returnx+3;}elseif(x<0){returnx*x-1;}else{return0;}}}3、参考答案classProgram{publicstaticvoidMain(string[]args){int[]arr={25,24,12,76,101,96,28};Console.Write("冒泡排序前:");PrintArray(arr);//打印数组元素BubbleSort(arr);//调用排序方法Console.Write("冒泡排序后:");PrintArray(arr);//打印数组元素Console.ReadKey();}//定义打印数组的方法publicstaticvoidPrintArray(int[]arr){//循环遍历数组的元素for(inti=0;i<arr.Length;i++){Console.Write(arr[i]+"");//打印元素和空格}Console.WriteLine();}//定义对数组排序的方法publicstaticvoidBubbleSort(int[]arr){//定义外层循环for(inti=0;i<arr.Length-1;i++){//定义内层循环for(intj=0;j<arr.Length-i-1;j++){if(arr[j]>arr[j+1])//比较相邻元素{//下面的三行代码用于交换两个元素inttemp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}}}面向对象基础一、填空题1、封装、继承、多态2、new3、成员变量、局部变量4、类5、静态的6、模板7、静态方法类名.方法名8、内部类9、字段private10、对象初始化器二、判断题1、对2、对3、错4、对5、错三、选择题1、B2、D3、B4、ABC5、ABCD6、ACD7、ABCD8、ABCD9、D10、D四、程序分析题1、程序不能编译通过,因为在类A中的成员变量secret用private修饰,所以在类Test1中无法访问。2、程序不能编译通过,因为在静态方法method()中不能访问非静态成员变量x。3、程序能够编译通过,运行的结果为“inner”。五、简答题1、构造方法是类的一个特殊成员,它会在类实例化对象时被自动调用。而普通方法只有在使用的时候才会被调用。在定义构造方法时要求方法名与类名相同、在方法名的前面没有返回值类型的声明、在方法中不能使用return语句返回一个值。2、面向对象的三大特性:封装、继承、多态。封装是将对象的特性和行为封装起来,不需要外界只具体的实现细节,使用时直接调用即可。继承主要用来描述类与类之间的关系,通过继承可以复用已有的代码并在此基础上进行扩展。多态是指同一操作用于不同对象,会产生不同的执行结果。六、编程题1、参考答案classStudent{ privateStringname; privatedoublegrade; publicStudent(){ } publicStudent(Stringname,doublegrade){ =name; this.grade=grade; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ =name; } publicdoublegetGrade(){ returngrade; } publicvoidsetGrade(doublegrade){ this.grade=grade; }}publicclassTest01{ publicstaticvoidmain(String[]args){ Studentstu1=newStudent(); stu1.setName("zhangsan"); stu1.setGrade(99); Studentstu2=newStudent("lisi",100); }}2、参考答案classSingleExample{ privatestaticSingleExampleinstance; privateSingleExample(){}//无参构造方法publicstaticSingleExampleMethod(){if(instance==null){Instance=newSingleExample(); } }}面向对象高级一、填空题1、继承2、抽象方法、抽象类3、using4、派生类或子类5、base6、sealed7、new8、Object9、try、catch10、virtual、override二、判断题1、错2、对3、错4、对5、对三、选择题1、B2、C3、ABD4、ABCD5、C6、AC7、C8、ACD9、A10、B四、分析题1、不能编译通过,由于Dog和Cat类没有继承关系。无法将cat()隐式转换为Dog()类型。2、不能编译通过,Dog类中的shout()方式是密封的,在BlackDog类中不能重写该方法。3、程序能够编译通过。4、编译不能通过,因为Dog类中没有实现Animal接口中的全部方法。五、简答题1、方法重写是:当子类继承父类中的方法时,父类方法的功能不能满足子类的需求,通过重写父类的方法可以增加或修改相应的功能。实现方法重写的条件是:要求子类的方法名、参数类型和参数个数必须与父类方法相同,而且父类方法必须使用virtual关键字修饰,子类方法必须使用override关键字修2、多态就是不属于同一个类的多个对象调用相同方法,产生的结果不同。实现多态有三种方式:方法,抽象类,接口。3、抽象类使用abstract关键字,抽象类中可以有抽象方法,也可以有非抽象方法。接口使用interface关键字,接口中所有的方法都是抽象方法。六、编程题1、参考答案classProgram{staticvoidMain(string[]args){Studentstudent=newStudent("小明",18);Undergraduatedegree=newUndergraduate("小刚",28,"学士");student.Show();degree.Show();Console.ReadKey();}}classStudent{publicstringName{get;set;}publicintAge{get;set;}publicStudent(stringname,intage){this.Name=name;this.Age=age;}publicvoidShow(){Console.WriteLine("姓名:{0}年龄:{1}",Name,Age);}}classUndergraduate:Student{publicstringDegree{get;set;}//调用父类的构造方法publicUndergraduate(stringname,intage,stringdegree):base(name,age){this.Name=name;this.Age=age;this.Degree=degree;}publicnewvoidShow(){Console.WriteLine("姓名:{0}年龄:{1}学位:{2}",Name,Age,Degree);}}2、参考答案classProgram{staticvoidMain(string[]args){Squaresquare=newSquare();Circlecircle=newCircle();Console.WriteLine("正方形的面积为:{0}",square.Area(2));Console.WriteLine("圆形的面积为:{0}",circle.Area(3));Console.ReadKey();}}//定义一个接口interfaceShape{doubleArea(doublex);//定义一个实现计算面积的抽象方法}//实现接口ShapeclassSquare:Shape{//计算正方形的面积publicdoubleArea(doublex){returnx*x;}}classCircle:Shape{//计算圆形的面积publicdoubleArea(doublex){returnMath.PI*x*x;}}WinForm基础一、填空题Form1[设计]、Form1.csSelectedItemRun()控制Tick事件触发的频率Form1.Designer.csForm1.resxProgram.csControlLoad10、ExpandAll()二、判断题1、对2、对3、对4、对5、对三、选择题1、D2、D3、B4、C5、A6、A7、D8、B9、B10、A四、程序分析题 一、1、btnSecond.Visible=false;2、btnSecond.Visible=true;btnFirst.Visible=false;3、btnSecond.Visible=false;btnFirst.Visible=true; 二、 1、string[]musics={"真的爱你","无悔这一生"};for(inti=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属性表示与对象关联的用户定义数据。 事件:Load事件在窗体加载时被触发。Click事件在单击控件时发生。MouseEnter事件在鼠标进入控件的可见部分时发生。MouseLeave事件在鼠标离开控件的可见部分时发生。FontChanged事件在控件的Font属性值更改时引发的事件。六、编程题运行效果图弹出消息框显示“用户名或密码不能为空!”弹出消息框显示“用户名或密码不正确!”弹出消息框显示“登陆成功!”参考逻辑代码publicpartialclassFormLogin:Form{publicFormLogin(){InitializeComponent();}privatevoidbtnLogin_Click(objectsender,EventArgse){stringname=txtName.Text;stringpassword=txtPassword.Text;if(string.IsNullOrEmpty(name)||string.IsNullOrEmpty(password)){MessageBox.Show("用户名或密码不能为空!");}elseif(txtName.Text=="user"&&txtPassword.Text=="itcast"){MessageBox.Show("登陆成功!");}else{MessageBox.Show("用户名或者密码不正确!");}}}运行效果图显示湖北省下的三个市参考逻辑代码publicpartialclassFormCity:Form{publicFormCity(){InitializeComponent();}privatevoidForm5_Load(objectsender,EventArgse){cmbProvince.Items.AddRange(newstring[]{"河北省","湖北省"});cmbProvince.SelectedIndex=0;}privatevoidcmbProvince_SelectedIndexChanged(objectsender,EventArgse){cmbCity.Items.Clear();if(cmbProvince.SelectedIndex==0){cmbCity.Tag="0";cmbCity.Items.AddRange(newstring[]{"唐山市","石家庄市","邯郸市"});cmbCity.SelectedIndex=0;}if(cmbProvince.SelectedIndex==1){cmbCity.Tag="1";cmbCity.Items.AddRange(newstring[]{"武汉市","荆州市","十堰市"});cmbCity.SelectedIndex=0;}}}C#常用类一、填空题1、String类、StringBuilder类2、字符3、ToCharArray()4、25、int6、StringBuilder类创建的字符串的长度是可变的7、TimeSpan()8、Length9、Now10、Append()二、判断题1、错2、对3、错4、对5、错三、选择题1、D2、C3、A4、B5、B6、B7、C8、A9、B10、C四、分析题1、编译不能通过,因为string对象的索引器为只读,不能对其赋值。2、编译不能通过,因为方法IsNullOrEmpty()是String类的静态方法。3、编译不能通过,无法将StringBuilder类型隐式转换为String类型。五、简答题1、相同点:都是用来处理字符串的类。不同点:String具有不可变性,StringBuilder是可变的,当需要多次操作字符串是,StringBuilder性能较高2、例如strings=”abc”;s=s+”d”;此时原有的abc字符串并没有改变,而是重写指向了abcd字符串。六、编程题1、参考答案publicstaticvoidMain(string[]args){stringstr="HelloWorld";StringBuildersb=newStringBuilder();for(inti=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();}参考答案staticvoidMain(string[]args){char[]chineseWord={'零','一','二','三','四','五','六','七','八','九'};stringtimeStr="2014.01.01";StringBuildersb=newStringBuilder();//将字符串分割成数组string[]times=timeStr.Split(newchar[]{'.'},StringSplitOptions.RemoveEmptyEntries);//遍历数组for(inttimesCount=0;timesCount<times.Count();timesCount++){//获取当前循环到的字符串stringstr=times[timesCount];//拼接年部分转换后的字符串if(timesCount==0){intindex;for(intstrCount=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){case1:sb.Append("月");break;case2:sb.Append("日");break;}}}Console.WriteLine(sb.ToString());Console.ReadKey();}//用于拼接月或日转换后的字符串。privatestaticstringJoinStr(stringstr,char[]chineseWord){StringBuildersb=newStringBuilder();intindex;//循环月份或天的字符串for(intstrCount=0;strCount<str.Length;strCount++){//索引为0时表示月或天的第一位if(strCount==0){//可取值0,1,2,3switch(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]);}}}returnsb.ToString();}3、参考答案publicstaticvoidMain(string[]args){stringstr="一日,天气炎热。两香蕉在路上散步,一香蕉抱怨道:“好热,好热啊。”遂脱衣。另一香蕉遂倒";StringBuildersb=newStringBuilder();if(str.Contains("脱衣")){intindex=str.IndexOf("脱衣");stringstr1=str.Substring(0,index);stringstr2=str.Substring(index+2);sb.Append(str1);sb.Append("**");sb.Append(str2);}Console.WriteLine(sb.ToString());Console.ReadKey();}文件操作一、填空题1、输入流、输出流2、Copy()3、GetParent()4、System.IO5、Directory、DirectoryInfo6、[Serializable]7、GetFullPath()8、序列化9、FileMode10、FileStream二、判断题1、错2、对3、对4、错5、错三、选择题1、A2、C3、ABD4、C5、C6、AB7、A8、D9、C10、A四、程序填空题1、File.Exists(@"D:\1.txt")、@"D:\1.txt",@"D:\2.txt"、File.Copy、File.Delete2、sr.ReadLine()、sw.Dispose()五、简答题1、流是对计算机输入输出设备之间数据传输的一种抽象,例如通过键盘输入数据、显示器显示程序的运行结果等这些都是流。2、StreamReader和StreamWriter类都是以用于处理文本文件的,只是StreamReader用于读取文件,StreamWriter用于写入文件。3、File类和FileInfo类都可以对文件进行创建、移动、查询和删除等操作,不同的是File类是一个静态类,而FileInfo是一个实例类,它的所有方法必须通过实例化对象后才能调用。六、编程题1、参考答案classProgram{staticvoidMain(string[]args){stringsource="source.txt";stringtarget="target.txt";//创建文件流using(FileStreamfsRead=newFileStream(source,FileMode.Open)){using(FileStreamfsWrite=newFileStream(target,FileMode.Create)){//创建写入流//缓冲区byte[]bytes=newbyte[1024];//循环读取文件流while(true){intr=fsRead.Read(bytes,0,bytes.Length);if(r<=0){break;}//写入文件fsWrite.Write(bytes,0,bytes.Length);}}}Console.WriteLine("文件source的内容已写入文件target中");Console.ReadKey();}参考答案classProgram{staticvoidMain(string[]args){//读取文件中的所有行string[]strAllLines=File.ReadAllLines(@"D:\itcast\pwd.txt");boolb=false;//允许输入4次错误密码for(intcount=1;count<=5;count++){Console.WriteLine("第{0}次输入用户名:",count);stringname=Console.ReadLine();Console.WriteLine("第{0}次输入密码:",count);stringpwd=Console.ReadLine();//循环遍历文件中存储的用户名和密码进行匹配for(intline=0;line<strAllLines.Length;line++){//将文件中每一行中的用户名和密码分割开(用户名:密码)string[]linstr=strAllLines[line].Split(newchar[]{':'},StringSplitOptions.RemoveEmptyEntries);//匹配成功调处当前内层循环if(name==linstr[0]&&pwd==linstr[1]){b=true;break;}}//登录成功跳出外层循环if(b){break;}else{if(count<5){Console.WriteLine("第{0}次输入密码错误,请重新输入",count);}else{

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论