信息管理与信息系统专业 第 3 章变量与表达式 任课教师 : 吕雅丽
本章内容 3.1 C# 基本数据类型 3.2 常量与变量 3.3 创建并使用枚举类型 3.4 运算符与表达式类型 3.5 运算符的优先级与结合性 2
3.1 C# 基本数据类型 3.1.1 数值类型 1. 整数类型 整数类型又有有符号整数与无符号整数 有符号整数可以带正负号, 无符号整数不需带正负号, 默认为正数 有符号整数包括 sbyte( 符号字节型 ) short( 短整型 ) int( 整型 ) long( 长整型 ) 无符号整数包括 byte( 字节型 ) ushort( 无符号短整型 ) uint( 无符号整型 ) ulong( 无符号长整型 ) 3
3.1 C# 基本数据类型 2. 实数类型 实数类型包括 float( 单精度浮点型 ) double ( 双精度浮点型 ) decimal( 十进制型 ) 4
3.1 C# 基本数据类型 3.1.2 字符类型 1. Unicode 字符集 Unicode 是一种重要的通用字符编码标准是继 ASCII 字符码后的一种新字符编码 C# 支持 Unicode 字符集 5
3.1 C# 基本数据类型 表 3-1 部分 Unicode 编码 6
3.1 C# 基本数据类型 续表 3-1 部分 Unicode 编码 7
3.1 C# 基本数据类型 2. char( 字符型 ) char( 字符型 ): 数据范围是 0~65535 之间的 Unicode 字符集中的单个字符, 占用 2 个字节 3. string( 字符串型 ) string( 字符串型 ): 指任意长度的 Unicode 字符序列, 占用字节根据字符多少而定 string( 字符串型 ) 表示包括数字与空格在内的若干个字符序列, 允许只包含一个字符的字符串, 甚至可以是不包含字符的空字符串 8
3.1 C# 基本数据类型 3.1.3 布尔类型 bool 数据类型是被解释为 true 或 false 的无符号值, 默认值是 false 如果某个变量只能包含 真 / 假, 是 / 否 或 开 / 关 信息, 则将它声明为 bool 类型 bool m_flag1=true; // 正确 bool m_flag2=false; // 正确 bool m_flag3=(9>8); // 正确 9
3.1 C# 基本数据类型 3.1.4 对象类型 object( 对象型 ): 可以表示任何类型的值, 其占用字节视具体表示的数据类型而定 object( 对象型 ) 是所有其他类型的最终基类 C# 中的每种类型都是直接或间接从 object 类型派生的 10
3.1 C# 基本数据类型 预定义类型 定义 字节数 byte 0~255 之间的整数 1 sbyte -128~127 之间的整数 1 short -32768~32767 之间的整数 2 ushort 0~65535 之间的整数 2 int -2147483648~2147483647 之间的整数 4 uint 0~4294967295 之间的整数 4 long -9223372036854775808~ 9223372036854775807 之间的整数 8 ulong 0~188446744073709551615 之间的整数 8 表 3-2 基本数据类型 11
3.1 C# 基本数据类型 预定义类型 定义 字节数 bool 逻辑值 :true 和 false 1 float 单精度浮点值 4 double 双精度浮点值 8 decimal 精确的十进制值, 有 28 个有效位 16 object 其它所有类型的基类型 不定 char 0~65535 之间的 Unicode 字符 2 string 任意长度的 Unicode 字符串 不定 续表 3-2 基本数据类型 12
3.2 变量与常量 3.2.1 变量 1. 变量命名规则 在 C# 中, 变量命名规则如下 : 1 变量名的第一个字符必须是字母 ( 包括汉字 ) 或下划线, 其余字符必须是字母 ( 包括汉字 ) 数字或下划线 2 变量名不能是 C# 的关键字或库函数名 例如,sum, _S, 都是合法的变量名, 而 int, 2A, Number Of Student 是非法变量名 13
3.2 变量与常量 2. 声明变量 声明变量最简单的格式为 : 数据类型名称变量名列表 ; 例如 : int number; // 声明一个整型变量 bool open; // 声明一个布尔型变量 decimal bankblance; // 声明一个十进制变量 可以一次声明多个变量, 例如 : sbyte a, b; // 声明两个有符号字节型变量 如果一次声明多个变量, 变量名之间用逗号分隔 14
3.2 变量与常量 3. 变量赋值 C# 规定, 变量必须赋值后才能引用 为变量赋值需使用赋值号 = 例如: int number; number = 32; // 为变量赋值 32 也可以使用变量为变量赋值, 例如 : bool close; close=open; // 为变量赋值 true( 假设 open 为已声明的 bool 型变量, 其值为 true) 15
3.2 变量与常量 可以为几个变量一同赋值, 例如 : int a, b, c; a = b = c = 32; 可以在声明变量的同时为变量赋值, 相当于将声明语句与赋值语句合二为一 例如 : double area, radius = 16; 16
3.2 变量与常量 3.2.2 常量 1. 直接常量 (1) 整型常量 : 整型常量即整数, 整型常量有三种形式 : 十进制形式, 即通常意义上的整数, 如,123,48910 等 八进制形式, 输入八进制整型常量, 需要在数字前面加 0, 如,0123,038 等 十六进制形式, 输入十六进制整型常量, 需要在数字前面加 0x 或 0X, 如,0x123,0X48910 等 17
3.2 变量与常量 (2) 实型常量 : 实型常量即带小数的数值, 实型常量有两种表示形式 : 小数形式, 即人们通常的书写形式, 如 0.123, 12.3,.123 等等 指数形式, 也叫科学记数, 由底数加大写的 E 或小写的 e 加指数组成, 例如,123e5 或 123E5 都表示 123 105 18
3.2 变量与常量 (3) 字符常量 : 字符常量表示单个的 Unicode 字符集中的一个字符, 通常包括数字 各种字母 标点 符号和汉字等 字符常量用一对英文单引号界定, 如,'A','a','+', ' 汉 ' 等等 在 C# 中, 有些字符不能直接放在单引号中作为字符常量, 这时需要使用转义符来表示这些字符常量, 转义符由反斜杠 \ 加字符组成, 如 '\n' 19
3.2 变量与常量 C# 中常用的转义字符 \' 单引号, 字符单位需要引用 \" 双引号, 字符串单位需要引用 \\ - 反斜杠 \0 Null \n 换行 \r 回车 \t 水平制表 \v 垂直制表 20
3.2 变量与常量 (4) 字符串常量 字符串常量是由一对双引号界定的字符序列, 例如 : " 欢迎使用 C#!" "I am a student." 需要注意的是, 即使由双引号界定的一个字符, 也是字符串常量, 不能当做字符常量看待, 例如, A 与 A, 前者是字符常量, 后者是字符串常量 (5) 布尔常量 布尔常量即布尔值本身, 如前所述, 布尔值 true( 真 ) 和 false( 假 ) 是 C# 的两个关键字 21
3.2 变量与常量 2. 符号常量 常量就是在程序执行过程中, 其值固定不变的量 常量的声明格式 : const 常量类型常量名 = 值 ; 可以在一行中声明多个常量, 但它们必须具有相同的访问级别 要在一行中声明多个常量, 可用一个逗号和一个空格分隔声明, 如下例所示 : const int Four=4,Five=5,Six=6; 22
3.2 变量与常量 3.2.3 类型转换 数据类型的转换有隐式转换与显式转换两种 1. 隐式转换 隐式转换是系统自动执行的数据类型转换 隐式转换的 基本原则是允许数值范围小的类型向数值范围大的类型 转换, 允许无符号整数类型向有符号整数类型转换 23
3.2 变量与常量 2. 显式转换 显式转换也叫强制转换, 是在代码中明确指示将某一类型的数据转换为另一种类型 显式转换的一般格式为 : ( 数据类型名称 ) 数据 例如 : int x=600; short z=(short)x; 显式转换中可能导致数据的丢失, 例如 : decimal d=234.55m; int x=(int)d; 24
3.2 变量与常量 3. 使用方法进行数据类型的转换 (1) Parse 方法 : 可以将特定格式的字符串转换为数值 Parse 方法的使用格式为 : 数值类型名称.Parse( 字符串型表达式 ) 例如 :int x=int.parse("123"); (2) ToString 方法 : 可将其他数据类型的变量值转换为字符串类型 使用格式为 : 变量名称.ToString( ) 例如 :int x=123; string s=x.tostring( ); (3)Convert 类提供了常用的字符串转换为其他数据类型, 其他数据类型转换为字符串的方法 25
演示 : 整数相乘 1 控制台程序 : 输入两个整数的值, 计算并显示乘积 2 窗体程序 : 用户从键盘上输入整数, 之后点击相乘按钮, 将计算它们的积 图 3-1 整数相乘窗体设计 26
课后练习 : 计算圆柱体的体积 1 输入圆柱体的高度和宽度, 计算它的表面积和体积 2 尝试定义一个常量来表示圆周率 π 图 3-2 计算圆柱体体积窗体设计 27
3.3 创建并使用枚举类型 定义枚举类型 enum Planet { Mercury, Venus, Earth, Mars } 使用枚举类型 Planet aplanet = Planet.Mars; 显示变量 Console.WriteLine( {0}, aplanet); // 显示 Mars 28
3.3 创建并使用枚举类型 讨论 : 为什么需要使用枚举类型? 确保只将预定值赋给变量, 使变量易于维护 ; 允许给数值赋以简单易认的名字, 提高代码可读性 ; 易于输入, 因为代码编辑器的 智能感知 功能会显示可使用的列表 ; 允许指定一组常数值, 并定义仅接受该组常数值的类型 示例 :MessageBox.Show 方法的几种用法 29
3.3 创建并使用枚举类型 [ 多学一点 ] 消息框 MessageBox 消息框 MessageBox 通过调用 MessageBox 类的静态 Show 方法向用户显示文本消息 MessageBox 比较常用的方式有 : MessageBox.Show(string ); 显示一个字符串 MessageBox.Show(string,string); 显示一个字符串, 消息框带有标题 MessageBox.Show(string,string, MessageBoxButton, MessageBoxImage); 显示带标题的字符串, 同时显示按钮和图标 30
3.3 创建并使用枚举类型 例如 : MessageBox.Show(" 输入有误!"); MessageBox.Show(" 输入有误!"," 警告 "); MessageBox.Show(" 输入有误! ", " 警告 ",MessageBoxButtons.OKCancel); MessageBox.Show(" 输入有误! ", " 警告 ", MessageBoxButtons.OKCancel,MessageBoxIcon.Error); 图 3-3 MessageBox 运行效果 31
3.3 创建并使用枚举类型 图 3-4 MessageBoxButtons 枚举类型 图 3-5 MessageBoxIcon 枚举类型 32
3.3 创建并使用枚举类型 图 3-6 DialogResult 枚举类型 33
3.4 运算符与表达式类型 1. 算术运算符与算术表达式 算术运算符有一元运算符与二元运算符 1 一元运算符 :-( 取负 ) +( 取正 ) ++( 增量 ) --( 减量 ) 2 二元运算符 :+( 加 ) -( 减 ) *( 乘 ) / ( 除 ) %( 求余 ) 由算术运算符与操作数构成的表达式叫算术表达式 34
3.4 运算符与表达式类型 - 与 + 只能放在操作数的左边 增量与减量量符只能用于变量 二元运算符的意义与数学意义相同, 其中 %( 求余 ) 运算符是以除法的余数作为运算结果, 求余运算也叫求模 例如 : int x=6,y=2,z; z=x%y; //x 除以 y 的结果不是 3( 商 ), 而是 0( 余数 ) 要注意数据类型 例如 : int a,b=39; a=b/2; // a 的值为 18 35
3.4 运算符与表达式类型 2. 字符串运算符与字符串表达式 字符串运算符只有一个, 即 + 运算符, 表示将两个字符串连接起来 例如 : string connec="abcd"+"ef"; // connec 的值为 abcdef + 运算符还可以将字符型数据与字符串型数据或多个字符型数据连接在一起, 例如 : string connec="abcd"+'e'+'f'; // connec 的值为 abcdef 36
3.4 运算符与表达式类型 3. 关系运算符与关系表达式 >, <, >=, <=, ==,!= 依次为大于, 小于, 大于等于, 小于等于, 等于, 不等于 用于字符串的关系运算符只有相等 == 与不等!= 运算符 4. 逻辑运算符与逻辑表达式 在 C# 中, 最常用的逻辑运算符是!( 非 ) && 与 ( 或 ) 37
3.4 运算符与表达式类型 4. 逻辑运算符与逻辑表达式 在 C# 中, 最常用的逻辑运算符是!( 非 ) && 与 ( 或 ) 例如 : bool b1=!true; // b1 的值为 false bool b2=5>3&&1>2; // b2 的值为 false bool b3=5>3 1>2 // b3 的值为 true 38
3.4 运算符与表达式类型 5. 条件运算符与条件表达式 条件运算符是 C# 中唯一的三元运算符, 条件运算符由符号? 与 : 组成, 通过操作三个操作数完成运算, 其一般格式为 : 布尔类型表达式? 表达式 1: 表达式 2 39
3.4 运算符与表达式类型 6. 赋值运算符与赋值表达式 在赋值表达式中, 赋值运算符左边的操作数叫左操作数, 赋值运算符右边的操作数叫右操作数 左操作数通常是一个变量 复合赋值运算符, 如 *= /= %= += -= 等 40
3.5 运算符的优先级与结合性 1. 优先级 1 一元运算符的优先级高于二元和三元运算符 2 不同种类运算符的优先级有高低之分, 算术运算符的优先级高于关系运算符, 关系运算符的优先级高于逻辑运算符, 逻辑运算符的优先级高于条件运算符, 条件运算符的优先级高于赋值运算符 3 有些同类运算符优先级也有高低之分, 在算术运算符中, 乘 除 求余的优先级高于加 减 ; 在关系运算符中, 小于 大于 小于等于 大于等于的优先级高于相等与不等 ; 逻辑运算符的优先级按从高到低排列为非 与 或 41
3.5 运算符的优先级与结合性 2. 圆括号 可以使用圆括号明确运算顺序 例如 : string s=x>y?"greater than":x==y?"equal to":"less than"; string s=x>y?"greater than":(x==y?"equal to":"less than"); 括号还可以改变表达式的运算顺序 : b*c+d b*(c+d), 42
3.5 运算符的优先级与结合性 3. 结合性 在多个同级运算符中, 赋值运算符与条件运算符是由右向左结合的, 除赋值运算符以外的二元运算符是由左向右结合的 例如,x+y+z 是按 (x+y)+z 的顺序运算的, 而 x=y=z 是按 x=(y=z) 的顺序运算 ( 赋值 ) 的 43
课堂练习 : 使用运算符 1 读右列中的代码, 然后回答问题 int x=10; int y=x++;?y 的值是什么, 为什么? 2 读右列中的代码, 然后回答问题 x+=10;?x 的值是什么, 为什么? 3 读右列中的代码, 然后回答问题 int z=30; int a=x+y*z;?a 的值是什么? 为什么? 将该代码改写成更具有可读性的形式 4 读右列中的代码, 然后回答问题 int a=10; int b=a++; bool mybool=(a==b);? 这段代码做了些什么?myBool 的值是多少? 44
综合实例 : 某公司职工基本薪资的计算 某公司的月薪基数根据本月的公司效益进行确定 职工基本月薪根据其岗位系数来确定本人的月薪 该公司的岗位系数分为作业员 技术员 工程师 部门经理 4 级, 其系数分别为 0.9, 1.0, 1.5 和 2 现希望编制一个程序, 输入公司的月薪基数和该职工的岗位, 计算其该月基本月薪 如 : 该月公司月薪基数为 850.00 元, 该职工为工程师, 则其当月基本月薪为 850.00*1.5=1275.00 元 通过本演示, 了解 NumericUpDown 控件 ComboBox 控件 TextBox 控件的使用, 及掌握如何使用枚举类型, 并将枚举类型数据绑定到控件 45
演示 : 月薪计算 1 界面组成 NumericUpDown 控件, 命名为 numbasesalary ComboBox 控件, 命名为 combpost TextBox 控件, 命名为 txtsalary Button 控件, 命名为 btncaculate 46
演示 : 月薪计算 2 控件属性设置 numbasesalary 控件 : Value: 默认值, 设为 1000 Maximum: 最大值, 设为 5000 Minimum: 最小值, 设为 300 Increment: 增长值, 设为 10 DecimalPlaces: 小数位, 设为 2 ThousandsSeparator: 千分位符, 设为 True 47
演示 : 月薪计算 2 控件属性设置 combpost 控件 : DropDownStyle: 组合框的风格, 有以下几种形式, 使用第 3 项 : Simple: 列表框部分总是可见, 用户可以编辑文本 DropDown: 默认 正常时列表部分隐藏, 用户可以编辑文本 DropDownList: 正常时列表部分隐藏, 用户不可以编辑文本 Items: 组合框中列表项集合 SelectedItem: 用户选择的项目 48
演示 : 月薪计算 2 控件属性设置 使用集合编辑器设置组合框 (combpost) 的列表项 49
演示 : 月薪计算 为使得运行时, 第 0 项处于选中状态, 在 Form1_Load 事件中, 添加 以下代码 : private void Form1_Load(object sender, System.EventArgs e) { // 设置第 0 项为默认选项 combpost.selecteditem = combpost.items[0]; } 50
演示 : 月薪计算 3 读取用户输入的数值 double basesalary =(double)numbasesalary.value; double postcoefficient = 1.0; string post = combpost.selecteditem.tostring(); if (post ==" 作业员 ") { postcoefficient = 0.8; } else if (post == " 技术员 ") { postcoefficient = 1.0; } 使用 if 语句判断 51
演示 : 月薪计算 4 计算并输出 double salary = basesalary*postcoefficient; txtsalary.text = String.Format( {0:C},salary); // 以货币格式显示 有关格式化输出 String.Format( ) 方法请查阅资料 C 或者 c 表示货币 52
本章小结 本章通过一些小实例的分析和实现, 讲解了在 C# 编程过程中如何声明与使用常量和变量, 何时应该使用哪种数据类型, 每一种数据类型的含义及用法, 以及如何使用运算符和表达式, 让读者具备基本的 C# 编程知识 53