第2章C基础知识.ppt
1,回顾,.NET Framework由.NET Framework 类库和公共语言运行时两个主要组件组成。Visual Studio.NET 2005 是用于创建、编写、运行和调试程序的集成开发环境。C#程序组成:一个方案(sln)由若干项目(csproj)组成,一个项目由窗体、类模块、资源等文件(cs)组成应用程序创建步骤书写规范,C#基础知识,第二章,3,目标,使用C#中的基本数据类型在C#中定义变量和常量理解装箱和拆箱的概念和数据类型转换使用C#中的运算符,选择结构和循环结构定义和使用数组,了解结构和枚举了解C#中的预处理指令理解C#中常用的字符串处理方法,4,2.1 数据类型,C#的数据类型可分为两大类:1)值类型(简单类型、结构类型和枚举类型)简单类型包括整型、浮点型、字符型、布尔型2)引用类型(数组、字符串、类、委托和接口)值类型和引用类型有区别:值类型变量直接存储它的数据内容,而引用类型不存储实际数据内容,是存储对实际数据的引用。,5,C#的数据类型结构图,6,2.1.1 值类型1、整数类型:,7,2、浮点型,浮点类型的数据包含两种:单精度浮点型(float)和双精度浮点型(double),其区别在于取值范围和精度的不同。float类型是32位宽,精度为7 位数,取值范围在+1.510-45 3.41038之间。如float x=123.34fdouble类型是64位宽,精度为1516位数,取值范围为+5.010-324 1.710308之间。例如:double y=12.56 常量无后缀时为double型,8,3、小数类型(decimal),小数类型(decimal)占用16个字节(128位),主要为了满足需要高精度的财务和金融计算机领域。小数类型数据的取值范围和精度如下:,精度为29位数 取值范围在+1.010-28 7.91028之间。注意:小数类型数据的后面必须跟m或者M后缀来表示它是decimal类型的,如3.14m、0.28m等,否则就会被解释成标准的浮点类型数据,导致数据类型不匹配。如:22.1m 代表decimal类型的数值22.1,9,4、字符型和布尔型,1)布尔类型bool:采用true和false两个值来表示布尔逻辑量。例:bool a1=true;bool a2=(x0,10,为了表示单引号和反斜杠等特殊的字符常数,C#提供了转义符。,C#常用的转义符,C#常用的转义符,11,5、日期时间型(DateTime),DateTime值类型表示值范围在公元0001 年 1 月 1 日午夜 12:00:00 到公元 9999 年 12 月 31 日晚上 11:59:59 之间的日期和时间,时间值以 100 毫微秒为单位。声明一个日期型变量birth DateTime birth=DateTime.Parse(1989/12/12);DateTime.Now/获取当前系统日期和时间birth.Year/获取birth日期变量的年份birth.Month/获取birth日期变量的月份birth.Day/获取birth日期变量为该月中的第几天。birth.DayOfWeek 获取birth日期变量表示的日期是星期几。Hour,Minute,Second获取小时、分钟、秒部分。,12,2.2.2 引用类型,引用类型包括数组、字符串、类、委托和接口1.object类object类是系统提供的基类型,是所有类型的基类,C#中所有的类型都直接或间接派生于对象类型。对于任一个object变量,均可以赋以任何类型的值。double d=3.14;object obj1;obj1=d;obj1=k;对于object类型的变量,声明必须使用object关键字,13,2.string类,一个字符串是被双引号包含的一系列字符。string类是专门用于对字符串进行操作的。如:string str1=中国,;string str2=你好!;string str3=str1+str2;char c=str30;/取出str3的第一个字符,即“中”字。C#支持两种形式的字符串常数:常规字符串常数和逐字字符串常数,14,如:“this is a test”“C#程序设计教程”例:using System;class StringDemo public static void Main()string str1=“A string”;string str2=Another string.;Console.WriteLine(“0n1”,str1,str2);,(1)常规字符串常数,15,(2)逐字字符串常数,逐字字符串常数以开头,后跟一对双引号,在双引号中放入字符。如:“电子高专”“This is a book.”逐字字符串常数同常规字符串常数的区别:在逐字字符串常数的双引号中,每个字符都代表其最原始的意义,在逐字字符串常数中没有转义字符。注意:如果要包含双引号(),就必须在一行中使用两个双引号()。,16,string str1=hello t world;/hello worldstring str2=hello t world;/hello t worldstring str3=“He said Hello to you;/Tom said Hello to youstring str4=“He said Hello to you;/Tom said Hello to you 练习:看以下三个语句有什么区别,哪个是错误的string path1=c:windowssystemreadme.txt;string path1=c:windowssystemreadme.txt;string path1=c:windowssystemreadme.txt;,举例,17,数据类型在一定条件下是可以相互转换的。C#允许使用两种转换的方式:隐式转换和显式转换。1.隐式转换 隐式转换是系统默认的、不需要加以声明就可以进行的转换。隐式数据转换的使用方法如下:int i=518;/a为整型数据 long b=i;/b为长整型数据 float f=i;/f为单精度浮点型数据,2.1.3 类型转换,18,显式转换又叫强制类型转换,显式转换要明确指定转换类型。显式转换格式:(类型标识符)表达式意义为:将表达式的值的类型转换为类型标识符的类型。比如:(char)65/把int类型的65转换成char类型注意:(1)显式转换可能会导致错误。(2)对于将float,double,decimal转换为整数,将通过舍入得到最接近的整型值,如果这个整型值超出目标域,则出现转换异常。比如:(int)6.28m/转换的结果为6(int)3e25f/将产生溢出错误,2显式转换,19,3.方法转换,1)System.Convert类提供了一整套转换方法。(1)将string值转换为boolean值。string MyString=true;bool MyBool=Convert.ToBoolean(MyString);/MyBool=true(2)将数字字符的字符串转换为Int32值。string newString=123456789;int MyInt=Convert.ToInt32(newString);/MyInt=123456789(3)将Int64数据转换成Int32数据。Int64 MyInt64=123456789int MyInt=Convert.ToInt32(MyInt64)/MyInt=123456789(4)进行四舍五入的转换。double MyDouble=42.72;int MyInt=Convert.ToInt32(MyDouble);/MyInt=43,20,2)ToString方法和Parse方法,ToString()方法:将其他数据类型转换为字符串型。格式:变量名称.ToString()例:int x=1234;string y=x.ToString();Parse()方法:将特定格式的字符串转换为数值。格式:数据类型名称.Parse(字符串表达式)说明:字符串表达式必须符合数据类型名称格式例:string x=“1234”;int y=int.Parse(x),21,4.装箱和拆箱,装箱和拆箱:值类型和引用类型之间的转换。装箱是将值类型转换为引用类型 拆箱是将引用类型转换为值类型 利用装箱和拆箱功能,可通过允许值类型的任何值与 Object 类型的值相互转换,将值类型与引用类型链接起来,22,1)装箱,装箱:装箱转换是指将一个值类型的数据隐式地转换成一个对象类型(object)的数据。把一个值类型的值装箱,也就是创建一个object实例并将这个值复制给这个object实例。例如:int x=123;object obj1=x;/装箱操作也可用显式的方法进行装箱操作:object obj=(object)a;,23,2)拆箱,和装箱相反,拆箱转换是指将一个对象类型的数据显式地转换成一个值类型数据。拆箱的过程分为两步:首先,检查这个对象实例,看它是不是给定的值类型的装箱值,然后将该值从实例中复制出来,送给值类型的变量。例如:int k=10;object obj=k;/装箱 int j=(int)obj;/拆箱注:被装过箱的对象才能被拆箱,24,using System class UnboxingDemo static void Main()int k=228;object obj=k;/装箱转换 int j=(int)obj;/拆箱转换 k=300;Console.WriteLine(k=0tobj=1tj=2,k,obj,j);,练习2:分析运行结果。,25,2.3变量和常量,定义语法:访问修饰符 数据类型 变量名,Public,Private(默认值),Protected,int,string,float,变量用于存储特定数据类型的值,变量赋值:变量名=表达式;,26,标识符,标识符(identifier)是一串字符,在程序中作为各种标识,用来代表一个名字。并不是任何一串字符都可以作为C#的标识符。C#的标识符有如下规则:(1)一个合法的C#标识符,是以字母或者下划线开头、其后可以跟任意个字母、数字或者下划线。(2)C#的标识符严格区分大小写,即使两个标识符的区别仅仅字母的大小写不同,也认为是两完全不同的标识符。(3)关键字也可以作为标识符,只要在关键字前加上前缀。void static,27,举例:,static void Main(string args)/声明布尔型、字符串型、整型、短整型和浮点型变量 bool t=false;short n1=30;int n2=1200;string str=jeny;float n3=23.1f;/显示变量值 Console.WriteLine(布尔值=+t);Console.WriteLine(短整型值=+n1);Console.WriteLine(整型值=+n2);Console.WriteLine(字符串值=+str);Console.WriteLine(浮点值=+n3);,变量中存储的值取决于该变量的类型,28,常量,常量用于在整个程序中将数据保持同一个值 符号常量声明语法:const 数据类型 常量名=常量值;,static void Main(string args)const float PI=3.1415169F;/PI常量PI const float GRAVITY=980;/由地球引力引起的加速度常量,单位为 cm/s*s int length=60;/钟摆的长度/*计算钟摆的周期*/double period=0;period=2*PI*Math.Sqrt(length/GRAVITY);/钟摆周期的计算公式 Console.WriteLine(钟摆的周期为 0 秒,period);,29,2.4运算符和表达式,运算符和表达式,Result,=,number,*,10,变量,变量,常量,操作数,表达式,操作数和运算符的组合,运算符,30,1.算术运算符,31,一元运算符(+/-),Variable+;相当于 Variable=Variable+1;Variable-;相当于 Variable=Variable-1;,32,前置和后置自加/自减运算符,33,2.关系运算符,34,3.逻辑运算符,35,4.赋值运算符,36,可以把表达式的值通过复合赋值运算符赋予变量,这时复合赋值运算右边的表达式是作为一个整体参加运算的。例:int a=8,b=3;a%=b*2-5;/*相当于a%=(b*2-5),它与 a=a%(b*2-5)是等价的。*/对变量可以进行连续赋值。例:int z=3;x=y=z;/等价于x=(y=z)。,复合赋值举例说明,37,6.条件运算符,格式:操作数1?操作数2:操作数3含义:进行条件运算时,首先判断问号前面的布尔值是true还是false,如果是true,则值等于操作数2的值;如果为false,则值等于操作数3的值。例如:68?15+a:39 由于68的值为false,所以整个表达式的值是39。,38,(1)字符串连接符(+):将两个字符串连接在一起,形成新的字符串。比如:“abc”+“efg”/结果是abcefg“36812”+“3.14”/结果是368123.14(2)is运算符:用于检查表达式是否指定的类型,如果是,结果为true,否则结果为false。例如:int k=2;bool isTest=k is int;/isTest=true(3)sizeof运算符 sizeof运算符用于获得值类型数据在内存占用的字节数。例如:int a=sizeof(double);/a=8,7.其他运算符,39,C#运算符的优先级,40,分析运行结果:,1、int i=0;bool result=true;result=(+i)+i=2?true:false;result=,true,41,2.4选择结构,选择结构用于根据表达式的值执行语句,双分支if语句:if(布尔表达式)语句1else语句2,单分支if语句:if(布尔表达式)语句1,多分支if语句:if(布尔表达式1)语句1else if(布尔表达式2)语句2else if(布尔表达式3)语句3else语句n,42,练习:在加法器上进行改进,要求输入运算符,根据不同运算符进行不同运算。,43,代码:,private void button1_Click(object sender,EventArgs e)int a,b,c;a=int.Parse(textBox1.Text);b=int.Parse(textBox2.Text);char op=Convert.ToChar(textBox3.Text);if(op=+)c=a+b;else if(op=-)c=a+b;else if(op=*)c=a*b;else if(op=/)c=a*b;else label5.Text=运算符输入错误);return;textBox4.Text=c.ToString();,44,switchcase选择结构,语法:switch(选择变量)case 值1:break;case 值2:break;case 值3:break;.default:,45,switchcase 的其他特性,选择结构 3-3,各个 case 标签不必连续,也不必按特定顺序排列default 标签可位于 switchcase 结构中的任意位置,default 标签不是必选的,但使用 default 标签是一个良好的编程习惯每两个 case 标签之间的语句数不限,46,练习:将数学运算窗体用switch改进,switch(op)case+:c=a+b;break;case-:c=a-b;break;case*:c=a*b;break;case/:c=a/b;break;default:MessageBox.Show(运算符输入错误);return;,47,using System;class StudentGrade public static void Main()Console.Write(输入学生百分制的成绩:);int Grade=(int)Console.Read();switch(Grade/10)case 9:case 10:Console.WriteLine(你的成绩为:A);break;case 8:Console.WriteLine(你的成绩为:B);break;case 7:Console.WriteLine(你的成绩为:C);break;case 6:Console.WriteLine(你的成绩为:D);break;default:Console.WriteLine(你的成绩为:E);break;,【例】从键盘输入学生的百分制成绩,换算成等级制成绩,48,2.5循环结构,循环结构用于对一组命令执行一定的次数或反复执行一组命令,直到指定的条件为真。循环结构的类型 while 循环do 循环for 循环foreach 循环,49,案例:求n以内的和,50,while 循环反复执行指定的语句,直到指定的条件为真语法:while(条件)/语句break 语句可用于退出循环continue 语句可用于跳过当前循环并开始下一循环,2.5.1while 循环,51,【例】用while语句求求n以内的和,52,2.5.2dowhile 循环,dowhile 循环与 while 循环类似,二者区别在于 dowhile 循环中即使条件为假时也至少执行一次该循环体中的语句。语法:do/语句 while(条件),53,while语句与do_while语句很相似,它们的区别在于while语句的循环体有可能一次也不执行,而do_while语句的循环体至少执行一次。,【例】用do_while语句求n以内的和,54,2.5.3for 循环,for 循环要求只有在对特定条件进行判断后才允许执行循环 这种循环用于将某个语句或语句块重复执行预定次数的情形 语法:for(初始值;条件;增/减)/语句,55,【例】用for语句求求n以内的和,56,上机练习,用三种方法编写求100200之间被5整除的个数和被3整除的个数。,57,2.5.4foreach 循环,foreach 循环用于遍历整个集合或数组 语法:foreach(数据类型 元素(变量)in 集合或者数组)/语句,58,例:分别计算字母、数字、标点符号的个数,为所有计数器设置初始值,接受输入,对输入的每一个字符都进行循环,使用了所有输入的字符之后,循环自动终止,59,练习:,在数学运算窗体,要求文本框只能输入数字,请编程验证,60,总结,变量是存放特定数据类型的值的容器,而常量也存放特定数据类型的值,但常量在整个程序中都保持一致装箱是将值类型转换为引用类型,而拆箱则是将引用类型转换为值类型 C#提供了以下类型的选择结构:ifelseswitchcaseC#提供了以下类型的循环结构:while 循环do 循环for 循环foreach 循环,61,课后练习,视频:预习数组http:/,