内容简介 本书从结构化程序设计技术出发, 以 C 程序设计语言为载体, 以 Windows 下的 Visual C 为程序调试和运行平台, 通过对典型实例的算法及相应 C 语言代码的描述, 介绍了在程序设计过程中如何对问题进行分析 如何组织数据和如何描述解决问题, 揭示了在计算机应用过

Size: px
Start display at page:

Download "内容简介 本书从结构化程序设计技术出发, 以 C 程序设计语言为载体, 以 Windows 下的 Visual C 为程序调试和运行平台, 通过对典型实例的算法及相应 C 语言代码的描述, 介绍了在程序设计过程中如何对问题进行分析 如何组织数据和如何描述解决问题, 揭示了在计算机应用过"

Transcription

1 普通高等教育 十二五 规划教材 计算机系列规划教材 计算机程序设计基础 周启生姬涛 主编 刘菲田红梅副主编 科学出版社职教技术出版中心 北京

2 内容简介 本书从结构化程序设计技术出发, 以 C 程序设计语言为载体, 以 Windows 下的 Visual C 为程序调试和运行平台, 通过对典型实例的算法及相应 C 语言代码的描述, 介绍了在程序设计过程中如何对问题进行分析 如何组织数据和如何描述解决问题, 揭示了在计算机应用过程中将方法和编码相联系的具体程序设计过程, 进而向读者介绍结构化程序设计的基本概念 基本技术和方法 本书还对面向对象的 C++ 编程技术进行了介绍 本书体系合理, 概念清晰, 讲解详尽, 适合作为高等院校理工类各专业的程序设计教材, 也可供程序开发人员学习参考 与本书配套的还有一本 程序设计基础实验指导与习题 图书在版编目 (CIP) 数据计算机程序设计基础 / 周启生, 姬涛主编. 北京 : 科学出版社,2013 ( 普通高等教育 十二五 规划教材 计算机系列规划教材 ) ISBN Ⅰ.1 计 Ⅱ.1 周 2 姬 Ⅲ.1 程序设计 高等学校 教材 Ⅳ.TP311.1 中国版本图书馆 CIP 数据核字 (2013) 第 号 责任编辑 : 戴薇苑文环 / 责任校对 : 刘玉靖责任印制 : 吕春珉 / 封面设计 : 东方人华平面设计部 新 北京东黄城根北街 16 号邮政编码 : 出版 厂印刷 科学出版社发行各地新华书店经销 * 2013 年 8 月第一版开本 : / 年 8 月第一次印刷印张 :24 3/4 字数 : 定价 :45.00 元 ( 如有印装质量问题, 我社负责调换 < 新雷 >) 销售部电话 编辑部电话 (VF02) 版权所有, 侵权必究 举报电话 : ; ;

3 前 言 计算机程序设计基础 是大学计算机基础教学系列中的核心课程, 主要介绍程序设计 语言的基本知识和程序设计的方法与技术 其内容以程序设计语言的语法知识和程序设计的基本方法为主, 同时包括程序设计方法学 数据结构与算法基础等方面的初步内容 本书旨在, 使学生掌握计算机程序设计的基本思想和方法, 初步具备在各领域应用计算机的能力, 并为后续课程的学习创造条件 本套教材分为 计算机程序设计基础 和 程序设计基础实验指导与习题, 力求详细介绍 C 语言结构化程序设计, 并涵盖了计算机等级考试的要求 计算机程序设计基础 教材是以程序设计的基础理论为主, 重点介绍程序设计的基本理论和方法及 C 语言的语法知识 程序设计基础实验指导与习题 教材与 计算机程序设计基础 配套, 包括实验上机指导 实验思考题 练习题 二级考试等内容 本书是以计算机基础课程教学指导分委员会制定的 计算机程序设计基础课程教学基本要求 为依据, 结合近年来 C 语言程序设计基础的教学实践经验编写而成 其内容涵盖了 C 语言结构化程序设计的基本理论 基本概念 方法和规范 以培养学生掌握程序设计的基本理论和方法及计算机应用编程能力为目标 本书以一个小型的学生成绩管理系统为主线, 将 C 语言程序设计的各个知识点分配到各个章节中详细介绍, 并逐步实现该系统的全部功能 通过该案例, 使学生对 C 语言程序设计的过程和所涉及知识有一个清晰的理解, 力求理论与实践相结合, 从而培养学生分析问题和解决问题的能力 本书共分 8 章, 内容包括 : 第 1 章 程序设计概述, 介绍程序 程序设计 算法等基本概念, 程序设计的过程和程序设计的方法, 以及 C 语言字符集 词法符号和 C 语言程序的基本结构 第 2 章 数据类型 运算符与表达式, 介绍 C 语言的数据类型 各种类型的常量 变量的声明和使用方法, 各种类型运算符及表达式求值的运算规则 第 3 章 程序控制结构, 介绍结构化程序设计的基本概念和结构化程序设计的方法, C 语言的顺序控制语言 选择控制语句 循环控制语句及应用问题的求解方法 第 4 章 函数与预处理, 介绍用函数实现模块化程序设计的思想, 函数定义 函数声明 函数调用的基本概念和方法, 函数的返回值及其类型, 函数参数传递机制, 递归函数, 变量的作用域和存储类型及预处理等 第 5 章 数组, 介绍数组的概念, 一维数组的定义 初始化及应用, 二维数组的定义 初始化及应用, 字符串与字符数组的概念及应用 第 6 章 指针, 介绍指针的基本概念, 指针变量的定义及其相关运算, 指针与函数, 指针与数组, 动态内存分配 第 7 章 结构体与共用体, 介绍结构体 共用体等自定义数据类型的机制, 结构体类型与结构体变量, 结构体数组, 结构体与函数, 链表的概念和常用操作, 共用体的概念及应用 科学出版社职教技术出版中心

4 ii 计算机程序设计基础 第 8 章 文件, 介绍文件的基本概念及对文件的常用操作 第 9 章 面向对象程序设计, 介绍面向对象程序设计的基本概念及类的基本操作 附录包括 ASCII 码表 C 语言运算符 常用 C 标准库函数 本书第 1 章 第 2 章由田红梅编写, 第 3 章由郭炜编写, 第 4 章由刘菲编写, 第 5 章由姬涛编写, 第 6 章由江红编写, 第 7 章 第 8 章由周启生编写, 第 9 章由陈青编写 全书由周启生和姬涛统稿与审定 特别感谢刘宝忠教授对本书的指导与审阅 在编写本书的过程中, 还得到了王海晖教授 庄鹏老师的大力支持, 在此也表示衷心感谢! 本书的编者都是长期从事程序设计教学的教师, 本书凝集了各位教师多年的教学实践经验 由于计算机科学技术发展迅速, 程序设计的教学内容 方法和手段日新月异, 加之编者水平有限, 书中不足之处在所难免, 敬请读者批评指正, 以便今后进一步完善 编者

5 目 录 第 1 章程序设计概述 程序与程序设计语言 程序与程序设计 程序设计语言 算法 算法的概念 算法的描述方式 简单算法举例 程序设计过程 解决问题的基本步骤 C 语言程序的设计过程 C 语言简介 C 语言的字符集与词法符号 C 语言程序的基本结构 C 语言程序的书写规则 程序设计方法 开发环境简介 启动开发环境 创建项目和文件 编辑程序 编译 运行 关闭 16 科学出版社职教技术出版中心 案例应用 17 本章小结 18 习题 18 第 2 章数据类型 运算符与表达式 数据类型 基本数据类型 构造数据类型 其他数据类型 常量与变量 常量 23

6 iv 计算机程序设计基础 变量 运算符与表达式 运算符 表达式 类型转换 标准输入 / 输出函数 printf( ) 函数 scanf( ) 函数 其他输入 / 输出函数 数学函数 随机数发生器函数 案例应用 58 本章小结 59 习题 60 第 3 章程序控制结构 程序的基本结构 语句 声明语句 表达式语句 复合语句 控制语句 空语句 顺序结构 选择结构 if 语句 switch 语句 程序应用举例 循环结构 while 语句 do-while 语句 for 语句 几种循环的比较 循环的嵌套 程序举例 转向语句 break 语句 continue 语句 97

7 目录 v 3.7 结构化程序设计的方法 案例应用 99 本章小结 101 习题 101 第 4 章函数与预处理 函数概述 函数的概念 函数分类 函数的定义与声明 函数的定义 函数声明与函数原型 函数调用 函数返回类型与返回值 函数的参数 形式参数与实际参数 值传递与地址传递 递归 递归的概念 程序举例 变量作用域 内部变量 外部变量 作用域规则 变量存储类别 变量生存期 auto 变量 static 变量 130 科学出版社职教技术出版中心 register 变量 extern 变量 内部函数与外部函数 内部函数 外部函数 预处理 文件包含 宏定义 条件编译 案例应用 147 本章小结 150

8 vi 计算机程序设计基础 习题 151 第 5 章数组 数组概述 一维数组 一维数组声明与初始化 一维数组元素的使用 一维数组作为函数参数 一维数组应用举例 多维数组 二维数组 更多维数的数组 字符数组 字符串与字符数组 字符数组的声明与初始化 字符数组的使用 字符串输出和输入 字符数组应用举例 字符串处理函数 字符串数组 案例应用 200 本章小结 201 习题 201 第 6 章指针 指针的概念 地址与指针 指针的定义与初始化 指针的运算 指针与函数 指针作为函数的参数 函数返回指针 指向函数的指针 指针与数组 指针对数组元素的访问 字符指针 指向数组的指针 指针数组 指向指针的指针 245

9 目录 vii 6.4 动态内存分配 动态内存分配的含义 动态内存分配的步骤 常用的动态内存管理函数 249 本章小结 253 习题 254 第 7 章结构体与共用体 结构体类型与结构体变量 结构体类型的定义 结构体变量的定义与初始化 结构体变量的引用 指向结构体变量的指针 关键字 typedef 的用法 结构体数组 结构体数组的定义 结构体数组的初始化 结构体数组的应用 结构体与函数 动态数据结构 链表的定义 链表的特点及操作原理 动态链表的建立 链表的删除操作 链表的插入操作 共用体 共用体类型的定义和引用 共用体类型的初始化 288 科学出版社职教技术出版中心 共用体类型举例 案例应用 291 本章小结 293 习题 293 第 8 章文件 文件的基本概念 文件概述 文件的类别 文件的操作流程 文件的定义 298

10 viii 计算机程序设计基础 8.2 常用文件操作的标准函数 文件的打开与关闭 文本文件的读写 二进制文件的读写 文件的随机访问与定位 文件使用举例 案例应用 312 本章小结 323 习题 323 第 9 章面向对象程序设计 面向对象的基本概念 结构化程序设计 面向对象程序设计 可视化编程技术 面向对象程序设计的基本特点 类和对象 类的定义 类成员的访问控制 类的成员函数 对象 构造函数 析构函数和复制构造函数 构造函数 析构函数 复制构造函数 静态成员 静态数据成员 静态成员函数 友元 继承与派生 类的继承与派生 派生类的构造和析构函数 同名覆盖原则与二义性问题 赋值兼容规则 多态性 多态的类型 静态联编与动态联编 虚函数 纯虚函数 373

11 目录 ix 抽象类 373 本章小结 375 习题 375 附录 A ASCII 码表 377 附录 B 运算符 379 附录 C 常用 C 标准库函数 380 参考文献 384 科学出版社职教技术出版中心

12 第 1 章程序设计概述 计算机所能完成的工作及怎样完成工作都是由人们事先编好的程序来控制的 程序设计是人们为了通过计算机实现某一功能或解决问题, 而使用某种程序设计语言编写程序并实现结果的过程 设计计算机程序常常借助于程序设计工具, 如 Visual Studio 2010 集成开发环境 本章主要介绍程序和程序设计的概念 程序设计语言的发展历程 算法的基本概念 程序设计的过程 C 语言程序的组成和基本结构, 简要介绍了程序设计基本方法 Visual Studio 2010 集成开发环境及使用结构化程序设计方法设计一个小型学生成绩管理系统的案例 通过本章的学习, 读者应掌握程序设计的基本概念, 能用 C 语言设计一个简单的程序, 熟悉 Visual Studio 2010 开发工具的使用 1.1 程序与程序设计语言 程序与程序设计程序通常指完成某项事务的执行过程, 是一系列有序的工作步骤, 它有方式 步骤等含义 在日常生活中, 往往强调按程序办事, 如 业务流程 司法程序 等 这些事务中, 每个步骤的顺序一般是不能颠倒的, 否则将不能顺利地完成这项事务 例如, 到自动取款机上取款, 可以描述为以下步骤 : 1) 插入银行卡 2) 输入密码 3) 选择服务种类 4) 输入取款金额 5) 取钞 6) 退卡 这就是一个简单的程序, 按顺序执行这些步骤, 就可以完成取款 计算机程序是指为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合 计算机本身是不会做任何工作的, 它是按照程序中的有序指令来完成相应任务的 只有用事先编好的程序去控制它, 才能让它为人们服务 人们为了完成某项具体的任务而编写一系列指令, 并将这一系列指令交给计算机去执行, 这个过程称为程序设计 现在, 计算机对人们的生活产生了深刻的影响, 它能完成各种复杂的任务 在 Windows 环境下, 只要用鼠标单击某一菜单项, 就能使计算机执行某一项操作 ( 如复制 粘贴 删除 ) 有些人感到计算机真神秘, 甚至不可思议 其实, 计算机执行每一个操作都是按照人们事先指定的内容和步骤进行的 人们事先规定出计算机完成某项工作的操作步骤, 每个步骤的具体内容由计算机能够理解的指令或语句来描述, 这些指令或语句将告诉计算机 做什么 和 怎样做

13 2 计算机程序设计基础 在用计算机处理问题前要考虑很多的细节, 写程序时把每个细节的执行过程要描述清 楚 例如, 用计算机处理上述取款步骤时, 若输入密码不正确, 计算机该如何执行, 若输入的取款金额多于存款余额, 又如何处理等 所有问题在编写程序前都要考虑清楚, 明确告诉计算机 怎样做 计算机的功能固然强大, 但更重要的是程序设计人员开发出的各种简单或复杂的程序 正是这些程序, 使计算机更好地为人们服务 程序设计语言 由前面的叙述可知, 程序是由指令序列组成的, 用来告诉计算机如何完成一个具体的任务 由于现在的计算机还不能理解人类的自然语言, 所以还不能用自然语言编写计算机程序 人们要使用计算机, 让计算机按人们的意志进行工作, 就必须让计算机能理解并执行人们给它的指令 这就需要找到一种人和计算机都能识别的语言 程序设计语言 程序设计语言是用计算机能够理解的语言来表达所设计程序的含义, 是人与计算机之间进行交流和通信的工具 计算机能识别和直接运行的指令序列是二进制代码形式, 这种指令令人感到晦涩难懂 为了避免直接面对机器指令, 人们设计了众多的程序设计语言 程序设计语言可分为低级语言和高级语言, 低级语言包括机器语言和汇编语言 1. 机器语言 机器语言是以二进制代码的形式来表示基本指令的集合, 每条指令均为 0 和 1 组成的二进制代码串 用机器语言编写的程序, 计算机能直接识别和执行, 运算速度快, 占用的存储空间小 但机器语言存在明显的局限 : 1) 程序不容易读写 指令中的二进制代码难以记忆, 容易出错, 为程序的编写 修改和调试带来了难度 2) 机器语言程序对计算机硬件的依赖性很强, 不容易移植 3) 指令功能简单, 没有按照数据类型分类, 与数值计算中的运算符不能对应 2. 汇编语言 针对机器语言中二进制指令不方便识别和记忆的缺点, 汇编语言用指令名称的缩写作为助记符代替机器的操作指令, 用标号和符号来表示地址 常量和变量 因为计算机只能识别机器指令, 所以需要借助汇编语言翻译程序, 将符号化的汇编语言转换成机器指令, 才能被计算机执行 汇编语言便于识别和记忆, 执行效率也比较高, 但没有解决机器语言的后两个局限性, 仍然不能让人满意 于是, 出现了高级程序设计语言 3. 高级语言 科学出版社职教技术出版中心 高级语言中的语句一般采用类似人类自然语言中的自然词汇, 使得程序更容易阅读和理解 高级语言提供了丰富的数据类型和运算符, 语句功能强大, 一条语句往往相当于多条指令 高级语言还独立于具体的硬件系统, 使得程序的通用性 可移植性和编写程序的效率大大提高

14 第 1 章程序设计概述 3 针对各种应用领域, 人们设计了很多种高级语言 其中 C 语言既具有其他高级语言的优点, 又具有低级语言的许多特点 它功能丰富, 移植性强, 编译质量高, 成为应用广泛的高级语言之一 同样, 计算机也不能直接识别用高级语言编写的程序, 也需要把高级语言程序转换成机器语言指令, 这种转换由编译器实现 不同的高级语言需要不同的编译程序, 采用的编译方法也可能不同, 主要有两种方式 1) 编译方式 : 首先针对具体高级语言 ( 如 C 语言 ) 开发出一个编译软件, 将该种语言程序翻译为所用计算机机器语言的等价程序, 即目标程序 ( 二进制代码的形式 ) 最后由计算机执行这个机器语言程序 2) 解释方式 : 首先针对具体高级语言 ( 如 BASIC 语言 ) 开发一个解释软件, 该软件读入高级语言程序, 并能一步步地按照程序要求工作, 完成程序所描述的计算 这种解释软件边解释语句边执行, 不生成目标程序 1.2 算法 算法的概念算法就是为解决一个具体问题而采取的方法和有限的步骤 计算机算法即计算机能执行的算法 计算机算法大致可分为如下两大类 1) 数值运算算法 : 解决求数值的问题, 如判断闰年 求最大公约数 求阶乘, 求数列之和等 2) 非数值运算算法 : 解决需要用分析推理 逻辑推理才能解决的问题, 如博弈 查找和分类等 算法描述了解决问题的方法和途径, 采用高效的算法才可能设计出优质的程序 算法的描述方式算法的描述可使用自然语言方式 类似于高级程序设计语言的伪代码 程序流程图 N-S 盒图 PAD 图等方式 软件开发的不同阶段描述算法的目的不同, 应根据需要选择适当的描述方法 虽然可使用自然语言描述算法, 但是因为自然语言具有多义性, 难以准确地表达语义, 所以自然语言并不适合用来描述规模较大程序的算法 这里简单介绍几种常用的算法描述方式 1. 流程图流程图是一个描述算法的控制流程和指令执行情况的有向图 它是一种比较直观的算法描述方式 下面介绍几个常用的流程图符号 1) 起止框 : 表示程序的开始或结束 2) 处理框 : 表示算法的某个处理步骤

15 4 计算机程序设计基础 3) 判断框 : 表示对给定条件进行判断, 根据条件是否成立来决定如何执行 4) 输入 / 输出框 : 表示输入或输出操作 5) 流程线 : 带箭头的直线, 表示程序执行的流向 6) 连接符 : 流程图间断处的连接符号, 圈中可以标注一个字母或数字 同一个编号 的点是相互连接在一起的, 流程图画不下时才会分开画, 实际上同一编号的点表示同一个点 使用连接符还可以避免流程线的交叉或过长, 使流程图更加清晰 2. 伪码 伪码方式是用介于自然语言与计算机语言之间的文字及符号来描述算法 用伪码描述算法, 书写格式比较自由, 易于修改, 便于向计算机语言过渡, 但它不太直观, 且容易出现逻辑上的错误 3. 程序设计语言 用程序设计语言描述算法其实就是编写程序 计算机是无法识别流程图或伪码的, 因此, 还需要将用流程图或伪码描述的算法转化为程序设计语言程序 ( 如 C 语言程序 ) 用程序设计语言描述算法必须遵守相应的语法规则 简单算法举例 例 1.1 用流程图描述计算 n! 的算法 算法描述如图 1-1 所示 例 1.2 用伪码描述计算 n! 的算法 开始输入大于 0 的值给 n 给变量 fac 赋初值 1 给变量 i 赋初值 1 当 i<=n, 执行下面的操作 : 使 fac=fac*i 使 i=i+1 ( 循环到此结束 ) 输出 fac 的值结束 例 1.3 用 C 语言描述计算 n! 的算法 #include<stdio.h> 科学出版社职教技术出版中心 图 1-1 计算 n! 的流程图 double fac=1; /* 定义变量 fac, 初值为 1, 存放 n!*/ int i=1,n; /* 定义循环控制变量 i, 初值为 1, 以及变量 n*/

16 第 1 章程序设计概述 5 printf("please input n(n>0):"); /* 输出提示信息 */ scanf("%d",&n); /* 输入一个整数 */ while(i<=n) /* 在循环中计算 n!*/ fac=fac*i; i=i+1; printf("%d!=%.0f\n",n,fac); /* 输出计算结果 */ 当输入 5 时, 程序运行结果如图 1-2 所示 图 1-2 例 1.3 程序运行结果 1.3 程序设计过程 解决问题的基本步骤 一般来说, 用计算机解决问题的过程可分为三步 : 第一步, 分析问题, 设计一种解决方案 ; 第二步, 通过程序设计语言严格描述这个解决方案 ; 第三步, 在计算机上调试这个程序, 运行它, 看是否真能解决问题 如果在第三步发现错误, 那么就需要仔细分析错误原因, 弄清后退到前面步骤去纠正错误 C 语言程序的设计过程 进行 C 语言程序设计的过程可以分解为以下几个步骤 1. 分析问题, 确定程序目标 确定程序需要做什么, 并设计解决问题的步骤 仔细考虑程序需要的信息 要进行的计算和操作 要反馈的结果信息 2. 设计程序 考虑如何组织程序, 如何表示数据, 数据的处理方法, 用户界面信息的显示 3. 编辑程序 通过 C 语言集成开发环境中的编辑器 ( 如 Visual Studio2010) 或文本编辑器 ( 如记事

17 6 计算机程序设计基础 本 写字板等 ) 编写程序代码 可考虑添加适当的注释信息, 这会为后面的调试和维护带来极大的方便 4. 编译 编译前系统会先执行程序中的预处理命令, 生成中间文件 编译时则将该中间文件和 C 文件转换为机器可识别的二进制代码, 生成相应的目标文件 (.obj) 在编译过程中要进行词法和语法分析, 发现不合法的代码, 则以错误 (error) 或警告 (warning) 信息进行提示 如果程序编译正确, 就进入下一步 ; 如发现错误或警告, 就需要设法确定出现问题的位置, 回到上一步去修改程序, 排除编译中发现的错误, 处理警告信息 ( 通常可忽略 ) 5. 连接 编译正确完成后, 对程序进行连接 把不同的二进制代码片段 ( 程序中包含的文件 多处定义的函数和数据等 ) 连接成完整的可执行文件 (.exe) 如果连接发现错误, 就需返回前面步骤, 修改程序后重新编译 6. 运行和调试 程序正常连接后, 会产生一个可执行文件, 然后开始程序的运行和调试 此时需要用一些实际数据考查程序的执行效果 如果执行中出现了问题, 或发现结果不正确, 就要设法确定错误原因, 并回到前面步骤, 修改程序, 重新编译 连接等 7. 维护和修改 程序被实际应用后, 可能会发现需要改进的地方 随着输入数据的增多 ( 调试时所用的测试数据毕竟有限, 这时会遇到其他可能情况 ), 或许会出现之前没发现的小问题, 也可能想到了更好的实现方式 遇到上述情况, 可以重新改编程序 上述设计过程并不是一条直线的过程, 有时需要在不同步骤间来回反复, 直到确定程序正确为止 良好的设计习惯会简化设计过程 节省时间 1.4 C 语言简介 科学出版社职教技术出版中心 C 语言起源于美国贝尔实验室, 是从 BCPL 语言和 B 语言演化而来的 BCPL 语言是 1967 年由 Martin Richards 为编写操作系统软件和编译器而开发的语言 1970 年,Ken Thompson 在模拟了 BCPL 语言的许多特点的基础上开发出了简单而且接近硬件的 B 语言, 并用 B 语言编写了第一个 UNIX 操作系统 由于 B 语言依赖于机器, 并且过于简单, 功能有限 贝尔实验室的 D.M.Ritchie 在 B 语言的基础上设计了 C 语言, 于 1972 年实现了最初的 C 语言 1973 年,Ken Thompson 和 D.M.Ritchie 合作用 C 改写了 UNIX C 作为 UNIX 操作系统的开发语言而广为人们认识, 当今许多操作系统都是用 C 或 C++ 编写的 C 语言在保持了 BCPL 和 B 语言优点的同时, 增加了数据类型和其他强大功能 由于 C 语言与硬件无关, 并且设计严谨, 用 C 语言编写的程序能移植到大多数计算机上 C 语言在各种计算机上的快速推广导致许多 C 语言版本的产生, 这些版本通常是不兼

18 第 1 章程序设计概述 7 容的, 人们需要一种标准的 C 语言版本 1983 年, 美国国家标准化组织 (ANSI) 成立了 X3J11 技术委员会进行标准化工作, 制定了 ANSIC 标准, 该标准也被称为 C89( 于 1989 年被 ANSI 批准 ) 后来, 国际标准化组织 (ISO) 在 ANSIC 基础上进行了改进, 采用了 ISOC 标准, 通常也被称为 C90( 于 1990 年被 ISO 批准 ) 因为 ANSI 版本是先出现的, 人们习惯使用 ANSIC 这一术语 1994 年开始了标准的修订工作, 结果产生了 C99 标准 因为有些编译器没有完全实现 C99 的修改, 所以有些修改在一些系统上不可用 作为一种简短 清楚 高效的程序设计语言,C 语言应用非常广泛 它具有以下特点 1) 简洁紧凑 方便灵活 C 语言仅有 32 个关键字,9 种控制语句 C 程序表达方式简洁, 书写形式自由, 主要由小写字母表示 它把高级语言的基本结构和语句与低级语言的实用性结合起来 2) 运算符丰富 C 语言包含 34 种运算符, 范围广 它把括号 赋值 逗号等都作为运算符处理, 使得运算类型极其丰富, 表达式类型多样化, 可以实现其他高级语言难以实现的运算 3) 数据类型丰富 C 语言的数据类型有整型 实型 字符型 枚举型和各种构造类型, 还允许用户自定义类型 利用这些数据类型可以实现复杂的数据结构, 完成各种类型的数据处理 4)C 语言是结构化程序设计语言 它具有结构化的控制语句, 包含顺序 选择 循环三种基本结构, 结构清晰 函数是构成 C 语言程序的基本单位, 用函数作为程序模块实现程序的模块化, 使程序便于使用和维护 5) 语法限制不太严格, 程序设计自由度大 6) 可直接对硬件进行操作 C 语言允许直接访问物理地址, 能像汇编语言一样对计算机最基本的位 字节和地址进行操作 它既有高级语言的优点, 又具有低级语言的许多功能 既可以编写系统软件, 又可以编写各种应用软件 7) 生成目标代码质量高, 程序执行效率高 许多高级语言的效率比汇编语言低得多 对同一问题,C 语言程序生成的目标代码只比汇编程序低 10%~20% 8) 可移植性好 与汇编语言相比,C 语言适用范围更广 它可用于多种操作系统, 也适用于多种机型 基于上述特点, 在当今众多的计算机编程语言中,C 语言被认为是一种很受欢迎的编程语言 学习好 C 语言可作为程序设计语言学习的良好开端 C 语言的字符集与词法符号 1. 字符集字符是组成语言的最基本的元素 C 语言字符集是书写程序时允许出现的所有字符的集合, 由字母 数字 空白符和特殊符号组成 1) 字母 : 小写字母 a~z, 大写字母 A~Z 2) 数字 :0~9 共 10 个 3) 空白符 : 空格符 制表符 换行符等统称为空白符 空白符只在字符常量和字符串

19 8 计算机程序设计基础 常量中起作用 在其他地方出现时, 只起间隔作用, 编译程序对它们忽略不计 因此在程序中使用空白符与否, 对程序的编译不产生影响, 但在程序中适当的地方使用空白符将增加程序的清晰性和可读性 4) 特殊符号 : 运算符 标点 括号和一些特殊字符 不在字符集中的符号如汉字或其他可表示的图形符号, 可以在两个双引号之间出现, 也可以出现在注释行中 2. 词法符号 在 C 语言中使用的词汇包括标识符 关键字 运算符 分隔符 常量 注释符等 (1) 标识符标识符用来标识程序中的变量 常量 数据类型 数组 函数等的名称, 是合法的字符序列 C 语言中的标识符必须满足以下语法规则 1) 标识符只能由字母 数字或下划线组成 2) 标识符的第一个字符必须是字母或下划线 3) 标识符区分大小写字母, 如 a 和 A 是两个不同的标识符 4) 标识符不能与语言的关键字相同, 也不能和系统标准库函数同名 具体使用标识符时还必须注意以下几点 1) 以下划线开头的标识符通常用于系统内部, 作为内部函数和变量名 2) 标识符应根据其所代表的含义命名, 以便于阅读和检查 3) 应避免使用容易混淆的字符, 如 1( 数字 1) 与 l( 字母 L 的小写 ) 等 4) 标识符的长度可以是一个或多个字符, 标识符的最大长度与语言的编译器有关 有的编译器规定长度不超过 32 个字符 如果前 32 个字符相同, 将被认为是同一个标识符 合法的标识符如 :a3 student_1 _test 不合法的标识符如 :3a( 开头是数字 ) f-6( 有 - ) s 5( 有空格 ) d6.4( 有. ) int( 关键字 ) (2) 关键字关键字又称保留字, 是预先定义的 具有特殊意义的标识符 用户不能重新定义与关键字相同的标识符, 也不能把关键字作为一般标识符使用 因为编译器会按照固定含义来解析这些关键字 C 语言的关键字共 32 个 : auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union 科学出版社职教技术出版中心 unsigned void volatile while C 语言的关键字大致可分为三类 1) 类型说明 : 用于说明变量 函数或其他数据结构的类型, 如 int float char 等

20 第 1 章程序设计概述 9 2) 语句定义 : 用于表示一个语句的功能, 如 if else do while for 等 3) 存储类别 : 用于定义变量的存储方式, 如 auto register extern static 关键字使用小写字母 例如,int 是关键字, 而 INT 不是关键字, 可以作为变量名或函数名 提示 :C99 中新增 5 个关键字 (restrict inline _Imaginary _Complex _Bool) (3) 运算符 C 语言中含有相当丰富的运算符 运算符由一个或多个字符组成 运算符与变量 函数一起组成表达式, 实现各种运算功能 运算符将在第 2 章中详细介绍 (4) 分隔符 C 语言中采用的分隔符有逗号和空格两种 逗号主要用在类型说明和函数参数表中, 分隔各个变量 空格多用于语句中各单词之间, 做间隔符 在关键字和标识符之间必须有一个以上的空格符做间隔, 否则将出现语法错误 例如,int a; 用来说明数据类型为整型的变量 a, 如果写成 inta;, 编译器会把 inta 当成一个标识符处理, 造成错误 (5) 常量 C 语言中直接使用符号标记的数据, 它本身就是数据, 如 128 'A' "hello" 常量可分为数值常量 字符常量 字符串常量 符号常量等多种 常量将在 2.2 节中详细介绍 (6) 注释符注释是对程序代码的说明 C 程序注释有如下两种 : 1) /* 注释内容 */ : 此格式用于注释一个程序块, 注释内容可以是英文字母 数字及汉字的一行或多行 2) // 注释内容 : 此格式用于注释一行, 在一行中 // 后面的内容都将被作为注释 注释可出现在程序中的任何位置, 它是为便于编程者和阅读程序的人理解程序的意义而设置的 注释仅是写给人看的, 而不是写给编译器看的 程序编译时, 不对注释做任何处理, 目标代码中不含注释 在学习和编写程序的过程中, 需要养成良好的标注注释的习惯 另外, 在调试程序时, 对暂不使用的语句也可用注释符括起来, 使编译器跳过不做处理, 待调试结束后再去掉注释符 C 语言程序的基本结构先看一个简单的 C 语言程序例子 例 1.4 一个简单的 C 语言程序示例 #include <stdio.h> /* 预处理 */ int main () /* 主函数 */ printf("this a c program!\n");

21 10 计算机程序设计基础 从这个例子可以看到, 一个 C 语言程序的基本结构包括两个主要部分 一部分是以 # 号开头的预处理部分 ( 程序中第一行 ), 说明程序中要用到 C 语言系统提供的库函数 ( 如程序中用到输出函数 printf( )) 时, 要将所对应的头文件 ( 如 stdio.h) 包含进来 注意这里用的是尖括号 < > 另一部分称为函数 ( 程序中其余几行 ), 它是程序的基本部分, 用于描述程序所完成的工作 程序中的 main( ) 函数称为主函数 C99 标准规定 main( ) 函数必须返回 int 型的值, 因此主函数的首部采用 int main( ) 这种形式 编程时惯用返回值 0 表示成功, 非 0 表示不成 功, 因此在函数体中用 return 0 向操作系统返回值, 成功了则系统得到返回值 0 该程序的运行结果就是输出一行信息 This a c program! 程序运行结果如图 1-3 所示 ( 图中最后一行显示的 请按任意键继续... 是 Visual C++ 自动添加的 ) 图 1-3 例 1.4 程序运行结果 C 语言程序的结构具有以下特点 : 1) 一个 C 语言程序可以由一个或多个文件组成 2) 程序中可以有预处理命令 ( 如 include 命令 ), 预处理命令通常放在程序的最前面 3)C 语言程序是由一个或多个独立的函数构成的 函数是构成 C 语言程序的基本单位 4) 一个 C 语言程序必须包含一个主函数 main( ), 也只能有一个主函数 程序从 main( ) 函数开始执行, 也在 main( ) 结束 5) 函数包含两部分, 一个是函数的首部, 另一个是函数体 函数的首部包括函数名 函数类型和用圆括号 ( ) 括起来的形参说明 ; 函数体是用花括号 括起来的函数执行部分 6) 函数体中是各种语句, 语句是程序的基本执行单元 每一个语句都以分号 ; 结束 但预处理命令 函数头和花括号 后不能加分号 C 语言程序的书写规则 科学出版社职教技术出版中心 C 语言是自由格式语言, 一行可以写多个语句, 一条语句也可以写在多行, 在书写时可随意安排格式, 如换行 添加空格等, 格式变化不影响程序的意义 为了便于阅读和维护程序, 更好地体现程序的层次结构, 书写所采用的通用规则如下 : 1) 程序一般用小写字母书写 2) 一行一般写一条语句 3) 在程序里适当加入空行, 分隔程序的不同部分 4) 同层次不同部分对齐排列, 下一层次的内容通过适当退格 ( 在一行开始加空格 ), 使程序结构更清晰 5) 在程序里增加一些说明性信息, 即添加注释 开始学习程序设计时就应养成良好的书写习惯, 以便能够写出结构清晰 便于阅读和维护的程序

22 第 1 章程序设计概述 程序设计方法 程序设计方法对程序设计的质量有非常重要的影响 程序设计方法先后经历了三个主要阶段 : 非结构化程序设计阶段 结构化程序设计阶段和面向对象的程序设计阶段 非结构化程序设计方法由于其诸多的弊端, 现已基本淘汰 目前, 程序设计的方法有两大类 : 面向过程的结构化程序设计方法和面向对象的程序设计方法 ( 详细介绍见第 9 章 ) 1. 结构化程序设计结构化程序设计方法是基于模块化 自顶向下 逐步细化和结构化编码等程序设计技术而发展起来的 它强调程序设计风格和程序结构的规范化, 提倡清晰的结构, 有助于程序设计思想的形成和理解 C 语言就属于结构化程序设计语言 面向过程的结构化程序设计的核心思想是功能的分解 解决实际问题时, 首先要做的工作就是将问题分解为若干个功能模块 其基本思路是, 对实际问题进行分析, 先从整体出发, 把一个较复杂的问题分解为若干个相对独立的子功能, 对每个子功能可以再细化为若干个低一层的子功能, 直到子功能便于在计算机上实现 这就是自顶向下 逐步细化的解决问题的方法 结构化程序设计方法主要使用顺序 选择和循环三种基本的控制结构来实现这些功能模块 2. 面向对象程序设计面向对象技术是当今比较流行的软件设计与开发技术, 主要包括面向对象分析 面向对象设计 面向对象编程 面向对象测试及面向对象软件维护等 面向对象程序设计技术的提出, 主要为了解决传统程序设计方法所不能解决的代码重用问题 面向对象程序设计是建立在结构化程序设计基础之上的程序设计方法 其最重要的变化是程序设计围绕数据来设计, 而不是围绕操作本身 在面向对象程序设计中, 将程序设计作为一组相互协作的对象, 而不是一组相互协作的函数 对象是面向对象技术中的一个重要概念 所谓 对象 就是对客观存在事物的一种表示, 是包含现实世界物体特征的抽象实体, 是物体属性和行为的一个组合体 从程序设计的角度看, 对象是指将数据和使用这些数据的一组基本操作封装在一起的统一体 它是程序的基本运行单位, 具有一定的独立性, 其他对象的操作不能操作该对象隐藏起来的数据 面向对象程序设计中的另一个重要概念是类 类是具有相同操作 ( 功能 ) 和相同数据 ( 属性 ) 的集合 类是对一类具有相同特征和行为事物 ( 对象 ) 的抽象表示 对象是某个类的具体实现 这样, 面向对象程序设计以类作为构造程序的基本单位, 具有封装 数据抽象 继承 多态性等特征 ( 详见第 9 章 9.2 节 ) 1.6 开发环境简介 Visual Studio 是微软公司推出的软件系统, 是目前最流行的 Windows 平台应用程序开发

23 12 计算机程序设计基础 环境 Visual Studio 2010 版本于 2010 年 4 月 12 日上市, 其集成开发环境 (IDE) 的界面被重新设计和组织, 变得更加简单明了 Visual C 是 Visual Studio 2010 的一个有机组成部分 在 Visual C 开发环境中设计一个程序一般要经过启动开发环境 创建解决方案和项目 创建源文件 编辑程序 编译程序 运行程序和关闭解决方案等步骤 启动开发环境在 Windows 环境下, 选择 开始 程序 Microsoft Visual Studio 2010 Microsoft Visual Studio 2010 命令, 打开 Visual Studio 2010 集成开发环境 如果用户安装完成后第一次启动程序, 那么需要选择默认的环境设置, 要使用 Visual C++ 就选择 Visual C++ 的配置, 如图 1-4 所示 选择成功后会看到起始页面, 如图 1-5 所示 图 1-4 选择 Visual C++ 开发设置 创建项目和文件 科学出版社职教技术出版中心 图 1-5 Visual C++ 起始页 Visual C++ 不能单独编译.cpp 文件或.c 文件 这些文件必须依赖于某一个项目, 因此我 们必须创建一个项目 有很多种方法可以创建项目, 单击起始页面上面的 新建项目, 或通过菜单 : 选择 文件 新建 项目 命令, 如图 1-6 所示 之后进入新建项目向导, 如图 1-7 所示 选择 Win32 Win32 控制台应用程序, 在 名称 文本框中输入 exam1, 单击 浏览 选择存储位置, 最后单击 确定 接下来进入第一个 Win32 应用程序向导页面, 直接单击 下一步 即可, 如图 1-8 所示

24 第 1 章程序设计概述 13 图 1-6 新建项目 图 1-7 新建项目向导 先创建一个空项目, 在下个页面选择 空项目, 如图 1-9 所示 图 1-8 Win32 应用程序向导 图 1-9 创建空项目

25 14 计算机程序设计基础 单击 完成, 一个空的项目就创建成功了, 如图 1-10 所示 图 1-10 项目创建成功 对于一个 Visual C++ 项目来说, 一定要有一个且仅有一个 main( ) 函数 现在需要添加 一个 main 源文件进来, 这个文件可以是已经存在的, 也可以新建, 这里新建一个 右击 源 文件, 选择 添加 新建项 命令, 或者通过菜单 : 选择 项目 添加新项 命令, 如图 1-11 所示 科学出版社职教技术出版中心 图 1-11 添加新项 出现添加新项向导页面, 如图 1-12 所示

26 第 1 章程序设计概述 15 图 1-12 添加新项向导页面 在向导页面中选择 C++ 文件 (.cpp), 名称 文本框中输入 program, 单击 添加, 就可以进行程序编辑了 编辑程序 如图 1-13 所示, 在代码编辑区中输入程序代码, 编辑 program.cpp 文件 代码编辑区 输出窗口 图 1-14 编辑程序

27 16 计算机程序设计基础 其中, 注释部分会显示为绿色字体, 关键字显示为蓝色字体 编译选择 生成 编译 命令, 对程序进行编译 如果程序有错误, 输出窗口区域中将出现错误的提示信息, 可根据提示信息检查项目配置和程序代码, 修改后重新编译 如果编译成功, 则可以运行程序 运行选择 调试 开始执行 ( 不调试 ) 命令, 或按 Ctrl+F5 组合键运行程序, 如图 1-14 所示 运行结果如图 1-15 所示 关闭 图 1-14 运行程序图 1-15 程序运行结果 如图 1-16 所示, 选择 文件 关闭解决方案 命令, 进行下一程序的编辑或退出 开发环境 科学出版社职教技术出版中心 图 1-16 关闭解决方案

28 第 1 章程序设计概述 案例应用 本书以用 C 语言开发的一个小型的 学生成绩管理系统 为案例, 将 C 语言程序设计的主要知识点串联起来 通过该案例驱动, 将程序设计中所涉及的数据类型与各种运算 程序控制结构 函数 数组 指针 结构体 文件等的内容分配到各个章节中详细介绍, 并逐步实现全部系统功能, 使读者对 C 语言程序设计的过程与所涉及知识有一个清晰的理解, 力求理论与实践相结合 这里先介绍 学生成绩管理系统 所要实现的基本功能及相应的功能模块划分 本系统需要实现的功能包括 : 学生信息的输入与输出及学生信息的增添 查询 修改 插入和删除, 学生成绩总分和平均值的计算及学生成绩的排序等 系统中每个功能模块即一个相对独立的子系统, 子系统又可细分为几个下一级子系统, 逐层分解, 最末层为实现具体功能的模块 这些功能模块便组成了整个 学生成绩管理系统, 如图 1-17 所示 图 1-17 学生成绩管理系统功能模块图

29 18 计算机程序设计基础 本章小结 本章介绍了程序设计的一些基础知识, 主要内容包括 : 1) 程序 程序设计的概念 程序是指完成某项事务的执行过程, 是一系列有序的工作步骤 人们为了完成某项具体的任务而编写一系列指令, 并将这一系列指令交给计算机去执行, 这个过程称为程序设计 2) 程序设计语言是用计算机能够理解的语言来表达所设计程序的含义, 是人与计算机之间进行交流和通信的工具, 包括机器语言 汇编语言和高级语言 3) 算法的基本概念和描述方法 算法就是为解决一个具体问题而采取的方法和有限的步骤 4) 程序设计过程 遵循人们解决问题的一般步骤, 即分析问题并设计解决方案 用程序语言来描述解决方案 由计算机来执行程序, 以完成任务 具体的 C 语言程序设计过程可分为以下几个步骤 : 分析问题, 定义程序目标 ; 设计程序 ; 编辑程序 ; 编译 ; 连接 ; 运行和调试 ; 维护和修改 5)C 语言程序的基本结构 主要由两大部分组成 : 预处理和函数部分, 函数包括函数头和函数体, 函数体中包含说明部分和语句部分 6) 程序设计方法包括面向过程的结构化程序设计方法和面向对象的程序设计方法 1 面向过程的结构化程序设计方法 : 其核心思想是功能的分解, 将问题求解过程看作对数据进行加工的过程, 采用了自顶向下 由粗到精 逐层细化的方法 2 面向对象的程序设计方法 : 是建立在结构化程序设计基础之上的程序设计方法, 最 重要的变化是程序设计围绕数据来设计, 而不是围绕操作本身 在面向对象程序设计中, 将程序设计为一组相互协作的对象, 而不是一组相互协作的函数 1. 简述程序和程序设计的概念 习题 2. 简述程序设计语言的分类 列举几种当前流行的程序设计语言 3. 简述标识符的构成规则 4. 简述 C 程序的基本组成结构 5. 用流程图描述 s= 的算法 科学出版社职教技术出版中心

30 第 2 章数据类型 运算符与表达式 在案例 学生成绩管理系统 中, 涉及学生的各种信息, 如学生姓名 学号 年龄 性别 所在班级 各科成绩等 在计算机中这些数据的存储和处理方式都与数据的类型有关 另外, 学生成绩的总分 平均分要涉及相应的计算, 所处理的数据需要输入到计算机中, 处理的结果需要输出显示 对这些问题, 在程序中是如何解决的呢? 本章主要介绍 C 语言的数据类型, 常量与变量的概念及应用, 运算符的使用, 表达式的求值, 不同数据类型之间的转换及混合运算, 以及基本的输入与输出函数 通过本章的学习, 读者应掌握基本类型数据的处理, 熟悉运算符的优先级和结合性及数据类型转换的规则, 掌握数据的输入与输出方法 2.1 数据类型 人们通常将各种数据如数值 文本 声音和图形等输入并存储到计算机中, 并进行相应处理 计算机程序的工作都与这些数据有关, 如输入数据 输出数据 存储数据 对数据进行各种计算等 所处理的数据可能很简单, 也可能很复杂, 数据之间存在某种内在联系 为了方便地处理这些数据, 计算机程序设计语言需要提供一种数据机制, 以便在程序中更好地表示它们, 以反映出数据的有关特征和性质 C 语言采用这样一种数据机制, 即把要处理的数据对象划分为一些类型, 每个类型是一个数据值的集合 例如,int 类型表示所有整数值的集合 为此, 一方面提供了一组基本数据类型, 如 int double 等, 用于对基本数据的表示和使用 ; 另一方面, 提供了数据构造机制, 即一组可以由基本数据类型或数据构造更复杂的数据类型或数据的手段 反复使用这些手段可以构造出任意复杂的数据结构, 以满足复杂数据处理的需要 C 语言具有非常丰富的数据类型, 包括基本数据类型 构造数据类型 指针类型和空类型, 如图 2-1 所示 C 语言不仅提供了这些标准数据类型, 还允许用户根据需要自定义类型 图 2-1 C 语言数据类型

31 20 计算机程序设计基础 基本数据类型 C 语言的基本数据类型包括整型 实型 字符型和枚举类型 没有小数部分的数就是 整形 ( 也称整数类型 ), 而加了小数部分的数则是实型 ( 也称浮点数类型 ), 字母或者符号 更广泛地说是字符类型 对人来说, 它们的区别在于书写形式 ; 而对于计算机, 它们的存储方式是不同的 1. 整型 在 C 语言中, 整型是比较常用的数据类型 针对不同的用途,C 语言提供了多种整数类型的选择, 可分为基本整型 (int, 简称整型 ), 短整型 (short) 和长整型 (long) 上述类型又分为有符号型 (signed) 和无符号型 (unsigned), 即数值是否可以取负值, 从而构成了 6 种不同的整数类型 各种整数类型占用的存储空间大小不同, 所提供数值的范围也不同, 如表 2.1 所示 表 2.1 整型数据分类 类型名称类型说明符所占字节数取值范围 有符号基本整型 [signed] int ~ ~ 有符号短整型 [signed] short [int] ~ ~ 有符号长整型 [signed] long [int] ~ ~ 无符号基本整型 unsigned [int] 4 0~ ~ 无符号短整型 unsigned short [int] 2 0~ ~ 无符号长整型 unsigned long [int] 4 0~ ~ 注 :[ ] 内的关键字可以省略 需要说明的是, 数据存储时在内存中所占字节数与具体的机器及系统有关, 与具体的编译器也有关系 例如, 表 2.1 中所列 int 类型数据为在 32 位系统中 Visual C++ 下所占字节数, 但是在 Turbo C 下只占 2 个字节 编程时, 可以用运算符 sizeof( ) 求出所使用环境中 int 类型究竟占用几个字节 整数类型是以二进制数据形式存储的, 如整数 15 的二进制表示为 1111, 在 2 个字节 (16 位字长 ) 中存储, 它需要将前 12 位置为 0, 后 4 位置为 1; 而在 4 个字节 (32 位字长 ) 中存储, 它则需要将前 28 位置为 0, 后 4 位置为 1, 如图 2-2 所示 科学出版社职教技术出版中心 图 2-2 整数的二进制存储 一般 int 类型能够满足对整数的大多数需求 而 short 类型可能占用比 int 类型更少的存储空间, 适用于仅需小数值的时候, 以达到节省空间的目的 long 类型可能占用比 int 类型

32 第 2 章数据类型 运算符与表达式 21 更多的存储空间, 适用于需要使用大数值的情况 之所以说 可能, 是因为 C 仅保证 short 类型不会比 int 类型长, 并且 long 类型不会比 int 类型短 具体所占用的字节数与机器及系统有关系, 如在一台运行 Windows 3.1 的 IBM PC 上,short 类型和 int 类型都是 16 位,long 类型是 32 位, 要表示超出 16 位范围的大数值, 就需要比 int 类型更大的 long 类型 而在 Windows XP 或 Macintosh Power PC 上,short 类型是 16 位,int 类型和 long 类型长度相同, 都是 32 位, 有时候不需要那么大的整数, 为了节省空间就需要 short 类型 现在 64 位处理器越来越普及, 要使用更大数值, 可能需要用 long long 类型 (C99 标准引入 ) 2. 实型多数情况下使用各种整数类型就可以满足需求 然而, 实际应用中还会涉及整数之间的数, 如财务和数学计算经常要使用实数类型 如前所述实型与整型的区别在于是否包含小数部分, 如 6 是整数类型,6.00 是实数类型 同样, 存储实型数据所占字节数也与系统有关, 实型数据的有效数字位数和数值范围由具体实现的系统决定 常用的 C 环境中实数类型的取值范围如表 2.2 所示 表 2.2 实型数据分类 类型名称 类型说明符 所占字节数 有效数字 取值范围 ( 绝对值 ) 单精度实型 float 4 6~7 位 ~ 双精度实型 double 8 15~16 位 ~ 不同于整型数据的存储方式, 实型数据按指数形式存储, 分为小数部分 ( 尾数 ) 和指数部分 ( 阶码 ) 分别存放, 如图 2-3 所示 图 2-3 实型数据的存储方式 例如, 实型数据 B, 先转换成规范的指数形式 , 对应的指数符号为 0, 指数数值为 11, 小数符号为 1, 小数数值为 指数部分与小数部分各占多少二进制位, 用原码还是补码形式存放, 与具体的系统有关 例如, 在 4 个字节中, 以 8 位表示小数部分 ( 包括 1 位符号位 ),24 位表示指数部分 ( 包括 1 位符号位 ) 小数部分占的位数越多, 能表示的数值的有效数字越多, 精度越高 ; 指数部分占的位数越多, 表示的数值的范围越大 实型数据的存储空间是有限的, 所以精度也是有限的, 有效位数以外的数字将被舍去, 因此会存在误差 为了满足比 double 类型更高的精度要求,C99 标准提供了长双精度 (long double) 类型 C 并没有规定 long double 类型具体占用多少位, 只保证了不少于 double 类型所占的位数 在不同系统中 long double 类型可能占用 8 个 10 个或 12 个字节 在 Visual C++ 中, 单精度 float 类型占 4 个字节, 提供 7 位有效数字, 绝对值的取值范围为 ~ ; 双精度 (double) 占 8 个字节, 提供 16 位有效数字, 绝对值的取值范围为 ~

33 22 计算机程序设计基础 3. 字符型 在数据处理中,C 语言还有一种基本类型 字符类型, 类型说明符为 char 字符型 数据只占 1 个字节, 只能存放 1 个字符, 无法存放多个字符组成的字符串 字符串的概念 将在后面章节中介绍 为了处理字符, 计算机使用一种数字编码, 用特定的整数表示特定的字符 应用最广 泛的编码是 ASCII 码 (america standard cord for information interchange, 美国信息交换标准 码 ) 在 ASCII 码中, 整数值 65 代表大写字母 A( 参见附录 A) 字符型数据在存储时并不将字符本身放到内存中, 而是将该字符对应的 ASCII 码值转 换成二进制形式放到存储单元中 由于这种与整型数据类似的存储方式, 在 1 个字节 (0~ 255) 范围内, 字符型数据和整形数据可以通用 字符型数据和整型数据之间可以进行算术运算, 一个字符型数据可以按字符形式输出也可以按整数形式输出 标准 ASCII 码值的范围是 0~127, 只需 7 位就可以表示 1 个字节容纳标准 ASCII 编码是绰绰有余的, 许多系统提供的扩展 ASCII 编码就使用 8 位存储单元 许多字符集包含远多于 127 个甚至 255 个值 例如, 商用的 Unicode 字符集建立了一个能表示世界范围内多种字符集的系统, 目前已有字符超过 个 4. 枚举 枚举 (enumeration) 类型是 C 语言提供的一种用户自定义类型 如果一个数据对象只有几种可能的取值, 可以将这些值一一列举出来, 即定义为枚举类型 枚举是用标识符表示的有限个整数常量的集合, 这些标识符都有明确的含义, 每个用户自定义标识符对应一个整数常量值 如果没有指定起始值, 默认枚举常量的起始值为 0, 后面的值依次递增 1 枚举常量用关键字 enum 定义, 定义的格式为 : enum 枚举类型名 枚举常量 1, 枚举常量 2,, 枚举常量 n; 例如 : enum months JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC; 上面定义了一种类型 enum months, 其中的标识符被自动设置为 0~11, 要使标识符的值为 1~12, 定义方式如下 : enum months JAN=1,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC; 第 1 个值被设置为 1, 后面的值依次递增, 即 1~12 枚举定义中的标识符必须唯一, 每个标识符的值也可以明确指定 构造数据类型 科学出版社职教技术出版中心 C 语言的基本数据类型并不能满足实际应用中的所有需求, 用户可以利用整型 实型 字符型这些基本数据类型构造满足需要的数据类型, 即构造类型 构造类型包括数组类型 结构体类型和共用体类型 数组是由一系列相同类型的数据元素构成的, 并且是按照一定顺序组织在一起的一个数据集合 例如, 人们利用计算机来处理学生成绩, 管理每月的销售额等 对这些大量的

34 第 2 章数据类型 运算符与表达式 23 相互关联的数据, 利用数组能够有效方便地进行处理 数组类型将在第 5 章中详细介绍 在实际问题中, 一组数据也可能具有不同的数据类型 例如, 一个学生的信息记录中, 姓名应为字符数组 ; 学号可为字符数组或长整型 ; 年龄应为整型 ; 性别应为字符型 ; 成绩可为实型 显然不能用一个数组来存放这些数据, 因为数组中各元素的类型和长度都必须一致 为了解决这个问题,C 语言中给出了另一种构造数据类型 结构体类型 结构体类型由不同的 成员 组成, 每个成员可以是不同的数据类型 结构体类型与共用体类型将在第 7 章中详细介绍 其他数据类型 1. 指针类型指针是一种特殊的数据类型, 也是很重要的一种数据类型 指针的值指的是内存中的地址值 指针的使用非常灵活, 可以有效地表示各种复杂的数据结构 指针的定义和使用将在第 6 章中详细介绍 2. 空类型 C 语言中空类型用 void 表示, 一般用于描述指针及作为不返回值的函数的返回值类型 第一个用途是声明指针时用作指针的类型, 但它不同于空指针 第二个用途是表示函数的返回值类型 调用函数时, 通常应向调用者返回一个函数值 这个返回的函数值是具有一定的数据类型的, 应在函数定义及函数说明中给予说明 也有一类函数, 调用后并不需要向调用者返回函数值 对于那些确实不需要返回值的函数, 可以将类型定义为 void 类型, 如主函数 main( ) 2.2 常量与变量 在程序所处理的各种数据中, 有些数据的值在程序使用前可以预先设定并在程序运行过程中不会发生变化, 这种数据称为常量 有的数据在程序运行过程中可能会发生变化, 这种数据称为变量 两者的区别在于数据在程序运行过程中, 其值是否变化 常量在程序运行过程中, 其值不变的量称为常量 常量也有数据类型, 在计算机内存中, 所有数据都是以二进制形式存储的 在 C 语言程序中, 编译器一般通过书写来辨认其类型, 如 3 是整型, 而 3.00 是实型 常量可以不经说明而直接引用, 另外在程序中也可定义符号常量 1. 整型常量整型常量类似于数学中的整数 在 C 语言中, 整型常量有十进制 八进制和十六进制 3 种表示形式 1) 十进制整型数 : 用 10 个数字 0~9 表示, 开头的数字不能是 0, 如 等

35 24 计算机程序设计基础 2) 八进制整型数 : 以数字 0 开头, 用 8 个数字 0~7 表示, 如 等 3) 十六进制整型数 : 以 0X 或 0x 开头 ( 注意是数字 0 加字母 X 或 x), 用 10 个数字 0~ 9 和 6 个字母 A~F( 或 a~f) 表示, 如 0x7f 0XA6D 等 注意 : 正整数前面的 + 号可以省略, 负整数的前面必须加 - 号 合法常量和不合法常量列举如下 : 整型常量 进制数 十进制的值 12 十进制 十进制 八进制 10 01A 不合法 -049 不合法 0101 八进制 65 0x41 十六进制 65 有时需要用 long 类型来存储一个较小的整数, 如内存地址, 可以使用后缀 L 或 l 来表示长整型数 与之类似, 可以用后缀 U 或 u 表示无符号整型 常量的后缀表示列举如下 : 常量类型 十进制数 八进制 十六进制 十进制的值 长整型 12L 014L 0XCL 12 无符号整型 15u 017u 0xfu 15 C 把大多数整数常量识别为 int 类型, 如果整数特别大, 将有不同的处理 例如, 在程 序中使用 254 时, 通常会识别为 int 类型 当使用的整数超出了 int 类型的范围时, 则识别 为 long 类型 如果 long 类型也不能表示该数字, 那么 C 会视其为 unsigned long 类型 2. 实型常量 实型 ( 浮点型 ) 常量即数学中的实数 在 C 语言中实型常量有十进制数和指数两种表 示形式 1) 十进制数形式 : 由数字 0~9 和小数点组成 ( 必须有小数点 ) 整数或小数部分的数字可以省略, 但二者不能同时省略并且小数点不能省略 合法的实数形式 : 不合法的实数形式 : 0 无小数点 35 无小数点 数字之间有空格 1*105 表示错误 2) 指数形式 : 即科学记数法, 由尾数 E( 或 e) 和整数指数 ( 阶码 ) 组成, 其中指 数可以带正负号 E( 或 e) 的左边为尾数, 可以是整数或实数, 右边是指数, 指数必须为整数, 表示尾 科学出版社职教技术出版中心

36 第 2 章数据类型 运算符与表达式 25 数乘以 10 的多少次方 合法的指数形式 : 2.1e5.12e3 123e-5 23e3 不合法的指数形式 : e3 e 之前无数字 12. e 负号位置不对 2.0e 无阶码 注意, 在实型常量中不能有空格 默认状态下, 实型常量被识别为双精度 (double) 类型 可以使用后缀 F 或 f 表示单精度 (float) 类型, 后缀 L 或 l 表示长双精度 (long double) 类型 例如, 是 double 类型,123.56f 是 float 类型,1.2356E2L 是 long double 类型 3. 字符常量 字符常量是用单引号括起来的一个字符 例如,'a' '8' '=' '+' '?' 都是合法字符常量 每个字符都有对应的 ASCII 整数代码, 如小写字母 'a' 的 ASCII 码为 97( 参见附录 A) 在 C 语言中, 字符常量有以下特点 : 1) 字符常量只能用单引号括起来, 不能用双引号或其他括号 2) 字符常量只能是单个字符, 不能是字符串 3) 字符常量可以是字符集中的任意字符 使用字符常量时要注意数字字符和数字的区别 例如,'5' 表示字符 5, 而不是数值 5, 字符 5 的 ASCII 码值是 53 在 ASCII 字符集中, 有些字符是打印不出来的 例如, 一些动作描述 : 退格 回车或换行 还有一些字符有了特殊用途, 如单引号用作字符常量界限符 怎样表示这些字符呢? 可以直接使用其 ASCII 码值, 如换行符的 ASCII 码值是 42, 但是这种方法难于记忆, 使用起来不方便 C 提供了一些特殊的符号序列, 即转义字符来表示某个字符 这些符号都不能简单地用一个字符表示, 而是用单引号括起来的以反斜杠开头的符号序列表示 反斜杠之后字符被转换为另外的含义, 不同于字符的原有意义, 故称为 转义字符 转义字符是一种特殊的字符常量, 以反斜杠 \ 开头, 后跟一个或几个字符 常用的转义字符及含义如表 2.3 所示 表 2.3 常用的转义字符及含义 转义字符含义 ASCII 码 \b 退格 (Backspace) 008 \f 走纸换页, 跳到下一页开头 012 \n 换行, 跳到下一行开头 010 \r 回车 (Return) 013 \t 水平制表, 横向跳到下一制表位置 (Tab) 009 \v 垂直制表, 竖向跳到下一制表位置 011

37 26 计算机程序设计基础 续表 转义字符含义 ASCII 码 \\ 反斜杠 (\) 092 \' 单引号 (') 039 \" 双引号 (") 034 \? 问号 (?) 077 \ooo \xhh 八进制数值,1~3 位八进制数所代表的字符 (o 代表一个八进制数字 ) 十六进制数值,1~2 位十六进制数所代表的字 符 (h 代表一个十六进制数字 ) 广义地讲,C 语言字符集中的所有字符均可用转义字符表示 表 2.3 中的 \ooo 和 \xhh 为 通用转义字符,ooo 和 hh 分别为八进制和十六进制的 ASCII 代码 例如, 常量字母 A 有 3 种等效的表示 ('A' '\101' 和 '\x41'), 反斜杠也有 3 种等效的表示 ('\\' '\134' 和 '\x5c') 只要 ASCII 码值相同, 就表示同一个字符 注意 : 1) 转义字符中只能使用小写字母, 每个转义字符看作一个字符 在程序设计中通常将不可打印的字符用转义字符表示 2)'\0' 与 '0' 是有区别的, 在计算机内部分别用二进制 和 表示 其中 的十进制值为 48, 即字符 '0' 的 ASCII 码值为 48, 而 '\0' 的 ASCII 码值为 0 3) 字符类型的数据也可像整型数据一样参与四则运算 但它们用字符的 ASCII 码值进行运算, 字符的四则运算举例如下 : 字符运算表达式字符 ASCII 码值对应的整型运算表达式运算 'b'-'a'=1 b:98;a: =1 'a'-'a'=32 a:97;a: =32 4. 字符串常量 字符串常量是由一对双引号括起来的字符序列 例如,"C language program" "$12.5" 等都是合法的字符串常量 字符串常量与字符常量的区别如下 : 1) 字符常量是由单引号括起来的, 字符串常量则是由双引号括起来的 2) 字符常量只能表示一个字符, 字符串常量则可以包含一个或多个字符 3) 可以将一个字符常量赋值给一个字符变量, 但不能将一个字符串常量赋予一个字符变量 字符串常量可以用一个字符数组存放 4) 字符常量在存储中只占 1 个字节, 字符串常量占用的存储空间的字节数等于双引号中所包含字符个数加 1 增加的 1 个字节用于存放字符 '\0'(ASCII 码值为 0) 每个字符串常量的末尾有一个结尾符 '\0', 称为空字符,C 语言以该字符作为字符串常量结束的标志 例如,"a" 表示的是一个字符串常量, 占用 2 个字节 ; 而 'a' 表示的是一个字符常量, 只占用 1 个字节, 如图 2-4 所示 5) 字符串中可以有转义字符 6) 单引号和双引号只是字符和字符串的定界符 如果字符常量本身是单引号, 则要用 科学出版社职教技术出版中心

38 第 2 章数据类型 运算符与表达式 27 转义字符, 如 '\'' 如果字符串常量中包含双引号, 也要用转义字符, 如 "a\"b" 图 2-4 字符常量 'a' 和字符串常量 "a" 在程序中, 最好将双引号引用的字符串常量放在一行不要分开, 如果一定要分行, 有 的编译器要求在行尾加续行符 \ 5. 符号常量 用一个标识符来代表一个常量, 称为符号常量 符号常量在使用前必须先定义, 用宏 定义的形式, 其一般定义格式为 : #define 标识符常量 其含义是把该标识符定义为其后的常量值, 该标识符即符号常量名, 一般用大写形式 其中 #define 是预处理命令 定义符号常量可以提高程序的可读性, 便于程序调试和修改 符号常量名要具有一定 的意义, 便于理解 当程序中要多次使用某一个常量时, 可以定义符号常量 这样, 当要对该常量值进行修改时, 只需要对预处理命令中定义的常量值进行修改即可 例 2.1 符号常量的定义和使用 #include<stdio.h> #define PRICE 10 // 定义价格符号常量 PRICE 为 10 int num,total; scanf("%d",&num); // 输入购买数量 total=num*price; // 计算总金额 printf("total=%d",total); 在上面的程序中, 用符号常量 PRICE 代表常量 10, 读程序时看标识符 PRICE 就知道它代表价格 因此, 定义符号常量名时应尽量做到 见名知意 如果要修改价格的值, 只需要做如下修改 : #define PRICE 30 那么程序中所有的 PRICE 都将代表 30 由此可见, 使用符号常量具有如下优点 : 1) 意义明确, 便于理解 2) 方便修改, 一改全改

39 28 计算机程序设计基础 注意 : 符号常量是常量, 不同于变量 它的值在程序运行过程中是不变的, 不能对符 号常量进行赋值 例如,PRICE=20; 是不对的 变量 变量是指在程序运行过程中其值可以变化的量 C 语言要求在使用变量之前必须先进 行声明 其目的, 一是在程序中未事先声明的, 不可作为变量名, 以保证程序中变量名能正确使用 ; 二是每个变量被指定为某种确定数据类型, 在编译时就能为其分配相应大小的存储单元, 并可以检查该变量所进行的运算是否合法 1. 变量的声明 声明一个变量包括 : 1) 给变量指定一个标识符, 这个标识符称为变量名 ; 2) 指定该变量的数据类型, 该类型决定了变量值的类型 表现形式和占用内存空间, 以及对该变量能执行的运算 ; 3) 指定变量的存储类型和变量的作用域 变量声明的一般形式为 : [ 变量存储类型说明符 ] 数据类型说明符变量名 1[, 变量名 2, 变量名 3, ]; 例 2.2 变量声明示例 #include<stdio.h> int a,b; char c; float f1,f2; // 声明两个整型变量 a 和 b // 声明一个字符变量 c // 声明两个浮点型变量 f1,f2 其中 : 1)int char 和 float 是数据类型说明符, 是 C 语言的关键字, 用来声明变量的数据类型 2)a b c f1 和 f2 为声明的变量名称 变量名必须是一个合法的标识符 命名时还应考虑 见名知意 的原则 系统将根据变量的数据类型, 为变量在内存中分配相应大小的存储空间 3) 允许在一个类型说明符后声明多个相同类型的变量, 各变量之间用逗号分隔 类型说明符与变量名之间至少有一个空格 4) 最后一个变量名之后必须是 C 语言的分隔符 ; 5) 变量声明必须放在变量使用之前, 即先声明, 后使用 6) 变量存储类型包括自动型 寄存器型 外部型和静态型四种, 说明符为 auto register extern 和 static 当存储类型为 auto 时, 存储类型说明符可以省略 变量的存储类型将在第 4 章中详细介绍 科学出版社职教技术出版中心

40 第 2 章数据类型 运算符与表达式 变量的初始化 例 2.2 中只声明了变量, 以变量名为标识的存储空间中存放的是随机数, 变量值是不 确定的 通常在程序中, 使用一个变量需要赋给该变量一个确定的值 C 语言允许在声明变量 的同时给变量赋值, 即初始化变量, 这个值为变量的初值 在变量声明中, 初始化赋值的一般形式为 : [ 变量存储类型说明符 ] 数据类型说明符变量名 1= 值 1[, 变量名 2= 值 2, ]; 说明 : 1) 允许在对变量进行类型声明的同时对需要初始化的变量赋初值 2) 可以在一个数据类型说明符中声明多个同类型的变量及给多个变量初始化赋值 3) 多个变量初始化赋值必须将其分别赋值, 即使所赋的值相同也是如此 例 2.3 变量的声明及初始化 #include<stdio.h> char c1='a',c2='b'; // 声明 c1 和 c2 为字符类型变量,c1 初始化值分别为字符 'a' 'b' int i=20,j=20,k; // 声明 i,j 和 k 为基本整型变量,i 和 j 初始化值为 20 float f1=3.6,f2; // 声明 f1 和 f2 为单精度类型变量,f1 初始化值为 3.6 除了初始化赋值, 给一个变量赋值, 还可以通过 scanf( ) 函数为其从键盘输入一个值, 或者通过赋值表达式直接赋值 有关内容将在后面介绍 3. 变量的使用 在程序中使用变量, 要考虑程序运行的环境和变量的取值范围, 当变量的取值超出变量类型所规定的范围时, 会出现错误的运算结果 下面介绍几种主要基本数据类型变量的使用 (1) 整型变量根据整型数据的分类, 整型变量也有基本整型 短整型 长整型 无符号基本整型 无符号短整型 无符号长整型 6 种 例 2.4 整型变量的定义与使用 #include<stdio.h> int a=-10,b=20,c; unsigned k; scanf("%u",&k); c=a+b; printf("c=%d,k=%u\n",c,k); // 声明基本整型变量 a b c, 并对 a b 初始化 // 声明无符号基本整型变量 k // 用 scanf() 函数给 k 输入一个值 // 将 a b 的和赋值给 c // 用 printf() 函数输出 c k 的值

41 30 计算机程序设计基础 系统根据声明变量时所指定的数据类型为变量分配存储单元 使用整型变量时要注意 它获取的值不要超过变量的取值范围 例 2.5 整型数据的溢出 #include<stdio.h> short x=32767,y; y=x+1; printf("x=%d,y=%d\n",x,y); 程序运行结果如图 2-5 所示, 从运行结果看到, 所得到的 y 值是一个错误结果 这是因为一个短整型变量所能表示数的范围是 ~+32767, 将无法表示大于 的数, 这种情况称为溢出 而程序在运行过程中并没有报错 C 语言比较灵活, 但也会出现一些副作用, 而系统不给出 出错信息 这种情况要靠编程者的细心和经验来保证结果正确 这里如果将 y 改成取值范围大一些的类型, 如 int 类型, 就可以得到预期结果 图 2-5 例 2.5 程序运行结果 (2) 实型变量实型变量分为单精度实型和双精度实型, 两者的区别在于精度, 即有效数字位数 任意两个整数之间都存在无穷个实数, 由于存储空间的限制, 计算机不能表示所有的值, 并且往往只是实际值的近似 因此使用实型变量时, 可能会有误差 实型变量的有效位数越多, 与实际值就越接近, 精确度越高 例 2.6 实型变量的有效位数 #include<stdio.h> float a= ; double b= ; printf("a=%21.18f\n",a); /* 格式符 %21.18f, 输出 a 时总长度 21 位, 小数位数占 18 位 */ printf("b=%21.18f\n",b); 科学出版社职教技术出版中心 在上面的程序中,a 被赋值了一个有效位数为 12 位的数字 但由于 a 是 float 类型的, 所以 a 应该只能接收 6~7 位有效数字 b 是 double 类型的, 所以 b 应该可以接收 15~16

42 第 2 章数据类型 运算符与表达式 31 位有效数字 程序运行结果如图 2-6 所示 图 2-6 例 2.6 程序运行结果 在 Visual C++ 中输出的结果里,a 只有 共 7 位有效数字被正确显示出来,b 有 共 16 位有效数字被正确显示, 后面的数字是一些无效的数值 这表明 float 类型的数据只接收 7 位有效数字,double 类型的数据接收 16 位有效数字 ( 在 Visual C++ 环境中 ) 所以, 在使用实型变量时应该注意以下两种情况 : 1) 实型常量没有加后缀 F( 或 f) 时, 系统默认为 double 类型进行处理, 具有较高精度 把该实型常量赋值给一个 float 类型的变量时, 系统会截取相应的有效位数进行赋值 2) 应避免将很大的数和一个很小的数进行加减运算, 否则会丢失 较小 的数 ( 参见例 2.7) 例 2.7 实型数据的舍入误差 #include<stdio.h> float a= ,b; b=a+1; printf("a=%f\n",a); printf("b=%f\n",b); 上面程序的运行结果如图 2-7 所示, 从运行结果来看,a 和 b 的值都是 这里产生误差的原因是 float 类型只能保证 7 位有效数字, 给 a 赋值只能保证前 7 位是准确的, 后面几位是无效数字, 把 1 加在无效数字上, 是无意义的 图 2-7 例 2.7 程序运行结果 (3) 字符型变量每个字符变量被分配一个字节的内存空间, 可以存放一个字符, 即字符变量的取值是一个字符常量 注意, 在字符变量的内存单元中存储的不是字符本身的形状, 而是该字符所对应的 ASCII 码值 因此,C 语言中可以把字符型数据作为整型数据进行处理 允许对整型变量赋以字符值, 也允许对字符变量赋以整型值 在输出时, 允许把字符变量按整型形式输出, 也允许把整型数据按字符形式输出 但要注意, 整型为 4 个字节, 字符为 1 个字节, 当整型按字符型量处理时, 只有低八位参与处理

43 32 计算机程序设计基础 例 2.8 字符型变量示例 #include<stdio.h> char a,b; a='x'; b='y'; a=a-32; b=b-32; printf("%c,%c\n%d,%d\n",a,b,a,b); 在上面的程序中,a b 被声明为字符变量并赋予字符值, 然后字符变量 a b 分别都减去 32(C 语言允许字符变量参与数值运算, 即用字符的 ASCII 码值参与运算 由于大小写字母的 ASCII 码值相差 32, 因此运算后把小写字母换成大写字母 ), 最后分别将 a b 的值以整型和字符型输出 程序运行结果如图 2-8 所示 图 2-8 例 2.8 程序运行结果 2.3 运算符与表达式把数据对象组织起来生成新的值, 该值与运算符的种类和数据对象的类型有关 运算符科学出版社位运算符 赋值运算符 条件运算符 逗号运算符等 ( 参见附录 B) 使用运算符需要注意以下几点 : 15 级最低 当然, 也可以用括号 ( ) 改变运算的优先级 在程序中对数据进行的各种处理操作, 是通过运算符指定的 表达式则是通过运算符 C 语言的运算符非常丰富, 可按不同方式分类 : 根据所需操作数的个数可分为单目运算符 双目运算符和三目运算符 ; 按照功能可分为算术运算符 关系运算符 逻辑运算符 职教技术出版中心 1) 运算符的功能 例如,+ - * / 运算符的功能分别为加 减 乘 除等算术运算 2) 对操作数 ( 即运算对象 ) 的要求 1 操作数的个数 如果运算符需要两个运算对象参加运算, 则称为双目运算符 ; 如果运算符只需要一个运算对象, 则称为单目运算符 2 操作数的数据类型 例如, 取模运算符要求参加运算的两个数据对象都是整型数据 3) 运算符的优先级 例如, 乘 除运算符的优先级高于加 减运算符的优先级, 即在表达式运算中先运算乘 ( 除 ), 后计算加 ( 减 ) 优先级有 15 级 ( 参见附录 B),1 级最高,

44 第 2 章数据类型 运算符与表达式 33 4) 运算的结合方向 从左至右或从右至左 如果一个操作数左右两侧有相同优先级别的运算符, 则按结合方向顺序运算 5) 运算结果 不同类型数据进行运算时, 要进行数据类型的转换, 这时要特别注意运算结果值的数据类型 1. 算术运算符算术运算符是最常用的数值运算符 5 个基本算术运算符如表 2.4 所示 表 2.4 算术运算符 运算符功能运算符功能 + 加法 / 除法 - 减法 ( 或取负 ) * 乘法 % 取模 ( 求余数, 表示两个整型数据相除后的余数, 余数的符号与被除数相同 ) 使用算术运算符时应注意以下几点 : 1) 对操作数的要求 :-( 取负 ) 需要 1 个操作数, 是单目运算,+ -( 减 ) * / 和 % 是双目运算 ;+ - * 和 / 均允许整型和实型, 取模运算符 % 要求两个运算对象都是整型数据 ( 参见例 2.9) 2) 优先级 : 从高到低为位于第 2 优先级的单目运算符 -( 取负 ), 位于第 3 优先级的双目运算符 * / 和 %, 位于第 4 优先级的双目运算符 + 和 -( 减 ) 3) 结合方向 : 单目运算符 -( 取负 ) 从右至左, 双目运算符 + -( 减 ) * / 和 % 均从左至右 4) 运算结果 :+ - * 和 / 在运算对象都是整型时, 结果为整型 ; 当运算对象中有一个实型时, 结果均为实型 对于除法运算符 (/) 尤其要注意这一点, 两个整数相除, 结果为整数, 其值是截取商的整数部分, 不允许四舍五入 例 2.9 除法运算符示例 #include<stdio.h> int a,b,c,d; a=8/5; b=8/-5; c=-8/5; d=-8/-5; printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d); 程序运行结果如图 2-9 所示 图 2-9 例 2.9 程序运行结果

45 34 计算机程序设计基础 例 2.10 取模运算符示例 #include<stdio.h> int a,b,c,d; a=8%5; b=8%-5; c=-8%5; d=-8%-5; printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d); 程序运行结果如图 2-10 所示 图 2-10 例 2.10 程序运行结果 2. 自增自减运算符 自增 (++) 和自减 (--) 运算符是两个特例殊的单目运算符 它们可以改变操作数 ( 变量 ) 的值,++ 使操作数加 1, 而 -- 使操作数减 1 例如,x++ 相当于 x=x+1,x-- 相当于 x=x-1 自增 (++) 和自减 (--) 运算符可以出现在操作数之前, 称为前置 ; 也可放在其后, 称为后置 操作数的前置与后置的运算结果是有区别的, 如表 2.5 所示 表 2.5 前置和后置运算 变量 x 初值表达式运算后 x 的值运算后表达式的值 2 ++x x x x 使用自增 (++) 和自减 (--) 运算符时应注意以下几点 : 1) 对操作数的要求 : 由于自增和自减可以改变操作数自身的值, 因此其运算对象只能是一个变量 整型 实型 字符型 指针类型变量均可作为其运算对象 2) 优先级 : 位于第 2 优先级, 高于双目算术运算符 + - * / 和 % 3) 结合方向 : 从右至左 4) 运算结果 : 要区分两个结果, 一个是表达式的结果, 一个是变量自身的结果 运算符前置时, 表达式的值和变量的值一致 ; 后置时两者的值不一致 例 2.11 自增运算(++ 前置 ) 示例 #include <stdio.h> 科学出版社职教技术出版中心

46 第 2 章数据类型 运算符与表达式 35 int a=5,b; b=++a; printf("a=%d,b=%d\n",a,b); 在上面的程序中, 变量 a 的初值为 5 当 a 执行 ++ 前置运算后,a 本身的值加 1 变为 6 而表达式 ++a 的值也为 6 并赋给变量 b 程序运行结果如图 2-11 所示 例 2.12 自减运算 (-- 后置 ) 示例 #include <stdio.h> int a=5,b; b=a--; printf("a=%d,b=%d\n",a,b); 图 2-11 例 2.11 程序运行结果 在上面的程序中, 变量 a 的初值为 5 当 a 执行 -- 后置运算后,a 本身的值减 1 变为 4 而表达式 a-- 的值为 5 并赋给变量 b 程序运行结果如图 2-12 所示 例 2.13 自增自减综合应用 #include <stdio.h> int i=8; printf("%d\n",++i); printf("%d\n",--i); printf("%d\n",i++); printf("%d\n",i--); printf("%d\n",-i++); printf("%d\n",-i--); 图 2-12 例 2.12 程序运行结果

47 36 计算机程序设计基础 在上面的程序中 : 1) 变量 i 的初值为 8 2) 第 5 行中 ++ 前置,i 加 1 变为 9, 表达式 ++i 的值也为 9, 所以输出 9 3) 第 6 行中 -- 前置,i 减 1 变为 8, 表达式 --i 的值也为 8, 所以输出 8 4) 第 7 行中 ++ 后置,i 再加 1 变为 9, 而表达式 i++ 的值为 8, 所以输出 8 5) 第 8 行中 -- 后置,i 再减 1 变为 8, 而表达式 i-- 的值为 9, 所以输出 9 6) 第 9 行中 ++ 后置,i 再加 1 变为 9, 而表达式 i++ 的值为 8, 再加上前面的负号, 所以输出 -8 7) 第 10 行中 -- 后置,i 再减 1 变为 8, 而表达式 i-- 的值为 9, 再加上前面的负号, 所以输出 -9 程序运行结果如图 2-13 所示 图 2-13 例 2.13 程序运行结果 注意 : 自增和自减运算符在理解和使用上容易出错, 特别是当它们出现在较复杂的表达式或语句中时, 常常难以弄清, 因此应仔细分析 编程时应尽可能简单清晰, 最好不要使用类似 k=(i++)+(++j) 的形式 3. 赋值运算符 在 C 语言里, 符号 = 表示的不是数学上 相等 的含义, 而是一个赋值运算符 其作用是将一个数据值赋给一个变量 例 2.14 赋值运算符示例 #include <stdio.h> int a; a=20; 科学出版社职教技术出版中心 在上面的程序中, 语句 a=20; 的作用是 将值 20 赋给变量 a 通过赋值运算符给变量赋值, 是变量获取值的一种常见方式 表达式 i=i+1 在数学上是没有意义的, 因为一个有限数加 1 后不会 等于 原来那个值 但在 C 语言中, 它是一个合理的赋值表达式, 其作用是将 i 的值加 1, 得到一个新值, 再将该新值赋给变量 i,i 的值被修改了

48 第 2 章数据类型 运算符与表达式 37 使用赋值运算符时应注意以下几点 : 1) 对操作数的要求 : 赋值运算符是双目运算, 其左边的运算对象只能是单个变量, 表示给该变量的存储空间赋值或修改该存储空间中的值 赋值运算符右边应该是一个能计算出确定的值的表达式 ( 可以是常量 变量 ) 2) 优先级 : 优先级较低, 位于第 14 优先级, 仅高于逗号运算符 3) 结合方向 : 从右至左 在连续赋值时, 按从右到左的顺序依次进行 例如, a=b=c=5; 先计算 c=5, 再计算 b=(c=5), 最后计算 a=(b=c=5), 变量 a b c 的值都是 5 要注意的是, 前面介绍的变量的初始化与连续赋值是有区别的 初始化每次只能对一个变量进行, 如 int a=b=c=5; 这种初始化形式是错误的, 必须对每个变量分开进行初始化 4) 运算结果的类型 : 即左边变量的数据类型 当赋值运算符左右类型不一致时, 需要进行类型转换, 将右边的类型转换为左边的类型, 这种转换是系统自动进行的 因此, 赋值时要尽可能保证类型一致或左边类型存储长度大于右边类型, 否则可能会有数据丢失 简单赋值运算的数据类型转换举例如下, 具体转换规则将在 节中详细介绍 例 2.15 实型转换为整型 #include <stdio.h> int a; float b=3.58; a=b; printf("a=%d\n",a); 程序运行结果如图 2-14 所示 例 2.16 整型转化为实型 #include <stdio.h> int a=3; float b; b=a; printf("b=%f\n",b); 程序运行结果如图 2-15 所示 图 2-14 例 2.15 程序运行结果

49 38 计算机程序设计基础 例 2.17 字符型转化为整型 #include <stdio.h> int a; char b='b'; a=b; printf("a=%d\n",a); 程序运行结果如图 2-16 所示 图 2-15 例 2.16 程序运行结果 例 2.18 整型转化为字符型 #include <stdio.h> int a=322; char b; b=a; printf("b=%c\n",b); 图 2-16 例 2.17 程序运行结果 科学出版社职教技术出版中心 程序运行结果如图 2-17 所示 除了简单赋值运算, 赋值运算符还可与算术运算符和位运算符组成复合赋值运算符 共 10 种 :+=,-=,*=,/=,%=,<<=,>>=,&=, =,^= 其中后 5 种是有关位运算的, 位运算将稍后介绍 复合赋值运算符的优先级与赋值运算符的优先级相同, 且结合方向也一致 图 2-17 例 2.18 程序运行结果

50 第 2 章数据类型 运算符与表达式 39 复合赋值运算符使用的一般形式为 : < 变量 >< 双目运算符 >=< 表达式 > 等价于 : < 变量 >=< 变量 >< 双目运算符 >< 表达式 > 例如 : n+=1 等价于 n=n+1 x*=y+1 等价于 x=x*(y+1) k>>=i+k 等价于 k=k>>(i+k) 注意 : 使用复合赋值运算符时, 其右边的表达式应看作一个整体, 这一点很重要 4. 关系运算符 在程序中经常需要比较两个量的大小, 以决定程序下一步的执行过程 关系运算的功能就是比较两个运算对象的大小关系 如果描述的大小关系成立, 结果为 真, 用 1 表示 ; 不成立则结果为 假, 用 0 来表示 C 语言提供了 6 种关系运算符 : 小于 (<) 小于等于(<=) 大于(>) 大于等于(>=) 等于 (==) 不等于(!=) 关系运算符都是双目运算符, 其结合性均为左结合性 例 2.19 关系运算示例 #include <stdio.h> int a=1,b=2,c=3,d=4; /* 声明变量 a,b,c,d 并初始化 */ printf("%d\n",a+b>c+d); printf("%d\n",a<=2*b); printf("%d\n",'a'<'d'); printf("%d\n",a!=(c==d)); 在上面的程序中 : 1) 表达式 :a+b>c+d 1 先计算 :a+b=3,c+d=7 2 比较 :a+b>c+d, 则 3>7 不成立 结果为 : 假, 表示为 0 2) 表达式 :a<=2*b 1 先计算 :a 为 1,2*b 为 2*2 即 4 2 比较 :a<=2*b, 则 1<=4 成立 结果为 : 真, 表示为 1 3) 表达式 :'a'<'d' 1 字符 'a' 的 ASCII 码值为 97, 字符 'd' 的 ASCII 值为 比较 :'a'<'d', 则 97<100 成立 结果为 : 真, 表示为 1

51 40 计算机程序设计基础 4) 表达式 :a!=(c==d) 1 先计算 :c=3,d=4 2 比较 :c==d, 则 3==4 不成立 3 表达式 (c==d) 的结果为假, 值为 0 4 a=1,(c==d) 为 0 5 比较 :a!=(c==d), 则 1!=0 成立 结果为 : 真, 表示为 1 程序运行结果如图 2-18 所示 图 2-18 例 2.19 程序运行结果 使用关系运算符时应注意以下几点 : 1) 对操作数的要求 :6 种关系运算符均为双目运算 两个运算对象类型可以一致, 也可以不一致 类型不一致时, 系统会自动转换为同一种类型 ( 在 节中介绍 ), 再进行比较 2) 优先级 : 所有关系运算符优先级均低于算术运算符 而其中表示大小关系比较的运算符 (< <= > 和 >=) 位于第 6 优先级, 高于第 7 优先级的表示相等和不相等关系的运算符 (== 和!=) 3) 结合方向 : 从左至右 4) 运算结果 : 整型, 并且只有两种可能值 数值 1 0, 分别表示真和假 5. 逻辑运算符 在程序设计中, 有时要求一些条件同时成立, 有时只要求其中一个条件成立即可, 这就要用到逻辑运算符 C 语言提供了 3 种逻辑运算符, 表 2.6 所示为逻辑运算具体的真值表 1)&&: 逻辑与, 双目运算符, 两个运算对象同时为真时, 运算结果才为真, 否则为假 2) : 逻辑或, 双目运算符, 两个运算对象中任意一个为真时, 运算结果就为真, 同时为假时结果为假 3)!: 逻辑非, 单目运算符, 对运算对象的值取反, 运算对象为真结果为假, 运算对象为假结果为真 表 2.6 逻辑运算真值表 科学出版社职教技术出版中心 a b!a a&&b a b 真 真 假 真 真 真 假 假 假 真 假 真 真 假 真 假 假 真 假 假

52 第 2 章数据类型 运算符与表达式 41 例 2.20 逻辑运算示例 #include<stdio.h> char ch; printf("input a letter:"); scanf("%c",&ch); /* 输入一个字母 */ if(!(ch>='a'&&ch<='z' ch>='a'&&ch<='z')) printf("input error!\n"); /* 如果输入的不是字母则提示错误 */ 在上面的程序中, 分别用表达式 ch>='a'&&ch<='z' 判断字符变量 ch 的值是否是大写字母,ch>='a'&&ch<='z' 判断是否是小写字母, 那么表达式 ch>='a'&&ch<='z' ch>='a'&&ch<='z' 则判断是否是大写或者小写字母, 即判断是否是任意字母, 再进行逻辑非运算, 即判断是否是非英文字母 输入 # 时, 程序运行结果如图 2-19 所示 图 2-19 例 2.20 程序运行结果注意 : 要表达变量属于某一段范围时, 需要借助逻辑运算符, 如例 2.20 中判断是否是大写字母, 如果用表达式 'A'<=ch<='Z' 虽然语法正确, 但结果并不正确, 输入 ch 值为 '#'(ASCII 码值为 35) 时, 从左到右进行计算,'A'<=ch 结果为 0,0<='Z' 结果为 1, 表达式结果为真, 即 '#' 是大写字母, 显然是错误的结果 因此必须借助逻辑与运算符表示为 ch>='a'&&ch<='z' 使用逻辑运算符时应注意以下几点 : 1) 对操作数的要求 : 任何类型的值都可以作为逻辑运算的对象, 不同类型的运算对象也可以混合运算 逻辑运算只对运算对象以 0 和非 0 值来区分, 所有非 0 的运算对象都看作真, 值为 0 的运算对象则看作假 2) 优先级 : 单目运算符逻辑非 (!) 位于第 2 优先级, 其余逻辑运算符优先级均低于关系运算符 而其中逻辑与 (&&) 位于第 11 优先级, 高于第 12 优先级的逻辑或 ( ) 3) 结合方向 : 从左至右 4) 运算结果 : 整型, 并且只有两种可能值 : 数值 1 0, 分别表示真和假 从逻辑运算真值表可以看出, 逻辑与 逻辑或有如下特点 : 1)a&&b: 当 a 为 0 时, 不管 b 为何值, 结果均为 0 2)a b: 当 a 为 1 时, 不管 b 为何值, 结果均为 1 C 语言规定在进行逻辑与运算时, 如果左边运算对象为 0, 则不需计算右边的运算对象, 直接判断逻辑运算的结果为 0; 而进行逻辑或运算时, 如果左边运算对象为 1, 则不需计算右边的运算对象, 直接判断逻辑运算的结果为 1 也就是说, 逻辑与 逻辑或这两个运算符有很特别的 短路 功能, 即不管进行单个

53 42 计算机程序设计基础 还是连续的逻辑运算, 严格按照从左到右的方向 当根据左边的运算对象已经能判断整个逻辑表达式的结果时, 不再计算右边的运算对象 例 2.21 逻辑运算的 短路 功能示例 #include<stdio.h> int a=3,b=4,m=5,n=5,x,y; x=(a>b)&&(m=1); y=(a<b) (n=0); printf("x=%d,y=%d\n",x,y); printf("m=%d,n=%d\n",m,n); 在上面的程序中, 表达式 (a>b)&&(m=1), 根据 && 的特点, 当左边的运算对象为 0 时, 因为与运算的两个对象只要有一个为 0, 则结果为 0, 这时已经能够判断出表达式的结果为 0, 不再需要继续计算右边的运算对象 (m=1) 那么 m 没有被重新赋值, 依然是原来的值 5 同理, 表达式 (a<b) (n=0) 的结果仅根据第 1 个运算对象 (a<b) 即可判断为 1,n 也没有被重新赋值, 依然是原来的值 5 程序运行结果如图 2-20 所示 6. 逗号运算符 图 2-20 例 2.21 程序运行结果 在 C 语言中, 逗号除了作为分隔符使用以外, 还可以作为一种运算符使用 可以用它将两个或更多个表达式连接起来, 一般形式为 : 表达式 1, 表达式 2,, 表达式 n 求解过程 : 从左至右依次执行每个子表达式, 先求表达式 1 的值, 再求表达式 2 的值,, 最后求解表达式 n 的值 表达式 n 的值为整个逗号表达式的值 注意 : 使用逗号时应分清究竟是作为运算符还是分隔符 主要根据逗号在程序中所出现的位置来判断 : 如果出现在表达式中则是运算符, 如果出现在变量的声明或函数参数表中则是分隔符 例 2.22 逗号运算示例一 #include<stdio.h> int x,a; x=a=2*3,a*4,a+5; printf("x=%d,a=%d\n",x,a); 科学出版社职教技术出版中心

54 第 2 章数据类型 运算符与表达式 43 在上面的程序中, 赋值运算符优先级高于逗号运算符 先计算子表达式 x=a=2*3,a 和 x 被赋值为 6, 再计算子表达式 a*4, 值为 24, 最后计算子表达式 a+5, 值为 11 整个表达式的结果取子表达式 a+5 的值, 即 11 程序运行结果如图 2-21 所示 例 2.23 逗号运算示例二 #include<stdio.h> int x,a; x=(a=2*3,a*4,a+5); printf("x=%d,a=%d\n",x,a); 图 2-21 例 2.22 程序运行结果 在上面的程序中, 加圆括号 ( ) 后, 先计算括号中的逗号表达式 a=2*3,a*4,a+5 其中先计算子表达式 a=2*3,a 被赋值为 6, 再计算子表达式 a*4, 值为 24, 最后计算子表达式 a+5, 值为 11 整个逗号表达式的结果取子表达式 a+5 的值 11, 再赋给 x 程序运行结果如图 2-22 所示 图 2-22 例 2.23 程序运行结果使用逗号运算符时应注意以下几点 1) 对操作数的要求 : 两个或者更多任何类型的子表达式 2) 优先级 : 优先级最低, 位于第 15 优先级 3) 结合方向 : 从左至右 4) 运算结果 : 最后一个子表达式的值作为整个逗号表达式的结果 注意, 这并不代表只需要执行最后一个子表达式, 前面所有的子表达式都必须按从左至右的顺序执行一遍 7. 条件运算符条件运算符是三目运算符, 由两个符号?: 组成, 需要 3 个运算对象 一般形式为 : 表达式 1? 表达式 2: 表达式 3

55 44 计算机程序设计基础 求解过程 : 若表达式 1 的值为真 ( 非 0), 则执行表达式 2, 其结果作为整个条件表达 式的值, 否则执行表达式 3, 其结果作为整个条件表达式的值 例 2.24 条件运算符示例 #include<stdio.h> int a=2,b=1, m=6,n=6,x; x=a>b?(m=0):(n=0); printf("x=%d,m=%d,n=%d\n",x,m,n); 在上面的程序中, 因为表达式 a>b 为真, 执行表达式 (m=0),m 被重新赋值为 0, 表达式 (n=0) 没被执行,n 依然是原来的值 6 整个条件表达式的值取表达式(m=0) 的值 0, 程序运行结果如图 2-23 所示 图 2-23 例 2.24 程序运行结果 例 2.25 输入两个数, 求其中较大的数和较小的数 #include<stdio.h> int a,b,max,min; printf("input a="); scanf("%d",&a); // 输入变量 a printf("input b="); scanf("%d",&b); // 输入变量 b max=a>b?a:b; // 如果 a>b, 则 max=a; 否则,max=b min=a<b?a:b; // 如果 a<b, 则 min=a; 否则,min=b printf("max=%d,min=%d\n",max,min); // 输出结果 当分别从键盘输入 5 和 8 时, 程序运行结果如图 2-24 所示 科学出版社职教技术出版中心 图 2-24 例 2.25 程序运行结果

56 第 2 章数据类型 运算符与表达式 45 使用条件运算符时应注意以下几点 : 1) 对操作数的要求 : 可以是 3 个任意类型的表达式 其中表达式 1 表示条件, 虽然通常是条件表达式或逻辑表达式, 但其他类型的表达式也可以, 只要看它的值是 0 还是非 0 2) 优先级 : 优先级高于赋值运算符, 位于第 13 优先级 3) 结合方向 : 从右至左 条件运算符嵌套使用时, 根据结合方向按从右至左的顺序依次计算 ( 参见例 2.26) 4) 运算结果 : 由表达式 1 的真与假决定是表达式 2 还是表达式 3 作为整个条件表达式的结果 例 2.26 条件运算符的嵌套使用 #include<stdio.h> int a=5,b=9,c=6,m; m=a>b?a:b>c?b:c; printf( m=%d\n,m); 在上面的程序中, 条件运算符优先级高于赋值运算符 表达式 m=a>b?a:b>c?b:c 按从右至左的结合方向, 相当于表达式 m=a>b?a:(b>c?b:c) 先计算 b>c?b:c, 因为 b>c 为真, 结果取 b 的值 9 再计算 a>b?a:9, 因为 a>b 为假, 结果为 9 程序运行结果如图 2-25 所示 图 2-25 例 2.26 程序运行结果 8. 位运算符前面介绍的运算符都是以字节为单位进行运算的 由于 C 语言可直接对硬件编程, 在系统软件设计中要求能对位进行运算, 因此,C 语言提供了 6 种位运算符, 支持位运算等汇编操作 这 6 种位运算符可分为两大类 : 位逻辑运算 (& 按位与 按位或 ^ 按位异或 ~ 按位取反 ) 和位移动运算 (<< 左移位 >> 右移位 ) 运算对象个数 优先级及结合方向如表 2.7 所示 表 2.7 位运算符 运算符 功 能 运算对象个数 优先级 结合方向 ~ 按位取反 单目 2 从右至左 << 左移位 双目 5 从左至右 >> 右移位 双目 5 从左至右 & 按位与 双目 8 从左至右

57 46 计算机程序设计基础 运算符功能运算对象个数优先级结合方向 ^ 按位异或双目 9 从左至右 按位或双目 10 从左至右 位逻辑运算是以数据的二进制数位进行运算的, 位移动运算是按二进制位数进行左移和右移 具体说明如下 (1) 位逻辑运算位逻辑运算真值表如表 2.8 所示 表 2.8 位逻辑运算真值表 a b ~a( 按位取反 ) a&b( 按位与 ) a b( 按位或 ) a^b( 按位异或 ) ) 按位取反, 运算符为 ~ 把该运算对象的每个二进制位取反 例如,~5, 运算如下 ( 只列出了最低的 8 个二进制位 ): ~ 例 2.27 按位取反运算示例 #include<stdio.h> int x=5,y; y=~x; printf("~5=%d\n",y); 在上面的程序中, 将整数 5( 二进制为 ) 取反后得 , 最高位是 1, 表示负数 该负数的补码还原成原码是 , 即 -6 程序运行结果如图 2-26 所示 图 2-26 例 2.27 程序运行结果 2) 按位与, 运算符为 & 两个运算对象中对应的二进制位都是 1, 则该位结果为 1; 否则, 结果为 0 按位与运算通常用来对某些二进制位清 0 或保留某些二进制位 在需要清 0 的位置上, 将与它进行与运算的运算对象的对应的二进制位置 0; 需要保留原值的位置, 则将对应的二进制位置 1 续表 科学出版社职教技术出版中心

58 第 2 章数据类型 运算符与表达式 47 例如, 要保留 155 的最低 3 位不变, 其余置 0, 可用 155&7 来实现, 运算如下 ( 只列 出了最低的 8 个二进制位 ): (155 的二进制形式 ) & (7 的二进制形式 ) ( 结果为 3) 3) 按位或, 运算符为 两个运算对象中对应的二进制位有一个是 1, 则该位结果 为 1; 否则, 结果为 0 按位或运算通常用来对某些二进制位置 1 或保留某些二进制位 在 需要置 1 的位置上, 将与它进行或运算的运算对象的对应的二进制位置 1, 需要保留原值 的位置, 则将对应的二进制位置 0 例如, 要保留 129 的最低 3 位不变, 其余置 1, 可用 来实现, 运算如下 ( 只列 出了最低的 8 个二进制位 ): (129 的二进制形式 ) (248 的二进制形式 ) ( 结果为 249) 4) 按位异或, 运算符为 ^ 两个运算对象中对应的二进制位相同 ( 都是 1 或都是 0), 则该位结果为 0; 不相同则结果为 1 例如,155^129, 运算如下 ( 只列出了最低的 8 个二进制位 ): ^ 再看下面两个运算 : ^ ( 二进制位全为 1) ^ ( 二进制位全为 0) 可以看出, 当某个数与全 1 的数进行按位异或运算时, 结果与对该数按位取反相同 ; 当某个数与全 0 的数进行按位异或运算时, 结果还是该数本身 (2) 位移动运算位移动运算表达式的语法格式为 : 运算数据位移动运算符移动位数 1) 左移位, 运算符为 << 把左边的运算数据的全部向左移指定的位数, 高位丢弃, 低位补 0 例如,a 的值为 5,a<<2 则是把 a 的二进制位全部向左移动 2 位, 即 5 的二进制 左移 2 位后为 ( 十进制数为 20), 相当于 a 乘以 2 2 2) 右移位, 运算符为 >> 把左边的运算数据的全部向右移指定的位数, 低位丢弃, 对于正数, 高位补 0, 负数的符号位为 1, 最高位补 1 还是补 0 取决于编译器, 多数情况是补 1

59 48 计算机程序设计基础 例如,a 的值为 15,a>>2 则是把 a 的二进制位全部向右移动 2 位, 即 15 的二进制 右移 2 位后为 ( 十进制数为 3), 相当于 a 除以 2 2 取整 9. 其他运算符 1)sizeof( ) 运算符, 单目运算, 第 2 优先级, 结合方向是从右至左, 该运算符的功能 是计算数据类型所占的字节数 一般形式为 : sizeof( 变量名 数据类型标识符 表达式 ) 例 2.28 sizeof( ) 运算符示例 #include<stdio.h> int a=5; float x=3.2,y=6.4; printf("%d\n",sizeof(a)); /* 计算变量 a 的数据类型所占字节数 */ printf("%d\n",sizeof(char)); /* 计算数据类型 char 所占字节数 */ printf("%d\n",sizeof(x+y)); /* 计算表达式 x+y 的结果的数据类型所占字节数 */ printf("%d\n",sizeof(double)); /* 计算数据类型 double 所占字节数 */ 程序运行结果如图 2-27 所示 图 2-27 例 2.28 程序运行结果 2)( ) 运算符, 第 1 优先级, 结合方向是从左至右, 该运算符的功能是用来改变表达式中其他运算符计算的优先顺序 另外,( ) 也可用于表示函数参数列表, 具体使用将在第 4 章中介绍 3)[ ] 运算符, 第 1 优先级, 结合方向是从左至右 该运算符的功能是表示数组元素下标, 具体使用将在第 5 章中介绍 4)& 运算符, 取地址运算符, 第 2 优先级, 结合方向是从右至左 在程序运行时, 所有的程序和数据都存放在内存中 内存是以字节为单位的连续的存储空间, 每个内存单元都有一个编号, 这个编号称为内存地址 每个变量都有自己的内存地址, 可以使用 & 运算符获取该地址 运算符 & 只能用于普通变量, 不能用于表达式或常量 具体使用将在第 6 章中介绍 5)* 运算符, 指针运算符, 第 2 优先级, 结合方向是从右至左 该运算符的功能是取指针 ( 地址 ) 所对应的存储单元的内容, 具体使用将在第 6 章中介绍 6)( 类型说明符 ), 强制类型转换运算符, 第 2 优先级, 结合方向是从右至左 该运算符的功能是将运算对象转换为括号中说明的类型, 具体使用将在 节中详细介绍 科学出版社职教技术出版中心

60 第 2 章数据类型 运算符与表达式 49 7)-> 运算符, 第 1 优先级, 结合方向是从左至右 该运算符的功能是通过结构指针引 用结构体成员, 具体使用将在第 7 章中介绍 8). 运算符, 第 1 优先级, 结合方向是从左至右 该运算符的功能是通过结构变量引 用结构体成员, 具体使用将在第 7 章中介绍 表达式 运算符提供了对数据的最基本操作, 这些基本操作可以组合生成更复杂的数据处理, 即表达式 表达式由运算符与数据对象组合而成 由于运算符的种类很多, 对应的表达式也有很多种, 如算术表达式 关系表达式 逻辑表达式和赋值表达式等 数据对象可以是多种类型的常量 变量 函数, 也可以是表达式, 从而组合成更复杂的表达式 表达式运算后只会产生一个结果, 该结果是具有某种数据类型的数值 表达式的值与运算符的种类和运算对象的类型有关 当表达式中包含多个运算符时, 运算的执行顺序对表达式的值有相当重要的影响 C 语言中, 运算符执行顺序通常由运算符的优先级和结合方向控制 优先级较高的运算符先于优先级较低的执行, 如生活中常说的先乘除后加减 结合方向则控制具有相同优先级的多个运算符的执行顺序, 如表达式 3*4/5,* 与 / 优先级相同, 将按结合方向从左至右进行运算, 计算结果为 2, 而不是 类型转换 表达式的值除了数值大小, 还有数据类型 在表达式的计算过程中, 不同数据类型进行混合运算时需要进行类型转换 C 语言提供了 3 种类型转换方式 : 自动类型转换 强制类型转换和赋值时的类型转换 1. 自动类型转换 表达式中不同类型的运算对象, 先将其中数据类型长度较长的运算对象进行类型转换, 然后再进行同类型运算 整个表达式的类型为表达式中的数据类型长度最长的运算对象类型 这种转换由编译器自动完成, 称为自动类型转换, 也称隐式类型转换 转换是按数据长度较长的方向进行, 目的是防止计算过程中数据被截断, 保证计算结果的精度 转换规则如图 2-28 所示, 其中水平方向上的转换是必须进行的, 即所有的 float 类型数据都是转换成 double 类型以后进行运算的 ; 水平方向转换后, 如果仍有不同类型, 则按纵向箭头标识的方向进行转换 图 2-28 自动类型转换规则 例 2.29 自动类型转换示例 #include <stdio.h> printf("%f\n",3/4*2.5); printf("%f\n",2.5*3/4);

61 50 计算机程序设计基础 在上面的程序中 : 1) 表达式 3/4*2.5, 两个整型数据的除法运算 3/4, 结果为整型, 再转换为实型与 2.5 相乘, 结果为实型 2) 表达式 2.5*3/4, 实型与整型相乘 2.5*3, 先进行类型转换, 整型转换为实型再相乘, 结果为实型 ; 实型除以整型, 同样先进行类型转换, 整型转换为实型再相除, 结果为实型 程序运行结果如图 2-29 所示 图 2-29 例 2.29 程序运行结果 2. 强制类型转换 强制类型转换也称显式转换, 是用强制类型转换运算符将运算对象转换为需要的数据类型 一般形式为 : ( 目标类型说明符 ) 表达式例如, 设 folat x=7.5, 则 x%3 显然不符合要求 因为只能对整型数据进行取余运算, 所以需要用到强制类型转换,(int)x%3 即 7%3 3. 赋值时的类型转换 在赋值运算符中已经提到过, 当赋值运算符左右类型不一致时, 需要进行类型转换 将右边的类型转换为左边的类型, 这种转换是系统自动进行的, 遵循以下规则 : 1) 实型数据赋值给整型变量时, 直接取整, 舍弃小数部分 例如, 整型变量 i,i=5.68, 则 i 的值为 5 2) 字符型或整型数据赋值给实型数据时, 数值不变, 但要补足相应的有效位数, 以实型数据存储到变量中 3) 单精度实型赋值给双精度实型时, 数值不变, 有效位数扩展到 16 位, 以 8 个字节存储 ; 双精度实型赋值给单精度实型时, 只截取前面 7 位有效数字, 以 4 个字节存储, 这时应注意数据是否溢出 4) 字符型数据赋值给整型变量时, 将 ASCII 码值赋给最低的 8 位, 若字符的最高位为 0, 则其余位全部补 0, 若字符的最高位为 1, 则其余位全部补 1 5) 整型数据赋值给字符型变量时, 只截取最低的 8 位赋给字符型变量 6)int 或 long 类型数据赋值给 short 类型变量时, 只截取最低的 16 位赋给 short 类型变量 ;short 类型数据赋值给 int 或 long 类型变量时, 将数据直接赋给最低的 16 位, 其余位按原 short 类型的最高位扩展, 全部补 0 或全部补 1 7)unsigned 类型数据赋值给长度相同的非 unsigned 类型变量时, 直接传送数据 ; 非 科学出版社职教技术出版中心

62 第 2 章数据类型 运算符与表达式 51 unsigned 类型数据赋值给长度相同的 unsigned 类型变量时, 连符号位一起作为数值进行数据赋值 注意 : 无论采用上述三种类型转换中的哪一种, 都不改变被转换数据原来的类型和数值 在表达式计算过程中, 为了满足当前需要, 只对数据进行暂时的转换, 生成一个临时的值, 并不影响原数据 2.4 标准输入 / 输出函数 用户需要把计算机要处理的数据输入到计算机中, 而计算机也要将数据的处理结果按人能识别的方式输出 C 语言程序中, 数据的输入 / 输出由库函数实现, 使用前要用预处理命令 #include 将对应的头文件包含到文件中 这里只介绍几种基本的输入 / 输出函数, 要用到的头文件是 stdio.h 文件开头应有预处理命令: #include <stdio.h> 或 #include stdio.h printf( ) 函数 printf( ) 函数称为格式化输出函数, 它能够按用户指定的格式输出多种类型的数据, 其一般形式为 : printf(" 格式控制字符串 ", 输出列表 ); 其中, 格式控制字符串用来指定输出格式, 由格式字符串和非格式字符串组成 输出列表是要输出的各个数据对象 格式字符串是以 % 开头的字符串, 在 % 后面跟有各种格式字符, 用来说明输出数据的类型 形式 长度 小数位数等 例如, %d 表示按十进制整型输出, %ld 表示按十进制长整型输出, %c 表示按字符型输出等 ( 表 2.9) 表 2.9 格式字符及含义 格式字符 含 义 d 以十进制形式输出带符号整数 ( 默认正数不输出符号 ) o 以八进制形式输出无符号整数 ( 默认不输出前缀 0) x 或 X 以十六进制形式输出无符号整数 ( 默认不输出前缀 0x) u f e 或 E g 或 G c s 以十进制形式输出无符号整数以小数形式输出单 双精度实数以指数形式输出单 双精度实数以 %f 或 %e 中输出宽度较短的形式输出单 双精度实数输出单个字符输出字符串 格式字符串和输出列表中的各个输出项在个数和类型上要求按顺序一一对应 输出项可以是常量 变量或表达式

63 52 计算机程序设计基础 输出时, 格式控制字符串中的非格式字符按原样显示, 主要起提示作用 格式字符串 的位置显示对应的输出项的值 例 2.30 printf( ) 函数的使用示例 #include <stdio.h> char ch='a'; printf("ch=%d,the capital:%c\n",ch,ch-32); 在上面的程序中,printf( ) 函数格式控制字符串中的非格式符 ch=,the capital: 照原样输出 转义字符 '\n' 输出换行, 两个格式符 %d 和 %c 的位置则对应地分别以十进制整数形式输出 ch 的值和以字符形式输出 ch-32 的值 程序运行结果如图 2-30 所示 图 2-30 例 2.30 程序运行结果 格式控制字符串中的非格式符可以是普通字符, 也可以是转义字符, 实际上格式控制字符串由三部分组成 1) 普通字符 : 输出时按原样输出, 用于输出提示信息 2) 转义字符 : 无法用单个字符描述的一些特定操作, 如 \n( 换行 ) \t( 跳到下一个水平制表位 ) 等 3) 格式说明符 : 由 % 加格式字符串组成, 表示按规定的格式输出数据 % 格式字符 是最简洁的格式说明, 通过格式字符用来指定数据输出的类型 具体字符和含义如表 2.9 所示 完整的格式说明部分还可以加入一些修饰符, 一般形式为 : %[ 标志 ][ 域宽 ][. 精度 ][ 长度 ] 格式字符其中,[ ] 为可选项, 说明如下 : 1) 标志 : 可使用 - + 空格 # 和 0 共 5 种标志字符, 具体含义如表 2.10 所示 表 2.10 标志字符及含义 科学出版社职教技术出版中心 标志字符 含 义 - 结果左对齐, 数据长度小于域宽时右边补充空格 + 输出符号 ( 正号或负号 ) 空格 输出值为正数且没有输出正号时冠以空格 只对部分类型格式字符有影响 ; 对 o 类, 在输出时加前缀 0; 对 x 类, 在输出时加前缀 0x; 对 e,g,f 类, # 当结果有小数时才显示出小数点 0 数据长度小于域宽时, 不足位数用 0 补充

64 第 2 章数据类型 运算符与表达式 53 2) 域宽 : 指定数据显示在输出设备上所占的总宽度 若数据的实际位数多于指定宽度, 则按实际位数输出 ; 若实际位数少于指定宽度, 则数据通常会在指定宽度内右对齐, 不足部分以空格 ( 或指定以 0) 补齐 3) 精度 : 精度格式符以. 开头, 后跟十进制整数, 用来指定数据输出的精度 其意义是, 如果输出值为整数, 则表示可以输出数字的最少个数 若整数位数少于指定精度, 就在整数前面加 0, 补齐指定的最小数字个数 ; 如果输出值为实数, 则表示小数的位数默认为 6 位 ; 如果输出的是字符串, 则表示输出字符的个数 注意 : 若实际位数大于所定义的精度数, 则截去超过的部分, 若是实数会对小数部分四舍五入 4) 长度 : 长度格式符为 h,l 两种,h 表示按短整型输出,l 表示按长整型输出 例 2.31 格式输出示例 #include <stdio.h> int a=123; float b= ; double c= ; char ch='f'; printf("a=%d,%8.5d,%08d,%o,%#x\n",a,a,a,a,a,a); printf("b=%f,%-10.3f,%e,%g\n",b,b,b,b); printf("c=%f,%8.4f,%g\n",c,c,c); printf("ch=%c,%8c\n",ch,ch); printf("%s,%.4s\n","abcdef","abcdef"); 程序运行结果如图 2-31 所示 图 2-31 例 2.31 程序运行结果 注意 : 使用 printf( ) 函数时, 输出顺序是从左到右, 但是输出列表中的各输出项的求值顺序, 不同的编译器不一定相同 有的从左到右, 也有的从右到左 Visual C++ 是按从右到左进行的, 如例 2.32 所示 例 2.32 printf( ) 函数输出项求值顺序示例 #include <stdio.h>

65 54 计算机程序设计基础 int a=5,a1,a2; printf("a1=%d,a2=%d\n", a1=(a=a+3),a2=(a=a+2)); 程序运行结果如图 2-32 所示 由程序运行结果可以看出, 先执行子表达式 a=a+2,a 的值为 7, 后执行 a=a+3,a 的值变为 10, 其求值顺序是从右到左的 最后按从左到右的顺序输出表达式 a1=(a=a+3) 和 a2=(a=a+2) 的值分别为 10 和 7 图 2-32 例 2.32 程序运行结果 使用 printf( ) 函数时, 还可以只有格式控制字符串而没有输出项 格式控制字符串中通常为非格式字符串, 此时该语句仅作为提示信息用 例 2.33 printf( ) 函数中没有输出项示例 #include <stdio.h> printf("please input two number:\n"); 程序运行结果如图 2-33 所示 在屏幕上显示 please input two number:, 作为用户输入数据前的提示 scanf( ) 函数 图 2-33 例 2.33 程序运行结果 科学出版社职教技术出版中心 scanf( ) 函数称为格式化输入函数, 即按用户指定的格式从键盘上把数据输入到指定的变量中 scanf( ) 函数也是给变量赋值的一种方式, 其一般形式为 : scanf(" 格式控制字符串 ", 地址列表 ); 其中, 格式控制字符串用来指定数据的输入格式, 由格式字符串和非格式字符串组成 地址列表是需要读入数据的各变量的地址 地址可以通过 & 运算符取得, 如 &a 表示 a 的地址 与 printf( ) 函数一样, 格式字符与输入数据在个数和类型上也要按顺序一一对应 在输入时, 格式控制字符串中的非格式字符部分要按原样输入, 格式字符的位置则输入与之对应类型的数据

66 第 2 章数据类型 运算符与表达式 55 scanf( ) 函数格式控制字符串中的非格式字符串是普通字符序列 而格式字符串由 % 和格式字符组成, 还可以加入一些可选项, 一般形式为 : %[*][ 输入数据宽度 ][ 长度 ] 格式字符其中, 有方括号 [ ] 的项即为可选项, 各项说明如下 : 1) 格式字符 : 指定输入数据的类型, 具体字符和含义如表 2.11 所示 表 2.11 格式字符及含义 格式字符含义 ( 输入类型 ) d 输入十进制整数 o 输入八进制整数 ( 可以以 0 开头, 也可以不以 0 开头 ) u 输入无符号十进制整数 x 输入十六进制整数 ( 可以以 0x 或 0X 开头, 也可以不以此开头 ) f 输入单精度实数 ( 双精度实数加 l, 即 %lf) e g 输入实数 ( 用小数形式或指数形式, 符号和小数部分可选 ) c 输入单个字符 ( 输入时不加单引号 ) s 输入字符串 ( 输入时不加双引号 ) 2)*: 表示该输入项, 读入后不赋予相应的变量, 即跳过该输入值 例如 : scanf("%d %*d %d",&a,&b); 当输入 时, 把 1 赋予 a,2 被跳过,3 赋予 b 3) 输入宽度 : 用十进制整数指定输入的宽度 ( 即字符数 ) 例如: scanf("%5d",&a); 输入 , 只截取前 5 位 赋予变量 a 又如: scanf("%4d%4d",&a,&b); 输入 , 将把 1234 赋予 a, 而 5678 赋予 b 4) 长度 : 长度格式符为 l 和 h,l 表示输入长整型数据 ( 如 %ld) 和双精度实型数据 ( 如 %lf) h 表示输入短整型数据 使用 scanf( ) 函数容易与 printf( ) 函数混淆, 必须注意以下几个方面的问题 : 1 scanf( ) 函数中没有精度控制 例如,scanf("%5.2f",&a); 是非法的, 不能试图用此语句输入小数为 2 位的实数 2 scanf( ) 函数中要求给出变量地址, 如给出变量名则不会正确赋值 例如, scanf("%d",a); 是错误的, 应改为 scnaf("%d",&a); 3 在输入多个数值数据时, 若格式控制字符串中没有非格式字符作输入数据之间的间隔则可用空格 Tab 符或回车符做间隔 在碰到空格 Tab 符 回车符或非法数据 ( 如对 %d 输入 12A 时,A 即为非法数据 ) 时即认为该数据结束 4 在输入字符数据时, 若格式控制字符串中无非格式字符, 则认为所有输入的字符均为有效字符 例如 : scanf("%c%c%c",&a,&b,&c);

67 56 计算机程序设计基础 当输入 d e f( 即 d 空格 e 空格 f) 时, 则把 'd' 赋予 a, ' '( 空格 ) 赋予 b,'e' 赋予 c 只有当输入 def 时, 才能把 'd' 赋予 a,'e' 赋予 b,'f' 赋予 c 如果在格式控制字符串中加入空格作为间隔, 如 scanf ("%c %c %c",&a,&b,&c), 则输 入时各数据之间可加空格作为间隔 5 scanf( ) 函数不显示提示信息, 如果格式控制字符串中有非格式字符, 则输入时也要 输入该非格式字符 例如 : int a,b; scanf( a=%d,b=%d,&a,&b); 若需要分别将 10 和 20 赋予 a 和 b, 则用户需要输入 :a=10,b=20 因此, 在使用 scanf( ) 函数时应少用或不用非格式字符, 避免增加输入时的字符输入量 需要显示的提示信息应使用 printf( ) 函数来完成 其他输入 / 输出函数 除了 scanf( ) 和 printf( ) 函数, 在头文件 stdio.h 中还声明了其他的输入和输出函数 表 2.12 列出了一些常用的字符和字符串输入 / 输出函数 getchar( ) putchar( 字符常量或变量 ) 表 2.12 常用的字符和字符串输入 / 输出函数 函数功能举例 gets( 字符数组名或字符串指针 ) puts( 字符数组名或字符串指针 ) 从标准输入设备 ( 键盘 ) 中读入并返回一个字符 向标准输出设备输出一个字符 从标准输入设备 ( 键盘 ) 中读取字符串存到缓冲区中, 直到回车结束, 但回车符不属于这个字符串, 系统自动用 '\0' 代替最后的换行符 向标准输出设备输出字符串 2.5 数学函数 char ch; ch=getchar( ); char ch; ch='a'; putchar(ch); putchar('a'); Char str[30]; gets(str); char str[30]; gets(str); puts(str); C 标准库中为程序员提供了一组预先设计并编译好的函数来实现各种常用的功能, 如常用数学计算 字符串操作 字符操作 输入 / 输出 错误检查等 这些函数被组织在函数库中, 称为库函数 这里先简单介绍常用数学函数的用法 C 标准库中数学函数对应的头文件是 math.h, 使用前在文件开头应有预处理命令 : 或 #include <math.h> #include "math.h" 科学出版社职教技术出版中心

68 第 2 章数据类型 运算符与表达式 57 表 2.13 列出了一些常用的数学函数, 使用时要注意它们的括号中参数的个数和类型, 以及返回值即函数计算结果的类型 这些函数都带有一个或两个 double 类型的参数, 并得到一个 double 类型的返回值 表 2.13 常用数学函数 函 数 功 能 举 例 sqrt(x) 计算 x 的平方根 sqrt(16.0) 的值为 4 fabx(x) 求 x 的绝对值 若 x>=0, 则 fabs(x) 为 x 若 x<0, 则 fabs(x) 为 -x pow(x,y) 计算 x 的 y 次方 pow(2,4) 的值为 16.0 exp(x) 计算 e 的 x 次方 exp(1.0) 的值为 log(x) 计算 x 的自然对数 ( 以 e 为底 ) log( ) 的值为 1.0 log10(x) 计算 x 的对数 ( 以 10 为底 ) log10(10.0) 的值为 1.0 ceil(x) 求不小于 x 的最小整数 ceil(9.8) 的值为 10.0 ceil(-9.8) 的值为 -9.0 floor(x) 求不大于 x 的最大整数 floor(9.8) 的值为 9.0 floor(-9.8) 的值为 sin(x) 计算 x 的三角正弦值 (x 用弧度表示 ) sin(0.0) 的值为 0.0 cos(x) 计算 x 的三角余弦值 (x 用弧度表示 ) cos(0.0) 的值为 1.0 tan(x) 计算 x 的三角正切值 (x 用弧度表示 ) tan(0.0) 的值为 随机数发生器函数 在计算机中并没有真正的随机数发生器, 但是可以使产生的数字重复率很低, 像是真正的随机数, 称为伪随机数发生器 这里简单介绍一下 C 库函数里提供的随机数发生器的 用法, 即 rand( ) 和 srand( ) 函数, 对应的头文件为 stdlib.h 在程序中调用 rand( ) 函数会产生一个随机数值, 范围在 0 至 RAND_MAX 间 RAND_MAX 是个预定义在头文件 stdlib.h 中的符号常量, 其值为 反复调用函数 rand( ) 所产生的一系列数似乎是随机的, 但每次执行程序所产生的序列是重复的 为了在每次执行程序时产生不同的随机数序列, 使产生随机数的过程 随机化, 可由 srand( ) 函数生成随机数种子 通常在调用 rand( ) 函数产生随机数前, 先利用 srand( ) 函数设好随机数种子,srand( ) 函数用 unsigned 类型的整数作参数, 并为 rand( ) 设置产生随机数时的随机数种子 如果未设随机数种子,rand( ) 在调用时会自动设随机数种子为 1 如果每次都设相同值,rand( ) 所 产生的随机数值每次就会一样 其工作过程如下 : 1) 首先给 srand( ) 函数提供一个种子, 它是一个 unsigned int 类型, 其取值范围从 0~ ) 然后调用 rand( ), 它会根据提供给 srand( ) 函数的种子值返回一个随机数 3) 根据需要多次调用 rand( ), 从而不间断地得到新的随机数 4) 无论什么时候, 都可以给 srand( ) 提供一个新的种子, 从而进一步 随机化 rand( ) 的输出结果

69 58 计算机程序设计基础 例 2.34 产生 1~6 之间的随机数 #include<stdio.h> #include<stdlib.h> int i; unsigned seed; printf("please input seed:"); scanf("%u",&seed); srand(seed); for(i=0;i<10;i++) printf("%3d",1+rand()%6); printf("\n"); 输入 68 时, 程序运行结果如图 2-34 所示 输入 123 时, 程序运行结果如图 2-35 所示 图 2-34 例 2.34 程序运行结果 1 图 2-35 例 2.34 程序运行结果 2 通过多次执行上面程序可以发现, 提供不同的随机数种子, 程序就会产生不同的随机数序列 如果不想每次都通过键盘输入随机数种子来完成随机化, 可以使用语句 : srand(time(null)); time( ) 函数所对应的头文件是 time.h 该函数返回以秒计算的当前时间值, 该值被转换为无符号整数可作为随机数发生器的种子 2.7 案例应用 在案例 学生成绩管理系统 中, 需要对学生的姓名 学号 年龄 性别 班级 各科成绩等各种类型的数据进行存储和处理 为了更好地处理这些相关数据, 应设计用一个结构体类型来表示 ( 参见第 7 章 ) 学生姓名和所在班级是字符串, 可以用字符数组来表示 ( 参见第 5 章 ) 而学生的其他信息如学号为较大的整数, 可声明为长整型 ; 年龄为整数可声明为基本整型 ; 性别为字符可声明为字符型 ; 各科成绩为实数可声明为双精度实型 程序代码段如下 : long num; /* 学号 */ int age; /* 年龄 */ 科学出版社职教技术出版中心

70 第 2 章数据类型 运算符与表达式 59 char sex; /* 性别 */ double C; /* 语文成绩 */ double M; /* 数学成绩 */ double E; /* 英语成绩 */ double S; /* 体育成绩 */ 在程序中, 需要对成绩进行各种计算如总分 平均分, 要用到相关的运算符 下面是计算某个学生总分的程序代码段 : /* 计算学生 4 门课程的总分, 结构体数组有关内容参见第 7 章 */ sum=student[n].c+student[n].m+student[n].e+student[n].s; 在程序中, 要处理的学生信息首先需要输入, 处理的结果也应该输出显示, 可用到相关的输入 / 输出函数 下面是学生信息输入的程序代码段 : printf("\nrecord %d:\nenter name:",n+1); /* 显示提示信息 */ gets(student[n].name); /* 输入学生姓名, gets() 函数参见附录 C*/ printf("enter number:"); /* 显示提示信息 */ gets(numstr); /* 输入学号 */ student[n].num=atol(numstr); /* 转换为长整型并赋值,atol() 函数参见附录 C*/ printf("\nenter age:"); gets(numstr); /* 输入年龄 */ student[n].age=atoi(numstr); /* 转换为整型并赋值,atoi() 函数参见附录 C*/ printf("\nenter sex:"); student[n].sex=getchar();getchar(); /* 输入性别, getchar() 函数参见附录 C*/ printf("\nenter stu_class:"); gets(student[n].stu_class); /* 输入班级 */ printf("\nenter Chinese score:"); gets(numstr); /* 输入语文成绩 */ student[n].c=atof(numstr); /* 转换为双精度实数并赋值,atof() 函数参见附录 C */ printf("\nenter Maths score:"); gets(numstr); /* 输入数学成绩 */ student[n].m=atof(numstr); /* 转换为双精度实数并赋值 */ printf("\nenter English score:"); gets(numstr); /* 输入英语成绩 */ student[n].e=atof(numstr); printf("\nenter Sports score:"); gets(numstr); /* 输入体育成绩 */ student[n].s=atof(numstr); 程序中其他有关的计算及数据的输入 / 输出的处理, 这里不再一一列举 可参见本书 8.3 节 学生成绩管理系统 的全部实现代码 本章小结 本章介绍了 C 语言的数据类型, 常量与变量的概念, 运算符对数据的基本操作, 表达式的求值规则及数据的基本输入与输出

71 60 计算机程序设计基础 1)C 语言的数据类型十分丰富, 可分为基本数据类型 构造类型 指针类型和空类型 四大类, 其中常用的基本数据类型有整型 实型和字符型 不同类型数据的处理和存储也不相同 2) 在程序运行的过程中, 有些数据对象的值会发生变化, 称之为变量, 变量要先声明, 后使用 ; 值始终保持不变的数据对象称为常量, 常量包括直接常量和符号常量 3) 对数据的处理是由运算符的操作实现的 运算符包括算术运算符 赋值运算符 关系运算符 逻辑运算符 条件运算符 逗号运算符 sizeof 运算符等 使用运算符时要注意 : 运算符的功能 运算符与运算对象的关系 要求运算对象的个数和数据类型 运算符优先级和结合性及运算结果的类型 4) 运算符和数据对象组合成表达式, 表达式的值的类型和大小与运算符的种类和数据对象的类型有关 表达式的求值按运算符的优先级和结合方向所规定的顺序进行 优先级共 15 级,1 级最高,15 级最低 5) 混合运算时, 不同类型的数据需要先转换成同一数据类型, 然后再进行运算 有 3 种类型转换方式 : 自动转换 强制转换和赋值转换 自动类型转换是按向数据存储长度较长的类型方向转换的 6)C 语言中的输入 / 输出都是由标准库函数中的输入 / 输出函数来实现的 scanf( ) 是格式输入函数, 可按指定的格式输入任意类型数据 ;printf( ) 是格式输出函数, 可按指定的格式显示任意类型的数据 习 1. 编写程序, 测试以下类型在内存中所占的字节数 :char int unsinged short long float double long double 输出时要求给出含义明确的提示信息 2. 编写程序, 定义 int 型变量 a,float 型变量 b,double 型变量 c, 分别用三种不同的方式获取 3 变量的值, 并输出 输入前和输出时要求给出含义明确的提示信息 3. 编写程序, 计算球的体积 (V=4 r 3 /3), 要求半径要通过键盘输入, 的值定义为符号常量 PI, 输出结果保留两位小数 输入前和输出时要求给出含义明确的提示信息 题 科学出版社职教技术出版中心

72 第 3 章程序控制结构 在案例 学生成绩管理系统 中, 涉及学生信息的输入 查找 修改和删除等多种功能 编程者是用什么思想和方法分析和分解这个较复杂系统而做到把这些功能在一个程序内一一实现, 且不至于程序混乱呢? 程序如何能做到根据用户不同要求而自动选择运行相应功能模块? 又如何能有序和重复不断地输入或输出多个学生的数据呢? 要解决这些问题, 需要用到程序控制结构方面的知识 本章主要介绍程序的顺序 选择 循环三种基本结构, 以及结构化程序设计思想 方法 通过本章的学习, 读者应掌握 C 语言的选择语句 循环语句 转向语句的用法及结构化程序设计方法 3.1 程序的基本结构 人们从程序设计实践中总结出程序的三种基本结构, 即顺序结构 选择结构 循环结构 顺序结构 : 顺序结构的执行方式是按语句的先后顺序逐条执行, 如图 3-1(a) 所示 程序开始 执行语句 1 执行语句 2 程序结束 选择结构 : 选择结构的执行方式是按照条件逻辑是否成立有选择地执行不同的语句, 如图 3-1(b) 所示 执行顺序为 : 如果逻辑表达式成立 ( 用 T 表示 ), 则执行语句 1; 如果逻辑表达式不成立 ( 用 F 表示 ), 则执行语句 2 可以看见, 根据不同的逻辑表达式的结果, 有选择地执行不同的语句 图 3-1 顺序结构和选择结构的流程图循环结构 : 循环结构的执行方式是根据某项条件重复地执行某项任务若干次, 直到满足或不满足某条件为止 循环结构有两种形式, 分别为 : 1) 先判断循环条件逻辑是否成立, 如果成立 ( 用 T 表示 ) 才执行语句序列 ; 然后再返回判断循环条件逻辑是否成立, 如果成立则重复循环 ; 直到循环条件逻辑不成立 ( 用 F 表示 ), 结束循环 2) 先执行语句序列一次, 再判断循环条件逻辑是否成立 ; 如果成立 ( 用 T 表示 ), 则再次执行语句序列重复循环 ; 直到循环条件逻辑不成立 ( 用 F 表示 ), 结束循环

73 62 计算机程序设计基础 通常把第 1 种形式的循环称作当型循环 ; 把第 2 种形式的循环称作直到型循环 两种 循环结构的流程图如图 3-2 所示 图 3-2 循环结构流程图 顺序 选择和循环这三种基本结构称为结构化的流程模式 实践已证明用这三种结构 对编写任何程序都足够了 即使一个复杂的程序, 也可以由这三种基本程序结构通过组合 嵌套来构成 结构化程序设计就是基于这三种基本结构来编写程序, 使程序结构良好, 具有层次性, 便于修改和维护 3.2 语句 程序的执行部分是由语句构成的 执行语句的过程就是实现程序功能的过程 语句是 C 语言的基本执行单位 C 语句主要有声明语句 表达式语句 赋值语句 复合语句 控制语句 空语句等 声明语句 声明语句主要用来说明合法标识符, 以便能在程序中合法使用它们 在 C 语言程序设计中, 任何用户自定义的函数 变量和符号常量都必须遵循先声明后使用的原则 声明语句的语法格式为 : 数据类型符用户标识符 ; 例 3.1 输入一个字符, 输出它对应的 ASCII 码值 #include <stdio.h> char c; /* 声明字符变量, 遵循先声明后使用的原则 */ scanf("%c",&c); /* 输入字符, 对字符变量 c 赋值 */ printf(" 对应 ASCII 码是 %d",c); /* 输出字符变量 c 对应的 ASCII 码 */ 科学出版社职教技术出版中心

74 第 3 章程序控制结构 63 在上面的程序中, 第 4 行就是声明语句 这里声明了一个字符变量 c 后, 在其下面的 语句中就可以合法使用了 表达式语句 由表达式组成的语句称为表达式语句 表达式语句是最简单的可执行语句, 由一个表达式后面加上分号 ; 构成 表达式语句的语法格式为 : 表达式 ; 任何表达式都可以加上分号 ; 构成表达式语句, 典型的表达式语句是由一个赋值表达式构成的赋值语句 应该注意分号是表达式语句中不可缺少的一部分 例如 :x=5 和 x=5; 是不同的 前者是一个赋值表达式, 后者加了分号 ; 才是一个赋值表达式语句 复合语句 复合语句是用一对花括号 把多个语句组成在一起构成的, 又称分程序或语句块 复合语句的语法格式为 : 语句 1; 语句 2; 语句 n; 在语法上将复合语句看成单条语句, 即看作一个语句 复合语句具有组合多个子语句的能力, 使程序具有模块化结构 控制语句 控制语句是用于控制程序流程的语句, 一般指那些可改变顺序结构的语句 C 语言的流程控制语句可分为三类 1) 条件判断语句 :if switch 2) 循环执行语句 :while do-while for 3) 流程转向语句 :break continue return 空语句 仅由一个分号 ; 组成的语句称为空语句 空语句不执行任何操作 空语句的作用如下 : 1) 在循环语句中提供一个不执行任何操作的空循环体 2) 为有关语句提供标号, 用以说明程序执行的位置

75 64 计算机程序设计基础 3.3 顺序结构 顺序结构是结构化程序设计中最简单 最常见的一种程序结构 在顺序结构中, 从第一条语句到最后一条语句完全按先后次序顺序执行 例 3.2 从键盘输入圆半径, 输出圆面积 ( 圆周率取 3.14, 计算结果保留小数点后两位 ) 分析 : 1) 声明两个实型变量 r 和 s 变量 r 用于存放从键盘输入的圆半径, 变量 s 用于保存圆面积 2) 从键盘输入圆半径数值, 赋给变量 r 3) 利用圆面积公式 s=3.14*r*r 求圆面积 4) 输出 s 的值 用流程图描述如图 3-3 所示 源程序代码如下 : #include <stdio.h> double r,s; // 声明实型变量 r,s printf("please input r\n"); // 提示输入变量 r 的值 scanf("%lf",&r); // 通过键盘输入 r 的值 s=3.14*r*r; // 通过圆面积公式计算圆面积, 并将计算结果赋给变量 s printf("s=%.2lf\n",s); // 输出 s 的值 程序运行结果如图 3-4 所示 科学出版社职教技术出版中心 图 3-3 例 3.2 流程图 图 3-4 例 3.2 程序运行结果

76 第 3 章程序控制结构 65 例 3.3 输入整型变量 a 和 b 的值, 交换它们的值并输出 分析 : 1) 声明两个整型变量 a b 用于存放输入的两个数 2) 从键盘上输入两个整数, 保存到变量 a b 中 3) 利用一个临时存储单元 temp, 达到交换变量 a b 值的目的 4) 输出交换后变量 a b 的值 用 N-S 图描述如图 3-5 所示 源程序代码如下 : #include <stdio.h> int a,b,temp; // 声明整型变量 a b temp printf("input a="); // 提示输入变量 a 的值 scanf("%d",&a); // 输入变量 a 的值 printf("input b="); // 提示输入变量 b 的值 scanf("%d",&b); // 输入变量 b 的值 temp=a; // 先把 a 的值放入 temp 中 a=b; // 把 b 的值放入 a 中 b=temp; // 把 temp 中的值放入 b 中 printf("a=%d,b=%d\n",a,b); // 输出交换后 a 和 b 的值 图 3-5 例 3.3 的 N-S 图 程序运行结果如图 3-6 所示 图 3-6 例 3.3 程序运行结果

77 66 计算机程序设计基础 3.4 选择结构 if 语句 if 语句用来判定所给定的条件是否满足, 根据对给定条件的判定结果 ( 真或假 ) 决定执行某种操作 在 C 语言中,if 语句有三种形式 :if 形式 if-else 形式和 else-if 形式 1. 单分支结构 if 语句单分支结构的语法格式为 : if( 表达式 ) 语句 ; if 单分支结构执行的流程如下 : 1) 运算表达式, 求表达式的值 2) 如果表达式的值为真, 即非 0, 则执行语句 ( 复合语句 ), 然后退出选择控制结构 3) 如果表达式的值为假, 即为 0, 则直接退出选择结构 if 单分支结构的流程图和 N-S 图如图 3-7 所示 图 3-7 if 单分支结构 说明 : 1) 条件表达式的运算结果只有 真 ( 用 T 表示 ) 或 假 ( 用 F 表示 ) 两个值 2) 条件表达式必须放在圆括号 ( 和 ) 中, 圆括号不能省略 3) 条件表达式一般应为关系表达式或逻辑表达式 例如,if(a==b) if(a>b&&c>d) if(a+b>c) 等 在计算机系统中, 也用数值 0 表示 假, 非 0 表示 真 因此对于一般常量和变量表达式也合法, 但对初学者不推荐使用 例如, 条件表达式 if(a) 中, 如果 a 值非 0, 则为真 4) 和 必须成对出现, 构成复合语句 如果复合语句中只有一条语句, 则可省略 和 ; 否则, 和 不能省略 科学出版社职教技术出版中心 例 3.4 用单分支选择语句形式, 实现从键盘输入两个整数, 并按从小到大次序输出这两个数 分析 : 1) 定义两个整型变量 a b 用于存放输入的两个数

78 第 3 章程序控制结构 67 的值 2) 从键盘上输入两个整型变量 a b 的值 3) 比较 a 和 b 的大小 如果 a>b, 则交换 a b 4) 输出变量 a b 的值 程序流程图如图 3-8 所示 源程序代码如下 : #include <stdio.h> int a,b,temp; // 声明整型变量 (a b temp) // 提示输入变量 a 的值 // 输入变量 a 的值 // 提示输入变量 b 的值 // 通过键盘输入 b 的值 // 判断条件是否成立 printf("input a="); scanf("%d",&a); printf("input b="); scanf("%d",&b); if(a>b) temp=a; // 先把 a 的值放入 temp 中 a=b; // 把 b 的值放入 a 中 b=temp; // 把 temp 中的值放入 b 中 printf("%d,%d\n",a,b); // 按值从小到大输出 程序运行结果如图 3-9 所示 图 3-8 例 3.4 算法描述 图 3-9 例 3.4 程序运行结果

79 68 计算机程序设计基础 2. 双分支结构 if-else 语句单分支结构的语法格式为 : if( 表达式 ) 语句 ( 复合语句 )1; else 语句 ( 复合语句 )2; if-else 双分支结构执行流程如下 : 1) 运算表达式, 求表达式的值 2) 如果表达式的值为真, 即非 0, 则执行语句 ( 复合语句 )1, 然后退出选择控制结构 3) 如果表达式的值为假, 即为 0, 则执行语句 ( 复合语句 )2, 然后退出选择控制结构 if-else 双分支结构流程图和 N-S 图如图 3-10 所示 图 3-10 if-else 双分支结构 例 3.5 利用 if-else 双分支结构语句形式, 输入整型变量 a 和 b 的值, 并输出它们中 较大的值 分析 : 1) 声明所需的整型变量 a b 图 3-11 例 3.5 流程图 int a,b; printf("input a="); scanf("%d",&a); printf("input b="); scanf("%d",&b); if(a>b) 2) 从键盘上输入两个整型变量 a b 的值 3) 用关系表达式判断 a>b 是否为真, 如果为真, 则执行 4); 否则, 执行 5) 4) 输出 a 的值 5) 输出 b 的值 程序流程图如图 3-11 所示 源程序代码如下 : #include <stdio.h> // 声明整型变量 a b // 提示输入变量 a 的值 // 输入变量 a 的值 // 提示输入变量 b 的值 // 通过键盘输入 b 的值 // 判断条件 a>b 是否成立 科学出版社职教技术出版中心

80 第 3 章程序控制结构 69 printf(" 较大的数是 %d\n",a); // 这里只有一条语句, 可省略 else printf(" 较大的数是 %d\n",b); //a>b 条件不成立, 输出 b 的值 程序运行结果如图 3-12 所示 图 3-12 例 3.5 程序运行结果 3. 多分支结构前面两种形式的 if 分支结构一般用于不多于两个分支的情况, 然而现实中遇到的情况可能有多个分支 当有多个分支时, 可以用 else if 语句, 其语法格式为 : if( 表达式 1) 语句 ( 复合语句 )1; else if( 表达式 2) 语句 ( 复合语句 )2; else if( 表达式 3) 语句 ( 复合语句 )3; else if( 表达式 n) 语句 ( 复合语句 )n; else 语句 ( 复合语句 )n+1; else if 多分支选择结构的执行流程如下 : 1) 依次判断 if 语句后面的表达式的值 2) 如果表达式的值为真, 则执行其对应语句, 然后退出选择控制结构 3) 如果所有表达式的值均为假, 则执行语句 n+1, 然后退出选择控制结构 if-else 双分支结构流程图和 N-S 图分别如图 3-13(a) 和图 3-13(b) 所示 例 3.6 学校按总评分数( 设定为 0~100 分 ) 把学生学期成绩分成五等,90 分及以上为 A,80~89 分为 B,70~79 分为 C,60~69 分为 D, 分数低于 60 分为 E 编程实现从键盘输入一个学生总评分数, 并输出其对应等级 ( 用 else if 多分支结构实现 )

81 70 计算机程序设计基础 分析 : 1) 声明一个整型变量 m, 用于存放学生总评分数 2) 从键盘输入一个学生总评分数赋予 m 3) 用 else if 语句依次判断 m 是否属于等级 A B C D 中的一种 如果是, 输出对应等级, 退出选择控制结构 ; 否则, 执行 3) 4) 如果 m 都不在等级 A B C D 对应的分数范围内, 则输出为 E 等, 退出选择控制结构 程序流程图如图 3-14 所示 图 3-13 else if 多分支结构 科学出版社职教技术出版中心 图 3-14 例 3.6 流程图

82 第 3 章程序控制结构 71 源程序代码如下 : #include <stdio.h> int m; // 声明整型变量 m printf("please input mark:"); // 提示输入成绩 scanf("%d",&m); // 从键盘输入变量 m 的值 if(m>=90) // 判断 m 是否属于等级 A printf("a\n"); // 只有一条语句, 可省略 else if(m>=80) // 判断 m 是否属于等级 B printf("b\n"); else if(m>=70) // 判断 m 是否属于等级 C printf("c\n"); else if(m>=60) // 判断 m 是否属于等级 D printf("d\n"); else // 以上所有表达式的值均为假 printf("e\n"); // 输出 E 程序运行结果如图 3-15 所示 图 3-15 例 3.6 程序运行结果 4.if 语句的嵌套在 if 语句中又包含一个或多个 if 语句称为 if 语句的嵌套 if 语句嵌套的目的是解决多路分支问题 其语法格式为 : if( 表达式 1) if( 表达式 2)

没有幻灯片标题

没有幻灯片标题 第 2 章 C 语言的基本数据类型与表达 式 2. 1 C 语言的语法基础 2. 2 C 语言的基本数据类型 2. 3 常量和变量 2. 4 运算符与表达式 2. 5 数据类型转换 用 第 2 章 C 语言的基本数据类型与表达 2.1 C 语言的语法基础 2. 1. 1 C 语言字符集 式 C 语言的基本符号可分 4 个类, 归纳如下 : (1) 英文字母 : 大小写各 26 个, 共计 52 个

More information

FJXBQ

FJXBQ 高等医学院校选用教材 ( 供成人教育中医药专业 中西医结合专业使用 ) 方剂学 闫润红 主编 2 0 0 1 内容简介本书是供成人教育中医药专业 中西医结合专业使用的教材 全书分总论和各论两部分, 总论部分对中医方剂的基本理论, 如治法 君臣佐使 剂型 剂量等及其现代研究进展进行了介绍 各论部分对常用方剂的主治病证 配伍意义 临床应用 加减变化规律及现代研究概况等内容, 按分类进行了系统阐述 在保证方剂学学科知识结构完整性的前提下,

More information

Microsoft Word - 《C语言开发入门》课程教学大纲-2.doc

Microsoft Word - 《C语言开发入门》课程教学大纲-2.doc C 语言开发入门 课程教学大纲 ( 课程英文名称 ) 课程编号 :201409210011 学分 :5 学分学时 :60 学时 ( 其中 : 讲课学时 :37 学时上机学时 :23 学时 ) 先修课程 : 计算机导论后续课程 :C++ 程序设计适用专业 : 信息及其计算机相关专业开课部门 : 计算机系 一 课程的性质与目标 C 语言开发入门 是计算机各专业必修的基础课程, 是数据结构 C++ Java

More information

FY.DOC

FY.DOC 高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 第 1 章程序设计和 C 语言 1.1 什么是计算机程序 1.2 什么是计算机语言 1.3 C 语言的发展及其特点 1.4 最简单的 C 语言程序 1.5 运行 C 程序的步骤与方法 1.6 程序设计的任务 1.1 什么是计算机程序 程序 : 一组计算机能识别和执行的指令 只要让计算机执行这个程序, 计算机就会自动地 有条不紊地进行工作 计算机的一切操作都是由程序控制的, 离开程序, 计算机将一事无成

More information

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式]

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式] Arrays and Strings 存储同类型的多个元素 Store multi elements of the same type 数组 (array) 存储固定数目的同类型元素 如整型数组存储的是一组整数, 字符数组存储的是一组字符 数组的大小称为数组的尺度 (dimension). 定义格式 : type arrayname[dimension]; 如声明 4 个元素的整型数组 :intarr[4];

More information

计算概论A B03 C++语言的基本成分 - 运算成分(2)

计算概论A B03 C++语言的基本成分 - 运算成分(2) 计算概论 A 程序设计部分 C 语言的构成成分 运算成分 李戈 北京大学信息科学技术学院软件研究所 lige@sei.pku.edu.cn C 语言中的运算符 C 语言的运算符范围很宽 求字节数运算符 : sizeof 下标运算符 [ ] 赋值运算符 = 算术运算符 + - * / % 关系运算符 < > == >= > ~

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 计算概论 A 课程程序设计部分 C++ 语言基本成分 数据成分 李戈 北京大学信息科学技术学院软件研究所 lige@sei.pku.edu.cn 再谈, 我们的进度安排 我们的学习过程 感性理性函数指针等 数据成分运算成分控制成分数组字符串 结构化的程序递归 传统学习过程 数据类型与表达式 输入输出 关系运算 控制语句 函数数组指针结构体 作业练习 感性认识作业练习 ( 以抄程序为主 ) 正常作业练习

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢   学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: 51141201063@ecnu.cn 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Java 类型 引用 不可变类型 对象存储位置 作用域 OOP

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

More information

没有幻灯片标题

没有幻灯片标题 指针作为函数参数 : 原因 : 1 需要修改一个或多个值,( 用 return 语句不能解决问题 ) 2 执行效率的角度 使用方法 : 在函数原型以及函数首部中需要声明能够接受指针值的形参, 具体的写法为 : 数据类型 * 形参名 如果有多个指针型形参, 则用逗号分隔, 例如 : void swap(int *p1, int *p2) 它说明了形参 p1 p2 是指向整型变量的指针 在函数调用时,

More information

Microsoft Word - 正文.doc

Microsoft Word - 正文.doc 第 2 章 Java 语言基础 通过本章的实践, 要掌握 Java 中的标识符 关键字 常量, 熟练掌握算术 关 系 逻辑 条件 赋值 位运算符的使用, 掌握简单顺序结构的程序设计 2.1 典型习题解答 2.1 Java 中怎样进行注释? 解答 Java 语言中的注释有 3 种形式 : (1) 单行 : // (2) 多行 : /* */ (3) 文档注释 : /** */ 第三种形式是第二种形式的变形,

More information

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式]

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式] 指针 Pointers 变量指针与指针变量 Pointer of a variable 变量与内存 (Variables and Memory) 当你声明一个变量时, 计算机将给该变量一个内存, 可以存储变量的值 当你使用变量时, 计算机将做两步操作 : - 根据变量名查找其对应的地址 ; - 通过地址对该地址的变量内容进行读 (retrieve) 或写 (set) 变量的地址称为变量的指针! C++

More information

科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心

More information

科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心

More information

科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心

More information

科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心

More information

chap07.key

chap07.key #include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,

More information

《C语言程序设计》教材习题参考答案

《C语言程序设计》教材习题参考答案 教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN:978-7-302-13599-9, 红色封面 答案制作时间 :2011 年 2 月 -5 月 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p=&a 2. 设已定义 int x,*p=&x;, 则下列表达式中错误的是 :B)&*x 3. 若已定义 int a=1,*b=&a;,

More information

《计算概论》课程 第十九讲 C 程序设计语言应用

《计算概论》课程 第十九讲  C 程序设计语言应用 计算概论 A 程序设计部分 字符数组与字符串 李戈 北京大学信息科学技术学院软件研究所 lige@sei.pku.edu.cn 字符数组的定义 #include int main() char a[10] = 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' ; for (int i = 0; i < 10; i++) cout

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

2015年计算机二级(C语言)模拟试题及答案(三)

2015年计算机二级(C语言)模拟试题及答案(三) 2016 年计算机二级 (C 语言 ) 模拟试题及答案 (3) 1.( A ) 是构成 C 语言程序的基本单位 A 函数 B 过程 C 子程序 D 子例程 2.C 语言程序从 ( C ) 开始执行 A 程序中第一条可执行语句 B 程序中第一个函数 C 程序中的 main 函数 D 包含文件中的第一个函数 3 以下说法中正确的是( C ) A C 语言程序总是从第一个定义的函数开始执行 B 在 C 语言程序中,

More information

<4D F736F F F696E74202D20B5DA32D5C220B5A5C6ACBBFA433531D3EFD1D4BBF9B4A1>

<4D F736F F F696E74202D20B5DA32D5C220B5A5C6ACBBFA433531D3EFD1D4BBF9B4A1> 第 2 章 单片机 C51 语言基础 2.1 C51 语言的基本知识 2.2 运算符与表达式 2.3 指针与绝对地址访问 2.4 本章小结 2.5 实训二发光二极管流水广告灯 返回首页 教学提示 随着单片机开发技术的不断发展, 目前已有越来越多 的人从普遍使用汇编语言逐渐过渡到使用高级语言开发, 其中又以 C 语言为主, 市场上几种常见的单片机均有其 C 语言开发环境 应用于 51 系列单片机开发的

More information

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2 第十一讲 运算符重载 与类型转换 运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2 为什么要运算符重载 预定义的运算符只针对基本数据类型, 若要对类的对象进行类似的运算, 需要重新定义运算符的功能 运算符重载实质就是函数重载 : 对已有的运算符赋予多重含义, 使得同一个运算符作用于不同类型的数据时导致不同的行为

More information

科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心

More information

科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心

More information

科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心 科学出版社职教技术出版中心

More information

ch02_Basic

ch02_Basic 主要内容 C++ 语言概述 C++ 的发展 C++ 源程序结构与书写规范 C++ 编译器和集成开发环境 C++ 编程基础 数据的简单输入输出 2 C++ 语言概述 C++ 语言概述 C++ 的发展 - C++ 是从 C 语言发展演变而来, 可以看成是 C 的超集 - 1980 年由 Bjarne Stroustrup 开发创建 - 1983 年正式取名为 C++,1989 年开始 C++ 的标准化工作

More information

图书在版编目穴 CIP 雪数据做事细节全书 / 赵彦锋编著郾 北京 : 企业管理出版社, ISBN Ⅰ 郾做... Ⅱ 郾赵... Ⅲ 郾工作方法 通俗读物 Ⅳ 郾 B 中国版本图书馆 CIP 数据核字 (2005) 第 号 书

图书在版编目穴 CIP 雪数据做事细节全书 / 赵彦锋编著郾 北京 : 企业管理出版社, ISBN Ⅰ 郾做... Ⅱ 郾赵... Ⅲ 郾工作方法 通俗读物 Ⅳ 郾 B 中国版本图书馆 CIP 数据核字 (2005) 第 号 书 做事细节全书 赵彦锋著 企业管理出版社 图书在版编目穴 CIP 雪数据做事细节全书 / 赵彦锋编著郾 北京 : 企业管理出版社, 2005.11 ISBN 7-80197-338-0 Ⅰ 郾做... Ⅱ 郾赵... Ⅲ 郾工作方法 通俗读物 Ⅳ 郾 B026-49 中国版本图书馆 CIP 数据核字 (2005) 第 136676 号 书 名 : 做事细节全书 作 者 : 赵彦锋 责任编辑 : 吴太刚

More information

《C语言程序设计》第2版教材习题参考答案

《C语言程序设计》第2版教材习题参考答案 教材 C 语言程序设计 ( 第 2 版 ) 清华大学出版社, 黄保和, 江弋编著 2011 年 10 月第二版 ISBN:978-7-302-26972-4 售价 :35 元 答案版本 本习题答案为 2012 年 2 月修订版本 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p = &a A. *p = *a B. p = *a C.p = &a D. *p =

More information

内容简介 本书以教育部高等学校计算机科学与技术教学指导委员会编制的 关于进一步加强高等学校计算机基础教学的意见暨计算机基础课程教学基本要求 中有关计算机程序设计基础 (C 语言 ) 课程教学基本要求为指导, 结合教育部考试中心最新的全国计算机等级考试二级 (C 语言程序设计 ) 考试大纲要求和作者多

内容简介 本书以教育部高等学校计算机科学与技术教学指导委员会编制的 关于进一步加强高等学校计算机基础教学的意见暨计算机基础课程教学基本要求 中有关计算机程序设计基础 (C 语言 ) 课程教学基本要求为指导, 结合教育部考试中心最新的全国计算机等级考试二级 (C 语言程序设计 ) 考试大纲要求和作者多 普通高等教育 十二五 重点规划教材公共课系列 中国科学院教材建设专家委员会 十二五 规划教材 C 语言程序设计 张淑华朱丽莉主编 于雪晶顾煜新副主编 北京 内容简介 本书以教育部高等学校计算机科学与技术教学指导委员会编制的 关于进一步加强高等学校计算机基础教学的意见暨计算机基础课程教学基本要求 中有关计算机程序设计基础 (C 语言 ) 课程教学基本要求为指导, 结合教育部考试中心最新的全国计算机等级考试二级

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 第二讲 C++ 编程基础 主要内容 C++ 语言概述 C++ 的发展 C++ 源程序结构与书写规范 C++ 编译器和集成开发环境 C++ 编程基础 数据的简单输入输出 2 C++ 语言概述 C++ 的发展 - C++ 是从 C 语言发展演变而来, 可以看成是 C 的超集 - 1980 年由 Bjarne Stroustrup 开发创建 - 1983 年正式取名为 C++,1989 年开始 C++ 的标准化工作

More information

Microsoft Word - YYCXfm.DOC

Microsoft Word - YYCXfm.DOC C 语言程序设计 王曙燕主编曹锰副主编 北京 内容简介 本书共 13 章, 主要内容包括 C 语言的基本概念 基本语法和基本数据结构, 另外, 给出了一个小型超市管理的综合实例, 介绍了 C 语言图形程序设计的基本方法, 还简单介绍了 C++ Visual C++ 和 C# 等面向对象程序设计语言 本书注重应用性和实践性, 通过一些典型算法的解题分析及其实现给读者一些解题示范和启发 每章后面配有习题,

More information

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx 运算符重载 Operator Overloading class Point { public: ; double x_, y_; Why Operator Overloading? Point (double x =0, double y = 0):x_(x),y_(y) { int main(){ Point a(1., 2), b(3,4); Point c = a + b; return 0;

More information

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3 浙江大学 C 程序设计及实验 试题卷 2002-2003 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:30-10:30 注意 : 答题内容必须写在答题卷上, 写在本试题卷上无效 一. 单项选择题 ( 每题 1 分, 共 10 分 ) 1. 下列运算符中, 优先级最低的是 A.

More information

_汪_文前新ok[3.1].doc

_汪_文前新ok[3.1].doc 普 通 高 校 本 科 计 算 机 专 业 特 色 教 材 精 选 四 川 大 学 计 算 机 学 院 国 家 示 范 性 软 件 学 院 精 品 课 程 基 金 青 年 基 金 资 助 项 目 C 语 言 程 序 设 计 (C99 版 ) 陈 良 银 游 洪 跃 李 旭 伟 主 编 李 志 蜀 唐 宁 九 李 涛 主 审 清 华 大 学 出 版 社 北 京 i 内 容 简 介 本 教 材 面 向

More information

Microsoft PowerPoint - 03.Fortran程序设计基础1

Microsoft PowerPoint - 03.Fortran程序设计基础1 简单 Fortran 90 程序的构造形式 : 第二讲 Fortran 程序设计基础 (2) [PROGRAM 程序名 ] [ 声明语句 ] [ 执行语句 ] END [PROGRAM [ 程序名 ]] 程序的书写 (P5) PROGRAM MONEY!calculate balance after interest compounded! 根据利息计算余额 REAL BALANCE, INTEREST,

More information

数据结构

数据结构 信息管理与信息系统专业 第 3 章变量与表达式 任课教师 : 吕雅丽 本章内容 3.1 C# 基本数据类型 3.2 常量与变量 3.3 创建并使用枚举类型 3.4 运算符与表达式类型 3.5 运算符的优先级与结合性 2 3.1 C# 基本数据类型 3.1.1 数值类型 1. 整数类型 整数类型又有有符号整数与无符号整数 有符号整数可以带正负号, 无符号整数不需带正负号, 默认为正数 有符号整数包括

More information

OOP with Java 通知 : Project 2 提交时间 : 3 月 15 日晚 9 点

OOP with Java 通知 : Project 2 提交时间 : 3 月 15 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 : Project 2 提交时间 : 3 月 15 日晚 9 点 复习 : Java 类型 基本类型 boolean, char, 封装 (wrappers) 类 (class) 定义 class MyType { int i; double d; 数据 (Fields) char c; void set(double

More information

内容简介 C 语言是一种结构化程序设计语言, 本书通过大量的实例讲解 C 语言程序设计的方法, 主要内容包括 C 语言程序的结构 数据类型 运算符和表达式 数据的输入和输出 选择结构 循环结构 数组 函数 指针 编译预处理 结构和共用体 位运算 文件等 每个单元包括小结 实验 习题等 本书可作为高等

内容简介 C 语言是一种结构化程序设计语言, 本书通过大量的实例讲解 C 语言程序设计的方法, 主要内容包括 C 语言程序的结构 数据类型 运算符和表达式 数据的输入和输出 选择结构 循环结构 数组 函数 指针 编译预处理 结构和共用体 位运算 文件等 每个单元包括小结 实验 习题等 本书可作为高等 普通高等教育 十二五 重点规划教材计算机系列中国科学院教材建设委员会 十二五 规划教材 C 语言程序设计 张秀萍主编闫丽王淑霞副主编 北 京 科学出版社职教技术出版中心 www.aboo 内容简介 C 语言是一种结构化程序设计语言, 本书通过大量的实例讲解 C 语言程序设计的方法, 主要内容包括 C 语言程序的结构 数据类型 运算符和表达式 数据的输入和输出 选择结构 循环结构 数组 函数 指针 编译预处理

More information

第 1 章 C 语言的发展 特点与程序结构 本章主要介绍了 C 语言的发展 特点和程序结构, 重点阐述了程序设计的基本方法, 包括面向过程的程序设计和面向对象的程序设计 ; 算法的概念及其表示, 包括用自然语言 流程图 伪代码 N-S 流程图的表示方法 ; 最后介绍了 C 语言应用程序的开发过程 1

第 1 章 C 语言的发展 特点与程序结构 本章主要介绍了 C 语言的发展 特点和程序结构, 重点阐述了程序设计的基本方法, 包括面向过程的程序设计和面向对象的程序设计 ; 算法的概念及其表示, 包括用自然语言 流程图 伪代码 N-S 流程图的表示方法 ; 最后介绍了 C 语言应用程序的开发过程 1 C 语言程序设计 电子教程 主编 : 杨健霑副主编 : 汪同庆 1 第 1 章 C 语言的发展 特点与程序结构 本章主要介绍了 C 语言的发展 特点和程序结构, 重点阐述了程序设计的基本方法, 包括面向过程的程序设计和面向对象的程序设计 ; 算法的概念及其表示, 包括用自然语言 流程图 伪代码 N-S 流程图的表示方法 ; 最后介绍了 C 语言应用程序的开发过程 1.1 C 语言的发展与特点 1.1.1

More information

C 语言程序设计 ( 第 33 版 )) #define PI // 下面 2 行是函数的原型说明部分 double sup_area(double r); double volume(double r); // 下面是主函数部分 { double a=-5,b,c,d; b=fab

C 语言程序设计 ( 第 33 版 )) #define PI // 下面 2 行是函数的原型说明部分 double sup_area(double r); double volume(double r); // 下面是主函数部分 { double a=-5,b,c,d; b=fab 第 1 章 C 语言基础与顺序结构 学习目标 1. 掌握 C 语言程序的结构 2. 合理选用数据类型 3. 掌握算术运算符和赋值运算符 4. 掌握控制数据的输入 输出方法 5. 掌握顺序结构以及顺序结构的流程 6. 掌握 Visual C++ 6.0 集成环境的使用方法 7. 掌握转换大小写字母的方法 8. 掌握产生随机整数的方法 计算机由硬件系统和软件系统组成, 其中硬件是物质基础, 而软件是计算机的灵魂

More information

JAVA 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:/

JAVA 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:/ 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:// 不能以数字开头 D._3_ B:// 不能用点和空格 提问 抢答 E.$anothervar C: // 不能用点和空格

More information

OOP with Java 通知 : Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢

OOP with Java 通知 : Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 : Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: 51141201063@ecnu.cn 复习 : Java 类型 基本类型 boolean, char, 封装 (wrappers) 类 (class) 定义 class MyType { int i;

More information

新・明解C言語入門編『索引』

新・明解C言語入門編『索引』 !... 75!=... 48 "... 234 " "... 9, 84, 240 #define... 118, 213 #include... 148 %... 23 %... 23, 24 %%... 23 %d... 4 %f... 29 %ld... 177 %lf... 31 %lu... 177 %o... 196 %p... 262 %s... 242, 244 %u... 177

More information

工程项目进度管理 西北工业大学管理学院 黄柯鑫博士 甘特图 A B C D E F G 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 甘特图的优点 : 直观明了 ( 图形化概要 ); 简单易懂 ( 易于理解 ); 应用广泛 ( 技术通用 ) 甘特图的缺点 : 不能清晰表示活动间的逻辑关系 WBS 责任分配矩阵 ( 负责〇审批

More information

林子雨《C语言程序设计》讲义PPT

林子雨《C语言程序设计》讲义PPT C 语言程序设计 厦门大学计算机科学系 2012-02-26 林子雨 ziyulin@xmu.edu.cn 2012-02-26 厦门大学非计算机专业本科生公共课 (2011-2012 第 2 学期 ) C 语言程序设计 林子雨厦门大学计算机科学系 E-mail: ziyulin@xmu.edu.cn 个人主页 :http://www.cs.xmu.edu.cn/linziyu 课程提要 第一章绪论

More information

任务 3 加法运算练习游戏 019 这就需要用到 C# 语言的基础语法, 如数据类型 运算符和控制语句, 还需要其他的常用控件 在此任务的完成过程中, 读者可以接触到 C# 的数据类型 变量常量 运算符 控制语句等基础语法, 掌握以上知识点及其在软件开发中的应用 3.2 相关知识 预定义

任务 3 加法运算练习游戏 019 这就需要用到 C# 语言的基础语法, 如数据类型 运算符和控制语句, 还需要其他的常用控件 在此任务的完成过程中, 读者可以接触到 C# 的数据类型 变量常量 运算符 控制语句等基础语法, 掌握以上知识点及其在软件开发中的应用 3.2 相关知识 预定义 任务 3 加法运算练习游戏 3.1 情境描述 选择了开发环境并理解了事件驱动机制以后, 要开发项目, 还需掌握 C# 语言的语法 本任务的目标是完成如图 3.1 和图 3.2 所示的小学生加法运算练习游戏 这个小软件的功能是在窗体中的 + 两边出现 2 个 10 以内的随机数, 让用户 ( 适合于小学生 ) 在文本框内输入其和, 然后单击 OK 按钮 若输入的和是正确的, 则跳出一个红色的图片, 同时提示答对了,

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章流程控制和数组 3.1 实验目的 (1) 熟练掌握控制台应用程序的代码编写和调试, 以及运行方法 (2) 掌握选择结构的一般语法格式和应用 (3) 掌握 switch 语句的用法 (4) 掌握选择结构的嵌套的用法, 能灵活使用选择结构解决实际问题 (5) 掌握 while 循环语句的一般语法格式 (6) 掌握 for 循环语句的一般语法格式 (7) 掌握循环嵌套的语法格式 (8) 掌握一维数组的定义

More information

试卷代号 :1253 座位号 E 口 国家开放大学 ( 中央广播电视大学 )2014 年秋季学期 " 开放本科 " 期末考试 C 语言程序设计 A 试题 2015 年 1 月 E 四! 五 总分! 一 单选题 ( 每小题 2 分, 共 20 分 ) 1. 由 C 语言源程序文件编译而成的目标文件的默

试卷代号 :1253 座位号 E 口 国家开放大学 ( 中央广播电视大学 )2014 年秋季学期  开放本科  期末考试 C 语言程序设计 A 试题 2015 年 1 月 E 四! 五 总分! 一 单选题 ( 每小题 2 分, 共 20 分 ) 1. 由 C 语言源程序文件编译而成的目标文件的默 试卷代号 :1253 座位号 E 口 国家开放大学 ( 中央广播电视大学 )2014 年秋季学期 " 开放本科 " 期末考试 C 语言程序设计 A 试题 2015 年 1 月 E 四! 五 总分! 一 单选题 ( 每小题 2 分, 共 20 分 ) 1. 由 C 语言源程序文件编译而成的目标文件的默认扩展名为 ( ) A. cpp B. c C. exe D. obj 2. 设 x 和 y 均为逻辑值,

More information

4.C ( 详细解析见视频课程 绝对值 01 约 21 分 15 秒处 ) 5.E ( 详细解析见视频课程 绝对值 01 约 32 分 05 秒处 ) 6.D ( 详细解析见视频课程 绝对值 02 约 4 分 28 秒处 ) 7.C ( 详细解析见视频课程 绝对值 02 约 14 分 05 秒处 )

4.C ( 详细解析见视频课程 绝对值 01 约 21 分 15 秒处 ) 5.E ( 详细解析见视频课程 绝对值 01 约 32 分 05 秒处 ) 6.D ( 详细解析见视频课程 绝对值 02 约 4 分 28 秒处 ) 7.C ( 详细解析见视频课程 绝对值 02 约 14 分 05 秒处 ) [ 说明 ] 1. 以下所指教材是指朱杰老师的 管理类联考综合能力数学套路化攻略 2. 该文档中所标答案和参见的教材答案, 与视频有冲突的, 以视频答案为准! 基础篇 第 1 章 数 1.2.1 整数例题答案 : 1. A ( 详细解析见教材 P7 例 2) 2. D ( 详细解析见视频课程 数的性质 约 10 分 53 秒处 ) 3. C ( 详细解析见教材 P7 例 3) 4.E ( 详细解析见视频课程

More information

STRUCT Tag OptTag ID Tag ID 7..4 Declarators VarDec ID VarDec LB INT RB FunDec ID LP VarList RP ID LP RP VarList ParamDec COMMA VarList ParamDec Param

STRUCT Tag OptTag ID Tag ID 7..4 Declarators VarDec ID VarDec LB INT RB FunDec ID LP VarList RP ID LP RP VarList ParamDec COMMA VarList ParamDec Param 7. 附录 A:C 语言文法 在本附录中, 我们给出 C 语言的文法定义和补充说明 7. 文法定义 7.. Tokens INT /* A sequence of digits without spaces */ FLOAT /* A real number consisting of digits and one decimal point. The decimal point must be surrounded

More information

Introduction to Computer Systems /18-243, spring st Lecture, Jan. 12th

Introduction to Computer Systems /18-243, spring st Lecture, Jan. 12th 计算机组成原理习题课 1 授课老师 : 王浩宇 haoyuwang@bupt.edu.cn 1 练习 : 机器数的表示和相互转化 练习 1: 当十六进制数 9B 和 FF 分别表示为原码 补码 反码 移码和无符号数时, 所对应的十进制数各为多少 ( 设机器数采用一位符号位 )? 16 进制 真值 无符号数 原码 ( 真值 ) 反码 ( 真值 ) 补码 ( 真值 ) 移码 ( 真值 ) 9BH 二进制十进制

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

Microsoft PowerPoint - C语言课件-9-结构体.pptx

Microsoft PowerPoint - C语言课件-9-结构体.pptx 第九章结构体 郎大鹏 第九章结构体 9.1 结构体类型的声明方法 9.2 结构体类型变量的定义与使用 9.3 结构体数组 9.4 编程举例 9.5 习题 9.1 结构体类型的声明方法 结构体声明的语法形式如下 : struct 结构体标识符 成员变量列表 ; }; 例如, 为了描述班级 ( 假设仅仅包括班级编号 专业 人数等信息 ), 可以声明如下的结构体类型 struct Class char Code[10];

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 4.4.1 逻辑运算符及其优先次序 3 种逻辑运算符 : &&( 逻辑与 ) ( 逻辑或 )!( 逻辑非 ) && 和 是双目 ( 元 ) 运算符! 是一目 ( 元 ) 运算符 逻辑表达式 用逻辑运算符将关系表达式或其他逻辑量连接起来的式子 4.4.1 逻辑运算符及其优先次序 判断年龄在 13 至 17 岁之内? age>=13 && age

More information

网C试题(08上).doc

网C试题(08上).doc 学习中心 姓名 学号 西安电子科技大学网络与继续教育学院 高级语言程序设计 (C) 全真试题 ( 闭卷 90 分钟 ) 题号一二三总分 题分 60 20 20 得分 一 单项选择题 ( 每小题 3 分, 共 60 分 ) 1.C 语言程序的基本单位是 A) 程序行 B) 语句 C) 函数 D) 字符 2. 下列四组选项中, 均是不合法的用户标识符的选项是 A)A B)getc C)include D)while

More information

Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式]

Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式] 函数 Function 如何重用代码 How to reuse code 3 4 = 3*3*3*3 3 4,6 5 : 拷贝 - 粘帖代码 (Copy-paste code) 3 4,6 5,12 10 : 拷贝 - 粘帖代码 (Copy-paste code) Bad! 使用函数 (with a function) 使用函数 (with a function) 使用函数 (with a function)

More information

Mx* Language Reference Manual 2016 年 4 月 7 日 1 用词说明 未定义 指中央还没有表态指语言定义中不涉及的部分, 编译器和运行时环境如何表现是未知的 主要是为了给学生实现语言留下足够的空间, 标准测试集里不会出现涉及未定义部分的内容 例如 : 术语 : 源程

Mx* Language Reference Manual 2016 年 4 月 7 日 1 用词说明 未定义 指中央还没有表态指语言定义中不涉及的部分, 编译器和运行时环境如何表现是未知的 主要是为了给学生实现语言留下足够的空间, 标准测试集里不会出现涉及未定义部分的内容 例如 : 术语 : 源程 Mx* Language Reference Manual 2016 年 4 月 7 日 1 用词说明 未定义 指中央还没有表态指语言定义中不涉及的部分, 编译器和运行时环境如何表现是未知的 主要是为了给学生实现语言留下足够的空间, 标准测试集里不会出现涉及未定义部分的内容 例如 : 术语 : 源程序大小超过 256M 是未定义的 解释 : 我们测试用的源程序大小不会超过 256M 2 程序结构 Mx*

More information

Microsoft Word - FM{new}.doc

Microsoft Word - FM{new}.doc Lanczos 方法 Louis Komzsik 著张伟廖本善译 演变与应用 清华大学出版社 北京 内容简介 Lanczos 方法是 20 世纪计算数学方向最有影响的方法之一, 并且已经在工程中得到了广泛应用. 本书兼顾了 Lanczos 方法的理论演变和工程中的实际应用, 其内容分为两部分 : 第一部分阐述了方法的演变, 并提供了具体算法 ; 第二部分讨论了工业中的实际应用, 包括常用的模态分析

More information

内容简介本书主要内容包括程序设计基础知识 C 语言数据类型 运算符与表达式 程序结构 数组 指针 其他数据类型 函数 文件等, 通过对大量实例进行分析, 力求提高和培养学生的程序设计能力 本书有配套辅导教程 程序设计基础实训指导教程 C 语言 ( 科学出版社出版 ), 引导读者学习和巩固各章节内容

内容简介本书主要内容包括程序设计基础知识 C 语言数据类型 运算符与表达式 程序结构 数组 指针 其他数据类型 函数 文件等, 通过对大量实例进行分析, 力求提高和培养学生的程序设计能力 本书有配套辅导教程 程序设计基础实训指导教程 C 语言 ( 科学出版社出版 ), 引导读者学习和巩固各章节内容 普通高等教育 十二五 规划教材计算机系列中国科学院教材建设专家委员会 十二五 规划教材 程序设计基础 C 语言 杨莉刘鸿翔主编唐宏亮邓芳副主编余慧王海军 1 科学出版社职教技术出版中心 www.aboo 北 京 内容简介本书主要内容包括程序设计基础知识 C 语言数据类型 运算符与表达式 程序结构 数组 指针 其他数据类型 函数 文件等, 通过对大量实例进行分析, 力求提高和培养学生的程序设计能力 本书有配套辅导教程

More information

2015年计算机二级(C语言)模拟试题及答案(四)

2015年计算机二级(C语言)模拟试题及答案(四) 2015 年计算机二级 (C 语言 ) 模拟试题及答案 (4) 一 填空题 1 C 语言中基本的数据类型有 : 2 C 语言中普通整型变量的类型说明符为, 在内存中占 字节, 有符号普通整型的数据范围是 3 整数-35 在机内的补码表示为 4 执行下列语句 int a=8;a+=a-=a*a; 后,a 的值是 5 有如下语句:charA[ ]={ I am a student }; 该字符串的长度是,A[3]=

More information

设计模式 Design Patterns

设计模式 Design Patterns 丁勇 Email:18442056@QQ.com 学习目标 描述 JSP 表达式语言的语法 认识使用 JSP 表达式的优点 在 JSP 中使用表达式语言 表达式语言简介 5 1 EL 为表达式语言 由两个组开发 JSP 标准标签库专家组 JSP 2.0 专家组 JSP 表达式语言的语法 ${EL Expression} JSP EL 表达式用于以下情形 静态文本 标准标签和自定义标签 表达式语言简介

More information

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023)

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023) ( CIP) /. :, 2005. 2 ( ) ISBN 7-5624-3339-9.......... TP311. 1 CIP ( 2005) 011794 : : : : * : : 174 ( A ) :400030 : ( 023) 65102378 65105781 : ( 023) 65103686 65105565 : http: / /www. cqup. com. cn : fxk@cqup.

More information

图书在版编目 (CIP) 数据程序员的数学. 3, 线性代数 /( 日 ) 平冈和幸, ( 日 ) 堀玄著 ; 卢晓南译. 北京 : 人民邮电出版社, ( 图灵程序设计丛书 ) ISBN Ⅰ. 1 程 Ⅱ. 1 平 2 堀 3 卢 Ⅲ. 1 电子计算

图书在版编目 (CIP) 数据程序员的数学. 3, 线性代数 /( 日 ) 平冈和幸, ( 日 ) 堀玄著 ; 卢晓南译. 北京 : 人民邮电出版社, ( 图灵程序设计丛书 ) ISBN Ⅰ. 1 程 Ⅱ. 1 平 2 堀 3 卢 Ⅲ. 1 电子计算 图灵程序设计丛书 程序员的数学 3: 线性代数 [ 日 ] 平冈和幸堀玄著 卢晓南译 图书在版编目 (CIP) 数据程序员的数学. 3, 线性代数 /( 日 ) 平冈和幸, ( 日 ) 堀玄著 ; 卢晓南译. 北京 : 人民邮电出版社, 2016.3 ( 图灵程序设计丛书 ) ISBN 978-7-115-41774-9 Ⅰ. 1 程 Ⅱ. 1 平 2 堀 3 卢 Ⅲ. 1 电子计算机 数学基础 2

More information

C/C++语言 - C/C++数据

C/C++语言 - C/C++数据 C/C++ C/C++ Table of contents 1. 2. 3. 4. char 5. 1 C = 5 (F 32). 9 F C 2 1 // fal2cel. c: Convert Fah temperature to Cel temperature 2 # include < stdio.h> 3 int main ( void ) 4 { 5 float fah, cel ;

More information

图书在版编目 (CIP) 数据 满堂花醉 / 沈胜衣著. 南京 : 江苏教育出版社, ( 沈郎文字 ) ISBN Ⅰ. 满... Ⅱ. 沈... Ⅲ. 作家 - 人物研究 - 世界 Ⅳ.K815.6 中国版本图书馆 CIP 数据核字 (2005) 第 041

图书在版编目 (CIP) 数据 满堂花醉 / 沈胜衣著. 南京 : 江苏教育出版社, ( 沈郎文字 ) ISBN Ⅰ. 满... Ⅱ. 沈... Ⅲ. 作家 - 人物研究 - 世界 Ⅳ.K815.6 中国版本图书馆 CIP 数据核字 (2005) 第 041 图书在版编目 (CIP) 数据 满堂花醉 / 沈胜衣著. 南京 : 江苏教育出版社, 2005.4 ( 沈郎文字 ) ISBN 7-5343-6512-0 Ⅰ. 满... Ⅱ. 沈... Ⅲ. 作家 - 人物研究 - 世界 Ⅳ.K815.6 中国版本图书馆 CIP 数据核字 (2005) 第 041843 号 出版者社址网址出版人 南京市马家街 31 号邮编 :210009 http://www.1088.com.cn

More information

语言教程 1 C 语言概述 C 语言的发展过程 当代最优秀的程序设计语言 C 语言版本 C 语言的特点 面向对象的程序设计语言 C 和 C 简单的 C 程序介绍 输入和

语言教程 1 C 语言概述 C 语言的发展过程 当代最优秀的程序设计语言 C 语言版本 C 语言的特点 面向对象的程序设计语言 C 和 C 简单的 C 程序介绍 输入和 语言教程 1 C 语言概述...6 1.1 C 语言的发展过程...6 1.2 当代最优秀的程序设计语言...6 1.3 C 语言版本...7 1.4 C 语言的特点...7 1.5 面向对象的程序设计语言...7 1.6 C 和 C++...8 1.7 简单的 C 程序介绍...8 1.8 输入和输出函数...9 1.9 C 源程序的结构特点...10 1.10 书写程序时应遵循的规则...10

More information

普通高等教育电气信息类应用型规划教材 程序设计基础 基于问题情境的 C 语言实践教程 张克军主 编 代俊雅副主编 北 京

普通高等教育电气信息类应用型规划教材 程序设计基础 基于问题情境的 C 语言实践教程 张克军主 编 代俊雅副主编 北 京 科学出版社职教技术出版中心 普通高等教育电气信息类应用型规划教材 程序设计基础 基于问题情境的 C 语言实践教程 张克军主 编 代俊雅副主编 北 京 内容简介 本书分为基础 提高和扩展三篇, 共 15 章 我们本着巩固学生基础知识 提升学生编程能力和培养学生程序设计素质的想法设计每一章的内容, 确保学生通过循序渐进的学习, 理解 掌握教学内容 本书主要内容包括 : C 语言的基础知识, 数据类型 运算符与表达式,

More information

Microsoft PowerPoint - 07 派生数据类型

Microsoft PowerPoint - 07 派生数据类型 能源与动力工程学院 目录 派生类型 陈 斌 固有数据类型 数值型 (numerical) 整型 INTEGER 实型 REAL 复数型 COMPLEX 非数值型 字符型 CHARACTER 逻辑型 ( 布尔型 )LOGICAL 自定义数据类型 ( 派生类型, derived type) 派生类型是指用户利用 Fortran 系统内部类型, 如整型 实型 复数型 逻辑型 字符型等的组合自行创建出一个新的数据类型,

More information

内容简介 本书根据全国计算机等级考试二级 C 语言程序设计考试大纲要求, 结合目前高等院校学生学习计算机程序设计课程的情况组织内容, 全面地介绍了 C 语言程序设计的基础知识, 系统地讲述了 C 语言程序设计的基本方法和技巧 本书以 ANSI C 语言标准为依据, 深入浅出地介绍了 C 语言的基本数

内容简介 本书根据全国计算机等级考试二级 C 语言程序设计考试大纲要求, 结合目前高等院校学生学习计算机程序设计课程的情况组织内容, 全面地介绍了 C 语言程序设计的基础知识, 系统地讲述了 C 语言程序设计的基本方法和技巧 本书以 ANSI C 语言标准为依据, 深入浅出地介绍了 C 语言的基本数 普通高等教育计算机系列规划教材 C 语言程序设计 ( 第二版 ) 姜海涛主编曹震中武楠王妍闫超刘红娟叶永凯卫娜副主编 副主编 科学出版社职教技术出版中心 www.aboo 北京 内容简介 本书根据全国计算机等级考试二级 C 语言程序设计考试大纲要求, 结合目前高等院校学生学习计算机程序设计课程的情况组织内容, 全面地介绍了 C 语言程序设计的基础知识, 系统地讲述了 C 语言程序设计的基本方法和技巧

More information

untitled

untitled 不 料 料 例 : ( 料 ) 串 度 8 年 數 串 度 4 串 度 數 數 9- ( ) 利 數 struct { ; ; 數 struct 數 ; 9-2 數 利 數 C struct 數 ; C++ 數 ; struct 省略 9-3 例 ( 料 例 ) struct people{ char name[]; int age; char address[4]; char phone[]; int

More information

Microsoft PowerPoint - 1. C++介绍.ppt [兼容模式]

Microsoft PowerPoint - 1. C++介绍.ppt [兼容模式] C++ 入门 http://hwdong.com 1. 程序 = 数据 + 运算 Application = Data + Operator 程序就是对数据进行加工处理 ( 运算 ) 程序 = 数据 + 运算 数据用变量 ( 常量 ) 表示, 用运算符对它们进行运算 程序 = 变量 + 运算符 程序中的数据应有条理地存储在内存中, 处理需要按照一定步骤或方法进行 程序 = 数据结构 + 算法 机器语言

More information

中国科学院优秀教材普通高等教育电气信息类应用型规划教材 C 语言程序设计 ( 第二版 ) 罗朝盛主编 张银南白宝钢魏英 副主编 北 京 内容简介 本书共 10 章, 包括 :C 语言程序设计概述, 数据类型与常用库函数, 运算符与表达式, 算法与控制结构, 数组 字符串与指针, 函数, 编译预处理, 结构体 共用体与枚举类型, 文件操作,C++ 程序设计初步 本书配有大量的例题和习题, 适合教师课堂教学和读者自学

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 Python 入门 孙栩 xusun@pku.edu.cn 1 课程的整体介绍 目录 contents 2 Python 的介绍及如何安装 Python 3 使用 Python 编写简单小程序 1 课程的整体介绍 课程的整体介绍 Python 入门 1. Python 的介绍与安装 2. 变量与表达式 3. 一些简单的小程序 数据结构 1. 字符串 2. 列表 3. 元组 4. 字典 5. 集合 分支与循环

More information

C C

C C C C 2017 3 8 1. 2. 3. 4. char 5. 2/101 C 1. 3/101 C C = 5 (F 32). 9 F C 4/101 C 1 // fal2cel.c: Convert Fah temperature to Cel temperature 2 #include 3 int main(void) 4 { 5 float fah, cel; 6 printf("please

More information

移动平台应用软件开发 C/C++/JAVA 基础 C 中的预处理指令 主讲 : 张齐勋 移动平台应用软件开发 课程建设小组北京大学二零一五年

移动平台应用软件开发 C/C++/JAVA 基础 C 中的预处理指令 主讲 : 张齐勋 移动平台应用软件开发 课程建设小组北京大学二零一五年 移动平台应用软件开发 C/C++/JAVA 基础 C 中的预处理指令 主讲 : 张齐勋 zhangqx@ss.pku.edu.cn 移动平台应用软件开发 课程建设小组北京大学二零一五年 预处理 2 预处理器 C 语言的编译系统分为编译预处理和正式编译 预处理作用 : 对源程序编译之前做一些处理, 生成扩展 C 源程序 预处理器的行为是由预处理指令控制的 宏定义 文件包含 条件编译 #define #ifdef

More information

高等学校计算机应用规划教材 C 语言程序设计 梁海英张红军主编 千文陈科尹孟伟东曾霖副主编 北 京

高等学校计算机应用规划教材 C 语言程序设计 梁海英张红军主编 千文陈科尹孟伟东曾霖副主编 北 京 高等学校计算机应用规划教材 C 语言程序设计 梁海英张红军主编 千文陈科尹孟伟东曾霖副主编 北 京 内 容 简 介 本书按照程序设计的体系结构 系统地介绍了 C 语言程序设计的基本思想及基本方法 全书内容分为三 部分 第一部分(第 1 7 章)依次介绍了 C 语言程序设计的基本应用 包括 C 语言程序的结构 数据类型 及其运算 基本语句 结构化程序设计的顺序结构 选择结构 循环结构 数组及函数的开发方法与应用实

More information

大侠素材铺

大侠素材铺 编译原理与技术 词法分析 Ⅱ 计算机科学与技术学院李诚 13/09/2018 主要内容 记号 (token) 源程序 词法分析器 getnexttoken 语法分析器 符号表 词法分析器的自动生成 正则表达式 NFA DFA 化简的 DFA 词法分析器的生成器 Lex: flex jflex Fst lexicl nlyzer genertor 2/51 Regulr Expr to NFA 正则表达式

More information

关于编写硕士研究生入学考试自命题初试科目

关于编写硕士研究生入学考试自命题初试科目 华北水利水电大学 2019 年硕士研究生入学考试初试科目考试大纲 农业综合知识三 ( 科目代码 :341) 考试大纲 考试形式和试卷结构一 试卷分值及考试时间考试时间 180 分钟 (3 个小时 ), 满分 150 分二 考试基本要求本考试大纲适用于报考华北水利水电大学农业工程与信息技术专业硕士研究生入学考试, 该科目包括 : 数据库 c 语言程序设计 计算机网络三部分内容 三 试卷内容及结构数据库部分占

More information

Microsoft Word - 文前.doc

Microsoft Word - 文前.doc 普通高等教育 十二五 规划教材中国科学院教材建设专家委员会规划教材 C 语言程序设计 何丽余平主编 胡勇刘云杰陈勇副主编 北京 内容简介 本书根据教育部计算机基础课程教学指导分委员会制定的 高级语言程序设计 课程的教学基本要求和全国高等学校非计算机专业学生计算机等级考试教学大纲要求, 以 C 语言为主要内容, 介绍了结构化程序设计的方法 本书主要内容有 C 语言概述 C 语言程序基础 结构化程序设计

More information

nooog

nooog C : : : , C C,,, C, C,, C ( ), ( ) C,,, ;,, ; C,,, ;, ;, ;, ;,,,, ;,,, ; : 1 9, 2 3, 4, 5, 6 10 11, 7 8, 12 13,,,,, 2008 1 1 (1 ) 1.1 (1 ) 1.1.1 ( ) 1.1.2 ( ) 1.1.3 ( ) 1.1.4 ( ) 1.1.5 ( ) 1.2 ( ) 1.2.1

More information

download.kaoyan.com_2006ÄêÌì½ò¹¤Òµ´óѧ¸ß¼¶ÓïÑÔ³ÌÐòÉè¼Æ£¨409£©¿¼ÑÐÊÔÌâ

download.kaoyan.com_2006ÄêÌì½ò¹¤Òµ´óѧ¸ß¼¶ÓïÑÔ³ÌÐòÉè¼Æ£¨409£©¿¼ÑÐÊÔÌâ 考生注意 : 本试卷共七大题, 满分 150 分 考试时间为 3 小时 ; 所有答案均写在答题纸上 ( 注明题号 ), 在此答题一律无效无效 一 选择题 ( 本题共 20 小题, 每小题 2 分, 满分 40 分 ) 1 char ch 1 2 A 0

More information

NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p

NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p NOWOER.OM /++ 程师能 评估. 单项选择题 1. 下 描述正确的是 int *p1 = new int[10]; int *p2 = new int[10](); p1 和 p2 申请的空间 的值都是随机值 p1 和 p2 申请的空间 的值都已经初始化 p1 申请的空间 的值是随机值,p2 申请的空间 的值已经初始化 p1 申请的空间 的值已经初始化,p2 申请的空间 的值是随机值 2.

More information

器之 间 向一致时为正 相反时则为负 ③大量电荷的定向移动形成电 流 单个电荷的定向移动同样形成电流 3 电势与电势差 1 陈述概念 电场中某点处 电荷的电势能 E p 与电荷量 q Ep 的比值叫做该点处的电势 表达式为 V 电场中两点之间的 q 电势之差叫做电势差 表达式为 UAB V A VB 2 理解概念 电势差是电场中任意两点之间的电势之差 与参考点的选择无关 电势是反映电场能的性质的物理量

More information

第一章 绪论

第一章 绪论 C++ 语言程序设计 第二章 C++ 简单程序设计 中国科大 黄章进 本章主要内容 C++ 语言概述 基本数据类型和表达式 数据的输入与输出 算法的基本控制结构 自定义数据类型 深度探索 2 C++ 语言的产生 C++ 语言概述 C++ 是从 C 语言发展演变而来的, 首先是一个更好的 C 引入了类的机制, 最初的 C++ 被称为 带类的 C 1983 年正式取名为 C++ 从 1989 年开始 C++

More information

科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心 www.aboo 科学出版社职教技术出版中心

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 21 日晚 9 点 作业提交格式 学习使用 文本编辑器 cmd, PowerShell (Windows), terminal(linux, Mac)

OOP with Java 通知 Project 2 提交时间 : 3 月 21 日晚 9 点 作业提交格式 学习使用 文本编辑器 cmd, PowerShell (Windows), terminal(linux, Mac) OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 21 日晚 9 点 作业提交格式 学习使用 文本编辑器 cmd, PowerShell (Windows), terminal(linux, Mac) 复习 面向对象编程 将实际问题分解成不同的对象 不的对象提供不同的服务 对象之间可以传递消息 例子小李深夜

More information

第 3 章选择结构 q q q Python 中表示条件的方法 if 语句 选择结构程序设计方法

第 3 章选择结构 q q q Python 中表示条件的方法 if 语句 选择结构程序设计方法 第 3 章选择结构 q q q Python 中表示条件的方法 if 语句 选择结构程序设计方法 3.1 条件的描述 3.1.1 关系运算 Python 的关系运算符有 : =( 大于等于 ) ==( 等于 )!=( 不等于 ) 关系运算符用于两个量的比较判断 由关系运算符将两个表达式连接起来的式子就称为关系表达式, 它用来表示条件, 其一般格式为

More information

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf (%d, & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf (%d %d 2013 18 ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp, Compilation Error cin scanf Time Limit Exceeded 1: A 5 B 5 C 5 D 5 E 5 F 5 1 2013 C 1 # include 2 int main ( void ) 3 { 4 int cases, a, b,

More information

CYY 1.mps

CYY 1.mps 标准 C 语言程序设计及应用 周纯杰刘正林何顶新周凯波编著 华中科技大学出版社 内容简介 本书以 ANSI C ++ 标准为准则, 采取循序渐进 突出重点 分散难点的编写方法, 系统地讲授作为 ANSI C ++ 内核的 C 语言的基本语法和程序设计方法 全书共分 11 章 : C 语言基础知识, 数据类型 运算符和表达式, 程序和流程控制, 变量的存储类型, 数组, 指针, 函数, 结构和联合,

More information

<4D F736F F F696E74202D BDE1B9B9BBAFB3CCD0F2C9E8BCC D20D1ADBBB7>

<4D F736F F F696E74202D BDE1B9B9BBAFB3CCD0F2C9E8BCC D20D1ADBBB7> 能源与动力工程学院 结构化编程 结构化程序设计 循环 循环结构 确定性循环 非确定性循环 I=1 sum=sum+i I = I +1 陈 斌 I>100 Yes No 目录 求和 :1+2+3++100 第四节循环的应用 PROGRAM GAUSS INTEGER I, SUM 计数器 SUM = 0 DO I = 1, 100, 1 SUM = SUM + I print*, I, SUM DO

More information

实验 2 顺序结构程序设计 9 unsigned short a; a= 1; printf("%d\n",a); 运行以上程序, 查看输出的结果, 分析为什么会输出这些信息 (1) 打开 VC 创建 liti2 2.c 文件 (2) 输入以上代码并编译执行 (3) 结果如图 2 2 所示 图 2

实验 2 顺序结构程序设计 9 unsigned short a; a= 1; printf(%d\n,a); 运行以上程序, 查看输出的结果, 分析为什么会输出这些信息 (1) 打开 VC 创建 liti2 2.c 文件 (2) 输入以上代码并编译执行 (3) 结果如图 2 2 所示 图 2 实验 2 顺序结构程序设计 明符 一 实验目的 1. 掌握 C 语言基本数据类型 运算符和赋值语句 2. 变量的定义及初始化 整型 实型 字符型等基本类型变量的定义和初始化 3. 熟练使用赋值运算 算术运算等表达式, 能够编写简单顺序结构程序 4. 掌握 C 语言基本的输入输出 熟练使用标准输入 输出函数及各种数据类型的格式说 二 实验内容及步骤 例题 2.1 输入程序, 查看输出结果 (1) 参照第一章创建

More information

教学输入与学习者的语言输出 温晓虹 本文从三个方面探讨了语言的输入与输出的关系 首先从理论研究的角度讨 论了从语言输入到语言输出的习得过程 实验研究表明 输入的语言素材必须被学习者所接收 即使接收了的内容也并不会自动进入中介语的体系 而是需要进一步对输入语言进行 分解 归类等分析性与综合性的处理 在语言 内化 的基础上 学习者的中介语系统才能 够不断地得到重新组合 趋于目的语 另外 学习者在语言输出前和输出时需要调节

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

林子雨《C语言程序设计》讲义PPT

林子雨《C语言程序设计》讲义PPT C 语言程序设计 厦门大学计算机科学系 2013/3/19 林子雨 ziyulin@xmu.edu.cn 2013/3/19 厦门大学非计算机专业本科生公共课 (2012-2013 第 2 学期 ) C 语言程序设计 第 4 章选择结构林子雨 厦门大学计算机科学系 E-mail: ziyulin@xmu.edu.cn 个人主页 :http://www.cs.xmu.edu.cn/linziyu 课程提要

More information