C#程序设计.doc_第1页
C#程序设计.doc_第2页
C#程序设计.doc_第3页
C#程序设计.doc_第4页
C#程序设计.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

第一个C#程序:启动VS2005,新建项目C# Windows控制台应用程序输入名称: Test1选择文件夹OK.自动在指定的文件夹下创建项目Test1,主文件:test1.sln, test1.csproj, Program.cs(C#源程序清单,扩展名cs)等。项目属性调试选中:非托管代码调试。sing System;using System.Collections;using System.Collections.Generic;using System.Text;namespace Test1 class Program static void Main() / 程序主体程序开始 double a = GetReal(Enter a=); / 输入三个数据 double b = GetReal(Enter b=); double c = GetReal(Enter c=); if (Math.Abs(a) 1e-10) / 判别数据合理性 Console.WriteLine(nError data!); return; double delta = b * b - 4 * a * c; / 根判别式 if (delta 0) Console.WriteLine(nNone Real Roots!); return; double x1 = (-b + Math.Sqrt(delta) / (2*a); double x2 = (-b - Math.Sqrt(delta) / (2*a); Console.WriteLine(nx1=0,x2=1, x1,x2); / End of Main / Define customed Mathod: Enter Real Number from Console static double GetReal(string s) Console.Write(s); return Convert.ToDouble(Console.ReadLine(); / End Of Program / End of Namespace of test1命名空间说明(类似于C语言中的#define 等。它是C#必不可少的说明。本程序的命名空间定义了一个名为Program的类C#程序的可执行的第一个方法:(类似于函数、过程、子程序概念)调用自定义的方法:GetReal输入三个实数,分别赋于变量a,b,c。判别:命令行输出信息返回计算根判别式计算二个根值输出结果用户自定义方法:程序归纳特点:1、 程序起首使用系统预定义的命名说明,常用: System, System.Collections, System.text等;using相当于C中#include, 2、 注意区分大小写,变量大小写意义不同;3、 每个语句后用分号“;”结尾4、 注意语句组中使用花括号:的配对使用,相当于Pascal语言的Begin及End5、 使用变量必须说明类型(注意与VB的区别,VB中可以使用默认类型)6、 C#中方法概念相当于VB中的过程或函数,C中的函数;7、 C#程序必须包括一个Main方法(相当于C中Main()主函数)8、 类与对象一组相同数据结构与相同操作的对象的集合体:数据+操作方法=类。例如:学生:具有一些共同特征,则可将学生定义为类,具体一个个学生,可以定义成对象。因此,类是具有抽象特征的定义,对象是类的实例。它的使用是:先定义类,然后再由类定义对象。也可定义类后,直接使用,而不用对象。这种类称为静态类,用关键字节:Static 表示。9、 常用输入输出:Console.Write(输出项目)将输出项目在控制台上输出,Console.WriteLine(表达式),整行输出、Console.Read()从键盘上读入单个字符、 Console.ReadLine()从键盘上读入一整行字符。10、 注释方式:/*注释内容*/,或 /注释内容11、 程序总体结构:using 系统预定义命名空间namespace class static void main() / End of Main()其它方法定义; class / End of namespace说明:其它类可以在不同的文件内定义操作:(1) 打开资源管理器(2) 选中项目名(3) 右键,打开快捷菜单加入(4) 选择添加类,输入名称(5) OK。这些类名可以更改!第一章 C#语言基础第一节 数据类型一、数据类型分类总体可分成二大类:值类型(取值进行运算)与引用类型(取存贮地址)二、常量表示:整型(如123, 789等)、实型(123.568, 1.26e-5)、字符型(如A,P)、字符串(如:”windows XP”)、逻辑型:只有二个:true, false.三、变量定义:如:double x=1.5; 表示定义一个名为x的变量,初始取值为1.5;变量 一组被命名的存贮单元。四大要素:可命名、一组存贮单元、类型、初始化1、 命名与常规相同,注意变量的可读性,变量起首的第一字母的含义。可读性:如NumberOfVariable,表示某个变量,含义是变量个数;如Length长度, Alpha角度起首字母:bIsRunningOK, 表示一个逻辑型变量(注意起首字母b),cKeyPressed表示某个字符型变量这些规则统一称为:匈牙利命名规则。2、 类型(值类型):常用整型:(1) int: 32位(4字节)有符号的整型变量,System.Int32; 相关:uint: 无符号32位整数 (2) Long: 64位(8字节)有符号的整型变量,System.Int64,相关:ulong:无符号64位整数(后缀:L)(3) short: 16位(2字节)有符号的整型变量, System.Int16,相关:ushort: 无符号16位整数(4) sbyte: 8位(单字节)有符号数, System.Sbyte, 相关:byte: 无符号8位整数常用实型:(5) float: 单精度32位实型,7位有效数字, System.Single: (后缀:f)(6) double: 双精度64位实型,15位有效数字,System.Double, 适用于科学计算!(后缀:D,省略默认)(7) Decimal: 高精度128位实型,28位有效数字,System.Decimal, 适用于会计财务计算!(后缀:m)逻辑型:(8) bool: 字符类型:(9) char: 单字符(单个字节)保留字System命名空间中的名字字节数取值范围sbyteSystem.Sbyte1-128127byteSystem.Byte10255shortSystem.Int162-3276832767ushortSystem.UInt162065535intSystem.Int324-21474836482147483647uintSystem.UInt32404292967295longSystem.Int648-92233720368547758089223372036854775808ulongSystem.UInt648018446744073709551615charSystem.Char2065535floatSystem.Single43.4E-383.4E+38doubleSystem.Double81.7E-3081.7E+308boolSystem.Boolean(true,false)decimalSystem.Decimal16正负 1.010-28 到7.91028之间(10) enum: 枚举类型(列表数据)如,enum EntityName Line, Circle, Arc, Text, PolyLine, Ellipse, Spline;默认基础类型为整型(int), 不能是字符型使用:EntityName.Line,表示枚举类型Entity中的第一个值Line,位置序号为0。随后依次取。改变默认序号:enum EntityName Line=8, Circle, Arc, Text, PolyLine, Ellipse, Spline;一般方式:enum 列表值;3、 变量定义与初始化:一般格式: =初始化;如: int x, int x=1, y=2, z; 与常规语言的区别是,即时定义、即时使用;常规格式:C#风格:Double Alpha,beta, Length;Alpha=10*3.1415926/180;Length=Math.Sqrt(x*x+y*x);Double alpha=10*3.1415926/180;Double Length=Math.sqrt(x8x+y*x);4、 强迫类型转换:如double x=12.0, y=6.0; double p=(int)(x+y); / 表示将X+Y运算值转换成int类型存贮但必须注意数据大小范围!5、 引用类型由引用类型定义的变量称为对象。一旦说明成引用类型后,是按地址取数据。(相当于C中指针概念)如: object a=100; 表示定义一个引用型变量 a,初始取值为整数100; 变量a存贮单元内存贮的不是数据库100,而是数据100的存贮单元的地址int x=100; 变量X对应一组存贮单元,其存贮单元内存贮的就是100。引用类型分类:class、delegate、Interface、 object , string (1) string: 字符串类型:如: string myPrompts=”nEnter point:”; 注意C#中几乎任何变量都有一个成员:ToString(), 表示将该变量转换成字符串!(2) object: 是一种最基本、最底层的类型,所有数据类型都是由它派生的,相当于VB中的Variant类型Int x=100;Object y=x; / boxingInt j=(int)y; / unboxing相关概念:装箱(boxing)与拆箱(unboxing)概念:装箱将一个值类型变量或数据传送给予Object型变量中。拆箱将引用型变量数据赋于值变量:一般不随意使用Object及Boxing(unboxing)功能!增加内存开销,及CPU占用率。Object类型相当于C/C+中的指针!6、 变量的作用范围(生命周期)第二节 运算及表达式:一、算术运算符:+,- *,/, 注意二个整数作除法运算,%取余数二、字符串:+三、特殊运算符:+,-, +=,-=,*=,/=四、关系逻辑运算: 逻辑运算:&, |,!, 关系运算:=, !=, =, y)?12:18;六、常用数学函数: Math.如:Math.Sqrt, Math.Sin, Math.Cos等;使用智能向导输入方式即可得到相应函数。七、成员运算符”.”: 如Console.Writeline(), 表示调用类console中成员方法WriteLine八、命名空间限定符”:” : 如,MyNameSapce:System.Console第三节 语句一、分支语句: if/else二、开关语句: switch/case : 相关:Break三、循环: for, do/while, while, foreach 相关: Continue特殊性:(1)for (int k=0; k100; k+) 其中变量k的作用范围是在该for语句内!(2)对于数组,一般使用内定属性Length。如int a=2,3,4,5,6,7,8;for (int k=0; ka.Length; k+) /不要写成: for (int k=0; k7; k+) (3)foreach ( in ).五、using语句释放对象占用的资源。如代码如下: using (ClassC tmp= new ClassC() /建立对象tmp ; / 使用对象tmp / 该代码段结束,自动释放对象tmp。 当执行了这段估码后,自动释放对象tmp, 并进行异常检查。在引用系统预定类库时,经常使用这一格式。四、异常处理:try/catch, throw第五节 数组与结构一、一维数组1、数组概念:包含若干相同数据类型的一批变量。如数组Length: 包含Length0, Length1,.,Length9这十个变量定义方法: double Link=new Double 10; 表示定义一个名为Link、具有10个的双精度元素的数组一般: =new 容量;其中,数据类型可以是前述各种数据类型,包括值类型、引用类型等; 数组名称,与变量的命名规则相同,不可与已有的变量名称重合; 容量,表示数组具有的元素的个数。 New: 表示开设存贮空间。方式1:int x=new int 100; /常规方法方法3:定义数组立即对元素进行初始化Int x=new int 5 2,3,4,5,6;方式2:int x; / 先定义,后初始化; x=new int 100;简化:int x=2,3,4,5,6; / 省略容量说明 使用:按下标使用如, Double r=10.45, alpha=45*Math.PI/180.0;Double x=new double 10, y=new double 10;for (int i=0; i10; i+)xi=r*Math.Cos(Alpha);yi=r*Math.Sin(Alpha); 注意:数组下标的变化范围是:0至容量-1。不能超越这一范围! 数组的容量用:. Length表示。二、二维数组,它是矩阵在计算机中的表示。 Double , A=new double 10,6; / 定义了一个二维数组,10行6列。初始化:int , x=new int, 1,2,3,3,4,5,6,7,8; / 定义了一个3行3列的数组,并进行初始化。使用元素: x2,4, 第一个下标为行下标,第二个下标为列下标。三、交叉数组具有不同列数的二维数组。如,double x=new double 3; / 定义了一个3行的二维数组,每行列数不定。然后, x0=new double 3; / 第一行具有3列;x1=new double 5; / 第二行具有5列;x2=new double 12; / 第三行具有12列; 三、动态数组1、问题引出:前述数组定义,必须规定容量及数据类型。该容量可以有下列方式给定。常规方式:用一个已定义的变量来规定数组容量Double x;Int n=100;X=new double n;/ 数组x的容量是一个已有的变量。一旦定义,不能更改。常规方式的优点是容量是一个在程序中规定的变量值,其缺点是定义后不能更改。能否在程序中对容量加以更改?这就是动态数组问题。2、解决方法一: ArrayList ; 如ArrayList MyAry; 定义了一个容量不定的数组,数据类型也不定。 使用ArrayList,必须预先使用命名空间:System.Collections。 向该数组加入数据, MyAry.Add(表达式); 使用元素:MyAry下标,删除元素:MyAry.Remove下标; 获得数组的容量:MyAry.Count等。使用智能向导可查阅具体方法。 本方式简单,但缺点是,大量 Boxing及Unboxing工作。因为数据类型是Object引用型。3、解决方法二:List x=new List (); 定义了一个类型为int的动态数组(线性表)。使用方法同上。List vec=new List();Double x= Convert.ToDouble(Consloe.ReadLine();While (x=0) vec.Add(x);x=Convert.ToDouble(Consloe.ReadLine();/ 定义动态数组/ 读入数据;/ 当X为正值时继续;/ 加入数组Vec中/ 继续读入。四、结构对数组的改进,因为数组要求相同数据类型,能否将不同数据类型的变量组合在一起?结构!例如,描述一个2D直线: 起点坐标(Double)、终点坐标(Double)、颜色(int)、可见性(bool)。不能简单的用一个数组表示。定义结构类型:定义结构变量Struct Linedouble StartX, StartY;Double EndX,EndY;Int Color;Bool Visible;Line MyLineA=new Line();Line MyLineB=new Line(); /定义二条直线A,BLine LineSet=new Line100; / 固定数组List LineLib =new List (); / 动态数组定义结构类型:定义结构变量(数组)Struct 成员A; 成员B;. ;/ 定义简单变量 =New 容量只要将结构类型视作前述各简单类型,定义方式相同结构中还可加入方法对结构数据进行操作的程序段, 由此引出类及对象了。第二章 面向对象的程序设计第一节 概述1、类与对象的概念 类将一组具有相同的数据结构及相应操作组合在一起的一种数据类型;其中数据结构称为成员、操作自然数为方法。因此,类=数据+方法。 对象类的实例化。 如平面坐标系中一个点,它们具有一些相同特征:坐标,及相应一些操作:平移、旋转定义Point类:Class Point Double X,Y;Public Point(double x0, double y0) X=x0; Y=y0;Public Point() X=0; Y=0;Public Point Move(double DeltaX, double DeltaY) Point Pt=new Point(); Pt.X=X+DeltaX; Pt.Y=Y+DeltaY; Return Pt;Public Point RotateBy(Point p0, Double Angle) Point Pt=New Point(); Double cosa=Math.Cos(Alpha); Double sina=Math.Sin(Alpha); Pt.X=X*cosa - Y*sina+p0.X-(p0.X*cosa+p0.Y*sina); Pt.Y=X*cosa + Y*sina+p0.Y+(p0.X*cosa-p0.Y*sina); Return Pt; /类定义开始,Point为类名/数据成员,X,Y/初始化方法:根据x0,y0值对Point赋值/初始化方法,默认值为原点/平移方法,返回一个点/绕指定点的旋转方法;/P0转动中心、Angle转角使用类:Point P1=New Point(12.5,23.6); / 用类Point定义对象P1点,初始坐标:12.5, 23.6;Point P2=New Point(); / 用类Point定义对象P2点,初始坐标为0,0;Point P3=P1.Move(5.0, 3.2); / 将点P1移动5.0, 3.2,并赋于点P3Point P4=P1.RotateBy(P2, 45*Math.PI/180.0); / 将点P1绕P2旋转45。类具有的特点:(1) 抽象性抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。(2) 继承继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。(3) 封装性封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。(4) 多态性多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、面向对象的程序设计技术l 常规程序设计的思想:面向过程、面向问题,程序的模块化、功能化设计,数据与功能分离l OOP技术:将数据与对数据的操作视为一个有机整体,采用数据抽象与信息隐蔽技术使对问题的求解简单化、清晰化,符合人们常规思维习惯,有助于软件重复使用及开发。3、对象模型技术(OMT)美国通用电气公司提出的一种软件开发技术。 OMT技术将系统分析时得到的信息构造在三个模型中:对象模型、功能模型、动态模型其中,对象模型需要对谁做工作( Who, 变量成员)、功能模型需要做什么?(What,方法成员)、动态模型何时做(When,事件)第二节 类与对象1、定义类: Class ; . .; (参数表) ; .; 类中数据成员,又称域、成员变量;其中类与成员的属性(常用): Public: 公有, 对访问无任何限制。 Private: 私有,仅限制在类内部可以使用;默认方式! Protected: 保护,只能在所在类及派生类内使用;其它: Abstract: 抽象类,不允许被用作建立类的实例(对象) Seal: 密封类,不允许被继承Public Class Vectorprivate int m_length;Private double m_data;Public Vector(int n) data=new double n; for (int I=0;In;I+) m_dataI=0.0; m_length=n;public int Length() return m_length; Public double dot(Vector a) if (a.Length()!=m_length) return 0; double s=0.0; for (int I=0; Im_length; I+) s+=m_dataI*a.m_dataI; return s;2、建立对象 ; 或 =New ();常用方式! 使用对象成员,注意,., 其成员可以是数据成员,方法成员,在类外使用必须是Public.3、静态类无需创建对象,就可直接使用的类。使用关键字:static静态类示例:public static class vec public static double absmax(double x) double maxv = Math.Abs(x0); for (int j = 1; j maxv) maxv = Math.Abs(xj); return maxv; public static double dot_product(double x, double y) double sum = 0; for (int j = 0; j x.Length; j+) sum += xj * yj; return sum;静态类VEC静态方法AbsMax静态方法:Dot_product例如:double s=vec.dot_product(a,b); 二个一维数组对应元素乘积之和。特点:(1) 定义时,使用关键字:Static(2) 使用时,直接使用: .(参数)(3) 不能被继承(4) 不管数据成员还是方法,一律是静态。一般用于一些简单计算过程,相当于C、VB中的函数、过程、子程序!4、数据成员注意类型、静态、常量方式(const)5、构造函数由类定义对象时使用的初始化函数格式: public (参数表) 函数体;注意:该构造函数无返回类型、不能在函数体内使用Return、可以同名构造函数(但参数不同:个数不同、类型不同)。特殊的构造函数:拷贝构造函数:参数类型本身即为所定义的类。如class Point double x,y; public point(Point p) / 拷贝构造函数 x=p.x; y=p.y; 构造函数的反函数:析构函数,用于释放对象时,程序所做的回收工作,一般内存处理(C#自动处理)第三节 方法1、方法概念:类或对象中对数据的操作方法,相当于VB,C中的函数或过程。它是类中用于执行计算或处理其它行为的成员(函数成员)2、定义: 实例一:实例二:静态方法/ 定义一个方法Scale,返回类型是Point,参数是factorPublic Point Scale(double factor) Point Pt=new Point();Pt.X=X*factor;Pt.Y=Y*factor;Return Pt;Public static dot(double x, double y)double sum=0.0for (int k=0;kx.Length; k+) sum+=xk*yk;return sum;一般格式: (参数表) ; 3、名称:可以同名,但后随参数应当不同,同名方法,称为重载Overload4、返回类型:前述数据类型,也可类名、数组名。特殊: void 表示无返回值,当有返回值时,程序体内至少有一个return 。5、参数表:4种类型参数:值类型参数、对象参数、数组型参数、输出/引用参数2种形态:形参(定义方法时规定的参数)、实参(调用方法时使用的参数)(1) 值参数将实参(常数或变量)的值传递给形参,在方法中该参数的改变不影响到方法外部。(2) 对象参数将对象的存贮地址传递给实参,方法中对该参数的改变影响到方法外部!(3) 数组参数数组作为参数,定义方式: ,在方法对数组元素进行改动,将改变结果带到方法外部。(4) 输出与引用参数在形参与实参前加入关键字:out/ref 表示指定是输出参数或引用参数其区别是:out : 实参只要定义,不必初始化;ref: 实参不仅要定义且必须初始化。使用规则:ref通用, 当需要从方法传出处理结果,而而预先不知结果值,可以使用out.实例一:值参数例class MyClass private int value; public MyClass(int x) value=x; public int Add(int x) x+; return x;class Program static void Main(string args) MyClass test = new MyClass(10); int x0=12; int x = test.Add(x0); / x0作为值参数传递 Console.WriteLine(x0=0, x0); Console.WriteLine(x=0, x);运行结果:x0=10x=11实例二:对象作为实参在实例一的MyClass中增加一个方法:public int sub(MyClass x) x.value-; return x.value;class Program static void Main(string args) MyClass A = new MyClass (10); MyClass B = new MyClass (20); int x = A.sub(B); Console.WriteLine(x=0 ,x);Console.WriteLine(B.Value=0,B.GetValue(); return;运行结果: x=19 B.Value=19;实例三,数组作为参数class Program public static int sum(int x) int sum = 0; for (int j = 0; j x.Length; j+) sum += xj; xj=xj+10; /考察变量改变? return sum; static void Main(string args) int x = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; int s = sum(x); Console.WriteLine(sum=0 , s); for (int k=0; kx.Length ; k+) Console.WriteLine(x0=1,k,xk); return; 实例四:ref使用class Program / 注意在形参前加入关键字refstatic void swap(ref int x, ref int y) int t=x; x=y; y=t; static void Main(string args) int x = 10, y = 20; / 定义且初始化 Console.WriteLine(initial x=0,y=1,x,y); swap(ref x, ref y); /实参前也必须入ref Console.WriteLine(swap: x=0,y=1,x,y); return;运行结果:Initail x=10,y=20;Swap: x=20,y=10;/ 可变参数的定义与使用。class Program static int Max(params int list) int maxv = System.Int32.MinValue; for (int j = 0; j list.Length; j+) if (maxv listj) maxv = listj; return maxv; static void Main(string args)int maxv=Max(2,3,5,12,6); Console.WriteLine(Max=0, maxv); return; 运行结果:Max=12.(5) 可变数目的参数使用: 关键字节Params params 注意:由params引出的参数必须位于所有参数之后!观察与一般数组的区别!(调用方式不同, 数组必须用数组,而此处可以使用若干干顺序数据!)第四节 继承1、继承概念使用已有的类作为基础来建立新类。此处基础类称为父类,派生出的类称为继承类。 如,直齿圆柱齿轮作为一个类,它有一些属性(模数、齿数、压力角)与方法(计算齿顶圆、分度圆、齿根圆直径等),则斜齿圆柱齿轮可视为直齿圆柱齿轮的派生类,只要再加入属性:螺旋角Beta, 且将若干方法加以改进即可。再如,平面坐标系中的点Point,具有X,Y坐标,以及相关方法。则机构运动学中的平面运动副可以从点类中继承,因为除了XY坐标外,平面运动副还有联接方式:转动副、移动副、高副等。如,/定义类APublic class Apublic A() ;/定义类B,继承类Apublic Class B: Apublic B() ;. 2、定义继承 一般格式:Paulic class : / 只能从一个基类派生 ;这样,只要基类中的Public或者说Protected性质的数据成员及方法都能在派生类中使用!namespace Test2 class CGear protected double m; protected double alpha; protected int z;protected double hac, cac;protected double Dtor=0.0174533; public CGear() alpha = 20*Dtor; hac = 1.0; cac = 0.25; public CGear(double m, int z) this.m = m; this.z = z; alpha = Dtor(20); hac = 1.0; cac = 0.25; public double D() return m*z; public double Da() return m*z+2*hac* m; public double Df() return m * z - 2 * (hac + cac) * m; class CBGear : CGear private double beta; private double m; public CBGear() public CBGear(double m, int z, double beta) this.beta = beta*Dtor; this.m = m; base.m = m / Math.Cos(this.bate); base.z = z; hac = 1.0 * Math.Cos(this.beta); cac = 0.25 * Math.Cos(this.beta); class Program static void Main(string args) CGear g1 = new CGear(4, 25); Console.WriteLine(nG1: D=0,Da=1,Df=2, g1.D(), g1.Da(), g1.Df(); CBGear b1 = new CBGear(4, 25, 10); Console.WriteLine(nB1: D=0:#.#,Da=1:#.#,Df=2:#.#, b1.D() , b1.Da(), b1.Df(); 运行结果:G1: D=100,Da=108,Df=90B1: D=101.543,Da=109.543,Df=91.5433、多态性:类的多态性:多态就是同一个方法在不同的类中有不同的实现体包括方法重写(Over

温馨提示

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

最新文档

评论

0/150

提交评论