已阅读5页,还剩147页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C 程序设计基础 第2章基本数据类型与表达式北京邮电大学信通院方莉mrs fangli 2 程序中最基本的元素是数据类型 根据数据类型可以为变量或常量分配内存空间 将变量 常量和运算符结合在一起组成表达式 进行复杂的运算和处理 第2章基本数据类型与表达式 3 主要内容如何定义和使用变量和常量 如何使用表达式 如何使用输入和输出流 如何使用string类型处理字符串 第2章基本数据类型与表达式 4 第2章基本数据类型与表达式 5 2 1词法记号和标识符 1 C 字符集2 C 关键字3 标识符4 分隔符5 空白 6 2 1词法记号和标识符 1 C 字符集英文字母 A Z a z数字字符 0 9特殊字符 空格 7 2 1词法记号和标识符 2 C 关键字1 什么是关键字 预先定义好的标识符 C 编译器对其进行特殊处理 auto bool break case catch char class const continue default delete do while P11 12 2 如何识别关键字 使用VC 6 0 VC2005 的编辑环境时 缺省是蓝色的字符即为关键字 8 2 1词法记号和标识符 3 标识符标识符是程序员声明的单词 它命名程序正文中的一些实体 如函数名 变量名 类名 对象名等 C 标识符的构成规则如下 1 不能是C 的关键字 2 第一个字符必须是大写 小写字母或下划线 3 不包含空格和 等特殊字符 4 为方便输入 长度一般不超过31个字符 9 2 1词法记号和标识符 例如 合法的标识符 apple Student 123 No1 max num不合法的标识符 51job maxnum abc C 的表示符是大小写敏感的 即abc ABC 10 2 1词法记号和标识符 4 分隔符分隔符用于分隔程序中的正文 在C 中使用下列字符作为分隔符 这些分隔符不表示实际的操作 仅用于构造程序 比如 用来作为一句完整语句的结束 11 2 1词法记号和标识符 5 空白在C 语句中经常出现空白 制表符 空格 空行 等 通常都忽略不计 例如 x a b 也可写成 x a b 或x a b 合法但不直观 缺乏可读性使用空格要适当 12 第2章基本数据类型与表达式 13 2 2基本数据类型 什么是数据类型 数据是程序处理的对象 根据数据本身的特点进行分类 从而形成不同的数据类型 例如 数学中有自然数 整数 实数不同类型的数据有不同的表示和处理方法 具有不同运算规则 14 2 2基本数据类型 基本数据类型整型 int字符型 char wchar t实型 float double逻辑型 bool 15 2 2基本数据类型 自定义数据类型数组 type 指针 type 引用 type 空类型 void结构 struct联合 union枚举 enum类 class 16 2 2基本数据类型 修饰符在C 中描述为了更加准确的描述数据类型 提供了4个关键字用来修饰基本数据类型 1 长型long2 短型short3 有符号signed4 无符号unsigned 17 1 short 仅用来修饰int 称为短整型 占2字节内存 也可直接简写为short 2 long 仅修饰int和double 因为在不同的编译环境中使用long修饰的数据所占内存不同 这里列出的是在VC 6 0 vc2005 的环境下的 3 unsigned 用来修饰char short和int 表示该数据类型为无符号数 4 signed 用来修饰char short和int 表示该数据类型为有符号数 为缺省设置 2 2基本数据类型 18 2 2基本数据类型 数据类型与内存空间不同的数据类型 加上不同的修饰符就具有了不同的特点 在内存中占用的空间也不同 因而其所能表示的数值范围也不尽相同 内存单元的单位是字节 因此用来表示数据类型的长度的单位也是字节 19 2 2基本数据类型 注意特定数据类型在内存中占用的内存因机器的不同而不同 整型int的长度等于机器的字长 16位机 int 2字节 32位机 int 4字节 但是short和long表示的数据长度是固定的 任何支持标准C 的编译器都是如此 因而如果需要编写可移植性好的程序 应将整型声明为short或long 20 2 2基本数据类型 21 2 2基本数据类型 22 例2 1 输出数据类型的长度 例题编写一个程序 输出基本数据类型char int float double bool的长度 即所占字节数 提示 使用sizeof 数据类型 能够获取不同数据类型的长度 23 例2 1 输出基本数据类型的长度 includeusingnamespacestd voidmain cout char sizeof char 字节 n cout int sizeof int 字节 n cout float sizeof float 字节 n cout double sizeof double 字节 n cout bool sizeof bool 字节 n 例2 1 输出数据类型的长度 在32位机上运行结果char 1字节int 4字节float 4字节double 8字节bool 1字节 24 第2章基本数据类型与表达式 25 2 3变量和常量 概述程序所处理的数据不仅分为不同的数据类型 而且每种类型的数据还分为变量和常量 程序在运行中就是通过这些变量和常量来操作数据的 什么是变量 在C 中 变量是存储信息的地方 变量的实质是内存中的一个地址空间 在这个地址空间中可以进行数据的存储和读取 26 变量定义的格式 变量定义的格式 数据类型变量名1 变量名2 变量名n 例如 定义各种类型的变量intnum floatf charch shorts doublearea length 27 变量定义的格式 定义变量的实质例如 intnum 系统根据所指定的数据类型int 从地址xxxxxxxH开始 为变量num分配4个字节单元 变量num的取值范围为 231 231 1 28 变量定义的格式 定义变量的实质例如intnum 编程时 可以直接使用变量名num对存储在该内存空间的数据 也就是变量值进行存取 变量名和地址xxxxxxxH之间的对应关系由系统来管理 29 变量定义的格式 说明在创建或定义变量时 需要指明该变量的数据类型和名称 数据类型 决定变量的存储方式和可以进行的操作 变量名称 用来区分不同的变量 例如 shortints doublearea length 变量一旦被定义 则系统自动为其分配应占的内存 30 变量定义的格式 说明在C 程序中使用变量 必须 先定义或声明 后使用 而且只能定义一次 变量定义语句的位置 C 中没有要求 放在第一次使用该变量之前的任何位置均可以 建议 把变量定义语句放在首次使用它的地方 这样可以提高程序的可读性 31 变量名称的定义 变量名称的定义遵循标识符定义的规则 实际上变量名称就是一种标识符 常用的命名约定有三种 1 Unix环境常用的命名法my age num of student2 驼峰式命名法myAge numOfStudent3 匈牙利标记法iMyCar ipMyCar 32 给变量赋值 赋值使用赋值运算符 可以将一个值赋给变量 先定义后赋值 定义同时初始化例如 unsignedshortage age 18 或者unsignedshortage 18 33 给变量赋值 可以一次定义多个相同数据类型的变量 也可以一次为多个变量初始化 charch1 a ch2 b intheight 10 width 6 area 特性 变量可以被多次赋值 但每次赋值后 原值都会被新值覆盖 34 例2 2 赋值运算符的使用 includeusingnamespacestd voidmain intmyAge 18 cout myAge myAge endl myAge 20 cout myAge myAge endl 运行结果 myAge 18myAge 20 35 2 3变量 typedef为已有的数据类型定义一个同义词 或者叫做别名 例如 typedefunsignedintUINT 关键字数据类型新类型名 别名赋值 UINTi 注意 使用typedef定义同义词时并不分配内存空间 36 2 3常量 严格来说 常量又分成符号常量和常数 符号常量 代表一个固定不变值的名字 常数 程序中使用的具体的数据 37 2 3常量 符号常量C 中提供了一个关键字const 用来区分常量和变量 由于常量代表一个固定的值 并且该值在程序运行过程中不能够被改变 所以要求常量在定义的时候必须进行初始化 例如 constfloatPI 3 1415 关键字数据类型常量名 初始值 38 2 3常量 define关键字在C语言中使用预编译指令 define也能够定义常量 例如 definePI3 1415927关键字常量名值 该语句属于预编译指令 不属于C 语句 因而行尾不需要使用分号 并且由于C 是向下兼容的 因而C语言的程序能够在C 的编译器下顺利运行 但是在C 编程中 建议使用const替代 define定义常量 39 2 3常量 编程时使用符号常量可以增强程序的可读性可以增强程序的可维护性 40 整型常数 整型常数 多进制十进制数 100 有符号 八进制数 0123 0 7 无符号整型数 123 8 83十六进制数 0 x123 0 9 A F 无符号整型数 123 16 291用U或u表示无符号整型 如65535U 用L或l表示长整型 如123L 默认的是int型 41 实型常数 实型常数小数形式例如 0 123 23 12指数形式 aEb a 10b例如 123e5或123E5 123 105实常数默认为double型可用后缀F f 表示实数常数为float型 可用后缀L l 表示实数常数为longdouble型 注意 b必须是十进制整数 a可以是十进制整数或者小数形式的实数 并且数字a和b都不可以省略 42 字符常数 字符常数1 用单引号扩起来的一个字符 例如 a 2 转义字符以 开头的字符序列 代表特殊的意义 例如 n t 换行制表符双引号 P18 43 字符形式ASCII码含义 a0 x07bell 响铃 n0 x0A换行 r0 x0D回车 t0 x09制表符 v0 x0B垂直跳格 b0 x08Backspace 0 x5C 0 x22双引号 0 x27单引号 ooo1 3位8进数 xhh1 2位16进数 字符常数 44 例2 3 打印特殊字符 includeusingnamespacestd voidmain cout 输出字母 a a endl cout 输出字母 n n 运行结果 输出字母 a 蜂鸣器响一声 输出字母 n 换行 45 2 3常量 反斜杠还可以和八进制数或十六进制结合起来表示相应的ASCII码 表示形式如下 ooo 1 3位八进制数 xhh 1 2位十六进制数在十六进制的ASCII码表中 字母 a z 的ASCII值是61H 7AH 因此也可以使用如下两句代码替代例2 3中的输出 达到同样的结果 cout 输出字母 x61 x07 endl cout 输出字母 x6E x0A 46 2 3常量 字符数据的存储charch1 a ch2 97 原因 在内存中 字符数据以ASCII码存储 即以整数表示 所以 C 中字符数据和整数可以相互赋值 47 例2 4 字符数据和整型数据的转换 includeusingnamespacestd voidmain intn a charch 97 cout 输出内容 n endl cout 输出内容 ch endl 运行结果 输出内容 97输出内容 a 注意 变量在输出时 根据其本身的数据类型进行输出 48 字符串 字符串常量由一对双引号括起来的字符序列 例如 howdoyoudo helloworld 49 字符串 字符和字符串的区别1 字符常量和字符串常量是不同的 字符串常量以 0 结尾 例如 字符串Hello在内存中的形式 2 a 不等于 a a 占2个字节 a 占1个字节 a 0 a 50 字符串 字符串变量chara 20 Helloworld n charb 5 a charc a 思考字符串 x07Operating tsystem 显示结果如何 字符串 ab n 在内存中占几个字节 51 2 3常量 逻辑常数逻辑型常数只有两个 false 假 和true 真 在显示器上显示为0和1 52 第2章基本数据类型与表达式 53 2 4运算符和表达式 1 表达式2 语句和块3 运算符赋值运算符 算术运算符 关系运算符 逻辑运算符 位运算符 条件运算符 逗号运算符 54 2 4运算符和表达式 表达式变量 常量是存放数据的地方 那么在C 语言中这些数据是如何处理和计算的呢 在C 语言中将变量 常量和运算符有机结合在一起组成的就是表达式 利用表达式C 可以进行复杂的运算和处理 55 例如 3 2 简单表达式 值为3 22 3 常量表达式 值为5a 简单表达式 值为变量a的值x a b c 较为复杂的表达式表达式是可以嵌套的 比如y x a b 该表达式先将a和b进行相加 然后将结果赋值给x 再将x a b的值赋给y 2 4运算符和表达式 56 2 4运算符和表达式 表达式定义 表达式是运算符 操作数和标点符号组成的序列 运算符 等操作数 变量 常量 数组等标点符号 空格 回车等 表达式总能返回一个值作为表达式的结果 57 2 4运算符和表达式 语句和块C 中所有的操作运算都通过表达式来实现 由表达式和结尾的 组成一个C 语句 多条C 语句通过大括号 括起来 组成一个块语句 例如 inttemp x x y y temp 一般来说属于同一个逻辑关系的多条语句组成块语句 58 运算符 运算符具有优先级和结合性 优先级 级别高的先运算 级别低的后运算 例如 高于 结合性 自左向右结合还是自右向左结合 例如 1 2 3 自左向右结合 59 2 4运算符和表达式 60 2 4运算符和表达式 运算符根据运算符对操作数的要求不同 分成 一元运算符 仅需要一个操作数的运算符 例如 等二元运算符 需要两个操作数的运算符 例如 等 形如 操作数1运算符操作数2 三元运算符 需要三个操作数的运算符 只有条件运算符 61 运算符 运算符赋值运算符算术运算符关系运算符逻辑运算符位运算符条件运算符逗号运算符 62 2 4运算符和表达式 赋值运算符1 赋值运算符就是 例如 floatf 3 152 左值 可以合法的放在 左边的操作数右值 可以合法的放在 右边的操作数常量都是右值 所以不能够放在 的左边被赋值 变量既是左值又是右值 可以放在任何位置 注意 并不是所有的操作数都可以作为左值 符号常量就不能作左值 带运算符的表达式一般也不能作为左值 63 2 4运算符和表达式 赋值运算符例如 floatx y constfloatPI 3 14 x 3 5 正确3 5 x 有语法错误y x 正确y 2 x 10 语法错误PI x 语法错误 64 运算符 运算符赋值运算符算术运算符关系运算符逻辑运算符位运算符条件运算符逗号运算符 65 2 4运算符和表达式 算术运算符C 提供的算术运算符包括 1 二元运算符 加 减 2 一元运算符 正号 负号 66 2 4运算符和表达式 算术运算符注意 1 根据操作数不同 运算规律也不同 整型数为整除运算 例如5 2 2 浮点数为通常意义的除法 即5 0 2 0 2 5 2 取余数运算符 只能对整型数进行操作 不允许对浮点数进行操作 67 2 4运算符和表达式 例2 5 和 运算符的使用 includeusingnamespacestd voidmain inta 4 b 3 cout a a b b endl cout a b a b endl cout float a b float a b endl cout a b a b endl cout b a b a endl 运行结果 a 4b 3a b 1 float a b 1 33333a b 1b a 3 68 2 4运算符和表达式 算术运算符C 中提供了两个特殊的运算符 表示将操作数加减1 运算符根据操作数的位置不同 又称为前置 i 和后置 i 1 前置 i 先自身加1 然后再将加1的值作为 i 表达式的值 2 后置 i 将i作为 i 表达式的值 然后自身再加1 69 例2 6 自增运算符的使用 includeusingnamespacestd voidmain inti 1 cout i i endl cout i i endl cout i i endl cout i i endl cout i i endl 运行结果 i 1i 1i 2 i 3i 3 70 2 4运算符和表达式 算术运算符在C 中可以将算术运算符和赋值运算符结合在一起进行运算 因此C 还提供5种复合的赋值运算符 和 例如 x y相当于x x yx y相当于x x yx y相当于x x yx y相当于x x yx y相当于x x y 71 2 4运算符和表达式 算术运算符优先级由高到低依次为 1 正号 负号 2 3 4 72 例2 7算术运算符和赋值运算符结合 includeusingnamespacestd voidmain intx 2 y 3 x y 8 cout x endl 运行结果 22原因 x y 8等价于x x y 8 73 2 4运算符和表达式 注意在进行算术运算时 很可能出现溢出 溢出是指在给一个变量赋值时超出了其数据类型表示的范围 溢出不会引起编译错误的 但运行结果会出现偏差 例如 shortinti 40000 2字节 215 215即 32768 32767 cout k i j endl 输出结果 25536 74 补码 补码 在计算机系统中 数值一律用补码来表示 存储 主要原因 使用补码 可以将符号位和其它位统一处理 同时 减法也可按加法来处理 另外 两个用补码表示的数相加时 如果最高位 符号位 有进位 则进位被舍弃 正数的补码与原码相同 负数的补码是反码加1 75 补码 补码 76 原码 原码 原码 反码 补码都是有符号定点数的表示方法 原码表示 简单直观 乘除运算方便 加减运算比较复杂 要分别考虑符号位和数值位 一个有符号定点数的最高位为符号位 0是正 1是负 原码就是这个数本身的二进制形式 以下都以8位整数为例 例如0000001就是 11000001就是 1 77 反码 反码 正数的反码 补码和其原码相同 负数的反码是其原码除符号位外其他位取反 例如 7的反码 78 补码 正数的补码 与原码相同 例如 9的补码是00001001 负数的补码 负数的补码是将其原码除符号位之外的各位求反之后在末位再加1 即 负数的补码是反码加1 例如 7的补码是11111001 79 补码 补码如何化为原码 符号位为0 正数 补码与原码相同 符号位为1 负数 除符号位外 其余各位取反加1 80 2 4运算符和表达式 shortinti 40000 2字节 16bits40000 215 212 211 210 26按补码表示 化为整数为 214 213 29 28 27 26 25536 81 2 4运算符和表达式 运算符赋值运算符算术运算符关系运算符逻辑运算符位运算符条件运算符逗号运算符 82 2 4运算符和表达式 关系运算符关系运算符有 2 由关系运算符将两个表达式连接起来 就是关系表达式 关系表达式的结果类型为bool 值只能为true或false 屏幕显示为1或0 83 例如 inta 1 b 2 c 3 cout b b c a 5 cout d endl 结果true 输出为1 结果false 输出为0 结果true 输出为1 结果true 输出为1 结果false 输出为0 84 2 4运算符和表达式 运算符赋值运算符算术运算符关系运算符逻辑运算符位运算符条件运算符逗号运算符 85 2 4运算符和表达式 逻辑运算符逻辑运算符有三种 这些运算符的优先级由高到低依次为 1 2 3 除了逻辑非 逻辑运算的级别低于关系运算 逻辑表达式的结果类型也为bool 值只能为true或false 屏幕显示为1或0 86 2 4运算符和表达式 注意如果多个表达式用 运行结果 2 87 2 4运算符和表达式 运算符赋值运算符算术运算符关系运算符逻辑运算符位运算符条件运算符逗号运算符 88 2 4运算符和表达式 位运算符一般高级语言 byte C语言 bitC 语言中提供了六个位运算符 89 2 4运算符和表达式 按位与 按位 与 操作的作用是将两个操作数对应的每一位分别进行逻辑与操作 例如 计算3 53 000000115 000001013 5 00000001 90 2 4运算符和表达式 按位与 使用按位与 操作可以将操作数中的若干位置0 其他位不变 或者取操作数中的若干指定位 例如 将chara的最低位置0 a a 91 2 4运算符和表达式 按位或 按位 或 操作的作用是将两个操作数对应的每一位分别进行逻辑或操作 例如 计算3 53 000000115 000001013 5 00000111 92 2 4运算符和表达式 按位与 93 2 4运算符和表达式 按位异或 按位异或操作的作用是将两个操作数对应的每一位分别进行异或操作 运算规则 1 1 0 0 0 0 1 0 0 1 1例如 计算3 53 000000115 000001013 5 00000110 94 2 4运算符和表达式 例如 如何使8位二进制数01111010的后四位翻转 可以将该二进制数与00001111进行异或操作 01111010 0000111101110101 如果某位和0异或 结果是该位的原值 如果某位和1异或 则结果与该位原来的值相反 使用按位异或 操作可以将操作数中的若干位反转 95 2 4运算符和表达式 按位取反 按位取反是一个一元运算符 它的作用是将两个操作数对应的每一位分别进行取反操作 具体运算规则 1 0 0 1 例如 计算 55 00000101 5 11111010 使用位运算实现掩码运算掩码 其实就是一个位模式 表示从一个字中选出一组位 例如 掩码0 xFF表示一个字的低位字节 掩码0 xFFFFFF00 它表示一个字 32位 除了最低字节外的其他高位字节 掩码 0 xFF也可表示一个字除了最低字节外的其他高位字节 2 4运算符和表达式 位运算应用举例例 2 7设主机A的IP地址为IPa 子网掩码设置为MASKa 主机B的IP地址为IPb 子网掩码设置为MASKb 1 当主机A向主机B发送IP包时 如何判断主机B是否与自己在同一子网中 2 当主机A和主机B通信时 两主机又如何确认对方和自己在同一子网中 2 4运算符和表达式 位运算应用举例例2 7解 1 IPa IPb MASKa 0或 IPa MASKa IPb MASKa 2 IPa MASKa IPb MASKb 或 IPa MASKa IPb MASKb 0 2 4运算符和表达式 99 2 4运算符和表达式 左移 按照指定的位数将一个二进制数值向右移动 右移后 移出的低位舍弃 如果是无符号数则高位补0 如果是有符号数则高位补符号位或0 在VC 6 0 VC2005 环境下高位补符号位 100 例子 chara 8 a a 2 cout a int a endl a 2 101 例子 chara 2 a a 1 cout a int a endl a 4 102 2 4运算符和表达式 位运算符在C 中可以将位运算符和赋值运算符结合在一起进行运算 因此C 还提供另外5种运算符 例如 x y相当于x x yx y相当于x x yx y相当于x x yx y相当于x x y 103 2 4运算符和表达式 位运算符这些位运算符的优先级由高到低依次为 1 2 3 4 5 6 104 2 4运算符和表达式 运算符赋值运算符算术运算符关系运算符逻辑运算符位运算符条件运算符逗号运算符 105 2 4运算符和表达式 条件运算符条件运算符语法格式为 表达式1 表达式2 表达式3 运算的结果是 如果表达式1的值为真 则返回表达式2的值 否则返回表达式3的值 例1 x ay x y endl 结果为 1 106 2 4运算符和表达式 运算符赋值运算符算术运算符关系运算符逻辑运算符位运算符条件运算符逗号运算符 107 2 4运算符和表达式 逗号运算符逗号表达式的语法格式为 表达式1 表达式2 表达式n C 顺序计算表达式1 表达式2 表达式n的值 并将最后一次计算的结果作为逗号表达式的结果 例如 inta b c a 1 b 2 c a b 结果 3 108 例子 inta b c d d a 1 b 2 c a b a b c cout d endl 结果 6 109 2 4运算符和表达式 数据类型转换当表达式中出现多种数据类型的混合运算时 往往需要进行类型转换 表达式中的类型转换分成两种 1 隐式类型转换2 强制类型转换 110 2 4运算符和表达式 隐式类型转换各种二元运算符在进行运算时都要求两个操作数的数据类型一致 如果类型不一致 则系统自动对数据进行转换 隐式类型转换 转换的基本原则 将精度较低 范围较小的类型转换成精度较高 范围较大的类型 char short int long float double 隐式类型转换例2 8数据类型的自动转换 includeusingnamespacestd voidmain charch a inti 100 doubled 123 09 cout ch i endl 自动转换为int型cout ch i d endl 自动转换为double型 运行结果 197320 09 提示 在转换过程中不会造成数据精度的丢失 111 2 4运算符和表达式 112 2 4运算符和表达式 隐式类型转换对于同一种精度的无符号数和有符号数 在进行算术运算中 有符号数向着无符号数方向进行隐式类型转换 signed unsigned 例如 inta 100 unsignedinti 99 cout i a endl 1补码为十六进制的FFFFFFFF232 1 4294967295结果为 4294967295 113 2 4运算符和表达式 隐式类型转换逻辑运算符要求参与运算的操作数为bool类型 如果是其他类型 则系统自动将其转换成bool类型 转换规则 0为false 非0为true 赋值运算符要求 左右两边的操作数数据类型相同 如果类型不一致 则自动将右边的操作数类型向着左边的操作数类型转换 例如 inti 3 15 cout i endl 运行结果 3 114 2 4运算符和表达式 强制类型转换强制类型转换通过是类型说明符和括号来实现的显式转换 其语法格式为 数据类型名 表达式或数据类型名 表达式 例如 inti 97 cout char i endl floatf 3 75 cout int f endl 运行结果 a3 C风格的强制类型转换语法格式为 数据类型名 表达式或数据类型名 表达式 例如 inti 97 cout char i endl floatf 3 75 cout int f endl 2 4运算符和表达式 C 的强制类型转换符语法格式为 static cast 表达式 例如 inti 97 cout i f endl 2 4运算符和表达式 强制类型转换几点说明 如果强制由高精度的数据类型转换至低精度的数据类型 数据精度将受到损失 从这个意义上说 强制类型转换是一种不安全的类型转换 基本数据类型之间的强制转换都是允许的 但当遇到不允许的类型转换时 用C风格的类型转换 编译时不会报错 而用static cast 在编译时就会报错 建议 在C 编程时要用static cast进行强制类型转换 2 4运算符和表达式 118 第2章基本数据类型与表达式 119 2 5基本输入输出 在iostream库中包含有一个标准输入流对象cin和一个标准输出流对象cout 分别用来实现从键盘读取数据 以及将数据在屏幕输出 定义文件流对象 实现文件的读写操作 1 cin 从键盘读取数据2 cout 将数据在屏幕输出3 I O流的格式控制4 文件的输入输出 120 1 标准输入流cincin负责从键盘读取数据 使用提取操作符 就可以将键盘键入的数据读入到变量中 语法格式为 cin 变量1 变量2 变量n 例如 inta b charch cin a b ch 2 5基本输入输出 例2 9 计算从键盘输入的若干个整数的和 includeusingnamespacestd voidmain intsum 0 value while cin value 如果能从cin提取数值 sum value 则cin的值为真 执行循环cout sumis sum endl 运行结果 12345 z 键盘输入sumis 15 2020 2 13 121 北京邮电大学信息与通信工程学院 2 5基本输入输出 122 2 标准输出流coutcout负责将变量或常量中的数据输出到屏幕 使用插入操作符 就可以将变量或常量的数据显示在屏幕上 例如 cout Helloworld n cout能够自动识别 后面的数据类型并进行显示 并且可以从左到右一次显示多个变量 2 5基本输入输出 123 例子 includeusingnamespacestd voidmain inta b charch cout a b ch cout a a b b ch ch endl 请按顺序输入2个整数和1字符 1223aa 12b 23ch a 124 3 IO流的格式控制库文件iomanip manipulator 常用控制符 setfill c 设置填充字符setw n 设置域宽为n 2 5基本输入输出 125 设置输出宽度和填充字符setw n 设置域宽 即设置 符号后面的数据占用的屏幕宽度 setfill c 设置填充字符 即 符号后面的数据长度小于域宽时 使用什么字符进行填充 2 5基本输入输出 126 setw n 和setfill c 例1 cout setw 8 a setw 8 b endl 输出结果 例2 cout setfill setw 5 a endl 输出结果 a b a 127 include includeusingnamespacestd voidmain cout setfill setw 2 n setw 3 n setw 4 n setw 5 n setw 6 n setw 7 n setw 8 n 2 5基本输入输出 128 2 5I O流控制 注意1除了setw 控制符外 其他控制符一旦设置 则对其后的所有输入输出产生影响 而setw 控制符只对其后输出的第一个数据有效 对其他数据没有影响 所以如下代码 cout setw 8 a b endl 输出结果 ab 129 2 5I O流控制 注意2setw 的默认为setw 0 意思是按实际输出 如果输出的数值占用的宽度超过setw intn 设置的宽度 则按实际宽度输出 例如 floatf 0 12345 cout setw 3 f endl 0 12345 130 2 5I O流控制 3 I O流的格式控制C 默认输出浮点数的有效位为6位 那么要想控制输出的数据的长度 该如何呢 比如 floatf 3 1234567 如何让显示结果为3 12 C 提供了setprecision intn 可以控制显示浮点数的有效位 131 include includeusingnamespacestd voidmain floatf 17 7 0 cout f endl cout setprecision 0 f endl cout setprecision 1 f endl cout setprecision 2 f endl cout setprecision 3 f endl cout setprecision 6 f endl cout setprecision 8 f endl 2 428572 4284722 42 432 428572 4285715 2 5I O流控制 132 2 5I O流控制 3 I O流的格式控制如何控制小数的位数 setiosflags ios fixed 控制符是用定点方式表示浮点数 将setprecision intn 和setiosflags ios fixed 结合 可以使用setprecision intn 控制小数点右边小数的个数 当设置为定点格式时 若不设置精度则显示6位有效小数 133 include includeusingnamespacestd voidmain floatf 17 7 0 cout setiosflags ios fixed cout setprecision 0 f endl cout setprecision 2 f endl cout setprecision 3 f endl cout setprecision 4 f endl 22 432 4292 4286 2 5I O流控制 2 42857 134 2 5I O流控制 3 I O流的格式控制如何控制指数表示的小数个数 setiosflags ios scientific 控制符使用指数方式显示浮点数 将setprecision intn 和setiosflags ios scientific 结合 可以使用setprecision intn 控制指数表示法的小数位数 用科学记数格式显示实数时 e前面总是带有一位整数的实数 在没有设置精度时 显示6位有效的小数位 135 include includeusingnamespacestd voidmain floatf 17 7 0 cout setiosflags ios scientific cout setprecision 2 f endl cout setprecision 3 f endl cout setprecision 4 f endl 2 43e 0002 429e 0002 4286e 000 2 5I O流控制 2 42857 文件的输入输出文件 磁盘文件 存储在外部存储器上的数据的集合 根据文件中数据不同的组织形式 通常把文件分为 1 文本文件2 二进制文件 2 5基本输入输出 136 文件的输入输出文件的读写操作 当要对磁盘文件进行操作时 使用的是文件流对象 操作步骤 定义文件流对象使用标准库的ifstream类和ofstream类来定义文件流对象 ifstream类提供文件的读操作 ofstream类提供文件的写操作 2 5基本输入输出 137 文件的输入输出操作步骤 指定和文件流对象关联的磁盘文件在定义流对象的同时指定关联文件 或 先定义对象 然后通过调用它的open 成员函数来指定关联文件 在指定文件流对象和磁盘文件关联的同时 还可以指定文件打开模式 2 5基本输入输出 138 文件的输入输出操作步骤 使用插入运算符 进行文件 文本文件 的读 写 文件读 写完毕后 可以调用close 成员函数关闭文件 该操作会解除已建立的文件流对象和磁盘文件之间的关联 2 5基本输入输出 139 运行结果 data 1020304050sumis 150 注意 因为ifstream类和ofstream类是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 急性阑尾炎专业知识讲座
- 广东省专业技术资格评审表范本
- 建筑行业的供应链管理策略大揭秘
- 本科毕业论文撰写细则及规范要求
- 现代煤炭企业管理合理化建议
- 毕业设计工作评价五
- 本科毕业论文模板如何选择切合实际的论文题目与研究方向
- 如何写毕业论文
- 2025~2026学年四川省内江市隆昌市人教版(小升初)数学检测试卷【附解析】
- 经济与行政管理专业论文选题方向及参考举例
- GB/T 15237-2025术语工作及术语科学词汇
- 2025年中考语文作文提分秘籍9:中考记叙文12个高分结构模板抢分攻略
- 医院污水处理站服务外包项目投标方案(技术方案)
- 2025年城市轨道交通服务员技能竞赛考试题库500题(含答案)
- 大学生科技竞赛介绍
- 食品物流成本控制与优化策略-深度研究
- TCAMA 111-2024 养猪舍空气过滤系统配置规范
- 广东省广州市黄埔区2024-2025学年六年级上学期期末英语试题
- 不传播谣言 主题班会课件
- 校家社协同育人专题家长培训
- 《数字化人力资源管理》教学大纲
评论
0/150
提交评论