第2章C程序开发基础——C语法入门_第1页
第2章C程序开发基础——C语法入门_第2页
第2章C程序开发基础——C语法入门_第3页
第2章C程序开发基础——C语法入门_第4页
第2章C程序开发基础——C语法入门_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、第2章c#程序开发基础c#语法入门 数据类型 常量和变量 运算符和表达式 类型转换 数组和枚举2.1 数据类型 所谓数据类型,就是指数据的种类。在应用程序中,要使数据能被计算机识别并处理,需要将数据分为不同的类型,这样的好处是存储和计算方便。比如在对姓名和地址的处理中需要使用字符,在对货币和数量的处理中又需要使用数字或不同精度的小数,这些数据都是不同类型的数据。如姓名是“张三”为字符型、年龄是25为整型等。为什么要定义数据类型呢?之所以要定义数据类型,是因为计算机是没有思维的,你只有告诉它,他才知道这是什么。比如你定义“int a”,它才知道a是一个整数,否则计算机就识别不出来它是个什么东西而

2、出错。2.1.1 值类型和引用类型概述oc#的数据类型分为值类型、引用类型和指针类型(pointer type)3大类。值类型包括简单类型、结构类型和枚举类型。引用类型包括类类型、接口类型、委托类型和数组类型。指针类型只能用于不安全模式。值类型的数据存储在内存的堆栈中,可以提供快速访问。如果变量是值类型的,这个变量就包含实际数据,在一个独立的内存区域保存自己的值,如果在代码中修改其值后,在内存中会保存修改后的值。c#中大多数基本数据类型如:整型、字符型、浮点型、布尔型等都属于值类型,结构、枚举也属于值类型。引用类型指向存储在内存堆中的数据的指针或引用。与纯粹的地址不同,引用总是指向一个对象,而

3、且这个对象具有指定的类型,并且在堆上分配了地址。字符串、数组、接口、类都属于引用类型。2.1.2值类型oc#语言的值类型包括整数类型、浮点数类型、布尔类型、字符类型等简单类型以及枚举类型和结构类型。下面介绍简单类型,枚举在2.5节中介绍,结构在4.4节中介绍。1. 整数类型 整数类型的变量值为整数。计算机语言提供的整数类型的值总是在一定范围之内。根据数据在计算机内存中所占的位数来划分,c#有8种整数类型的数据,这些数据及其在计算机中表示整数的范围如下表所示。数据类型含义取值范围sbyte有符号8位整数128127(-27271)byte无符号8位整数0255(0281)short有符号16位整

4、数3276832767(2152151)ushort无符号16位整数065535(02161)int有符号32位整数21474836482147483647(2312311)uint无符号32位整数04294967295(02321)long有符号64位整数92233720368547758089223372036854775807(2632631)ulong无符号64位整数018446744073709551615(02641)2. 浮点数类型和十进制类型浮点数类型又称为实数类型,是指带有小数部分的数字。c#支持两种浮点数类型:单精度(float)和双精度(double)。它们的差别在于取值

5、范围和精度不同。浮点数类型数据的特征如下表所示。数据类型含义 取值范围 有效数字位数float 32位浮点数 1.510-453.41038 7double 64位浮点数 5.010-3241.710308 15163. 字符类型在c#中,字符常量是用单引号(即撇号)括起来的一个字符,如a、x、d、?、$等都是字符常量,注意,a和a是不同的字符常量。char c1=x; /将字符x赋给字符型变量c1除了以上形式的字符常量外,c#还允许用一种特殊形式的字符常量,即以“”开头的字符序列。它们一般实现一定的控制功能,并没有一定的字型,这种非显示字符难以用一般形式的字符表示,故规定用这种特殊形式表示,

6、这些形式的字符也称为“转义字符”。4. 布尔类型布尔类型变量只有两种取值:true(代表“真”)和false(代表“假”),并且true值不能被其他任何非0值所代替。bool flag=true; /正确bool flag=1; /错误,不能将一个整型数据赋给布尔类型的变【范例2-1】o已知圆的半径为12厘米,计算圆的面积。o在visual studio 2008中新建c#控制台程序,项目名为circle;在program.cs的main 方法中输入以下代码。完整的代码如下:decimal pi = 3.14159m; /字母m表示数据是decimal类型int r = 12; /定义int型

7、变量r 表示圆的半径decimal s = 0; /用来存放圆的面积s = pi * r * r; /计算圆的面积console.writeline(“圆的半径是0,n圆的面积是:1”,r, s);/在控制台输出结果console.readkey(); /暂停运行,按任意键继续2.1.3引用类型c#中的值类型比较简单,对更加复杂的数据处理效率很低。c#的引用类型主要用来描述结构复杂、抽象能力比较强的数据,它与值类型数据是相并列的。同为引用类型的两个变量,可以指向同一个对象,也可以针对同一个变量产生作用,或者被其他同为引用类型的变量所影响。类类型、接口类型、委托类型和数组类型属于引用类型。下面介

8、绍字符串类型,其他引用类型将在2.5节和第4、5章分别介绍。字符串是一种数据类型,一种类别,即它属于引用类型,还可以视为一个由字符组成的数组。使用string来声明字符串变量,字符串值放在一对双引号中,例如: string name=“tom”;关于字符串的详细操作,将在3.4节详细介绍。 第2章c#程序开发基础c#语法入门 数据类型 常量和变量 运算符和表达式 类型转换 数组和枚举2.2 常量与变量o 常量和变量代表在程序中的数据,是程序运行不可缺少的一部分,下面我们介绍常量和变量的使用。2.2.1 变量变量的声明语法如下。访问修饰符 变量修饰符 变量的数据类型 变量名表其中【访问修饰符】和

9、【变量修饰符】都是可以省略,在4.1节中将给出详细介绍。变量声名和赋值如下所示:private int x; /声明x为整型变量,private可以省略x=10; /变量的赋值,让变量x的值为10string name=”john”;/声明一个字符串变量name,值为john也可以在声明变量的同时赋值,如:int x=10;可以在一行声明多个变量,如:int x=3 , y=8; /不同变量用逗号隔开。变量命名规则:变量名2.2.1 常量常量就是在程序运行过程中其值固定不变的量,即在程序执行期间,常量的值不会发生改变。其格式如下: 访问修饰符号 const 类型 常量表达式 ;其中【访问修饰符

10、号】都是可以省略。常量的修饰符可以是new、public、protected、internal、private。常量的表达式表示常量的名字。如下所示: public const int x=3 , y=8;2.2.3 隐式类型的局部变量隐式类型的局部变量又叫匿名变量,是c#3.0版本中引入的一个新用法,使用var声明。可以用var声明任何类型的局部变量,它只是负责告诉编译器,该变量需要根据初始化表达式来推断变量的类型,而且只能是局部变量。语法如下:var 变量名称=变量值;例如:var i = 8; / 局部变量i作为整型数据被编译var s = “hello c#!”; /局部变量s作为字符

11、串数据被编译o 【范例2-2】 定义常量和变量,熟悉常量、变量的使用。 第2章c#程序开发基础c#语法入门 数据类型 常量和变量 运算符和表达式 类型转换 数组和枚举2.3 运算符和表达式c#语言中的表达式类似于数学运算中的表达式,用运算符把操作对象连接起来的式子就是表达式,表达式在经过一系列运算后得到一个运算结果,结果的类型由参加运算的操作对象的数据类型决定。运算符是表示各种不同运算的符号。在程序设计语言中运算是指对各种数据进行处理。比如表示加法运算就用“+”运算符。2.3.1 一元运算符一元运算符的操作数只有一个。常见的一元运算符包括自加运算符“+”、自减运算符“-”和逻辑非“!”。+可将

12、操作数加1,-可将操作数减1,逻辑非是将表达式的值取反。自加、自减运算符在表达式前和表达式后的结果是不一样的,自加和自减运算符其实是二元运算符的简化写法n+;等价于n=n+1;,c#中还有其他的简化写法,如下表所示。 简化运算符等价表达式简化运算符等价表达式n+和+n2.3.2 二元运算符二元运算符就是需要两个操作数参与的运算符,我们很熟悉的加减乘除四则运算的符号“+”、“-”、“*”、“/”就是二元运算符。如“3+8”,“+”运算符的两个操作数分别是3和8。比较运算符(结果是逻辑性型,即true或 false)比较一个数是否大于另一个数逻辑运算符(结果是逻辑型)&逻辑“与”两个操作数都为真时

13、结果为”真”,其余情况结果为”假”opr1&opr2|逻辑“或”两个操作数至少一个为真时结果为”真”,其余情况结果为”假”opr1|opr2 2.3.3 三元运算符三元运算符要求有三个操作数参与的运算。格式为:操作数1?操作数2:操作数3;其中操作数可以为变量或者表达式。输出结果为:如果操作数1为真,输出操作数2,如果操作数1为假,输出操作数3。三元运算符的输出结果取决于“?”前面的操作数1。例如:n=38 ? 3:8; 输出结果为8。n=38 ? 3:8; 输出结果为3。2.3.4 运算符优先级表达式有多个运算符时,表达式的求值顺序由运算符的优先级决定:先取优先级较高的运算符进行计算,将运算

14、的结果再运用于优先级较低的运算符。也遵从算术运算的“先乘除后加减”这样的规则,可以用圆括号“()”改变运算的优先次序。c#运算的优先级如下,越上面优先级越高,如果一个表达式中出现同一个优先级的运算符,运算顺序取决于其结合性。结合性指运算符在表达式中从左到右或从右到左的运算顺序。运算符组运 算 符优先级特殊运算符() + - new 高 低一元运算符+ - ! -x +x 和数据类型转换乘/除运算符* / % 加/减运算符+ -关系运算符 = 比较运算符= !=and运算符&or运算符|三元运算符? :赋值运算符= += -= *= /= %= 等 第2章c#程序开发基础c#语法入门 数据类型

15、常量和变量 运算符和表达式 类型转换 数组和枚举2.4 类型转换o 在输出结果时经常把整型、浮点型等类型转换为字符串,不同类型的数据进行运算时需要转换为同一类型才能正常计算,所有操作过程中经常涉及到数据类型之间的转换。c中数据类型的转换可以分为两类:隐式转换和显式转换。2.4.1 隐式转换o 隐式转换,就是系统默认的、不需要加以声明就可以进行的转换。例如: short st=250; int i=st; /将短整型隐式转换成整型在c#没有引入var类型的变量之前,隐式转换仅存在于数值类型的数据之间,引入var类型之后,var定义的变量可以实现隐式数据转换。1数值类型数据间的隐式转换o 隐式数据

16、类型转换适用于数值类型的数据之间,如整型数据(int)可以隐式转换为浮点型(float)和双精度型(double)数据;浮点型(float)可以隐式转换为双精度型(double)数据。隐式数据类型转换遵循以下规则才能实现。从左边的类型可转到右边的类型到sbyteshort、int、long、float、double 或 decimalbyteshort、ushort、int、uint、long、ulong、float、double 或 decimalshortint、long、float、double 或 decimalushortint、uint、long、ulong、float、doubl

17、e 或 decimalintlong、float、double 或 decimaluintlong、ulong、float、double 或 decimallongfloat、double 或 decimalcharushort、int、uint、long、ulong、float、double 或 decimalfloatdoubleulongfloat、double 或 decimal2var类型数据隐式转换o var定义的变量的数据类型是由赋值的数据决定的。如var name=”johnson”,此时变量name就是字符串类型,进行了隐式转换。1 var intnum=250; 2 int

18、 i=intnum; /var型变量intnum隐式转换成整型;3 var name=”johnson”;4 string strname=name;/var型变量name隐式转换string型;2.4.2 显式转换显式o 转换又叫强制类型转换,需要用户明确地指定转换的类型。通过显式数据转换,可以把取值范围大的数据转换为取值范围小的数据。显式转换可以发生在表达式的计算过程中,可能引起信息丢失,例如下面代码把float类型的变量pi强制转为int,小数部分的信息就丢失了。 float pi=3.14f; /定义一个单精度的实数 int i=(int)pi; /将单精度强制转换为整型行计算,i的值

19、是3,不是3.14,造成信息丢失2.4.3 使用convert类转换o.net framework提供了很多类库,其中system.convert类就是专门进行类型转换的类,通过convert类提供的方法实现各种基本数据类型间的转换。convert类的常用方法有:方法说明toboolean将指定的值转换为等效的布尔值。 tochar将指定的值转换为 unicode 字符。 todatetime将指定的值转换为 datetime。 todecimal将指定值转换为 decimal 数字。 todouble将指定的值转换为双精度浮点数。 toint16将指定的值转换为 16 位有符号整数。 toi

20、nt32将指定的值转换为 32 位有符号整数。 tostring将指定值转换为其等效的 string 表示形式。 例如:string mystring=”true”;bool mybool=convert.toboolean(mystring);/ 将string转换为boolean型,mybool=truestring newstring=”123456789”;int myint=convert.toint32(newstring); /将字符串转换为数字值,myint=123456789.【范例2-5】隐式转换、显式转换使用举例在visual studio 2008中新建c#控制台程序,

21、项目名为typeconvert;在program.cs的main 方法中输入以下代码。完整的代码如下:1 console.writeline(“隐式、显式转换例子:”);2 short r = 25; /r表示圆的半径;3 int i = r; /将短整型r隐式转换成整型 4 float pi=3.14f; /定义一个单精度的实数5 double s1=pi*i*i; /s1为double型,表示圆的面积6 int s2;7 s2 = (int)pi * i * i; /s2为int型,表示圆的面积8 var name=“johnson”;9 string strname = name; /v

22、ar型变量rname隐式转换string型10 console.writeline(“r=25,圆的面积=0,1”, s1, s2);11 console.writeline(“转换成功!”);第3行,将short类型隐式转为int; 5行int和float类型隐式转为double类型;7行显式把float转为int;89行,var类型隐式转为string类型。代码详解2.4.4 装箱和拆箱o拆箱是把“引用”类型转换成“值”类型,装箱是把“值”类型转换成“引用类型”,是数据类型转换的一种特殊应用。有时某些方法的参数要求使用“引用”类型,而想把“值”类型的变量通过这个参数传入,就需要使用这个操作

23、o例如。1 int n=4; /n是值类型2 object obj=n; /封箱,把任何值类型隐式地转化为object类型 ,其中object为引用类型3 console.writeline(“n的初始值为:0,装箱后的值为1”,n,obj.tostring();4 int m=(int)obj; /拆箱,把一个object类型隐式地转换为值类型;5 console.writeline(“引用类型的值为:0,拆箱后的值为1”,obj.tostring(),m)2.4.5 数值和字符串之间的转 o c#中字符串和数值之间经常互相转换,下面介绍一下二者之间的转换方法。(1) tostring()方

24、法:数值类型的tostring()方法可以将数值型数据转换为字符串;(2) parse()方法:数值类型的parse()方法可将字符串转换为数值型,如字符串转换为整型使用int.parse(string);字符串转换为双精度浮点型使用double.parse(string)等。例如:1 int num1 = 25;2 string str1 = num1.tostring();/num1的tostring()方法将num1转为string赋给str13 string str2 = 38;4 int num2 = int.parse(str2); /int.parse()方法将字符串str2转换

25、为int类型5 string str3 = 21;6 double num3 = double.parse(str3); / double.parse()将字符串转换为双精度浮点型7 string str4 = 56;8 float num4 = float.parse(str4); / float.parse()将字符串转换为单精度浮点型 第2章c#程序开发基础c#语法入门 数据类型 常量和变量 运算符和表达式 类型转换 数组和枚举2.5 数组和枚举o简单数据类型如整型、字符串类型等变量都只能存储一个值,如需要存储多个相同类型的数据, 可以使用数组。使用枚举,可以避免不合理的赋值,使程序更加

26、合理和安全。本节讲解数组和枚举的使用。2.5.1 数组的定义和使用o 数组是一个经过索引的对象集合。一维对象数组的声明如下:数据类型数组的大小或容量 数组名; 其中中的数组的大小或容量可以省略。如下所示:int5 array1 /声明有五个数组元素的数组;或int array1array1 = new int5; /和上面数组声明等价;声明过的数值型数组中的数组元素默认值为零,引用类型数值中的数组元素的默认值为 null,可以在创建数组的同时初始化数组,如下所示:int array1 = new int 1, 3, 5, 7, 9 ; /有5个元素的数组,初值分别为1, 3, 5, 7, 9或

27、int array1 = new int5 1, 3, 5, 7, 9 ; / 数组的大小和数组元素的个数必须相等或int array1 = 1, 3, 5, 7, 9;二维数组o 声明二维数组的语法是: 数据类型 , 数组名; 例如:1 int, array2d = new int2,3; / 声明二维数组array2d 2 int, array2d2 = 1, 2, 3, 4, 5, 6 ; /声明二维数组array2d2的同时初始化32.5.2 array类osystem.array类提供了创建、操作、搜索和排序数组的许多静态方法供程序调用,它是所有数组类型的抽象基类,不能直接从syst

28、em.array显示地派生自己的数组类型。array类常用的方法如下:方法名功能clear清除将 array 中的元素值copy将一个 array 的一部分元素复制到另一个 array 中copyto将当前一维 array 的所有元素复制到指定的一维 array 中。find搜索与指定谓词定义的条件匹配的元素,返回整个 array 中的第一个匹配项。findall检索与指定谓词定义的条件匹配的所有元素。findindex搜索与指定谓词定义的条件匹配的元素,返回 array 或其某个部分中第一个匹配项的从零开始的索引。getlength获取array 的指定维中的元素数。getvalue获取当前 array 中指定元素的值。indexof返回一维 array 或部分 array 中某个值第一个匹配项的索引。initialize通过调用值类型的默认构造函

温馨提示

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

评论

0/150

提交评论