《高级语言程序设计(C)》.doc_第1页
《高级语言程序设计(C)》.doc_第2页
《高级语言程序设计(C)》.doc_第3页
《高级语言程序设计(C)》.doc_第4页
《高级语言程序设计(C)》.doc_第5页
免费预览已结束,剩余160页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 1 页 高级语言程序设计高级语言程序设计 C C 教案教案 目目 录录 第一章 概述 5 第二章 顺序结构程序设计 12 第三章 选择结构程序设计 29 第四章 循环结构程序设计 35 第五章 枚举类型 51 第六章 函数 52 第七章 数组类型 构造类型 75 第八章 结构与联合类型 构造类型 100 第九章 位运算与类型定义 110 第十章 预处理 116 第十一章 指针类型 121 第十二章 文件类型 构造类型 147 总复习 161 附录 全国计算机等级考试二级 C 语言程序设计要求 162 高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 2 页 高级语言程序设计高级语言程序设计 C C 教案教案 任课教师 王灿辉任课教师 王灿辉 电子邮件 电子邮件 wangcanhui wangcanhui 学习要求 学习要求 1 1 严要求 高要求 不易混过关严要求 高要求 不易混过关 2 2 课前预习课前预习 3 3 除免修外不允许缺课除免修外不允许缺课 4 4 课后全面复习课后全面复习 5 5 完成布置的课内 完成布置的课内 课外作业课外作业 尽快购买计算机尽快购买计算机 课程性质 课程性质 1 1 非常重要的 学科基础课 非常重要的 学科基础课 2 2 考试课 考试课 3 3 学分学分 3 3 总课时总课时 9090 3636 上课上课 18 18 上机上机 课外实践课外实践 3636 考试形式 考试形式 1 1 以期末笔试成绩为主以期末笔试成绩为主 2 2 参考平时综合成绩参考平时综合成绩 平时综合成绩不及格不允许参加平时综合成绩不及格不允许参加 课程的期末考试课程的期末考试 学科基础课 高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 3 页 软件工程软件工程 教材及主要参考资料教材及主要参考资料 1 1 孙辉孙辉 吴润秀吴润秀 编著 编著 C C 语言程序设计教程 北京 人民语言程序设计教程 北京 人民 邮电出版社 邮电出版社 2004 10 2004 10 2 2 潭浩强潭浩强 著著 C C 程序设计 第二版 程序设计 第二版 C C 程序设计题解与程序设计题解与 上机指导上机指导 北京 清华大学出版社北京 清华大学出版社 1999 12 1999 12 2000 9 2000 9 3 3 拟采用的教学方法 拟采用的教学方法 教 材 算法分析 TURBO C 软件工程 标准 C 数据结构 C 语言 算法分析数据结构 数据库原理 数据库设计 C PB C Java 及其他语 言 Visual C 6 0 高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 4 页 1 1 课堂教学 多媒体 实验 教学和学生上机实验相结合 课堂教学 多媒体 实验 教学和学生上机实验相结合 2 2 以应考 重语法和语义知识 和实用 重语用 相结合 以应考 重语法和语义知识 和实用 重语用 相结合 能力和素质培养 能力和素质培养 通过本课程的学习 学生应具有利用计算机语言编写通过本课程的学习 学生应具有利用计算机语言编写 解决某些具体问题的能力 学会结构化程序设计的基本思解决某些具体问题的能力 学会结构化程序设计的基本思 想 培养学生养成良好的编程习惯 为将来学习新的计算想 培养学生养成良好的编程习惯 为将来学习新的计算 机语言打下坚实的基础 机语言打下坚实的基础 上机报告 上机报告 上机前编写 包括 上机前编写 包括 1 1 本次上机的目的 本次上机的目的 2 2 本次上机内容 程序功能 实例或自编的源程序 本次上机内容 程序功能 实例或自编的源程序 3 3 本次上机注意事项 本次上机注意事项 学习过程 学习过程 读 懂别人编写的 程序读 懂别人编写的 程序 修改 别人或自己编写的 程序 改错或扩充功能等 修改 别人或自己编写的 程序 改错或扩充功能等 自己动手 编写程序 自己动手 编写程序 第一章第一章 概述概述 一 计算机语言的产生和发展 1 机器语言 1GL 计算机能直接识别和执行用机器语言编写的程序 高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 5 页 2 符号 汇编语言 2GL 编辑 用汇编语言编写的源程序 SOURCE 扩展名为 ASM 由系统软件 汇编程序对源程序进行翻译 汇编 生成目标程序 OBJECT 即二进制程 序 扩展名为 OBJ 由链接程序对目标程序进行 链接 生成机器语言的可执行程序 扩展名为 EXE 或 COM 运行 执行 可执行程序 得到结果 注 机器语言和汇编语言都是面向机器的语言统称为低级语言 注 机器语言和汇编语言都是面向机器的语言统称为低级语言 3 过程化语言 算法语言 高级语言 3GL C PASCAL ALGOL FORTRAN BASIC COBOL ADA PL 1 JAVA 等 利用过程化语 言必须告诉计算机 做什么 同时还得告诉计算机 怎么做 4 非过程化语言 4GL SQL DELPHI PB VB 等 仅需要告诉计算机 做什么 5 智能化语言 5GL PROLOG 等 二 计算机语言程序的翻译过程 编译 解释 1 解释执行 边翻译 成机器语言 边执行 其翻译程序一般称为解释程序 如 BASIC 语言 易学 易调试 但执行慢 2 编译执行 一次性进行翻译和链接 然后执行 其翻译程序一般称为编译程序 如 C 语言 PASCAL 语言等 三 C 语言简介 产生 特点 基本符号 保留字 标准标识符 标识符 程序结构 语言是在 70 年代初问世的 一九七八年由美国电话电报公司 AT 输出信息 注 教案中的所有程序均在注 教案中的所有程序均在 VisualVisual C C 6 06 0 下调试通过 下调试通过 main 是主函数的函数名 表示这是一个主函数 每一个 C 源程序都必须有 且只能有 一个主函数 void 表示 main 函数没有返回值 所有函数必须以 开始 以 结束 include 文件包含命令 函数调用语句 printf 函数的功能是把要输出的内容送到显示器去显示 printf 函数 是一个由系统定义的标准函数 可在程序中直接调用 使用该函数必须包含 stdio h 头文 件 实际上几乎所有 C 程序均必须包含该头文件 C 语言的注释符是以 开头并以 结尾的串 在 和 之间的内容 即为注释 可以跨越多行 新的 C 语言标准还允许用 对不超过 1 行的信息进行注解 程 序编译时 不对注释作任何处理 注释可出现在程序中的任何位置 注释用来向用户提示 或解释程序的意义 在调试程序中对暂不使用的语句也可用注释符括起来 使翻译跳过不 作处理 待调试结束后再去掉注释符 标准函数 注解 为增加人的可读性 字符串 用双引号括住的任意一串字符 高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 8 页 另一个 C 程序实例 include scanf printf 等输入输出函数需要的头文件 include sin abs sqrt 等数学函数需要的头文件 include 称为文件包含命令 扩展名为 h 的文件也称为头文件或首部文件 void main 计算正弦值 double x s 定义两个实数变量 以被后面程序使用 printf input number n 显示提示信息 scanf lf 从键盘获得一个实数 x s sin x 3 1415927 180 求 x 的正弦 并把它赋给变量 s printf sin of lf is lf n x s 显示程序运算结果 在编写程序时必须时刻注意语句的顺序 在编写程序时必须时刻注意语句的顺序 1 保留字 关键字 关键字是由 语言规定的具有特定意义的字符串 通常也称为 保留字 用户定义的标识符不应与关键字相同 auto break case char cinst continue default do double else enum extern float for if int long register return short signed sizeof static sturct switch typedef union unsigned void volatile while 共 32 个 必须是小写字母 2 标识符 在程序中使用的变量名 函数名 标号等统称为标识符 除库函数的函数 名由系统定义外 其余都由用户自定义 C 规定 标识符只能是字母 A Z a z 数字 0 9 下划线 组成的字符串 并且其第一个字符必须是字母或下划线 前 8 个有效 标准 C 前 32 个字符有效 TURBO C Visual C 等 标识符不能包含非法字符 如 不能是保留字 以下标识符是合法的 a x 3x BOOK1 sum5 以下标识符是非法的 说明部分 执行部分 高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 9 页 3s 以数字开头 s T 出现非法字符 3x 以减号开头 bowy 1 出现非法字符 减号 在使用标识符时还必须注意以下几点 1 在标识符中 大小写是有区别的 例如 BOOK 和 book 是两个不同的标识符 2 标识符虽然可由程序员随意定义 但标识符是用于标识某个量的符号 因此 命名 应尽量有相应的意义 以便阅读理解 作到 顾名思义 3 运算符 语言中含有相当丰富的运算符 如 等 运算符与变量 函数一起 组成表达式 表示各种运算功能 运算符由一个或多个字符组成 4 分隔符 在 语言中采用的分隔符有逗号和空格两种 逗号主要用在类型说明和函数参数表中 分隔各个变量 空格多用于语句各单词之间 作间隔符 在关键字 标识符之间必须要有 一个以上的空格符作间隔 否则将会出现语法错误 例如把 int a 写成 inta C 编译器会 把 inta 当成一个标识符处理 其结果必然出错 5 常量 C 语言中使用的常量可分为数字常量 字符常量 字符串常量 符号常量 转义字符 等多种 6 程序实例 include void main const float PI 3 1415927f 常量定义 使得常量的意义明确 易维护 程序中不能改变常量的值常量定义 使得常量的意义明确 易维护 程序中不能改变常量的值 float r s 变量定义 程序中用到的每个变量都必须先定义才能使用变量定义 程序中用到的每个变量都必须先定义才能使用 r 2 0 赋值语句 每个语句均用赋值语句 每个语句均用 结束结束 s PI r r 赋值语句 有计算功能 每个语句均用赋值语句 有计算功能 每个语句均用 结束结束 高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 10 页 printf area is f n s 输出圆的面积输出圆的面积 include define PI 3 1415927 常量定义 使得常量的意义明确 易维护 程序中不能改变常量的值 不能用 结束常量定义 使得常量的意义明确 易维护 程序中不能改变常量的值 不能用 结束 void main float r s 变量定义 程序中用到的每个变量都必须先定义才能使用变量定义 程序中用到的每个变量都必须先定义才能使用 r 2 0 赋值语句 每个语句均用赋值语句 每个语句均用 结束结束 s PI r r 赋值语句 有计算功能 每个语句均用赋值语句 有计算功能 每个语句均用 结束结束 printf area is f n s 输出圆的面积输出圆的面积 本程序和上一程序的运行结果相同 四 源程序的结构特点 1 一个 语言源程序可以由一个或多个源文件组成 2 每个源文件可由一个或多个函数组成 3 一个源程序不论由多少个文件组成 都有一个且只能有一个 main 函数 即主函数 4 源程序中可以有预处理命令 include 命令仅为其中的一种 预处理命令通常应 放在源文件或源程序的最前面 5 每一个说明 每一个语句都必须以分号结尾 但预处理命令 函数头和花括号 之后不能加分号 6 标识符 关键字之间必须至少加一个空格以示间隔 若已有明显的间隔符 也可 不再加空格来间隔 7 注意养成良好的编程风格 使用有意义的标识符 一个说明或一个语句占一行 缩进排列 合适和正确的注解等 8 C 采用 强制性定义 即所有标识符必须先定义后使用 主要优点有 利于发现 错误 利于分配存储 利于类型检查 高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 11 页 五 编写 调试程序的基本步骤 编程 编辑 编译 链接 运行 1 编写程序 一般简称编程或编码 Coding 利用 C 语言提供的编程机制在纸上编 写好程序 以下各章的内容就是教如何编程的 学语法 语义和语用学语法 语义和语用 2 编辑 编辑 输入 修改 用 C 语言编写的源程序 常常简称为 C 语言源程序 C 源程序 C 程序 源程序 甚至直接简称为程序 其扩展名为 C 3 编译 用系统软件 C 编译程序对 C 源 程序进行翻译 即 编译 生成目标程 序 二进制程序其扩展名为 OBJ 如果出现错误 一般为语法错误 转第 2 步 否则继续 4 链接 用链接程序对目标程序进行链接 生成机器语言的可执行程序 其扩展名为 EXE 如果出现错误转第 2 步 否则继续 5 运行 执行 运行 执行可执行程序 得到结果 如果出现错误 一般为语义错误 转第 2 步 否则将源程序保存后结束保存后结束 一般将第 2 至第 5 步合称为程序调试过程 或简称调程序 六 Visual C 上机步骤介绍 Visual C 提供一个集编辑 编译 链接 调试 运行为一体的集成开发环境 IDE 1 进入 Visual C 集成开发环境 IDE 2 文件 新建 文件 标签 C Source File 输入 文件名 和指定文件 存放的文件夹 确定 3 输入 编辑 保存程序 4 编译 链接 5 执行程序 6 选择 开始调试 可以执行常规调试 7 本程序调试结束后 选择 文件 关闭工作区 然后重复上述过程调试下一个程序 七 Visual C 调试步骤介绍 调试 纠错 的过程可以定义为 从发现错误存在的迹象 所以要求测试用例必须有预期 结果 开始 确定程序中可疑错误的确切性质和位置 从而进行修改错误的过程 测试与纠 错是相互联系的 纠错过程也需要花费很大的代价 改错是个大悲大喜的过程 一天之内可让人在悲伤的低谷和喜悦的颠峰之间跌荡起伏 高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 12 页 关于改错的几点建议 要有勇气 不可蛮干 找出错误的根源 在改错之后一定要马 上进行回归测试 在调试程序时 时常碰到只有十几行的程序竟会产生上百个编译错误 最后发现这么 多的错误其实是由某一行程序错误引发的 当我们在工作中碰到挫折时 先要冷静地分析 问题 找出问题的内因与外因 语法错 点击 输出 窗口 注意报告的错误不一定是当前行 一个错可能导致一系 列错误的报告 调试方法 先分析判断 再采取行动 1 单步执行 2 设置断点 3 插入输出语句 输出中间结果 4 下载内存映象 习题 习题 1 复习计算机语言的产生和发展 含翻译过程等 C 语言简介 保留字 会背 标识符 程序结构 重点掌握 2 复习编程 调试步骤和掌握上机步骤 第二章第二章 顺序结构程序设计顺序结构程序设计 一 程序实例 include include include include void main main 求一元二次方程求一元二次方程 ax2 bx c 0ax2 bx c 0 a0a0 的根 不考虑错误处理及非实数根 的根 不考虑错误处理及非实数根 floatfloat a b c a b c 要求用户输入的值要求用户输入的值 floatfloat d sd x1 x2 d sd x1 x2 中间变量和最后结果中间变量和最后结果 printf Pleaseprintf Please InputInput A A B B C C 输出提示信息输出提示信息 scanf f f f scanf f f f 要求用户输入一元二次方程的三个系数要求用户输入一元二次方程的三个系数 高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 13 页 d b b 4 a c d b b 4 a c 计算判别式的值计算判别式的值 sd sqrt d sd sqrt d 计算判别式的平方根 假定判别式计算判别式的平方根 假定判别式 0 0 x1 b sd 2 a x1 b sd 2 a 分别求一元二次方程的两个根分别求一元二次方程的两个根 x2 b sd 2 a x2 b sd 2 a printf root1 lfprintf root1 lf root2 lf n x1 x2 root2 lf n x1 x2 输出结果输出结果 二 编程步骤 编程思想的变化 从效率第一到可维护性第一 可读性 可改性等 编程思想的变化 从效率第一到可维护性第一 可读性 可改性等 从注重编程技巧 从注重编程技巧 到强调软件开发的工程化方法 到强调软件开发的工程化方法 程序 算法 Algorithm 数据结构 结构化程序设计方法 SP 1 了解 分析问题 确定要做什么 2 确定算法 计算方法 有穷性 确定性 有效性 有 0 个到多个输入 有 1 个到 多个输出 确定怎么做 3 选择合适的数据结构 输入数据 中间结果 输出数据的类型和 或结构 4 选择适当的设计工具 自然语言 流程图 N S 图或称结构化流程图 PAD 图 类 计算机语言或称结构化自然语言或称伪码等 描述算法 5 进一步求精算法 自顶向下 逐步求精 正是 SP 法的主要原则 6 编写程序 7 上机调试程序 分析结果与总结 求解一元二次方程求解一元二次方程 axax2 bx c 0 bx c 0 的根的的根的 N SN S 图图 输出提示信息 输入 a b c a 0 b 0 c 0 0 b2 4ac 0 T T TF FT F F T F 有无 穷多 个解 无解 唯一解 x c b 重根 x1 2 b 2a 二个根 x1 2 b sqrt 2a 二个复根 x1 2 b 2a sqrt 2a i 高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 14 页 三 标准数据类型 1 实型 Real 常量 1 234 123 1 23e5 1 23f 定点表示与科学记数法 小 数点前后必须有数 E e 前后也必须有数 变量定义 float double long double 运算 有效数字和表示范围 由于实数运算的误差及误差累积所以一般实数不能 进行相等比较 代之于用形如 abs 实数 1 实数 2 1E 7 的式子进行相等比较 避免特别 大的实数和特别小的实数进行运算 可利用结合律等进行调整 实数存在问题 运算误差 处理较慢 占用较多空间 实数存在问题 运算误差 处理较慢 占用较多空间 2 整型 Integer 常量 十进制 73 八进制 0111 十六进制 0 x49 123U 123L 变量定义 signed int unsigned int signed short int unsigned short int long int unsigned long int 表示范围 运算 整型数据的溢出 include void main int i i 0111 或 i 0 x49 或 i 73 printf o x d n i i i 输出 111 49 73 3 字符型 Char 常量 用单引号括住的单个字符 用单引号括住的单个字符 注意和字符串 用双引号括住 的一串字符一串字符 的区别 转义字符 n 007 等 变量定义 char 可以进行 运算和比较 按 ASCII 码进行 include void main char a b a a b b printf c c t d d n a b a b 输出 a b 97 98 高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 15 页 a a 32 b b 32 printf c c t d d n a b a b 输出 A B 65 66 4 字符串常量 字符串常量是由一对双引号括起的字符序列 例如 CHINA C program 12 5 等都是合法的字符串常量 字符串常量和字符常量是不同的量 它们之间主要有 以下区别 1 字符常量由单引号括起来 字符串常量由双引号括起来 2 字符常量只能是单个字符 字符串常量则可以含 0 个或多个字符 3 可以把一个字符常量赋予一个字符变量 但不能把一个字符串常量赋予一个字符变量 在 语言中没有相应的字符串变量 但是可以用一个字符数组来存放一个字符串常量 在数组一章内予以介绍 4 字符常量占一个字节的内存空间 字符串常量占的内存字节数等于字符串中字节数加 1 增加的一个字节中存放字符 0 ASCII 码为 0 这是字符串结束的标志 例如 字符串 C program 在内存中所占的字节为 C program 0 字符常量 a 和字符串常 量 a 虽然都只有一个字符 但在内存中的情况是不同的 a 在内存中占一个字节 可表示为 a a 在内存中占二个字节 可表示为 a 0 符号常量 5 符号常量 在 语言中 可以用一个标识符来表示一个常量 称之为符号常量 符号常量在使用 之前必须先定义 其一般形式为 define 标识符 常量 其中 define 也是一条预处理命令 预处理命令都以 开头 称为宏定义命令 在后面将 进一步介绍 其功能是把该标识符定义为其后的常量值 一经定义 以后在程序中所有出 现该标识符的地方均代之以该常量值 习惯上符号常量的标识符用大写字母 变量标识符 用小写字母 以示区别 define PI 3 14159 由宏定义命令定义 PI 为 3 14159 应该注意的是 符号常量不是变量 它所代表的值 在整个作用域内不能再改变 也就是说 在程序中 不能再用赋值语句对它重新赋值 高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 16 页 6 变量赋初值 在程序中常常需要对变量赋初值 以便使用变量 C 语言程序中可有多种方法 在定 义时赋以初值的方法 这种方法称为初始化 在变量说明中赋初值的一般形式为 类型说明符 变量 1 值 1 变量 2 值 2 例如 int a 5 b 5 c 5 float x 3 2 y 3f z char ch1 ch2 P 应注意 在说明中不允许连续赋值 如 a b c 5 是不合法的 7 变量类型的转换 变量的数据类型是可以转换的 转换的方法有两种 一种是自动转换 一种是强制转 换 自动转换发生在不同数据类型的量混合运算时 由编译系统自动完成 自动转换遵循 以下规则 若参与运算量的类型不同 则先转换成同一类型 然后进行运算 转换按数据长度增加的方向进行 以保证精度不降低 如 int 型和 long 型运算时 先把 int 量转成 long 型后再进行运算 所有的浮点运算都是以双精度进行的 即使仅含 float 单精度量运算的表达式 也要先转换成 double 型 再作运算 char 型和 short 型参与运算时 必须先转换成 int 型 在赋值运算中 赋值号两边量的数据类型不同时 赋值号右边量的类型将转换为 左边量的类型 如果右边量的数据类型长度左边长时 将丢失一部分数据 这样 会降低精度 丢失的部分按四舍五入向前舍入 强制类型转换是通过类型转换运算来实现的 其一般形式为 类型说明符 表达式 其功能是把表达式的运算结果强制转换成类型说明符所表示的类型 例如 float a 或 float a 把 a 转换为实型 int x y 或 int x y 把 x y 的结果转换为整型 在使用 强制转换时应注意以下问题 类型说明符和表达式都必须加括号 单个变量可以不加括号 如把 int x y 写 成 int x y 则成了把 x 转换成 int 型之后再与 y 相加了 高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 17 页 无论是强制转换或是自动转换 都只是为了本次运算的需要而对变量的数据长度 进行的临时性转换 而不改变数据说明时对该变量定义的类型 8 基本运算符和表达式 语言中运算符和表达式数量之多 在高级语言中是少见的 正是丰富的运算符和表 达式使 语言功能十分完善 这也是 语言的主要特点之一 语言的运算符不仅具有不同的优先级 而且还有一个特点 就是它的结合性 在表 达式中 各运算量参与运算的先后顺序不仅要遵守运算符优先级别的规定 还要受运算符 结合性的制约 以便确定是自左向右进行运算还是自右向左进行运算 这种结合性是其 它高级语言的运算符所没有的 因此也增加了 语言的复杂性 语言的运算符可分为以下几类 1 算术运算符 用于各类数值运算 包括加 减 乘 除 求余 或称模 运算 自增 自减 共七种 2 关系运算符 用于比较运算 包括大于 小于 小于等于 和不等于 六种 3 逻辑运算符 用于逻辑运算 包括与 赋值语句 y z 加法运算语句 但 计算结果不能保留 无实际意义 i 自增 1 语句 i 值增 1 2 函数调用语句 由函数名 实际参数加上分号 组成 其一般形式为 函数 名 实际参数表 执行函数语句就是调用函数体并把实际参数赋予函数定义中的形式参数 然后执行被调函数体中的语句 求取函数值 例如 printf C Program 调用库函数 输 出字符串 3 控制语句 控制语句用于控制程序的流程 以实现程序的各种结构方式 它们由特 定的语句定义符组成 语言有九种控制语句 可分成以下三类 1 条件判断语句 if 语句 switch 语句 2 循环执行语句 do while 语句 while 语句 for 语句 3 转向语句 break 语句 goto 语句 continue 语句 return 语句 4 复合语句 把多个语句用括号 括起来组成的一个语句称复合语句 在程序中应 把复合语句看成是单条语句 而不是多条语句 例如 temp x x y y temp 高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 21 页 是一条复合语句 复合语句内的各条语句都必须以分号 结尾 在括号 外不能加 分号 5 空语句 只有分号 组成的语句称为空语句 空语句是什么也不执行的语句 在程序中空语句可用来作空循环体 例如 while getchar n 本语句的功能是 只 要从键盘输入的字符不是回车则重新输入 这里的循环体为空语句 五 顺序结构语句 一 赋值语句 赋值语句是由赋值表达式再加上分号构成的表达式语句 其一般形式为 变量 表达 式 赋值语句的功能和特点都与赋值表达式相同 它是程序中使用最多的语句之一 在赋 值语句的使用中需要注意以下几点 1 由于在赋值符 右边的表达式也可以又是一个赋值表达式 因此 下述形式 变 量 变量 表达式 是成立的 从而形成嵌套的情形 其展开之后的一般形式为 变量 变量 表达式 例如 a b c d e 5 按照赋值运算符的右接合性 因此实际上等效于 e 5 d e c d b c a b 2 注意在变量说明中给变量赋初值和赋值语句的区别 给变量赋初值是变量说明的一 部分 赋初值后的变量与其后的其它同类变量之间仍必须用逗号间隔 而赋值语句则必须 用分号结尾 3 在变量说明中 不允许连续给多个变量赋初值 如下述说明是错误的 int a b c 5 必须写为 int a 5 b 5 c 5 而赋值语句允许连续赋值 4 注意赋值表达式和赋值语句的区别 赋值表达式是一种表达式 它可以出现在任何 允许表达式出现的地方 而赋值语句则不能 下述语句是合法的 if x y 5 0 z x 语句的功能是 若表达式 x y 5 大于 0 高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 22 页 则 z x 下述语句是非法的 if x y 5 0 z x 因为 x y 5 是语句 不能出现在表达 式中 二 数据输出语句 在 语言中 所有的数据输入 输出都是由库函数完成的 因此都是函数语句 数据 输出语句包括 printf 函数和 putchar 函数 它们都是向标准输出设备显示器输出数据的语 句 printf 函数称为格式输出函数 其关键字最末一个字母 f 即为 格式 format 之意 其功能是按用户指定的格式 把指定的数据显示到显示器屏幕上 在前面的例题中我们已 多次使用过这个函数 1 printf 函数调用的一般形式 printf 函数是一个标准库函数 它的函数原型在头文件 stdio h 中 但作为一个 特例 不要求在使用 printf 函数之前必须包含 stdio h 文件 printf 函数调用的一般形 式为 printf 格式控制字符串 输出表列 其中格式控制字符串用于指定输出格式 格式控制串可由格式字符串和非格式字符串两种组成 格式字符串是以 开头的字符串 在 后 面跟有各种格式字符 以说明输出数据的类型 形式 长度 小数位数等 如 d 表示 按十进制整型输出 ld 表示按十进制长整型输出 c 表示按字符型输出等 后面将 专门给予讨论 非格式字符串在输出时原样照印 在显示中起提示作用 输出表列中给出了各个输出 项 要求格式字符串和各输出项在数量和类型上应该一一对应 2 格式字符串 在 Turbo C VC 中格式字符串的一般形式为 标志 输出最小宽度 精度 长度 类 型 其中方括号 中的项为可选项 各项的意义介绍如下 1 类型类型字符用以表示输出数据的类型 其格式符和意义下表所示 表示输出类型的格式字符表示输出类型的格式字符格式字符意义格式字符意义 d 以十进制形式输出带符号整数 正数不输出符号 o 以八进制形式输出无符号整数 不输出前缀 O x 以十六进制形式输出无符号整数 不输出前缀 OX u 以十进制形式输出无符号整数 f 以小数形式输出单 双精度实数 e 以指数形式输出单 双精度实数 g 以 f e 中较短的输出宽度输出单 双精度实数 高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 23 页 c 输出单个字符 s 输出字符串 2 标志 标志字符为 空格四种 其意义下表所示 标志格式字符标 志 意 义 结果左对齐 右边填空格 输出符号 正号或负号 空格输出值为正时冠以空格 为负时冠以负号 对 c s d u 类无影响 对 o 类 在输出时加前 缀 o 对 x 类 在输出时加前缀 0 x 对 e g f 类 当结果有小数时才给出小数点 3 输出最小宽度 用十进制整数来表示输出的最少位数 若实际位数多于定义的宽度 则按实际位数输 出 若实际位数少于定义的宽度则补以空格或 0 4 精度 精度格式符以 开头 后跟十进制整数 本项的意义是 如果输出数字 则表示小 数的位数 如果输出的是字符 则表示输出字符的个数 若实际位数大于所定义的精度数 则截去超过的部分 5 长度 长度格式符为 h l 两种 h 表示按短整型量输出 l 表示按长整型量输出 使用 printf 函数时还要注意一个问题 那就是输出表列中的求值顺序 不同的编译 系统不一定相同 可以从左到右 也可从右到左 Turbo C VC 是按从右到左进行的 字符输出函数 3 putchar 函数 putchar 函数是字符输出函数 其功能是在显示器上输出单个字符 其一般形式为 putchar 字符变量 例如 putchar A 输出大写字母 A putchar x 输出字符变量 x 的值 putchar n 换行 对控制字符则执行控制功能 不在屏幕上显示 使用本函数前必须 要用文件包含命令 include 高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 24 页 三 数据输入语句 语言的数据输入也是由函数语句完成的 scanf 函数称为格式输入函数 即按用户 指定的格式从键盘上把数据输入到指定的变量之中 1 scanf 函数的一般形式 scanf 函数是一个标准库函数 它的函数原型在头文件 stdio h 中 与 printf 函 数相同 语言也允许在使用 scanf 函数之前不必包含 stdio h 文件 scanf 函数的一般 形式为 scanf 格式控制字符串 地址表列 其中 格式控制字符串的作用与 printf 函数相同 但不能显示非格式字符串 也就是不能显示提示字符串 地址表列中给 出各变量的地址 地址是由地址运算符 printf input a b c n scanf d d d printf a d b d c d a b c 在本例中 由于 scanf 函数本身不能显示提示串 故先用 printf 语句在屏幕上输出提 示 请用户输入 a b c 的值 执行 scanf 语句 则进入用户屏幕等待用户输入 在 scanf 语句的格式串中由于没有非格式字符在 d d d 之间作输入时的间隔 因此在输 入时要用一个以上的空格或回车键作为每两个输入数之间的间隔 2 格式字符串 格式字符串的一般形式为 输入数据宽度 长度 类型 其中有方括号 的项为 任选项 各项的意义如下 1 类型 表示输入数据的类型 其格式符和意义下表所示 高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 25 页 格式字符意义 d 输入十进制整数 o 输入八进制整数 x输入十六进制整数 u 输入无符号十进制整数 f 或 e输入实型数 用小数形式或指数形式 c 输入单个字符 s 输入字符串 2 符 用以表示该输入项读入后不赋予相应的变量 即跳过该输入值 如 scanf d d d 当输入为 1 2 3 时 把 1 赋予 a 2 被跳过 3 赋予 b 3 宽度 用十进制整数指定输入的宽度 即字符数 例如 scanf 5d 输入 12345678 只把 12345 赋予变量 a 其余部分被截去 又如 scanf 4d 4d 输入 12345678 将把 1234 赋予 a 而把 5678 赋予 b 4 长度 长度格式符为 l 和 h l 表示输入长整型数据 如 ld 和双精度浮点数 如 lf h 表 示输入短整型数据 使用 scanf 函数还必须注意以下几点 scanf 函数中没有精度控制 如 scanf 5 2f 是非法的 不能企图用此 语句输入小数为 2 位的实数 scanf 中要求给出变量地址 如给出变量名则会出错 如 scanf d a 是非法 的 应改为 scnaf d 才是合法的 在输入多个数值数据时 若格式控制串中没有非格式字符作输入数据之间的间隔 则可用空格 TAB 或回车作间隔 C 编译在碰到空格 TAB 回车或非法数据 如对 d 输入 12A 时 A 即为非法数据 时即认为该数据结束 在输入字符数据时 若格式控制串中无非格式字符 则认为所有输入的字符均为 有效字符 例如 scanf c c c 输入为 d e f 则把 d 赋予 a f 赋予 b e 赋予 c 只有当输入为 def 时 才能把 d 赋于 a e 赋予 b f 赋予 c 如果在格式控制中加入空格作为间隔 如 scanf c c 高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 26 页 c 则输入时各数据之间可加空格 3 键盘输入函数 getchar 函数的功能是从键盘上输入一个字符 其一般形式为 getchar 通常把输 入的字符赋予一个字符变量 构成赋值语句 如 include void main char c printf input a character n c getchar putchar c 使用 getchar 函数还应注意几个问题 getchar 函数只能接受单个字符 输入数字也按字符处理 输入多于一个字符时 只接收第一个字符 使用本函数前必须包含文件 stdio h 运行含本函数程序时 将进入用户屏幕等待用户输入 输入完毕再返回 六 实例 已知三角形三边的边长 求其面积 算法 自然语言 伪码 1 读入三角形三边的边长 2 计算其面积 3 输出三角形的面积 求精算法 1 读入三角形三边的边长 a b c a b c 实型 2 1 计算 s a b c 2 s 实型 2 2 三角形的面积 area s s a s b s c 的平方根 area 实型 3 输出三角形的面积 area 程序 注意程序的缩进排列 高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 27 页 include include include include voidvoid main main floatfloat a b c s area a b c s area printf Inputprintf Input threethree sidessides lengthlength ofof triangletriangle scanf f f f scanf f f f 可能为非法数值可能为非法数值 s a b c 2 s a b c 2 area sqrt s s a s b s c area sqrt s s a s b s c 可能出现负数可能出现负数 printf Areaprintf Area isis f n area f n area 七 常见错误 程序结构错误 main 函数 语句结束的分号缺少等 标识符错误 和保留字同名等 变量没有说明或类型说明错误 变量两次或多次定义 表达式错误 缺少括号 括号不配 对 缺少乘号 等 算法错误 数据溢出 太大或太小 等 八 程序改进 已知三角形三边的边长 求其面积 的上述程序存在健壮性问题 即 未判断输入 数据的合法性 下面给出其改进后的程序 include include include include voidvoid main main floatfloat a b c s area a b c s area printf Inputprintf Input threethree sidessides lengthlength ofof triangletriangle scanf f f f scanf f f f ifif a 0 a 0 s a b c 2 area sqrt s s a s b s c area sqrt s s a s b s c 高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 28 页 printf Areaprintf Area isis f n area f n area elseelse printf Dataprintf Data inputinput errorerror n n 求一元二次方程 ax2 bx c 0 a0 的根 同样存在健壮性问题 下面给出其改进 后的程序 下述程序仍然是不完善的 为什么 include include include include voidvoid main main 求一元二次方程求一元二次方程 ax2 bx c 0ax2 bx c 0 a0a0 的根 不考虑非实数根 的根 不考虑非实数根 floatfloat a b c a b c 要求用户输入的值要求用户输入的值 floatfloat d sd x1 x2 d sd x1 x2 中间变量和最后结果中间变量和最后结果 printf Pleaseprintf Please InputInput A A B B C C 输出提示信息输出提示信息 scanf f f f scanf f f f 要求用户输入一元二次方程的三个系数要求用户输入一元二次方程的三个系数 d b b 4 a c d b b 4 a c 计算判别式的值计算判别式的值 ifif d 0 d 0 判断判别式的值大于零 判断判别式的值大于零 sd sqrt d sd sqrt d 计算判别式的平方根 假定判别式计算判别式的平方根 假定判别式 0 0 x1 b sd 2 a x1 b sd 2 a 分别求一元二次方程分别求一元二次方程 ax2 bx c 0ax2 bx c 0 a0a0 的两个根 的两个根 x2 b sd 2 a x2 b sd 2 a printf root1 lfprintf root1 lf root2 lf n x1 x2 root2 lf n x1 x2 输出结果输出结果 elseelse d b b 4 a c 0 d b b 4 a c 0 printf b b 4ac 0printf b b 4ac 0 NoNo realreal root n root n 字符串中允许用字符串中允许用 4ac4ac 实际上可出现任何字符及其组合 实际上可出现任何字符及其组合 没有考虑没有考虑 A 0 的情况的情况 习题 习题 1 掌握标准数据类型 高级语言程序设计 C 教案 2004 年 1 月编写 2006 年 8 月最后一次修改 福州大学 软件学院 王灿辉 第 29 页 2 复习顺序语句 赋值 输入 输出 的语法 语义和语用 表达式及赋值语句是本章的 难点 3 会编写简单程序并上机调试通过 思考题 反序输出正整数 如 输入 12345 输出 54321 include include void main long int n s m printf input integer value scanf ld 不考虑输入负数的情况不考虑输入负数的情况 cont s n 10 m n 10 printf d m n s if s 0 goto cont printf n 第三章第三章 选择结构程序设计选择结构程序设计 一 if 语句 注意缩进排列的写法 if 条件 或 if 条件 语句 语句 其语义是 如果表达

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论