




已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020 3 26 杭州电子科技大学计算机学院 1 第4章数据类型 运算表达式与基本输入输出 2020 3 26 杭州电子科技大学计算机学院 2 4 1C语言的数据类型4 1 1常量与变量4 1 2整型数据4 1 3实型数据4 1 4字符型数据4 1 5枚举类型4 2运算符与表达式4 2 1算术运算符和表达式4 2 2关系运算符和表达式4 2 3逻辑运算符和表达式4 2 4三目条件运算符与条件表达式4 2 5赋值运算与赋值表达式4 2 6逗号运算符与逗号表达式4 2 7sizeof运算符4 2 8运算符与优先级总结 4 3类型转换4 3 1自动转换4 3 2强制类型转换4 4数据的输入与输出4 4 1printf 函数4 4 2scanf 函数4 4 3getchar 函数与putchar 函数 2020 3 26 杭州电子科技大学计算机学院 3 4 1C语言的数据类型 2020 3 26 杭州电子科技大学计算机学院 4 1 基本数据类型不可以再分解成其他类型 基本数据类型是构造数据类型 或称复杂类型 的元素类型 2 构造数据类型根据已定义的一个或多个数据类型用构造的方法来定义的 也就是说 一个构造类型的值可以分解成若干个元素 每个元素都是一个基本数据类型或者是一个构造类型 在C语言中 构造类型包括以下三种 数组类型 结构体类型和共用体类型 3 指针类型指针是一种特殊的 具有重要作用的数据类型 用来表示变量在内存中的地址 使用指针和其他数据类型配合 可以产生多种有用的数据结构 如链表 二叉树等 4 空类型在函数调用过程中 被调用函数通常应向调用者返回一个函数值 这个返回值具有一定的数据类型 并应在函数定义及函数原型中给以说明 但是 有些函数调用后不需要向调用者返回函数值 这种函数类型定义为空类型 类型说明符为 void C语言也允许定义void类型的指针 4 1C语言的数据类型 2020 3 26 杭州电子科技大学计算机学院 5 4 1 1常量与变量 1 常量在程序运行过程中值不能被改变的量称为常量 常量按数据本身的类型可分为 整型常量 实型常量和字符型常量 在C语言中 常量也可以用符号来命名 称为符号常量 1 常量定义规则 2 const与 define的比较C语言可以用const来定义常量 也可以用 define来定义常量 但是前者比后者有更多的优点 1 const常量有数据类型 而宏常量没有数据类型 编译器可以对前者进行类型安全检查 而对后者只进行字符替换 没有类型安全检查 并且在字符替换可能会产生意料不到的错误 边际效应 2 有些集成化的调试工具可以对const常量进行调试 但是不能对宏常量进行调试 2020 3 26 杭州电子科技大学计算机学院 6 2 变量变量是指在程序运行过程中 其值可以改变的量 1 变量的定义用户按标识符的命名规则并结合程序中的实际意义对变量命名 C语言中规定变量在使用前必须说明 其形式为 存储类型 数据类型 变量名列表 2 变量的赋初值和初始化的区别用赋值语句和初始化的方法虽然都能使变量获得一个值 但前者是在程序运行阶段将值赋给变量的 而后者是在编译时将变量的值存放到系统为变量分配的内存单元中去的 3 变量的使用原则C语言中变量的使用遵循这样的原则 先定义 后使用 4 1 1常量与变量 2020 3 26 杭州电子科技大学计算机学院 7 4 1 2整型数据 2020 3 26 杭州电子科技大学计算机学院 8 在C语言中 整数可用三种不同的数制表示 十进制数 直接给出数字 八进制数 第1位数字前加0 十六进制数 第1位数字前加0 x 长整型数 用后缀 L 或 l 表示 短整型数 用后缀 H 或 h 表示 无符号整数 用后缀 U 或 u 表示 4 1 2整型数据 2020 3 26 杭州电子科技大学计算机学院 9 例4 1编程序测试不同数制的表示和整型数据取值范围 源程序如下 includeintmain void printf d d d n 34 034 0X34 34的不同计数制的输出printf result hd n 32765 期望用 hd格式输出32765printf result hd n 32769 能否用 hd格式输出32769 printf result d n 4294967295L 跟L后能否输出期望值4294967295 printf result ld n 2147483647L ld格式能否输出期望值2147483647return0 4 1 2整型数据 2020 3 26 杭州电子科技大学计算机学院 10 4 1 3实型数据 小数形式表示的浮点数由整数部分 小数点及小数部分组成 指数形式表示浮点数的方法也称为科学计数法 其表示形式如下 2020 3 26 杭州电子科技大学计算机学院 11 例4 2实型数据的舍入误差示例 源程序如下 includeintmain void floata b c a 55555 55555 b 123456 789e5 printf a f b f b 40 f n a b b 40 return0 其中 a b应是原值输出 但结果已发生误差 从b 40的结果看虽然增加了40 但仍比b的初值小 结果没有意义 这是因为单精度浮点型的有效位数只有七位 若将程序中的float改为double类型 includeintmain void doublea b c a 55555 55555 b 123456 789e5 printf a lf b lf b 40 lf n a b b 40 return0 4 1 3实型数据 2020 3 26 杭州电子科技大学计算机学院 12 4 1 4字符型数据 1 字符常量字符常量是用单引号括起来的一个字符 字符可以是ASC 字符集中的任意字符 使用字符常量应注意以下几点 1 字符常量只能放在单引号中 不能用双引号或其他括号 2 字符常量只能是单个字符用单引号括起来 不能是字符串 例如 hello 是非法的 3 单引号中的大写字母和小写字母代表不同的字符常量 例如 a 和 A 是不同的字符常量 4 字符常量具有数值 其值是对应的ASCII值 即0 255之间的整数 例如 A 的值是65 a 为97 2 为50 因此 字符型常量与整型常数可以混合使用 在不至于引起混淆的情况下 0 255之间的整数可以用字符常量表示 例如 把95写成 a 2 反之亦然 5 输出字符常量时的输出格式控制符用 c 2020 3 26 杭州电子科技大学计算机学院 13 例4 3字符型常量与整型常数混合使用实例 要求编程输出 1 字符 及其ASCII值 2 求 h 2的值并输出其ASCII字符 3 输出整数67的ASCII字符 源程序如下 includeintmain void printf c d n 期望输出 的字符和ASCII码值printf c d n h 2 h 2 字符常量和整型常数进行混合运算并输出printf d c n 67 67 期望输出整型常数67的ASCII码值和字符return0 4 1 4字符型数据 2020 3 26 杭州电子科技大学计算机学院 14 4 1 4字符型数据 2020 3 26 杭州电子科技大学计算机学院 15 例4 4用转义字符输出可打印字符和不可打印字符 includeintmain void printf x4F x4B x21 n 等价printf OK n printf hello n 用 来输出符号 printf x15 xAB n return0 使用转义字符时需要注意以下问题 1 转义字符中只能使用小写字母 每个转义字符只能看作一个字符 2 v垂直制表和 f换页符对屏幕没有任何影响 但会影响打印机执行响应操作 3 在C程序中 使用不可打印字符时 通常用转义字符表示 4 1 4字符型数据 2020 3 26 杭州电子科技大学计算机学院 16 3 字符串常量字符串常量是由一对双引号括起来的字符序列 world f007 等都是合法的字符串常量 字符串常量和字符常量的主要区别包括以下几个方面 1 字符常量放在单引号中 字符串常量则放在双引号中 2 字符常量是单个字符 而字符串常量则可以包含零个或多个字符 3 字符常量占用一个字节的内存空间 在存储器中 字符串常量以字符的ASCII码形式存储 而不是字符本身 编译器会自动地在每一个字符串末尾添加串结束标志符 0 其ASCII代码为0 4 字符串常量可以为空 即 也是一个合法的字符串常量 空字符串和空白字符串也是两个不同的概念 前者只有一个 0 结束标志 而后者在结束标志 0 前 还有一个空白字符 其ASCII码为32 5 与字符常量不同 字符串常量没有独立数值的概念 不能与整型常量互换使用 6 对字符常量的操作按char类型进行 对字符串常量的操作是按字符数组的规定进行 4 1 4字符型数据 2020 3 26 杭州电子科技大学计算机学院 17 4 字符变量字符变量的定义 例如 charch1 ch2 ch3 定义charch1 ch2 ch3为字符型变量字符变量的适用原则 1 一个字符变量只能存放一个字符常量或整数0 255 不能存放字符串常量 2 字符变量在存储单元中存放的是字符的ASC 码 而不是字符本身 3 一个字符数据既可以以字符形式输出 也可以以整数形式输出 取决于格式控制符 c 和 d 4 与字符常量一样 字符变量可以和整型数据互换使用 并可进行算术运算 但通常只作 运算 且其结果应是界于0 255之间的整数 作其他运算或值超出规定范围都是没有意义的 一个int类型的数据占四个字节 32t char类型只占一个字节 当整型量按字符型量处理时 只有低8bit参与处理 5 在C语言中 没有字符串变量 如果要将一个字符串保存起来以便于引用 必须借助字符数组 4 1 4字符型数据 2020 3 26 杭州电子科技大学计算机学院 18 4 1 5枚举类型 枚举 就是将变量可能的值一一列举出来 而变量的值只能取其中之一 1 枚举类型的定义enum枚举类型名 取值表 例如 enumweekdays sun mon tue wed thu fri sat 定义了一个枚举类型weekdays 列出的7个数据 称为 枚举元素 或 枚举常量 是该类型变量的取值范围 2 枚举变量的定义 1 间接定义例如 enumweekdays sun mon tue wed thu fri sat enumweekdaysweekday 2 直接定义例如 enum weekdays sun mon tue wed thu fri sat weekday 此时可以缺省类型名 2020 3 26 杭州电子科技大学计算机学院 19 4 1 5枚举类型 3 说明 1 枚举型仅适用于取值有限的数据 2 取值表中的值称为枚举元素 其含义由程序解释 3 枚举元素是常量 不是变量 作为常量是有值的 按定义时的顺序号 从0开始取值 4 枚举元素的值也是可以人为改变的 在定义时由程序指 5 在定义枚举类型时 可以指定枚举常量的值 但在程序中不能再赋值给枚举常量 2020 3 26 杭州电子科技大学计算机学院 20 4 2运算符与表达式 1 算术运算符 2 关系运算符 5 赋值运算符 1 简单赋值运算符 2 复合算术赋值运算符 3 复合位运算赋值运算符 6 条件运算符 三目运算符 7 逗号运算符 8 指针运算符 9 求字节数运算符 sizeof 10 强制类型转换 类型 11 成员运算符 12 下标运算符 13 括号运算符 表达式是用运算符和括号将运算对象 或称操作数 连接起来的符合C语法规则的式子 运算对象可以是常量 变量 函数等 不同的运算符具有不同的优先级和结合性 优先级是指表达式中各类运算的先后次序 结合性是指当一个运算对象两侧的运算符的优先级相同时进行运算的结合方向 2020 3 26 杭州电子科技大学计算机学院 21 4 2 1算术运算符和表达式 算术表达式是用算术运算符和括号将运算对象连接起来的式子 算术运算符有以下7种 加 减 乘 除 取余 自增 自减 其中 加 减 乘 除和取余 模 运算符是双目运算符 自增和自减运算符是单目运算符 双目算术运算符的优先级是先乘除 后取余 后加减 括号优先 结合方向是从左至右运算对象先与左面的运算符结合 单目算术运算符的优先级高于双目算术运算符 结合方向是从右至左 即运算对象先与右面的运算符结合 自增 和自减 运算符可以作为变量的前缀 也可以作为变量的后缀 作前缀时进行前置运算 即 先增值后引用 作后缀时进行后置运算 即 先引用后增值 2020 3 26 杭州电子科技大学计算机学院 22 算术运算符和表达式 includeintmain void inti 4 printf i d n i printf i d n i return0 运行结果为 i 5i 5 includeintmain void inti 4 printf i d n i printf i d n i return0 运行结果为 i 4i 5 2020 3 26 杭州电子科技大学计算机学院 23 4 2 2关系运算符和表达式 关系表达式是用关系运算符和括号将运算对象连接起来的式子 关系运算符是双目运算符 共有以下六种 大于 大于或等于 等于 不等于 其中 前四种运算符的优先级相同 后两种运算符 的优先级相同 且前四种的优先级高于后两种的优先级 关系运算符的优先级低于算术运算符 关系表达式的值按比较结果分为逻辑真和逻辑假 若关系表达式成立 则该表达式的值为 真 用整数 1 表示 若关系表达式不成立 则该表达式的值为 假 用整数 0 表示 注意 1 进行相等比较时一定要用双等号 因为C语言中的单个等号是赋值运算符 2 不可将浮点变量用 或 与任何数字比较 2020 3 26 杭州电子科技大学计算机学院 24 4 2 3逻辑运算符和表达式 逻辑表达式是用逻辑运算符和括号将运算对象连接起来的式子 逻辑运算符包括以下三个 逻辑非 单目运算 逻辑与 双目运算 逻辑或 双目运算 2020 3 26 杭州电子科技大学计算机学院 25 逻辑运算符和表达式 应用逻辑表达式时应注意以下几点 1 逻辑运算符两侧表达式的值是逻辑值而不是算术值 由于C语言用 0 和 非0 来判断一个运算量的真假 所以 逻辑运算的对象可以是任何类型的数据 2 在一个 表达式中 若 的一端为零值 则不必再计算另一端 该表达式的值肯定为零 将其记为 0 a 0在一个 表达式中 若 的一端为l值 则不必再计算另一端 该表达式的值肯定为1值 将其记为 1 a 1 2020 3 26 杭州电子科技大学计算机学院 26 逻辑运算符和表达式 假设a 1 b 2 c 3 d 4 m 1 n 1 执行表达式 m a b n c d 后m和n的值各为多少 分析 a b的值为0 m a b 值为0 表达式 m a b n c d 的值为0 运算就此结束 即不再进行 n c d 的运算 因此结果是 m为0 n为1 假设a 5 b 10 c 15 d 20 求下列逻辑表达式的结果 ab 1 cb 1 cb 1 cb 1 c10 1 c d 0 0 1 c d 0 1 c d 0 1 15 20 0 1 1 0 1 1 2020 3 26 杭州电子科技大学计算机学院 27 4 2 4三目条件运算符与条件表达式 条件表达式是由条件运算符 和 把多个表达式连接起来的式子 其形式为 表达式1 表达式2 表达式3条件表达式的求解过程是 先判断表达式1的值是否为真 非0 若为真 则求解表达式2 表达式2的值就是整个条件表达式的值 若为假 0 则求解表达式3 条件表达式3的值就是整个条件表达式的值 includeintmain void floata b printf Pleaseinput2reals scanf f f 例4 5计算a b 的值 源程序如下 2020 3 26 杭州电子科技大学计算机学院 28 三目条件运算符与条件表达式 例4 6判别某一年是否为闰年 闰年的条件是符合下面的条件 1 能被4整除 但不能被100整除 2 能被4整除 又能被400整除 源程序如下 includeintmain void intyear 2000 printf d年 s n year year 4 0 2020 3 26 杭州电子科技大学计算机学院 29 4 2 5赋值运算与赋值表达式 由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式 在使用赋值表达式时 要注意以下几个问题 1 赋值运算符 是右结合性运算符 即其运算次序应从右至左执行 2 由于赋值运算产生一个新的表达式 根据赋值运算的定义 可以赋给另一个变量 从而产生连续赋值的效果 3 赋值表达式不是赋值语句 但按照 语言规定 任何表达式在其未尾加上分号就构成为语句 4 如果赋值运算符两边的数据类型不相同 系统将会自动进行类型转换 即把赋值号右边的类型换成左边的类型 例如 设a为整型变量 则 a 3 1415 变量a的值为3 而不是3 1415 5 在赋值运算符 之前加上某些算术运算符或位运算符 可以组合成复合算术或复合位运算赋值符 这些运算符共有10个 包括 它们都是双目运算符 2020 3 26 杭州电子科技大学计算机学院 30 4 2 6逗号运算符与逗号表达式 C允许用逗号连接表达式 用逗号运算符将若干个表达式连接起来的式子称为逗号表达式 其形式如下 表达式1 表达式2 表达式3 表达式n 逗号作为运算符使用时是 个双目运算符 其运算优先级最低 计算逗号表达式时 从左到有右依次计算各表达式的值 并把最右边表达式的值作为逗号表达式的值 例如 逗号表达式 a 3 5 a 4 a 15的运算次序为 将3 5的结果15赋给变量a 再计算括号内第二个表达式a 4的值 结果为60 该整数60是运算至此作为括号所构成的表达式的值 此时a的值仍然为15 因此最后计算a 15时 结果为30 即整个表达式的值为30 因此整个逗号表达式的值为30 2020 3 26 杭州电子科技大学计算机学院 31 4 2 7sizeof运算符 sizeof运算符是一个单目运算符 返回常量 变量或类型的字节长度 其使用形式为 sizeof 例4 7用sizeof运算符求各种数据类型的字节数 源程序如下 includeintmain void floatf doubled 显示如下结果 printf int d n sizeof shortint int 2 printf unsignedint d n sizeof int int 4 printf longint d n sizeof longint longint 4 printf char d n sizeof char char 1 printf float d n sizeof float float 4 printf double d n sizeof double double 8 printf f d n sizeof f f 4 printf d d n sizeof d i 8 printf a d b d n sizeof 3 sizeof 3 14 a 4 b 8 return0 2020 3 26 杭州电子科技大学计算机学院 32 4 2 8运算符与优先级小结 2020 3 26 杭州电子科技大学计算机学院 33 4 3类型转换 C语言允许参加运算的数据值的类型相互转换 转换的方法有两种 自动转换 隐式转换 和强制转换 显式转换 2020 3 26 杭州电子科技大学计算机学院 34 4 3 1自动转换 1 赋值转换转换规则如下 1 实型赋予整型 舍去小数部分 2 整型赋予实型 数值不变 但将以浮点形式存放 即增加小数部分 小数部分的值为0 3 字符型赋予整型 由于字符型为一个字节 而整型为两个字节 因此将字符的ASCII码值放到整型变量的低八位中 高八位为0 4 整型赋予字符型 只把低八位赋予字符型变量 5 double型赋予float型 丢失的部分按四舍五入向前进位 一个long型或double型数据给一个int型或float型变量赋值时 可能会引起数值溢出 2020 3 26 杭州电子科技大学计算机学院 35 4 3 1自动转换 2 运算转换当不同类型的常量和变量在表达式中进行混合运算时 它们将在自动转换成同一类型后进行运算 转换由编译系统自动完成 自动转换遵循以下规则 2020 3 26 杭州电子科技大学计算机学院 36 4 3 2强制类型转换 强制类型转换是由程序员通过类型说明符实现的 通过强制类型转换可以将一种类型的变量强制转换为另一种类型 其形式为 类型说明 表达式 1 类型说明符和表达式都必须加括号 但单个变量可以不加括号 2 无论是强制转换还是自动转换都不改变原数据说明该变量的类型 即对一个变量进行强制转换后得到一个新类型的数据 但原来变量的类型不变 2020 3 26 杭州电子科技大学计算机学院 37 4 4数据的输入与输出 4 4 1printf 函数printf 函数的作用 向计算机系统默认的输出设备 一般指终端或显示器 输出一个或多个任意类型的数据 其基本格式为 printf 格式控制参数 输出项1 输出项2 其中格式控制参数以字符串的形式描述 也称为 格式控制字符串 1 普通字符 包括可打印字符和转义字符 可打印字符主要是一些说明字符 这些字符按原样显示在屏幕上 如果有汉字系统支持 也可以输出汉字 转义字符是不可打印的字符 是一些控制字符 控制产生特殊的输出效果 2020 3 26 杭州电子科技大学计算机学院 38 printf 函数 2 格式说明项 由 与格式字符组成 其作用是将数据转换为指定的格式输出 按不同类型的数据有以下不同的格式字符 d格式符 用于输出十进制整数 如 d ld 按整型数据的实际长度输出 md mld m为指定的输出字段的宽度 如数据的位数小于m 则左端补空 若数据位数大于m 则按实际长度输出 o格式符 用于输出八进制整数 x格式符 用于输出十六进制整数 u格式符 用于输出unsigned型数据 c格式符 用于输出一个字符 s格式符 用于输出一个字符串 f格式符 用于以小数形式输出实数 包括单 双精度 如 f lf 不指定字段宽度 由系统自动指定 以小数形式输出 其中整数部分全部输出 小数部分保留六位 但其中单精度数有7位有效数 双精度数有16位有效数 小数部分并非全部都为有效数字 2020 3 26 杭州电子科技大学计算机学院 39 printf 函数 m nf m nlf 指定输出的数据共占m位 其中包括n位小数 如数据的位数小于m 则左端补空 若数据位数大于m 按实际长度输出 小数位数被截断时按四舍五入输出 e格式符 用于以指数形式输出实数 包括单 双精度 如 e 不指定字段宽度与数字部分小数位数 由系统自动指定6位小数 且数值部分的小数点前有一位非零数字 而指数部分占5位 其中e占一位 指数符号占一位 指数占三位 m ne 意义同f格式 g格式符 用于输出实数 由系统按输出宽度自动选择f格式或e格式 在 与格式符间加 表示数据以左对齐输出 加 0 表示数据宽度小于指定宽度时在数据前的空位以 0 填充 2020 3 26 杭州电子科技大学计算机学院 40 4 4 2scanf 函数 格式化输入函数scanf 的功能是从键盘上输入数据 该输入数据按指定的输入格式被赋给相
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年福州东盟海产品交易所有限公司总经理职位职业经理人市场化选聘考前自测高频考点模拟试题及参考答案详解一套
- 2025福建三明大田县公开招聘紧缺急需专业教师7人考前自测高频考点模拟试题及1套完整答案详解
- 小学安全培训收费标准表课件
- 2025年临沂兰陵县教育系统部分事业单位公开招聘教师(5人)考前自测高频考点模拟试题有答案详解
- 2025江苏连云港市海州湾发展集团有限公司及子公司招聘20人考前自测高频考点模拟试题及完整答案详解
- 2025广东广州市中山大学孙逸仙纪念医院超声科医教研岗位招聘模拟试卷及答案详解(历年真题)
- 安全培训教学课件制作
- 2025江西吉安市直三家公立医院编外招聘33人考前自测高频考点模拟试题附答案详解(黄金题型)
- 2025福建省高速公路集团有限公司招聘43人考前自测高频考点模拟试题及参考答案详解
- 2025年合肥庐阳科技创新集团有限公司招聘6人模拟试卷及参考答案详解
- 电信明厨亮灶合同范本
- 临床医师定期考核必刷题库及答案(一)
- 职业本科《大学英语》课程标准
- 2024年承包建设工程合同
- 英语语法课程教学大纲
- 《陆上风电场工程概算定额》NBT 31010-2019
- 水平四初中羽毛球大单元教学教案(18课时)
- 2024年河北石家庄市高速公路集团限公司面向社会公开招聘收费人员150名公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版
- 酒店住宿抵款协议书
- 【基于WBS分解图的工程项目施工进度管理与优化案例探析22000字(论文)】
- 配电箱安全专项教育培训课件
评论
0/150
提交评论