《c#基础知识解读ppt课件.ppt》由会员分享,可在线阅读,更多相关《c#基础知识解读ppt课件.ppt(60页珍藏版)》请在三一办公上搜索。
1、第三章,C# 基础知识,2,目标,在C#中定义变量和常量使用C# 中的基本数据类型理解装箱和拆箱的概念使用C#中的运算符,选择结构和循环结构定义和使用数组,了解结构和枚举,3,C# 程序结构,程序从 Main( ) 处开始执行关键字 using 可以引用 Microsoft .NET 框架类库中的现有资源 语句就是在 C# 应用程序中执行操作的指令 程序由许多不同的语句构成使用分号隔离语句使用大括号组合语句,using System;class HelloWorld static void Main() Console.WriteLine (Hello, World); ,4,在 C# 中设置
2、代码格式,使用缩进帮助说明语句所处的层次 大小写敏感忽略空白间隔 使用 (/) 书写不跨行的注释 使用 (/*) 和 (*/) 书写多行注释,using System;class HelloWorld static void Main() Console.WriteLine (Hello, World); ,5,内置数据类型,用于定义变量的类型存储不同类型的变量根据想要表示数据的不同,选择不同的数据类型 预定义数据类型是由 C# 语言和 .NET 框架提供 允许自定义变量在使用前必须先声明,6,C# 数据类型,7,变量,语法:访问修饰符 数据类型 变量名,Public,Private,Prot
3、ected,int,string,float,变量用于存储特定数据类型的值,8,其他的两种访问限制符,Internal 一个程序集中可以使用Protected internal 本程序集的类和这些类的子类使用如果变量前没有访问修饰符,则默认为internal,9,声明并初始化变量,声明 指定类型 指定变量名 以分号结束,int numberOfVisitors;,初始化变量 使用赋值运算符 (=) 指定值 以分号结束,1,2,3,1,2,3,赋值 附加后缀,1,decimal deposit = 100M;,string bear;,string bear = Grizzly;,10,变量举例
4、,static void Main(string args)/ 声明布尔型、字符串型、整型、短整型和浮点型变量 bool test = true;short num1 = 19;int num2 = 14000;string val = Jamie;float num3 = 14.5f;/ 显示变量值 Console.WriteLine (布尔值 = + test);Console.WriteLine (短整型值 = + num1);Console.WriteLine (整型值 = + num2);Console.WriteLine (字符串值 = + val);Console.WriteLi
5、ne (浮点值 = + num3);,变量中存储的值取决于该变量的类型,11,声明及初始化字符串,示例声明字符串使用转义符 使用verbatim字符串 国际 Unicode 标准,string s = Hello World; / Hello World,string s = HellonWorld; / a new line is added,string s = Hellon; / Hellon,string s = Hello; / Hello,The character “A” is represented by “U+0041”,12,常量,语法: const 数据类型 常量名 =
6、常量值;,Public,Private,Protected,常量用于在整个程序中将数据保持同一个值 声明常量时必须对其赋值,13,常量举例,static void Main(string args)/ PI常量PIconst float _pi = 3.14F;/ 由地球引力引起的加速度常量,单位为 cm/s*s const float _gravity = 980;/ 钟摆的长度 int length = 40;/ 钟摆的周期 double period = 0;/ 钟摆周期的计算公式 period = 2 * _pi * Math.Sqrt(length / _gravity);Conso
7、le.WriteLine (钟摆的周期为 0 秒, period);,声明常量,在表达式中使用常量,const 关键字用于声明常量,14,C# 的基本数据类型 3-1,C# 中的数据类型分为两个基本类别 值类型 表示实际数据 只是将值存放在内存中 值类型都存储在栈中 简单类型(int、char等)、结构、枚举,15,引用类型 表示指向数据的指针或引用 包含内存堆(托管堆)中对象的地址 为 null,则表示未引用任何对象 类、接口、数组、字符串,例如:string s1, s2;s1=ABCD; s2 = s1; 其中,s1、s2是指向字符串的引用变量,s1的值是字符串ABCD存放在内存的地址,
8、这就是对字符串的引用,两个引用型变量之间的赋值,使得s2、s1都是对ABCD的引用,16,C# 的基本数据类型 3-2,static void Main(string args)/ 声明一个值类型的整型数据类型int val = 100;Console.WriteLine(该变量的初始值为 0, val); Test(val);/ 由于该数据类型属于值类型,所以将恢复其初始值 Console.WriteLine(该变量的值此时为 0, val); static void Test(int getVal)int temp = 10;getVal = temp * 20; ,将 val 的初始值传
9、递给 Test() 方法,被传递的 val 在 Test() 方法内被改变,不反映已经改变的 val 值,而保留原始值,17,C# 的基本数据类型 3-3,static void Main(string args)DataTypeTest objTest = new DataTypeTest();objTest.Val = 100;/ 传递属于引用类型的对象Test(objTest);/ 由于该数据类型属于引用类型,所以会考虑新处理的值 Console.WriteLine(变量的值为 0, objTest.Val); static void Test(DataTypeTest dataTest
10、)int temp = 10;dataTest.Val = temp * 20; ,将 DataTypeTest 的引用传递给 Test(),被传递的 val 在 Test() 中改变,反映已经改变的 val 值,而不保留原始值,class DataTypeTest public int Val;,18,static void Main(string args) DataTypeTest a = new DataTypeTest(); DataTypeTest b = a; b.Val = 10; Console.WriteLine(a=0, b=1, a.Val, b.Val); Conso
11、le.ReadKey(); ,19,类型转换,隐式转换由编译器自动完成,但必须确保不会丢失信息显式转换需要明确要求编译器完成的转换,否则可能会丢失信息,int x = 123456; / int is a 4-byte integerlong y = x; / implicit conversion to a long,int x = 65537;short z = (short) x; / explicit conversion to a short, z = 1,20,装箱和拆箱 2-1,装箱是将值类型转换为引用类型 拆箱是将引用类型转换为值类型 可以把值类型与引用类型的值赋给object
12、类型变量,C#用“装箱”和“拆箱”来实现值类型与引用类型之间的转换。,拆箱必须显示进行,21,“装箱”就是将值类型包装成引用类型的处理过程。当一个值类型被要求转换成一个object对象时,“装箱”操作自动进行,它首先创建一个对象实例,然后把值类型的值复制到这个对象实例,最后由object对象引用这个对象实例。显示装箱object i=(object)1 装箱可以隐式进行,22,例如: using System;class Demo public static void Main ( ) int x = 123; object obj1=x; / 装箱操作 x = x+100; / 改变x的值,
13、此时obj1的值并不会随之改变 Console.WriteLine ( x= 0 , x ); / x=223 Console.WriteLine ( obj1= 0 , obj1 ); / obj1=123 ,23,“拆箱”操作与“装箱”相反,它是将一个object类型转换成值类型。首先检查由object引用的对象实例值类型的包装值,然后把实例中的值复制到值类型的变量中。,24,using System;class Demo public static void Main ( ) int x = 123, y; object obj1=x; / 装箱操作 x = x+100; / 改变x的值
14、,此时obj1的值并不会随之改变 y = (int) obj1; / 拆箱操作,必须进行强制类型转换 Console.WriteLine ( x= 0 , x ); / x=223 Console.WriteLine ( obj1= 0 , obj1 ); / obj1=123 ,25,装箱和拆箱 2-2,int val = 100;object obj = val;Console.WriteLine (“对象的值 = 0, obj);,int val = 100;object obj = val;int num = (int) obj;Console.WriteLine (num: 0, n
15、um);,值类型,引用类型,拆箱,装箱,值类型,引用类型,值类型,被装过箱的对象才能被拆箱,26,运算符和表达式 9-1,运算符和表达式,Result,=,number,*,100,变量,变量,常量,操作数,表达式,操作数和运算符的组合,运算符,27,运算符和表达式 9-2,28,运算符和表达式 9-3,29,运算符和表达式 9-4,30,运算符和表达式 9-5,31,运算符和表达式 9-6,赋值运算符 (=),变量 = 表达式;例如:身高 = 177.5;体重 = 78;性别 = “m”;,32,运算符和表达式 9-7,一元运算符 (+/-),Variable +; 相当于 Variable
16、 = Variable + 1;Variable -; 相当于 Variable = Variable - 1;,33,运算符和表达式 9-8,34,运算符和表达式 9-9,C# 运算符的优先级,35,前置和后置自加/自减运算符,36,问题,计算结果:1、int i = 0;bool result = falseresult = (+i) + i = 2?true:false; result =,true,37,算术运算符,static void Main(string args)/ x2 的系数int coefficient1 = 2;/ x 的系数int coefficient2 = -7
17、;/ 二次方程的常数值 int constant = 3;/ 存放表达式 b2 - 4ac 的值 double expression = 0;double x1 = 0;double x2 = 0;Console.WriteLine(二次方程为: 0 x2 + 1x + 2, coefficient1, coefficient2, constant);expression = Math.Sqrt(coefficient2 * coefficient2 - (4 * coefficient1 * constant);x1 = (-coefficient2) + expression) / (2
18、* coefficient1);x2 = (-coefficient2) - expression) / (2 * coefficient1);Console.Write(x = 0:F2 , x1);Console.Write( 或 );Console.WriteLine(x = 0:F2, x2);,将值赋给变量,在表达式中使用的算术运算符,38,选择结构 3-1,语法: if () else ,选择结构用于根据表达式的值执行语句,if else,39,If 语句的使用方法以及场合,if,if ( sales 10000 ) bonus += .05 * sales;,if ( sales
19、 10000 ) bonus += .05 * sales;else bonus = 0;,if else,if else if,if ( sales 10000 ) bonus += .05 * sales;else if ( sales 5000 ) bonus += .01 * sales;else bonus = 0;if ( priorBonus = 0 ) /ScheduleMeeting;,40,选择结构 3-2,语法:switch (选择变量)case常量值1: break;case常量值2: break;case常量值3: break;.default : ,switchca
20、se,41,switch 语句的使用方法以及场合,int moons;switch (aPlanet)case Planet.Mercury:moons = 0;break;case Planet.Venus:moons = 0;break;case Planet.Earth:moons = 1;break;,定义 default 条件,42,switchcase 的其他特性,选择结构 3-3,各个 case 标签不必连续,也不必按特定顺序排列default 标签可位于 switchcase 结构中的任意位置default 标签不是必选的,但使用 default 标签是一个良好的编程习惯每两个
21、 case 标签之间的语句数不限,43,循环结构,循环结构用于对一组命令执行一定的次数或反复执行一组命令,直到指定的条件为真。循环结构的类型 while 循环do 循环for 循环foreach 循环,44,while 循环 2-1,停车!,车上有几个座位?,检查!,是!,否!,while (seat = 25),45,while 循环反复执行指定的语句,直到指定的条件为真;如果指定的条件为假,循环将永远不会运行循环一直运行到条件变为假语法 :while (条件) / 语句break 语句可用于退出循环continue 语句可用于跳过当前循环并开始下一循环,while 循环 2-2,int i
22、 = 1;while (i = 10);Console.WriteLine (0, i+);,46,dowhile 循环 2-1,停车!,车上有几个座位?,检查!,是!,否!,while (seat = 25),do,47,dowhile 循环 2-2,dowhile 循环与 while 循环类似,二者区别在于 dowhile 循环中即使条件为假时也至少执行一次该循环体中的语句。 语法 :do / 语句 while (条件),int i = 1;do Console.WriteLine (0, i+); while (i = 10);,48,for 循环,for 循环要求只有在对特定条件进行判
23、断后才允许执行循环 这种循环用于将某个语句或语句块重复执行预定次数的情形 语法 :for (初始值; 条件; 增/减) /语句,for (int i = 0; i 0; j -= 10 ) Console.WriteLine(j = 0, j);,49,foreach 循环,计算总分,计算分数,对班上的每一个学生,教 室,50,foreach 循环 2-1,foreach 循环用于遍历整个集合或数组 语法: foreach (数据类型 元素(变量) in 集合或者数组) /语句 ,51,foreach 循环,static void Main(string args)/ 存放字母的个数 int
24、countLetters = 0;/ 存放数字的个数int countDigits = 0;/ 存放标点符号的个数int countPunctuations = 0;/ 用户提供的输入 string input;Console.WriteLine(请输入一个字符串 );input = Console.ReadLine();/ 声明 foreach 循环以遍历输入的字符串中的每个字符。 foreach(char chr in input) / 检查字母if(char.IsLetter(chr)countLetters+;/ 检查数字if(char.IsDigit(chr)countDigits+
25、;/ 检查标点符号if(char.IsPunctuation(chr)countPunctuations+;Console.WriteLine(“字母的个数为: 0, countLetters);Console.WriteLine(“数字的个数为: 0, countDigits);Console.WriteLine(“标点符号的个数为: 0, countPunctuations);,为所有计数器设置初始值,接受输入,对输入的每一个字符都进行循环,使用了所有输入的字符之后,循环自动终止,52,数组 3-1,数组是同一数据类型的一组值 数组属于引用类型,因此存储在堆内存中 数组元素初始化或给数组元
26、素赋值都可以在声明数组时或在程序的后面阶段中进行 语法: 数据类型 数组名称 = 实例化 元素个数;int arrayHere=new int6;,53,一维数组多维数组不规则数组,54,数组 3-2,学生分数的整数数组,职员姓名的字符串数组,室温的浮点数组,数组位置,55,数组 3-3,static void Main(string args)int count;Console.WriteLine(请输入您要登记的学生人数 );count=int.Parse(Console.ReadLine();/ 声明一个存放姓名的字符串数组,其长度等于提供的学生人数 string names = new
27、 stringcount;/ 用一个 for 循环来接受姓名 for(int i=0; icount; i+)Console.WriteLine(“请输入学生 0 的姓名 ,i+1);namesi=Console.ReadLine();Console.WriteLine(已登记的学生如下: );/ 用 foreach 循环显示姓名 foreach(string disp in names)Console.WriteLine(0, disp);,数组声明,初始化数组元素的循环,显示输出的循环,56,struct structEx public int structDataMember; publ
28、ic void structMethod1() /structMethod1 实现 ,自定义数据类型可以在其内部定义方法 无法实现继承属于值类型主要结构:,struct studentpublic int stud_id;public string stud_name;public float stud_marks;public void show_details() /显示学生详细信息,结构,数据成员,方法,所有与 Student 关联的详细信息都可以作为一个整体进行存储和访问,57,枚举,ublic class Holiday public enum WeekDays Monday,Tue
29、sday,Wednesday,Thursday,Friday public void GetWeekDays (String EmpName, WeekDays DayOff) /处理工作日 static void Main() Holiday myHoliday = new Holiday(); myHoliday.GetWeekDays (Richie, Holiday.WeekDays.Wednesday); ,枚举(Enum,Enumerator 的缩写)是一组已命名的数值常量 用于定义具有一组特定值的数据类型 枚举以 enum 关键字声明,Wednesday = 2,58,枚举(续)
30、,C# 中的枚举包含与值关联的数字 默认情况下,将 0 值赋给枚举的第一个元素,然后对每个后续的枚举元素按 1 递增在初始化过程中可重写默认值,public enum WeekDaysMonday=1,Tuesday=2,Wednesday=3,Thursday=4,Friday=5,59,总结 2-1,变量是存放特定数据类型的值的容器,而常量也存放特定数据类型的值,但常量在整个程序中都保持一致装箱是将值类型转换为引用类型,而拆箱则是将引用类型转换为值类型 C# 提供了以下类型的选择结构: ififelseswitchcase,60,总结 2-2,C# 提供了以下类型的循环结构: while 循环do 循环for 循环foreach 循环数组是可将同一类型的多个数据元素作为单个实体存放的一种数据结构 C# 中的结构可以在其内部定义方法并可包括一个构造函数枚举是一组已命名的数值常量,