《第3章C语法基础.ppt》由会员分享,可在线阅读,更多相关《第3章C语法基础.ppt(53页珍藏版)》请在三一办公上搜索。
1、第3章 C#语法基础,3.1 数据类型(1)值类型:整数、字符、实数、布尔数、结构、枚举(2)引用类型:class(类)、interface(接口)、数组、delegate(委托)、object和string。object是C#中所有类型的根类。string直接继承object类的密封类型,值类型就是一个包含实际数据的量。C#以堆栈方式分配存储区域给该变量,对其读/写直接在这块区域进行。例如:int iNum=10;/分配一个32位内存区域给变量iNum,/并将10放入该内存区域 iNum=iNum+10;/从变量iNum中取出值,加上10,/再将计算结果赋给iNum,引用类型不存储实际数据,
2、而是存储其引用 首先在堆栈上创建一个引用变量,然后在堆上创建对象本身,再把这个内存的首地址赋给引用变量。,例如:string s1,s2;s1=ABCD;s2=s1;s1、s2是指向字符串的引用变量,s1的值是字符串ABCD存放在内存的地址 语句s2=s1使得s2、s1都引用ABCD,例:引用类型,思考:输出s2和s1,有何结果?,3.1.1 简单值类型1.整数类型有符号整数包括sbyte(符号字节型)、short(短整型)、int(整型)、long(长整型)。无符号整数默认为正数,包括byte(字节型)、ushort(无符号短整型)、uint(无符号整型)、ulong(无符号长整型)。,2.
3、char(字符型)范围是065535之间的Unicode字符,占2个字节,char a1=s;,char a2=;/表示单斜杠,string s1=“perpson”/string是字符类,用双引号,char a3=;/表示单引号,转义符,3.实数类型包括float(单精度浮点型)、double(双精度浮点型)、decimal(十进制型)。,double x=1.2;/亦可加上 d 或 Dfloat y=-0.5f/需加上 f 或 Fdecimal z=3.2m/需加上 m 或 M,4 布尔类型bool(布尔型):表示布尔逻辑量。数据范围是“true”和“false”。占一个字节。,bool
4、b1=true;bool b2=false;,C#中的数据类型,3.1.2 复合值类型1 结构包含数据、构造函数、方法、属性、事件等成员,struct MyStruct/定义字段x,ypublic int x;public int y;public MyStruct(int i,int j)/定义构造函数 x=i;y=j;,例:值类型的结构,2 枚举对变量的取值范围作特殊限制enum Weekday Mon,Tues,Wedn,Thur,Fri,Sat,SunWeekday day1=Weekday.Mon;,思考:枚举值可以相减,却不能相加,何故?,3.1.3 类将结构的struct 改为c
5、lass便得到类,但类是引用类型例:定义类并创建实例,结构与类的区别,结构用于点、矩形和颜色等轻量对象值类型在堆栈上分配,引用类型在堆上分配。前者快于后者堆用完以后由.NET的垃圾收集器自动回收,拖累性能,3.1.4 数组数组有三种:一维数组、多维数组和不规则数组数组也是引用类型,1一维数组一维数组的声明:,可在实例化的同时初始化int xs=new int 3 10,20,30;int xs=10,20,30;,使用new操作符创建数组实例:num=new int3;,type arrayName;/type是数据类型。例:int num;,2多维数组,多维数组的声明type,arrayNa
6、me;n个逗号表示n+1维数组。,也可在实例化时初始化int,x=new int2,3 1,2,3,3,5,8;int,y=new int,10,50,25,75,50,150;int,z=1,2,3,5,8,13,1,2,3,5,8,13;,或者int,nums=new 3,2;,例如:int,nums;/二维数组nums=new int 3,2,3不规则数组,不规则数组是数组的数组,每个数组的长度可以不同不规则数组的声明type arrayName;例如:int jagged;/二维不规则数组创建数组实例,不规则数组初始化每一个数组需要单独使用new运算符生成。例如:char st1=ne
7、w char 3;/st1由三个数组组成st10=new char S,e,p,t,e,m,b,e,r st11=new char O,c,t,o,b,e,rst12=new char N,o,v,e,m,b,e,r;,数组元素的访问1一维数组的引用数组名下标2多维数组的引用数组名下标1,下标2,下标n3不规则数组的引用数组名下标1下标2下标n,【例】打印杨辉三角形,3.1.5 类型转换分隐式与显式1.隐式转换数值范围小的类型向大的无符号整数转为有符号的,int b=7;char a=b;/出错,char letter=Aint num=32+letter;/合法,int x=123456;l
8、ong y=x;/合法,2.显式转换也称强制转换,用括弧明确指示转换类型。格式:(数据类型名称)数据,显式转换可能损失数据:decimal d=234.55M;int x=(int)d;,例如:int x=600;short z=(short)x;,派生类可隐式转换为基类,反之需显式class Student class Graduate:Student Graduate g1=new Graduate();Student s1=g1;Graduate g2=(Graduate)s1;,3.使用方法进行数据类型的转换,(2)ToString方法将其他数据类型转换为字符串。格式为:变量名称.To
9、String()例如:int x=123;string s=x.ToString();,(1)Parse方法将特定格式的字符串转换为数值。格式为:数值类型名称.Parse(字符串型表达式)例如:int x=int.Parse(123);,演示:文本框字转数、数转字,(3)使用Convert转换,System.Convert类中有一套静态方法实现类型的转换,例如:string str=32767;System.Convert.ToInt16(str);可以进行正常的类型转换。,或string str=;System.Convert.ToInt16(str);/无意义 产生异常,无意义的转换将引发
10、异常,将不执行任何转换string str=32768;System.Convert.ToInt16(str);/超过范围,4.装箱与拆箱“装箱”将其他类型包装成object引用类型“拆箱”操作与“装箱”相反,它是将一个object类型转换成其他类型。,值类型转换为引用类型无需显式转换;反之需要,例:装箱和拆箱,int x=3;object y=x;/装箱 int z=(int)y;/拆箱,演示:菜单项之拆箱操作,3.2 操作符和表达式3.2.1 算术操作符-(取负)、+(取正)、+(加)、-(减)、*(乘)、/(除)、%(求余)。int x1=10/3;/x1=3int x2=10%3;/x
11、2=1double y1=5.4/1.5;/y1=3.6double y2=5.4%1.5;/y1=0.9,3.2.2 自增和自减操作符int x=100;Console.WriteLine(x+);/先输出100,后计算x=x+1Console.WriteLine(+x);/先计算x=x+1,后输出102int y=50;Console.WriteLine(-y);/先计算y=y-1,后输出49Console.WriteLine(y+);/先输出49,后计算y=y-1,3.2.3 位操作符取反 左移 与&或|异或,3.2.4 赋值操作符简单赋值=复合赋值+=-=*=/=%=&=|=赋值操作符
12、从右向左计算,例:byte x=20;x=2;byte y=x+=5;y+=x+=2;,3.2.5 关系操作符比较操作符=!=判断操作符is,例:int x=15;int y=15/2*2;bool b1=(x=y);bool b2=(x=y);,int x=5;Console.WriteLine(o is int);,3.2.6 逻辑操作符逻辑与&逻辑或|逻辑非!,例:int x=15;int y=15/2*2;,bool b1=(x y),3.2.7 条件操作符?:例:int x=15;int y=15/2*2;int z=(x y)?x:y;,3.2.8 操作符的优先级与结合性 1.优先
13、级 一元运算符 二元和三元运算符。算术 关系 逻辑 条件 赋值。乘、除、求余 加、减;小于、大于、小于等于、大于等于 相等与不等 非 与 或。,2.结合性赋值操作符与条件运算符是由右向左结合的,赋值操作符以外的二元运算符是由左向右结合的。例x+y+z是按(x+y)+z的顺序运算而x=y=z是按x=(y=z)的顺序运算,操作符的优先级与结合性,例:已知int a=3,b=5,c=-1,d=7;求:(c+d)/(a-b)%2 0)|d 0)|d 02,6/(-2)%2 0&True|d 03,-3%2 0&True|d 04,-1 0&True|7 05,True&True|False6,True
14、,3.3 控制结构,选择if,if(x=60)Console.Write(及格);,Console.Write(及格);,x=60,结束,开始,选择ifif-else,if(x=60)Console.Write(及格);else Console.Write(不及格);,Console.Write(及格);,x=60,结束,开始,Console.Write(不及格);,选择ifif-elseif-else if.-else,char grade;if(x=80)grade=优;else if(x=60)grade=良else grade=差;,grade=优,x=80,结束,开始,grade=良
15、,grade=差,x=60,选择ifif-elseif-else if.elseswitch,int i=x/20;char grade;switch(i)case 4:grade=优;break;case 3:grade=良;break;default:grade=差;break;,grade=优,i=4,结束,开始,grade=良,grade=差,i=3,循环while,double x=1000;int i=0;while(i 5)x=x*1.1;i+;,x=x*1.1;i+;,i5,结束,开始x=1000;i=0;,循环whiledo-while,double x=1000;int i
16、=0;do x=x*1.1;i+;while(i 5),x=x*1.1;i+;,i5,结束,开始x=1000;i=0;,循环whiledo-whilefor,double x=1000;for(int i=0;i 5;i+)x=x*1.1;,x=x*1.1;i+;,i5,结束,开始x=1000;i=0;,循环whiledo-whileforforeach,int x=3,7,11,20;foreach(int i in x)Console.Write(i);,Console.Write(i);,ix.Length,结束,开始i=0;,控制结构,跳转breakcontinuereturngoto
17、,49,思考题,简述值类型和引用类型的不同之处。值类型之间的转换在哪些情况下会发生数据丢失?简述位操作符、关系操作符和逻辑操作符的用法。程序的控制结构有哪几种基本形式?使用不同的循环结构,计算一个整数数组的平均数、中位数和平方和。,作业,(1)课本第46页,2、3两小题(2)编写程序,利用二维数组实现从键盘输入全班学生各门课成绩。求出每个人的平均成绩并输出。提示:可用下面方法从键盘输入数字串并转换为整数 int x=int.Parse(Console.ReadLine();,作业2,已知a=3,b=5,c=-1,d=7;求逻辑表达式的值a b/cd&!(c0)|dc,作业 9月9日,1,c1和c2是两个类实例,t1和t2是两个结构体,s1和s2是两个字符串,下面哪些语句使两个变量指向同一内存区域?c1=c2t1=t2s1=s22,一百二十字以内描述引用类型和值类型区别3,百字以内描述类型转换的规则,