《第二章C#编程基础(1).ppt》由会员分享,可在线阅读,更多相关《第二章C#编程基础(1).ppt(78页珍藏版)》请在三一文库上搜索。
1、第二章 C#编程基础,本章学习目标,熟悉C#基本数据类型 掌握选择、循环、跳转语句的使用方法 掌握定义和初始化数组的方法 掌握访问数组元素的方法,第二章 C#编程基础,2.1 基本数据类型 2.2 常量与变量 2.3 表达式 2.4 选择语句 2.5 循环语句 2.6 跳转语句 2.7 数组,2.1 基本数据类型,2.1.1 值类型 2.1.2 引用类型 2.1.3 值类型与引用类型的关系,2.1 基本数据类型,简单类型 枚举类型 结构类型,值类型,引用类型,类 接口 数组 委托,两者有很大区别,2.1 基本数据类型,值类型,引用类型,内存,. . .,int num; num=1024;,n
2、um,. . .,string str; str=“abc”;,str,内存,2.1.1 值类型,所谓值类型就是一个包含实际数据的量。即当定义一个值类型的变量时,C#会根据它所声明的类型,以堆栈方式分配一块大小相适应的存储区域给这个变量,随后对这个变量的读或写操作就直接在这块内存区域进行。,2.1.1 值类型,2.1.1 值类型,枚举类型: 由用户定义的一组有限个整型符号常量。 定义枚举类型 枚举成员赋值 声明枚举变量 访问枚举变量,2.1.1 值类型枚举类型,定义枚举类型 enum 枚举名:数据类型 /枚举成员 数据类型 除了char之外的整数类型。 默认为32位整数类型,第一个枚举值为0,
3、第二个为1,依次加1。 枚举成员 枚举成员均为符号常量,常量名之间用逗号分隔。,2.1.1 值类型枚举类型,定义枚举类型实例 enum Weekdays Mon,Tues,Wed,Thur,Fri,Sat,Sun /Mon=0,Tues=1,Wed=2,Thur=3,Fri=4,Sat=5,Sun=6 ,2.1.1 值类型枚举类型,枚举成员赋值 (1)修改枚举的默认值 (2)修改一个或多个枚举成员的值 (3)为多个枚举成员赋同样的值,2.1.1 值类型枚举类型,枚举成员赋值 (1)修改枚举的默认值 public enum Weekdays Mon=1,Tues,Wed,Thur,Fri,Sat
4、,Sun ,枚举Weekdays的第一个枚举值为1,其后依次加1.,2.1.1 值类型枚举类型,枚举成员赋值 (2)修改一个或多个枚举成员的值 public enum Weekdays Mon,Tues=-1,Wed,Thur,Fri=3,Sat,Sun ,第一个被赋值的枚举成员之前的枚举成员,按默认方式赋值;如为某个枚举成员赋值,则其后的枚举成员值在此基础上依次加1.,2.1.1 值类型枚举类型,枚举成员赋值 (3)为多个枚举成员赋同样的值 public enum Weekdays Mon,Tues=3,Wed,Thur,Fri=Mon,Sat,Sun ,被赋值枚举成员一定要位于赋值的枚举成
5、员之后!,2.1.1 值类型枚举类型,声明枚举变量 格式:枚举名 变量名;,2.1.1 值类型枚举类型,访问枚举变量 枚举变量的值必须是枚举成员,枚举成员需要用枚举名引导。 例:enum Color red,green,blue Color c=Color.red; int i=(int)c; 或: int i=(int)Color.red;,2.1.2 引用类型,2.1.2 引用类型,一个引用类型的变量不存储它们所代表的实际数据,而是存储实际数据的引用。 引用类型分两步创建:首先在堆栈上创建一个引用变量,然后在堆上创建对象本身,再把这个内存的句柄(也是内存的首地址)赋给引用变量。,2.1.2
6、 引用类型,例如: string s1, s2; s1=“ABCD“; s2 = s1; 其中,s1,s2是指向字符串的引用变量,s1的值是字符串“ABCD”存放在内存的地址,这就是对字符串的引用,两个引用型变量之间的赋值,使得s2、s1都是对“ABCD”的引用。如图所解。,堆内存,栈内存,ABCD,s1,s2,2.1.3 值类型与引用类型关系,可以把值类型与引用类型的值赋给object类型变量,C#用“装箱”和“拆箱”来实现值类型与引用类型之间的转换。 装箱就是将值类型包装成引用类型的处理过程。当一个值类型被要求转换成一个object对象时,装箱操作自动进行,它首先创建一个对象实例,然后把值
7、类型的值复制到这个对象实例,最后由object对象引用这个对象实例。 拆箱操作与装箱相反,它是将一个object类型转换成值类型。首先检查由object引用的对象实例值类型的包装值,然后把实例中的值拷贝到值类型的变量中。,2.1.3 值类型与引用类型关系,装箱操作实例: using System; class Demo public static void Main ( ) int x = 123; object obj1=x; / 装箱操作 x = x+100; / 改变x的值obj1的值并不会随之改变 Console.WriteLine (“ x= 0“ , x ); / x=223 Co
8、nsole.WriteLine (“ obj1= 0“ , obj1 );/obj1=123 ,2.1.3 值类型与引用类型关系,实例的装箱操作说明如图所示。,2.1.3 值类型与引用类型关系,拆箱操作实例: using System; class Demo public static void Main ( ) int x = 123, y; object obj1=x; / 装箱操作 x = x+100; / 改变x的值,此时obj1的值并不会随之改变 y = (int) obj1; / 拆箱操作,必须进行强制类型转换 Console.WriteLine (“ x= 0“ , x ); /
9、 x=223 Console.WriteLine (“ obj1= 0“ , obj1 ); / obj1=123 ,2.2 常量与变量,2.2 常量与变量,变量的声明 数据类型 变量名 int age; 变量名标示符命名规则 只能使用数字、字母、下划线 标识符首字母必须是字母、下划线 不能使用关键字作为标示符 C#区分大小写 变量命名规范 不要用下划线作为变量名首字符 不要仅靠大小写区分两个变量 小写字母开头 如果多个单词命名变量名,从第二个单词开始,每个单词首字母大写。例如:int averageAge;,2.2 常量与变量,变量初始化,int a=2; /定义a为整型变量,初值为2 ch
10、ar b= A; /定义b为字符型变量,初值为A double x=2.1234; /定义x为实型变量,初值为2.1234 也可对被定义的变量的部分变量进行初始化。如 int u,v=100,w; /定义u,v,w为整型变量,v的初值为100,float y=1.1; /错误,因为1.1默认为double类型,范围比float大,因此double类型向float类型转化时会报错。 如需转化:float y=(float)1.1或float y=1.1f,2.3 表达式,算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 条件运算符,2.3 表达式,算术运算符,关系运算符,关系运算符,逻辑
11、运算符,逻辑运算符,&:短路与(当第一个操作数为假时,则表达式的结果为假, 不再计算第二个操作数) |:短路或(当第一个操作数为真时,则表达式的结果为假, 不再计算第二个操作数),位运算符,位运算符,赋值运算符,赋值运算符,条件运算符,条件运算符 表达式1 ?表达式2 :表达式3 如果“表达式1”的值为非0(真), 则条件表达式的运算结果等于“表达式2”的值,否则,运算结果等于“表达式3”的值。 例如:int i=2,j=4;max; max=ij?i:j; /max的值为4,表达式中的类型转换,在表达式中,操作数的数据类型可以不同,只要相互兼容即可。当表达式中混合了几种不同的数据类型时,C#
12、会基于运算的顺序将它们自动转换成同一类型。 隐式转换:数值范围小的类型数值范围大的类型,无符号整数类型 有符号整数类型(float不能转换为decimal),2.4 选择语句,if ( ) if ( ) else if ( ) else (else语句与最近的if匹配) switch,条件判断嵌套 if,机票预定:输出实际机票价格 原价为4000元 5-10月为旺季,头等舱打9折,经济舱打7.5折 其他时间为淡季,头等舱打6折,经济舱打3折,需要两次判断 首先判断是旺季还是淡季 再判断头等舱还是经济舱,嵌套 if 实现,条件判断嵌套 if,if (month = 5 else / 淡季 / ,
13、关键代码,嵌入的一对 ifelse,switch 示例,从键盘输入学生的百分制成绩,换算成等级成绩 90-100:A,80-89:B,70-79:C,60-69:D,其余:E,switch 示例,Console.Write(“输入学生百分制成绩:”); int grade =int.Parse(Console.ReadLine(); switch ( grade/10 ) case 9: case 10: Console.WriteLine( “你的成绩为:A”); break; case 8: Console.WriteLine( “你的成绩为:B”); break; case 7: Con
14、sole.WriteLine( “你的成绩为:C”); break; case 6: Console.WriteLine( “你的成绩为:D”); break; default: Console.WriteLine ( “你的成绩为:E”); break; ,条件判断的表达式类型 整型或字符串 break 语句的要求: 每个 case 都有 break default 也要有 break 特殊情况:,case 中没有其他语句时, 不需要break语句,2.4 循环语句,While语句 do-while语句 for 语句,2.4 循环语句,用不同的循环语句求,While语句,using Syst
15、em; public class Sum100 public static void Main ( ) int Sum , i ; Sum=0; i=1; while (i=100) Sum+=i; i+; Console.WriteLine (“Sum is “ + Sum); ,do-while语句,using System; public class Sum100 public static void Main ( ) int sum , i ; sum=0; i=1; do sum+=i; i+; while (i=100) Console.WriteLine (“sum is “ +
16、 sum); ,for 语句,using System; public class Sum100 public static void Main ( ) int sum , i ; for (sum=0, i=1; i=100; i+) sum+=i; Console.WriteLine (“sum is “ + sum); for (sum=0, i=1; i=100; sum+=i, i+) ; / 循环体是一空语句 Console.WriteLine (“sum is “ + sum); ,2.6 跳转语句,continue语句 break语句 return语句,2.6 跳转语句,在循环
17、结构中, continue 和 break怎样跳转?,for() continue; ,for() break; ,跳出循环结构,跳到下次循环,在二重循环中会怎样呢?,Continue语句,下面红色框中代码的作用是什么?,int count = 0; for (i = 0; i 3; i+) / 提示输入成绩 for (j = 0; j 4; j+) Console.Write(“第0个学员的成绩:“, j + 1); score = int.Parse(Console.ReadLine(); sum = sum + score; if (score 85) continue; count+;
18、 / 计算平均分并输出 ,continue 跳出本次循环,继续下一次循环,统计成绩在85分以上的学员人数,Break语句,5个专卖店促销,每个专卖店每人限购3件衣服,可以随时选择离开,离店时要结账,for(i=0;i5;i+) / 每次进一个专卖店 for(j=0;j3;j+) / 每个店限购3件 if(离开这家店) break; 选购一件衣服 结账 ,Break语句,关键代码,int i = 0, j = 0,count=0; string choice; for (i = 0; i 5; i+) /外层循环控制依次进入下一个专卖店 Console.WriteLine(“n欢迎光临第0家专卖
19、店“,i+1); for (j = 0; j 3; j+) / 内层循环一次买一件衣服 Console.Write(“要离开吗?y/n“); choice = Console.ReadLine(); if (choice = “y“) / 如果离开,就跳出,结账,进入下一个店 break; Console.WriteLine(“买了一件衣服“); count+; / 买一件衣服 Console.WriteLine(“离店结账,买了0件衣服“,count);,break 跳出内层循环,choice = “y“,2.6 跳转语句,for() for() continue; ,for() for()
20、 break; ,跳出本层循环, 继续执行外层循环,跳出本次循环,继续下一次循环,break 和 continue 用在二重循环中:,return语句,语法形式: return; 或 return 表达式; return语句出现在一个方法内,在方法中执行到return语句时,程序流程转到调用这个方法处。如果方法没有返回值(返回类型修饰为void),则使用return返回;如果方法有返回值,那么使用return表达式格式,其后面跟的表达式就是方法的返回值。,return语句,using System; public class Prime100 public static bool prime
21、(int m) for (int i=2; im ; i+) if ( m % i =0 ) return false; / 返回给调用者 return true; ,求1-100之间所有素数,public static void Main ( ) int m , k , n=1 ; Console.Write (“0,-4“,2 ); for ( m =3; m100; m+=2 ) if ( prime(m) ) / 调用方法prime Console.Write (“0,-4“,m ); if (+n %10 =0) Console.WriteLine (“n“ ); Console.R
22、ead (); ,2.7 数组,声明一维数组,数据类型 数组名 例如:int a1; double f1; string s1;,创建一维数组对象,数据类型 数组名 数组名=new 数据类型元素个数 或 数据类型 数组名=new 数据类型元素个数,一维数组初始化,如何设置大小及初始化?,/ 使用 new 设置大小 / 创建长度为5的整型数组 int array = new int5;,/ 创建的同时初始化 int arr = new int5 0,1,2,3,4; int arr = new int 0,1,2,3,4; / 省略长度 int arr = 0,1,2,3,4; / 省略new,
23、5方括号中的数字决定数组的长度,0,1,2,3,4大括号中的元素个数决定数组的长度,一维数组,使用一维数组 for 循环 for (int i=0;i数组个数;i+) /数组名 i foreach循环 foreach(数据类型 变量名 in 数组名) /循环体 变量名:循环变量,依次获取数组中各元素的值,其类型必须与数组的类型一致。,一维数组,获得数组的长度(元素的个数):,数组名.Length,常作为循环的条件,/ 循环打印数组元素 int array = new int5 0, 1 ,2, 3, 4; / 声明并初始化一维数组 for (int i = 0; i array.Length;
24、i+ ) / 输出数组中的所有元素 Console.WriteLine(arrayi); ,/ 循环打印数组元素 int array = new int5 0, 1 ,2, 3, 4; / 声明并初始化一维数组 foreach(int i in array) / 输出数组中的所有元素 Console.WriteLine(i); ,常见错误,数组初始值的数目与数组的长度不一样,/ 循环打印数组元素 int array = new int5 0, 1 ,2; / 声明并初始化一维数组 for (int i = 0; i array.Length;i+ ) / 输出数组中的所有元素 Console.
25、WriteLine(arrayi); ,初始值的个数必须与数组的长度一样!,代码错误,一维数组,string arr3; arr3 = new string3 “I“, “like“, “C# “ ;,int arr1 = new int3;,int arr2 = new int31,2;,int arr1,new int31,2,0,正误判断:,int arr4 = new string3;,类型应一致,2.7 数组,声明多维数组,数据类型 , , 数组名 例如:int , score; double, table;,创建多维数组对象,数据类型 , , 数组名 数组名=new 数据类型siz
26、e1,size2,size3 size1,size2,size3分别标明每一维的元素个数 或 数据类型 , , 数组名=new 数据类型size1,size2,size3,二维数组,如何设置二维数组大小及初始化?,/ 使用 new 设置大小 / 创建长度为2*3的整型数组 int, array = new int2,3;,/ 创建的同时初始化 int, arr = new int2,30,1,2,3,4,5; int , arr = new int,0,1,2,3,4,5; / 省略长度 int, arr = 0,1,2,3,4,5; / 省略new,2,3方括号中的数字决定数组的行数和列数,
27、0,1,23,4,5;大括号中的元素个数决定数组的行数和列数,二维数组,使用二维数组 使用双重循环,外循环控制行,内循环控制列。 for (int i=0;i数组行数;i+) for (int j=0;j数组列数;j+) /数组名 i , j foreach循环 foreach(数据类型 变量名 in 数组名) /循环体 变量名:循环变量,依次获取数组中各元素的值,其类型必须与数组的类型一致。,数组与System.Array,获得某一维元素个数,数组名.Length,System.Array类型是所有数组类型的抽象基类型 任何数组可以使用System.Array具有的属性及方法 获得数组的长度
28、(元素的个数):,数组名. GetLength(int dimension),二维数组,/ 循环打印数组元素 int , array = new int2,30,1,2,3,4,5; / 声明并初始化二维数组 for (int i = 0; i array.GetLength(0);i+ ) / 输出数组中的所有元素 for (int j = 0; j array.GetLength(1);j+ ) Console.WriteLine(arrayi,j); ,/ 循环打印数组元素 int , array = new int2,30,1,2,3,4,5; / 声明并初始化二维数组 foreach
29、(int i in array) / 输出数组中的所有元素 Console.WriteLine(i); ,二维数组使用,2.7 数组,不规则数组:是一个数组的数组,它的内部每个数组的长度可以不同; 声明不规则数组,数据类型 数组名 例如:int score; double table;,创建多维数组对象,数据类型 数组名 数组名=new 数据类型 size size表示不规则数组的行数 数组名0=new 数据类型size0 数组名1=new 数据类型size1 数组名size-1=new 数据类型sizen,不规则数组,不规则数组初始化,/ 创建的同时初始化 int array = new i
30、nt3 ; /array是由3个数组组成的数组 array0=new int1,2,3 array1=new int1,2,3,4,5 array2=new int1,2,不规则数组,/ 循环打印数组元素 int array = new int3 ; /array是由3个数组组成的数组 array0=new int1,2,3; array1=new int1,2,3,4,5; array2=new int1,2 for (int i = 0; i array.Length;i+ ) / 输出不规则数组中的所有元素 for (int j = 0; j arrayi.Length;j+ ) Con
31、sole.WriteLine(arrayij); ,/ 循环打印数组素 int , array = new int2,30,1,2,3,4,5; / 声明并初始化二维数组 foreach(int i in array) / 输出数组中的所有元素 Console.WriteLine(i); ,不规则数组使用,ArrayList(补充),System.Collections.ArrayList类是一个特殊的数组。通过添加和删除元素,就可以动态改变数组的长度。 优点: 1. 支持自动改变大小的功能 2. 可以灵活的插入元素 3. 可以灵活的删除元素 4. 可以灵活访问元素 局限性: 跟一般的数组比起
32、来,速度上差些,声明数组列表,ArrayList 数组列表名称=new ArrayList(),ArrayList,用一个已经实例化的数组初始化数组列表,ArrayList 数组列表名称=new ArrayList(数组名称),int myArray=new int61,2,3,4,5,6; ArrayList aList=new ArrayList(myArray);,ArrayList,添加元素 -将对象添加到ArrayList的结尾处,数组列表.Add(object value),ArrayList aList=new ArrayList(); aList.Add(“a“); aList
33、.Add(“b“); aList.Add(“c“); aList.Add(“d“); aList.Add(“e“); /结果为:abcde,ArrayList,添加元素 -将对象添加到ArrayList的指定位置,数组列表. Insert(int index,object value),ArrayList,ArrayList aList=new ArrayList(); aList.Add(“a“); aList.Add(“b“); aList.Add(“c“); aList.Add(“d“); aList.Add(“e“); aList.Insert(0,“ff“); /结果为:ffabcd
34、e,删除元素-从ArrayList中移除特定对象的第一个匹配项,注意是第一个,ArrayList,数组列表. Remove(object obj),aList.Add(“a“); aList.Add(“b“); aList.Add(“c“); aList.Add(“d“); aList.Add(“e“); aList.Remove(“a“); /结果为bcde,删除元素-移除ArrayList的指定索引处的元素,ArrayList,数组列表. RemoveAt(int index),aList.Add(“a“); aList.Add(“b“); aList.Add(“c“); aList.Ad
35、d(“d“); aList.Add(“e“); aList.RemoveAt(0); /结果为bcde,删除元素-从ArrayList中移除一定范围的元素。 Index表示索引,count表示从索引处开始的数目,ArrayList,数组列表. RemoveRange(int index,int count),aList.Add(“a“); aList.Add(“b“); aList.Add(“c“); aList.Add(“d“); aList.Add(“e“); aList.RemoveRange(1,3); /结果为ae,删除元素-从ArrayList中移除所有元素。,ArrayList,数组列表. Clear(),获取元素值-获取数组列表中第i个元素,ArrayList,数组列表i-1,总结,C#基本数据类型分为哪两类? 值类型与引用类型的区别是什么? 选择、循环、跳转语句的使用方法是什么? 如何定义和初始化数组? 如何访问数组元素?,
链接地址:https://www.31doc.com/p-2259881.html