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

Size: px
Start display at page:

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

Transcription

1 普通高等教育 十二五 重点规划教材公共课系列 中国科学院教材建设专家委员会 十二五 规划教材 C 语言程序设计 张淑华朱丽莉主编 于雪晶顾煜新副主编 北京

2 内容简介 本书以教育部高等学校计算机科学与技术教学指导委员会编制的 关于进一步加强高等学校计算机基础教学的意见暨计算机基础课程教学基本要求 中有关计算机程序设计基础 (C 语言 ) 课程教学基本要求为指导, 结合教育部考试中心最新的全国计算机等级考试二级 (C 语言程序设计 ) 考试大纲要求和作者多年的教学实践经验编写而成 全书共 11 章, 主要包括计算机语言与结构化程序设计的基本概念 C 语言的基本概念 三种基本结构程序设计 数组 结构体 共用体 枚举类型 函数 变量的存储属性 编译预处理 指针 用户自定义类型以及文件等内容 本书体系完整 语言精炼, 叙述深入浅出, 内容详略得当 注重实践 针对全国计算机二级考试, 对例题与习题都作了精心设计 本书可作为高等学校本 专科计算机程序设计课程教学用书, 也可作为全国计算机二级考试辅导用书和学生自学参考书 图书在版编目 (CIP) 数据 C 语言程序设计 / 张淑华, 朱丽莉主编. 北京 : 科学出版社,2012 ( 普通高等教育 十二五 重点规划教材公共课系列 中国科学院教材建设专家委员会 十二五 规划教材 ) ISBN Ⅰ.1C Ⅱ.1 张 2 朱 Ⅲ. 1C 语言 - 程序设计 - 高等学校 - 教材 Ⅳ.1TP312 中国版本图书馆 CIP 数据核字 (2011) 第 号 责任编辑 : 戴薇李瑜张振华 / 责任校对 : 耿耘责任印制 : 吕春珉 / 封面设计 : 东方人华平面设计部 出版北京东黄城根北街 16 号邮政编码 : 新雷印刷厂印刷科学出版社发行各地新华书店经销 * 年 2 月第一版开本 : / 年 7 月第三次印刷印张 :22 3/4 0 字数 : 定价 :38.00 元 ( 如有印装质量问题, 我社负责调换 < 新雷 >) 销售部电话 编辑部电话 版权所有, 侵权必究举报电话 : ; ;

3 前 言 教育部高等学校计算机科学与技术教学指导委员会于 2006 年编制了 关于进一步加强高等学校计算机基础教学的意见暨计算机基础课程教学基本要求, 提出计算机基础教学是面向非计算机专业的计算机教学, 所以它不同于计算机专业的计算机教学 计算机基础教学的目标是培养学生掌握一定的计算机基础知识 技术与方法, 以及利用计算机解决本专业领域中问题的能力 计算机程序设计基础是大学计算机基础教学系列中的核心课程, 主要讲授程序设计语言的基本知识和程序设计的技术与方法 由于 C 语言具有功能丰富 表达能力强 使用灵活方便 应用面广 目标程序效率高 可移植性好等特点, 自 20 世纪 90 年代以来,C 语言迅速在全世界得到普及和推广 现在, 大多数高校都把 C 语言作为第一门计算机语言进行计算机程序设计基础教学, 学习和掌握 C 语言已经成为许多学生的迫切需要 本书编者都是长期从事计算机基础教学的高校一线教师, 按照计算机基础教学规律精心编排各章节内容, 将多年的教学经验和体会融入书中 在各章内容的选择上兼顾教育部考试中心最新的全国计算机等级考试二级 (C 语言程序设计 ) 考试大纲要求, 精选并设计例题和习题 全书共 11 章, 主要包括计算机语言与结构化程序设计的基本概念 C 语言的基本概念 三种基本结构程序设计 数组 结构体 共用体 枚举类型 函数 变量的存储属性 编译预处理 指针 用户自定义类型以及文件等内容 本书体系完整 语言精炼, 叙述深入浅出, 内容详略得当 注重实践, 力求使学生掌握结构化程序设计的方法和技能, 具有用 C 语言编程并解决实际问题的能力 书中所有的例题和习题, 都是在 Visual C 环境下调试通过的 本书可作为高等学校本 专科计算机程序设计课程教学用书, 也可作为全国计算机二级考试辅导用书和学生自学的参考书 C 语言程序设计是一门实践性很强的课程, 读者可以参 考 使用与本书配套的 C 语言程序设计实践教程 ( 韩志明 王立君主编, 科学出版社 ) 本书由张淑华 朱丽莉担任主编, 由于雪晶 顾煜新担任副主编 具体编写分工 : 于雪 晶编写第 1~4 章, 顾煜新编写第 5~7 章, 朱丽莉编写第 8 章, 张淑华编写第 9~11 章和附 录 全书由朱丽莉教授审稿 在本书的编写和出版过程中, 科学出版社给予了大力帮助和支 持, 在此表示感谢 由于编者水平有限, 书中难免有疏漏之处, 恳请读者批评指正 编者 2011 年 10 月

4 目 录 第 1 章 C 语言概述 计算机语言与结构化程序设计 计算机语言 结构化程序设计 C 语言的发展历史和特点 C 语言的发展历史 C 语言的特点 C 语言程序的基本结构和执行过程 C 语言程序简单实例 C 语言程序执行过程 C 语言的字符集和标识符 字符集 标识符 预定义标识符 习题 第 2 章数据类型及其表达式 C 语言数据类型简介 基本数据类型 常量与变量 整型数据 实型数据 字符型数据 空类型 运算符与表达式 C 运算符简介 算术运算符和算术表达式 关系运算符和关系表达式 逻辑运算符和逻辑表达式 条件运算符和条件表达式 赋值运算符和赋值表达式 逗号运算符和逗号表达式 位运算符和位运算表达式 不同类型数据间的转换 不同类型数据间的隐式转换... 46

5 iv 目 录 C 语言程序设计 不同类型数据间的显式转换 习题 第 3 章顺序结构的程序设计 C 语句概述 数据输入 / 输出的概念及在 C 语言中的实现 字符数据的输入和输出 字符输入函数 getchar( ) 字符输出函数 putchar( ) 格式化输入与输出 格式化输入函数 scanf( ) 格式化输出函数 printf( ) 习题 第 4 章选择结构的程序设计 条件选择结构 if 语句的两种形式 if 语句的嵌套 开关选择结构 switch 语句形式 switch 语句的嵌套 选择结构程序设计举例 习题 第 5 章循环结构的程序设计 穷举与迭代算法 goto 语句 while 语句 do-while 语句 for 语句 循环的嵌套 循环结构中的跳转语句 break 语句 continue 语句 循环结构程序设计举例 习题 第 6 章数组 一维数组 一维数组的定义

6 目 录 v 一维数组元素的引用 一维数组的初始化 一维数组应用举例 二维数组 二维数组的定义 二维数组元素的引用 二维数组的初始化 二维数组应用举例 字符数组 字符数组的定义 字符数组的初始化 字符数组的引用 字符串处理函数 字符数组应用举例 习题 第 7 章结构体 共用体与枚举 结构体 结构体类型的定义 结构体变量 结构体数组 共用体 共用体类型的定义 共用体变量 枚举类型 枚举类型的定义 枚举类型变量 类型的重新命名 习题 第 8 章函数 概述 函数的定义 无参函数的定义 有参函数的定义 空函数的定义 函数的参数和函数的返回值 形式参数和实际参数 函数的返回值

7 vi 目 录 8.4 函数的调用 C 语言程序设计 函数调用的一般形式 函数调用的方式 函数的声明 函数的嵌套调用 函数的递归调用 构造类型数据作为函数的参数 结构体变量作为函数的参数 数组作为函数的参数 习题 第 9 章变量 函数的属性和编译预处理 变量的存储类型 变量的存储类型含义 变量的存储类型分类 变量的作用域 局部变量及其作用域 全局变量及其作用域 内部函数和外部函数 内部函数 外部函数 编译预处理 宏定义 文件包含 条件编译 习题 第 10 章指针 指针与指针变量 指针的概念 指针变量 指针运算 指针变量与数组 一维数组的指针和指向一维数组的指针变量 二维数组的指针和指向二维数组的指针变量 字符串的指针和指向字符串的指针变量 指针变量与结构体 结构体变量的指针和指向结构体变量的指针变量 结构体数组的指针和指向结构体数组的指针变量

8 目 录 vii 10.4 指针变量与函数 函数的指针和指向函数的指针变量 指针变量作函数参数 返回指针值的函数 指针数组 指针数组的定义 指针数组元素的引用 指针数组的初始化 指针数组应用举例 指针数组作 main( ) 函数的形参 指向指针的指针变量 指向指针的指针变量的定义 指向指针的指针变量的引用 指向指针的指针变量的初始化 指向指针的指针变量的应用举例 用指针处理链表 链表概述 单链表 动态内存分配函数 建立键表 输出链表 对链表的删除操作 对链表的插入操作 习题 第 11 章文件 C 文件概述 文件类型指针 文件的打开与关闭 文件的打开 (fopen( ) 函数 ) 文件的关闭 (fclose( ) 函数 ) 文件的读写 字符读写函数 字符串读写函数 格式化读写函数 数据块读写函数 文件的定位 rewind( ) 函数 文件的随机读写

9 viii 目 录 ftell( ) 函数 出错的检测 ferror( ) 函数 clearerr( ) 函数 习题 附录 A 常用字符与 ASCII 代码对照表 附录 B 运算符的优先级和结合性 附录 C 常用的 C 语言库函数 附录 D 调试程序时常见的出错提示信息 参考文献 C 语言程序设计

10 第 1 章 C 语言是当今国际上最流行的计算机程序设计语言之一, 无论是开发系统软件, 还是设计应用软件, 都可以看到 C 语言的身影 人们之所以选择 C 语言, 是源于它具有一定的独特优点 所以, 了解它的特点很重要 本章主要介绍计算机语言 C 语言的历史及 C 语言的特点, 并对 C 语言程序的组成和结构特点 对结构化程序设计做了简明阐述, 解释 C 语言的执行过程, 最后介绍 C 语言的基本符号 1.1 计算机语言与结构化程序设计 计算机语言计算机是一种具有内部存储能力的自动 高效的电子设备, 它最本质的使命就是执行指令所规定的操作 需要计算机完成什么工作, 只要将其步骤用诸条指令的形式描述出来, 并把这些指令存放在计算机的内部存储器中, 需要结果时就向计算机发出一个简单的命令, 计算机就会自动逐条顺序执行操作, 全部指令执行完就得到了预期的结果 这种可以被连续执行的一条条指令的集合称为计算机的程序 也就是说, 程序是计算机指令的序列, 编制程序的工作就是为计算机安排指令序列 但是, 指令是二进制编码, 用它编制程序既难记忆, 又难掌握, 所以, 计算机研究人员就研制出了各种计算机能够懂得 人们又方便使用的计算机语言 这样程序就可以用计算机语言来编写了 计算机程序设计语言的发展, 经历了从机器语言 汇编语言到高级语言的历程 1. 机器语言计算机所使用的是由 0 和 1 组成的二进制数, 二进制是计算机语言的基础 计算机程序是直接用计算机能够识别的二进制代码指令进行书写的, 这种程序设计语言就是机器语言 机器语言是第一代计算机语言, 它通常由指示计算机一次完成一个最基本操作数值串组成 机器语言是直接对计算机硬件产生作用的, 所以不同型号的计算机采用的机器语言是不一样的, 这种情况使得机器语言很难被人们掌握和推广 但由于使用的是针对特定型号的计算机语言, 故而运算效率是所有语言中最高的 2. 汇编语言一个复杂程序里的指令可能有成百万 成千万条或者更多, 程序中的执行流程错综复杂, 在二进制机器指令的层面上理解复杂程序到底做了什么, 很容易变成人力所根本不能及

11 2 第 1 章 C 语言概述 的事情 为缓解这一问题, 人们研发了符号形式的 使用相对容易些的汇编语言 用汇编语言写的程序需要用专门软件 ( 汇编系统 ) 加工 翻译成二进制机器指令后才能在计算机上使用 比如, 用 ADD 代表加法, MOV 代表数据传递等, 这样一来, 人们很容易读懂并理解程序在干什么, 纠错及维护都变得方便了 这种程序设计语言就称为汇编语言, 即第二代计算机语言 然而计算机是不认识这些符号的, 这就需要一个专门的程序, 负责将这些符号翻译成二进制数的机器语言, 这种翻译程序被称为汇编程序 汇编语言同样十分依赖于机器硬件, 移植性不好, 但效率仍然较高 针对计算机特定硬件而编制的汇编语言程序, 能准确发挥计算机硬件的功能和特长, 程序精炼 质量高, 所以, 至今仍是一种常用而强有力的软件开发工具 3. 高级语言 不论是机器语言还是汇编语言都是面向硬件的具体操作, 语言对机器的过分依赖, 要求使用者必须对硬件结构及其工作原理都十分熟悉, 这点非计算机专业人员是难以做到的, 对于计算机的推广应用也不利 为了计算机事业的发展, 促使人们去寻求一些与人类自然语言相接近且能为计算机所接受的语意确定 规则明确 自然直观和通用易学的计算机语言 这种与自然语言相近并为计算机所接受和执行的计算机语言称为高级语言 经过努力,1954 年, 第一个完全脱离机器硬件的高级语言 FORTRAN 问世了,40 多年来, 共有几百种高级语言出现, 目前被广泛使用的高级语言有 PASCAL C FORTRAN VC VB C++ Java 等 当然, 计算机也不能直接执行高级语言描述的程序 人们在定义好一个语言之后, 还需要开发出一套实现这一语言的软件, 这种软件被称做高级语言系统, 也常被说成是这一高级语言的实现 在研究和开发高级语言的工作过程中, 人们也研究了各种实现技术 高级语言的基本实现技术是编译和解释, 下面是对编译和解释两种方式的简单介绍 1) 采用编译方式实现高级语言 人们首先针对具体语言 ( 例如 C 语言 ) 开发出一个翻译软件, 其功能就是将采用这种高级语言书写的程序翻译为所用计算机的机器语言的等价程序 用这种高级语言写出程序后, 只要将它送给翻译程序, 就能得到与之对应的机器语言程序 此后, 只要命令计算机执行这个机器语言程序, 计算机就能完成我们所需要的工作 2) 采用解释方式实现高级语言 人们首先针对具体高级语言开发一个解释软件, 这个软件的功能就是读入这种高级语言的程序, 并能一步步地按照程序要求工作, 完成程序所描述的计算 有了这种解释软件, 只要直接将写好的程序送给运行这个软件的计算机, 就可以完成该程序所描述的工作 高级语言的发展也经历了从早期语言到结构化程序设计语言, 从面向过程到非过程化程序语言的过程 相应地, 软件的开发也由最初的个体手工作坊式的封闭式生产, 发展为产业化 流水线式的工业化生产 高级语言的下一个发展目标是面向应用, 也就是说, 只需要告诉程序你要干什么, 程序就能自动生成算法, 自动进行处理, 这就是非过程化的程序语言 结构化程序设计 目前常见的程序设计方法有面向过程的程序设计方法和面向对象的程序设计方法 面向 C 语言程序设计

12 1.1 计算机语言与结构化程序设计 3 过程的程序设计方法又称为结构化程序设计方法, 本节将介绍结构化程序设计方法及其基本思想 1. 结构化程序设计结构化程序设计 (structured programming,sp) 的概念最早是由荷兰学者 E.W.Dijkstra 提出来的, 目的是提高程序设计的质量 目前尚没有一个严格的 为所有人普遍接受的定义 一个比较流行的定义是 : 结构化程序设计是一种进行程序设计的原则和方法, 按照这种原则和方法设计出的程序的特点是, 结构清晰 容易阅读 容易修改 容易验证 按照结构化程序设计方法的要求, 结构化程序由三种基本控制结构组成 : 顺序结构 选择结构和循环结构 结构化程序的主体结构是顺序结构 2. 结构化程序设计特征结构化程序设计的特征主要有以下几点 1) 以三种基本结构 ( 顺序 选择 循环 ) 的组合来描述程序 结构化程序设计的三种基本控制结构的流程图表示如图 1-1 所示 A 真 P 假 P 真 假 B A B A (a) 顺序结构 (b) 选择结构 图 1-1 三种基本控制结构流程图 (c) 循环结构 2) 程序设计采用 自顶向下, 逐步求精, 模块化设计, 结构化编码 的方法 程序设计时, 首先考虑程序的总体结构, 按程序实现的功能再细分为若干个子问题, 如果子问题还包含子问题, 再细化, 直到每一个细节均可以用高级语言清楚表达为止 这个过程就是 自顶向下, 逐步求精 每个子问题都作为子程序, 在 C 语言中用函数表示, 又称为模块 这种层次分明 思路清楚 有条不紊的一步一步地进行设计的方法, 既严谨又方便 3) 有限制地使用 goto 转移语句, 在非用不可的情况下, 也要十分谨慎, 并且只限于在一个结构内部跳转, 不允许从一个结构跳到另一个结构 这样可缩小程序的静态结构与动态执行过程之间的差异, 使人们能正确理解程序的功能 4) 以控制结构为单位, 每个结构只有一个入口, 一个出口, 各单位之间接口简单, 逻辑清晰 5) 采用结构化程序设计语言书写程序, 并采用一定的书写格式使程序结构清晰, 易于阅读 6) 注意程序设计风格 采用顺序 选择和循环三种基本结构作为程序设计的基本单元, 避免无限制地使用 goto 语句而使流程任意转向

13 4 第 1 章 C 语言概述 3. 设计程序的过程下面举例说明用结构化程序设计方法设计程序的过程 例 1.1 求 3 个数中的最大数 1) 给出程序的总体设计算法 s1: 给定或输入 3 个数 a b c s2: 在 a b c 中找出大数赋给 max s3: 输出 max s1 s2 s3 表示第 1 步 第 2 步 第 3 步 2) 对 s2 需进一步细化, 即求出最大数的设计算法 s21: 从 a b 中取大数赋给 max s22: 再用 max 与 c 进行比较, 取两者大的值赋给 max 1) 2) 的流程描述如图 1-2 所示 s1 给 a b c 赋值 s1 s2 给 a b c 赋值 求最大数给 max s2 s21 s22 y a>b n max=a max=b y max<c n max=c s3 输出 max s3 输出 max 图 1-2 1) 2) 的流程图 3) 用计算机语言实现算法 C 语言程序如下 : #include <stdio.h> void main() { int a,b,c,max; a=3;b=7;c=5; /*s1, 也可以使用 scanf() 对 a b c 赋值 */ C 语言程序设计 if(a>b) /*s21*/ max=a; else max=b; if(max<c) /*s22*/ max=c; printf("max=%d\n",max); /*s3*/ 结构化程序设计方法是公认的面向过程编程应遵循的基本方法和原则 结构化程序设计 方法主要包括以下几点 1) 只采用三种基本的程序控制结构来编制程序, 从而使程序具有良好的结构

14 1.2 C 语言的发展历史和特点 5 2) 程序设计自顶而下 3) 用结构化程序设计流程图表示算法 有关结构化程序设计及方法有一整套不断发展和完善的理论和技术, 对于初学者来说, 完全掌握是比较困难的 但在学习的起步阶段就了解结构化程序设计的方法, 学习好的程序设计思想, 对今后的实际编程很有帮助 1.2 C 语言的发展历史和特点 本书是介绍以 C 语言作为程序设计语言进行的程序设计, 在开始对程序设计和 C 语言的系统学习之前, 读者必须首先了解 C 语言的发展历史和 C 语言的基本特点 C 语言的发展历史 C 语言是一种得到广泛重视并普遍应用的计算机程序设计语言, 也是国际公认的最重要的几种通用程序设计语言之一, 它既可用来编写系统软件, 也可用来编写应用软件 C 语言是由贝尔实验室的 Dennis Ritchie 和 Brian Kernighan 在 1972 年根据 Thompson 的 B 语言设计的, 而 B 语言是由一种早期的编程语言 BCPL(basic combined programming language) 发展演变而来的 BCPL 的根源可以追溯到 1960 年的 ALGOL 60(algol programming language),algol 60 是一种面向问题的高级语言, 离硬件较远 1963 年, 英国剑桥大学推出 CPL(combined programming language) 语言,CPL 修改了 ALGOL 60, 使其能够直接作较低层次的操作 1967 年英国剑桥大学的 Martin Richards 对 CPL 做了改进, 推出了 BCPL 语言 最初的 C 语言是为描述和实现 UNIX 操作系统提供的一种工具语言, 但 C 语言并没有被束缚在任何特定的硬件或操作系统上, 它具有良好的可移植性 1977 年出现了不依赖于具体机器的 C 语言编译文本 可移植的 C 语言编译程序, 用该程序编写的 UNIX 系统迅速在各种机器上实现,UNIX 系统支持的 C 语言也被移植到相应的计算机上 C 语言和 UNIX 系统在发展过程中相辅相成, 得到了广泛应用, 使 C 语言先后被移植到各种大 中 小 微型计算机上 以 1978 年发表的第 7 版 UNIX 系统中的 C 语言编译程序为基础,B.W.Kernighan 和 D.M.Ritchie 合著了 The C Programming Language 这本书中介绍的 C 语言成为后来广泛使用的 C 语言版本的基础, 被称为标准 C 语言 1983 年, 美国国家标准化协会 (ANSI) 根据 C 语言问世以来的各种版本对 C 语言的发展和扩充制定了新的标准, 称为 ANSI C 1990 年,C 语言成为国际标准化组织 (ISO) 通过的标准语言, 并接受了 C90 作为国际标准 ISO/IEC9899: 年,ISO 对 C90 做了一些修订, 即 1995 基准增补 1(ISO/IEC9899/AMD1:1995) 1999 年,ISO 又对 C 语言标准进行修订, 在基本保留原来的 C 语言特征的基础上, 针对应用的需要, 增加了一些功能, 尤其是 C++ 中的一些功能, 命名为 ISO/IEC 9899: 年和 2004 年先后进行了两次技术修正, 即 2001 年的 TC1 和 2004 年的 TC2 ISO/IEC 9899: 1999 及其技术修正被称为 C99,C99 是 C89( 及 1995 基准增补 1) 的扩充 本书的叙述以 C99 标准为依据, 为了与 C89 作比较, 在本书的叙述中对 C99 一部分新增加的功能作了特别的说明 目前, 由不同软件公司所提供的一些 C 语言编译系统并未完全实现 C99 建议的功能,

15 6 第 1 章 C 语言概述 它们多以 C89 为基础开发, 读者应了解自己所使用的 C 语言编译系统的特点 初学者所用 到的初步编程知识基本上在 C89 的范围内, 因此, 使用目前的 C 编译系统仍然可以满足对 初学者的教学需要, 在今后进行实际软件开发工作时, 应注意使用能在更大程度上实现 C99 功能的编译系统 本书中所举的示例程序都是在目前流行的编译系统 Visual C 上编译 和运行 C 语言的特点 C 语言经历了不断的发展和完善, 成为当今计算机界公认的一种优秀程序设计语言,C 语言之所以能具有如此强大的生命力而存在和发展, 是源于其有不可替代的特点 C 语言的特点可归纳为以下几点 1. 数据类型丰富, 具有现代语言的各种数据类型 C 语言的基本数据类型有整型 浮点型 字符型 在此基础上按层次可产生多种构造类型, 如数组 结构体 共用体等, 同时还提供了用户自定义数据类型 C99 又扩充了复浮点类型 超长类型和布尔类型, 用这些数据类型可以实现复杂的数据结构, 如栈 链表 树等 因此,C 语言具有较强的数据处理能力 2. 结构化的程序设计语言简洁 紧凑 C 语言的主要组成部分是函数, 函数允许一个程序中的各任务分别定义和编码, 符合模块化原理 C 语言还提供了 3 种结构化的控制语句, 如用于判定的 if-else switch 语句, 用于循环的 for while do-while 语句等, 十分便于采用自顶向下 逐步细化的结构化程序设计方法 C 语言只有 37 个关键字, 而一些高级语言, 关键字多达 100 个, 因此, 用 C 语言编写的程序更加简单 容易理解和便于维护 3. 具有丰富的运算符 在 C 语言中共有 34 个运算符, 除了一般高级语言使用的算术运算 关系运算及逻辑运算等功能外, 还具有独特的以二进制位 (bit) 为单位的位与 位或 位非以及移位操作等运算 并且 C 语言具有如 a++ b-- 等单目运算和 += -= 等复合运算功能 4. 高效率的目标代码 C 语言允许直接访问物理地址, 并能进行位 (bit) 操作, 能实现汇编语言的大部分功能, 可以直接对硬件进行操作, 因此,C 语言既具有高级语言的功能, 又具有低级语言的许多功能, 可用来编写系统软件 C 语言的这种双重性, 使它既是成功的系统描述语言, 又是通用 的程序设计语言 有人把 C 语言称为 高级语言中的低级语言, 也有人称它为 中级语言, 意为兼有高级和低级语言的特点 5. 具有预处理能力 在 C 语言中提供了 #include 和 #define 两个预处理命令, 实现对字符串的宏定义以及对外部文件的包含, 同时还具有 #if-#else-#endif 等条件编译预处理命令 这些功能的使用提高了软件开发的工作效率并为程序的组织和编译提供了便利 C 语言程序设计

16 1.3 C 语言程序的基本结构和执行过程 7 6. 可移植性好目前,C 语言在计算机上实现大部分是通过 C 语言编译系统移植得到的 C 编译程序的可移植性使 C 语言程序便于移植 用 C 语言编写的程序, 基本上可以不加修改地用于各种计算机和操作系统上 7. 语法限制不严格, 程序设计自由度比较大例如, 对数组下标越界不进行检查, 由程序编写者自己保证程序的正确 对变量的类型使用比较灵活, 例如, 整型量与字符型数据以及逻辑型数据可以通用 一般的高级语言语法检查比较严, 能检查出几乎所有的语法错误, 而 C 语言允许程序编写者有较大的自由度, 因此放宽了语法检查 程序员应当仔细检查程序, 保证其正确, 而不要过分依赖 C 语言编译程序查错 限制 与 灵活 是一对矛盾 限制严格, 就失去灵活性 ; 而强调灵活, 就必然放松限制 对于不熟练的人员, 编一个正确的 C 语言程序可能会比编一个其他高级语言程序难一些 也就是说, 对于用 C 语言的人, 要求更高些 总之,C 语言已成为国内外广泛使用的一种编程语言 1.3 C 语言程序的基本结构和执行过程 如果要很好地使用 C 语言去编写程序, 就要非常熟练地掌握 C 语言基本知识, 本节就将通过几个简单的程序来帮读者加深了解如何阅读 C 语言程序和使用 C 语言程序, 为以后进行 C 语言编程打下坚实的基础 C 语言程序简单实例 C 语言是函数式语言, 函数是构成 C 语言程序的基本单位 下面通过一个程序来分析 C 语言程序的组成和结构 例 1.2 求两个数的最大值 程序如下 : #include <stdio.h> /* 文件包含 */ int max(int m,int n); /* 函数说明 */ void main() /* 主函数 */ { int x,y,z; /* 变量说明 */ printf("input two numbers:\n"); scanf("%d%d",&x,&y); /* 输入 x y 值 */ z=max(x,y); /* 调用 max() 函数 */ printf("maxmum=%d",z); /* 输出 */ int max(int m,int n) /* 定义 max() 函数 */ { if(m>n) return m; else return n; /* 把结果返回主调函数 */

17 8 第 1 章 C 语言概述 程序运行情况如下 ( 本书中所有输入数据均由下划线标识 ): C 语言程序设计 input two numbers: 2 3 maxmum=3 程序分析 : 本程序包括两个函数定义体, 主函数 main( ) 和被调用函数 max( ) 程序第 1 行是预编译命令 #include <stdio.h>, 表示包含程序中使用的标准输入输出库函数文件 ( 后面章节将详细介绍 ) 程序第 2 行是对被调用函数 max( ) 的声明 为什么要作这个函数声明呢? 因为在主函数中要调用 max( ) 函数 ( 主函数中语句 z=max(x,y); ), 而 max( ) 函数的定义部分却在 main( ) 函数定义之后, 计算机对程序的编译是自上而下进行的, 在对程序中调用语句进行编译时, 编译系统无法知道 max 是什么, 因而无法把它作为函数调用处理 为了使编译系统能识别 max( ) 函数, 就要在调用 max( ) 函数之前用语句 int max(int m,int n); 对 max( ) 函数进行 声明, 所谓声明, 通俗地说就是告诉编译系统 max 是什么, 以及它的有关信息 ( 有关函数的声明将在第 8 章详细介绍 ) max( ) 函数的作用是将 x 和 y 中较大者返回到主函数中 max( ) 下面用花括号括起来的是 max( ) 函数的函数体 在函数体中, 通过 if-else 语句判断, 如果判定条件成立, 由第 14 行的 return 语句将 m 的值作为 max( ) 的函数值返回给调用 max( ) 函数的函数 ( 即主函数 main( )), 如果判定条件不成立, 则由第 16 行 return 语句将 n 的值返回 返回值是通过函数名 max( ) 带回到 main( ) 函数中去的 ( 带回到语句 z=max(x,y);,main( ) 函数调用 max( ) 函数处 ) 程序第 3 行中 main 是主函数的名称,main 前面的 void 表示函数 main( ) 没有返回值, 每个程序都有一个主函数, 函数体由花括号括起来, 第 4~10 行是主函数的函数体 程序第 5 行是对变量的声明, 表示定义了 3 个整形变量, 变量名称分别为 x y z 程序第 6 行 printf 是输出函数的名称 (scanf( ) 和 printf( ) 都是 C 语言的标准输入输出函数 ) 本例中 printf( ) 函数的作用是原样输出字符串 input two numbers:, 也就是在屏幕上显示该字符串, 其中 \n 是回车换行的含义, 使得光标自动移到下一行行首 程序第 7 行 scanf 是输入函数的名称 scanf( ) 函数的作用是输入变量 a 和 b 的值 scanf( ) 函数后面圆括号中包括两部分内容 : 一是双引号中的内容, 它指定输入的数据按什么格式输入, %d 的含义是十进制整数形式 ; 二是输入的数据准备放到哪里, 即赋给哪个变量 现在,scanf( ) 函数中指定的是 a 和 b, 在 a 和 b 的前面各有一个 &, 在 C 语言中 & 是取地址符,&a 的含义是 变量 a 的地址,&b 是 变量 b 的地址 执行 scanf( ) 函数, 从键盘读入两个整数, 送到变量 a 和 b 的地址处, 然后把这两个整数分别赋值给变量 a 和 b 程序第 8 行利用 max(a,b) 调用 max( ) 函数 在调用时, 将 x 和 y 作为 max( ) 函数的参数 ( 称为实际参数 ) 的值分别传送给 max( ) 函数中的参数 m 和 n( 称为形式参数 ), 然后执行 max( ) 函数的函数体 ( 程序第 12~17 行 ), 使 max( ) 函数返回一个值 ( 即 m 和 n 中大者的值 ), return 语句的作用是把函数值带回到程序的主函数调用 max( ) 函数的位置, 取代 max(a,b), 然后把这个值赋给变量 z 第 9 行输出结果 在执行 printf( ) 函数时, 对双引号括起来的 maxmun=%d 是这样处

18 1.3 C 语言程序的基本结构和执行过程 9 理的 : 将 maxmun= 原样输出, %d 由变量 z 的值取代 本例用到了函数调用 实际参数和形式参数等概念, 只作了简单的解释 读者对此可能 不是很理解, 可以先不予研究, 通过对后面章节不断加深学习, 自然迎刃而解 在本章介绍此例子, 主要是使读者对 C 程序的组成和形式有一个初步的了解 从本例中可以看到,C 语言程序有如下特点 1.C 语言程序是由若干个函数构成的 函数是 C 语言程序的基本组成单位 每个 C 程序有且仅有一个主函数,C 语言规定主函数的函数名为 main 除主函数外, 可以没有其他函数, 也可以有一个或多个其他函数 例 1.2 中定义了两个函数 :max( ) 和 main( ) 因为在 main( ) 函数中调用 max( ) 函数, 所以 main( ) 为主调函数,max( ) 为被调用函数 被调用函数可以是系统提供的库函数, 如例 1.2 中在 main( ) 中调用的 printf( ) 函数和 scanf( ) 函数, 也可以是用户根据需要自己定义的函数, 如例 1.2 中的 max( ) 函数 一个 C 程序可以包含 0 个或多个用户自定义函数 C 语言程序总是从主函数 main( ) 开始执行, 并且在主函数 main( ) 中结束, 这与主函数 main( ) 在程序中的位置无关, 主函数 main( ) 可以在整个程序的任意位置, 通常把主函数 main( ) 放在程序中其他函数的后面 2. 函数的定义 每个函数 ( 包括主函数 ) 的定义分为两个部分 : 函数说明和函数体 1) 函数的说明部分 ( 也称为函数首部 ) 格式如下 : 函数类型函数名 ( 形式参数 l, 形式参数 2, ) 这部分包括函数类型 函数名 参数名和参数类型 如例 1.2 中 max( ) 函数的说明部分 : int max (int m, int n ) 函数类型 函数名 参数类型 参数名参数类型 参数名 函数名后必须有一对圆括号 ( ), 这是函数的标志 ; 函数类型是函数返回值的类型 ; 参数类型就是形参类型 ; 形参可以有, 也可以省略 形参省略时, 函数名后的一对圆括号不 能省略, 如 main( ) 函数就没有参数 如果有参数, 放在圆括号中, 如 int max(int m,int n) 参数类型的说明也可以放在圆括号外, 是传统的函数说明形式, 如 : int max(m,n) int m,n; 这种参数类型的说明形式与把形式参数放在圆括号中的参数说明形式 int max(int m, int n) 作用一样 2) 函数体的格式如下 : { 变量定义部分实现函数功能的语句组

19 10 第 1 章 C 语言概述 函数体由函数首部下面最外层的一对花括号中的内容组成 一个函数如果有多对花括 号, 则最外层的一对花括号中的内容为函数体的范围 函数体一般包含变量定义 ( 变量说明 ) 和执行语句两部分 在例 1.2 中, 函数 main( ) 中的 int x,y,z; 是变量定义部分, 其余是实现函数功能的语句组 3.C 语言程序中的语句最后总要有一个 分号 (;), 作为每个语句的结束标志 分号 ; 是 C 语言语句必不可少的一部分, 是语句的结束标志 例如, 语句 z=max(x,y); 中的分号不可少, 即便是程序的最后一个语句也应该用分号结束 但需要注意的是预处理命令和函数头之后不能加分号 4. 可以用 /* 和 */ 括住任意字符, 称为 注释 ( 在 C99 中也支持使用 // 的注释符号, 本书采用 /* 和 */ 的注释符 ) 注释不参与程序编译和程序执行, 所以注释可以出现在程序的任何位置, 通常放在一段程序的开始, 用于说明该段程序的功能 ; 或者放在某个语句的后面, 解释语句的含义 使用注释时, 需要注意以下两点 1) 注释可以单独占一行, 也可以占据多行 例如 : 其中 : C 语言程序设计 int i=10; /* 声明变量 i int j=15; 声明变量 j */ /* 声明变量 i int j=15; 声明变量 j */ 是一个注释, 注意 int j=15; 不是语句, 是注释的一部分内容 2) 注释的内容也是任意的, 但不允许在 /* 与 */ 中间又出现 /* 和 */ 注释, 即注释没有嵌套结构 例如 : scanf("%d%d",&x,&y); /* 输入 x y 值 /* 键盘输入 */ */ 这种格式中,/* 输入 x y 值 /* 键盘输入 */ */ 注释中包含注释就是错误的 注释使程序变得清晰, 能帮助我们阅读和理解程序 给程序加注释是一个良好的编程习惯 5.C 语言程序书写格式自由 C 程序的书写格式很灵活, 在一行上可以书写多个语句, 一个语句也可以写在多行上, 一般情况下, 一个说明或一个语句占一行 在程序清单的任何一处都可以插入空格符号或回车符号 但是, 为了程序清单层次分明 便于阅读, 通常都采用缩格并对齐的书写方法 例如 : if(a>b) c=a;

20 1.3 C 语言程序的基本结构和执行过程 11 else c=b; 6. 源程序中可以有编译预处理命令 预处理命令通常应放在源文件或源程序的最前面 预处理命令一般有三种, 例 1.1 中的 #include 称为文件包含命令, 其意义是把尖括号 <> 或引号 "" 内指定的文件包含到本程序来, 成为本程序的一部分 被包含的文件通常是由系统提供的, 其扩展名为.h 因此也称为头文件或首部文件 C 语言的头文件中包括了各个标准库函数的函数原型 因此, 凡是在程序中调用一个库函数时, 都必须包含该函数原型所在的头文件 在本例中, 使用了两个库函数 : 输入函数 scanf( ) 和输出函数 printf( ) 函数 scanf( ) 和 printf( ) 是标准输入输出函数, 其头文件为 stdio.h, 因此, 在程序的主函数前用 #include 命令包含了 stdio.h 文件 (#include <stdio.h>) 7.C 程序的执行总是从主函数开始, 并在主函数中结束 C 语言程序总是从主函数 main( ) 开始执行, 并且在主函数 main( ) 中结束, 这与主函数 main( ) 在程序中的位置无关, 主函数的位置是任意的, 可以在程序的开头, 可以在程序的结尾, 也可以在两个函数之间 其他函数总是通过函数调用来执行的 主函数可以调用任何非主函数 ; 任何非主函数都可以相互调用, 但是不能调用主函数 下面将通过几个简单的 C 语言程序, 进一步了解 C 语言程序的结构和特点 例 1.3 在屏幕上显示语句 Hello C World! #include <stdio.h> /* 文件包含 */ void main () /* 定义主函数 */ { printf("hello C World!\n"); /* 在屏幕输出语句 */ 程序运行结果如下 : Hello C World! 这个程序是由主函数 main( ) 组成的 编译预处理命令 #include <stdio.h> 表明在程序中用到了输入输出函数 /* 和 */ 之间括起来的内容为注释部分, 是对程序的解释, 在程序编译运行的过程中没作用, 可有可无 主函数 main( ) 的函数体用 { 括起来, 函数体内只有一个输出函数 printf( ), 运行时 printf( ) 按照原样向显示屏幕输出双引号中的字符串 ; \n 表示输出字符串后光标换行, 所有语句均以 ; 结束 例 1.4 输入两个整数, 输出两数之和 程序如下 : #include <stdio.h> /* 包含文件 */ void main() /* 主函数 */ { int x,y,sum; /* 变量说明 */ int add(int a,int b); /* 函数声明 */ printf("input two numbers:\n"); scanf("%d %d",&x,&y); /* 输入 x y 值 */ sum=add(x,y); /* 调用 add() 函数 */

21 12 第 1 章 C 语言概述 C 语言程序设计 printf("sum=%d",sum); /* 输出 */ int add(int a,int b) /* 定义 max() 函数 */ { int z; /* 变量说明 */ z=a+b; return z; /* 把结果返回主调函数 */ 当运行程序时, 首先屏幕上显示一条提示信息 : input two numbers: 此时要求用户从键盘输入两个整数分别赋值给 x 和 y 如果要输入 6 和 9, 即 : input two numbers: 6 9 就是在 input two numbers: 下面, 由键盘输入 6 9 然后敲入回车键, 表示输入结束 此时屏幕显示运行结果 : sum=15 上述例子中, 程序的功能是由键盘输入两个整数, 程序执行后输出两数之和 本程序由两个函数组成, 主函数和 add( ) 函数 主函数 main( ) 调用 add( ) 函数,main( ) 是主调函数, add( ) 函数是被调函数 add( ) 函数的功能是求两数之和, 然后把两数之和返回给主函数 add( ) 函数是一个用户自定义函数 因此在调用前要给出说明 可见, 在程序的说明部分中, 不仅可以有变量说明, 还可以有函数说明 关于函数的详细内容将在第 8 章介绍 在程序的每行后用 /* 和 */ 括起来的内容为注释部分, 程序不执行注释部分 C 语言程序执行过程 学习 C 语言离不开编写和运行 C 语言程序 在了解一些 C 语言的初步知识以后, 就应该上机练习编写和运行 C 语言的程序, 通过上机实践来加深对 C 语言的认识和理解 如何实现 C 语言程序呢? 在不同的环境下实现的方法稍有差异 C 语言程序实现可归纳如下三步 1. 编辑 编辑是用 C 语言写出源程序 其方法有两种 : 一种是使用编辑程序编写好 C 语言源程序, 并以.c 为文件后缀存入文件系统 ; 另一种是使用 C 语言编译系统提供的编辑器来编写源程序, 并且存入文件系统 2. 编译 连接 编译连接是两个过程, 有些编译系统常将它们连在一起, 实际上是将源程序先进行编译, 通过编译可发现源程序中的语法错误 如有错误, 则系统将其 错误信息 显示在屏幕上, 用户根据指出的错误信息, 对源程序进行编辑修改, 修改后再重新编译, 直到编译无错为止 编译后生成机器指令程序, 被称为目标程序 此目标程序名与相应的源程序同名, 其后缀为.obj 编译过程完成后, 便开始连接过程 所谓连接是将目标程序与库函数或其他程序连接成为可执行的目标程序, 简称可执行程序 一般可执行程序名与源程序同名, 后缀为.exe

22 1.4 C 语言的字符集和标识符 运行当程序编译连接后, 生成了可执行程序便可运行了 这里, 还需补充一点, 在连接过程中可能出现错误, 这时必须根据 出错信息 所指示的错误进行修改后, 再进行连接直到不出错为止, 这样才会生成可执行文件 运行可执行文件, 一般屏幕上显示出输出结果 运行 C 语言程序的环境很多, 编译系统也很多, 不同环境的实现方法不同, 但都包含了上面描述的三步 本书采用的 Microsoft Visual C 编译系统, 书中所有程序均在 Microsoft Visual C 的环境下调试 运行 1.4 C 语言的字符集和标识符 本节主要介绍 C 语言中的基本符号 用户标识符 关键字以及预定义标识符, 以便在编写 C 语言程序时, 能够正确使用基本符号和标识符, 避免使用非法字符 字符集 C 语言的基本符号是指在 C 程序中可以使用的字符, 主要由 ASCII 字符集中的字符组成, 包括阿拉伯数字 大小写英文字母 特殊符号 转义字符和键盘符号等 这些字符大多数是可见字符, 对于不可见的字符 ( 如回车键 )C 语言规定用转义字符来表示, 转义字符将在 2.2 节中详细介绍 C 语言的基本符号具体有以下五类字符如下 1) 阿拉伯数字 10 个 : ) 大小写英文字母各 26 个 :A B C Z,a b c z 3) 下划线 :_ 4) 特殊符号, 主要是指运算符和操作符, 通常是由 1~2 个特殊符号组成 :+ - * / % < <= > >= ==!= &&!, & ~ = ++ --? : << >> ( ) [ ]. -> += -= *= /= %= &= ^= = ^ # sizeof 5) 空白字符 : 空格符 制表符 换行符等统称为空白字符 空白字符在程序中主要用于分隔其他成分 按规定,C 语言程序中大部分地方增加空白字符都不影响程序意义 因此人们写程序时常利用这种性质, 通过加入一些空白字符, 把程序排成适当格式, 以增强程序的可读性 标识符程序中有许多需要命名的量 例如, 程序中常常需要定义一些数据对象, 以便在处理数据时使用 为了在定义和使用之间建立联系, 表示不同位置用的是同一个数据对象, 基本的方式就是为数据对象命名, 通过名字建立起定义与使用间 同一对象的不同使用间的联系 为了这种需要,C 语言规定了数据对象名字的命名规则 程序中数据对象的名字称为标识符 C 语言的标识符可分为用户标识符 关键字 ( 也称保留字 ) 和预定义标识符三类 1. 用户标识符用户可以根据需要对 C 语言程序中用到的变量 符号常量 自定义的函数或文件指针等

23 14 第 1 章 C 语言概述 进行命名, 形成用户标识符, 这类标识符的构成规则有如下几点 1) 一个用户标识符是字母和数字字符的一个连续序列, 其中不能有空白字符, 而且要 求第 1 个字符必须是字母 为了方便起见,C 语言特别规定将下划线字符 _ 也当作字母 看待 这就是说, 下划线可以出现在标识符中的任何地方, 特别是可以作为标识符的第 1 个 字符 例如 : x1 name door_1 _sum 这些标识符是合法的, 而以下标识符是非法的 C 语言程序设计 m&n /* 出现非法字符 & */ 1day /* 以数字开头 */ number-1 /* 出现非法字符 - */ 2) 标识符中大 小写英文字母是有严格区分的,a 和 A 是不同的字符,name Name NAME name 和 nmae 是互不相同的标识符 3)C 语言本身并没有要求标识符的长度, 不同的 C 编译系统允许包含的字符个数有所 不同, 通常可以识别前面 8 个字符, 但在任何机器上, 所能识别的标识符的长度总是有限的, 有些系统可以识别长达 31 个字符的标识符 ( 如 VAX-11 VMSC), 在 C99 中支持 63 字符, 而有些系统只能识别 8 个字符长度的标识符, 这意味着即使第 9 个字符不同, 只要前 8 个字 符一样, 系统也认为是同一个标识符, 如 Category1 和 Category2 因此, 为了避免出错和增 加可移植性, 最好令标识符前 8 个字符有所区别 4) 标识符虽然可由用户随意定义, 但标识符是用于标识某个量的符号 因此, 命名应 尽量有相应的意义, 以便阅读程序时容易理解, 作到 见名知义 一个好的程序, 标识符的选择应尽量反映出所代表对象的实际意义 如表示 年 可以用 year, 表示 长度 可以用 length ; 表示加数的 和 可以用 sum 等, 这样的标识符增加了可读性, 使程序更加清晰 5) 用户定义的标识符不能和 C 语言中的关键字相同 2. 关键字 C 语言的合法标识符中有一个特殊的小集合, 其中的标识符称为关键字 关键字是 C 语言编译系统固有的, 用做语句名 类型名的标识符 C 语言共有 37 个关键字, 每个关键字在 C 程序中都代表着某一固定含义, 所有关键字都要用小写英文字母表示, 且这些关键字都不允许作为用户标识符使用 C 语言的关键字如表 1-1 所示 表 1-1 C 语言关键字 描述数据类型定义 描述存储类型 描述数据类型 描述语句 typedef auto _bool break void extern char case inline _complex continue register const default static double do volatile float else _imaginary for int goto long if

24 习题 1 15 续表 描述数据类型定义 描述存储类型 描述数据类型 描述语句 restrict return short sizeof signed switch struct while union unsigned enum 对于 C 语言的关键字, 要特别注意以下两点 1) 所有关键字都必须用小写字母表示 2) 用户自定义的常量名 变量名 函数名和类型名不能使用上述关键字 预定义标识符预定义标识符在 C 语言中都具有特定含义, 如 C 语言提供的编译预处理命令 #define 和 #include 等,C 语言语法允许用户把这类标识符作其他用途, 但这将使这些预定义标识符失去系统规定的原意, 鉴于目前各种计算机系统的 C 语言已经把这类标识符作为统一的编译预处理中的专用命令名使用, 因此为了避免误解, 建议用户不要把这些预定义标识符另作它用或将它们重新定义 ( 后续章节将详细介绍 ) 习题 1 一 选择题 1. 一个 C 语言程序是由 ( ) A. 一个主程序和若干子程序组成 B. 函数组成 C. 若干过程组成 D. 若干子程序组成 2. 在下列各选项中, 合法的 C 语言关键字是 ( ) A.integer B.sin C.string D.void 3.C 语言规定 : 一个源程序中,main 函数的位置 ( ) A. 必须在最开始 B. 可以任意 C. 必须在系统调用的库函数的后面 D. 必须在最后 4. 对于一个 C 程序, 下列叙述中正确的是 ( ) A. 程序的执行总是从 main 函数开始, 在 main 函数中结束 B. 程序的执行总是从第一个函数开始, 在 main 函数中结束 C. 程序的执行总是从 main 函数开始, 在程序的最后一个函数中结束 D. 程序的执行总是从程序中的第一个函数开始, 在程序的最后一个函数中结束 5.C 语言源程序名的后缀是 ( ) A..exe B..c C..obj D..cp 6. 下列说法正确的是 ( ) A.C 语言程序书写时, 不区分大小写字母

25 16 第 1 章 C 语言概述 B.C 语言程序书写时, 一行只能写一条语句 C.C 语言程序书写时, 一条语句可分成几行书写 D.C 语言程序书写时, 每行必须有行号 7.C 语言中的标识符只能由字母 数字和下划线 3 种字符组成, 且第一个字符 ( ) 二 填空题 A. 必须为字母 B. 必须为下划线 C. 必须为字母或下划线 D. 可以是字母 数字和下划线中任意一种 1.C 语言程序经过编译后生成的文件扩展名是 2.C 语言程序是由 组成的 3. 在一个 C 源程序中, 注释部分两侧的分界符分别为 4. 下面程序用 scanf( ) 函数从键盘接收两个整数, 用 printf( ) 函数输出两个变量的值, 请在画线处填上 正确的内容 三 简答题 C 语言程序设计 void main() { ; scanf("%d,%d",&a,&b); printf("%d,%d", ); 1.C 语言有哪些特点? 2.C 语言的主要应用有哪些? 3. 编写一个实现某种功能的 C 语言程序, 必须经历哪几个步骤? 4. 写出一个 C 程序的构成

26 第 2 章 计算机的基本功能是利用程序对数据进行处理, 任何计算机程序都是由数据结构与算法组成的 在 C 语言中数据结构的体现形式是数据类型, 一种语言支持的数据类型越丰富, 它的应用范围就越广 C 语言具有丰富的数据类型 本章介绍 C 语言的基本数据类型 : 整型 浮点型 字符型及空类型, 相应类型的变量和常量以及类型之间的转换 并介绍运算符与表达式的概念和使用 通过本章的学习, 读者应掌握 C 语言数据类型和运算的基本概念, 为以后各章的学习打下基础 2.1 C 语言数据类型简介 数据是程序处理的对象 C 语言程序处理数据之前, 要求数据具有明确的数据类型 为什么在用计算机运算时, 要指定数据的类型呢? 在数学中, 数值是不分类型的, 数值的运算是绝对准确的 在计算机中, 数据是存放在存储单元中的, 它是具体存在的 而且, 存储单元是由有限的字节构成的, 每一个存储单元中存放数据的范围是有限的, 不可能存放 无穷大 的数, 也不能存放循环小数 所以计算机就依据数据所占据存储单元的大小和存储形式的不同, 将数据分成一些集合 属于同一集合的数据对象具有相同性质, 如采用统一的书写形式, 在具体实现中采用同样的编码方式 ( 按同样规则对应到内部二进制编码 ), 对它们能做同样运算操作等 C 语言中将具有相同性质的数据集合称为一个类型 不同类型的数据在表示形式 合法的取值范围 内存中的存放形式及可以参与的运算形式等方面有所不同 程序设计过程中所使用的数据都要根据其不同的用途赋以不同的类型, 一个数据只能有一种类型 C 语言的数据通常分为如图 2-1 所示的类型 ( 带 * 的是 C99 增加的 ) 数据类型 基本整型 (int) 短整型 (short int) 整型类型 长整型 (long int) 基本类型 字符型 (char) 浮点类型 * 双长整型 (long long int) * 布尔型 (bool) 单精度浮点型 (float) 双精度浮点型 (double) 空类型 (void) * 复数浮点型 (float_complex double_comple long long_comple) 数组类型 ([ ]) 构造类型 结构体类型 (struct) 共用体类型 (union) 枚举类型 (enum) 指针类型 (*) 图 2-1 C 语言的数据类型

27 18 第 2 章数据类型及其表达式 2.2 基本数据类型 基本数据类型就是指这种类型的数据是最小的不可分割的数据, 也就是说这种数据不是 由其他数据构成的, 不能分解成多个数据 C 语言提供了多个基本数据类型, 并规定了 类 型名 基本类型的名字由一个或几个标识符构成, 一般是关键字 本节将介绍整型 字符型 实型和空类型这几个最常用的类型 常量与变量 1. 常量 常量又叫常数, 它是在程序运行过程中其值始终不变的量 常量有 : 整型常量 实型常量 字符常量和字符串常量四种类型 常量不需要事先定义, 只要在程序中需要的地方直接写出即可 常量的类型也不需要事先说明, 它们的类型是系统通过书写方式自动默认的 2. 变量 有了常量, 与它相对应的是变量, 变量是指在程序执行过程中其值可以改变的量 通常是用来保存程序运行过程中输入的数据 计算获得的中间结果或最终结果 C 语言中所有的变量在使用前必须先定义 说明变量类型, 然后才能使用 也就是说, 所有的变量在使用前, 都有一个确定的数据类型与之对应, 规定了变量的存储空间结构和数值范围 定义一个变量, 需要注意以下两点 1) 给出变量的名称 变量的命名规则同用户自定义标识符规则相同, 其中的英文字母常用小写, 给变量命名时, 根据具体问题的需要任意设置, 一般都用代表变量值或用途的标识符命名 可以是英文单词或缩写, 也可以是中文拼音字母或缩写, 一般做到 见名知意 2) 给出变量的数据类型 当程序运行时, 每个变量都要占用连续的若干个字节, 所占用的字节数由变量的数据类型确定, 根据实际需要设定, 设定的数据类型必须是系统所允许的数据类型中的一种 ( 基本类型或构造类型 ) C 程序中的每个变量都有固定的类型, 指的是每个变量只能保存一种类型的值 例如人们常说某个变量是整型变量 ( 是 int 类型的, 只能保存 int 类型的值 ), 或是双精度变量 ( 只能保存 double 类型的值 ) 等 计算机程序中处理的数据不是常量, 就是变量 使用时常量要区分常量类型, 变量要明确变量类型 整型数据 根据程序使用数据的不同需要,C 语言提供了多种整型数据类型 整型类型一般有 : 基本整型 (int) 短整型(short int \short) 长整型(long int\long ) 双长整型(long long int\long long ) 无符号整型(unsigned int unsigned long unsigned short) 等 由于计算机系统不同, 整数的范围也不相同, 并且 C 语言标准也没有具体的规定各种整型变量在内存中应该分配几个字节的存储单元, 所以不同计算机上的编译系统都从自己的需要出发, 规定各种整型 C 语言程序设计

28 2.2 基本数据类型 19 变量在内存中应该分配多少个字节 尽管不同计算机上的编译系统在这方面的规定不同, 但是一般的原则是以一个计算机字 (word) 存放一个 int 型数据, 而 long int 型数据的字节数应不小于 int 型,short int 型不长于 int 型 计算机中的数据, 都是以数据的补码方式存储于存储单元中, 通过补码 ( 二进制 ) 就能求出数据对应的十进制数, 也就能总结出不同类型数据的范围 根据 Visual C 的编译系统中为不同整型分配的字节数, 各种整数类型范围及所占字节数的设定如表 2-1 所示 表 2-1 各种整数类型的数据范围 类型 所占字节 数据的范围 int ~ short int(short) ~ long int(long) ~ unsigned int(unsigned) 4 0~ unsigned short 2 0~ unsigned long 4 0~ long long int(long long) ~ 整型常量 整型常量是指可以直接使用的整数 C 语言中有 3 种形式的整型常量 : 十进制整型常量 八进制整型常量和十六进制整型常量 (1) 十进制整型常量十进制整型常量的表示方法与人们生活习惯中十进制整数的表示形式基本一致, 但不完全相同 它是由 0~9 的数字序列组成的十进制数字, 并且不能是由 0 开头的数 (0 自己独立使用可以是整型常量 ), 数字前可以带负号, 来表示负数, 例如 : 0 /* 十进制整型常量 0*/ 10 /* 十进制整型常量 10*/ 1234 /* 十进制整型常量 1234*/ -10 /* 十进制整型常量 -10*/ 以上均是合法的十进制整型常量 在使用十进制整型常量时需要注意以下两点 1) 不允许在数字中出现分隔符, 也不允许夹杂任何非数字字符 例如, 在有些应用领域将十进制数表示成 : 1,234 但在 C 语言中是不合法的 2) 十进制整型常量有范围限制 在日常生活中, 整数没有范围, 但在 C 语言中, 整型数据占据的存储空间是有限的, 这就限制了整数的范围, 所以十进制整型常量是有范围的 (2) 八进制整型常量八进制整型常量就是八进制数 C 语言中规定八进制整型常量的前导符是数字 0, 含义是以数字 0 开头, 由 0~7 组成的数字序列都是八进制数, 例如 :

29 20 第 2 章数据类型及其表达式 C 语言程序设计 012 /* 八进制 12 对应十进制 10*/ 0567 /* 八进制 567 对应十进制 375*/ /* 八进制 1234 对应十进制 668*/ 由于八进制整型常量是由 0~7 的数字组成的字符序列, 所以在数字中不能出现 0~7 以 外的符号 例如 : A 以上都是不合法的八进制整型常量,0138 中出现了数字 不是以 0 开头的数字 01A 中出现了 A (3) 十六进制整型常量十六进制整型常量就是十六进制数 C 语言中, 十六进制整数的前导符是 0x 或 0X, 含义是以 0x 或 0X 开头的由数字 0~9 及 a~f( 或 A~F) 中的任意字符组成的十六进制数 其中 a~f( 或 A~F) 表示十进制值 10~15, 可以在十六进制数前加一个负号 - 来表示负数 例如 : 0x123 /* 十六进制 0x123 对应十进制 291*/ -0X123 /* 十六进制 -0x11 对应十进制 -291*/ 0x1A /* 十六进制 0xb 对应十进制 26*/ 对于上述的三种整型常量, 都是表示一定范围内的整数值, 当它的数值超出范围时, 系统会根据它们的实际数值来确定它们是短整型常量 长整型常量 无符号整型常量或者是双长整型 短整型常量就是我们常用的普通整型常量或称基本整型常量 对于不同类型的常量, 主要区别除了表示形式不同外, 其内涵主要是指在计算机中能够表示的数值的范围和存储时数据所占的字节数 说明如下 1) 一个整型常量在计算机中能够表示的十进制数的范围是 ~ ( 对于无符号整常量为 0~ ) 一般情况下, 一个整型数在计算机中以 4 个字节存储 2)C 语言还提供一种长整型数, 长整型数由整型数后面紧跟大写字母 L( 或小写字母 l) 来表示, 如 369L -396L 等 一个长整型数在计算机中占 4 个字节 长整型数能够表示的十进制数的范围是 ~ )C 语言提供无符号整型数, 无符号整型数由整型数后面紧跟大写字母 U( 或小写字母 u) 来表示, 如 369U 396u 等 ; 无符号长整型数由整型数后面紧跟字母 LU Lu lu lu 来表示 2. 整型变量 (1) 整型变量的定义整型变量的定义格式为 : 整型类型说明符变量名 1, 变量名 2,, 变量名 n;

30 2.2 基本数据类型 21 例如 : int a,b,c; short d; long e,f; 其中,int 是整型类型说明符, 第 1 个说明语句定义了 3 个整型变量, 标识符 int 说明定义的变量是整型变量, 标识符 a b c 为 3 个变量名, 之间用逗号分隔, 类型说明符与变量标识符用空格隔开 ; 第 2 个说明语句定义了变量名为 d 的短整型变量 ; 第 3 个说明语句定义了变量名为 e f 的长整型变量 说明一下, 通常一个变量定义以后, 包含以下四个方面的属性 1) 变量的名字, 符合标识符的命名规则, 它提供了在程序里访问变量的基本途径 实际上变量名是以一个名字代表的一个存储地址 程序执行使用变量时是通过变量名找到相应的内存地址, 对该存储单元进行读取和存入数据 2) 变量的类型, 它规定了变量的存储值的类型, 能够参加的何种操作方式 3) 变量的地址, 每个变量被定义后都要占用连续的若干个字节, 所占用的字节数由变量的数据类型确定 其中第 1 个字节的地址称为变量的地址,C 语言规定, 程序变量的地址是用 & 变量名 来表示的, 这是变量在计算机里的具体实现 4) 变量的值, 就是变量在存储空间里存放的值 每个变量可以看作一个容器, 程序运行中可以将有关的数据存入变量中 在程序中可以通过名字使用相应的变量, 进而使用存储在这个变量里的数据 例如 : int i; i=1; 表示 C 语言在编译时为变量 i 分配 4 个字节大小的内存空间, 以后对变量 i 的操作就是对这 4 个字节单元的内容操作 变量的名字为 i, 变量的类型是整形 (int), 变量的地址为 &i, 变量的值是 1 在进行变量定义时, 应注意以下几点 1) 允许在一个类型说明符后, 同时定义多个相同类型的变量, 各变量名之间用逗号间隔 类型说明符与变量名之间至少用一个空格间隔 同一类型的变量可以以任何方式分散在多个变量声明之中 例如 : 等价于 : int a,b,c; int a; int b; int c; 2) 最后一个变量名之后必须以 ; 号结尾 3) 变量定义必须放在变量使用之前, 一般放在函数体的开头部分 当利用数据类型定义了变量的名称后,C 语言在编译时就会根据这个变量的数据类型在内存中分配相应的内存空间, 用于存放变量的值, 使用时注意变量的名称与变量的值是不同的量 通过定义可以对变量概念有一个明确的描述

31 22 第 2 章数据类型及其表达式 (2) 整型变量的赋值 在定义一个变量时, 系统会自动根据变量的类型分配存储空间, 但是当变量的值没有给 出时, 变量空间中不一定是空的, 可能存放的值是随机值, 所以变量在使用前需要一个确定的值, 即需要给变量赋值 变量赋值有两种方式 : 变量的赋初值 ( 初始化 ) 和赋值语句 在 C 语言中, 赋初值和赋值语句尽管都可以使变量获取数据, 但它们不是一回事 赋初值是在定义或说明变量时, 将一个数值送给变量的, 使变量被定义后便有了该值, 直到变量的值被改变为止 赋值是变量先定义, 然后再将一个数值赋值给这个变量, 将这个变量的存储空间被覆盖为所赋给的值, 于是变量将具有该值, 直到下次被再赋值为止 赋值是使用赋值表达式完成的 1) 整型变量的赋初值 在 C 语言中允许在变量声明的同时对变量进行赋值, 称为变量的赋初值 一般格式为 : C 语言程序设计 整型类型说明符变量名 = 数值 ; 其中, = 是赋值运算符, 表示将初始数据存入变量名所代表的内存单元 例如 : int i=1; 表示定义一个整型变量 i 的同时将 i 所代表的存储单元存入数据 1 如果相同类型的几个变量需要同时初始化, 可以在一个声明语句中进行 例如 : int 变量名 1= 数值 1,, 变量名 n= 数值 n; int a=1,b=2,c=3; 表示 a b c 的初始值分别为 但并不表示整个程序中 3 个变量值一直不变或一直相等 赋初值时也可以对被定义的变量中的一部分赋初值 例如 : int a=1,b; 定义了整型变量 a 和 b,a 的初始值为 1, 而 b 没有赋初值 注意, 在变量定义时初始化, 多个变量不能采用连续赋值形式, 即使需要赋给多个变量完全相同的初值, 也必须一个一个地分开写 例如 : int a=b=c=1; 这种写法就是错误的, 只能写成 : int a=1,b=1,c=1; 2) 赋值语句方式 赋值语句是 C 语言提供的最简单 最常用的语句, 主要功能用于给变量赋值 变量的赋值语句格式为 : 变量名 = 表达式 ; 其中, 表达式可以是常量 变量 函数调用以及其他各类表达式 赋值后, 无论原来变量的值是多少, 都将被赋值符号右侧新的值所取代 ( 将在第 3 章具体介绍 )

32 2.2 基本数据类型 23 例如 : 实型数据 int a,b,c; a=1;b=2;c=3; /*a b c 被分别赋值为 1 2 3*/ a=2; /*a 的值被重新赋值为 2*/ b=a+1; /* 计算 a+1 的值为 3, 赋值给 b*/ c=a*b; /* 计算 a*b 的值为 6, 赋值给 c*/ 实型数据就是带小数点的数据 在使用的 C 语言编译系统中, 所有整数类型和实数类型统称为算术类型 实数类型能表示的数也只是数学中数值的一个子集合, 不同的 C 语言系统, 各种类型的表示范围不同 为了表示不同数值范围的实数,C 语言一般提供三种类型来表示实数 : 单精度浮点数类型, 简称浮点类型, 类型名为 float; 双精度浮点数类型, 简称双精度类型, 类型名为 double; 长双精度浮点型, 类型名为 long double Visual C 编译系统中, 对一个 float 型实数提供 4 个字节的存储单元,float 存放 7 位有效数据, 存放时整数部分与小数部分分开存放 对一个 double 型实数提供 8 个字节的存储单元, 而对 long double 型实数与 double 一样提供 8 个字节的存储单元,double 与 long double 可以提供 15~16 位的有效数据 读者需要注意, 不同的系统提供的存储单元大小也不一样 根据 Visual C 编译系统中为不同实型分配的字节数, 各种实型类型范围及所占字节数的设定如表 2-2 所示 表 2-2 实型数据范围 类型 所占字节数 数值范围 float 4 3.4E-38~3.4E+38 double 8 1.7E-308~1.7E+308 long double 8 1.7E-308~1.7E+308 进行实数运算时, 由于实型数据的存储单元是有限的, 提供的有效数字也是有限的, 在有效位之外的数据将被截取, 产生误差 有效位数之内的数据是正确的, 之外的数据为随机产生 因此定义时要注意数据的范围, 并且实型数据尽量不要进行相等的比较 1. 实型常量 在 C 语言中实型常量只使用带有小数点的十进制数字序列表示, 实数类型的书写形式中基本包含以下四部分 1) 整数部分 : 十进制数字序列 2) 小数点 : 实心圆点, 小数的标志, 可以是实数第一个或最后一个字符 3) 小数部分 : 十进制数字序列 4) 指数部分 : 由阶码标志 e 或 E 以及阶码 ( 只能为整数, 可以带正 符号 ) 组成, 这种形式称为科学记数法 例如 :

33 24 第 2 章数据类型及其表达式 1.5E+4 2e-7 以上都是合法的实型常量 C 语言在描述实数时, 以是否存在指数部分分为两种书写类型 : 十进制小数形式和指数形式, 并且实数书写形式中的几部分不一定同时出现, 可以省略其中的某些部分, 但不能随意省略, 要遵循一定的规则 (1) 十进制小数形式十进制小数形式可以包含整数部分 小数点和小数部分, 如果是负数可以在数字前加负号组成 例如 : C 语言程序设计 注意整数部分或小数部分可以省略, 但小数点是必须有的, 并且小数点的前后, 就是整数部分或者小数部分必须保留一部分 例如 : 以上均是合法的小数, 其中 12. 只有整数部分, 相当于实数 12.0;.345 只有小数部分, 相当于实数 (2) 指数形式指数形式可以包含整数部分 小数点 小数部分和指数部分, 如果是负数可以在数字前加负号组成 在实际应用中, 有时会遇到绝对值很大或很小的数 这时候将其写成指数形式更方便 直观, 指数形式也称科学计数法, 其一般形式为 : ae±b 含义是 a 10 ±b, 其中 a 是十进制小数,b 称为阶码, 必须是整数, 如果是 + 号, + 号书写时可以省略, 例如 :2.345e E-3 分别表示 注意在指数形式中 e 或 E 的前面必须有数字 ( 整数或者十进制小数 ), 后面不仅有数而且必须是整数, 前后两部分都不可以省略 例如下列数都是不合法的指数形式 : 12e E5 e 12e3.5 其中 12e 没有阶码, 也就是 e 的后面没有数,E5 中 E 的前面没有数,e 中前后均没有数, e12e3.5 中 e 的后面阶码是小数 如果实数常量不带后缀, 则实数的类型被处理为双精度类型 如果想表示实数常量的类型为单精度类型, 则需要在实数常量的后面加上后缀 f 或 F, 简称浮点数 如果在实数常量后面加上后缀 l 或 L 则表示实数常量类型为长双精度类型 需要注意的是, 由于指数形式可以写出很多种, 在计算机中输出指数形式时, 计算机只支持标准规范化的指数形式, 就是小数点前面是数值 0, 小数点后面的第一个数值为非 0 值的指数形式

34 2.2 基本数据类型 实型变量 (1) 实型变量的定义 C 语言提供的实型变量有三种类型 : 单精度 (float) 双精度 (double) 和长双精度 (long double), 对每一个实型变量在使用前都必须加以定义, 定义格式为 : 例如 : 实型类型标识符变量名 1, 变量名 2,, 变量名 n; float f; /* 定义单精度变量 f*/ double d ; /* 定义双精度变量 d */ long double ld; /* 定义长双精度变量 ld */ 其中,float double 和 long double 是实数类型标识符, 定义了单精度变量 f, 在内存中 分配 4 个字节 ; 双精度变量 d, 在内存中分配 8 个字节 ; 长双精度变量 ld, 在内存中分配 8 个字节 (2) 实型变量的赋值 实型变量赋值可以通过实型变量的初始化或者赋值语句实现 1) 实型变量的初始化格式为 : 例如 : 实型类型标识符变量名 = 数值 ; float f=3.5; /* 定义精度变量 f, 并初始化值为 3.5*/ double d=1.23 ; /* 定义双精度变量 d, 并初始化值为 1.23*/ long double ld= /* 定义长双精度变量 ld, 并初始化值为 */ 2) 赋值语句方式为 : 例如 : 变量名 = 表达式 ; float f; f=3.5; 例 2.1 使用举例 : 输出一个实数 程序如下 : #include <stdio.h> void main() { float f=1.5; double d; d=356.0; printf("f=%f,d=%lf",f,d); 程序运行情况如下 : f= ,d=

35 26 第 2 章数据类型及其表达式 字符型数据由于字符类型的数据在机器内存中是以 ASCII 码形式保存的, 而 ASCII 码的取值范围为 0~255, 使用 1 个字节就能够存储 因此绝大多数的 C 编译系统为字符型数据分配 1 个字节的存储空间 字符型数据在内存中以二进制码 (ASCII 码 ) 形式存储, 而整型数据在内存中也是二进制码的形式 就是说字符数据与整型数据在内存中的存储格式是一样的 基于这一点, 字符型数据相当于整型数据,C 语言允许整型数据与字符型数据通用 所以字符型数据可以像整型数据一样在程序中参与相关的运算 凡是整型值可以进行的运算, 字符型值也可以进行, 反过来也可以 例如 : 'A'+32; /* 执行 65('A' 的 ASCII 码值 )+32=97, 是 'a' 的 ASCII 码值 */ 由于整型数据分为有符号整型和无符号整型, 字符型数据又等同于整型数据, 所以在 C 语言中提供了两种字符类型 : 有符号字符型 (signed char/char) 和无符号字符型 (unsigned char) Visual C 的编译系统中, 对有符号字符型 (signed char/char) 和无符号字符型 (unsigned char) 均提供 1 个字节的存储单元 根据 Visual C 的编译系统中为字符型数据分配的空间大小, 字符型数据范围及所占字节数的设定如表 2-3 所示 表 2-3 字符型数据范围 C 语言程序设计 类型 所占字节数 数值范围 signed char/char 1-128~127 unsigned char 1 0~255 一般情况下 Visual C 的编译系统中,signed char 被默认为 char 1. 字符型常量 (1) 字符常量 C 语言的字符常量有两种形式, 一种是用一对单引号 括起来的一个字符的普通字符常量形式, 另外一种是用一对单引号 括起来的在含义上等同于一个字符的字符序列, 也称为转义字符 普通字符常量, 如 : a 3!? 字符常量是由单引号引起来的字符, 并不包含单引号 单引号只是定界符, 不是字符内容 a 表示的就是字符常量 a, 单引号的作用就是表示 a 不是标识符, 而是常量 在这里还需要注意以下几点 1) 大小写有严格的区分, 所以 a 和 A 是不同的字符常量 2) 数字字符和数不同, 如 3 和 3 是不同的量 3 是字符型常量,3 是整型常量 3) 在计算机上, 规定每一个字符常量都属于计算机系统中 ASCII 码字符集里的字符, 每一个字符都有一个整数与其对应, 这个值就是 ASCII 码字符集里的编码值 如表 2-4 所示

36 2.2 基本数据类型 27 表 2-4 字符与 ASCII 值 字符十进制 (ASCII 代码值 ) ( 空格 ) A 65 a 97 这个特殊规定是把字符看做一种特别的整数, 允许程序中直接用字符的值参与算术 运算 详细的 ASCII 码字符集表见附录 A 例 2.2 字符数据进行算术运算 程序如下 : #include <stdio.h> void main() { char a,b; a='1'; b='a'; a=a-1; b=b+32; printf("a=%c,b=%c",a,b); 程序运行结果如下 : a=0,b=a 在程序中变量 a 的值是字符 1, 做运算减 1 相当于字符 1 的 ASCII 值减 1, 结果是字符 0, 变量 b 做加 32 的运算, 就相当于字符 A 的 ASCII 值加 32, 结果是字符 a 除了上述形式的字符常量外,C 语言中还有一类特殊形式的字符常量, 通常称为转义字符或换码序列常量, 它们以 \ 开头加上一个或多个字符组成, 用来表示一个可以显示的字符或者是具有特殊含义的字符 常见的转义字符如表 2-5 所示 表 2-5 转义字符序列表 字符形式 功 能 ASCII 码值 \n 换行 10 \t 水平制表 ( 下一个 tab 键的位置 ) 9 \v 垂直制表 ( 竖向跳格 ) 11 \b 退格 8 \r 回车 13 \f 走纸换页 12 \0 空字符 0 \a 响铃符号 7 \\ 反斜杠字符 \ 92 \' 单引号 39 \" 双引号 " 34 \ddd 1~3 位八进制数所代表的字符 将八进制数转换为十进制数 \xhh 1~2 位十六进制数所代表的字符 将十六进制数进制转换为十进制数

37 28 第 2 章数据类型及其表达式 转义字符表示形式中反斜杠 \ 的作用就是使得后面跟随一个字符或者是多个字符已 失去原有的含义, 而与反斜杠组合在一起形成新的含义 说明如下 1) \ddd 表示的是反斜杠 \ 与八进制数组合在一起的转义字符, 其中 ddd 可以是一位数 两位数或者是三位数 例如 : C 语言程序设计 '\101' /* 转换为十进制 65, 对应字符为 'A'*/ '\40' /* 转换为十进制 32, 对应字符为 ' '( 空格 )*/ '\0' /* 转换为十进制 0, 对应字符为 null( 空 )*/ 以上都是合法的转义字符 但必须符合八进制的规则, 例如 : '\108' 在八进制数中, 不能出现 0~7 以外的数字, 例子中有数字 8, 所以这是不合法的转义字符 2) \xdd 表示的是反斜杠 \ 与十六进制数组合在一起的转义字符, 其中 dd 可以是一位数或者两位数 例如 : '\x41' /* 转换为十进制 65, 对应字符为 'A'*/ '\x0' /* 转换为十进制 0, 对应字符为 null( 空 )*/ 例 2.3 转义字符举例 #include <stdio.h> void main() { printf("\\a B C\n "); printf("\104 \x45 F\\"); 程序运行结果如下 : \A B C D E F\ (2) 字符串常量 C 语言除了字符常量, 还有字符串常量的形式, 就是使用一对双引号 括起来零个或多个字符组成的字符序列, 任何字母 数字 符号和转义字符都可以组成字符串 例如 : "" /* 表示的是空串, 字符串含有 0 个字符 */ " " /* 表示空格字符串 */ "a" /* 表示是由字符 a 组成的字符串 */ "program" /* 表示的是含有多个字符的字符串 */ "012\t345\n67\t89" /* 表示的是含有转义字符的字符串 */ 注意, 双引号 是字符串的定界符, 不是字符串的一部分, 如果要字符串中出现双引号, 对双引号要采用转义字符 (\ ) 的形式 例如 : " I say: "Goodbye!"" 是错误的表示形式 正确的表示形式是 : "I say: \"Goodbye!\""

38 2.2 基本数据类型 29 在 C 语言中, 对字符串的长度一般是没有限制, 系统为了处理需要,C 语言编译系统将自动在字符串的尾部加上一个特殊的 字符串结束标志 转义字符 \0 ( 在 ASCII 码中, 其代码值为 0), 以表示这个字符串的结束 系统依据此标志 \0 判断字符串是否结束 因此, 长度为 n 个字符的字符串, 在内存中占有 n+1 个字节的空间 字符串常量与字符常量的区别如下所示 1) 字符常量用 做定界符, 而字符串常量用 做定界符 2) 字符常量是 1 个字符, 字符串常量是 0 个或多个字符序列组成 3) 字符常量占用 1 个字节, 字符串常量占用字符串中字符数加 1 个字节的存储空间, 多出来的一个字节用来存放字符串的结束标志 \0 例如, a 和 a 是两个不同的常量 字符常量 a 占 1 个字节, 而字符串常量 a 占 2 个字节 在内存中的形式分别如图 2-2(a) 和图 2-2(b) 所示 a a \0 (a) a 的存储表示 (b) a 的存储表示 图 2-2 字符 a 不同形式的存储表示 (3) 符号常量当某个常量引用起来比较复杂而又经常用到时, 可以将该常量定义为符号常量, 也就是分配一个符号序列给这个常量, 在以后的引用中, 这个符号序列就代表了实际的常量 这种用一个指定的名字代表一个常量称之为符号常量, 即带名字的常量 符号常量必须在使用前先定义, 定义格式为 : #define 标识符常量例如 : #define PI 其中 PI 可以代替常量, 它代替的常量是 #define 是宏定义, 每个 #define 定义一个符号常量, 并且占据一个书写行 使用 #define 时不要以分号结束, 它不是一个语句, 而是通知编译系统的预处理命令, 使系统在编译程序时, 将程序中所有该符号都用所定义的常量替换 后续章节 ( 第 9 章 ) 将详细介绍 2. 字符变量 (1) 字符型变量的定义 C 语言的字符变量定义就是用字符类型标识符定义变量 字符变量的定义格式为 : 字符型类型标识符变量名 1, 变量名 2,, 变量名 n; 例如 : char ch1,ch2; unsigned char ch3,ch4; 其中,char 与 unsigned char 是数据类型名, ch1 ch2 ch3 ch4 是字符变量名称 被定

39 30 第 2 章数据类型及其表达式 义的字符变量在内存中只占 1 个字节, 只能存放 1 个字符, 并且存放的不是字符本身, 而是 该字符的 ASCII 码值 就是说字符变量的值是该变量所代表的字符的 ASCII 代码 例如 : char ch; ch='a'; 表示字符 a 的 ASCII 代码 (97) 以二进制的形式存放在变量名 ch 代表的内存单元中, 而不是将字符 a 存储于内存单元中 (2) 字符型变量的赋值 1) 字符型变量的初始化 字符型变量的初始化格式为 : 例如 : C 语言程序设计 字符型类型标识符变量名 = 数值 ; char ch='a'; 注意, 赋的值可以是字符型常量, 也可以是整型常量 例如 : char ch=65; C 语言允许整型数据与字符型数据通用, 执行语句 ch=65;, 相当于把某个字符的 ASCII 码赋值 (65) 给字符型变量 ch, 而 65 是字符 A 的 ASCII 码, 所以语句 ch=65; 等同于语句 ch= A ; 2) 同整型变量一样, 字符型变量也可以先定义, 后赋值 例如 : char ch; ch='a'; 例 2.4 字符变量的赋值使用 程序如下 : #include<stdio.h> void main() { char c1='a',c2,c3,c4; c2=65; c3='\101'; c4='\x41'; printf("%c,%c,%c,%c",c1,c2,c3,c4); 程序运行结果如下 : A,A,A,A 空类型 空类型是从语法完整性的角度给出的一种数据类型, 表示该处不需要具体的数据值, 因而没有数据类型就称之为空类型 空类型多用于函数调用没有返回值的情况 例如 : int add(int a,int b);

40 2.3 运算符与表达式 31 这个函数声明中的 int 类型说明符表示 add( ) 函数的返回值是整型值 如果 add( ) 函数被调用后, 没有返回值, 则函数声明中的类型说明符就可以被定义为空类型 (void), 例如 : void add(int a,int b); 2.3 运算符与表达式 了解数据类型之后, 就知道了计算机处理数据的形式 现在再来探讨计算机处理数据的过程 处理数据就是对数据进行运算, 而运算是通过运算符来完成的 在 C 语言中提供了丰富的运算符, 其优先级和结合方向不尽相同, 本节介绍运算符优先级和结合方向 由运算符形成的相应的表达式及其使用方法 C 运算符简介 1. 运算符 C 语言的运算符种类较多, 灵活性大, 除了控制语句和输入输出以外, 几乎所有的基本操作都可用运算符实现 参加运算的数据称为运算数或操作数 C 语言运算符如表 2-6 所示 表 2-6 C 语言运算符表 优先级 运算符 名称或含义 结合方向 1 [] ( ). -> 数组下标 圆括号 成员访问 ( 成员 ) 成员选择( 指针 ) 左到右 - ( 类型 ) ++ 负号运算符 强制类型转换 自增运算符 2 -- * & 自减运算符 取值运算符 取地址运算符 右到左! ~ sizeof 逻辑非运算符 按位取反运算符 长度运算符 3 / * % 除 乘 余数 ( 取模 ) 左到右 加 减 左到右 5 << >> 左移 右移 左到右 6 > >= < <= 大于 大于等于 小于 小于等于 左到右 7 ==!= 等于 不等于 左到右 8 & 按位与 左到右 9 ^ 按位异或 左到右 10 按位或 左到右 11 && 逻辑与 左到右 12 逻辑或 左到右 13? : 条件运算符 右到左 14 = 赋值运算符 右到左 15, 逗号运算符 左到右 对于运算符, 应从以下四个方面理解 1) 运算符的作用 : 表示能够处理的操作 2) 与运算符相关的数据类型 : 包括参与操作的数据和运算结果的数据类型 3) 运算符的优先级 : 表示不同运算符参与运算时的先后顺序, 优先级高的先于优先级低的运算符进行运算

41 32 第 2 章数据类型及其表达式 4) 运算符的结合性 : 当优先级相同的时候, 按照运算符的结合方向确定运算的次序, 运算符的结合性分为右结合 ( 从右向左 ) 和左结合 ( 从左到右 ) 两种方式 2. 表达式 C 语言的语句都是由表达式构成的 用运算符将运算对象连接形成的式子就是表达式 表达式是描述数据加工的一种方法, 只不过它描述的是比较简单的数据加工方法 C 语言中 的表达式是十分丰富的, 它一般构成规则有如下几点 l) 单个的常量 变量 函数调用都是表达式 2) 运算符与常量 变量连接是表达式 3) 有限次使用上述规则获得的运算式也是表达式 由于在复杂的表达式中可能出现各种运算符, 它们的优先级别不同 因此, 要注意使用 圆括号来改变运算次序 每个表达式都可以按照其中运算符的优先级和运算规则依次对运算对象进行运算, 最终获得一个数据, 该数据称为表达式的值 表达式值的数据类型就称为表达式的数据类型 由于表达式计算结果可能是整型 实型或逻辑型等, 所以表达式的数据类型也可以分为整型 实型和逻辑型等 在 C 语言中逻辑型数据都是用整数来表示的, 所以 C 语言的表达式类型实际上只区分为整型和实型, 这两种类型均为数值型 在程序或语句中使用表达式时, 要按照语法和表达式的位置来确定表达式的准确类型 算术运算符和算术表达式 1. 算术运算符 C 语言中有 6 种基本算术运算符, 分别是 :+ - * / -( 取负 ) %( 取余 ), 与数学的运算功能基本相同 其中 + - * / %( 取余 )5 个运算符在运算时是双目运算符 目 是指参加运算的数据, 也就是运算数, 可以是常量, 也可以是变量 如果运算符需要的运算只有一个, 就称这个运算符为单目运算符 ; 如果 目 的个数是 2 或 3, 则称为双目或三目运算符 -( 取负 ) 运算符在运算时需要一个运算数, 是单目运算符 优先级 :* / % 具有相同运算级别, 并高于 + -(+ - 具有相同级别 ) 结合方向 : 自左向右 ( 左结合性 ) 对算术运算符说明如下 1)+ - * / -( 取负 )5 种运算符对于整型和实型都适用 2) 减法运算符 - 为双目运算符 但 - 也可作负值运算符, 此时为单目运算, 如 -x -5 等具有左结合性 并且 -( 取负 ) 运算符的优先级要高于 * / % 3) 除法运算符 / 是双目运算符, 具有左结合性, 参与运算数均为整型时, 结果也为整型, 舍去小数, 只取整数部分作为结果, 当被除数与除数有一个为负, 即商为负整数也称为取整运算 如果运算数中有一个是实型或者两个均为实型, 则结果为双精度实型, 如 : 10/4=2 10/-4=-2, 两个运算数均为整型, 结果的小数全部舍去 如果是 10/4.0 则运算结果为 2.5, 两个运算数中有实数参与运算, 因此结果也为实型 4) % 取余运算符要求参与运算的两个运算数均为整型, 不能为其他类型, 运算结果 C 语言程序设计

42 2.3 运算符与表达式 33 等于两个运算数相除后的余数 当运算数为负数时, 结果的符号因机器类型而定 在 VC 中结果的符号与被除数的符号一致 2. 算术表达式 算术表达式是由算术运算符与运算数组成的, 运算数通常是常量 变量 函数等, 在表 达式中也可以出现多个算术运算符 例如 : 5+6 x*2 10%3 以上均是合法的算术表达式 作为一般情况, 则可有更多的运算符和圆括号, 例如 : -a/(b1+5)-11%7*'a' 要注意,C 语言表达式中的所有字符都是写在一行上的, 没有分式, 也没有上下标, 括号只有圆括号一种, 如数学表达式 : a b c+d 高 ( ) 需写成 : (a+b)/(c+d) 图 2-3 运算符的优先级和结合性 C 语言中, 规定了算术运算符的优先级和结合性, 圆 括号可用来改变优先级, 如图 2-3 所示 例如, 表达式 -a/(b1+5)-11%7*'a' 的求值过程如下 1) 求 -a 的值 2) 求 b1+5 的值 3) 求 1)/ 2) 的值 4) 求 11%7 的值 5) 求 4)* a 的值 6) 求 3)- 5) 的值 在算术运算表达式中, 自增 自减运算表达式是 C 语言中特有的, 下面着重介绍它们的 使用 3. 增量运算符 在算术运算符中除了上述的 6 个基本运算符以外, 还有两个特殊的运算符,++( 自增运算符 ) 和 --( 自减运算符 ), 统称为增量运算符 从运算功能上看, 自增和自减运算符是对某一变量加 ( 或减 )1 再赋值给这一变量 自增 ( 减 ) 运算符既可以出现在运算对象的前面, 也可出现在运算对象的后面 出现在运算对象的前面时称为前缀运算符, 出现在运算对象的后面称为后缀运算符 例如 : ++i(--i) i++(i--) ( 从右向左结合 ) * / % ( 从左向右结合 ) 低 + - ( 从左向右结合 ) ++i(--i) 是前缀自加表达式, i++(i--) 是后缀自加表达式, 两个式子展开都等同于

43 34 第 2 章数据类型及其表达式 i=i+1 (i=i-1); 如果 i 的值为 3, 则 ++i 和 i++ 的值均为 4(--i 和 i-- 的值均为 2) 在使用增量运算符时需要注意以下三点 1) 增量运算符的运算对象只能是变量, 而不能是常量或者表达式 例如 : int i; i=3; i++; 程序段中, 定义了整型变量 i, 把 3 赋值给 i,i 的值为 3 执行语句 i++ 等同于执行语句 i=i+1;,i 的值变为 4 通过展开可以看出来, 自增运算展开后实质是赋值运算, 而赋值运算符要求赋值符号左侧必须是变量, 所以自增运算符的运算对象只能是变量 如果不是变量系统会报错 例如 : 3++; (a+b)++; 这些都是不合法的 2) 对于增量运算符的前缀形式和后缀形式的表达式, 在独立成语句时都等同于在运算数自身加 1 或减 1, 效果是一样的, 但当自增或自减运算符存在于其他的表达式中时, 效果却是截然不同的 前缀运算符的作用是, 先进行自加或自减运算, 然后再使用变量去做其他运算 ; 后缀运算符的作用是, 先使用变量的值, 在其他运算都做完了, 再做自加或自减运算 例如 : C 语言程序设计 int i=3,k; k=++i; 在 k=++i 表达式中, ++ 就是前缀运算符, 根据规则, 要先进行自加 i 的值变为 4, 则 k=4 若改为: k=i++; 在该表达式中, ++ 就是后缀运算符, 根据规则, 要先使用 i 的值赋值给 k, 则 k=3, 然后 i 做自加运算,i 的值变为 4 若改为 : k=++i+i; 在该表达式中, ++ 就是前缀运算符, 要先进行自加 i 的值变为 4, 那后面的 i 的值是 3 还是 4 呢? 说明一下, 后面的 i 的值取决于计算机使用的编译系统, 不同的编译系统执行结果不一样 3) 当多个加号或减号连续出现在同一个表达式中时, 根据 C 语言的语法分析 最长匹配原则, 即如果出现连续多个运算符, 在保证有意义的前提下, 从左至右尽可能多地组合字符成为运算符 例如 : k=i+++++i; 根据原则就可以把表达式看成 : k=(i++)+(++i) 但为了避免歧义性, 一般不采用连续多个运算符的形式

44 2.3 运算符与表达式 关系运算符和关系表达式 1. 关系运算符 C 语言提供了 6 种关系运算符用来比较两个运算数之间的大小关系 关系运算符如表 2-7 所示 表 2-7 关系运算符 运算符名称形式关系运算功能 > 大于 a>b 求 a 是否大于 b < 小于 a<b 求 a 是否小于 b == 等于 a==b 求 a 是否等于 b >= 大于等于 a>=b 求 a 是否大于等于 b <= 小于等于 a<=b 求 a 是否小于等于 b!= 不等于 a!=b 求 a 是否不等于 b 优先级 :> < >= <= 具有相同的优先级并且高于具有相同优先级的!= == 关系运 算符的优先级高于赋值运算符而低于算术运算符 例如 : 5>1+3 等价于 5>(1+3), a==b>c 等价于 a==(b>c) 结合方向 : 自左向右 ( 左结合性 ) 例如 : 5>4>3 等价于 (5>4)>3 2. 关系表达式 用关系运算符将两个表达式连接起来的式子就是关系表达式 关系表达式是比较两个运 算数的大小, 比较的结果是一个逻辑量 真 或 假 关系表达式通常用于逻辑判断的条件表达式中 例如 : 1>2 a+b<=c-d x!=y 以上均为合法的关系表达式 使用关系符运算要注意以下几点 1) 关系表达式的值只有两个, 判断关系成立即为 真, 用数值 1 表示 ; 关系不成立值即为 假, 用数值 0 表示 例如 : int a=1,b=2,c=3; 关系表达式 a<b 是成立的, 所以表达式的值为 真 关系表达式 b>c==a, 首先计算表达式 b>c, 结果是不成立的, 表达式的值为 假, 也就是数值 0, 然后拿表达式 b>c 的结果 0 与 a 做相等的比较 (0==a) 是不成立的, 所以整个表示式的值为 假 2) 运算符 >= ==!= <= 是两个字符构成的一个运算符, 用空格从中分开写就会产生语法错误 例如 : a> =b; 是错误的, 但是可以写成 : a >= b;, 在运算符的两侧增加空格会提高可读性 同样将运算符写反, 例如 :=> =< =! 等形式会产生语法错误

45 36 第 2 章数据类型及其表达式 3) 由于计算机内存放的实数与实际中的实数存在着一定的误差, 如果对浮点数进行 == ( 相等 ) 或!=( 不相等 ) 的比较, 容易产生错误结果, 应该尽量避免 4) 不要将 == 写成 =, 例如 : 将 x==y 写成 :x=y,c 语言会将该表达式作为赋值 表达式处理, 将 y 的值赋给 x, 并判断 x 的值是否为 0, 如果为 0 则表达式为 假, 否则表 达式为 真, 造成逻辑含义错误 例 2.5 关系运算举例 程序如下 : C 语言程序设计 #include <stdio.h> void main() { int a,b; scanf("a=%d,b=%d",&a,&b); printf("a>b:%d\n",a>b); printf("a<b:%d\n",a<b); printf("a==b:%d\n",a==b); printf("a>=b:%d\n",a>=b); printf("a<=b:%d\n",a<=b); printf("a!=b:%d\n",a!=b); 程序运行情况如下 : a=3,b=5 a>b:0 a<b:1 a==b:0 a>=b:0 a<=b:1 a!=b: 逻辑运算符和逻辑表达式 1. 逻辑运算符 逻辑运算符表示各运算数的逻辑关系 逻辑运算的结果是一个逻辑值, 也就是 真 或 假, 真 用 1 表示, 假 用 0 表示 但在判断一个量的值是否为 真 时,0 的值就是 假, 非 0 的值为 真 逻辑运算符如表 2-8 所示 表 2-8 逻辑运算符 运算符 名称 形式 逻辑运算功能! 逻辑非!a 求 a 的非 && 逻辑与 a&&b 求 a 和 b 的与 逻辑或 a b 求 a 和 b 的或 优先级 :! 运算级别最高 && 运算高于 运算! 运算的优先级高于算术运算符, 而 && 和 运算则低于关系运算符 例如 : a>b && c>d 等价于 (a>b)&&(c>d) ;!b==c d<a 等价于 ((!b)==c) (d<a) ; a+b>c&&x+y<b 等价于 ((a+b)>c)&&((x+y)<b) 结合方向 : 逻辑非 ( 单目运算符 ) 具有右结合性 ; 逻辑与和逻辑或 ( 双目运算符 ) 具有

46 2.3 运算符与表达式 37 左结合性 说明如下 1) 逻辑非 运算是当运算数为非 0 值时 ( 包括实型数 ), 运算结果是 0; 反之, 当运 算数是 0 值时, 运算结果为 1 是 0 2) 逻辑与 运算是当且仅当两个运算数都是非 0 值, 运算结果为 1; 否则运算结果 3) 逻辑或 运算是两个运算数中只要有一个是非 0 值, 运算结果为 1; 只有当两个运 算数都是 0 时, 结果为 0 2. 逻辑表达式 由逻辑运算符连接的表达式称作逻辑表达式 参与逻辑运算的操作数应该是 0 或非 0 的 数值 例如 : 1&&2 a b!c 以上均为合法的逻辑表达式 使用逻辑运算符时, 需要注意以下几点 1) 对于任意的逻辑表达式 ( 表达式 1)&&( 表达式 2), 则计算 ( 表达式 1)&&( 表达式 2) 的过程为先计算表达式 1 的值, 若表达式 1 的值为非 0, 则计算表达式 2 的值, 并且依据表达式 2 的值决定 ( 表达式 1)&&( 表达式 2) 的结果值 ( 若表达式 2 的值为非 0, 则结果为 1, 否则为 0); 若表达式 1 的值为 0, 则不用计算表达式 2 的值, 而是直接得到表达式的结果值为 0 也就是有一个条件为 0 时结果为 0 例如: int a=0,b=1,c; c=(a++>0)&&(b--<0); 在表达式 (a++<0)&&(b--<0) 中, 由于 a++ 是后缀自加, 首先取变量 a 的值与 0 做比较 (a>0), 因而使得关系表达式 (a++ <0) 不成立, 其结果为 0 按照 C 语言进行逻辑运算的规定, 如果 && 运算符前面表达式结果为 0, 此时不再计算 && 后面的表达式 (b--<0), 无论 && 运算符后面的表达式的值为多少, 整个表达式的值都是 0, 因此变量 b 的值没有改变 (b 的值仍然为 1) 然后把逻辑与表达式的结果赋值给变量 c, 则 c 的值为 0 2) 对于任意的逻辑表达式 ( 表达式 1) ( 表达式 2), 则计算 ( 表达式 1) ( 表达式 2) 的过程为先计算表达式 1 的值, 若表达式 1 的值为 0, 则计算表达式 2 的值, 并且依据表达式 2 的值决定 ( 表达式 1) ( 表达式 2) 的结果值 ( 若表达式 2 的值为非 0, 则结果为 1, 否则为 0); 若表达式 1 的值非 0, 则不用计算表达式 2 的值, 而是直接得到 ( 表达式 1) ( 表达式 2) 的结果值为 1 也就是有一个条件为 1 时结果为 1 例如: int a=0,b=1,c; c=(++a>0) (b--<0); 在表达式 (++a>0) (b--<0) 中, 由于 ++a 是前缀自加, 首先计算 ++a(a=a+1), 然后取变量 a 的值 1 与 0 做比较 a>0, 因而使得关系表达式 ++a>0 成立, 其结果为

47 38 第 2 章数据类型及其表达式 1 因此, 无论 运算符后面的表达式的值为多少, 按照 C 语言进行逻辑运算的规定, 此 时不再计算 后面的表达式 (b--<0), 整个表达式的值一定是 1, 所以变量 b 的值没有 改变 (b=1) 然后把逻辑与表达式的结果赋值给变量 c, 则 c 的值为 1 例 2.6 逻辑运算举例 程序如下 : C 语言程序设计 #include <stdio.h> void main() { int a,b; scanf("a=%d,b=%d",&a,&b); printf("a&&b=%d\n",a&&b); printf("a b=%d\n",a b); printf("!a=%d",!a); 程序运行情况如下 : a=10,b=20 a&&b=1 a b=1!a= 条件运算符和条件表达式 1. 条件运算符? : 条件运算符是 C 语言中唯一的一个三目运算符, 它要求有三个运算对象, 每个运算对象的类型可以是任意类型的常量 变量和返回值为任意类型的函数调用, 也可以是它们组成的表达式 优先级 : 高于赋值运算符, 低于逻辑关系运算符 结合方向 : 自右向左 ( 右结合性 ) 2. 条件表达式 条件表达式一般形式为 : 表达式 1? 表达式 2: 表达式 3 执行过程为, 先计算 表达式 1 的值, 如果为真 ( 非 0), 则计算 表达式 2 的值, 并将 表达式 2 的值作为整个条件表达式的结果值 ; 如果为假 (0), 则计算 表达式 3 的值, 并将 表达式 3 的值作为整个条件表达式的结果值 就是说, 根据条件的真或假, 只能选择一个表达式的结果作为整个表达式的结果 例如 : (a>b)?a:b 求解表达式 (a>b)?a:b 的结果时, 先判断 (a>b) 的结果, 如果 (a>b) 的结果是 真, 则条件表达式的值是 a 的值, 否则条件表达式的值是 b 的值

48 2.3 运算符与表达式 39 使用条件运算符应注意以下几点 1) 条件表达式中, 三个运算对象的类型可以相同, 也可以不相同 例如 : (ch>='a'&& ch<='z')?'a':'b' x?1:0.5 2) 条件运算符遵循 自右向左 方向的结合原则, 例如 : a>b?c:d>e?f:g 等价于 : a>b?c(d>e?f:g) 例如, 设有程序段 : int x=10,y=9; int a,b,c; a=(--x==y++)?--x:--y; b=x++; c=y; 通过程序段求 a b c 的结果值分别是多少? 对于表达式 a=(--x==y++)?--x: --y ; 由于条件表达式的优先级高于赋值运算, 首先进行条件表达式的运算, 并将其结果值赋给 a 在进行条件表达式的运算时, 由于 --x 是前缀运算,x 的值先减 1 后变量的值为 9,y 变量是后缀运算,y 与 x 比较之后其值改变为 10, 因此 x==y 条件成立, 条件表达式的值就是 : 前面 --x 的值 该语句可以看成 a=--x; 同样道理,x 的值变化为 8 后赋给 a, 所以 a 的值是 8; 语句 b=x++; 中,x 是后缀运算, 先将 x 的值 8 赋给 b( 其值为 8) 后变量 x 发生变化 ( 其值为 9); 语句 c=y; 中, 将 y 的值 10 赋予变量 c,c 的值为 赋值运算符和赋值表达式 1. 赋值运算符 C 语言的赋值运算符用 = 表示, 它的功能是把其右侧表达式的值赋给左侧的变量, 赋值的一般形式为 : 变量 = 表达式 例如 :a=1 表示把数值 1 赋给变量 a, 也就是让变量 a 的值为 1 赋值运算符 = 表示把表达式的值送到变量代表的存储单元中去 由此, 赋值运算符的左侧只能是变量, 因为它表示一个存放值的地方 例如 : 1=a; a+b=c; 这样的赋值显然是不合法的 优先级 : 低于算术运算符 结合方向 : 自右向左 ( 右结合性 )

49 40 第 2 章数据类型及其表达式 2. 赋值表达式 赋值表达式是由赋值运算符 = 连接表达式 ( 右侧 ) 和变量 ( 左侧 ) 即将赋值运算符右侧的表达式的结果值赋予赋值运算符左侧的变量, 表达式可以是常量 变量 表达式或另外一个赋值表达式 一般形式 : 变量名 = 表达式例如 :i=3 这种形式可以出现在表达式可以出现的任何地方, 如果赋值表达式再加上分号, 就称为赋值语句, 例如 : int i; i=3; 既然是表达式, 就具有一个值和类型 赋值表达式求值过程是 : 先求赋值运算符右侧表达式的值, 然后把这个值赋给左侧的变量, 而赋值表达式的值是左侧变量的值, 表达式的类型是左侧变量的类型 例如 : a=2+3; 它的运算结果值是 5, 该表达式的类型是 a 的类型, 即整型 当赋值表达式两边的数据类型不同时, 由系统自动进行类型转换 其原则是将赋值运算符右侧的数据类型转换成左侧变量的数据类型 3. 复合赋值运算符 在 C 语言中,+ - * / % 这 5 种算术运算符可以与赋值运算符 = 组成复合赋值运算符, 如表 2-9 所示 C 语言程序设计 表 2-9 复合赋值运算符 运算符 名称 表达式形式 适用范围整数实数 相当于 += 加赋值 a+=b a=a+b -= 减赋值 a-=b a=a-b *= 乘赋值 a*=b a=a*b /= 除赋值 a/=b a=a/b %= 取余赋值 a%=b a=a%b 例如 : int a,b; a=3; b=5; 那么 a+=b; 相当于 a=a+b; 结果 a 的值为 8 注意, a*=a+5; 等价于 a=a*(a+5); 而不是 a=a*a+5; 例 2.7 复合赋值运算符举例 程序如下 : #include <stdio.h>

50 2.3 运算符与表达式 41 void main() { int a=3,b=9,c=-7; a+=b; c+=b; b+=(a+c); printf("a=%d,b=%d,c=%d\n",a,b,c); a+=b=c; printf("a=%d,b=%d,c=%d\n",a,b,c); a=b=c; printf("a=%d,b=%d,c=%d",a,b,c); 运行结果 : a=12,b=23,c=2 a=14,b=2,c=2 a=2,b=2,c=2 4. 赋值的类型转换规则 在算术赋值运算中, 当赋值号右边表达式值的类型与左边变量的类型不一致但都是数值时, 计算机系统将自动地把右边的类型转换成左边变量的类型后再进行赋值 转换规则如表 2-10 所示 表 2-10 赋值的类型转换规则 赋值号左 赋值号右 转换说明 float int 将整型数据转换成实型数据后再赋值 int float 将实型数据的小数部分截去后再赋值 long int int short int 值不变 int short int long int 右侧的值不超过左侧数据值的范围时值不变, 否则出错 unsigned signed 按原样赋值, 如果数据范围超过相应整型的范围, 出错 signed unsigned 按原样赋值, 如果数据范围超过相应整型的范围, 出错 逗号运算符和逗号表达式 1. 逗号运算符 C 语言中, 可以用, 作为运算符, 称之为逗号运算符 优先级别 : 逗号运算符是优先级别最低的运算符 结合方向 : 自左向右 ( 左结合性 ) 2. 逗号表达式用逗号运算符把两个或多个表达式连接起来构成逗号表达式 逗号表达式的格式为 : 表达式 1, 表达式 2,, 表达式 n 例如 : i=1,j=2,i+j

51 42 第 2 章数据类型及其表达式 逗号表达式的执行过程是 : 依次计算表达式 1 的值, 表达式 2 的值,, 表达式 n 的 值, 最后将表达式 n 的值作为整个表达式的结果值 因此逗号表达式又称为 顺序求值运算 例如 : C 语言程序设计 int a=2,b; float f=5.2; f=(b=a,2*a,2*f); 逗号表达式的求值顺序是 : 先计算 b=a (b 的值为 2), 其次计算 2*a 的值 ( 值为 4), 最后计算 2*f 的值 ( 值为 10.4) 当整个表达式计算结束后, 取 2*f 的值作为整个逗号表达式的值赋值给 f(f 的值为 10.4) 使用逗号运算符时应注意以下几点 1) 只有出现在表达式中的逗号才可构成逗号表达式, 不是出现逗号的地方都是逗号表达式, 逗号在 C 语言中还用于语句之中的分隔符 例如 : int a,b,c; printf("%d,%d",a,b); 逗号作为语句中参数的分隔符 2) 在多数情况下, 使用逗号表达式不是为了取得和使用这个逗号表达式的最终结果值, 其目的是为了分别按顺序求得每个表达式的结果值 这在循环结构 ( 第 5 章 ) 中经常使用 3) 逗号表达式一般形式中的表达式 1 和表达式 2 也可以又是逗号表达式 例如 : 表达式 1,( 表达式 2, 表达式 3) 形成了嵌套情形 因此可以把逗号表达式扩展为以下形式 : 表达式 1, 表达式 2,, 表达式 n 整个逗号表达式的值等于表达式 n 的值 例 2.8 逗号运算符应用 程序如下 : #include <stdio.h> void main() { int a,b,c; b=(a=10,a+5,c=10); printf("a=%d,b=%d,c=%d\n",a,b,c); c=(a=10,b=5,a+b); printf("a=%d,b=%d,c=%d\n",a,b,c); 程序运行结果如下 : a=10,b=10,c=10 a=10,b=5,c=15 程序分析 : 求解 b=(a=10,a+5,c=10) 时 ; 首先计算赋值符号右侧的逗号表达式, 顺序计算 :a= c=10, 并将 c=10 的结果值 (10) 赋值给变量 b(b 的值为 10), 调用 printf( ) 函数的输出结果是 :a=10 b=10 c=10 求解 c=(a=10,b=5,a+b) 时 ; 首先计算赋值符号右侧的逗号表达式的值, 顺序求值的过程是 :a=10 b=5 10+5, 并将 10+5 的值赋予变量 c (c 的值为 15), 调用 printf( ) 函数的输出结果是 :a=10 b=5 c=15

52 2.3 运算符与表达式 位运算符和位运算表达式 位运算是指对二进制位进行的运算 它的运算对象不是以一个数据为单位, 而是对内存中存储数据的每个二进制位进行运算 每个二进制位只能存放 0 和 1 通常把组成一个数据的最右边的二进制位称为第 0 位, 然后是第 1 位, 数据中最左边的二进制位是最高位 正确地使用二进制位运算, 将有助于节省内存空间和编写复杂的程序 1. 位运算符 C 语言提供了 6 个位运算符, 其中除了运算符 ~ 是单目运算符之外, 其他都是双目运算符 如表 2-11 所示 表 2-11 位运算符 运算符名称例子位运算功能 & 按位与 a&b a 和 b 按位与 按位或 a b a 和 b 按位或 ^ 按位异或 a^b a 和 b 按位异或 ~ 按位取反 ~a a 按位取反 << 左移位 a<<2 a 左移 2 位 >> 右移位 b>>3 b 右移 3 位 优先级别 : 在位运算符中, 取反运算符 ~ 的优先级别最高, 高于位于同级别的左移位 << 和右移位 >> 运算符, 相对低级别的按位与 & 高于按位或 按位或 高于按位异或 ^ 结合方向 : 其中 ~ 是右结合性, 其他为自左向右 ( 左结合性 ) 注意 : 位运算的运算数只能是整型或者是字符型数据, 而不能是实型数据 其中位运算 符中除位反运算符 (~) 之外, 均可以与赋值运算符组成复合赋值运算符, 用法与算术复合 赋值运算符相同 2. 位运算表达式 用位运算符把运算数连接起来构成位运算表达式 例如 : 1& 以上均是合法的位运算表达式 下面对 6 个位运算符表达式分别加以介绍 (1) 按位与运算符 & 按位与运算是对两个运算数据的对应二进制位进行与运算 其运算规则是 : 若对应两个位都为 1, 则该位与的结果为 1, 否则为 0 也就是: 0&0=0 0&1=0 1&0=0 1&1=1 例如, 有如下定义 : char a=10,b=15,c; 计算 c=a&b 的结果值 那么把 a 与 b 转换成二进制数为 : a:

PowerPoint 演示文稿

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

More information

FY.DOC

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

More information

新版 明解C言語入門編

新版 明解C言語入門編 328, 4, 110, 189, 103, 11... 318. 274 6 ; 10 ; 5? 48 & & 228! 61!= 42 ^= 66 _ 82 /= 66 /* 3 / 19 ~ 164 OR 53 OR 164 = 66 ( ) 115 ( ) 31 ^ OR 164 [] 89, 241 [] 324 + + 4, 19, 241 + + 22 ++ 67 ++ 73 += 66

More information

没有幻灯片标题

没有幻灯片标题 第 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

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

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

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

FJXBQ

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

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++ 程序设计 告别 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

《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

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

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

<4D F736F F D205A572D2D A1AAA1AAD4ACE7F42D43D3EFD1D4CAB5D1B5BDCCB3CC2E646F6378>

<4D F736F F D205A572D2D A1AAA1AAD4ACE7F42D43D3EFD1D4CAB5D1B5BDCCB3CC2E646F6378> 第 1 部分 Visual Studio 6.0 开发环境介绍 本书以 Visual C++ 6.0 作为 C 源程序的实践开发环境, 本章将首先介绍 Visual C++ 6.0 环境的基本操作, 包括 Visual C++ 6.0 的安装和启动,C 源程序的编辑 运行与调试 1.1 安装与启动 Visual C++ 6.0 MSDN Visual C++ 6.0 1.1 Microsoft Visual

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

没有幻灯片标题

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

More information

新・解きながら学ぶC言語

新・解きながら学ぶC言語 330!... 67!=... 42 "... 215 " "... 6, 77, 222 #define... 114, 194 #include... 145 %... 21 %... 21 %%... 21 %f... 26 %ld... 162 %lf... 26 %lu... 162 %o... 180 %p... 248 %s... 223, 224 %u... 162 %x... 180

More information

山东师大数学科学学院

山东师大数学科学学院 山东师大数学科学学院 教材 参考书 教材 C 程序设计 ( 第三版 ) 辅导书 C 程序设计实训教程 谭浩强编著 杨杰臧文科 主要内容 第一章 C 语言概述第二章数据类型 运算符与表达式第三章顺序结构程序设计第四章选择结构程序设计第五章循环结构程序设计第六章数组第七章函数第八章指针第九章结构体与共用体第十章文件 上机实习 上机地点 : 上机时间 : 上机内容 (1) 对课堂所讲内容进行验证性实验 ;

More information

Microsoft Word - 正文.doc

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

More information

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

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

More information

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

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

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

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

PowerPoint 演示文稿

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

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

Microsoft Word - YYCXfm.DOC

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

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

<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

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

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

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

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

《计算概论》课程 第十九讲 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

C/C++ - 文件IO

C/C++ - 文件IO C/C++ IO Table of contents 1. 2. 3. 4. 1 C ASCII ASCII ASCII 2 10000 00100111 00010000 31H, 30H, 30H, 30H, 30H 1, 0, 0, 0, 0 ASCII 3 4 5 UNIX ANSI C 5 FILE FILE 6 stdio.h typedef struct { int level ;

More information

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

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

试卷代号 :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

数据结构

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

More information

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

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

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

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

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

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

第 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语言程序设计》讲义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

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

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

移动平台应用软件开发 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 语言程序设计 ( 第 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

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

PowerPoint 演示文稿

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

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

Guava学习之Resources

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

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

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

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

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

内容简介 本书从结构化程序设计技术出发, 以 C 程序设计语言为载体, 以 Windows 下的 Visual C 为程序调试和运行平台, 通过对典型实例的算法及相应 C 语言代码的描述, 介绍了在程序设计过程中如何对问题进行分析 如何组织数据和如何描述解决问题, 揭示了在计算机应用过 普通高等教育 十二五 规划教材 计算机系列规划教材 计算机程序设计基础 周启生姬涛 主编 刘菲田红梅副主编 科学出版社职教技术出版中心 www.aboo 北京 内容简介 本书从结构化程序设计技术出发, 以 C 程序设计语言为载体, 以 Windows 下的 Visual C++ 2010 为程序调试和运行平台, 通过对典型实例的算法及相应 C 语言代码的描述, 介绍了在程序设计过程中如何对问题进行分析

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

任务 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

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

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

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

设计模式 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

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 语言程序设计的基本思想及基本方法 全书内容分为三 部分 第一部分(第 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

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

期中考试试题讲解

期中考试试题讲解 一 选择题 ( 一 ) 1. 结构化程序设计所规定的三种基本结构是 C A 主程序 子程序 函数 B 树形 网形 环形 C 顺序 选择 循环 D 输入 处理 输出 2. 下列关于 C 语言的叙述错误的是 A A 对大小写不敏感 B 不同类型的变量可以在一个表达式中 C main 函数可以写在程序文件的任何位置 D 同一个运算符号在不同的场合可以有不同的含义 3. 以下合法的实型常数是 C A.E4

More information

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

More information

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

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

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 The BitCoin Scripting Language 交易实例 交易结构 "result": { "txid": "921a dd24", "hash": "921a dd24", "version": 1, "size": 226, "locktime": 0, "vin": [ ], "vout": [ ], "blockhash": "0000000000000000002c510d

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

Microsoft PowerPoint - 07 派生数据类型

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

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

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

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

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

More information

Microsoft Word - 文前.doc

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

More information

C/C++ - 字符输入输出和字符确认

C/C++ - 字符输入输出和字符确认 C/C++ Table of contents 1. 2. getchar() putchar() 3. (Buffer) 4. 5. 6. 7. 8. 1 2 3 1 // pseudo code 2 read a character 3 while there is more input 4 increment character count 5 if a line has been read,

More information

第一章 绪论

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

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 语言 ( 科学出版社出版 ), 引导读者学习和巩固各章节内容

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

More information

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

More information

Microsoft Word - FM{new}.doc

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

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

C/C++程序设计 - 字符串与格式化输入/输出

C/C++程序设计 - 字符串与格式化输入/输出 C/C++ / Table of contents 1. 2. 3. 4. 1 i # include # include // density of human body : 1. 04 e3 kg / m ^3 # define DENSITY 1. 04 e3 int main ( void ) { float weight, volume ; int

More information

CIP. / ISBN Ⅰ.... Ⅱ.... Ⅲ. Ⅳ. G CIP http / /press. nju. edu. cn

CIP. / ISBN Ⅰ.... Ⅱ.... Ⅲ. Ⅳ. G CIP http / /press. nju. edu. cn CIP. /. 004. 4 ISBN 7 305 0458 7 Ⅰ.... Ⅱ.... Ⅲ. Ⅳ. G64. 505 CIP 004 0798 0093 05 8359693 05 835937 05 83686347 http / /press. nju. edu. cn nupress@public. ptt. js. cn 787 09 /6. 5 85 004 5 ISBN 7 305 0458

More information

新版 明解C++入門編

新版 明解C++入門編 511!... 43, 85!=... 42 "... 118 " "... 337 " "... 8, 290 #... 71 #... 413 #define... 128, 236, 413 #endif... 412 #ifndef... 412 #if... 412 #include... 6, 337 #undef... 413 %... 23, 27 %=... 97 &... 243,

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

<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

中医疗法(下).doc

中医疗法(下).doc ( 20 010010) 787 1092 1/32 498.50 4 980 2004 9 1 2004 9 1 1 1 000 ISBN 7-204-05940-9/R 019 1880.00 ( 20.00 ) ...1...2...3...4...13...15...17...17...24...25...26...26...28...28...29...31...31...33...33

More information

test

test C 语言程序设计教案 计算机科学技术学院基础教学部 前言 一. 教学目的 C 语言程序设计是高等学校本专科生计算机基础教学中的一门必修的公共基础课, 也是学习计算机的入门课 教学目的是通过理论教学和实验操作, 使学生掌握 C 程序编写及操作, 使学生具备在信息化社会里工作 学习和生活所必须的计算机编程知识与基本操作技能, 系统地 正确地建立计算机相关概念, 具备独立读写程序的能力, 并使学有余力的同学对

More information

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

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

C/C++ - 函数

C/C++ - 函数 C/C++ Table of contents 1. 2. 3. & 4. 5. 1 2 3 # include # define SIZE 50 int main ( void ) { float list [ SIZE ]; readlist (list, SIZE ); sort (list, SIZE ); average (list, SIZE ); bargragh

More information

Ps22Pdf

Ps22Pdf C ( CIP) C /. :, 2001. 7 21 ISBN 7-5624 -2355-5. C........ C. TP312 CIP ( 2001 ) 034496 C * * : 7871092 1 /16 : 14. 25 : 356 20017 1 20017 1 : 1 6 000 ISBN 7-5624-2355-5 / TP311 : 21. 00 C, C,,,, C,, (

More information

幻灯片 1

幻灯片 1 第一课 C 与 C++ 互联网新技术在线教育领航者 1 内容概述 第一部分 : C++ 综述 1. C++ 历史背景 2. Why C++ 3. 推荐书籍第二部分 : C VS C++ 1. C 语法回顾 2. 例 :C 实现动态数组 3. C++ 的 vector 第三部分 :C++ 对 C 的扩展 ( 上 ) 1. 命名空间 2. 输入输出 3. 基本类型转换 4. 声明 列表初始化 5. 指针和引用

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

CYY 1.mps

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

More information

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit 6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C51 6.1 C51 6.1.1 C51 C51 ANSI C MCS-51 C51 ANSI C C51 6.1 6.1 C51 bit Byte bit sbit 1 0 1 unsigned char 8 1 0 255 Signed char 8 11 128

More information

. (A) (B) (C) A (D) (E). (A)(B)(C)(D)(E) A

. (A) (B) (C) A (D) (E). (A)(B)(C)(D)(E) A . () () () () () (A) (B) (C) B (D) (E). (A) (B) (C) E (D) (E) (A) (B) (C) (D). () () () () E (A) (B) (C) (D) (E). C (A) (B) (C) (D) (E). (A) (B) (C) (D) D (E). () - () - () - () - () - D (A) (B) (C) (D)

More information

第3章 Java语言基础

第3章 Java语言基础 第 3 章 Java 语言基础 第 1/55 页 习题 3 3. 8. 9. 13. 18. 实验 : 1. 实验 4( 实 P11~12) 2. 实验任务 : 1 例 3.1( 教 P30) 2 变量赋值 ( 教 P29) 3 编写两个缓冲区对应同一个输入流对象, 并键盘输入整型 a 和双精度 b, 求和 第 2/55 页 习题 3 3. 实验任务 : 1 实验 5( 实 P12~13) 2 实验

More information

<4D F736F F D20CBB6CABFD1D0BEBFC9FAC8EBD1A7BFBCCAD4B4F3B8D92D383835B3CCD0F2C9E8BCC62E646F63>

<4D F736F F D20CBB6CABFD1D0BEBFC9FAC8EBD1A7BFBCCAD4B4F3B8D92D383835B3CCD0F2C9E8BCC62E646F63> 目录 I 考查目标... 2 II 考试形式和试卷结构... 2 III 考查内容... 2 IV. 题型示例及参考答案... 7 1 全国硕士研究生入学统一考试程序设计考试大纲 I 考查目标 全国硕士研究生入学统一考试计算机技术 软件工程专业学位硕士 程序设计 考试是为江苏大学招收以上硕士生设置的具有选拔性质的考试科目 其目的是科学 公平 有效地测试考生是否具备攻读计算机技术 软件工程专业学位硕士所必须的基本素质

More information