C#程序的设计大学教材课后答案_第1页
C#程序的设计大学教材课后答案_第2页
C#程序的设计大学教材课后答案_第3页
C#程序的设计大学教材课后答案_第4页
C#程序的设计大学教材课后答案_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

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

文档简介

..引言复习题什么是程序设计?答:计算机程序设计又称为编程〔programming,是一门设计和编写计算机程序的科学和艺术。程序是程序设计中最基本的概念,也是软件中最基本的概念。程序是计算任务的处理对象和处理规则的描述。所谓计算任务是指所有通过计算来解决实际问题的任务。处理对象是数据,如数字、文字和图像等。处理规则一般指处理动作和步骤。在低级语言中,程序是一组指令和相关的数据。在高级语言中,程序一般是一组说明和语句,它包括了算法和数据结构。程序设计就是为计算机设计和编写程序,使其按照人所规定的算法对数据进行处理。通常程序设计包括了问题建模、算法设计、编写代码和编译调试等过程。当今的计算机是基于什么模型?答:现代计算机都是基于冯·诺伊曼模型的。此模型着眼于计算机的内部结构,定义了处理机的运行过程。该模型把计算机分为四个子系统:存储器、算术/逻辑单元、控制单元和输入/输出单元。为什么不称计算机为数据处理器?答:数据处理器。可以认为是一个接受输入数据,处理数据,产生输出数据的黑盒。尽管这个模型能够体现现代计算机的功能,但是它的定义还是太狭窄。这个模型并没有说明它处理的类型以及是否可以处理一种以上的类型。换句话说,它并没有清楚的说明一个基于这个模型的机器能够完成操作的类型和数量。它是专用机器还是通用机器呢?这种模型可以表示为一种设计用来完成特定任务的专用计算机〔或者处理器,比如用来控制建筑物温度或汽车油料使用。但计算机作为一个当今使用的术语,是一种通用的机器。它可以完成各种不同的工作。你所知道的程序设计语言有哪些?你知道它们有什么不同特点吗?〔答案略位模式是如何表示一个构成文本的语言符号的?答所谓位〔bit,binarydigit的缩写是存储在计算机中的最小单位;它是0或1。位代表设备的某一状态,这些设备只能处于两种状态中的某一种状态。计算机存储器并不知道所存储的位模式是表示哪种类型的数据。实际上计算机存储器仅仅将数据以位模式存储。至于解释位模式是数字类型、文本类型、或其它的数据类型,则是由输入/输出设备或程序的完成。换句话说,当数据输入计算机时,它们被编码,当呈现给用户时,它们被解码。位模式可以表示任何一个构成文本的语言符号。在一种语言中,位模式到底需要多少位来表示一个文本符号主要取决于该语言集中到底有多少不同的文本符号。例如,如果要创建的某个虚构的语言仅仅使用大写的英文字母,则只需要26个符号。相应的这种语言的位模式则至少需要表示26个符号。对另一种语言,如中文,可能需要更多的符号。在一种语言中,表示某一符号的位模式的长度取决于该语言中所使用的符号的数量。更多的符号意味着更长的位模式。计算机程序设计语言是如何分类的?答:程序设计语言可划分为低级语言、中级语言和高级语言。低级语言或称机器语言,是程序设计语言中最基础的类型,能被计算机直接理解。机器语言的区别取决于制造商和计算机的型号。高级语言是在计算机能够理解和处理之前必须首先翻译成机器语言的程序设计语言。C、C++、Pascal和FORTRAN都是高级语言的例子。汇编语言是中级语言,非常接近于机器语言,没有其他高级语言所表现出的语言复杂程度,运行时仍然得先翻译成机器语言。C#是什么?答:C#〔发音为:Csharp是Microsoft公司开发的一种新的语言,也是.NET公用语言运行环境的内置语言。它完美的结合了C/C++的强大功能、Java的面向对象特征和VisualBasic的易用性,从而构成一种类型安全的、简单的面向对象的编程语言。C#的集成开发环境包括那些组成部分?答:C#的集成开发环境主要由这几部分组成:通用语言运行时CLR〔CommonLanguageRuntime,它是整个开发框架的基础;由CLR所提供的一组基础类库;在开发技术方面,C#的集成开发环境提供了全新的数据库访问技术ADO.NET,以及网络应用开发技术ASP.NET和Windows编程技术WinForms。简述程序设计的过程。答:程序的设计过程包括:问题建模、算法设计、编写代码、编译调试。程序将以数据处理的方式解决客观世界中的问题,因此在程序设计之初,首先应该将实际问题抽象成一个求解模型,然后为该模型设计和制定算法。通过问题建模,可以清楚地描述各种概念、已知条件、所求结果,以及已知条件与所求结果之间的联系等各方面的信息。模型和算法的结合将给出问题的解决方案。具体的解决方案确定后,需要对所采用的算法进行描述,算法的初步描述可以采用自然语言方式,然后逐步将其转化为程序流程图或其他直观方式。这些描述方式比较简单明确,能够比较明显地展示程序设计思想,是进行程序调试的重要参考。使用计算机系统提供的某种程序设计语言,根据上述算法描述,将已设计好的算法表达出来,使得非形式化的算法转变为形式化的由程序设计语言表达的算法,这个过程称为程序编码。程序设计者可以通过常用的开发工具〔如Java、VisualBasic等依据程序设计语言的语法规则编写程序,并将源代码编译成可执行程序。由于很少能保证程序第一次就能够正确运行,所以程序设计时经常需要使用调试程序来帮助查找程序错误,解决程序运行中存在的问题。调试程序能够在运行的程序中检测到一个事件,并向程序员指出该事件在程序由哪条代码的触发。只有编译调试成功了,才完成了程序的设计过程。测试题以下关于计算机程序的描述不正确的是。A、计算机程序是指按照时间顺序依次安排的计算机工作步骤。B、简单地讲,计算机程序也可以表示成:算法+数据结构。C、计算机程序是对计算步骤的编排和优化。D、计算机程序是计算任务的处理对象和处理规则的描述。答案:C〔提示:计算机程序是对计算步骤的编排,但不一定优化现代的内部存储计算机程序的概念是由提出来的。A、美籍匈牙利数学家约翰•冯•诺伊曼B、英国数学家奥古斯塔•埃达•拜伦C、法国发明家约瑟夫D、英国数学家和发明家查尔斯•巴比答案:A以下程序设计语言在历史上出现的正确顺序是。A、FORTRAN、BASIC、C#、JAVAB、FORTRAN、C、JAVA、C#C、LISP、BASIC、C#、C++D、COBOL、C#、Pascal、JAVA答案:B以下的应用程序中,不能将源代码翻译成目标代码是。A、编译器B、解释器C、汇编程序D、虚拟机答案:D计算机内存中存储体的基本单位是。A、字节B、字C、位D、字符答案:C可用于表示来自世界上不同语言的符号。A、ASCII码B、扩展ASCII码C、扩展ASCII码和Unicode码D、Unicode码答案:D以下有关计算机数据表示的说法不正确的是。A、计算机中并没有采用文本的编码来表示数字。 B、计算机存储器仅仅将数据以位模式存储,它并不知道其存储的数据是哪种类型。C、在一种语言中,位模式到底需要多少位来表示一个符号这主要取决于内存的大小。D、一个字中包含多个位,字可以是8位、16位、32位,甚至是64位。答案:C程序设计语言通常分为。A、面向过程的、函数式的、面向对象的或逻辑的语言B、机器语言、汇编语言、高级语言C、数据库语言、通用语言、嵌入式语言D、可视化语言、非可视化语言答案:BC#从版本开始推出了C#for.NET集成开发环境。A、C#7B、C#5C、C#8D、C#2005答案:DC#是出品的一种优秀的集成开发工具。A、SUN公司 B、Borland公司C、IBM公司D、Microsoft公司答案:D练习题设计一个窗体,从组件面板中选择一些常见控件放置在其上。运行该程序,观察运行结果,并察看C#自动生成了那些代码。〔答案略查阅资料,找出最近10年来新出现的程序设计语言,了解为什么人们要推出这些新的语言,并讨论程序设计与语言的关系。〔答案略一种计算机程序设计语言有10种不同的指令。如果指令不重复,在这种语言能编出多少5条指令的程序?又能编出多少7条指令的程序?答:5条指令的程序:10×9×8×7×6〔种7条指令的程序:10×9×8×7×6×5×4〔种讨论:今天对一个最终用户来说,硬件、软件和数据哪一个更有价值?程序设计基础复习题简述C#程序的基本框架结构。答:C#程序由一个或多个独立的类组成,每个类归属于某个命名空间。C#的类可以由一个或多个方法组成,其中类中的静态Main方法可用作程序运行的入口。代码质量评审的原则是什么?撰写代码时如何使程序结构清晰,易于阅读?答:通过编程经验的总结和软件工程的研究,归纳出如下代码质量评审原则:正确性指程序代码要实现软件设计所要求的功能;可靠性指代码最后编译的程序要能够稳定、可靠、安全的运行;规范化指代码书写的风格、命名规则等要符合规范;可读性指代码要便于查看和理解;在程序代码中适当使用空格、空行、缩进以及必要的注释和规范的命名,可以使程序结构清晰,易于阅读。什么是数据类型?以变量为例,阐述数据类型的意义。答:某种数据类型就好比是一套"用来解释存储于某内存位置上的值〔好比变量的值"的规则。举个例子,如果变量是个整数,存储于其中的位〔bits就被解释为一个整数;如果变量的数据类型是字符串,存储于其中的位〔bits就被解释为一组字符。当然,对编译器来说,数据类型的含义远不止于此。编译器还必须能够理解以下规则:"定义每一种数据类型能够接受的值"以及"对这些值来说哪些操作合法"。通过这些知识,编译器便能够决定一个特定数据类型的值是否被正确地使用。C#数据类型可分为几大类?C#值类型包括哪些?答:C#中的数据类型可以分为值类型和引用类型两大类。其中值类型包括:简单类型、枚举类型和结构类型;引用类型包括:数组类型、类类型、接口类型和代理类型。测试题以下声明常量的语句正确的是。A、doublePI=3.14159;B、constdoublePI=3.14159;C、staticdoublePI=3.14159;D、staticconstdoublePI=3.14159;答案:BC#中简单数据类型包括。A、整数类型,字符类型,枚举类型和结构类型B、整数类型,字符类型,布尔类型和实数类型C、整数类型,字符类型,结构类型和类类型D、整数类型,字符类型,布尔类型,结构类型和类类型答案:B以下类型在内存中所占大小从小到大排序,正确的是。A、byteshortlongB、bytelongshortC、charbytefloatD、doublefloatlong答案:A每个C#语句以结束。A、右大括号"}"B、回车C、点号"."D、分号";"答案:D下面可作为变量名的是。A、tryB、continueC、$500D、24Hour答案:C在C#中,以下程序注释正确的是。A、{注释行1注释行2注释行3}B、//注释行1注释行2 注释行3//C、<*注释行1注释行2注释行3*>D、/*注释行1注释行2注释行3*/答案:D关于以下两行代码,不正确的说法是。floatf=3.2;inti=f;A、代码无法编译通过。B、代码可以编译通过,i的值为3。C、第2行应改为inti=<int>f;D、第1行应改为floatf=3.2F;答案:B以下代码无法编译通过,是因为。classTest{staticintmyArg=1;publicstaticvoidMain<String[]args>{intmyArg;Console.WriteLine<myArg>;}}A、Main方法中的变量myArg没有初始化。B、Main方法中的变量myArg与Test类的myArg字段同名。C、Test类的myArg字段不能在定义时就同时赋值。D、Console.WriteLine<myArg>语句不能使用整数类型的myArg,而应使用字符串类型的myArg。答案:A以下的Main方法定义中,可用作公有类中程序运行入口的是。A、publicstaticvoidMain<>B、publicstaticvoidMain<string[]string>C、publicstaticvoidMain<stringargs>D、staticpublicintMain<string[]args>答案:B已知a、b、c、d都是int类型的变量,而且已有互不相同的值,顺序执行下列语句后,条件等式为true的是。b=a;a=c;d=a;d=b;A、a==cB、a==dC、c==dD、b==a答案:A下列实数表示方法中不正确的是。A、8.625e+5B、5e-3FC、2345.34D、1000答案:D以下语句中属于合法类型转换的是。A、<int>"A"B、<char>"A"C、<bool><2-2>D、<char><651/12>答案:D下列字符比较的结果为真〔true的是。A、'a'<'A'B、'c'<='A'C、'a'=='A'D、'a'>'A'答案:D练习题指出下面表达式的类型:a.4567 b."true" c.'C' d.67.0e.56F f."T" g.'8' h.true答: b.string c.char d.doublee.float f.string g.char h.bool定义一个表示学生性别的枚举类型。答: enumTSex{male,female,unknown}定义一个表示图书信息的结构类型。要求包含:书名、作者、出版社、定价、页数、书号等字段。试编写一个简单的控制台程序,使用ReadLine语句为一个图书信息的各个字段赋值,并用WriteLine语句在屏幕上显示这些值。参考程序:usingSystem;structTBook{ publicstringName;//书名 publicstringAuthor;//作者 publicstringPub;//出版社 publicdoublePrice;//定价 publicintPages;//页数 publicstringISBN;//书号}classClass1{ publicstaticvoidMain<string[]args> { TBooktb=newTBook<>; Console.WriteLine<"请输入书名:">; tb.Name=Console.ReadLine<>; Console.WriteLine<"请输入">; tb.Author=Console.ReadLine<>; Console.WriteLine<"请输入出版社:">; tb.Pub=Console.ReadLine<>; Console.WriteLine<"请输入定价:">; tb.Price=double.Parse<Console.ReadLine<>>; Console.WriteLine<"请输入页数:">; tb.Pages=int.Parse<Console.ReadLine<>>; Console.WriteLine<"请输入书号:">; tb.ISBN=Console.ReadLine<>; Console.WriteLine<"">;Console.WriteLine<"《"+tb.Name+"》"+tb.Author+","+tb.Pub+"出版">;Console.WriteLine<"定价:"+tb.Price.ToString<>+"元,共计"+tb.Pages.ToString<>+"页,书号:"+tb.ISBN>; }} 界面如下:阅读以下程序,分析运行结果。publicstaticvoidMain<string[]args>{boolb1=true;boolb2=false;boolb3=<1>2>;b3=b2;b3=<b2==b1>;System.Console.WriteLine<"b3is{0}",b3>;}答:b3isfalse程序设计进阶复习题什么是表达式?C#程序中复杂的表达式是如何建立的?答:一个表达式就是一个能够返回值的简单结构。最简单的表达式是变量和常量。在C#中也可以通过使用运算符、方法调用以及类型转换等,建立复杂的表达式。C#语言中主要有哪些运算符?它们的优先级是怎样的?C#语言中包括有赋值运算符、增减运算符、算术运算符、关系运算符、逻辑运算符、位运算符等。C#语言中主要运算符及其优先级如下:优先级运算符类型运算符优先级最高一元运算符[].<>〔方法调用!~++--+-new<>〔强制类型转换优先级较高算术运算符位移运算符*/%+-<<>>优先级较低关系运算符位移运算符逻辑运算符<<=>>==!=&^|&&||?:〔三元判断运算符,例如:A>B?X:Y优先级最低赋值运算符=+=-=*=/=%=在程序设计的流程控制中,有哪些基本结构?这些结构在C#语言中是如何实现的?答:在程序设计的流程控制中,有如下三种基本控制结构:顺序结构、选择结构、循环结构。在C#语言中顺序结构由顺序执行的各条语句实现;选择结构由if语句、switch语句实现;循环结构由while语句、do-while语句、for语句实现。在什么情况下循环过程会出现死循环?在C#语言中使用哪条语句可以跳出循环体?答:当循环条件永远为真时,也就是说永远无法达到循环的边界时会出现死循环。使用break关键字可以强行跳出循环体。case语句有哪几种变形?他们又如何使用?答:case语句的几种变形有:简单的case语句、带缺省语句的case语句、带有多值分支的case语句、带有范围值分支的case语句。<使用方法略>什么是算法?算法有哪些特征?答:算法是为了求解某一问题在有限步骤内、定义了具体操作序列的规则集合。通俗点说,算法就是针对一类特定问题,使用计算机解题的过程。一个算法应该具有以下五个重要的特征:• 确切性〔Noambiguity算法的每一步骤必须有确切的定义。而不应该有二义性,例如,在算法中不能出现诸如"赋值为100或1000”。• 输入〔Input有0个或多个输入,用于初始化运算对象。所谓0个输入是指无需输入条件,而算法本身定出了初始条件。• 输出〔Output没有输出的算法是毫无意义的。一个算法应该有一个或多个输出,以反映对输入数据加工后的结果。• 可行性〔Feasibility算法原则上能够精确地运行,而且对于算法中的每种运算,在原理上人们应该能用笔和纸做有限次运算后完成。• 有穷性〔Finite算法必须保证执行有限步之后结束。只具有前面四个特征的规则集合,称不上算法。例如,尽管操作系统能完成很多任务,但是它的计算过程并不终止,而是无穷无尽的执行、等待执行,所以操作系统不是算法。什么是排序算法?排序算法有哪些?答:为了更有效地使用数组,通过对数组中的元素进行排序,使其按一定的顺序排列的算法都称为排序算法。排序算法有很多,如:冒泡排序、选择排序、插入排序、快速排序、合并排序、希尔〔Shell排序、堆排序等什么是查找算法?查找算法有哪些?答:查找就是从列表〔list或者数组中找出需要的数据项,确定目标所在位置的算法,也叫检索。查找的算法很多,有顺序查找、折半查找、散列值查找、转移表查找等。测试题以下运算符按运算优先级从高到低排列顺序正确的是。A、!、*、<、=B、!、=、*、>=C、!、*、&&、>=D、!=、*、&&、>=答案:A以下循环语句的执行次数是。intx=37;inty=3;while<y<=x>{y*=y;}A、0B、1C、2D、3答案:C下列字符串比较的结果为真〔True的是。A、'a'<'A'B、'c'<='A'C、'a'=='A'D、'a'>'A'答案:D设有以下声明,则合法的赋值语句是。 inti1,i2,i3; boolb1,b2,b3;A、i3=i1/i2;B、b1=i1&&i2;C、b2=i1<i2;D、i1=i2/b2;答案:D以下关于算法不正确论述的是。A、算法必须是一组定义完好且排列有序的指令集合。B、一个算法可以产生一个结果也可以没有结果。C、一个算法必须能够终结。D、算法的每一步都必须有清晰明白的定义。答案:B算法的基本结构组成不包括。A、顺序结构B、选择结构C、递归结构D、循环结构答案:C下列循环结构中至少执行一次循环体的是。A、while...doB、do...whileC、for...D、for...do答案:B下面几个关于取模运算的说法正确的是。A、-28%3等于-1B、-28%3等于2C、28%–3等于-2D、-3%28等于1答案:A下面程序运行后,m的值是。intm=14;intn=63;while<m!=n>{while<m>n>{m=m-n;}while<n>m>{n=n-m;}}System.Console.WriteLine<m>;A、4B、5C、6D、7答案:D下面程序执行后move的值是。intmove=0;inty=68/8;if<y>8>{move=y/2+5;}else{inta=y;intb=6;move=a%b;}System.Console.WriteLine<move>;A、1B、2C、3D、4答案:B表达式25/3%3*2的值是。A、4B、4.0C、6D、8答案:A在for循环语句中,循环控制变量的取值是如何变化的?A、自动增1B、自动减1C、根据for语句的不同形式来确定D、必须在循环体中给循环控制变量赋值答案:C在While循环语句中执行的流程为。A、先判断后执行B、先执行后判断C、由循环条件决定D、可以先判断,也可以先执行答案:A指出下面程序的输出结果是什么?publicstaticvoidMain<string[]args>{constintA=4;inta=2;switch<a*2>{caseA:System.Console.WriteLine<a>;default:System.Console.WriteLine<a*2>;}}A、2B、4C、2和4D、程序出错答案:C关于下面程序段的正确说法是。charmychar='c';switch<mychar>{default:case'a':System.Console.WriteLine<"a">;break;case'b':System.Console.WriteLine<"b">;break;}A、程序出错,default位置不对。B、程序出错,case表达式必须是int类型,不能使用char类型。C、程序正确,屏幕显出输出字符a。D、程序正确,屏幕无显出输出。答案:D以下方式中,不方便表示算法的是。A、伪代码B、流程图C、Pascal语言D、PAD图答案:C累加求和是。A、基本算法B、排序算法C、查找算法D、迭代和递归算法答案:A是用于编写解决问题的算法的两种途径。A、求最大值和最小值B、函数和过程C、查找和排序D、迭代和递归答案:D对一组数据〔84,47,25,15,21排序,数据的排列次序在排序的过程中变化如为:

/p>

〔21547258421

〔31521258447

〔41521254784

则采用的排序方法是。A、选择排序 B、冒泡排序 C、快速排序D、插入排序答案:B练习题阅读以下程序,分析运行结果。publicclassTotal{publicstaticvoidMain<string[]args>{inty,x=1,total=0;while<x<=10>{y=x*x;System.Console.WriteLine<y>;total+=y;++x;}System.Console.WriteLine<"totalis"+total>;}}答:1~10的整数平方的和。指出以下程序段的错误:intsex=2%3;if<sex=1>{System.Console.WriteLine<"Man">;}else{System.Console.WriteLine<"Woman">;}答:语法错误,应该改为sex==1。指出以下程序段的错误:publicstaticvoidMain<string[]args>{stringsay="Ilovemyteacher.";stringstr=say.Substring<7,10>;if<str=="myteacher">{System.Console.WriteLine<"right!">;}else{System.Console.WriteLine<"wrong!">;}}答:比较字符串是否相等应该使用equals方法,而不能使用关系运算符==。t=="myteacher"应该改为t.equals<"myteacher">指出以下程序段的错误:publicstaticvoidMain<string[]args>{inta=4;intb=2;switch<b*2>{casea:System.Console.WriteLine<a-b>;break;caseb:System.Console.WriteLine<a+b>;}}答:switch语句的case分支的值必须是常量。指出以下程序段的错误:publicstaticvoidMain<string[]args>{inta=3;intb=6;for<inti=a;i<=b;i++>{a=1;b=5;System.Console.WriteLine<i>;if<i>=<b-a>>i--;}}答:本题中没有语法错误,但在for语句的循环体内,对循环变量进行操作,造成死循环。指出以下程序段的错误:publicstaticvoidMain<string[]args>{for<floaty=0;y!=1.2;y+=0.1>{System.Console.WriteLine<y>;if<y>1.5>break;}}答:因为浮点数的值不精确,y只会等于1.2000002,而永远不会等于1.2,造成死循环。试编写一个程序,将1~500间能同时被2,5,7整除的数打印出来。参考程序1——整除法:classProgram1{ publicstaticvoidMain<string[]args>{ for<inti=1;i<=500;i++>{ if<<i%2==0>&&<i%5==0>&&<i%7==0>>{System.Console.WriteLine<i>;} } }}参考程序2——公约数法:classProgram2{publicstaticvoidMain<string[]args>{intk=0;inti=1;while<k<=500>{k=2*5*7*i;if<k>=500>break;System.Console.WriteLine<k>;i=i+1;}}}试编写一个程序,显示如图所示的一个数字金字塔。1121123211234321123454321参考程序:publicclassNewClass{ publicstaticvoidMain<string[]args>{ inti=9; for<introw=1;row<=i;row++>{ for<intcolumn=1;column<=<i-row>;column++>{ System.Console.Write<''>; } for<intcolumn=1;column<=row;column++>{ System.Console.Write<column>; } for<intcolumn=row-1;column>0;column-->{ System.Console.Write<column>;} System.Console.WriteLine<>; } }}}如果我国的经济增长以每年7.5%的速度保持稳定不变,试编写一个程序,计算过多少年可以实现总量翻两番?参考程序:publicclassDoubleTimes{publicstaticvoidMain<string[]args>{intn=0;doubleinc=0.075,sum=1;//增长率inc为7.5%,当前总量sum为1while<sum<=4>{sum=<1+inc>*sum;//计算总量n++;//计算年数;System.Console.WriteLine<"第"+n+"年达到"+sum>;}System.Console.WriteLine<"一共"+n+"年实现翻两番。">;}}将下列程序改写为非递归形式。intexam<intx>{ intresult; if<x==0> result=1; else result=x*exam<x–1>; returnresult;}答:上面的函数可改写如下:intexam<intx>{ inti,result,j=1; if<x==0> result=j; if<x>0> for<i=1;i<x;i++> j=j*i; result=j; returnresult;}面向对象与对象模型复习题面向对象的主要特点概括起来有哪些?答:面向对象的特点主要概括为抽象性、继承性、封装性和多态性。抽象性—指对现实世界中某一类实体或事件进行抽象,从中提取共同信息,找出共同规律,反过来又把它们集中在一个集合中,定义为所设计目标系统中的对象。继承性—新的对象类由继承原有对象类的某些特性或全部特性而产生出来,原有对象类称为基类〔或称超类,新的对象类称为派生类〔或子类,派生类可以直接继承基类的共性,又允许派生类发展自己的个性。继承性简化了对新的对象类的设计。封装性—是指对象的使用者通过预先定义的接口关联到某一对象的服务和数据时,无需知道这些服务是如何实现的。即用户使用对象时无需知道对象内部的运行细节。这样,以前所开发的系统中已使用的对象能够在新系统中重新采用,减少了新系统中分析、设计和编程的工作量。多态性—是指不同类型的对象可以对相同的激励做出适当的不同响应的能力。多态性丰富了对象的内容,扩大了对象的适应性,改变了对象单一继承的关系。什么是建模语言?什么是UML?答:建模语言是一种图形化的文档描述性语言,利用它所期望解决的核心问题是沟通障碍的问题。而建模工具则是建模的辅助手段,利用它所期望解决的核心问题是生产力的问题。UML是统一建模语言〔TheUnifiedModelingLanguage的英文缩写,UML是一个通用的可视化建模语言,用于对软件进行描述、可视化处理、构造和建立软件系统制品的文档。它可以把人们对所需要构建系统的想法和理解记录下来,以便用于对系统的分析、设计、研究、配置和维护。UML适用于各种软件开发方法、软件生命周期的各个阶段、各种应用领域以及各种开发工具,是一种总结了以往建模技术的经验并吸收当今优秀成果的标准建模方法。如何理解面向对象程序设计中的对象?答:我们可以从以下几个方面来理解面向对象程序设计中的对象:对象可以视为一组相关的操作代码和数据的组合对象封装了方法和数据,并提供外部调用的接口。这使得对象可以作为一个独立的整体单元安全使用,维护了自身的完整性和可操作性。在面向对象程序设计中,过程和函数被称作方法,数据被称作属性。在对象模型中,可以用属性来表示对象的内容或状态,用方法来表示对象的操作。理论上,可以把所有要解决的问题分解成程序中的各个对象,由他们自己解决各自的问题。当然,对象的粒度划分仍然是面向对象编程中的难题。对象是类的实例对象可以视为神奇的变量,它相当于"类"类型的变量。对象可以互相协作,共同完成任务对象之间可以通过发送消息请求而相互联系,在消息请求中可以调用方法。面向对象程序设计中的一条典型的代码可以是一个对象发送的一条消息,消息由对象的名字后跟它的方法来表示。一个消息通常由三部分组成:接收对象的名字、对象方法的名字和方法成参数。即:对象.方法〔参数;通过继承、组合或封装等方式可以产成新的对象这种方式产生的新对象不仅最大限度地实现了代码的重用,并以此在程序中构建复杂的体系,将系统的复杂性隐匿于对象的简易性之中。对象根据特定的意义和用途有不同的划分方法程序中的对象既可以划分账单对象、收银员对象这样的实体对象,也可以划分安全对象、协调对象、事务对象这样的功能对象。通常我们可以按照界面和逻辑分开的原则,将系统划分为系统逻辑对象和用户界面对象。什么是类?类包括那些成员?答:类是对具有共同实现的一些对象或一系列对象的描述。类是用来创建对象的模板,类抽象出具体对象的相似性,定义它们的共同特征,包括数据和操作。类包括了数据成员和函数成员。什么是方法?C#中哪些方法相当于函数,哪些方法相当于过程?答:方法是在类中定义,用来实现对象操作的过程或者函数。方法是属于一个给定对象的过程和函数,方法反映的是对象的行为而不是数据。通常C#中的方法可分为有返回值和没有返回值的两种,前者相当于传统程序中的函数,后者相当于传统程序中的过程。对象之间有哪些关系?如何理解这些关系?答:对象之间的关系有:• 聚合关系〔"has—a"• 继承关系〔"is—a"• 依赖关系〔"use—a"聚合关系〔"has—a"关系从字面上很容易理解,它是指新对象由已有的对象组合而成,或新对象包含有其他对象。比如,一个班级就包含多个学生。也就是说,聚合关系意味着类A的对象包含类B的对象。从另一个角度看,聚合关系又表现为对象之间的相互关联,有人更喜欢用概念更宽泛的"关联关系"<association>。因此,可以认为聚合关系是关联关系的一种,只是聚合关系在语义上更加严格,甚至可以用来表示局部和整体的关系,例如要标识:一辆汽车〔整体,和一个车身〔局部、一台引擎〔局部和四个〔轮子之间的关系,就可以使用聚合关系。继承关系〔"is—a"关系用来表示对象与类之间所具有的泛化和特化关系。比如,TCar类和TBicycle类从TVehicle类继承而来。TVehicle称为TCar和TBicycle的基类。TCar类具有特定的方法,如:踩油门、点火熄火等。但它的其他方法,诸如:刹车、停车等,却都是从TVehicle类继承过来的,这些与具体什么类型的车无关。一般而言,如果类A扩展了类B,那么类A不仅继承类B中的方法,而且还具有更多的功能。依赖关系〔"use—a"关系是最明显也最常见的关系。比如,由于Driver对象需要访问某一Car对象,以调用它的点火、踩油门、停车等方法,所以Driver对象要用到Car对象,两者间存在着依赖关系。这就是说,如果一个对象的方法操作了另一个对象,那么这个对象就依赖于另一个对象。所以在设计类的时候就应尽量将相互依赖的类的数量减少到最少。如果类A不知道类B的存在,那么它就不会关心类B的任何改变,这还意味着对类B的改变不会使类A产生任何bug。用软件工程术语来说,就是要使类间的耦合最小。测试题以下关于对象的说法不正确的是。A、组成客观世界〔事物的不同实体可以看成是对象。B、对象是一个具有封装性和信息隐藏的独立模块。C、对象可以分解和组合,还可以通过相似性原理进行分类和抽象。D、对象能更好地模拟计算机工作方式,体现计算机运行规律,提高程序执行效率。答案:D面向对象的特点主要概括为。A、可分解性、可组合性、可分类性B、继承性、封装性和多态性C、抽象性、继承性、封装性和多态性D、封装性、易维护性、可扩展性、可重用性答案:C在C#中最基本的类是。A、ControlB、ComponentC、ObjectD、Class答案:C不能在派生类中被覆盖的方法是。A、虚方法B、实例方法C、静态方法D、抽象方法答案:C以下论述不正确的是。A、对象变量是对象的一个引用。B、对象是类的一个实例。C、一个对象可以作为另一个对象的数据成员。D、对象不可以作为函数的参数传递。答案:D对象之间的继承关系是关系。A、has—aB、is—aC、use—aD、of—a答案:B以下Bridge与Road之间是关系。classBridge{Roadroad;}classRoad{Stringname;}A、has—aB、is—aC、use—aD、of—a答案:A要使某个类能被同一个名称空间中的其他类访问,但不能被这个名称空间以外的类访问,可以。A、让该类不使用任何关键字。B、使用private关键字。C、使用const关键字。D、使用protected关键字。答案:AUML是一种。A、数据库语言B、程序设计语言C、建模语言D、面向对象语言答案:C分析以下程序的运行结果,得到的结论是。publicclassMyClass{strings;publicstaticvoidMain<string[]args>{MyClassm=newMyClass<>;m.go<>;}voidMyClass<>{s="constructor";}voidgo<>{System.Console.WriteLine<s>;}}A、程序可以运行,但屏幕没有输出任何字符。B、程序可以运行,屏幕输出字符串为"null"。C、程序可以运行,屏幕输出字符串为"constructor"。D、程序无法编译运行。答案:C练习题设计一个Retangle类,提供通过length和width字段计算面积和周长的2个方法。并用main方法来测试程序。参考答案: publicclassRetangle { privatedoublelength; privatedoublewidth; publicRetangle<doublel,doublew> { length=l; width=w; } publicdoublecalcPerimeter<> { return2*<length+width>; } publicdoublecalcArea<> { returnlength*width; } publicstaticvoidMain<string[]args> { Retangleretangle=newRetangle<640,480>; System.Console.WriteLine<"长为"+retangle.length+"宽为" +retangle.width+"的长方形">; System.Console.WriteLine<"面积是:"+retangle.calcArea<> +"周长是:"+retangle.calcPerimeter<>>; } }分析以下程序,绘出UML类图,指出Vehicle与Engine这两个类之间的关系,并给出程序运行结果。publicclassVehicle{publicVehicle<>{make="FiatSiena1.5EL";color="法拉利红色";topSpeed=180;}publicstaticvoidmain<String[]args>{Vehiclecar=newVehicle<>;ystem.out.println<car.showInfo<>>;car.start<>;car.speedUp<>;car.slowDown<>;car.stop<>;}publicvoidstop<>{engine.stop<>;System.out.println<"汽车停止...">;}publicStringshowInfo<>{Stringinfo="车型:"+make+"\t颜色:"+color+"\t最高时速:"+topSpeed+"\n发动机:"+engine.showInfo<>;returninfo;}publicvoidstart<>{engine.start<>;System.out.println<"汽车启动...">;}publicvoidspeedUp<>{System.out.println<"汽车加速...">;}publicvoidslowDown<>{System.out.println<"汽车减速...">;}/***linkaggregation*/privateEngineengine=newEngine<>;privateinttopSpeed;privateStringmake;privateStringcolor;}classEngine{publicEngine<>{capacity=1461;power=85;}publicStringshowInfo<>{Stringinfo="排量:"+capacity+"cc;最大功率"+power+"匹马力";returninfo;}publicvoidstop<>{System.out.println<"发动机熄火...">;}publicvoidstart<>{System.out.println<"发动机点火、启动...">;}privateintpower;privateintcapacity;}参考答案:1>、Vehicle与Engine这两个类之间的关系是聚合关系,他们的UML类图如下所示:2>、程序运行结果:车型:FiatSiena1.5EL颜色:法拉利红色最高时速:180发动机:排量:1461cc;最大功率85匹马力发动机点火、启动...汽车启动...汽车加速...汽车减速...发动机熄火...汽车停止...设计一个Teacher类,包括:3个私有字段Name、TeacherID、Address,以及供外部访问这三个私有字段的对应方法getName、setName、getTeacherID、setTeacherID、getAddress、setAddress。同时,Teacher类还有一个能按查询条件字符串〔qryString查询老师授课课程的方法queryCourse,queryCourse返回字符串类型的课程名称。要求画出UML类图,并给出Teacher类的定义代码参考答案:1>、Teacher类的UML类图:2>、Teacher类的定义代码publicclassTeacher{ privatestringaddress; privateintteacherID; privatestringname; publicTeacher<> { } publicvoidsetName<stringnam> { } publicstringgetName<> { return""; } publicvoidsetAddress<stringaddr> { } publicstringgetAddress<> { return""; } publicvoidsetTeacherID<intid> { } publicintgetTeacherID<> { return0; } publicstringqueryCourse<stringqryString> { return""; }}以下是一个学生管理系统的UML类图,根据图示分别写出Student和Students两个类的定义。即方法具体实现不需要给出,但有返回值的则需要给出return语句。参考答案://Student类 classStudent { publicStudent<stringid,stringnam> { } publicstringtoString<> { return"Student"; } publicstringID; privatestringname; doublescore; } //Students类 classStudents { publicListstuList; privateListIteratorit; publicvoidaddStudent<stringid,stringname> { } publicvoiddeleteStudent<stringid> { } publicvoidsetScore<stringid,doubles> { } publicdoubleaverageScore<> { return0.0; } publicvoidstat<double[]s> { } publicListsortByScore<> { returnnull; } }C#面向对象编程基础复习题怎样理解面向对象编程中继承?如何实现?答:继承〔inheritance是面向对象编程中实现代码重用的重要原理。通过继承可以定义一个新类来扩展现有类。派生类继承了基类中的类成员;派生类和基类之间的差异由程序员来指定。完成方式有:在派生类中,添加新的类成员〔函数成员及数据成员,此时,派生类包括从基类中继承的成员及添加的新成员。根据需要,在派生类中修改继承函数成员的行为方式,为这些函数成员提供新的功能,或者更新旧类中的属性、索引等。如何区别覆盖和重载?答:覆盖〔override和重载〔overload。在上一章的最后一节介绍过重载,它是指允许存在多个同名函数,而这些函数的签名不同〔或许参数个数不同,或许参数类型不同,或许两者都不同,从而能够处理方法输入数据不一,但含义相同的情况。而覆盖是指子类重新定义基类的虚函数的做法,它是面向对象中多态的基础。什么是抽象类?答:抽象类是基类的一种特殊类型。除了拥有普通的类成员之外,还有抽象类成员。抽象类成员中的方法和属性,只有声明〔使用关键字abstract,而没有实现部分。什么是多态?试举例说明。答:多态性是一项允许将父对象设置为和一个或多个子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。按字面的意思就是"多种形式";在计算机科学领域,它意味着利用动态绑定技术,用相同名称的方法来调用方法的不同具体实现。使用泛型有什么好处?答:泛型可以让类、结构、接口、委托和方法,通过他们所存储和操纵的数据的类型被参数化。泛型的主要思想就是将算法和数据结构完全分离开来,使得一次定义的算法能够作用于多种数据结构,从而实现代码高度的可重用性;而且使用泛型还具有高类型安全性和较高的效率。测试题以下论述不正确的是。A、对象变量是对象的一个引用。B、对象是类的一个实例。C、一个对象可以作为另一个对象的数据成员。D、对象不可以作为函数的参数传递。答案:D使用继承的优点是。A、基类的大部分功能可以通过继承关系自动进入派生类。B、继承将基类的实现细节暴露给派生类。C、一旦基类实现出现bug,就会通过继承的传播影响到派生类的实现。D、可在运行期决定是否选择继承代码,有足够的灵活性答案:A在一个对象中,可以继承并直接使用它基类的所有成员,除了。A、public字段和方法B、protected字段和方法C、published字段和方法D、private字段和方法答案:D以下说法正确的是。A、构造函数可以重载,但不可以声明为虚的。B、创建对象时,所有的字段都被缺省置为空〔null。C、抽象类不可以包含非抽象的成员。D、我们可以通过复制对象变量来复制一个新的对象。答案:D练习题用面向对象程序设计的方法实现冒泡排序算法。参考答案:usingSystem;namespaceBubbleSorter{publicclassBubbleSorter{publicvoidSort<int[]list>{inti,j,temp;booldone=false;j=1;while<<j<list.Length>&&<!done>>{done=true;for<i=0;i<list.Length-j;i++>{if<list[i]>list[i+1]>{done=false;temp=list[i];list[i]=list[i+1];list[i+1]=temp;}}j++;}}}publicclassMainClass{publicstaticvoidMain<>{int[]iArrary=newint[]{1,5,13,6,10,55,99,2,87,12,34,75,33,47};BubbleSortersh=newBubbleSorter<>;sh.Sort<iArrary>;for<intm=0;m<iArrary.Length;m++>Console.Write<"{0}",iArrary[m]>;Console.WriteLine<>;}}}用面向对象程序设计的方法实现选择排序算法。参考答案:usingSystem;namespaceSelectionSorter{publicclassSelectionSorter{privateintmin;publicvoidSort<int[]list>{for<inti=0;i<list.Length-1;i++>{min=i;for<intj=i+1;j<list.Length;j++>{if<list[j]<list[min]>min=j;}intt=list[min];list[min]=list[i];list[i]=t;}}}publicclassMainClass{publicstaticvoidMain<>{int[]iArrary=newint[]{1,5,3,6,10,55,9,2,87,12,34,75,33,47};SelectionSorterss=newSelectionSorter<>;ss.Sort<iArrary>;for<intm=0;m<iArrary.Length;m++>Console.Write<"{0}",iArrary[m]>;Console.WriteLine<>;}}}编写一个控制台应用程序,完成下列功能,并回答提出的问题。1>创建一个类A,在构造函数中输出"A",再创建一个类B,在构造函数中输出"B"。2>从A继承一个名为C的新类,并在C内创建一个成员B。不要为C创建构造函数。3>在Main方法中创建类C的一个对象,写出运行程序后输出的结果。4>如果在C中也创建一个构造函数输出"C",整个程序运行的结果又是什么?参考答案:usingSystem;publicclassA{ publicA<> { Console.WriteLine<"A">; }}publicclassB{ publicB<> { Console.WriteLine<"B">; }}publicclassC:A{ Bnewb=newB<>;}classMainClass{ publicstaticvoidMain<> { Cnewc=newC<>; Console.ReadLine<>; }}输出结果:BA如果在C中也创建一个构造函数输出"C",即添加:publicC<>{ Console.WriteLine<"C">;}则整个程序运行的结果为:BACC#面向对象编程深入复习题如何理解接口?接口与抽象类的区别?答:接口〔interface是C#语言的元素,主要用来控制类和结构实现特定的成员集。接口与抽象类的区别:接口只能包含抽象函数、抽象的属性和抽象的索引,不能包含数据成员和方法实现;而抽象类还可能包含数据成员,以及完全实现的函数、属性和索引。C#对象接口中可以包含哪些成员?答:接口中的成员可以包含方法、属性、索引、事件。所有的接口成员都不能包含访问修饰符,只是隐式地声明为public;在接口中定义的属性和索引可以有一个抽象的get访问器,或者一个抽象的set访问器,或者二者兼有。什么是迭代器答:迭代器〔Iterator的是一个产生值的有序序列的语句块,通过它能按照指定的顺序来访问一个集合中的所有元素。如何理解委托和事件?答:委托〔delegate也是一个类,它派生于基类System.Delegate。委托可以将方法引用封装在委托对象内,然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法,因此,通过委托程序能够在运行时刻动态地调用不同的方法。〔C#中的委托类似于C或C++中的函数指针。与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的。事件〔event表示程序中发生一件显著事情的信号。即当对象发生某些事情时,类向该类的客户提供通知的一种方法。通过委托来声明事件:委托对象封装一个方法,以便可以匿名调用该方法;事件是类允许客户为其提供方法<事件发生时应调用这些方法>的委托的一种方法。事件发生时,将调用其客户提供给它的委托。在C#中,事件实际上是委托的一种特殊形式。事件是为处理过程特制的更为专业化的委托,因此,事件比普通的委托更易于使用,更强健。什么是匿名方法?答:匿名方法〔AnonymousMethod顾名思义就是没有名称的方法,使用它可以跳过方法的定义,而将方法的执行代码直接封装到一个委托对象中。测试题以下关于接口不正确的说法是。A、接口提供了一种抽象机制,接口针对抽象而不是针对实现。B、接口没有构造函数和析构函数。C、接口可以继承。D、接口包含的成员有:方法、属性、字段。答案:D以下关于C#对象接口不正确的说法是。A、实现接口的类或者结构要与接口的定义严格一致。B、接口可以包含方法、属性、事件和索引器。C、一个类只可以实现一个接口。D、接口本身不提供它所定义的成员的实现。答案:C练习题假设Node类的每一个节点包括有两个字段:node_data<引用节点的数据>和note_next<引用链接列表中的下一项>。通过构造函数方法设置的这两个字段。Node类有两个功能,第一个功能是通过名为NodeData和NodeNext的只读属性访问node_data和node_next字段。第二个功能是对System.Object的ToString虚拟方法进行重写。试分别用类和泛型两种方法编写程序实现上述功能。参考答案:usingSystem;classNode{Objectnode_data;Nodenode_next;publicNode<Objectdata,Nodenext>{node_data=data;node_next=next;}//访问结点数据publicObjectNodeData{get{returnnode_data;}}//访问下一个结点publicNodeNodeNext{get{returnnode_next;}}//获取结点数据描述publicoverrideStringToString<>{returnnode_data.ToString<>;}}//使用链表结点类的泛型定义/*泛型注释开始classNode{TNode_data;NodeNode_next;publicNode<Tdata,Nodenext>{node_data=data;node_next=next;}//访问结点数据publicTData{get{returnnode_data;}set{node_data=value;}}//访问下一个结点publicNodeNext{get{returnm_next;}set{m_next=value;}}//获取结点数据描述publicoverrideStringToString<>{returnm_data.ToString<>;}}泛型注释结束*///使用结点类型classLinkedList{staticvoidMain<string[]args>{//创建整数链表Nodehead=newNode<5,null>;head=newNode<10,head>;head=newNode<15,head>;//遍历链表求整数和Int32sum=0;for<Nodecurrent=head;current!=null;current=current.NodeNext>{sum+=<Int32>current.NodeData;}//输出结果Console.WriteLine<"Sumofnodes={0}",sum>;//用泛型创建整数链表/*泛型注释开始Nodehead=newNode<5,null>;head=newNode<10,head>;head=newNode<15,head>;//遍历求和Int32sum=0;for<Nodecurrent=head;current!=null;current=current.NodeNext>{sum+=current.NodeData;}//输出Console.WriteLine<"Sumofnodes={0}",sum.ToString<>>;泛型注释结束*/}}开发过程与程序调试复习题企业级应用系统的典型SDLC包括那些阶段?这些阶段各完成哪些工作?答:一个企业级应用系统的典型SDLC通常是这样进行的:• 可行性研究这是概念阶段,在这一阶段中,要在回答下述问题的基础上做出是否开发一个新的企业应用系统的决定:新系统将带来什么样好处?能完成吗?要花费多少时间?投入产出比是多少?近期的和远期的、直接的和间接的效益估算。可行性研究的结果是新项目的一个可行性研究报告,它定义了项目的范围,用户需求,预算限制,预期效益等等。• 分析分析阶段要明确决定一个应用系统将完成什么功能。在精确定义新系统将要做什么的基础上生成详细的系统分析说明文档,但未必要定义它怎么做。• 设计设计阶段中,要为实现分析阶段所产生的新系统的规格说明而制定规划。它着重解决新系统"怎么做"。• 实现实现阶段中,编写组成新系统的程序代码并进行测试,支持系统所需的硬件、软件和网络环境,定义和加载系统所需数据库。• 验收测试在验收测试阶段,需要详细检查系统的所有部分以确保系统按照它所应有的方式工作。• 运行一旦系统通过验收,即可投入运行。也就是系统的用户真正开始使用它。• 维护计算机系统投入运行,就进入了维护阶段。在实现和验收阶段未遇到的错误可能发生,即使概率很小。此时需要立即纠正过来,不然会导致用户的不满。随着用户使用系统,他们意识到实际需要的并不仅仅是以前认为的那些,因此会不断要求改进,这些改进将被逐渐并入系统中。这一阶段的最大挑战是要确保纠错和改进。除了解决问题外不能再导致其他问题发生。• 逐渐作废渐渐地,新系统变得过时了。当然,这并不意味着系统死亡了;在开始变得过时后,它很可能还会实际运行好几年,甚至可能几十年。许多过时的DOS时代的应用系统今天仍在运行。我们所面临的可能是新旧系统并存的局面。一个典型的软件系统开发过程是如何

温馨提示

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

最新文档

评论

0/150

提交评论