C程序设计及应用教程第2版习题答案_第1页
C程序设计及应用教程第2版习题答案_第2页
C程序设计及应用教程第2版习题答案_第3页
C程序设计及应用教程第2版习题答案_第4页
C程序设计及应用教程第2版习题答案_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、网络应用编程作业及答案课 程 名 称网络应用编程院(部)计算机与信息工程学院教研室(实验室)网络工程教研室主 讲 教 师侯彦娥职 称 讲师使 用 教 材21世纪高等学校计算机规划教材(精品系列)c#程序设计及应用教程(第2版),马骏等主编,人民邮电出版社第1章 作业及答案本章作业题目:p16页 1、2、31、可以用c#编写哪些类型的应用程序?【解答】1)控制台应用程序。2) windows应用程序。3) asp.net web应用程序。4) asp.net web服务应用程序。5) asp.net 水晶报表web应用程序。6)智能设备应用程序。7)安装和部署应用程序。2、什么是命名空间?命名空

2、间和类库的关系是什么?【解答】1)命名空间是对类的一种逻辑上的分组,即将类按照某种关系或联系划分到不同的命名空间下。2)命名空间又可以包含其它的命名空间,例如system.windows.forms,是指system命名空间下有windows命名空间,windows命名空间下有forms命名空间。3)所有类库都在规定的命名空间下。3、举例说明using关键字有哪些主要用途。【解答】在c#中,using关键字有3个用途1)指定引用的命名空间,例如:using system.windows.forms;2)简化命名空间的层次表达形式,例如:using winform=system.windows.

3、form;3)作为语句,定义一个范围。例如:font font1 = new font("arial", 10.0f);using (font1) 程序执行到“”时,就会自动释放font1对象。第2章 作业及答案本章作业题目:p41 2、3、4、5、7 容易做错的题目:5题(有部分同学看成求平方和了)1、c#支持的数据类型有那些?值类型和引用类型有何不同?【解答】 c#支持的数据类型有: (1)值类型,包括:简单类型、结构类型、枚举类型。其中,简单类型又分为:整型、布尔型、字符型、浮点型、小数型。 (2)引用类型,包括:对象类型、类类型、接口、元数据、字符串类型、数组。 值

4、类型和引用类型的区别在于,值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。当把一个值变量赋给另一个值变量时,会在堆栈(stack)中保存两个完全相同的值;而把一个引用变量赋给另一个引用变量,则会在堆栈中保存对同一个堆(heap)位置的两个引用。进行数据操作时,对于值类型,由于每个变量都有自己的值,因此对一个变量的操作不会影响到其他变量;对于引用类型的变量,对一个变量的数据进行操作就是对这个变量在堆中的数据进行操作,如果两个引用类型的变量引用同一个对象,实际含义就是它们在堆栈中保存的堆的地址相同,因此对一个变量的操作就会影响到引用同一个对象的另一个变量。2、c

5、#中不同整型之间进行转换的原则是什么?【解答】 在整型之间进行转换时,小范围类型可以隐式转换为大范围类型,但大范围类型转换为小范围类型时需要使用显式转换。3、简述装箱和拆箱的过程。【解答】 装箱是将值类型隐式地转换为object类型或者转换为由该值类型实现了的接口类型。装箱一个数值会为其分配一个对象实例,并把该数值拷贝到新对象中。拆箱是显式地把object类型转换成值类型,或者把值类型实现了的接口类型转换成该值类型。4、分别写出下列语句执行的结果。1) console.writeline("0-0:pgood",12.34f);2) console.writeline(&q

6、uot;0-0:#good",0);3) console.writeline("0-0:00000good",456);【解答】12.34-1,234.00%good0-good456-00456good5、编写一个控制台应用程序,输出1到5的平方值,要求: 1) 用for语句实现。 2) 用while语句实现。 3) 用do-while语句实现。【解答】using system;using system.collections.generic;using system.text;namespace outputsquarevalue class program

7、static void main() /用for语句实现 for (int i = 1; i <= 5; i+) console.writeline("0的平方值为1", i, i * i); /用while语句实现 int j = 0; while (j+ < 5) console.writeline("0的平方值为1", j, j * j); /用do-while语句实现 int k = 1; do console.writeline("0的平方值为1", k, k * k); while (k+ < 5); c

8、onsole.readline(); 6、编写一个控制台应用程序,要求用户输入5个大写字母,如果用户输入的信息不满足要求,提示帮助信息并要求重新输入。【解答】using system;using system.collections.generic;using system.text;namespace inputcapitalletter class program static void main() bool ok = false; while (ok = false) console.write("请输入5个大写字母:"); string str = console

9、.readline(); if (str.length != 5) console.writeline("你输入的字符个数不是5个,请重新输入。"); else ok = true; for (int i = 0; i < 5; i+) char c = stri; if (c < 'a' | c > 'z') console.writeline("第0个字符“1”不是大写字母,请重新输入。", i + 1, c); ok = false; break; 7、编写一个控制台应用程序,要求完成下列功能。 1

10、) 接收一个整数n。 2) 如果接收的值n为正数,输出1到n间的全部整数。 3) 如果接收的值为负值,用break或者return退出程序。 4) 转到(1)继续接收下一个整数。【解答】using system;using system.collections.generic;using system.text;namespace testoutput class program static void main() while (true) console.write("请输入一个整数(负值结束):"); string str = console.readline();

11、try int i = int32.parse(str); if (i < 0) break; for (int j = 1; j <= i; j+) console.writeline(j); catch console.writeline("你输入的不是数字或超出整数的表示范围,请重新输入"); 8、编写一个控制台应用程序,求1000之内的所有“完数”。所谓“完数”是指一个数恰好等于它的所有因子之和。例如,6是完数,因为6=1+2+3。【解答】using system;using system.collections.generic;using system

12、.text;namespace completenumber class program static void main(string args) for (int i = 2; i <= 1000; i+) int s = 1; string str = "1" for (int j = 2; j <= (int)math.sqrt(i); j+) if (j * (i / j) = i) if (j != i / j) s += j + i / j; str += string.format("+0+1", j, i / j); els

13、e s += j; str += string.format("+0", j); if (s = i) console.writeline("0=1", i, str); console.readline(); 9、错误和异常有什么区别,为什么要进行异常处理,用于异常处理的语句有哪些?【解答】 错误是指在执行代码过程中发生的事件,它中断或干扰代码的正常流程并创建异常对象。当错误中断流程时,该程序将尝试寻找异常处理程序(一段告诉程序如何对错误做出响应的代码),以帮助程序恢复流程。换句话说,错误是一个事件,而异常是该事件创建的对象。 当使用短语“产生异常”时

14、,表示存在问题的方法发生错误,并创建异常对象(包含该错误的信息及发生的时间和位置)来响应该错误。导致出现错误和随后异常的因素包括用户错误、资源失败和编程逻辑失败。这些错误与代码实现特定任务的方法有关,而与该任务的目的无关。 如果不进行异常处理,即不对错误做出响应,程序的健壮性就会大打折扣,甚至无法保证正常运行,所以必须要进行异常处理。 用于异常处理的语句有:try-catch语句、try-catch-finally语句、throw语句。第3章 作业及答案本章作业题目: p64 1、2、41、c#语言中的数组类型有何特点?【解答】1)数组一般用于存储同一种类型的数据,包括object类型。2)数

15、组是一种引用类型,而不是值类型。3)c#中除了可以有一维数组、多维数组外,还有交错型数组。2、泛型和非泛型的主要区别是什么?为什么说使用泛型比使用对应的非泛型效率高?【解答】泛型是数据类型的一种通用表示形式,它可以表示任何一种数据类型。泛型(generic)是具有占位符(类型参数)的类、结构、接口和方法,它与普通类的区别是泛型多了一个或多个表示类型的占位符,这些占位符用尖括号括起来。占位符表示某种类型,这种类型在创建泛型类的实例时才用实际类型来替换。定义一个类或者方法时,可以用泛型占位符代表任何一种类型,而在引用时再指定具体类型。当代码调用泛型类或方法时,c#编译器会自动将定义的泛型转换为引用

16、代码中指定的类型,从而大大简化了程序员编写代码的复杂度。另外,由于占位符可以代表任何一种类型,因此在方法中只定义一次类型就能实现所有类型的引用。3、编写一个控制台应用程序,计算要求精度为108。【解答】using system;class test3 public static void main() int n = 50; double x = 3; double s = 0; double a = 1; for (int i = 1; i <= n; i+) a *= i; s += math.pow(-1, i + 1) * math.pow(x, i) / a; console.

17、writeline("n=0,s=1:0.00000000", n, s); 4、编写一个控制台应用程序,接收一个长度大于3的字符串,完成下列功能。(1)输出字符串的长度。(2)输出字符串中第一个出现字母a的位置。(3)在字符串的第3个字符后面插入子串“hello”,输出新字符串。(4)将字符串“hello”替换为“me”,输出新字符串。(5)以字符“m”为分隔符,将字符串分离,并输出分离后的字符串。【解答】【解答】using system;class test4 public static void main() string str = "" whi

18、le (str.length <= 3) console.write("请输入一个长度大于3的字符串:"); str = console.readline(); /(1) console.writeline("字符串的长度为:0", str.length); /(2) int i = str.indexof('a'); if (i > -1) console.writeline("第一个出现字母a的位置是:0", i); else console.writeline("字符串中不包含字母a。&qu

19、ot;); /(3) string str1 = str.insert(3, "hello"); /在第3个(初始序号为)字符前插入hello console.writeline("插入hello后的结果为:0", str1); /(4) string str2 = str1.replace("hello", "me"); console.writeline("将hello替换为me后的结果为:0", str2); /(5) string arr = str2.split('m'

20、); console.writeline("以m为分隔符分离后的字符串有:"); for (int j = 0; j < arr.length; j+) console.writeline(arrj); 第4章 作业及答案本章作业题目:p79 1、2、41、编写一个控制台应用程序,完成下列功能。(1)创建一个类,用无参数的构造函数输出该类的类名。(2)增加一个重载的构造函数,带有一个string类型的参数,在此构造函数中将传递的字符串打印出来。(3)在main方法中创建属于这个类的一个对象,不传递参数。(4)在main方法中创建属于这个类的另一个对象,传递一个字符串“

21、this is a string.”。(5)在main方法中声明类型为这个类的一个具有5个对象的数组,但不要实际创建分配到数组里的对象。(6)写出运行程序应该输出的结果。【解答】using system;class test1 public test1() console.writeline(this); public test1(string str) console.writeline(str); public static void main() test1 t1 = new test1(); test1 t2 = new test1("this is a string.&qu

22、ot;); test1 t3 = new test15; 输出结果:test1this is a string.2、编写一个控制台应用程序,定义一个类myclass,类中包含有public、private以及protected数据成员及方法。然后定义一个从myclass类继承的类mymain,将main方法放在mymain中,在main方法中创建myclass类的一个对象,并分别访问类中的数据成员及方法。要求注明在试图访问所有类成员时哪些语句会产生编译错误。【解答】using system;class myclass public int i; private int j; protected

23、 int k; public void method1() console.writeline("public method."); private void method2() console.writeline("private method."); protected void method3() console.writeline("protected method."); class mymain : myclass public static void main() myclass t = new myclass(); c

24、onsole.writeline("i=0", t.i); console.writeline("j=0", t.j);/会出现编译错误,私有成员不允许在其它类中访问 console.writeline("k=0", t.k);/会出现编译错误,应该创建mymain的对象,然 /后通过mymain的对象访问 t.method1(); t.method2(); /会出现编译错误,私有的方法不允许在其它类中调用 t.method3(); /会出现编译错误,应该创建mymain的对象,然后通过mymain的 /对象调用该方法 3、创建一个类

25、包含有protected数据。在相同的文件里创建第二个类,用一个方法操纵第一个类里的protected数据。【解答】using system;class class1 protected int i = 5; protected void mymethod() console.writeline("protected method."); class class2 : class1 private void newmethod() console.writeline(this.i); this.i += 10; console.writeline(this.i); publ

26、ic static void main() class2 t = new class2(); t.newmethod(); 4、结构和类的区别是什么?【解答】1)结构是一个值类型,保存在栈上,而类是一个引用类型,保存在受管制的堆上。2)对结构中的数据进行操作比对类或对象中的数据进行操作速度要快。3)一般用结构存储多种类型的数据,当创建一个很多类或对象共用的小型对象时,使用结构效率更高。第5章 作业及答案本章作业题目: p101 1、3、41、简要回答下列问题。(1)举例说明new关键字可用于哪些方面?(2)sealed关键字的作用是什么?什么情况下需要使用sealed关键字?(3)哪些关键字可

27、以用于版本控制?【解答】1)在c#中,new关键字可用作运算符或修饰符。作为运算符用于在堆上创建对象和调用构造函数。作为修饰符用于隐藏基类成员的继承成员。2) 在类声明中使用sealed修饰符可防止其它类继承此类。在方法声明中使用sealed修饰符可防止扩充类重写此方法。sealed修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。具体说来,由于密封类永远不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。3) override关键字和new关键字均可用于版本控制。在c#中,默认情况下方法不是虚拟的。若要使方法成为虚拟方法,必须在基类的方法声明中使用

28、virtual修饰符。然后,派生类可以使用override关键字重写基类中的虚拟方法,或使用new关键字隐藏基类中的虚拟方法。如果override关键字和new关键字均未指定,编译器将发出警告,并且派生类中的方法将隐藏基类中的方法。2、简要回答抽象类和接口的主要区别。【解答】抽象类和接口的一个主要差别是:类可以实现多个接口,但仅能从一个抽象类或任何其它类型的类继承。3、编写一个控制台应用程序,完成下列功能,并回答提出的问题。(1)创建一个类a,在构造函数中输出“a”,再创建一个类b,在构造函数中输出“b”。(2)从a继承一个名为c的新类,并在c内创建一个成员b。不要为c创建构造函数。(3)在m

29、ain方法中创建类c的一个对象,写出运行程序后输出的结果。(4)如果在c中也创建一个构造函数输出“c”,整个程序运行的结果又是什么?【解答】using system;public class a public a() console.writeline("a"); public class b public b() console.writeline("b"); public class c : a b newb = new b();class mainclass public static void main() c newc = new c(); c

30、onsole.readline(); 输出结果:ba 如果在c中也创建一个构造函数输出“c”,即添加:public c()console.writeline("c"); 则整个程序运行的结果为:bac4、编写一个控制台应用程序,完成下列功能,并写出运行程序后输出的结果。(1)创建一个类a,在a中编写一个可以被重写的带int类型参数的方法mymethod,并在该方法中输出传递的整型值加10后的结果。(2)再创建一个类b,使其继承自类a,然后重写a中的mymethod方法,将a中接收的整型值加50,并输出结果。(3)在main方法中分别创建类a和类b的对象,并分别调用mymet

31、hod方法。【解答】using system;public class a public virtual void mymethod(int num) num += 10; console.writeline(num); public class b : a public override void mymethod(int num) num += 50; console.writeline(num); class mainclass public static void main() a newa = new a(); newa.mymethod(2); b newb = new b();

32、newb.mymethod(2); console.readline(); 输出结果:12525、假设node类的每一个节点包括有两个字段:m_data(引用节点的数据)和m_next(引用链接列表中的下一项)。这两个字段都是由构造函数方法设置的。该类有两个功能,第一个功能是通过名为data和next的只读属性访问m_data和m_next字段。第二个功能是对system.object的tostring虚拟方法进行重写。试分别用类和泛型两种方法编写程序实现上述功能。【解答】using system;class node object m_data; node m_next; public no

33、de(object data, node next) m_data = data; m_next = next; / 访问结点数据 public object data get return m_data; / 访问下一个结点 public node next get return m_next; / 获取结点数据描述 public override string tostring() return m_data.tostring(); / 链表结点类的泛型定义class node<t> t m_data; node<t> m_next; public node(t d

34、ata, node<t> next) m_data = data; m_next = next; / 访问结点数据 public t data get return m_data; set m_data = value; / 访问下一个结点 public node<t> next get return m_next; set m_next = value; / 获取结点数据描述 public override string tostring() return m_data.tostring(); / 使用结点类型或泛型结点类型class linkedlist stati

35、c void main(string args) / 创建整数链表 /node head = new node(5, null); /head = new node(10, head); /head = new node(15, head); /遍历链表求整数和 /int32 sum = 0; /for (node current = head; current != null; / current = current.next) / / sum += (int32)current.data; / / 输出结果 /console.writeline("sum of nodes = 0

36、", sum); / 用泛型创建整数链表 node<int32> head = new node<int32>(5, null); head = new node<int32>(10, head); head = new node<int32>(15, head); / 遍历求和 int32 sum = 0; for (node<int32> current = head; current != null; current = current.next) sum += current.data; / 输出 console.w

37、riteline("sum of nodes = 0", sum.tostring(); 第6章 作业及答案本章作业题目:p152 1、4、5 容易出错的题目:第1题的(1)空,很容易填成“enable”.第1题的(4)空,很容易填成“checked”.1、填空题(1)使控件是否可以对用户交互做出响应的属性是(enabled)。(2)控制控件是否显示的属性是(visible)。(3)若要在文本框中输入密码,常指定(passwordchar)属性。(4)若某复选框某时刻【checkstate】属性的值为indeterminate,则其属性【checked】的值为(true)。

38、(5)使用(groupbox)或(panel)控件可以将多个radiobutton控件分为两个单选组。(6)若不希望用户在combobox控件中编辑文本,则应将属性(dropdownstyle)的属性值设置为dropdownlist。2、简要介绍textbox控件、maskedtextbox控件和richtextbox控件的使用场合。【解答】textbox控件一般用于单段文本的编辑,可以设置为单行或多行的输入模式,也可以用作密码的输入;maskedtextbox控件主要用于特定格式的单段文本编辑,在输入文本不符合格式要求的将会触发其maskinputrejected事件;richtextbox

39、控件除了具有textbox的一般文本编辑功能外,还可以进行多段文本的高级编辑功能,如改变文本、段落的显示格式、在文本中查找特定字符和字符串以及与rtf文件的交互等。3、简要说明checkbox控件和radiobutton控件的区别。【解答】checkbox控件可为用户提供选择功能,常用的是二选一的选择,如“真/假”或“是/否”;但该控件也可以通过属性的设置作三选一的选择。每一个checkbox所代表的选择都是独立的,若有多个checkbox控件构成一组选项时,则可以多个同时被选中,相互之间不影响,即复选。radiobutton控件,它与checkbox控件功能类似,也是用于接收用户的选择,但它

40、是以单项选择的形式出现,即一组radiobutton按钮中只能有一个处于选中状态。一旦某一项被选中,则同组中其他radiobutton按钮的选中状态自动清除。4、设计一个windows应用程序,窗体上有一个textbox控件、一个button控件。要求:每当用户单击按钮时,文本框都会增加一行文字来反映单击的次数,例如,“第3次单击按钮”。【解答】1) 窗体界面如图6-1所示;2) 窗体中主要控件属性设置如表6-1;表6-1 窗体中的主要控件属性控件name属性功能其它属性textbox控件textbox1显示信息scrollbars=vertical; multiline=truebutton

41、控件button1触发添加信息事件button2触发结束添加事件图6-1 窗体界面 3) 主要事件代码。int i = 1;bool add = true;private void button1_click(object sender, eventargs e) if(add) textbox1.text += "第" + i + "次单击按钮rn" i+;private void button2_click(object sender, eventargs e) add = false;5、编写一段程序,向名为listbox1的listbox控件中,

42、自动添加10个随机数,每个数占一项。【解答】 主要代码如下。public partial class form1 : form int m = 1; private void button1_click(object sender, eventargs e) for (int i = m ; i < m+10; i+) listbox1.items.add(i); m = m + 10; 第7章 作业及答案本章作业题目: p167 1、2、31、directory类提供了哪些目录管理的功能,它们是通过哪些方法来实现的?【解答】directory类为我们提供了对磁盘和目录进行管理的功能,如

43、复制、移动、重命名、创建和删除目录,获取和设置与目录的创建、访问及写入操作相关的时间信息。如:createdirectory方法用于创建指定路径中的所有目录;delete方法用于删除指定的目录;move方法能够重命名或移动目录;exists方法用于确定给定路径是否引用磁盘上的现有目录;getcurrentdirectory方法用于获取应用程序的当前工作目录;getfiles方法用于返回指定目录中的文件的名称等。2、编写程序用directory类提供的方法确定指定的目录是否存在,如果不存在,则创建该目录。然后在其中创建一个文件,并将一个字符串写到文件中。【解答】程序清单如下:using syst

44、em;using system.io;class test public static void main() string path = "c:mydir" try if (!directory.exists(path) directory.createdirectory(path); streamwriter sw=file.createtext(path+"myfile.txt"); sw.writeline("this is a string!"); sw.close(); catch (exception e) consol

45、e.writeline("操作失败: 0", e.tostring(); finally 3、编写程序,使用file类实现删除指定目录下的指定文件。【解答】程序清单如下:using system;using system.io;class filetestpublic static void main()console.writeline("确认删除当前目录下的所有文件?");console.writeline("点击'y'键继续,其它键取消操作");int a = console.read();if(a = '

46、;y' | a = 'y')console.writeline("正在删除文件.");elseconsole.writeline("用户取消操作");return;directoryinfo dir = new directoryinfo (".");foreach (fileinfo f in dir.getfiles()f.delete();第8章 作业及答案本章作业题目: p167 1、2、3、41、简述有哪些创建graphics类对象的方法。【解答】(1)在窗体或控件的paint事件中直接引用graphics对象。在为窗体创建绘制代码时,一般使用此方法获取对图像的引用。(2)从当前窗体获取对graphics对象的引用。注意这种对象只有在处理当前windows窗体消息的过程中有效。如果想在已经存在的窗体或控件中绘图,可以使用此种方法。(3)从继承自图像的任何对象创建graphics对象。这个方法适用于需要更改已经存在的图像。2、使用panel控件分别以矩形、椭圆和圆形的方式动态显示图片,图片的大小由panel控

温馨提示

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

评论

0/150

提交评论