资源预览内容
第1页 / 共101页
第2页 / 共101页
第3页 / 共101页
第4页 / 共101页
第5页 / 共101页
第6页 / 共101页
第7页 / 共101页
第8页 / 共101页
第9页 / 共101页
第10页 / 共101页
亲,该文档总共101页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第2章 C#语言编程基础 2.1 标识符和关键字 2.2 基本数据类型 2.3 变量 2.4 文字常量 2.5 表达式第2章 C#语言编程基础(续)2.6 结构与枚举2.7 值类型与引用类型2.8 控制台输入2.9 习题2.1 标识符和关键字什么是标示符?什么是标示符?程序员为程序中一些要素所定义的名字,例程序员为程序中一些要素所定义的名字,例变量名、对象名、方法名等。变量名、对象名、方法名等。 标识符命名规则:标识符命名规则: 由字母、数字、下划线由字母、数字、下划线“_”组成。组成。第第1个字符必须是个字符必须是字母字母或下划线。或下划线。对字母大、小写敏感。对字母大、小写敏感。不能与关键字同名。不能与关键字同名。C#语言使用语言使用Unicode字符集,字符集,字母几乎包括当今世界上的任意字母几乎包括当今世界上的任意的印刷体文字。字体不同产生的的印刷体文字。字体不同产生的标示符也不同。实际编程时,一标示符也不同。实际编程时,一般采用般采用ASCII字符集(它是字符集(它是Unicode的子集)的子集)2.1 标识符和关键字(续)C#语言还允许标识符使用前缀语言还允许标识符使用前缀,但,但并不并不是标识符的实际组成部分:是标识符的实际组成部分:带带“”前缀的标识符称作逐字标识符。前缀的标识符称作逐字标识符。例:例:if/不是合法的标识符不是合法的标识符if/合法的标识符合法的标识符price /合法,但与合法,但与priceprice是同名标识符是同名标识符2.1 标识符和关键字(续) 思考以下标识符是否合法:思考以下标识符是否合法:HelloWorld _isTrue check_in5 2example $100 Hello! Hello World Hello+World /正确正确/正确正确/正确正确/非法起始字符非法起始字符/非法起始字符非法起始字符/非法含有字符非法含有字符“!” /非法含有空格非法含有空格 /非法含有运算符非法含有运算符2.1 标识符和关键字(续)关键字:是C#编译器的保留字,不能用作标识符。C#语言共有77个关键字。2.2 基本数据类型整数类型:值类型sbyte、short、int、long byte、ushort、uint、ulong 浮点数类型:值类型float、 doubledecimal预定义类型预定义类型定义定义字节数字节数sbyte-128127之间的整数之间的整数1byte0255之间的整数之间的整数1short-3276832767之间的整数之间的整数2ushort065535之间的整数之间的整数2int-21474836482147483647之间的整数之间的整数4uint04294967295之间的整数之间的整数4long-9223372036854775808 9223372036854775807之间的整数之间的整数8ulong0188446744073709551615之间的整数之间的整数82.2 基本数据类型(续)字符型:值类型char 布尔型:值类型bool字符串型:字符串型:引用类型引用类型stringobject型:型:引用类型引用类型预定义类型预定义类型定义定义字节数字节数bool逻辑值:逻辑值:true和和false1float单精度浮点值,有单精度浮点值,有7个有效位个有效位4double双精度浮点值,有双精度浮点值,有1516个有效位个有效位8decimal精确的十进制值,有精确的十进制值,有2829个有效位个有效位16char065535之间的之间的Unicode字符字符2object其它所有类型的基类型其它所有类型的基类型不定不定string任意长度的任意长度的Unicode字符串字符串不定不定2.3 变 量变量声明的一般格式如下变量声明的一般格式如下:数据类型数据类型 变量名变量名1 1,变量名,变量名n n; double width; char c;int i, j, k;声明变量时,可以同时初始化。声明变量时,可以同时初始化。 int i=1, j=2;double width=5.6,length;bool answer=true;char c= A;声明:指定类型声明:指定类型 指定变量名指定变量名 以分号结束以分号结束初始化:指定类型初始化:指定类型 指定变量名指定变量名 使用赋值运算符使用赋值运算符 (=) 指定值指定值 以分号结束以分号结束2.4 文字常量 文字常量也称字面常量或字面值,是指直文字常量也称字面常量或字面值,是指直接出现在程序中的数据值接出现在程序中的数据值2.4.1 整型常量整型常量 2.4.2 浮点型常量浮点型常量 2.4.3 字符常量字符常量 2.4.4 字符串常量字符串常量 2.4.5 布尔常量布尔常量2.4.1 整型常量十六进制表示:十六进制表示:以以以以0X0X或或或或0x0x开头,例:开头,例:开头,例:开头,例: 0X5cD0X5cD 十进制表示十进制表示:例:例:例:例:3232,02220222注意:注意:注意:注意:整型常量没有八进制表示形式。整型常量没有八进制表示形式。整型常量没有八进制表示形式。整型常量没有八进制表示形式。2.4.1 整型常量(续)整型常量的默认数据类型是整型常量的默认数据类型是int型,但当型,但当其值超出了其值超出了int型的取值范围时,它将相型的取值范围时,它将相应地被视为一个应地被视为一个uint型、型、long型或型或ulong型常量。型常量。加后缀加后缀L(或(或l)可以将整型常量显式说可以将整型常量显式说明为明为long或或ulong型;加后缀型;加后缀U(或(或u)可以将整型常量显式说明为可以将整型常量显式说明为uint或或ulong型。如果同时加上这两种后缀,整型常型。如果同时加上这两种后缀,整型常量就是量就是ulong型。型。567892567892L L /long/long型型型型3636u u / /uintuint型型型型3636ul ul / /ulongulong型型型型2.4.2 浮点型常量 一般表示形式(小数表示形式):一般表示形式(小数表示形式):由整数和小数两部分组成。由整数和小数两部分组成。由整数和小数两部分组成。由整数和小数两部分组成。可省略其中的整数部分。可省略其中的整数部分。可省略其中的整数部分。可省略其中的整数部分。例:例:例:例: 5.65.6,6.06.0,.9.9 指数表示形式:指数表示形式:由尾数、字母由尾数、字母由尾数、字母由尾数、字母E E(或(或(或(或e e)、指数组成。)、指数组成。)、指数组成。)、指数组成。例:例:例:例:4.1E124.1E12,.27e4.27e4,5.0E-25.0E-2,5E-25E-22.4.2 浮点型常量(续)浮点型常量的浮点型常量的默认数据类型为默认数据类型为double型。型。要将其说明为要将其说明为float型,应加后缀型,应加后缀F(或(或f)。)。例:例: 5.6f,4.1E5F要将其说明为要将其说明为decimal型,应加后缀型,应加后缀M(或(或m)。)。 例:例: 4.1E5M加后缀加后缀D(或(或d),),可以将浮点型常量显可以将浮点型常量显式说明为式说明为double型。型。例:例:6.2D2.4.2 浮点型常量(续)用一般表示形式表示的浮点型常量,用一般表示形式表示的浮点型常量,如果其后加有后缀如果其后加有后缀F、f、M、m、D或或d,则小数点和小数部分可以同时省略。,则小数点和小数部分可以同时省略。例:例:例:例: 1 1F F/ /floatfloatfloatfloat型型型型2 2MM/ /decimaldecimaldecimaldecimal型型型型2222D D/ /doubledoubledoubledouble型型型型2.4.3 字符常量单引号括起来的一个字符单引号括起来的一个字符例:例:A, b, $, *转义字符转义字符以反斜杠以反斜杠“”开头,后跟一个字符或开头,后跟一个字符或Unicode码。码。 用用用用4 4位十六进制位十六进制位十六进制位十六进制UnicodeUnicode码表示:十六进制数字必须码表示:十六进制数字必须码表示:十六进制数字必须码表示:十六进制数字必须有有有有4 4位位位位。例:例:例:例:u0047 u0047 / / A A A A u0007 u0007 / /beepbeepbeepbeep声声声声通常用来表示那些一般方法无法表示的字符。通常用来表示那些一般方法无法表示的字符。字符常量的数据类型是字符常量的数据类型是charchar。2.4.3 字符常量(续)转义字符转义字符含含 义义UnicodeUnicode码码0 空字符空字符 u0000a 响铃响铃 u0007b退格退格u0008f换页换页u000Cn换行换行 u000Ar回车回车 u000Dt水平制表符水平制表符u0009 反斜杠反斜杠 u005C 单引号单引号u0027 双引号双引号 u0022 2.4.4 字符串常量用双引号括起来的一串字符用双引号括起来的一串字符串中的字符也可以是转义字符。串中的字符也可以是转义字符。串中的字符也可以是转义字符。串中的字符也可以是转义字符。标识字符串的两个双引号应该在同一行。标识字符串的两个双引号应该在同一行。标识字符串的两个双引号应该在同一行。标识字符串的两个双引号应该在同一行。例:例:例:例: a string a string Hello!n How are you? Hello!n How are you?2.4.4 字符串常量(续)逐字字符串表示法。逐字字符串表示法。 “ “c:cshapebookc:cshapebook“ “ 等价于等价于等价于等价于 c:cshapebookc:cshapebook“ “ 逐字字符串中的双引号必须双写。逐字字符串中的双引号必须双写。 I say I do.I say I do.标识逐字字符串的两个双引号不必在程序标识逐字字符串的两个双引号不必在程序的同一行。的同一行。 the string hasthe string hastwo linestwo lines/ /正确正确正确正确 the string hasthe string hastwo linestwo lines/ /错误错误错误错误2.4.5 布尔常量false(假)、true(真)。数据类型为bool。例2-1 变量与文字常量的使用源代码运 行控制台输出 System.System.Console.WriteConsole.Write()()System.System.Console.WriteLineConsole.WriteLine()()这两种方法都用于向屏幕输出结果,它们这两种方法都用于向屏幕输出结果,它们可用于所有的数据类型,所不同的是:可用于所有的数据类型,所不同的是:Console.WriteLineConsole.WriteLine()()方法先输出信息后换方法先输出信息后换行行. .而而Console.WriteConsole.Write()()方法不换行输出信息。方法不换行输出信息。格式输出格式输出用用0,10,1,,表示第表示第1 1个参数和第个参数和第2 2个参个参数值数值, ,及其他参数值的占位符,当输出时用及其他参数值的占位符,当输出时用第第1 1个参数和第个参数和第2 2个参数值个参数值, ,及其他参数值取及其他参数值取代。代。 例如:例如:int number = 9;Console.WriteLine(the number is 0 , number);Console.WriteLine(arr 0 = 1 , I , arri );例2-1代码 变量与文字常量的使用/VariableLiteral.csusing System;class VariableLiteral static void Main() /声明变量,并用文字常量初始化声明变量,并用文字常量初始化 bool isTrue=false; char c1=A; char c2=u0038; sbyte b1=-12; byte b2=12; short s1=-012; ushort s2=16; int i1=-0x48bF; uint i2=12; long l1=0X2Dcfa6; ulong l2=0x2dcfa6L; /十进制/十六进制/整型常量加后缀L或l,说明为long型 float f1=1; float f2=22f; float f3=.26f; double d1=22D; double d2=2e2; double d3=-2.1e12d; decimal d4=22; decimal d5=-2.1e12m; /加后缀f,将浮点型常量说明为float型/加后缀D,将浮点型常量说明为double型/double型常量/double型常量可以加后缀D或d/加后缀m,将浮点数型常量说明为decimal型/ /输出输出输出输出 Console.WriteLineConsole.WriteLine(布尔型变量布尔型变量布尔型变量布尔型变量isTrueisTrue= =00,isTrue);,isTrue); Console.WriteLineConsole.WriteLine(字符型变量字符型变量字符型变量字符型变量c1=c1=00,c2=,c2=11,c1,c2);,c1,c2); Console.WriteLineConsole.WriteLine(字节型变量字节型变量字节型变量字节型变量b1=b1=00, ,无符号字节型变量无符号字节型变量无符号字节型变量无符号字节型变量b2=b2=11,b1,b2);,b1,b2); Console.WriteLineConsole.WriteLine(短整型变量短整型变量短整型变量短整型变量s1=s1=00, ,无符号短整型变量无符号短整型变量无符号短整型变量无符号短整型变量s2s2= =11,s1,s2);,s1,s2); Console.WriteLineConsole.WriteLine(整型变量整型变量整型变量整型变量i1=i1=00, ,无符号整型变量无符号整型变量无符号整型变量无符号整型变量i2=i2=11,i1,i2);,i1,i2); Console.WriteLineConsole.WriteLine(长整型变量长整型变量长整型变量长整型变量l1=l1=00, ,无符号长整型变量无符号长整型变量无符号长整型变量无符号长整型变量l2=l2=11,l1,l2);,l1,l2); Console.WriteLineConsole.WriteLine(单精度浮点型变量单精度浮点型变量单精度浮点型变量单精度浮点型变量f1=f1=00,f2=,f2=11,f3=,f3=22,f1,f2,f3);,f1,f2,f3); Console.WriteLineConsole.WriteLine(双精度浮点型变量双精度浮点型变量双精度浮点型变量双精度浮点型变量d1=d1=00,d2=,d2=11,d3=,d3=22,d1,d2,d3);,d1,d2,d3); Console.WriteLineConsole.WriteLine(十进制小数型变量十进制小数型变量十进制小数型变量十进制小数型变量d4=d4=00,d5=,d5=11,d4,d5);,d4,d5); 运行结果布尔型变量布尔型变量布尔型变量布尔型变量isTrueisTrue=False=False字符型变量字符型变量字符型变量字符型变量c1=A,c2=8c1=A,c2=8字节型变量字节型变量字节型变量字节型变量b1=-12,b1=-12,无符号字节型变量无符号字节型变量无符号字节型变量无符号字节型变量b2=12b2=12短整型变量短整型变量短整型变量短整型变量s1=-12,s1=-12,无符号短整型变量无符号短整型变量无符号短整型变量无符号短整型变量s2=16s2=16整型变量整型变量整型变量整型变量i1=-18623,i1=-18623,无符号整型变量无符号整型变量无符号整型变量无符号整型变量i2=12i2=12长整型变量长整型变量长整型变量长整型变量l1=3002278,l1=3002278,无符号长整型变量无符号长整型变量无符号长整型变量无符号长整型变量l2=3002278l2=3002278单精度浮点型变量单精度浮点型变量单精度浮点型变量单精度浮点型变量f1=1,f2=22,f3=0.26f1=1,f2=22,f3=0.26双精度浮点型变量双精度浮点型变量双精度浮点型变量双精度浮点型变量d1=22,d2=200,d3=-2100000000000d1=22,d2=200,d3=-2100000000000十进制小数型变量十进制小数型变量十进制小数型变量十进制小数型变量d4=22,d5=-2100000000000d4=22,d5=-21000000000002.4.5 符号常量在声明语句中,可以声明一个标识符常量,在声明语句中,可以声明一个标识符常量,但必须在定义标识符时就进行初始化并且但必须在定义标识符时就进行初始化并且定义之后就不能再改变该常量的值。定义之后就不能再改变该常量的值。具体的格式为:具体的格式为: const const 类型类型类型类型 标识符标识符标识符标识符= =初值初值初值初值 例如:例如:例如:例如: const double PI=3.14159const double PI=3.141592.4.5 符号常量(续)为什么有必要使用符号常量?为什么有必要使用符号常量?防止一些固定的量被无意修改,导致程序运算防止一些固定的量被无意修改,导致程序运算防止一些固定的量被无意修改,导致程序运算防止一些固定的量被无意修改,导致程序运算出现错误;出现错误;出现错误;出现错误;列举更多的需要使用符号常量的情况;列举更多的需要使用符号常量的情况;可能的情况有物理化学数学等学科在计算中使可能的情况有物理化学数学等学科在计算中使可能的情况有物理化学数学等学科在计算中使可能的情况有物理化学数学等学科在计算中使用的常量,一些现实中固定不变的量,例如英用的常量,一些现实中固定不变的量,例如英用的常量,一些现实中固定不变的量,例如英用的常量,一些现实中固定不变的量,例如英文字母的个数等等。文字母的个数等等。文字母的个数等等。文字母的个数等等。2.5 表达式表达式由表达式由表达式由表达式由运算符运算符运算符运算符和和和和操作数操作数操作数操作数组成。组成。组成。组成。执行表达式操作所求的值称为表达式的值,执行表达式操作所求的值称为表达式的值,执行表达式操作所求的值称为表达式的值,执行表达式操作所求的值称为表达式的值,它也可用作另一个表达式的操作数。它也可用作另一个表达式的操作数。它也可用作另一个表达式的操作数。它也可用作另一个表达式的操作数。表达式值的类型由参加运算的数据的类型表达式值的类型由参加运算的数据的类型表达式值的类型由参加运算的数据的类型表达式值的类型由参加运算的数据的类型和运算符决定。和运算符决定。和运算符决定。和运算符决定。例:例:例:例:6+56+5x=4x=4x=2*6+2-4/2x=2*6+2-4/2 2.5 表达式(续)运算符和表达式Result = number*100变量变量变量变量常量常量操作数表达式操作数和运算符的组合运算符2.5 表达式(续)2.5.1 运算符运算符2.5.2 数值类型转换数值类型转换2.5.1 运 算 符用来实现操作数的加、减等运算。用来实现操作数的加、减等运算。运算符具有运算符具有优先级优先级和和结合性结合性。按要求操作数的多少,运算符可分为一元按要求操作数的多少,运算符可分为一元运算符、二元运算符、三元运算符。运算符、二元运算符、三元运算符。按运算性质,运算符可分为算术运算符、按运算性质,运算符可分为算术运算符、关系运算符、条件逻辑运算符等。关系运算符、条件逻辑运算符等。2.5.1 运 算 符(续) 基本赋值运算符基本赋值运算符基本赋值运算符基本赋值运算符 算术运算符算术运算符算术运算符算术运算符 关系运算符关系运算符关系运算符关系运算符 条件逻辑运算符条件逻辑运算符条件逻辑运算符条件逻辑运算符 位运算符位运算符位运算符位运算符 复合赋值运算符复合赋值运算符复合赋值运算符复合赋值运算符 条件运算符条件运算符条件运算符条件运算符 字符串连接运算符字符串连接运算符字符串连接运算符字符串连接运算符 改变优先级运算符改变优先级运算符改变优先级运算符改变优先级运算符基本赋值运算符基本赋值运算符(基本赋值运算符(基本赋值运算符(基本赋值运算符(= =)用于赋值运算。)用于赋值运算。)用于赋值运算。)用于赋值运算。例:例:例:例:x=2.6x=2.6x=y=z=2.6 x=y=z=2.6 4 4x x / /错误,左操作数必须是变量错误,左操作数必须是变量错误,左操作数必须是变量错误,左操作数必须是变量赋值运算时,左边变量的类型必须与右边赋值运算时,左边变量的类型必须与右边赋值运算时,左边变量的类型必须与右边赋值运算时,左边变量的类型必须与右边的值相容。的值相容。的值相容。的值相容。例:例:例:例:float x=1.2;float x=1.2; / /错误,不相容错误,不相容错误,不相容错误,不相容float y=1.5f;float y=1.5f;算术运算符基本算术运算符:+、-、*、/、%一元加、减运算符:+、 -自增、自减运算符:+、-基本算术运算符当当当当“ “/”/”运算符的两个操作数都是整数时,运算符的两个操作数都是整数时,运算符的两个操作数都是整数时,运算符的两个操作数都是整数时,其计算结果是运算后所得商的整数部分。其计算结果是运算后所得商的整数部分。其计算结果是运算后所得商的整数部分。其计算结果是运算后所得商的整数部分。例:例:例:例:5/2 5/2 “%”“%”的意义是求两个数相除后的余数。的意义是求两个数相除后的余数。的意义是求两个数相除后的余数。的意义是求两个数相除后的余数。例:例:例:例:10%4 10%4 4.6%2.1 4.6%2.1-7%5-7%57%-57%-5/ /值为值为值为值为2 2/ /值为值为值为值为0.40.4/ /值为值为值为值为-2-2/ /值为值为值为值为2 2/ /值为值为值为值为2 2一元加、减运算符一元加、减运算符意义等同于代数中的一元加、减运算符意义等同于代数中的正、负号。正、负号。实际编程时,一元加号通常省略。实际编程时,一元加号通常省略。 例:例:例:例:i=+5i=+5i=8/-2i=8/-2i=8/(-2)i=8/(-2)自增、自减运算符有前缀和后缀两种形式:有前缀和后缀两种形式:有前缀和后缀两种形式:有前缀和后缀两种形式: 前缀形式是先计算操作数的值,后把操作数的前缀形式是先计算操作数的值,后把操作数的前缀形式是先计算操作数的值,后把操作数的前缀形式是先计算操作数的值,后把操作数的值作为表达式的结果。值作为表达式的结果。值作为表达式的结果。值作为表达式的结果。 后缀形式是先将操作数的值作为表达式的结果,后缀形式是先将操作数的值作为表达式的结果,后缀形式是先将操作数的值作为表达式的结果,后缀形式是先将操作数的值作为表达式的结果,然后把操作数的值增然后把操作数的值增然后把操作数的值增然后把操作数的值增1 1或减或减或减或减1 1。例:例:例:例:intint i=5; i=5;intint j=3; j=3;intint k1=i+; k1=i+; intint k2=+i; k2=+i; intint m1=-j; m1=-j; intint m2=j-; m2=j-; /k1=5, i=6/k1=5, i=6/k2=7, i=7/k2=7, i=7/m1=2, j=2 /m1=2, j=2 /m2=2, j=1/m2=2, j=1 自增、自减运算符(续)自增、自减运算中的操作数只能是一个变量。自增、自减运算中的操作数只能是一个变量。自增、自减运算中的操作数只能是一个变量。自增、自减运算中的操作数只能是一个变量。例:例:例:例:5+5+ / /错误错误错误错误( (i-ji-j)-)- / /错误错误错误错误参与自增、自减运算的操作数也可以是浮点数参与自增、自减运算的操作数也可以是浮点数参与自增、自减运算的操作数也可以是浮点数参与自增、自减运算的操作数也可以是浮点数类型的变量。类型的变量。类型的变量。类型的变量。例例例例2-2 2-2 2-2 2-2 算术运算算术运算算术运算算术运算源代码运 行/ /ArithmeticOperation.csArithmeticOperation.csusing System;using System;class class ArithmeticOperationArithmeticOperation static void Main() static void Main() / /声明变量声明变量声明变量声明变量 intint k,mk,m; ; double d1,d2,d3; double d1,d2,d3; / /赋值赋值赋值赋值 d1=25.65;d1=25.65; d2=12.28; d2=12.28; 例例2-2 2-2 算术运算算术运算/ /intint型变量运算型变量运算型变量运算型变量运算 k=15+2;k=15+2; Console.WriteLine(intConsole.WriteLine(int k=15+2=0,k); k=15+2=0,k); k=15-2; k=15-2; Console.WriteLine(intConsole.WriteLine(int k=15-2=0,k); k=15-2=0,k); k=15*2; k=15*2; Console.WriteLine(intConsole.WriteLine(int k=15*2=0,k); k=15*2=0,k); k=15/2; k=15/2; Console.WriteLine(intConsole.WriteLine(int k=15/2=0,k); k=15/2=0,k); k=15%2; k=15%2; Console.WriteLine(intConsole.WriteLine(int k=15%2=0,k); k=15%2=0,k); k=2; k=2; m=k+; m=k+; Console.WriteLine(nintConsole.WriteLine(nint k=2nk+ k=2nk+后:后:后:后:k=0,k+=1,k,m);k=0,k+=1,k,m); m=+k; m=+k; Console.WriteLine(+kConsole.WriteLine(+k后:后:后:后:k=0,+k=1,k,m);k=0,+k=1,k,m); m=-k; m=-k; Console.WriteLine(-kConsole.WriteLine(-k后:后:后:后:k=0,-k=1,k,m);k=0,-k=1,k,m); m=k-; m=k-; Console.WriteLine(kConsole.WriteLine(k- -后:后:后:后:k=0,k-=1,k,m);k=0,k-=1,k,m); /double/double型变量运算型变量运算型变量运算型变量运算 Console.WriteLine(ndoubleConsole.WriteLine(ndouble d1=0, d2=1,d1,d2); d1=0, d2=1,d1,d2); d3=d1+d2; d3=d1+d2; Console.WriteLine(doubleConsole.WriteLine(double d3=d1+d2=0,d3); d3=d1+d2=0,d3); d3=d1-d2; d3=d1-d2; Console.WriteLine(doubleConsole.WriteLine(double d3=d1-d2=0,d3); d3=d1-d2=0,d3); d3=d1*d2; d3=d1*d2; Console.WriteLine(doubleConsole.WriteLine(double d3=d1*d2=0,d3); d3=d1*d2=0,d3); d3=d1/d2; d3=d1/d2; Console.WriteLine(doubleConsole.WriteLine(double d3=d1/d2=0,d3); d3=d1/d2=0,d3); d3=d1%d2; d3=d1%d2; Console.WriteLine(doubleConsole.WriteLine(double d3=d1%d2=0,d3); d3=d1%d2=0,d3); d3=d1+; d3=d1+; Console.WriteLine(d1+Console.WriteLine(d1+后:后:后:后:d1=0,d1+=1,d1,d3);d1=0,d1+=1,d1,d3); d3=-d1; d3=-d1; Console.WriteLine(-d1Console.WriteLine(-d1后:后:后:后:d1=0,-d1=1,d1,d3);d1=0,-d1=1,d1,d3); 运行结果(.NET Ctrl+F5)关系运算符、= 、= = 、 !=运算结果运算结果是一个是一个bool型的值型的值。“= =”和和 “!=”的操作数可以是除自定义的操作数可以是除自定义结构外的任意数据类型,其他关系运算符结构外的任意数据类型,其他关系运算符的操作数只能是整数、浮点数或字符。的操作数只能是整数、浮点数或字符。浮点数一般不能直接进行相等比较。浮点数一般不能直接进行相等比较。条件逻辑运算符! !(逻辑非)、(逻辑非)、(逻辑非)、(逻辑非)、&(条件与)、(条件与)、(条件与)、(条件与)、| |(条件或)、(条件或)、(条件或)、(条件或)、 (逻(逻(逻(逻辑异或)、辑异或)、辑异或)、辑异或)、& &(逻辑与)、(逻辑与)、(逻辑与)、(逻辑与)、| |(逻辑或)(逻辑或)(逻辑或)(逻辑或)要求操作数都必须是要求操作数都必须是要求操作数都必须是要求操作数都必须是boolbool类型,结果也是类型,结果也是类型,结果也是类型,结果也是boolbool类型类型类型类型条件逻辑运算符的运算规则如下条件逻辑运算符的运算规则如下条件逻辑运算符的运算规则如下条件逻辑运算符的运算规则如下x xy y!x!x x&(x&(& &)y)y x|(x|(| |)y)y xyxyfalsefalsefalsefalsetruetrueFalseFalsefalsefalsefalsefalsefalsefalsetruetruetruetruefalsefalsetruetruetruetruetruetruefalsefalsefalsefalsefalsefalsetruetruetruetruetruetruetruetruefalsefalsetruetruetruetruefalsefalse“&”和和 “|”运算执行流程图运算执行流程图Yesq值为假吗?Nop & q执行流程计算p的值p值为假吗?计算q的值计算结果为false计算结果为trueNoYesYesYesNoNop | q执行流程计算p的值p值为真吗?计算q的值计算结果为true计算结果为falseq值为真吗?条件逻辑运算符(续)进行条件与进行条件与进行条件与进行条件与“ “&”&”和条件或和条件或和条件或和条件或“ “|”|”运算时,只运算时,只运算时,只运算时,只要能够确定运算结果,运算就不再继续执行。要能够确定运算结果,运算就不再继续执行。要能够确定运算结果,运算就不再继续执行。要能够确定运算结果,运算就不再继续执行。例:例:例:例: intint i=2 , j=4 ; i=2 , j=4 ; boolbool b=i b=ij&jj&j+i-;+i-; / /b=falseb=falseb=falseb=false,i i i i2 2 2 2,j j j j4 4 4 4而进行而进行而进行而进行& &(逻辑与)、(逻辑与)、(逻辑与)、(逻辑与)、| |(逻辑或)运算时,不(逻辑或)运算时,不(逻辑或)运算时,不(逻辑或)运算时,不管左操作数是管左操作数是管左操作数是管左操作数是truetrue还是还是还是还是false,false,总会计算右操作总会计算右操作总会计算右操作总会计算右操作数的值数的值数的值数的值例例例例2-3 2-3 2-3 2-3 关系运算与条件逻辑运算关系运算与条件逻辑运算关系运算与条件逻辑运算关系运算与条件逻辑运算 源代码运 行/RelLogOperation.csRelLogOperation.csRelLogOperation.csRelLogOperation.csusing using using using System;System;System;System;class class class class RelLogOperationRelLogOperationRelLogOperationRelLogOperation static void static void static void static void Main()Main()Main()Main() intintintint i = 1, j = 2;i = 1, j = 2;i = 1, j = 2;i = 1, j = 2; boolboolboolbool b;b;b;b; Console.Console.Console.Console.WriteLine(WriteLine(WriteLine(WriteLine(iiii=0, j=1=0, j=1=0, j=1=0, j=1, , , , i,i,i,i, j);j);j);j); Console.Console.Console.Console.WriteLine(WriteLine(WriteLine(WriteLine(iiiij is 0 , j is 0 , j is 0 , j is 0 , (i (i (i (i j);j);j);j); Console.Console.Console.Console.WriteLineWriteLineWriteLineWriteLine( ( ( ( 经过经过经过经过b=ij&j+i-b=ij&j+i-b=ij&j+i-b=ij&j+i-运算后:运算后:运算后:运算后: );););); b = i j & j+ i-;b = i j & j+ i-;b = i j & j+ i-;b = i j & j+ i-; Console.Console.Console.Console.WriteLine(WriteLine(WriteLine(WriteLine(iiii=0,j=1,b=2=0,j=1,b=2=0,j=1,b=2=0,j=1,b=2, , , , i, j, b);i, j, b);i, j, b);i, j, b); Console.Console.Console.Console.WriteLine(WriteLine(WriteLine(WriteLine(iiii=j is 0=j is 0=j is 0=j is 0, , , , (i = j)(i = j)(i = j)(i = j);););); Console.Console.Console.Console.WriteLineWriteLineWriteLineWriteLine( ( ( ( 经过经过经过经过b=i=j|j+i-b=i=j|j+i-b=i=j|j+i-b=i=j|j+i-运算后:运算后:运算后:运算后: );););); b = i = j | j+ i-;b = i = j | j+ i-;b = i = j | j+ i-;b = i = j | j+ i-; Console.Console.Console.Console.WriteLine(WriteLine(WriteLine(WriteLine(iiii=0,j=1,b=2=0,j=1,b=2=0,j=1,b=2=0,j=1,b=2, , , , i, j, b);i, j, b);i, j, b);i, j, b); Console.Console.Console.Console.WriteLine(WriteLine(WriteLine(WriteLine(iiii=j is 0=j is 0=j is 0=j is 0, , , , (i = j);(i = j);(i = j);(i = j); Console.Console.Console.Console.WriteLineWriteLineWriteLineWriteLine( ( ( ( 经过经过经过经过b=i=j&j+i-b=i=j&j+i-b=i=j&j+i-b=i=j&j+i-运算后:运算后:运算后:运算后: );););); b = i = j & j+ i-;b = i = j & j+ i-;b = i = j & j+ i-;b = i = j & j+ i-; Console.Console.Console.Console.WriteLine(WriteLine(WriteLine(WriteLine(iiii=0,j=1,b=2=0,j=1,b=2=0,j=1,b=2=0,j=1,b=2, , , , i, j, b);i, j, b);i, j, b);i, j, b); Console.Console.Console.Console.WriteLine(WriteLine(WriteLine(WriteLine(iiii!=j is 0!=j is 0!=j is 0!=j is 0, , , , (i != j);(i != j);(i != j);(i != j); Console.Console.Console.Console.WriteLineWriteLineWriteLineWriteLine( ( ( ( 经过经过经过经过b=i!=j|j+i-b=i!=j|j+i-b=i!=j|j+i-b=i!=j|j+i-运算后:运算后:运算后:运算后: );););); b = i != j | j+ i-;b = i != j | j+ i-;b = i != j | j+ i-;b = i != j | j+ i-; Console.Console.Console.Console.WriteLine(WriteLine(WriteLine(WriteLine(iiii=0,j=1,b=2=0,j=1,b=2=0,j=1,b=2=0,j=1,b=2, i, j,i, j,i, j,i, j, b);b);b);b); Console.Console.Console.Console.WriteLine(WriteLine(WriteLine(WriteLine(iiiij is 0, j is 0, j is 0, j is 0, (i (i (i (i j)j)j)j);););); Console.Console.Console.Console.WriteLineWriteLineWriteLineWriteLine( ( ( ( 经过经过经过经过b=ii-b=ii-b=ii-b=ii-运算后:运算后:运算后:运算后: );););); b = i i-;b = i i-;b = i i-;b = i i-; Console.Console.Console.Console.WriteLine(WriteLine(WriteLine(WriteLine(iiii=0,j=1,b=2=0,j=1,b=2=0,j=1,b=2=0,j=1,b=2, i, i, i, i, j,j,j,j, b);b);b);b); Console.Console.Console.Console.WriteLine(WriteLine(WriteLine(WriteLine(iiii=j is 0=j is 0=j is 0=j is 0, , , , (i(i(i(i = j);= j);= j);= j); Console.Console.Console.Console.WriteLineWriteLineWriteLineWriteLine( ( ( ( 经过经过经过经过b=!(i=j)b=!(i=j)b=!(i=j)b=!(i=j)运算后:运算后:运算后:运算后: );););); b = !(i = j);b = !(i = j);b = !(i = j);b = !(i = j); Console.Console.Console.Console.WriteLine(WriteLine(WriteLine(WriteLine(iiii=0,j=1,b=2=0,j=1,b=2=0,j=1,b=2=0,j=1,b=2, , , , i,i,i,i, j,j,j,j, b);b);b);b); 运行结果(.NET Ctrl+F5)位运算符操作数和运算结果都是整数类型。运算对象是操作数的二进制“位”。分为按位运算符和移位运算符。运算符&|含义按位求反按位与按位或按位异或左移位右移位按位运算符 例: 0x71: 0 1 1 1 0 0 0 10x52:() 0 1 0 1 0 0 1 0 0x710x52:0 0 1 0 0 0 1 1 XYxx&yx|yxy00100001101110001111011移位运算符左移位(左移位(左移位(左移位()将左操作数的二进制值向右移动)将左操作数的二进制值向右移动)将左操作数的二进制值向右移动)将左操作数的二进制值向右移动指定的位数,右移后,移出的低位舍弃,如果指定的位数,右移后,移出的低位舍弃,如果指定的位数,右移后,移出的低位舍弃,如果指定的位数,右移后,移出的低位舍弃,如果原值为正则高位补原值为正则高位补原值为正则高位补原值为正则高位补0 0;如果原值为负则高位补;如果原值为负则高位补;如果原值为负则高位补;如果原值为负则高位补符号位。符号位。符号位。符号位。例2-4 位运算源代码运 行例2-4 源代码 位运算/BitOperation.csBitOperation.csBitOperation.csBitOperation.csusing System;using System;using System;using System;class class class class BitOperationBitOperationBitOperationBitOperation static static static static void Main()void Main()void Main()void Main() intintintint x = 5, y = 10, z = -128;x = 5, y = 10, z = -128;x = 5, y = 10, z = -128;x = 5, y = 10, z = -128; Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(0&1=2, 0&1=2, 0&1=2, 0&1=2, x, y, (x & y);x, y, (x & y);x, y, (x & y);x, y, (x & y); Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(0|1=2, 0|1=2, 0|1=2, 0|1=2, x, y, (x | y);x, y, (x | y);x, y, (x | y);x, y, (x | y); Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(01=201=201=201=2, , , , x, y, (x y);x, y, (x y);x, y, (x y);x, y, (x y); Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(0=1, 0=1, 0=1, 0=1, x, (x);x, (x);x, (x);x, (x); Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(01=201=201=201=2, , , , z, x, (z x);z, x, (z x);z, x, (z x);z, x, (z 1=201=201=201=2, z, x, (z x);, z, x, (z x);, z, x, (z x);, z, x, (z x); 复合赋值运算符有有10个:个:+=、-=、*=、/=、%=、=、&=、=、|=。例例例例:x*=2x*=2/ /等价于等价于等价于等价于x=x*2x=x*2x=x*2x=x*2x*=x+2x*=x+2/ /等价于等价于等价于等价于x=x*x=x*x=x*x=x*(x+2x+2x+2x+2)条件运算符 条件运算符条件运算符条件运算符条件运算符 ? : ? : 是是是是C#C#中唯一一个三元运算符,其形式为:中唯一一个三元运算符,其形式为:中唯一一个三元运算符,其形式为:中唯一一个三元运算符,其形式为: 表达式表达式表达式表达式1 ?1 ?表达式表达式表达式表达式2 :2 :表达式表达式表达式表达式3 3 其中其中其中其中表达式表达式表达式表达式1 1的运算结果必须是一个的运算结果必须是一个的运算结果必须是一个的运算结果必须是一个boolbool类型值类型值类型值类型值,表达,表达,表达,表达式表达式式表达式式表达式式表达式2 2和表达式和表达式和表达式和表达式3 3可以是任意数据类型,但它们返回可以是任意数据类型,但它们返回可以是任意数据类型,但它们返回可以是任意数据类型,但它们返回的数据类型必须一致。的数据类型必须一致。的数据类型必须一致。的数据类型必须一致。 条件运算符的运算过程是:首先计算表达式条件运算符的运算过程是:首先计算表达式条件运算符的运算过程是:首先计算表达式条件运算符的运算过程是:首先计算表达式1 1的值,如的值,如的值,如的值,如果其值为果其值为果其值为果其值为truetrue,则计算表达式,则计算表达式,则计算表达式,则计算表达式2 2值,这个值就是整个表达值,这个值就是整个表达值,这个值就是整个表达值,这个值就是整个表达式的结果;否则,取表达式的值作为整个表达式的结果。式的结果;否则,取表达式的值作为整个表达式的结果。式的结果;否则,取表达式的值作为整个表达式的结果。式的结果;否则,取表达式的值作为整个表达式的结果。例如:例如:例如:例如: z = x y ? x : y ; / z z = x y ? x : y ; / z 的值就是的值就是的值就是的值就是x x,y y中较大的一个值中较大的一个值中较大的一个值中较大的一个值 z = x =0 ? x : -x ; / zz = x =0 ? x : -x ; / z的值就是的值就是的值就是的值就是x x的绝对值的绝对值的绝对值的绝对值x=(45)?4:5x=(45)?4:5 / /x=5x=5x=5x=5字符串连接运算符C#C#中,运算符中,运算符+ +能用于连接字符串。能用于连接字符串。当运算符当运算符“+ +”用于操作字符串时,它的两个操作数中用于操作字符串时,它的两个操作数中可以有一个不是字符串。可以有一个不是字符串。 例: Hello!+ C#Hello!+ C# / /值为值为值为值为Hello! C# Hello! C# Hello! C# Hello! C# intintintint a=5,b=5; a=5,b=5; a=5,b=5; a=5,b=5; a+ba+b=+=+a+ba+b / /值为值为值为值为 a+ba+ba+ba+b=55=55=55=55 a+ba+b+ + a+ba+b= = / /值为值为值为值为“10a+b=10a+b=10a+b=10a+b=例2-5 字符串连接运算源代码运 行例2-5 字符串连接运算/ /StringOperation.csStringOperation.csusing System;using System;class class StringOperationStringOperation static void Main() static void Main() intint i = 2, j = 3, k = 4; i = 2, j = 3, k = 4; Console.WriteLine(iConsole.WriteLine(i=0,j=1,k=2, i, j, k);=0,j=1,k=2, i, j, k); Console.WriteLineConsole.WriteLine(表达式表达式表达式表达式i,j,ki,j,k + +i+j+ki+j+k的结果是:的结果是:的结果是:的结果是:);); Console.WriteLine(i,j,kConsole.WriteLine(i,j,k + i + j + k); + i + j + k); Console.WriteLineConsole.WriteLine(表达式表达式表达式表达式i+j+ki+j+k+ + i+j+ki+j+k的结果是:的结果是:的结果是:的结果是:);); Console.WriteLine(iConsole.WriteLine(i + j + k + + j + k + i+j+ki+j+k);); Console.WriteLine(12+8);Console.WriteLine(12+8); C#运算符的优先级与结合性运算符的优先级与结合性其中表顶部的优先级较高其中表顶部的优先级较高其中表顶部的优先级较高其中表顶部的优先级较高改变优先级运算符防止因不清楚运算符优先级而出现错误的办防止因不清楚运算符优先级而出现错误的办防止因不清楚运算符优先级而出现错误的办防止因不清楚运算符优先级而出现错误的办法是什么?法是什么?法是什么?法是什么? 使用括号,按照预想的顺序对表达式求值。使用括号,按照预想的顺序对表达式求值。使用括号,按照预想的顺序对表达式求值。使用括号,按照预想的顺序对表达式求值。例:例: x=4+6*8-10*2x=4+6*8-10*2/ /x=32x=32x=32x=32 x=(4+6)*8-10)*2x=(4+6)*8-10)*2/ /x=140x=140x=140x=1402.5.2 数值类型转换 隐式转换由编译器自动完成. 显式转换需要明确要求编译器完成的转换.隐式转换intint 型型型型常量表达式的值可隐式转换为常量表达式的值可隐式转换为常量表达式的值可隐式转换为常量表达式的值可隐式转换为 sbytesbyte、bytebyte、shortshort、ushortushort、uintuint 或或或或 ulongulong型,型,型,型,前提是常量表达式的值处于目标类型的取值前提是常量表达式的值处于目标类型的取值前提是常量表达式的值处于目标类型的取值前提是常量表达式的值处于目标类型的取值范围之内。范围之内。范围之内。范围之内。对对对对sbytesbyte、bytebyte、shortshort、ushortushort或或或或charchar型型型型的变量进行算术或按位运算时,在正式运算的变量进行算术或按位运算时,在正式运算的变量进行算术或按位运算时,在正式运算的变量进行算术或按位运算时,在正式运算前,这些变量的值会隐式转换为前,这些变量的值会隐式转换为前,这些变量的值会隐式转换为前,这些变量的值会隐式转换为intint型。型。型。型。charchar型型型型的数值能隐式转换为的数值能隐式转换为的数值能隐式转换为的数值能隐式转换为ushortushort、intint、uintuint、longlong、ulongulong、floatfloat、doubledouble或或或或decimaldecimal型,但任何数据类型的值都不能隐型,但任何数据类型的值都不能隐型,但任何数据类型的值都不能隐型,但任何数据类型的值都不能隐式转换到式转换到式转换到式转换到charchar型。型。型。型。隐式转换(续)由算术运算符、关系运算符或位运算符中的二元运由算术运算符、关系运算符或位运算符中的二元运由算术运算符、关系运算符或位运算符中的二元运由算术运算符、关系运算符或位运算符中的二元运算符组成的表达式要求两个操作数的数据类型相同,算符组成的表达式要求两个操作数的数据类型相同,算符组成的表达式要求两个操作数的数据类型相同,算符组成的表达式要求两个操作数的数据类型相同,如果经过上述转换后,还不相同,系统将自动按照如果经过上述转换后,还不相同,系统将自动按照如果经过上述转换后,还不相同,系统将自动按照如果经过上述转换后,还不相同,系统将自动按照如下所示进行隐式转换以使参与运算的两个操作数如下所示进行隐式转换以使参与运算的两个操作数如下所示进行隐式转换以使参与运算的两个操作数如下所示进行隐式转换以使参与运算的两个操作数具有相同的数据类型。具有相同的数据类型。具有相同的数据类型。具有相同的数据类型。sbytesbyte short short intint long long float double float doublebytebyte ushortushort uintuint ulongulong decimal decimal 对于赋值运算,如果左、右操作数的数据类型不同,对于赋值运算,如果左、右操作数的数据类型不同,对于赋值运算,如果左、右操作数的数据类型不同,对于赋值运算,如果左、右操作数的数据类型不同,右操作数将尝试按上述转换规则将自己的数据类型右操作数将尝试按上述转换规则将自己的数据类型右操作数将尝试按上述转换规则将自己的数据类型右操作数将尝试按上述转换规则将自己的数据类型转换为和左操作数相同,并将转换后的值赋给左操转换为和左操作数相同,并将转换后的值赋给左操转换为和左操作数相同,并将转换后的值赋给左操转换为和左操作数相同,并将转换后的值赋给左操作数。如果不能转换,编译器将报错。作数。如果不能转换,编译器将报错。作数。如果不能转换,编译器将报错。作数。如果不能转换,编译器将报错。隐式转换(续)隐式转换是一种安全的转换。例2-6 隐式数值类型转换源代码编 译/ /TypeCast.csTypeCast.csusing System;using System;class class TypeCastTypeCast static void Main() static void Main() char c1=D,c2; char c1=D,c2; sbytesbyte sb1=1,sb2=2,sb3; byte b1=1,b2=2,b3; sb1=1,sb2=2,sb3; byte b1=1,b2=2,b3; short s1=3, s2=4,s3; short s1=3, s2=4,s3; ushortushort us1=3,us2=4,us3; us1=3,us2=4,us3; c2=c1+A;c2=c1+A; Console.WriteLine(charConsole.WriteLine(char c2=0,c2); c2=0,c2); sb3=sb1-sb2;sb3=sb1-sb2; Console.WriteLine(sbyteConsole.WriteLine(sbyte sb3=0,sb3); sb3=0,sb3); b3=b1*b2;b3=b1*b2; Console.WriteLine(byteConsole.WriteLine(byte b3=0,b3); b3=0,b3); s3=s1/s2;s3=s1/s2; Console.WriteLine(shortConsole.WriteLine(short s3=0,s3); s3=0,s3); us3=us1&us2;us3=us1&us2; Console.WriteLine(ushortConsole.WriteLine(ushort us3=0,us3); us3=0,us3); /TypeCast.csTypeCast.csTypeCast.csTypeCast.csusing System;using System;using System;using System;class class class class TypeCastTypeCastTypeCastTypeCast static void Main()static void Main()static void Main()static void Main() char c1= char c1= char c1= char c1=D;D;D;D; sbytesbytesbytesbyte sb1=1,sb2=2; byte b1=1,b2=2; sb1=1,sb2=2; byte b1=1,b2=2; sb1=1,sb2=2; byte b1=1,b2=2; sb1=1,sb2=2; byte b1=1,b2=2; short s1=3, s2=4; short s1=3, s2=4; short s1=3, s2=4; short s1=3, s2=4; ushortushortushortushort us1=3,us2=4; us1=3,us2=4; us1=3,us2=4; us1=3,us2=4; c1+= c1+= c1+= c1+=A;A;A;A; Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(charcharcharchar c1=0,c1); c1=0,c1); c1=0,c1); c1=0,c1); sb1-=sb2; sb1-=sb2; sb1-=sb2; sb1-=sb2; Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(sbytesbytesbytesbyte sb1=0,sb1); sb1=0,sb1); sb1=0,sb1); sb1=0,sb1); b1*=b2; b1*=b2; b1*=b2; b1*=b2; Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(bytebytebytebyte b1=0,b1); b1=0,b1); b1=0,b1); b1=0,b1); s1/=s2; s1/=s2; s1/=s2; s1/=s2; Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(shortshortshortshort s1=0,s1); s1=0,s1); s1=0,s1); s1=0,s1); us1&=us2; us1&=us2; us1&=us2; us1&=us2; Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(ushortushortushortushort us1=0,us1); us1=0,us1); us1=0,us1); us1=0,us1); 显式转换 显示转换的作用是将某种数据类型强制转换成指定类显示转换的作用是将某种数据类型强制转换成指定类显示转换的作用是将某种数据类型强制转换成指定类显示转换的作用是将某种数据类型强制转换成指定类型,具体形式如下:型,具体形式如下:型,具体形式如下:型,具体形式如下: (类型说明符)表达式(类型说明符)表达式(类型说明符)表达式(类型说明符)表达式例:例:例:例: double x=5.5, y;double x=5.5, y; y=y=x-(int)xx-(int)x; ; / /y=0.5y=0.5y=0.5y=0.5 boolboolboolbool型型型型不能进行任何形式(隐式或显示)的转换。但不能进行任何形式(隐式或显示)的转换。但不能进行任何形式(隐式或显示)的转换。但不能进行任何形式(隐式或显示)的转换。但可利用可利用可利用可利用System.ConvertSystem.ConvertSystem.ConvertSystem.Convert类定义的方法转换(类定义的方法转换(类定义的方法转换(类定义的方法转换(12.4.2)12.4.2)12.4.2)12.4.2)例:例:例:例: boolbool b=false; b=false; intint i=( i=(int)bint)b; ; /错误错误错误错误注意:注意:注意:注意: . . 显式转换是一种不安全的转换。显式转换是一种不安全的转换。显式转换是一种不安全的转换。显式转换是一种不安全的转换。 2. 2. 转换并不实际改变操作数的数据类型。转换并不实际改变操作数的数据类型。转换并不实际改变操作数的数据类型。转换并不实际改变操作数的数据类型。2.6 结构与枚举 2.6.1 结构(值类型值类型) 2.6.2 枚举(值类型值类型) 2.6.3 结构与基本数据类型2.6.1 结 构结构类型是一种复合类型,它将多个不同类结构类型是一种复合类型,它将多个不同类结构类型是一种复合类型,它将多个不同类结构类型是一种复合类型,它将多个不同类型的成员组合为一种新类型,通常用来封装型的成员组合为一种新类型,通常用来封装型的成员组合为一种新类型,通常用来封装型的成员组合为一种新类型,通常用来封装小型相关变量组。小型相关变量组。小型相关变量组。小型相关变量组。例:例:例:例:structstruct Student Student public stringpublic string Name;Name;public charpublic char Sex; Sex;public public intint Age;Age;public stringpublic string AddrAddr; ; PublicPublic是一个访问权限修饰符,表示相应成员是公共的,对它的是一个访问权限修饰符,表示相应成员是公共的,对它的是一个访问权限修饰符,表示相应成员是公共的,对它的是一个访问权限修饰符,表示相应成员是公共的,对它的访问没有任何限制。访问没有任何限制。访问没有任何限制。访问没有任何限制。 如果程序没有显示指定,默认的访问权限修饰符是如果程序没有显示指定,默认的访问权限修饰符是如果程序没有显示指定,默认的访问权限修饰符是如果程序没有显示指定,默认的访问权限修饰符是PrivatePrivate( (私有的)私有的)私有的)私有的),私有的成员只能被其所属的结构访问。,私有的成员只能被其所属的结构访问。,私有的成员只能被其所属的结构访问。,私有的成员只能被其所属的结构访问。(5.8)(5.8)2.6.1 结构(续)定义某种结构类型后,就可以声明这种类定义某种结构类型后,就可以声明这种类型的变量。型的变量。例:例:例:例: StudentStudent stud1,stud2; stud1,stud2;访问一个结构变量包括两方面的内容:访问一个结构变量包括两方面的内容:访问结构变量中的某个成员访问结构变量中的某个成员访问结构变量中的某个成员访问结构变量中的某个成员访问整个结构变量。访问整个结构变量。访问整个结构变量。访问整个结构变量。2.6.1 结构(续)访问一个结构变量中的某个成员:访问一个结构变量中的某个成员:结构变量名结构变量名.成员成员例:例:例:例:stud1.Name=stud1.Name=李明李明李明李明;stud1.Sex=stud1.Sex=男男男男;stud1.Age=16;stud1.Age=16;stud1.Addr=stud1.Addr=北京海淀北京海淀北京海淀北京海淀;注意:上述成员都是注意:上述成员都是注意:上述成员都是注意:上述成员都是PublicPublic ,如果是,如果是,如果是,如果是PrivatePrivate,上上上上面的使用就是错误的。面的使用就是错误的。面的使用就是错误的。面的使用就是错误的。2.6.1 结构(续)访问整个结构变量通常用于同一结构类型访问整个结构变量通常用于同一结构类型的变量之间的赋值。的变量之间的赋值。例:例:例:例:stud2=stud1;stud2=stud1;2.6.1 结构(续)使用某个结构变量给另一变量赋值时,用使用某个结构变量给另一变量赋值时,用于赋值的变量必须已经赋值。于赋值的变量必须已经赋值。例:例:例:例:StudentStudent stud1; stud1;StudentStudent stud2=stud1; stud2=stud1;/ /错误错误错误错误例例例例2-7 2-7 2-7 2-7 使用结构变量使用结构变量使用结构变量使用结构变量源代码运 行using System;using System;using System;using System;class class class class UseStructUseStructUseStructUseStruct static void Main()static void Main()static void Main()static void Main() StudentStudentStudentStudent stud1,stud2; stud1,stud2; stud1,stud2; stud1,stud2; stud1.Name= stud1.Name= stud1.Name= stud1.Name=李明李明李明李明; stud1.Sex= stud1.Sex= stud1.Sex= stud1.Sex=男男男男; stud1.Age=20; stud1.Age=20; stud1.Age=20; stud1.Age=20; stud1.Addr= stud1.Addr= stud1.Addr= stud1.Addr=北京海淀北京海淀北京海淀北京海淀; ConsoleConsoleConsoleConsole.WriteLine(0 1 2 3,.WriteLine(0 1 2 3,.WriteLine(0 1 2 3,.WriteLine(0 1 2 3, stud1.Name,stud1.Sex,stud1.Age,stud1.Addr); stud1.Name,stud1.Sex,stud1.Age,stud1.Addr); stud1.Name,stud1.Sex,stud1.Age,stud1.Addr); stud1.Name,stud1.Sex,stud1.Age,stud1.Addr); stud2=stud1; stud2=stud1; stud2=stud1; stud2=stud1; stud2.Name= stud2.Name= stud2.Name= stud2.Name=汪洋汪洋汪洋汪洋; stud2.Age=24; stud2.Age=24; stud2.Age=24; stud2.Age=24; ConsoleConsoleConsoleConsole.WriteLine(0 1 2 3,.WriteLine(0 1 2 3,.WriteLine(0 1 2 3,.WriteLine(0 1 2 3, stud2.Name,stud2.Sex,stud2.Age,stud2.Addr); stud2.Name,stud2.Sex,stud2.Age,stud2.Addr); stud2.Name,stud2.Sex,stud2.Age,stud2.Addr); stud2.Name,stud2.Sex,stud2.Age,stud2.Addr); structstruct StudentStudent public string Name;public string Name; public char Sex; public char Sex; public public intint Age; Age; public string public string AddrAddr; ; 课堂练习编写一个程序,定义一个表示发票的结构类编写一个程序,定义一个表示发票的结构类型(包含型(包含发票号发票号、定单日期定单日期、客户姓名、产客户姓名、产品名、产品费用、应付款总计品名、产品费用、应付款总计字段),声明字段),声明一个该类型的变量,给各个字段赋值,然后一个该类型的变量,给各个字段赋值,然后在屏幕上输出该变量的在屏幕上输出该变量的 值。值。struct Bill_Details public string inv_No; / 发票号发票号 public string ord_Dt; / 定单日期定单日期 public string custName; / 客户姓名客户姓名 public string product; / 产品名产品名public double cost; / 产品费用产品费用public double due_Amt; / 应付款总计应付款总计 2.6.2 枚 举枚举类型是一种复合类型,定义时,需要枚举类型是一种复合类型,定义时,需要把变量的可能取值一一枚举出来。把变量的可能取值一一枚举出来。例:例:例:例:enumenum Weekday Weekday Sunday,Monday,TuesdaySunday,Monday,Tuesday, , Wednesday,Thursday,FridayWednesday,Thursday,Friday, , Saturday Saturday 2.6.2 枚举(续)定义某种枚举类型后,就可以声明这种类定义某种枚举类型后,就可以声明这种类型的变量。型的变量。例:例:例:例:WeekdayWeekday wd; wd;要为枚举变量赋一个枚举值,需要使用运要为枚举变量赋一个枚举值,需要使用运算符算符“.”。例:例:例:例:wd=wd=WeekdayWeekday.Friday.Friday; ;2.6.2 枚举(续)每个枚举值实际上都被赋予一个整数类型常每个枚举值实际上都被赋予一个整数类型常量值。默认情况下,量值。默认情况下,第第1个枚举值为个枚举值为0,其后,其后枚举值依次增枚举值依次增1,且数据类型是,且数据类型是int型。型。可以显式为枚举值指定其他整数类型,也可可以显式为枚举值指定其他整数类型,也可以为枚举值指定特定整数类型常量表达式值。以为枚举值指定特定整数类型常量表达式值。例:例:例:例:enumenum Color:Color:sbytesbyte Red=20,Blue=-10,WhiteRed=20,Blue=-10,White 2.6.2 枚举(续)不能直接给枚举变量赋整数值(不能直接给枚举变量赋整数值(0值除外)值除外)或给一个整数类型变量赋枚举值,除非进或给一个整数类型变量赋枚举值,除非进行显式类型转换。行显式类型转换。例:例:例:例:Weekday wd1=2; Weekday wd1=2; / /错误错误错误错误Weekday wd2=(Weekday)2; Weekday wd2=(Weekday)2; intint i= i=Weekday.SundayWeekday.Sunday; ;/ /错误错误错误错误intint j=( j=(intint)Weekday.Sunday)Weekday.Sunday; ;2.6.2 枚举(续)将一个不合法的整数显式转换后赋给某个将一个不合法的整数显式转换后赋给某个枚举变量时,同样可以编译通过。枚举变量时,同样可以编译通过。例:例:例:例: wd=(Weekday)100; wd=(Weekday)100; 例例例例2-8 2-8 2-8 2-8 使用枚举变量使用枚举变量使用枚举变量使用枚举变量源代码运 行/ /UseEnum.csUseEnum.csusing System;using System;classclass UseEnumUseEnum static voidstatic void Main() Main() Weekday wd= Weekday wd=Weekday.MondayWeekday.Monday; ; Console.WriteLine(wdConsole.WriteLine(wd=0,wd); =0,wd); wd=wd+3; / wd=wd+3; /枚举变量可以进行加减运算枚举变量可以进行加减运算枚举变量可以进行加减运算枚举变量可以进行加减运算 Console.WriteLine(wdConsole.WriteLine(wd=0,wd); =0,wd); enumenum Weekday Weekday Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,SaturdaySunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday 讨论:为什么需要使用枚举类型?确保只将预定值赋给变量,使变量易于维确保只将预定值赋给变量,使变量易于维护;护;允许给数值赋以简单易认的名字,提高代允许给数值赋以简单易认的名字,提高代码可读性;码可读性;易于输入,因为代码编辑器的易于输入,因为代码编辑器的“智能感知智能感知”功能会显示可使用的列表;功能会显示可使用的列表;允许指定一组常数值,并定义仅接受该组允许指定一组常数值,并定义仅接受该组常数值的类型。常数值的类型。2.6.3 结构与基本数据类型基本数据基本数据基本数据基本数据类型类型类型类型.NET.NET框架中的框架中的框架中的框架中的结构类型结构类型结构类型结构类型基本数据基本数据基本数据基本数据类型类型类型类型.NET.NET框架中的框架中的框架中的框架中的结构类型结构类型结构类型结构类型sbytesbyteSystem.SByteSystem.SBytelonglongSystem.Int64System.Int64bytebyteSystem.ByteSystem.ByteulongulongSystem.Uint64System.Uint64shortshortSystem.Int16System.Int16floatfloatSystem.SingleSystem.SingleushortushortSystem.UInt16System.UInt16doubledoubleSystem.DoubleSystem.DoubleintintSystem.Int32System.Int32decimaldecimalSystem.DecimalSystem.DecimaluintuintSystem.UInt32System.UInt32charcharSystem.CharSystem.CharboolboolSystem.BooleanSystem.Boolean2.6.3 结构与基本数据类型(续)C#C#基本数据类型是基本数据类型是基本数据类型是基本数据类型是.NET.NET框架中对应的数据类型的框架中对应的数据类型的框架中对应的数据类型的框架中对应的数据类型的别名。别名。别名。别名。例:例:例:例: System.Int32 i;System.Int32 i;/等价于等价于等价于等价于intint i; i; System.DoubleSystem.Double d; / d; /等价于等价于等价于等价于double d; double d; 例例例例2-9 2-9 2-9 2-9 使用基本数据类型对应的结构使用基本数据类型对应的结构使用基本数据类型对应的结构使用基本数据类型对应的结构源代码运 行System.BooleanSystem.Boolean结构中有两个静态之都字段:结构中有两个静态之都字段:结构中有两个静态之都字段:结构中有两个静态之都字段:FalseStringFalseString和和和和TrueStringTrueString,分别代表逻辑值,分别代表逻辑值,分别代表逻辑值,分别代表逻辑值falsefalse和和和和truetrue其他结构,都有两个公共常量成员其他结构,都有两个公共常量成员其他结构,都有两个公共常量成员其他结构,都有两个公共常量成员MaxValueMaxValue、MinValueMinValue,通,通,通,通过它们可以获取相应类型的最大值和最小值过它们可以获取相应类型的最大值和最小值过它们可以获取相应类型的最大值和最小值过它们可以获取相应类型的最大值和最小值using using using using System;System;System;System;class class class class TypeRangeTypeRangeTypeRangeTypeRange static void Main()static void Main()static void Main()static void Main() Console.Write(Console.Write(Console.Write(Console.Write(sbytesbytesbytesbyte:);:);:);:); Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(01,01,01,01,SByte.SByte.SByte.SByte.MinValueMinValueMinValueMinValue,SByte.,SByte.,SByte.,SByte.MaxValueMaxValueMaxValueMaxValue);););); Console.Write(Console.Write(Console.Write(Console.Write(bytebytebytebyte:);:);:);:); Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(01,01,01,01,Byte.MinValue,Byte.MaxValue);Byte.MinValue,Byte.MaxValue);Byte.MinValue,Byte.MaxValue);Byte.MinValue,Byte.MaxValue); Console.Write(Console.Write(Console.Write(Console.Write(shortshortshortshort:);:);:);:); Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(01,01,01,01,Int16.MinValue,Int16.MaxValue);Int16.MinValue,Int16.MaxValue);Int16.MinValue,Int16.MaxValue);Int16.MinValue,Int16.MaxValue); Console.Write(Console.Write(Console.Write(Console.Write(ushortushortushortushort:);:);:);:); Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(01,01,01,01,UInt16.MinValue,UInt16.MaxValue);UInt16.MinValue,UInt16.MaxValue);UInt16.MinValue,UInt16.MaxValue);UInt16.MinValue,UInt16.MaxValue); Console.Write(Console.Write(Console.Write(Console.Write(intintintint:);:);:);:); Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(01,01,01,01,Int32.MinValue,Int32.MaxValue);Int32.MinValue,Int32.MaxValue);Int32.MinValue,Int32.MaxValue);Int32.MinValue,Int32.MaxValue); Console.Write(Console.Write(Console.Write(Console.Write(uintuintuintuint:);:);:);:); Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(01,01,01,01,UInt32.MinValue,UInt32.MaxValue);UInt32.MinValue,UInt32.MaxValue);UInt32.MinValue,UInt32.MaxValue);UInt32.MinValue,UInt32.MaxValue); Console.Write(Console.Write(Console.Write(Console.Write(longlonglonglong:);:);:);:); Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(01,01,01,01,Int64.MinValue,Int64.MaxValue);Int64.MinValue,Int64.MaxValue);Int64.MinValue,Int64.MaxValue);Int64.MinValue,Int64.MaxValue); Console.Write(Console.Write(Console.Write(Console.Write(ulongulongulongulong:);:);:);:); Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(01,01,01,01,UInt64.MinValue,UInt64.MaxValue);UInt64.MinValue,UInt64.MaxValue);UInt64.MinValue,UInt64.MaxValue);UInt64.MinValue,UInt64.MaxValue); Console.Write(Console.Write(Console.Write(Console.Write(floatfloatfloatfloat:);:);:);:); Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(01,01,01,01,Single.MinValue,Single.MaxValue);Single.MinValue,Single.MaxValue);Single.MinValue,Single.MaxValue);Single.MinValue,Single.MaxValue); Console.Write(Console.Write(Console.Write(Console.Write(doubledoubledoubledouble:);:);:);:); Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(01,01,01,01,Double.MinValue,Double.MaxValue);Double.MinValue,Double.MaxValue);Double.MinValue,Double.MaxValue);Double.MinValue,Double.MaxValue); Console.Write(Console.Write(Console.Write(Console.Write(decimaldecimaldecimaldecimal:);:);:);:); Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(01,01,01,01,Decimal.MinValue,Decimal.MaxValue);Decimal.MinValue,Decimal.MaxValue);Decimal.MinValue,Decimal.MaxValue);Decimal.MinValue,Decimal.MaxValue); Console.Write(Console.Write(Console.Write(Console.Write(charcharcharchar:);:);:);:); Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(01,(01,(01,(01,(int)int)int)int)Char.MinValue,(Char.MinValue,(Char.MinValue,(Char.MinValue,(int)int)int)int)Char.MaxValue);Char.MaxValue);Char.MaxValue);Char.MaxValue); Console.Write(Console.Write(Console.Write(Console.Write(boolboolboolbool:);:);:);:); Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(0,1,0,1,0,1,0,1,Boolean.Boolean.Boolean.Boolean.FalseStringFalseStringFalseStringFalseString,Boolean.,Boolean.,Boolean.,Boolean.TrueStringTrueStringTrueStringTrueString);););); 2.7 值类型与引用类型值类型是指这种类型的变量总是值类型是指这种类型的变量总是包含该类包含该类型的值。型的值。引用类型是指这种类型的变量总是引用类型是指这种类型的变量总是包含相包含相应数据在内存中存放位置的引用应数据在内存中存放位置的引用,通过该,通过该引用可以间接访问相应的数据值。引用可以间接访问相应的数据值。结构和枚举属于值类型;类、接口、数组结构和枚举属于值类型;类、接口、数组和委托等属于引用类型。和委托等属于引用类型。2.7 值类型与引用类型(续)值类型int Num1;Num1=50;初始化初始化用用Num1初始化初始化Num2 int Num2;Num2=Num1; 变量声明变量声明变量声明变量声明5050Num1 和和 Num2 包含包含50Num1Num22.7 值类型与引用类型(续)值类型(续)Num1=60;Num160Num250Num2 的值保持不变的值保持不变给给 Num1赋新值赋新值2.7 值类型与引用类型(续)引用类型string str1;str1= abcd;初始化初始化用用str1初始化初始化str2 string str2;str2=str1; 创建对象创建对象创建对象创建对象包含包含abcd首地址首地址abcdstr1str2包含包含abcd首地址首地址知识扩展:知识扩展:通用类型系统通用类型系统 .NET Framework .NET Framework .NET Framework .NET Framework 中的类型系统的以下两个基本点:中的类型系统的以下两个基本点:中的类型系统的以下两个基本点:中的类型系统的以下两个基本点: 它支持继承原则。它支持继承原则。它支持继承原则。它支持继承原则。 类型可从称为基类型的其他类型派生。类型可从称为基类型的其他类型派生。类型可从称为基类型的其他类型派生。类型可从称为基类型的其他类型派生。 派生类型继承基类型的方法、属性和其他成员(存在一些派生类型继承基类型的方法、属性和其他成员(存在一些派生类型继承基类型的方法、属性和其他成员(存在一些派生类型继承基类型的方法、属性和其他成员(存在一些限制)。限制)。限制)。限制)。 之后,基类型可从某些其他类型派生,这种情之后,基类型可从某些其他类型派生,这种情之后,基类型可从某些其他类型派生,这种情之后,基类型可从某些其他类型派生,这种情况下,派生类型继承其层次结构中这两个基类型的成员。况下,派生类型继承其层次结构中这两个基类型的成员。况下,派生类型继承其层次结构中这两个基类型的成员。况下,派生类型继承其层次结构中这两个基类型的成员。 包括如包括如包括如包括如 System.Int32System.Int32System.Int32System.Int32(C# C# C# C# 关键字:关键字:关键字:关键字:intintintint)等内置数值类)等内置数值类)等内置数值类)等内置数值类型在内的所有类型,最终都是从一个基类派生得到的,该型在内的所有类型,最终都是从一个基类派生得到的,该型在内的所有类型,最终都是从一个基类派生得到的,该型在内的所有类型,最终都是从一个基类派生得到的,该基类即基类即基类即基类即 System.ObjectSystem.ObjectSystem.ObjectSystem.Object (C# C# C# C# 关键字:关键字:关键字:关键字:objectobjectobjectobject)。)。)。)。 这种这种这种这种统一的类型层次结构称为统一的类型层次结构称为统一的类型层次结构称为统一的类型层次结构称为常规类型系统常规类型系统常规类型系统常规类型系统 (CTS)(CTS)(CTS)(CTS)。 CTS CTS CTS CTS 中的每一个类型都被定义成了值类型或引用类型。中的每一个类型都被定义成了值类型或引用类型。中的每一个类型都被定义成了值类型或引用类型。中的每一个类型都被定义成了值类型或引用类型。 这包括这包括这包括这包括 .NET Framework .NET Framework .NET Framework .NET Framework 类库中的所有自定义类型以及您类库中的所有自定义类型以及您类库中的所有自定义类型以及您类库中的所有自定义类型以及您自己的用户定义类型。自己的用户定义类型。自己的用户定义类型。自己的用户定义类型。 使用关键字使用关键字使用关键字使用关键字 structstructstructstruct 定义的类型定义的类型定义的类型定义的类型是值类型;所有内置数值类型都是是值类型;所有内置数值类型都是是值类型;所有内置数值类型都是是值类型;所有内置数值类型都是 structsstructsstructsstructs。 使用关键使用关键使用关键使用关键字字字字 classclassclassclass 定义的类型是引用类型。定义的类型是引用类型。定义的类型是引用类型。定义的类型是引用类型。 引用类型和值类型有引用类型和值类型有引用类型和值类型有引用类型和值类型有不同的编译时规则和不同的运行时行为。不同的编译时规则和不同的运行时行为。不同的编译时规则和不同的运行时行为。不同的编译时规则和不同的运行时行为。 下图演示了下图演示了下图演示了下图演示了 CTS CTS CTS CTS 中的值类型和引用类型之间的关系。中的值类型和引用类型之间的关系。中的值类型和引用类型之间的关系。中的值类型和引用类型之间的关系。 CTS 中的值类型和引用类型 2.8 控制台输入System.Console.Read()System.Console.ReadLine() 这两种方法都用于从键盘读取信息,存入这两种方法都用于从键盘读取信息,存入某个变量中,所不同的是:某个变量中,所不同的是: Console.ReadLineConsole.ReadLine()()方法用于读取一行字方法用于读取一行字符,并将获得的数据保存在字符串变量中。符,并将获得的数据保存在字符串变量中。而而Console.ReadConsole.Read()()方法用于获得用户输入方法用于获得用户输入的任何一个字符的的任何一个字符的UnicodeUnicode值。值。例例例例2-10 2-10 2-10 2-10 控制台输入控制台输入控制台输入控制台输入源代码运 行/*/*/*/*/MyInput.csMyInput.csMyInput.csMyInput.csusing System;using System;using System;using System;class class class class MyInputMyInputMyInputMyInput static void Main()static void Main()static void Main()static void Main() Console.Write(Console.Write(Console.Write(Console.Write(EnterEnterEnterEnter a integer number: ); a integer number: ); a integer number: ); a integer number: ); string string string string strstrstrstr = = = = Console.ReadLineConsole.ReadLineConsole.ReadLineConsole.ReadLine(); (); (); (); /读入一串字符读入一串字符读入一串字符读入一串字符 intintintint i = i = i = i = Int32.Int32.Int32.Int32.Parse(str);Parse(str);Parse(str);Parse(str); Console.WriteLine(Console.WriteLine(Console.WriteLine(Console.WriteLine(YouYouYouYou entered the number:0, i); entered the number:0, i); entered the number:0, i); entered the number:0, i); /*/*/*/*/说明:说明:说明:说明:ParseParse是结构是结构是结构是结构System.Int32System.Int32中定义的一个方法,中定义的一个方法,中定义的一个方法,中定义的一个方法,作用是将参数中给出数字字符串转换成等效的作用是将参数中给出数字字符串转换成等效的作用是将参数中给出数字字符串转换成等效的作用是将参数中给出数字字符串转换成等效的intint型数型数型数型数据并返回据并返回据并返回据并返回. .课堂练习编写一个程序,定义一个表示学生的结构编写一个程序,定义一个表示学生的结构类型(包含类型(包含学号学号、姓名姓名、性别、成绩性别、成绩1、成、成绩绩2 、成绩、成绩3字段),声明一个该类型的变字段),声明一个该类型的变量,提示用户输入各个字段赋值,然后在量,提示用户输入各个字段赋值,然后在屏幕上输出该变量的值及总成绩。屏幕上输出该变量的值及总成绩。2.9 习 题1、以下C#语言合法的标识符为:A、if B、$price C、2_ab D 、Hello world2、 C#语言bool类型的值可以是:A、true B、int类型的值 C、1 D 、03、C#语言中的011表示哪种整型常量:A、十进制 B、十六进制 C、八进制 D 、二进制4、条件逻辑运算符的操作数可以是( )类型A、bool B、int C、float D 、char5、如有定义:int a=12,b=20; 则 a+b+”int”的值为:A、”abint” B、”32int” C、”1220int” D 、”a+b+int”6、System.Console.WriteLine(3+6);的输出结果为:A、3+6 B、 9 C、“3+6” D 、”9”7、有定义:char c1=A,c2;则以下语句正确的是: A、c1=c2 ; B、c1+=c2 ; C、c2=c1+B D 、c1+=B8、程序double x = 12.5, y = 5.0; Console.WriteLine(“0”, x / y + (int)(x / y) - (int)x / y);的输出结果为: A、2.9 B、2.5 C、2.1 D 、29、程序bool a = true, b = false; Console.WriteLine(“0 1, a & (a | !b), a & (a | !b);的输出结果为: A、True True B、True False C、False False D 、False True10、如int x = 9;则x-+x-+x的值为: 而-x+-x+-x的值为 A、27 B、24 C、21 D 、1811、有程序int x = 3, y = 2; int z = (x+ % y = 0) ? +x : (x / y = 1) ? +y : -y;则z的值为:A、1 B、2 C、3 D 、4作业:作业:p405 5、声明、声明、声明、声明doubledouble型变量型变量型变量型变量x x、y y,并初始化,并初始化,并初始化,并初始化y y的值为的值为的值为的值为4.64.68 8、声明、声明、声明、声明floatfloat型变量型变量型变量型变量x x、y y,并初始化,并初始化,并初始化,并初始化y y的值为的值为的值为的值为4.64.62020、值类型与引用类型有什么本质不同?、值类型与引用类型有什么本质不同?、值类型与引用类型有什么本质不同?、值类型与引用类型有什么本质不同?2121、编写一个程序,定义一个表示日期的、编写一个程序,定义一个表示日期的、编写一个程序,定义一个表示日期的、编写一个程序,定义一个表示日期的 结构类型结构类型结构类型结构类型(包含年、月、日字段),声明一个该类型的(包含年、月、日字段),声明一个该类型的(包含年、月、日字段),声明一个该类型的(包含年、月、日字段),声明一个该类型的 变变变变量,提示用户输入年、月、日的值,然后在屏幕量,提示用户输入年、月、日的值,然后在屏幕量,提示用户输入年、月、日的值,然后在屏幕量,提示用户输入年、月、日的值,然后在屏幕上输出该变量的上输出该变量的上输出该变量的上输出该变量的 值。值。值。值。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号