第 章 C 程序设计基础 标识符 C 中数据类型_第1页
第 章 C 程序设计基础 标识符 C 中数据类型_第2页
第 章 C 程序设计基础 标识符 C 中数据类型_第3页
第 章 C 程序设计基础 标识符 C 中数据类型_第4页
第 章 C 程序设计基础 标识符 C 中数据类型_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

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

文档简介

第2章C#程序设计基础

2.1标识符2.2C#中数据类型2.3C#中的变量和常量2.4结构类型和枚举类型2.5C#运算符和表达式2.6C#中常用类和结构2.1标识符C#的标识符名称必须遵守以下规则:(1)所有的标识符只能由字母、数字和下划线组成,且第一个字符必须为字母或下划线。(2)标识符中不能包含空格、标点符号、运算符等其他符号。(3)标识符严格区分大小写。(4)标识符不能与C#关键字名相同。(5)标识符不能与C#中的类库名相同。a12_c√1abc

2.2C#中数据类型C#中数据类型分类2.2.1值类型值类型的变量内含变量值本身,C#的值类型可以分为简单类型、结构类型和枚举类型。下面仅介绍简单类型。1.整数类型类型标识符说明占用位数取值范围示例sbyte带符号字节型8-128~127sbytei=10;byte无符号字节型80~255bytei=10;short带符号短整型16-32,768~32,767shorti=10;ushort无符号短整型160~65,535ushorti=10;int带符号整型32-2,147,483,648~2,147,483,647inti=10;uint无符号整型320~4,294,967,295uinti=10;uinti=10U;long带符号长整型64-9,223,372,036,854,775,808~9,223,372,036,854,775,807longi=10;longi=10L;ulong无符号长整型640~18,446,744,073,709,551,615ulongi=16;ulongi=16U;ulongi=16L;ulongi=16UL;2.实数类型类型标识符说明取值范围示例float单精度浮点数±1.5×10-45

~3.4×1038,精度为7位数floatf=1.23F;double双精度浮点数±5.0×10-324

~1.7×10308,精度为15到16位数doubled=1.23;decimal固定精度的浮点数1.0×10-28到~7.9×1028的之间,精度为28至29位有效数字decimald=1.23M;3字符类型

例如,可以采用如下方式字符变量赋值:

charc='H'; //字符Hcharc='\x0048'; //字符H,十六进制转义符(前缀为\x)

charc='\u0048'; //字符H,Unicode表示形式(前缀为\u)

charc='\r'; //回车,转义字符在表示一个字符常量时,单引号内的有效字符数量必须且只能是一个,而且不能是单引号或者反斜杠(\)。4.布尔类型布尔类型数据用于表示逻辑真和逻辑假,布尔类型的类型标识符是bool。true:真值false:假值boolb1=true;boolb2=false;5.结构类型5.1结构类型的声明结构类型由若干“成员”组成的。数据成员称为字段,每个字段都有自己的数据类型。声明结构类型的一般格式如下:

struct结构类型名称

{ [字段访问修饰符]数据类型字段1; [字段访问修饰符]数据类型字段2; ... [字段访问修饰符]数据类型字段n;};例如,以下声明一个具有姓名和年龄的结构体类型Student:structStudent //声明结构类型Student{publicintxh; //学号

publicstringxm; //姓名

publicstringxb; //性别

publicintnl; //年龄

publicstringbh; //班号};5.2结构类型变量的定义声明一个结构类型后,可以定义该结构类型的变量(简称为结构变量)。定义结构变量的一般格式如下:结构类型结构变量;

例如,在前面的结构类型Student声明后,定义它的两个变量如下:

Students1,s2;5.3结构变量的使用1)访问结构变量字段访问结构变量字段的一般格式如下:

结构变量名.字段名例如,s1.xh表示结构变量s1的学号,s2.xm表示结构变量s2的姓名。结构体变量的字段可以在程序中单独使用,与普通变量完全相同。2)结构变量的赋值结构变量的赋值有两种方式。结构变量的字段赋值:使用方法与普通变量相同。结构变量之间赋值:要求赋值的两个结构变量必须类型相同。例如:

s1=s2;这样s2的所有字段值赋给s1的对应字段。【例2.2】设计一个控制台程序说明结构类型的应用。usingSystem;namespaceProj2_2{classProgram{structStudent//结构类型声明应放在Main函数的外面

{ publicintxh; //学号

publicstringxm;//姓名

publicstringxb; //性别

publicintnl; //年龄

publicstringbh; //班号

}

staticvoidMain(string[]args){Students1,s2; //定义两个结构类型变量

s1.xh=101; s1.xm="李明"; s1.xb="男"; s1.nl=20; s1.bh="07001"; Console.WriteLine("学号:{0},姓名:{1},性别:{2},年龄:{3},

班号:{4}",s1.xh,s1.xm,s1.xb,s1.nl,s1.bh); s2=s1; //将结构变量s1赋给s2 s2.xh=108; s2.xm="王华"; Console.WriteLine("学号:{0},姓名:{1},性别:{2},年龄:{3},

班号:{4}",s2.xh,s2.xm,s2.xb,s2.nl,s2.bh);}}}5.结构类型

structContact{publicstringname;publicstringphone;publicstringaddress;}结构名结构体成员关键字5.结构类型

structContact{publicstringname;publicstringphone;publicstringaddress;}结构名结构成员关键字结构:简单值的共同组合Contactc1=newContact()=“王小明”;c1.phone=;创建结构对象使用结构成员6.枚举类型枚举类型也是一种自定义数据类型,它允许用符号代表数据。枚举是指程序中某个变量具有一组确定的值,通过“枚举”可以将其值一一列出来。6.1枚举类型的声明枚举类型使用enum关键字声明,其一般语法形式如下:

enum枚举名{枚举成员1,枚举成员2,

}其中,enum是结构类型的关键字。例如,以下声明一个名称为color的表示颜色的枚举类型:

enumColor{Red,Green,Blue,White,Black}在声明枚举类型后,可以通过枚举名来访问枚举成员,其使用语法如下:枚举名.枚举成员6.2枚举成员的赋值在声明的枚举类型中,每一个枚举成员都有一个相对应的常量值,默认情况下C#规定第1个枚举成员的值取0,它后面的每一个枚举成员的值按加1递增。例如,前面Color中,Red值为0,Green值为1,Blue值为2,依次类推。可以为一个或多个枚举成员赋整型值,当某个枚举成员赋值后,其后的枚举成员没有赋值的话,自动在前一个枚举成员值之上加1作为其值。例如:

enumColor{Red=0,Green,Blue=3,White,Black=1};则这些枚举成员的值分别为0、1、3、4、1。6.3枚举类型变量的定义声明一个枚举类型后,可以定义该枚举类型的变量(简称为枚举变量)。定义枚举变量的一般格式如下:枚举类型枚举变量;

例如,在前面的枚举类型Color声明后,定义它的两个变量如下:

Colorc1,c2;1)枚举变量的赋值枚举变量赋值的语法格式如下:枚举变量=枚举名.枚举成员例如:

c1=Color.Red;2)枚举变量的访问枚举变量像普通变量一样直接访问。6.枚举类型

enumWeekday{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}枚举名关键字枚举:简单值的排他组合Weekdayw1=Weekday.Sunday;Console.WriteLine(w1);w1=w1+1;枚举对象枚举成员加法操作赋予某个成员值

Console.WriteLine();//相当于换行向控制台输出的几种方式

Console.WriteLine(要输出的值);//输出一个值

Console.WriteLine("格式字符串",变量列表);stringcourse="C#";

Console.WriteLine(course);Console.WriteLine("我的课程名称是:"+course);Console.WriteLine("我的课程名称是:{0}",course);演示示例2:向控制台输出示例2关键代码回顾:staticvoidMain(string[

]args){stringcourse="C#";//课程名称

……

Console.WriteLine(

"我的课程名称是:{0}"

,

course

);Console.ReadLine();}{0}:占位符依次使用{0}、{1}、{2}…与变量列表中的变量对应可以在字符串中使用\n、\t来控制换行或制表格式字符串变量列表读取一行,返回一个字符串

string类型读取整数stringname=Console.ReadLine();

intage=int.Parse(Console.ReadLine());Console.ReadLine();

int.Parse(Console.ReadLine());表示将字符串转换为整数简单综合应用输入2名学员的信息,包括姓名、年龄,输出到控制台要求:两种方式输出第一种,使用+连接输出第一个学员的信息第二种,使用格式字符串输出第二个学员的信息演示示例3:输入输出综合应用示例3代码分析//输入第一个学员信息Console.WriteLine("请输入第一个学员的姓名:");name1=Console.ReadLine();Console.WriteLine("请输入第一个学员的年龄:");age1=int.Parse(Console.ReadLine());//输入第二个学员信息//……//输出学员信息Console.WriteLine("第一个学员的姓名"+name1+",年龄"+age1+"岁");Console.WriteLine("第二个学员的姓名{0},年龄{1}岁",name2,age2);+连接输出格式字符串输出示例3关键代码回顾:输入staticvoidMain(string[]args){intnum1;intnum2;num1=int.Parse(Console.ReadLine());num2=int.Parse(Console.ReadLine());Console.WriteLine("{0}+{1}={2}",num1,num2,num1+num2);}输入2个整数,输出两个数的和usingSystem;namespaceL2_1{classProgram

{staticvoidMain()

{Console.Write("请输入一个字符:");//charch=Console.ReadKey().KeyChar;charch=Console.ReadLine()[0];Console.WriteLine("\r\n字符{0}的ASCII代码为a{1}",ch,(int)ch);

}

}}输入1个字符,输出该字符的ASCII码类接口委托数组classContact{publicstructAddress{publicstringcity;publicstringstreet;publicintnumber;}publicstringname;publicboolgender;publicstringphone;publicAddressaddress;}类名类的成员关键字类:一组同类对象的抽象描述嵌套成员引用类型类:一组同类对象的抽象描述引用类型Contactc1=newContact()=“王小明”;c1.phone=;创建类的对象使用类的成员2.2.2引用类型引用类型也称为参考类型。和值类型相比,引用类型的变量不直接存储所包含的值,而是指向它所要存储的值。类似C中的指针。1.object类

object是C#中所有类型(包括所有的值类型和引用类型)的基类,C#中的所有类型都直接或间接地从object类中继承而来。因此,对一个object的变量可以赋予任何类型的值。

floatf=1.23;objectobj1; //定义obj1对象

obj1=f;objectobj2="China"; //定义obj2对象并赋初值2.string类

C#还定义了一个string类,表示一个Unicode字符序列,专门用于对字符串的操作。同样,这个类也是在.NETFramework的命名空间System中定义的,是类System.String的别名。字符串在实际中应用非常广泛,利用string类中封装的各种内部操作,可以很容易完成对字符串处理。例如:

stringstr1="123"+"abc";//"+"运算符用于连接字符串

charc="HelloWorld!"[1];//"[]"运算符可以访问string中的单个字符,c='e'stringstr2="China";stringstr3=@"China";//字符串的另一种表示形式,用@引起来。

boolb=(str2==str3); //"=="运算符用于两个字符串比较,b=trueC#中的命名空间usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceHelloACCP{classProgram{

staticvoidMain(string[

]args)

{

//…

}}}系统定义的命名空间自定义的命名空间命名空间:一种组织代码的方法代码及内容唯一标识引用命名空间usingSystem;//引用

System命名空间namespaceHelloACCP{classProgram{

staticvoidMain(string[

]args)

{

Console.WriteLine("HelloACCP.NET");

}}}//不引用System命名空间//usingSystem;

namespaceHelloACCP{classProgram{

staticvoidMain(string[

]args)

{

//Console.WriteLine("HelloACCP.NET");System.Console.WriteLine

("HelloACCP.NET");

}}}如果不使用using,要使用完全限定名称WriteLine()方法的完全限定名称使用using引用命名空间2.2.3类型转换数据类型在一定条件下是可以相互转换的,如将int型数据转换成double型数据。C#允许使用两种转换的方式:隐式转换和显式转换。1.隐式转换隐式转换是系统默认的、不需要加以声明就可以进行的转换。源类型目标类型sbyteshort、int、long、float、double、decimalbyteshort、ushort、int、uint、long、ulong、float、double、decimalshortint、long、float、double、decimalushortint、uint、long、ulong、float、double、decimalintlong、float、double、decimaluintlong、ulong、float、double、decimallongfloat、double、decimalulongfloat、double、decimalcharushort、int、uint、long、ulong、float、double、decimalfloatdouble怎样进行隐式类型转换隐式转换:自动类型转换floatint规则:对于数值类型,A的取值范围完全包含在B内AB2.显式转换显式转换又叫强制类型转换,与隐式转换相反,显式转换需要用户明确地指定转换类型,一般在不存在该类型的隐式转换时才使用。格式如下:

(类型标识符)表达式其作用是将“表达式”值的类型转换为“类型标识符”的类型。例如:

(int)1.23//把double类型的1.23转换成int类型,结果为1

需要提醒注意以下几点:(1)显式转换可能会导致错误。进行这种转换时编译器将对转换进行溢出检测。如果有溢出说明转换失败,就表明源类型不是一个合法的目标类型,转换就无法进行。(2)对于从float、double、decimal到整型数据的转换,将通过舍入得到最接近的整型值,如果这个整型值超出目标类型的范围,则出现转换异常。staticvoidMain(string[

]args){doublescore=58.5;//原始成绩

intbonus=2;//加分

intsum;//

总分

sum=score+bonus;//计算总分

Console.WriteLine(sum);Console.ReadLine();}怎样进行显式类型转换staticvoidMain(string[

]args){doublescore=58.5;

intbonus

=2;

intsum;

sum=(int)score+bonus;

Console.WriteLine(sum);Console.ReadLine();}×明确告诉编译器转换类型注意:double(58.5)->int(58),精度可能丢失!显式转换:强制类型转换【例2.1】设计一个控制台程序说明类型转换的应用。usingSystem;namespaceProj3_1{classProgram{staticvoidMain(string[]args){inti=65,i1,i2; doubled=66.3456,d1,d2; charc='A',c1,c2; Console.WriteLine("i={0:d5},d={1:f},c={2}",i,d,c); i1=(int)d; //强制类型转换

d1=i;

//隐式类型转换

c1=(char)i;

//强制类型转换

Console.WriteLine("i1={0:d5},d1={1:f},c1={2}",i1,d1,c1); i2=c; //隐式类型转换

d2=(int)d; //强制类型转换,转换成整数后再隐式转为double类型

c2=(char)d; //强制类型转换

Console.WriteLine("i2={0:d5},d2={1:f},c2={2}",i2,d2,c2);}}}2.2.4装箱和拆箱1.装箱转换装箱转换是指将一个值类型的数据隐式地转换成一个对象类型的数据。例如,下面语句就执行了装箱转换:

inti=8;

objectobj=i;或

objectobj=(object)i;2.拆箱转换拆箱转换是指将一个对象类型的数据显式地转换成一个值类型数据。例如,下面语句就执行了拆箱转换:

objectobj=2;

inti=(int)obj;拆箱转换需要(而且必须)执行显式转换,这是它与装箱转换的不同之处。2.3C#中的变量和常量2.3.1变量1.变量定义在C#程序里使用某个变量之前,必须要告诉编译器它是一个什么样的变量,因此要对变量进行定义。定义变量的方法如下:

[访问修饰符]数据类型变量名[=初始值];例如:

stringname="王华";intage=20;也可以同时声明一个或多个给定类型的变量,例如:

inta=1,b=2,c=3;2.理解值类型的变量如果一个变量的值是普通的类型,那么这个C#变量就是值类型的变量。值类型的变量直接把值存放在变量名标记的存储位置上。当定义一个值类型变量并且给它赋值的时候,这个变量只能存储相同类型的数据。所以,一个int类型的变量就只能存放int类型的数据。另外,当把值赋给某个值类型的变量时,C#会首先创建这个值的一个拷贝,然后把这个拷贝放在变量名所标记的存储位置上。例如:

intx;inty=2;x=y;3.理解引用类型的变量引用表示所使用的是变量或对象的地址而不是变量或对象本身。当声明引用类型变量时,程序只是分配了存放这个引用的存储空间。要想创建对象并把对象的存储地址赋给该变量,就需要使用new操作符。例如:

MyClassvar1; //MyClass是已定义的类或类型

var1=newMyClass();数组示例:

int[]a=newint[3]{1,2,3};for(inti=0;i<3;i++)Console.Write("{0}",a[i]);2.3.2常量1.直接常量直接常量是指把程序中不变的量直接硬编码为数值或字符串值,例如,以下都是直接常量:

100 //整型直接常量

1.23e5 //浮点型直接常量2.符号常量符号常量是通过关键字const声明的常量,包括常量的名称和它的值。常量声明的格式如下:

const数据类型常量名=初始值;

其中,“常量名”必须是C#的合法标识符,在程序中通过常量名来访问该常量。“类型标识符”指示了所定义的常量的数据类型,而“初始值”是所定义的常量的值。例如:

constdoublePI=3.14159265;2.5C#运算符和表达式2.5.1算术运算符符号意义示例+加法运算a+b−减法/取负运算a−b*乘法运算a*b/除法运算a/b%取余数a%b++累加a++−−递减a−

−2.5.2字符串运算符字符串运算符只有一个,就是加号(+)。它除了作为算术运算符之外,还可以将字符串连接起来,变成合并的新字符串。例如:

strings="Hello";s=s+",World.";Console.WriteLine(s);//输出:Hello,World.2.5.3赋值运算符赋值运算符(=)用于改变变量的值,它先求出右侧表达式的结果,然后再将结果赋给左侧的变量。符号意义示例+=加赋值a+=b等价于a=a+b-=减赋值a-=b等价于a=a-b*=乘赋值a*=b等价于a=a*b/=除赋值a/=b等价于a=a/b%=取模赋值a%=b等价于a=a%b<<=左移赋值a<<=b等价于a=a<<b>>=右移赋值a>>=b等价于a=a>>b&=与赋值a&=b等价于a=a&b^=异或赋值a^=b等价于a=a^b|=或赋值a|=b等价于a=a|b2.5.4关系运算符符号意义示例<小于2<3为true<=小于等于2<=3为true>大于2>3为false>=大于等于2>=3为false==等于2==3为false!=不等于2!=3为true2.5.5逻辑运算符符号意义示例!逻辑非!(2<3)为false&&逻辑与(3<5)&&(5>4)为true||逻辑或(3<5)||(5>4)为true2.5.6位运算符符号意义示例~按位求反!2<<左移8<<2>>右移8>>2&按位与8&5^按位异或8^5|按位或8|52.5.7条件运算符条件运算符是一个三元运算符,每个操作数同时又是表达式的值。由条件运算符构成的表达式称为条件表达式。条件运算符的使用格式如下:

表达式1?表达式2:表达式3

它的计算方式为,先计算“表达式1”(必须为布尔值)的值,如果其值true,则“表达式2”的值作为整个表达式的最终结果;否则“表达式3”的值作为整个表达式的值。例如,以下表达式返回a和b中的最大值:

max=a>b?a:b计算过程是,当a>b,max=a;否则max=b。2.5.9运算符的优先级运算符的优先级是指在表达式中哪一个运算符应该首先计算。

C#根据运算符的优先级确定表达式的求值顺序:优先级高的运算先做,优先级低的操作后做,相同优先级的操作从左到右依次做,同时用小括号控制运算顺序,任何在小括号内的运算最优先进行。2.6C#中常用类和结构C#中一切都是对象。2.6.1String类属性说明Chars获取此字符串中位于指定字符位置的字符。Length获取此字符串中的字符数。string类型是.NETFramework中的String类的别名。string类型定义了相等运算符(==和!=)用于比较两个string对象,叧外,+运算符用于连接字符串,[]运算符可以用来访问string中的各个字符。方法说明Compare静态方法。比较两个指定的String对象CompareTo非静态方法。将此字符串与指定的对象或String进行比较,并返回两者相对值的指示Concat静态方法。连接String的一个或多个字符串Contains非静态方法。返回一个值,该值指示指定的String对象是否出现在此字符串中Equals非静态方法。确定两个String对象是否具有相同的值Format静态方法。将指定的String中的每个格式项替换为相应对象的值的文本等效项IndexOf非静态方法。返回String或一个或多个字符在此字符串中的第一个匹配项的索引Insert非静态方法。在该String中的指定索引位置插入一个指定的StringRemove非静态方法。从该String中删除指定个数的字符Replace非静态方法。将该String中的指定String的所有匹配项替换为其他指定的StringSplit非静态方法。返回包含该String中的子字符串(由指定Char或String数组的元素分隔)的String数组Substring非静态方法。从此字符串中检索子字符串ToLower非静态方法。返回该String转换为小写形式的副本ToUpper非静态方法。返回该String转换为大写形式的副本Trim非静态方法。从此字符串的开始位置和末尾移除一组指定字符的所有匹配项【例2.7】设计一个控制台程序求用户输入的子串在主串中位置。usingSystem;namespaceProj3_6{classProgram{staticvoidMain(string[]args){ Stringmstr,sstr; Console.Write("输入主串:"); mstr=Console.ReadLine(); Console.Write("输入子串:"); sstr=Console.ReadLine(); Console.WriteLine("主串长度={0},子串长度={1}",mstr.Length,sstr.Length); if(String.Compare(mstr,sstr)!=0)

//使用静态方法

Console.WriteLine("位置:{0}",mstr.IndexOf(sstr)); elseConsole.WriteLine("两个字符串相同");}}}使用Parse()进行转换字符串和数值型的互相转换intfloatdoublestringint.Parse()float.Parse()double.Parse()ToString()必须是数字的有效表示形式!2.6.2

Math类

Math类位于System命名空间中,它包含了实现C#中常用算术运算功能的方法,这些方法都是静态方法,可通过“Math.方法名(参数)”来使用。2.6.3Convert类

Convert类位于System命名空间中,用于将一个值类型转换成另一个值类型。这些方法都是静态方法,可通过“Convert.方法名(参数)”来使用。ToBoolean将数据转换成Boolean类型ToDataTime将数据转换成日期时间类型ToInt16将数据转换成16位整数类型ToInt32将数据转换成32位整数类型ToInt64将数据转换成64位整数类型ToNumber将数据转换成Double类型ToObject将数据转换成Object类型ToString将数据转换成string类型2.6.4DateTime结构

DateTime结构类位于System命名空间中,DateTime值类型表示值范围在公元0001年1月1日午夜12:00:00到公元9999年12月31日晚上11:59:59之间的日期和时间。可以通过以下语法格式定义一个日期时间变量:

DateTime日期时间变量=newDateTime(年,月,日,时,分,秒);例如,以下语句定义了2个日期时间变量:

DateTimed1=newDateTime(2009,10,1);

DateTimed2=newDateTime(2009,10,1,8,15,20);

其中,d1的值为2009年10月1日零点零分零秒,d2的值为2009年10月1日8点15分20秒。属性说明Date获取此实例的日期部分Day获取此实例所表示的日期为该月中的第几天DayOfWeek获取此实例所表示的日期是星期几DayOfYear获取此实例所表示的日期是该年中的第几天Hour获取此实例所表示日期的小时部分Millisecond获取此实例所表示日期的毫秒部分Minute获取此实例所表示日期的分钟部分Month获取此实例所表示日期的月份部分Now获取一个DateTime对象,该对象设置为此计算机上的当前日期和时间,表示为本地时间Second获取此实

温馨提示

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

评论

0/150

提交评论