已阅读5页,还剩496页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 高级程序语言设计 I 2 大学学习建议 1 认清自己 并努力找到自己的兴趣和天赋 2 多尝试 多坚持 少浮躁 少依赖 3 培养自学 动手实践 思考的能力 4 从小做起 团队合作 日积月累 3 教材 参考书与课时安排 教材C程序设计 第3版 谭浩强编著清华大学出版社高级程序语言设计I课时安排 12周 授课 48学时编程实验 24学时高级程序语言设计I 下学期 周 课程安排高级程序语言设计I 程序设计 章 高级程序语言设计I 程序设计 章 程序设计 4 第一章C语言概述 5 第一章C语言概述 1 1为什么要学习C语言 1 3C程序上机步骤 1 4C语言程序介绍及其结构特点 1 2怎样学好C语言 6 1 1为什么要学习C语言 1 1 1C语言的应用领域 1 1 4C语言的特点 1 1 3C语言出现的历史背景 1 1 2C语言的重要性 7 1 1 1C语言的应用领域 8 1 1 2C语言的重要性 所有大学信息类专业学生必修的基础课程 最重要的系统软件 Windows Linux Unix均是由C语言编写的 它能够实现硬件编程 能编写驱动程序 是黑客必须掌握的一门语言 一名从事程序设计和软件开发人员必须熟练掌握的语言 大企业招聘软件开发人员必考的语言 为后续课程C 数据结构 Java 嵌入式开发奠定基础 9 1 1 3C语言出现的历史背景程序设计语言的发展 CPU指令系统 由0 1序列构成的指令码组成如 10000000加10010000减 用助记符号描述的指令系统如ADDA B 面向机器的语言 程序设计是数据被加工的过程 客观世界可以分类 类中封装了数据和方法 对象是类的具体实例 程序设计关键是定义类 并由类派生对象 主机构造图 10 一个形象的例子解释面向过程和面向对象 人类走一步的动作 抬前脚 迈出前脚 前脚落地 抬后脚 后脚落地 面向过程的编程 一条条语句逐步实现 抬前脚 迈出前脚 前脚落地 抬后脚 后脚落地 面向对象的编程 先定义人这个类 它封装了数据和方法 对象是类的实例 classPeople 头 手 脚 walk 方法 抬前脚 迈出前脚 前脚落地 抬后脚 后脚落地 PeopleA 实例化一个人对象AA walk A走一部 11 一个人走100步 有两个不同的人 面向对象的编程 classPeople 头 手 脚 walk 方法 抬前脚 迈出前脚 前脚落地 抬后脚 后脚落地 PeopleA 实例化一个人对象AA walk A走一步 不考虑循环写100次 不考虑循环写100次 A walk PepleB 实例化另外一个人对象BB walk 12 1 C 是由于开发大型应用软件的需要而产生的 并不是所有的人都要去编写大型软件 2 面向对象的基础是面向过程 C 是面向对象的语言 C是面向过程的 学起来比C语言困难得多 所以不适合程序设计的初学者 3 学习编程不可能一蹴而就 需要积累 需要打好基本功 问题 既然面向对象的C 语言有这门大的优势 为什么还要学习C语言 13 C语言发展过程产生背景 14 各种编程语言排行版 15 C语言发展过程产生过程时间 1972 1973地点 美国贝尔实验室目的 改写UNIX操作系统设计人 Ken Thompson和Dennis M RitchieC标准标准C K R合著 TheCProgrammingLanguage ANSIC 1983年89ANSIC 1989年C89C89基础上 1990年国际标准ISOC C901999年在C90的标准上修订 C99这些标准制定已经近20年 语法规则和思想已经非常稳定 16 1 1 4C语言特点 1 语言简洁 紧凑 使用方便 灵活 共有32个关键字 9种控制语句 程序形式自由 2 运算符丰富 34种运算符 3 数据类型丰富 具有现代语言的各种数据结构 4 具有结构化的控制语句 是完全模块化和结构化的语言 17 高级程序语言 语法丰富 利用人们易于记忆的英文单词和表达方法来表示计算机的指令编写的计算机指令 程序 需要通过编译 TC2 0 翻译为0101二进制文件后才能在计算机上执行 18 32个关键字 由系统定义 不能重作其它定义 autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile 9种控制语句 if else for while do while continuebreakswitchgotoreturn 19 1 1 4C语言特点 5 语法限制不太严格 程序设计自由度大 6 允许直接访问物理地址 能进行位操作 能实现汇编语言的大部分功能 可直接对硬件进行操作 兼有高级和低级语言的特点 7 目标代码质量高 程序执行效率高 只比汇编程序生成的目标代码效率低10 20 20 1 2怎样学习C 课前请做好预习掌握理论知识 独立思考各种编程任务 认真 独立 按时完成并提交作业 重视实践环节 既要多动手编程 还要多上机调试运行 有效利用宝贵的上机时间 培养自己的编程能力和解决问题的能力A 21 C语言的编译器 可以使用多种C编译器cc或者gcc UNIX和Linux系统下的C编译器TurboC 由美国Borland公司开发MicrosoftC VisualC 6 0 微软公司的C编译器本课程使用TurboC2 0 是一种DOS操作系统下的集成编译环境 1 3C程序的上机步骤 22 TC2 0界面 23 file exe 程序代码的录入 生成源程序 c 语法分析查错 翻译生成目标程序 obj 与其它目标程序或库文件链接装配 生成可执行程序 exe 运行C程序的各个阶段 24 源文件 目标代码文件 可执行文件及库函数 源文件 c 利用高级语言编写的程序文本 编辑 目标文件 obj 经过编译程序 compiler 翻译之后得到的二进制代码文件 编译 库函数 h C语言提供的预先编译好可以被程序员直接利用的程序功能模块的集合 可执行文件 exe 经过连接器 linker 将启动代码和目标代码以及库函数进行整合之后形成的真正可以在计算机上运行的程序文件 链接后可运行 25 TurboC2 0集成开发环境配置要求UNIX PC DOS MS DOS UCDOS操作系统硬盘容量约2M 448KRAM运行空间安装TurboC若不是可安装盘 将文件拷贝到对应的目录下 26 进入TurboCD TurboC2 TC exe 主要使用的菜单 F10调用主菜单 文件操作FILE NewLoadSaveQuit编译链接COMPILELINKMAKE执行RUN退出TurboCAlt x帮助HelpF1 27 基本操作 F10 调用主菜单F2 存盘F3 打开Alt F9 Compile 编译 F9 编译 链接 Ctrl F9 Run 编译 链接 运行 Alt F5 UserScreen 查看运行结果 常用热键 文本编辑 移动光标 28 1 4C语言程序介绍及其结构特点 includevoidmain printf WelcomecometoCUC n 文件包含 主函数 函数体开始 输出语句 函数体结束 说明 main 主函数名 void 函数类型每个C程序必须有一个主函数main 是函数开始和结束的标志 不可省每个C语句以分号结束使用标准库函数时应在程序开头一行写 include 29 例1 2求两数之和 includevoidmain 求两数之和 inta b sum 声明 定义变量为整型 以下3行为C语句 a 123 b 456 sum a b printf 123 456 d n sum d是格式字符串 以十进制整数类型的形式输出sum 说明 1 表示注释 注释只是给人看的 对编译和运行不起作用 所以可以用汉字或英文字符表示 可以出现在一行中的最右侧 也可以单独成为一行 编译器不会编译注释语句 2 printf 为标准输出函数 括号内逗号内的最右侧sum的值输出到 d的位置上 30 扩展的例1 2 1 求输入的两数之和 求输入的两数之和 includevoidmain inta b sum 声明 定义变量为整型 printf pleaseinputtwonumbers n scanf d d 输出a和b两数之和 说明 scanf为标准输入函数 a b为取变量a和b在内存中的地址 它的作用是把输入的两个数输入到变量a和b的地址所标记的内存单元中 31 扩展的例1 2 2 求输入的两数之和 函数的方法 includevoidmain intAdd intx inty 对被调用函数Add的声明 inta b sum scanf d d 函数返回值 32 课后 1 了解TC2 0的软件的界面功能介绍 P8 12 准备周三的上机操作 2 理解例1 1 课堂上扩展的例1 2的内容 通过理解扩充的例1 2 1 扩充的例1 2 2 的内容阅读并理解例1 3的程序 33 第一章C语言概述 1 1为什么要学习C语言 1 3C程序上机步骤 1 4C语言程序介绍及其结构特点 1 2怎样学好C语言 1 5计算机预备知识介绍 34 例1 3求3个数中较大者 includevoidmain 主函数 intmax intx inty 对被调用函数max的声明 inta b c d e scanf d d d 输出e的值 intmax intx inty intz if x y z x elsez y return z 说明 本程序包括main和被调用函数max两个函数 max函数的作用是将x和y中较大者的值赋给变量z return语句将z的值返回给主函数main的调用max函数处 35 1 4C语言程序介绍及其结构特点 C程序 C程序是由若干函数构成的 函数可以是系统提供的库函数 如printf scanf 或则是自己定义的函数 如Add和max函数 但必须只能有一个main函数 编写C语言程序就是编写一个个的函数 这使得程序容易实现模块化 2 一个函数由两部分组成 函数的首部 例1 3中的max函数首部intmax intx inty 要有圆括号括起 函数体 大括号内的部分 若一个函数有多个大括号 则最外层的一对花括号为函数体的范围 函数体可以包括两部分 声明部分 inta b c 变量声明 intmax inta intb 函数声明 执行部分 由若干个语句组成 这两部分均可缺省 36 1 4C语言程序介绍及其结构特点 注意 函数的声明部分和执行部分都可缺省 例如 voiddump 这是一个空函数 什么也不做 但是合法的函数 3 C程序总是从main函数开始执行的 与main函数的位置无关 4 C程序书写格式自由 一行内可以写几个语句 一个语句可以分写在多行上 5 每个语句和数据声明的最后必须有一个分号 6 C语言本身没有输入输出语句 输入和输出的操作是由库函数scanf和printf等函数来完成的 C对输入输出实行 函数化 7 多行注释 37 C程序的结构特点函数与主函数程序由一个或多个函数组成必须有且只能有一个主函数main 程序执行从main开始 在main中结束 其它函数通过嵌套调用得以执行 程序语句C程序由语句组成用 作为语句终止符注释 多行注释 不产生编译代码 编译预处理命令如 include 38 1 5计算机中的预备知识计算机中整数的表示及进制转换数码 基与权数码 表示数的符号二进制 数码为0 1十进制 数码为0 910种符号八进制 数码为0 78种符号十六进制 数码为0 9 A B C D E F16种符号基数 数码的个数 十进制 10 权 每一位所具有的值 2011 10 2 103 0 102 1 101 1 100各进制下数值的书面表示方式 123 8 123 16 10110 2计算机中的任何数据都是以二进制编码的形式存在的如整数 22 10 00010110 2 39 各种进制之间的转换二进制 八进制 十六进制转换成十进制方法 将每一位的权相加 40 计算机编程中整型数据的三种表示方法 1 十进制整数 如 123 456 0 2 八进制整数 以0开头的数是八进制数 如0123表示八进制数123 即 123 8 其值为 1 82 2 81 3 80 83 3 十六进制整数 以0 x开头的数是十六进制数 如0 x123 代表十六进制数123 即 123 16 1 162 2 161 3 160 256 32 3 291 为什么有了十进制的表示还要有八进制或十六进制呢 inta 123 b 83 c 291 printf d a 以十进制的形式输出整数 printf o b 以八进制的形式输出整数 printf x c 以十六进制的形式输出整数 41 各种进制之间的转换 整数 十进制转换成二进制 八进制 十六进制 方法 连续除以基 从低到高记录余数 直至商为0 42 43 二进制与十六进制之间的转换二进制转换成十六进制 从右向左 每4位一组 不足4位左补0 转换成十六进制例 11010101111101 2 0011 0101 0111 1101 2 357D 16十六进制转换成二进制 用4位二进制数代替每一位十六进制数例 4B9E 16 0100 1011 1001 1110 2 100101110011110 2 0000 00001 10010 20011 30100 40101 50110 60111 71000 81001 91010 A1011 B1100 C1101 D1110 E1111 F 44 字节和位内存以字节为单元组成每个字节有一个地址一个字节一般由8个二进制位组成每个二进位的值是0或1 45 整数的表示方法 原码 反码和补码原码 最高位为符号位 正数为0 负数为1 其余各位为数值本身的绝对值反码 正数 反码与原码相同负数 符号位为1 其余位对原码取反补码 正数 原码 反码 补码相同负数 最高位为1 其余位为原码取反 再对整个数加1 46 整数的表示 整数在内存中采用补码的二进制形式来表示1 正数的补码和其原码的形式相同2 负数的补码 将该数的绝对值的二进制原码形式 按位取反再加1 例如求 10的补码 假设一个整数占2字节16位 取 10的绝对值10 10的绝对值的二进制形式为0000000000001010 对 取反得1111111111110101 再加1得1111111111110110 47 如何将补码的二进制形式转为十进制数 正数 按权展开 负数 符号位不变 对补码其余各位按位取反 按权展开得到一个十进制数的负数 再将得到的该十进制负数减去1 考虑 1000000000000000 1111111111111111表示何整数 48 Turboc2 0的设置问题 最后还应记得保存设置 49 第二章程序的灵魂 算法 50 第二章程序的灵魂 算法 2 1算法概述及其特点 2 3结构化程序设计方法 2 2算法的表示方法 重点 51 2 1算法概述及其特性 数据结构 算法 程序如 inta b sum 数据结构 scanf d d 对数据的描述 在程序中要指定数据的类型和数据的组织形式 如 数组 即数据结构 datastructure 对操作的描述 即操作步骤 也就是算法 algorithm 程序设计人员必须具备的知识 算法 灵魂 解决 做什么 怎么做 的问题数据结构 加工对象 数据类型 语言 编程工具 程序设计方法 编程所采用的合适的方法 结构化 52 算法的概念 广义地说 为解决一个问题而采取的方法和步骤 就称为 算法 计算机算法可分为两大类别 数值算法和非数值算法为了有效地进行解题 不仅需要保证算法正确 还要考虑算法的质量 选择合适的算法 53 算法的概念 例 求方法1 1 2 3 4 一直加到100加99次 一共做了99次四则运算方法2 100 1 99 2 98 49 51 50 100 49 100 50加2次 乘1次 一共只做了3次四则运算 54 自然语言传统流程图 掌握 结构化流程图 NS图 掌握 伪代码计算机语言 后续课程 2 2算法的表示方法 55 自然语言使用人们通俗易懂的文字逐步来表示出一个问题 2 1算法的表示方法 两个概念 1 循环 让计算机实现重复做相同的事情 方便程序员要有变量记录一次次的循环 开始时对这些变量进行初始化在每次循环执行的过程中让这种变量的值有所变化 2 循环的有穷性 重复做的事情并不会无穷进行下去 循环要有终止的条件 如 对变量设置一个终止循环的数据 56 例2 2有50个学生 要求将他们之中成绩在80分以上者打印出来 用n表示学生学号 n1代表第一个学生学号 ni代表第i个学生学号 用g代表学生成绩 gi代表第i个学生成绩 算法可表示如下 S1 1 iS2 如果gi 80 则打印ni和gi 否则不打印S3 i 1 iS4 如果i 50 返回S2 继续执行 否则 算法结束 如何求这50个学生的平均分 57 例2 3判定2000 2500年中的每一年是否闰年 将结果输出 能被4整除 但不能被100整除的年份都是闰年 如1996年 2004年是闰年 能被100整除 又能被400整除的年份是闰年 如1600年 2000年是闰年 2100不是 不符合这两个条件的年份不是闰年 58 设y为被检测的年份 可采取以下步骤 S1 2000 yS2 y不能被4整除 则输出y 不是闰年 然后转到S6S3 若y能被4整除 不能被100整除 则输出y 是闰年 然后转到S6S4 若y能被100整除 又能被400整除 输出y 是闰年 然后转到S6S5 输出y 不是闰年 y能被100整除但不能被400整除 S6 y 1 yS7 当y 2500时 返回S2继续执行 如y 2500 算法停止 59 例2 1求1 2 3 4 5 规律 上一次的乘积作为下一次运算的被乘数 上一次的乘数加上1作为下一次运算的乘数 通用方法 设两个变量 一个变量代表被乘数 一个变量代表乘数 不另设变量存放乘积结果 而直接将每一步骤的乘积放在被乘数变量中 今设p为被乘数 i为乘数 用循环算法来求结果 如下 S1 p 1S2 i 2S3 p i p 上一次的乘积作为下一次运算的被乘数 S4 i 1 i 上一次的乘数加上1作为下一次运算的乘数 注意与S3的顺序不能互换 S5 如果i 5 返回重新执行S3以及其后的步骤S4和S5否则 算法结束 最后得到p的值就是5 的值 60 例2 4求1 1 2 1 3 1 4 1 99 1 100 规律 奇数项为正 偶数项为负 且每项分母递增1算法可以表示如下 S1 1 signS2 1 sumS3 2 denoS4 1 sign signS5 sign 1 deno termS6 sum term sumS7 deno 1 denoS8 若deno 100返回S4 否则算法结束 61 算法的特性 有穷性 包含有限的步骤确定性 每一个步骤都是确定的 不是含糊的有零个或多个输入有一个或多个输出有效性 每个步骤都能够正常执行 intmax inta intb 62 2 传统流程图 起止框 输入输出框 判断框 处理框 流程线 连接点 注释框 63 连接点可将不同地方的连接线连接起来 64 65 66 例2 7有50个学生 要求将他们之中成绩在80分以上者打印出来 用n表示学生学号 n1代表第一个学生学号 ni代表第i个学生学号 用g代表学生成绩 gi代表第i个学生成绩 S1 1 iS2 如果gi 80 则打印ni和gi 否则不打印S3 i 1 iS4 如果i 50 返回S2 继续执行 否则 算法结束 67 例2 8判定2000 2500年中的每一年是否闰年 将结果输出 S1 2000 yS2 y不能被4整除 则输出y 不是闰年 然后转到S6S3 若y能被4整除 不能被100整除 则输出y 是闰年 然后转到S6S4 若y能被100整除 又能被400整除 输出y 是闰年 然后转到S6S5 输出y 不是闰年 S6 y 1 yS7 当y 2500时 转S2继续执行 如y 2500 算法停止 68 例2 4求1 1 2 1 3 1 4 1 99 1 100 S1 1 signS2 1 sumS3 2 denoS4 1 sign signS5 sign 1 deno termS6 sum term sumS7 deno 1 denoS8 若deno 100返回S4 否则算法结束 69 传统流程图的特点 流程图是表示算法的较好的工具 也能用于软件开发的各阶段的工作表示 一个流程图包括以下几部分 1 表示相应操作的框 2 带箭头的流程线 3 框内外必要的文字说明 70 传统流程图的弊端传统流程图用流程线指出各框的执行顺序 对流程线的使用没有严格限制 因此 使用者可以毫不受限制地使流程随意地转向 使流程图变得毫无规律 阅读者要花很大精力去追踪流程 使人难以理解算法的逻辑 缺点 难以阅读 修改 使算法的可靠性和可维护性难以保证 解决办法 必须限制箭头的滥用 即不允许无规律地使流程随意转向 只能顺序地进行下去 71 三种基本程序结构 顺序结构选择结构 72 循环结构当型 While型 循环结构 a 直到型 Until型 循环 b 打印输出1 2 3 4 5 73 例2 4求1 1 2 1 3 1 4 1 99 1 100 deno 100 Y N 74 三种基本结构的共同特点 1 只有一个入口 2 只有一个出口 请注意 一个菱形判断框有两个出口 而一个选择结构只有一个出口 不要将菱形框的出口和选择结构的出口混淆 如2 7 3 结构内的每一部分都有机会被执行到 4 结构内不存在 死循环 无终止的循环 由三种基本结构顺序组成的算法结构 可以解决任何复杂的问题 由基本结构所构成的算法属于 结构化 的算法 它不存在无规律的转向 只在本基本结构内才允许存在分支和向前或向后的跳转 75 扩展 只要具有上述四个特点的都可以作为基本结构 可以自己定义基本结构 并由这些基本结构组成结构化程序 这是一个特殊的循环结构 符合基本结构的特点 76 这是一个多分支选择结构 根据表达式的值决定执行路线 虚线框内的结构是一个入口一个出口 并且有上述全部的四个特点 由此构成的算法结构也是结构化的算法 77 习题2 4 5 改为 判断100 300内的数哪些能被3和5同时整除 i 100 N Y 78 作业 2 4 1 4 8 题 要求 第 4 题使用直到型循环流程图补充 判断1 100以内的哪些数是3的倍数或个位是3 要求使用当型循环图 79 讲评2 4 2 依次输入10个数 求最大的数 80 3 结构化流程图 NS图 1 顺序结构 A和B两个框组成一个顺序结构 去掉传统流程图中的箭头 将算法全部写在一个矩形框内 81 3 结构化流程图 NS图 2 选择结构 当条件p成立时执行操作A 条件p不成立则执行操作B 82 3 循环结构 当型循环结构下 图符表示先判断后执行 当条件p成立时反复执行操作A 直到条件p不成立为止 直到型循环结构下 图符表示先执行后判断 当条件p不成立时反复执行A操作 直到p条件成立为止 83 例2 6将例2 1求5 的算法用流程图表示 直到型 84 例2 7有50个学生 要求将他们之中成绩在80分以上者打印出来 用n表示学生学号 n1代表第一个学生学号 ni代表第i个学生学号 用g代表学生成绩 gi代表第i个学生成绩 85 例2 8判定2000 2500年中的每一年是否闰年 将结果输出 86 例2 4求1 1 2 1 3 1 4 1 99 1 100 87 例2 4求1 1 2 1 3 1 4 1 99 1 100 88 例2 5对一个大于或等于3的正整数 判断它是不是一个素数 素数 是指除了1和该数本身之外 不能被其它任何整数整除的数 例如 13是素数 因为它不能被2 3 4 12整除 分析 判断一个数n n 3 是否为素数的方法 将n作为被除数 将2到 n 1 各个整数轮流作为除数 如果都不能被整除 则n为素数 89 文字描述算法如下 S1 输入n的值 S2 i 2 i作为除数 S3 n被i除 得余数r n i的余数 r S4 如果r 0 表示n能被i整除 则打印n 不是素数 算法结束 否则执行S5 S5 i 1 i S6 如果i n 1 返回S3 否则打印n 是素数 然后结束 实际上 n不必被2到 n 1 的整数除 只需被2到n 2间整数除 甚至只需被2到之间的整数除即可 90 例2 15将例2 5判别素数的算法用N S流程图表示 传统流程图分析 此图不符合基本结构特点 由于不能分解为三种基本结构 就无法直接用N S流程图的三种基本结构的符号来表示 因此 应当先作必要的变换 91 例2 15将例2 5判别素数的算法用N S流程图表示 传统流程图变换为 92 用N S流程图表示 93 N S图表示算法的优点 比文字描述直观 形象 易于理解 比传统流程图紧凑易画 它废除了流程线 整个算法结构是由各个基本结构按顺序组成的 N S流程图中的上下顺序就是执行时的顺序 用N S图表示的算法都是结构化的算法 因为它不可能出现流程无规律的跳转 而只能自上而下地顺序执行 94 小结 一个结构化的算法是由一些基本结构顺序组成的 具有结构化的特点 在基本结构之间不存在向前或向后的跳转 流程的转移只存在于一个基本结构范围之内 如循环中流程的跳转 一个非结构化的算法可以用一个等价的结构化算法代替 其功能不变 如果一个算法不能分解为若干个基本结构 则它必然不是一个结构化的算法 95 2 4 5用伪代码表示算法 概念 伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法 特点 它如同一篇文章一样 自上而下地写下来 每一行 或几行 表示一个基本操作 它不用图形符号 因此书写方便 格式紧凑 也比较好懂 也便于向计算机语言算法 即程序 过渡 用处 适用于设计过程中需要反复修改时的流程描述 但使用伪代码不如流程图直观 且可能会出现逻辑上的错误 96 IFxispositiveTHEN printx ELSE print x也可以用汉字伪代码表示 若x为正打印x 否则 打印 x 也可以中英文混用 如 IFx为正 printx ELSE print x 例 输出x的绝对值 的算法可以用伪代码表示为 97 开始置t的初值为1置i的初值为2 当i 5 执行下面操作 使t t i 使i i 1 循环体到此结束 输出t的值 结束 也可以使用类C语言写成以下形式 BEGIN 算法开始 1 t2 i do t i t i 1 i while i 5 printt END 算法结束 例2 16求5 用伪代码表示算法 98 例2 17输出50个学生中成绩高于80分者的学号和成绩 用伪代码表示算法 BEGIN 算法开始 1 i whilei 50 inputniandgi i 1 i 1 i whilei 50 ifgi 80printniandgii 1 i END 算法结束 99 习题2 4 5 使用伪代码编写如下程序 判断100 300内的数哪些能被3和5同时整除 BEGIN 算法开始 100 i whilei 300 if i能被3整除 if i能被5整除 printi能被3和5同时整除elseprinti不能被3或5整除 elseprinti不能被3或5整除i 1 i END 算法结束 100 2 4 5用伪代码表示算法 用处 适用于设计过程中需要反复修改时的流程描述 如上题还要求再被4整除 修改流程图要部分重画 使用伪代码不如流程图直观 且可能会出现逻辑上的错误 101 2 4 6用计算机语言表示算法 概念 用计算机实现算法 计算机是无法识别流程图和伪代码的 只有用计算机语言编写的程序才能被计算机执行 因此在用流程图或伪代码描述出一个算法后 还要将它转换成计算机语言程序 特点 用计算机语言表示算法必须严格遵循所用的语言的语法规则 C89 C90标准等 这是和伪代码不同的 用处 要完成一件工作 包括设计算法和实现算法两个部分 设计算法的目的是为了实现算法 102 例2 20将例2 16表示的算法 求5 用C语言表示 伪代码 BEGIN 算法开始 1 t2 i while i 5 t i t i 1 i printt END 算法结束 includevoidmain inti t t 1 i 2 while i 5 t t i i i 1 printf d n t DEMO 103 includevoidmain floatsum 0 0 term intsign 1 deno 2 while deno 100 sign sign term sign deno sum sum term deno deno 1 printf f sum 例2 211 1 2 1 3 1 4 1 99 1 100用C语言表示 104 习题2 4 5 使用C语言编写如下程序 判断100 300内的数哪些能被3和5同时整除 DEMO 105 2 5结构化程序设计方法 顺序 选择 循环三种结构组成的程序必然是结构化的程序 这种程序便于编写 便于阅读 便于修改和维护结构化程序设计方法的基本思路是 把一个复杂问题的求解过程分阶段进行 每个阶段的问题都是一种基本的结构 或由各种基本结构共同构成的共同体 以使得程序的设计控制在人们容易理解和处理的范围内 结构化程序设计强调程序设计风格和程序结构的规范化 提倡清晰的结构 106 采取以下方法来保证得到结构化的程序 自顶向下 逐步细化 模块化设计 结构化编码 107 用这种方法逐步分解 直到作者认为可以直接将各小段表达为文字语句为止 这种方法就叫做 自顶向下 逐步细化 108 自顶向下 逐步细化方法的优点 考虑周全 结构清晰 层次分明 作者容易写 读者容易看 如果发现某一部分中有一段内容不妥 需要修改 只需找出该部分修改有关段落即可 与其它部分无关 这就是用工程的方法设计程序 109 模块化设计的方法 模块化设计的思想实际上是一种 分而治之 的思想 即 根据程序模块的功能将它划分为若干个子模块 如果这些子模块的规模还嫌大 还再可以划分为更小的模块 这个过程采用自顶向下方法来实现 子模块在C语言中通常用函数实现 且代码一般不超过50行 划分子模块时应注意模块的独立性 即 使一个模块完成一项功能 耦合性愈少愈好 DEMO 110 结构化编码 将已经设计好的算法用计算机语言表示出来 C语言就是一种使用最为广泛的结构化语言 它能够用控制语句描述三种基本的结构 如 if else 选择结构 while当型循环 do while直到型循环 111 习题2 4 5 使用C语言编写如下程序 判断100 300内的数哪些能被3和5同时整除 DEMO 112 作业 2 5使用N S图表述2 4 1 6 8 的算法 上机题目 113 第三章数据类型 运算符和算术表达式 114 3 1C的数据类型3 2常量与变量3 3整型数据3 4浮点型数据运行3 5字符型数据3 变量赋初值3 7各类数值型数据间的混合运算3 8算术运算符和算术表达式3 9赋值运算符和赋值表达式3 10逗号运算符和逗号表达式 主要内容 115 3 1C的数据类型 基本类型 它的特点是其值不能再分解为其他类型 基本数据类型是自我描述的 构造类型 它的特点是根据已经定义的一个或多个基本数据类型 用构造的方法来定义的数据类型 指针类型 它存放的是某个变量在内存中的地址 空类型 某些函数在调用后并不需要向调用者返回结果 这种函数可以定义为空类型 数据类型决定 数据占用的内存字节数 数据取值范围 数据可进行的操作 116 常量与变量的区别在程序运行期间 变量的值是可以改变的 常量则不会改变常量通常用于对变量初始化的赋值 因此程序运行时变量的值可以发生变化编译阶段 常量并不分配内存 而变量会根据声明的类型开辟一定的存储空间 3 2常量与变量 117 3 2常量与变量 3 2 1直接常量和符号常量在程序运行过程中 其值不能被改变的量称为常量直接常量区分为不同的类型 整型100 2 100 0实型3 14 2 0 3 789字符型 a b 2 字符串 a ab 2 直接常量 118 例3 1符号常量的使用 definePRICE30 includevoidmain intnum total num 10 total num PRICE printf total d n total 说明 程序中用 define命令行定义PRICE代表常量30 此后凡在本文件中出现的PRICE都代表30 可以和常量一样进行运算 说明 如再用赋值语句给PRICE赋值是错的PRICE 40 错误 不能给符号常量赋值 符号常量的优点 含义清楚 修改方便 符号常量 用一个标识符代表一个常量 符号常量的值在其作用域内不能改变 也不能再被赋值 119 3 2常量与变量 3 2 2变量变量代表内存中具有特定属性的一个存储单元 它用来存放数据 这就是变量的值 在程序运行期间 这些值是可以改变的 变量名实际上是一个以一个名字对应代表一个地址 在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址 取地址运算符 从变量中取值 实际上是通过变量名找到相应的内存地址 从该存储单元中读取数据 inta b a 3 b a 1 120 标识符定义 用来标识变量 符号常量 函数等的字符序列组成 只能由字母 数字 下划线组成 且第一个字母必须是字母或下划线大小写敏感不能使用关键字 P365附录B 长度 最长32个字符命名原则 见名知意 选有含意的英文单词 或其缩写 作标识符不宜混淆如l与I o与0先定义 后使用 每一个变量被指定为一个确定类型 编译时就能为其分配相应的存储单元 121 3 3整型数据 3 3 1整型常量的表示方法整型常量即整常数 在 语言中 整常数可用以下三种形式表示 1 十进制整数 如 123 456 4 2 八进制整数 以0头的数是八进制数 如 0123表示八进制数123 等于十进制数83 3 十六进制整数 以0 x开头的数是16进制数 如 0 x123 代表16进制数123 等于十进制数291 122 整数的表示 TurboC2 0和TurboC 3 0为一个整型变量在内存中分配2个字节 16位 的存储单元 不同的编译系统为整型数据分配的字节数不同 VC 6 0分配4个字节 整数在内存中采用补码的二进制形式来表示1 正数的补码和其原码的形式相同2 负数的补码 将该数的绝对值的二进制原码形式 按位取反再加1 例如求 10的补码 假设一个整数占2字节16位 取 10的绝对值10 10的绝对值的二进制形式为0000000000001010 对 取反得1111111111110101 再加1得1111111111110110 123 3 3整型数据 2 整型变量的分类C语言中的整型变量分为有符号和无符号两种 最高位为符号位 每种有 无符号的整型变量还可以根据数值的范围细分为标准整型 int 短整型 short 长整型 long 这三种类型的变量的字长数要满足 short int long 124 3 3整型数据 125 3 3整型数据 整数类型的有关数据 类型类型说明符长度数的范围基本型int2字节 16位 32768 32767短整型short2字节 16位 215 215 1长整型long4字节 32位 231 231 1无符号整型unsignedint2字节0 65535无符号短整型unsignedshort2字节0 65535无符号长整型unsignedlong4字节0 232 1 126 3 3整型数据 例如 整数13在内存中实际存放的情况 127 3 3整型数据 3 整型变量的定义 规定在程序中所有用到的变量都必须在程序中定义 即 强制类型定义 例如 inta b 指定变量 为整型 unsignedshortc d 指定变量 为无符号短整型 longe f 指定变量 为长整型 128 例3 2整型变量的定义与使用 includevoidmain inta b c d 指定 为整型变量 unsigned 指定 为无符号整型变量 12 24 10 printf 说明 不同种类的整型数据可以进行算术运算 129 例3 3整型数据的溢出 includevoidmain inta b a 32767 b a 1 printf d d n a b 说明 数值是以补码表示的 一个整型变量只能容纳 32768 32767范围内的数 无法表示大于32767或小于 32768的数 遇此情况就发生 溢出 130 3 3整型数据 3 3 3整型常量的类型 1 一个整数 如果其值在 32768 32767范围内 认为它是int型 它可以赋值给int型和longint型变量 2 一个整数 如果其值超过了上述范围 而在 2147483637 2147483647范围内 则认为它是为长整型 可以将它赋值给一个longint型变量 3 如果所用的C版本 如TurboC 分配给shortint与int型数据在内存中占据的长度相同 则它的表数范围与int型相同 因此一个int型的常量同时也是一个shortint型常量 可以赋给int型或shortint型变量 131 3 3整型数据 4 一个整常量后面加一个字母u或U 认为是unsignedint型 如12345u 在内存中按unsignedint规定的方式存放 存储单元中最高位不作为符号位 而用来存储数据 如果写成 12345u 则先将 12345转换成其补码53191 然后按无符号数存储 5 在一个整常量后面加一个字母l或L 则认为是longint型常量 例如 123l 432L 0L这往往用于函数调用中 如果函数的形参为longint型 则要求实参也为longint型 132 3 4浮点型数据 3 4 1浮点型常量的表示方法 两种表示形式 小数指数 0 1233e 3 注意 字母e 或E 之前必须有数字 且e后面的指数必须为整数 1e3 1 8e 3 123e 6 1e 3e3 2 1e3 5 e3 e 133 3 4浮点型数据 规范化的指数形式 在字母e 或E 之前的小数部分中 小数点左边应有一位 且只能有一位 非零的数字 例如 123 456可以表示为 123 456e0 12 3456e1 1 23456e2 0 123456e3 0 0123456e4 0 00123456e其中的1 23456e3称为 规范化的指数形式 134 3 4浮点型数据 3 4 2浮点型变量 1 浮点型数据在内存中的存放形式一个浮点型数据一般在内存中占4个字节 32位 与整型数据的存储方式 补码 不同 浮点型数据是按照指数形式存储的 系统把一个浮点型数据分成小数部分和指数部分 分别存放 3 14159采用十进制表示的示意图 135 3 4浮点型数据 十进制小数转化为二进制小数的规则 将小数部分乘2后 取整数位 直至小数部分为0 结果从上到下 0 1875 10 0011 2 计算机中使用二进制来表示小数部分 用2的幂次来表示指数部分 136 3 4浮点型数据 12 1875 10 1100 0011 2 11000011 24 计算机中使用二进制来表示小数部分 用2的幂次来表示指数部分不少C语言编译系统以1位表示符号位 23位表示小数部分 以8位表示指数部分 137 3 4浮点型数据 2 浮点型变量的分类浮点型变量分为单精度 float型 双精度 double型 和长双精度型 longdouble 三类形式 138 例3 4浮点型数据的舍入误差 includevoidmain floata b a 123456 789e5 b a 20 printf f n b 说明 一个浮点型变量只能保证的有效数字是7位有效数字 后面的数字是无意义的 并不准确地表示该数 应当避免将一个很大的数和一个很小的数直接相加或相减 否则就会 丢失 小的数 139 3 4浮点型数据 3 4 3浮点型常量的类型C编译系统将浮点型常量作为双精度 double 来处理 例如 floatf 2 45678 4523 65系统先把2 45678和4523 65作为双精度数 然后进行相乘的运算 得到的乘也是一个双精度数 最后取其前7位赋给浮点型变量f 如是在数的后面加字母f或F 如1 65f 654 87F 这样编译系统就会把它们按单精度 32位 处理 140 3 5字符型数据 3 5 1字符常量 1 用单引号包含的一个字符是字符型常量 2 只能包含一个字符 可以是字符集中的任意字符 要区分数字作为整形常量还是字符常量 如 1 是不能参与数字运算的 例 a A 1 abc a 141 3 5字符型数据 有些以 开头的特殊字符称为转义字符意思是将 后面的字符转换成另外的意义 n换行 t横向跳格 r回车 反斜杠 单引号 双引号 dddddd表示1到3位八进制数字 xhhhh表示1到2位十六进制数字 142 3 5字符型数据 如 ASCII码 10换行 n ASCII码 65字母A A includevoidmain printf c 65 将ASCII码为65的字母A输出 printf c n 将字母 以转义字母的格式输出 printf c n 101 将八进制数101所对应的ASCII码65的字母A输出 3 字符常量与ASCII代码一一对应的关系 143 3 5字符型数据 例3 5 includevoid abc tde rf tg n printf h ti b bjk n 运行结果 输出结果 144 3 5字符型数据 3 5 2字符变量字符型变量用来存放字符常量 注意只能放一个字符 字符变量的定义形式如下 charc1 c2 在本函数中可以用下面语句对c1 c2赋值 c1 a c2 b 一个字符变量在内存中占一个字节 145 3 5字符型数据 3 5 3字符数据在内存中的存储形式及其使用方法一个字符常量存放到一个字符变量中 实际上并不是把该字符的字型放到内存中去 而是将该字符的相应的ASCII代码的二进制代码放到存储单元中 这样使字符型数据和整型数据之间可以通用 146 例3 6向字符变量赋以整数 includevoidmain charc1 c2 c1 97 c2 98 printf c c n c1 c2 printf d d n c1 c2 说明 在第 和第4行中 将整数97和98分别赋给c1和c2 它的作用相当于以下两个赋值语句 c1 c2 因为 a 和 b 的ASCII码为97和98 运行结果 9798 147 例3 7大小写字母的转换 Demo6D includevoidmain charc1 c2 c1 a c2 b c1 c1 32 c2 c2 32 printf c c c1 c2 说明 程序的作用是将两个小写字母a和b转换成大写字母A和B 从 代码表中可以看到每一个小写字母比它相应的大写字母的ASCII码大32 语言允许字符数据与整数直接进行算术运算 输出A Z的所有字母 148 3 5字符型数据 说明 Turbo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 探索直线平行的条件课时2课件2025-2026学年北师大版数学七年级下册
- 脑病糖尿病科分级护理度考试试题及答案解析
- 汽车基础电子技术 10
- 2026四年级下《运算定律与简便计算》考点真题精讲
- 医院护士上班工作制度
- 医院管理责任制度
- 十四运医疗保障工作制度
- 博物馆内部管理制度范本
- 卫生用品标准化管理制度
- 卫生院人事管理规章制度
- 沈阳药科大学药物分析II(药物分析专论)课件
- 2023年航空安全员理论考试题库(浓缩800题)
- 办公室后勤工作培训
- 兰州大学《分析化学》19秋平时作业2(参考)
- 酒店保洁协议样本
- DB11-T 2021-2022 12345市民服务热线服务与管理规范
- DL∕T 5754-2017 智能变电站工程调试质量检验评定规程
- 2024年山东省高中学业水平合格考生物试卷试题(含答案详解)
- 报价单-通用模板
- 双管高压旋喷桩施工方案
- 运用PDCA降低血管内导管相关血流感染发生率(NPICU)
评论
0/150
提交评论