




已阅读5页,还剩56页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章数据类型与流程控制 2 1数据类型2 2不同数据类型之间的转换2 3常量与变量2 4运算符与表达式2 5控制台应用程序与格式化输出2 6C 流程控制语句 2 1数据类型 C 数据类型分为两类 值类型和引用类型 值类型 值类型变量直接保存变量的值包括简单类型 枚举类型 结构类型 可空类型 引用类型 引用类型变量保存的是数据的引用地址 包括类 接口 数组 委托 一般把引用类型的变量称为对象 值类型与引用类型区别 12345H 堆栈 堆 5 6 i j 实际数据 12345H obj 值类型和引用类型的区别 2 1 2整型 C 提供了八种整型 即计算机组成原理中的 定点数 sbyte 1字节有符号byte 1字节无符号short 2字节有符号ushort 2字节无符号int 4字节有符号 最常用uint 4字节无符号long 8字节有符号ulong 8字节无符号各类型表示的数据类型见表2 3 2 1 3浮点类型 float 4字节浮点数 常用 例如 35 0fdouble 8字节浮点数 常用 例如 2 7E 23decimal 16字节浮点数 特殊的浮点数 精度高适用于金融 货币等需要高精度数值的领域 其类型指定符为M 或m 例如 decimaly 9999999999999999999999999m float和double的浮点数格式与计算机组成原理介绍的IEEE754规定的格式相同各类型表示的数据类型见表2 4 2 1 4布尔型 用bool表示 bool类型只有两个值true和false 例如 boolisExist false boolb i 0 正确 2 1 5字符型与字符串类型 char型 为单个Unicode字符 字符型常量必须用单引号引起来 例如 charch a 如果是字符串 单个字符的组合 对应的类型为string string类型的常量用双引号将字符串引起来 例如 stringstr hello char和string类型的常量均可以使用转义符 转义符见表2 5 2 2值类型之间的数据转换 有两种转换方式 隐式转换与显式转换 如果是不同值类型之间的转换 可以使用Convert类提供的静态方法 2 2 1隐式转换和显式转换 隐式转换从低精度 小范围的数据类型转换为高精度 大范围的数据类型 可以用隐式转换 例如 intk 1 longi 2 i k 隐式转换 2 2 1隐式转换和显式转换 显式转换如 longk 5000 inti int k所有的隐式转换也都可以采用显式转换的形式来表示 如 inti 10 longj long i 将大范围类型的数据转换为小范围类型的数据的时候 必须特别谨慎 因为此时有丢失数据的危险 例题2 1 2 2 2装箱与拆箱 C 的类型系统是统一的 这样任何类型的值都能够被处理成对象 C 中每一个类型直接或者间接从object类继承而来 并且object是所有类型最终的基类 Object类型 System命名空间下有一个Object类 该类是 所有其他引用类型的基类 考察 Strings 10 ToString C 如何调用数值10上的方法ToString 值类型与object类型之间的转换 值类型与object类型之间的转换 可以使用装箱与拆箱技术实现 装箱 boxing 将值类型转换为object类型inti 123 objecto i 含义 在堆栈中创建一个对象o 该对象引用了堆 heap 上int类型的数值 而该数值是赋给变量i的数值的备份 o 拆箱 unboxing 将object类型转换为值类型intk int o usingSystem classTest staticvoidMain inti 123 objecto i 装箱intj int o 取消装箱 2 3常量和变量 C 中提供2种类型的常量 const关键字 静态常量 Compile timeconstant const常量是在编译时设置其值并且永远不能更改其值的字段 在对程序进行编译的时候 编译器会把所有const常量全部替换为常数 使用readonly关键字 动态常量 Runtimeconstant 在程序运行期间只能初始化 一次 的字段 可以在声明语句中初始化该字段 也可以在构造函数中初始化该字段 初始化以后 用readonly声明的字段的值就不能再更改 二者区别 readonly常量运行时初始化 const常量编译时初始化 const常量只能在声明中赋值 readonly常量既可以在声明中赋值 也可以在构造函数中赋值 示例publicconstintMAX VALUE 10 示例publicreadonlyintMAX VALUE 10 变量 变量用来表示一个数值 一个字符串值或者一个类的对象 变量存储的值可能会发生更改 但变量名称保持不变 C 是大小写敏感的 即大写和小写字母认为是不同的字母 例如变量名something Something SOMETHING都是不同的名字 命名变量名要遵守如下的规则 1 不能是C 关键字 2 第一个字符必须是字母或下划线 3 不要太长 一般不超过31个字符为宜 4 不能以数字开头 5 中间不能有空格 6 变量名中不能包含 之类的特殊符号 实际上 变量名中除了能使用26个英文大小写字母和数字外 只能使用下划线 7 变量名不要与C 中的库函数名 类名和对象名相同 变量 C 定义了7类变量 分别是 静态变量 实例变量 数组元素 值参数 引用参数 输出参数和局部变量 classA publicstaticintx inty voidF int v inta refintb outintc inti 1 c a b 变量 声明变量举例 inta 100 声明一个整型变量a 并赋初值为100也可以采用先定义 后赋值的方式 例如 inta 声明一个整型变量aa 100 为整型变量a赋值为100另外 也可以把几个变量声明和初始化用一条语句完成 各个变量之间用逗号分隔 例如 inta 100 b c 200 d 声明整型变量a b c d 并将a赋值100 c赋值200 匿名类型的变量 匿名类型的变量就是程序员不必指定 局部 变量的类型 统统用var来表示类型即可 varv new Amount 108 Message Hello 一个匿名对象Console WriteLine v Amount v Message 在LINQ表达式或者foreach语句中 使用匿名类型的变量比较方便 varproductQuery fromprodinproductsselectnew prod Color prod Price foreach varvinproductQuery Console WriteLine Color 0 Price 1 v Color v Price 2 4运算符和表达式 C 提供了3大类运算符 一元运算符 带有一个操作数的运算符称为 一元 运算符 例如 i 二元运算符 带有两个操作数的运算符称为 二元 运算符 例如 x y 三元运算符 带有三个操作数的运算符称为 三元 运算符 在C 中 只存在1个三元运算符 即条件运算符 C 的常用运算符及其含义如表2 6 C 的常用运算符的优先级如表2 7 2 4运算符和表达式 表达式C 的表达式与C 和Java类似 如 x y x y z x y 2 5控制台应用程序与格式化输出 控制台 Console是操作系统的一个接口 用户可以在控制台界面中通过键盘输入文本 也可显示文本 控制台属于System Console类 Console类封装了基于控制台应用程序的输入 输出和错误流操作 2 5控制台应用程序与格式化输出 控制台输出Console Write 将文本输送到输出流而不附加回车符Console WriteLine 将文本字符串 包括一个回车符 输送到输出流控制台输入Console ReadKey 标准输入流读取用户按下的字符或功能键 Console ReadLine 从标准输入流读取一行字符 格式输出的一般形式为 N M 格式码 其中 表示其中的内容为可选项 N 从零开始的整数 表示第几个参数 M 可选整数 表示最小长度 若参数N的长度小于M 就用空格填充 如果M为负 则左对齐 如果M为正 则右对齐 如果未指定M 则默认为零 格式码 可选的格式化代码字符串 格式化输出 常用格式码及举例 字符串的格式化输出 对于字符串来说 可以直接利用格式化输出得到希望的格式 例如 strings string Format 0 30 s得到的结果为30个空格的字符串strings1 string Format 0 20 15 s1得到的结果为左对齐 长度为20的字符串 数字的格式化输出 数值可使用ToString和string Format输出 1 在ToString中使用d格式 inti 12345 stringstr i ToString d i ToString d 表示将i按照实际整数宽度转换为字符串Console WriteLine str 结果12345stringstr1 i ToString d8 i ToString d8 表示将i转换为字符串 宽度为8位 不够8位左边用0填充Console WriteLine str1 结果00012345 数字的格式化输出 2 在string Format中使用d格式 inti 123 doublej 123 45 strings1 string Format thevalueis 0 7 d i 0 7 d 表示第0个参数 宽度7位 不够7位左边用空格填充 d表示十进制整数Console WriteLine s1 结果thevalueis123strings2 string Format thevalueis 0 7 f3 j 0 7 f3 表示第0个参数 总宽度7位 其中小数部分占3位 不够7位左边填空格 f表示浮点数Console WriteLine s2 结果thevalueis123 450 数字的格式化输出 3 在ToString中使用f格式 doublei 12345 6789 stringstr i ToString f2 f2表示浮点数小数部分为2位 多余部分四舍五入 不够2位时右边补零Console WriteLine str 结果12345 68stringstr1 i ToString f6 Console WriteLine str1 结果12345 678900 数字的格式化输出 4 在ToString中使用n格式 doublei 12345 6789 stringstr i ToString n n表示整数部分从小数点向左每3位用逗号分隔开 小数部分2位 多余部分四舍五入Console WriteLine str 结果12 345 68stringstr1 i ToString n4 n4表示整数部分从小数点向左每3位用逗号分隔开 小数部分4位 多余部分四舍五入Console WriteLine str1 结果12 345 6789 数字的格式化输出 5 在ToString中使用p格式 doublei 0 126 strings string Format thevalueis 0 p i p表示百分数形式Console WriteLine s 结果thevalueis12 60 stringstr i ToString p Console WriteLine str 结果12 60 日期和时间的格式化输出 DateTimedt newDateTime 2006 5 25 stringstr dt ToString yy M d yy表示年占两位 M表示月占1位 超出1位按实际位数 d表示日占1位 超出1位按实际位数Console WriteLine str 结果06 5 25stringstr1 dt ToString yyyy年M月 yyyy表示年占4位 M表示月占1位 超出1位按实际位数 其他按原字符输出Console WriteLine str1 结果2006年5月日期和时间的格式符详见表2 9 2 6C 流程控制语句 流程控制的形式 顺序分支循环异常捕获如果一个逻辑块包含两条或两条以上的语句序列 必须使用大括号 将语句括起来 2 6 1条件分支语句 if语句 根据布尔表达式的值 true或者false 选择要执行的语句序列 使用时要注意else应和最近的if语句匹配 三种形式 ifif elseif elseif else例题2 2 2 6 1条件分支语句 续 switch语句也叫case语句switch语句与C 和Java均不完全相同 switch语句常用形式为 switch 表达式 case常量表达式1 语句序列1case常量表达式2 语句序列2 default 语句序列 2 6 1条件分支语句 续 常量表达式switch条件表达式的值和每个case后的常量表达式可以是string int char enum或其它值类型 语句序列每个case后的语句序列可以用大括号括起来 也可以不用 但是每个case块的最后一句一定要是break goto return语句 否则编译出错 switch语句的执行顺序a 如果switch语句的条件表达式的值和某一个case标记后指定的值相等 则转到该case标记后的语句序列执行 b 若switch语句的条件表达式的值和任何一个case标记后指定的值都不相等 则跳到default标记后的语句序列执行 c 若switch语句下面没有default标记 则跳到switch语句的结尾 2 6 1条件分支语句 续 注意 a 要求每个语句序列的最后一条语句必须是break goto return语句 但是有一个情况例外 如果某个case块语句为空 则会从这个case块直接跳到下一个case块上 b 如果case后有break语句 则此case的顺序怎么放都无所谓 甚至可以将default子句放到最上面 因此 在一个switch中 不能有相同的两个case标记 例2 3 使用switch语句 完成对成绩等级的评定 usingSystem namespaceSwitchExample publicclassProgram publicstaticvoidMain Console Write 请输入成绩 从键盘接收一行字符stringstr Console ReadLine 转换为整型 注意此语句可能会产生异常 一般需要异常处理inti Int32 Parse str Trim 或者int Parse 或者Convert ToInt32 if i 100 i 0 Console WriteLine 成绩不在0 100范围内 else switch i 10 整除 case10 Console Write 满分 gotocase9 case9 Console WriteLine 优秀 break case8 case7 Console WriteLine 良好 break case6 Console WriteLine 及格 break default Console WriteLine 不及格 break Console ReadLine 2 6 2循环语句 包括 for语句while语句do while语句foreach语句 用于对集合 数组进行操作 2 6 2循环语句 续 for语句一般形式 for 初始值 循环条件 循环控制 语句序列 例2 4 使用for语句控制循环体 publicstaticvoidMain Console Clear Console BackgroundColor ConsoleColor Blue Console ForegroundColor ConsoleColor Red Console Beep for inti 1 i 10 i 2 Console SetCursorPosition 40 i 2 i for intj 0 j i j Console Write Console WriteLine Console ReadLine 2 6 2循环语句 续 foreach语句foreach语句用于逐个提取集合中的元素 并对集合中每个元素执行语句序列中操作的场合 一般形式为 foreach 类型标识符in表达式 语句序列 注意 1 循环变量是一个只读型的局部变量 2 循环变量类型必须和表达式所包含的集合元素的类型一致 2 6 2循环语句 续 判断下列语句是否正确 并说明原因 int myInt 1 2 3 foreach floattestinmyInt test Console WriteLine test 问题1 循环变量在循环体中被赋值test 循环变量是一个只读型的局部变量 问题2 floattest 循环变量类型必须和表达式所包含的节元素类型一致 例题2 5 2 6 2循环语句 续 while语句一般形式 while 条件 语句序列 循环体内的程序可能会执行多次 也可能一次也不执行 例题2 6 2 6 2循环语句 续 do while一般形式 do 语句序列 while 条件 循环体内的程序至少会执行一次 然后再判断条件是否为true 如果条件为true 则继续循环 2 6 3跳转语句 1 break语句功能 退出最近的封闭switch while do while for或foreach语句 格式 break 例 循环接收和输出键盘输入的每一行的值 当接收的内容为空字符串时退出 usingSystem namespaceBreakExample publicclassProgram publicstaticvoidMain for Console Write 请输入一个字符串 直接回车退出 strings Console ReadLine if s break Console WriteLine 你输入的是 0 s Console ReadLine 2 6 3跳转语句 续 2 continue语句功能 将控制传递给下一个while do while for或foreach 继续执行下一次循环 格式 continue 2 6 3跳转语句 续 3 goto语句仅在下面两种情况下才可能会使用goto语句 1 用于switch语句中从一个case标签转到另一个case标签处 2 用于直接退出到多重嵌套循环的外部 不建议使用goto语句 2 6 3跳转语句 续 4 return语句功能 将控制返回到出现return语句的函数成员的调用方 格式 return 表达式 其中表达式为可选项 如果该函数成员的返回类型不为null 则return语句必须使用表达式返回这个类型的值 否则return语句不能使用表达式 例2 9 循环与跳转综合举例 2 6 4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水力学基础试题及答案
- 变电运维人员面试题库及答案
- 2025泌尿外科主治医师考试《专业知识》试题(附答案)
- 2026届陕西省西安市高新第二初级中学九年级化学第一学期期末质量跟踪监视试题含解析
- 2026届重庆巴蜀常春藤化学九年级第一学期期中考试模拟试题含解析
- 2026届黑龙江省齐齐哈尔市实验学校化学九年级第一学期期中达标测试试题含解析
- 高档商务区空地租赁协议范本
- 瑜伽馆股东合作协议书(含课程研发与教学创新)
- 夫妻离婚时财产清算与债权债务转移协议范本
- 瑶海区二手房买卖合同解除及房产交易合同
- 2025年职业技能鉴定考试(涂装工·高级/三级)历年参考题库含答案详解(5套)
- 2025至2030年中国猫砂行业发展监测及投资战略研究报告
- 2025年理赔人员上岗考试题库
- 荧光分析技术第二章荧光信号机制讲课文档
- 2025-2026年秋季学期各周国旗下讲话安排表+2025-2026学年上学期升旗仪式演讲主题安排表
- 2025年公务员(国考)之公共基础知识考试题库(带答案解析)
- 初级医学影像技术师考试试卷及答案2025年
- 幼儿园一日生活指引培训
- 中班健康运蔬菜喽
- 2025年护理核心制度试题及答案
- 宣传思想文化试题及答案
评论
0/150
提交评论