c语言第1章谭浩强.ppt

上传人:max****ui 文档编号:6334267 上传时间:2020-02-23 格式:PPT 页数:49 大小:1.09MB
返回 下载 相关 举报
c语言第1章谭浩强.ppt_第1页
第1页 / 共49页
c语言第1章谭浩强.ppt_第2页
第2页 / 共49页
c语言第1章谭浩强.ppt_第3页
第3页 / 共49页
点击查看更多>>
资源描述
C程序设计 第二版 新世纪计算机基础教育丛书丛书主编谭浩强 总目录 第1章C语言概述第2章程序的灵魂 算法第3章数据类型 运算符与表达式第4章最简单的C程序设计 顺序程序设计第5章选择结构程序设计第6章循环控制第7章数组第8章函数 第9章预处理命令第10章指针第11章结构体与共用体第12章位运算第13章文件第14章C 对C的扩充第15章C 的面向对象基础第16章常见错误和程序调试 第1章C语言概述 1 1C语言出现的历史背景1 2C语言的特点1 3简单的C程序介绍1 4C程序的上机步骤1 5习题 1 1C语言出现的历史背景 C语言是国际上广泛流行的计算机高级语言 既可用来写系统软件 也可用来写应用软件 C语言是在B语言的基础上发展起来的 它的根源可以追溯到ALGOL60 1960年出现的ALGOL60是一种面向问题的高级语言 它离硬件比较远 不宜用来编写系统程序 1963年英国的剑桥大学推出了CPL combinedprogramminglanguage 语言 CPL语言在ALGOL60的基础上接近硬件一些 但规模比较大 难以实现 1967年英国剑桥大学的MatinRichards对CPL语言做了简化 推出了BCPL basiccombinedprogramminglanguage 语言 1970年美国贝尔实验室的 KenThompson以BCPL语言为基础 又做了进一步简化 设计出了很简单的而且很接近硬件的B语言 取BCPL的第一个字母 并用B语言写了第一个UNIX操作系统 在PDP 7上实现 1971年在PDP 11 20上实现了B语言 并写了UNIX操作系统 但B语言过于简单 功能有限 1972年至1973年间 贝尔实验室的D M Ritchie在B语言的基础上设计出了C语言 取BCPL的第二个字母 C语言既保持了BCPL和B语言的优点 精练 接近硬件 又克服了它们的缺点 过于简单 数据无类型等 最初的C语言只是为描述和实现UNIX操作系统提供一种工作语言而设计的 1973年 K Thompson和D M Ritchie两人合作把UNIX的90 以上用C改写 即UNIX第5版 原来的UNIX操作系统是1969年由美国的贝尔实验室的K Thompson和D M Ritchie开发成功的 是用汇编语言写的 1972年至1973年间 贝尔实验室的D M Ritchie在B语言的基础上设计出了C语言 取BCPL的第二个字母 C语言既保持了BCPL和B语言的优点 精练 接近硬件 又克服了它们的缺点 过于简单 数据无类型等 最初的C语言只是为描述和实现UNIX操作系统提供一种工作语言而设计的 1973年 K Thompson和D M Ritchie两人合作把UNIX的90 以上用C改写 即UNIX第5版 原来的UNIX操作系统是1969年由美国的贝尔实验室的K Thompson和D M Ritchie开发成功的 是用汇编语言写的 后来 C语言多次做了改进 但主要还是在贝尔实验室内部使用 直到1975年UNIX第6版公布后 C语言的突出优点才引起人们的普遍注意 1977年出现了不依赖于具体机器的C语言编译文本 可移植C语言编译程序 使C移植到其他机器时所需做的工作大大简化了 这也推动了UNIX操作系统迅速地在各种机器上实现 例如VAX AT T等计算机系统都相继开发了UNIX 随着UNIX的日益广泛使用 C语言也迅速得到推广 C语言和UNIX可以说是一对孪生兄弟 在发展过程中相辅相成 1978年以后 C语言已先后移植到大 中 小 微型机上 已独立于UNIX和PDP了 现在C语言已风靡全世界 成为世界上 应用最广泛的几种计算机语言之一 以1978年发表的UNIX第7版中的C编译程序为基础 BrianW Kernighan和DennisM Ritchie 合称K R 合著了影响深远的名著 TheCProgrammingLanguage 这本书中介绍的C语言成为后来广泛使用的C语言版本的基础 它被称为标准C 1983年 美国国家标准化协会 ANSI 根据C语言问世以来各种版本对C的发展和扩充 制定了新的标准 称为ANSIC ANSIC比原来的标准C有了很大的发展 K R在1988年修改了他们的经典著作 TheCProgrammingLanguage 按照ANSIC标准重新写了该书 1987年 ANSI又公布了新标准 87ANSIC 1990年 国际标准化组织ISO InternationalStandardOrganization 接受87ANSIC为ISOC的标准 ISO9899 1990 目前流行的C编译系统都是以它为基础的 本书的叙述基本上以ANSIC为基础 目前广泛流行的各种版本C语言编译系统虽然基本部分是相同的 但也有一些不同 在微型机上使用的有MicrosoftC TurboC QuickC BORLANDC等 它们的不同版本又略有差异 因此 读者应了解所用的计算机系统所配置的C编译系统的特点和规定 可以参阅有关手册 1 2C语言的特点 一种语言之所以能存在和发展 并具有生命力 总是有其不同于 或优于 其他语言的特点 C语言的主要特点如下 1 语言简洁 紧凑 使用方便 灵活 C语言一共只有32个关键字 9种控制语句 程序书写形式自由 主要用小写字母表示 压缩了一切不必要的成分 下面将C与PASCAL语言做一比较 2 运算符丰富 C的运算符包含的范围很广泛 共有34种运算符 C把括号 赋值 强制类型转换等都作为运算符处理 从而使C的运算类型极其丰富 表达式类型多样化 灵活使用各种运算符可以实现在其他高级语言中难以实现的运算 3 数据结构丰富 具有现代化语言的各种数据结构 C的数据类型有整型 实型 字符型 数组类型 指针类型 结构体类型 共用体类型等 能用来实现各种复杂的数据结构 如链表 树 栈等 的运算 尤其是指针类型数据 使用起来比PASCAL更为灵活 多样 4 具有结构化的控制语句 如if else语句 while语句 do while语句 switch语句 for语句 用函数作为程序的模块单位 便于实现程序的模块化 C是良好的结构化语言 符合现代编程风格的要求 5 语法限制不太严格 程序设计自由度大 例如对数组下标越界不做检查 由程序编写者自己保证程序的正确 对变量的类型使用比较灵活 例如整型数据与字符型数据可以通用 一般的高级语言语法检查比较严 能检查出几乎所有的语法错误 而C语言允许程序编写者有较大的自由度 因此 放宽了语法检查 程序员应当仔细检查程序 保证其正确 而不要过分依赖C编译程序去查错 限制 与 灵活 是一对矛盾 限制严格 就失去灵活性 而强调灵活 就必然放松限制 一个不熟练的编程人员 编一个正确的C程序可能会比编一个其他高级语言程序难一些 也就是说 对用C语言的人 要求对程序设计更熟练一些 6 C语言能进行位 bit 操作 能实现汇编语言的大部分功能 可以直接对硬件进行操作 因此C既具有高级语言的功能 又具有低级语言的许多功能 可用来写系统软件 C语言的这种双重性 使它既是成功的系统描述语言 又是通用的程序设计语言 有人把C称为 高级语言中的低级语言 或 中级语言 意为兼有高级和低级语言的特点 按此观点可将各语言分类如下 高级 BASIC FORTRAN COBOL PASCAL Ada Modula 2 中级 C FORTH 宏汇编 低级 汇编语言一般仍习惯将C语言称为高级语言 因为C程序也要通过编译 连接才能得到可执行的目标程序 这是和其他高级语言相同的 C的以上特点 读者现在也许还不能深刻理解 待学完C以后再回顾一下 就会有比较深的体会 我们从应用的角度出发对C语言和其他传统的高级语言作一简单比较 从掌握语言的难易程度来看 C语言比其他语言难一些 BASIC是初学者入门的较好的语言 FORTRAN也比较好掌握 对科学计算多用FORTRAN或PL 对商业和管理等数据处理领域 用COBOL为宜 C语言虽然也可用于科学计算和管理领域 但并不理想 C的特长不在这里 对操作系统和系统实用程序以及需要对硬件进行操作的场合 用C语言明显地优越于其他高级语言 有的大型应用软件也用C语言编写 从教学角度 由于PASCAL是世界上第一个结构化语言 而曾被认为是计算机专业的比较理想的教学语言 目前在数据结构等课程中一般用PASCAL语言举例 但PASCAL语言难以推广到各实际应用领域 到目前为止基本上只是教学语言 C语言也是理想的结构化语言 且描述能力强 同样适于教学 操作系统课程多结合UNIX讲解 而UNIX与C不可分 因此 C语言已经成为被广泛使用的教学语言 C除了能用于教学外 还有广泛的应用领域 因此更有生命力 PASCAL和其他高级语言的设计目标是通过严格的语法定义和检查来保证程序的正确性 而C则是强调灵活性 使程序设计人员能有较大的自由度 以适应宽广的应用面 总之 C语言对程序员要求较高 程序员使用C语言编写程序会感到限制少 灵活性大 功能强 可以编写出任何类型的程序 现在 C语言已不仅用来编写系统软件 也用来编写应用软件 学习和使用C的人已越来越多 1 3简单的C程序介绍 下面先介绍几个简单的C程序 然后从中分析C程序的特性 例1 1main printf ThisisaCprogram n 本程序的作用是输出以下一行信息 Thisisacprogram 其中main表示 主函数 每一个C程序都必须有一个main函数 函数体由大括弧 括起来 本例中主函数内只有一个输出语句 printf是C语言中的输出函数 详见第4章 双引号 双括号 内的字符串原样输出 n 是换行符 即在输出 Thisisacprogram 后回车换行 语句最后有一分号 例1 2main 求两数之和 inta b sum 这是定义变量 a 123 b 456 以下3行为C语句 sum a b printf sumis d n sum 本程序的作用是求两个整数a和b之和sum 表示注释部分 为便于理解 我们用汉字表示注释 当然也可以用英语或汉字拼音作注释 注释只是给人看的 对编译和运行不起作用 注释可以加在程序中任何位置 第2行是声明部分 定义变量a和b 指定a和b为整型 int 变量 第3行是两个赋值语句 使a和b的值分别为123和 456 第4行使sum的值为a b 第5行中 d 是输入输出的 格式字符串 用来指定输入输出时的数据类型和格式 详见第4章 d 表示 以十进制整数形式输出 在执行输出时 此位置上代以一个十进制整数值 printf函数中括弧内最右端sum是要输出的变量 现在它的值为579 即123 456之值 因此输出一行信息为sumis579例1 3main 主函数 inta b c 声明部分 定义变量 scanf d d 输入变量a和b的值 c max a b 调用max函数 将得到的值赋给c printf max d c 输出c的值 intmax intx inty 定义max函数 函数值为整型 形式参数x y为整型 intz max函数中的声明部分 定义本函数中用到的变量z为整型 if x y z x elsez y return z 将z的值返回 通过max带回调用处 本程序包括两个函数 主函数main和被调用的函数max max函数的作用是将x和y中较大者的值赋给变量z return语句将z的值返回给主调函数main 返回值是通过函数名max带回到main函数的调用处 main函数中的scanf是 输入函数 的名字 scanf和printf都是C系统提供的标准输入输出函数 程序中scanf函数的作用是输入a和b的值 a和 b中的 的含义是 取地址 此scanf函数的作用是将两个数值分别输入到变量a和b的地址所标志的单元中 也就是输入给变量a和b 这种形式是与其他语言不同的 它相当于BASIC语言中的INPUTa b或PASCAL语言中的Read a b a和 b前面的 d d 的含义与前相同 只是现在用于 输入 它指定输入的两个数据按十进制整数形式输入 关于scanf函数详见第4章 main函数中第4行为调用max函数 在调用时将实际参数a和b的值分别传送给max函数中的形式参数x和y 经过执行max函数得到一个返回值 即max函数中变量z的值 把这个值赋给变量c 然后输出c的值 printf函数中双引号内的 max d 在输出时 其中 d 将由c的值取代之 max 原样输出 程序运行情况如下 8 5 输入8和5给a和b max 8 输出c的值 本例用到了函数调用 实际参数和形式参数等概念 我们只做了很简单的解释 读者如对此不大理解 可以先不予以深究 在学到以后有关章节时 问题自然迎刃而解 在此介绍此例子 无非是使读者对C程序的组成和形式有一个初步的了解 通过以上几个例子 可以看到 1 C程序是由函数构成的 一个C源程序至少包含一个main函数 也可以包含一个main函数和若干个其他函数 因此 函数是C程序的基本单位 被调用的函数可以是系统提供的库函数 例如printf和scanf函数 也可以是用户根据需要自 己编制设计的函数 例如 例1 3中的max函数 C的函数相当于其他语言中的子程序 用函数来实现特定的功能 程序中的全部工作都是由各个函数分别完成的 编写C程序就是编写一个个函数 C的函数库十分丰富 ANSIC建议的标准库函数中包括100多个函数 TurboC和MSC4 0提供300多个库函数 C的这种特点使得容易实现程序的模块化 2 一个函数由两部分组成 函数的首部 即函数的第一行 包括函数名 函数类型 函数属性 函数参数 形参 名 参数类型 例如 例1 3中的max函数的首部为intmax intx inty 函数类型函数名函数参数类型函数参数名函数参数类型函数参数名 一个函数名后面必须跟一对圆括弧 函数参数可以没有 如main 函数体 即函数首部下面的大括弧 内的部分 如果一个函数内有多个大括弧 则最外层的一对 为函数体的范围 函数体一般包括 声明部分 在这部分中定义所用到的变量 如例1 3中main函数中的 inta b c 在第8章中还将会看到 在声明部分中要对所调用的函数进行声明 执行部分 由若干个语句组成 当然 在某些情况下也可以没有声明部分 例如 例1 1 甚至可以既无声明部分 也无执行部分 如 dump 它是一个空函数 什么也不干 但这是合法的 3 一个C程序总是从main函数开始执行的 而不论main函数在整个程序中的位置如何 main函数可以放在程序最前头 也可以放在程序最后 或在一些函数之前 在另一些函数之后 4 C程序书写格式自由 一行内可以写几个语句 一个语句可以分写在多行上 C程序没有行号 也不像FORTRAN或COBOL那样严格规定书写格式 语句必须从某一列开始书写 5 每个语句和数据定义的最后必须有一个分号 分号是C语句的必要组成部分 例如 c a b 分号不可少 即使是程序中最后一个语句也应包含分号 这是和PASCAL语言不同的 6 C语言本身没有输入输出语句 输入和输出的操作是由库函数scanf和printf等函数来完成的 C对输入输出实行 函数化 由于输入输出操作牵涉到具体的计算机设备 把输入输出操作放在函数中处理 就可以使C语言本身的规模较小 编译程序简单 很容易在各种机器上实现 程序具有可移植性 当然 不同的C语言系统需要对函数库中的函数作不同的处理 不同的C系统除了提供函数库中的标准函数外 还按照硬件的情况提供一些专门的函数 因此不同的系统所提供的函数个数和功能是有所不同的 7 可以用 对C程序中的任何部分作注释 一个好的 有使用价值的源程序都应当加上必要的注释 以增加程序的可读性 1 4C程序的上机步骤 我们已经看到了一些用C语言编写的程序 为了使计算机能按照人们的意志进行工作 必须根据问题的要求 编写出相应的程序 所谓程序 就是一组计算机能识别和执行的指令 每一条指令使计算机执行特定的操作 程序可以用高级语言 例如QBASIC FORTRAN PASCAL C等 编写 用高级语言编写的程序称为 源程序 sourceprogram 从根本上说 计算机只能识别和执行由0和1组成的二进制的指令 而不能识别和执行用高级语言写的指令 为了使计算机能执行高级语言源程序 必须先用一种称为 编译程序 的软件 把源程序翻译成二进制形式的 目标程序 然后将该目标程序与系统的函数库和其他目标程序连接起来 形成可执行的目标程序 图1 1 在编好一个C源程序后 如何上机运行呢 在纸上写好一个程序后 要经过以下几个步骤 上机输入与编辑源程序对源程序进行编译与库函数连接运行目标程序这样几个步骤 以上过程如图1 1所示 其中实线表示操作流程 虚线表示文件的输入输出 例如 编辑后得到一个源程序文件f c 然后在进行编译时再将源程序文件f c输入 经过编译得到目标程序文件f obj 再将目标程序文件f obj输入内存 与系统提供的库函数等连接 得到可执行的目标程序文件f exe 最后把f exe调入内存并使之运行 在了解了C语言的初步知识后 读者最好上机运行一个C程序 以建立对C程序的初步认识 下面分别就三种不同的环境下运行C程序作一简单介绍 1 用TurboC运行C程序的步骤TurboC是在微机上广泛使用的编译程序 它具有方便 直观 易用的界面和丰富的库函数 它向用户提供一个集成环境 把程序的编辑 编译 连接和运行等操作全部集中在一个界面上进行 使用十分方便 为了能使用TurboC 必须先将TurboC编译程序装入磁盘的某一目录下 例如放在C盘根目录下一级TC子目录下 图1 2 1 调用TurboC程序 如果用户的当前目录是TurboC编译程序所在的子目录 例如TC子目录 只需从键盘键入 tc 命令即可 C TC tc 屏幕上出现TurboC集成环境 见图1 2所示 从图1 2可以看到在集成环境的上部 有一行 主菜单 其中包括下面8个菜单项 FileEditRunCompileProjectOptionDebugbreak watch用户可以通过以上菜单项来选择使用TurboC集成环境所提供的TurboC的各项主要功能 以上8个菜单项分别代表 文件操作 编辑 运行 编译 项目文件 选项 调试 中断 观察等功能 用键盘上的 和 键可以选择菜单条中所需要的菜单项 被选中的项以 反相 图1 3形式显示 例如主菜单中的各项原来以白底黑字显示 被选中时改为以黑底白字显示 此时若按回车键 就会出现一个下拉菜单 例如在选中 File 菜单并按回车键后 屏幕上 File 下面出现下拉菜单 见图1 3所示 它是一个子菜单 提供多项选择 可以用 键选择所需要的项 例如选择 New 处 并按回车键 表示要建立一个新的C源程序 图1 3 如果选择 Load 并按回车键 表示要调入一个已有的源文件 此时屏幕上出现一个对话框 见图1 4 要求你输入该文件的名字 用户可输入该文件名 例如 tc1 c 如果已存在此文件 则系统会将此文件调入内存并显示在屏幕上 此时自动转为编辑 Edit 状态 如果原来不存在此文件名 则系统会建立一个以指定的名字命名的新文件 图1 4 2 编辑源文件 在编辑 Edit 状态下可以根据需要输入或修改源程序 3 编译源程序 选择 Compile 菜单并在其下拉菜单中选择 CompiletoOBJ 则进行编译 得到一个后缀为 obj的目标程序 为方便起见 在一般书刊中 以上菜单的选择以 Compile CompiletoOBJ 表示 然后再选菜单 Compile LinkEXEfile 进行连接操作 可得到一个后缀为 exe的可执行文件 也可以将编译和连接合为一个步骤进行 选菜单 Compile MakeEXEfile 或按 F9 键 即可一次完成编译和连接 在屏幕上会显示编译或连接时有无错误和有几个错误 见图1 5所示 此时按任何一个键 图1 5所显示的 编译信息框 会 图1 5 消失 屏幕上会恢复显示源程序 光标停留在出错之处 在屏幕的下半部分显示出有错误的行和错误的原因 根据此信息修改源程序 修改完毕认为无错后 再按 F9 再次进行编译和连接 如此反复进行到不显示出错为止 4 执行程序 按 F10 键 在窗口上部的主菜单中某一项处出现 反相 显示 黑色亮块 FileEditRunCompileProjectOptionDebugBreak watch用 键将亮块移到 Run 按回车键 在其下拉菜单中选择 Run 项 或直接按Ctrl F9键 系统就会执行已编译好的目标文件 此时 TC集成环境窗口消失 屏幕上显示出程序运行时输出的结果 如果程序需要输入数据 如例1 3 则应在此时 从键盘输入所需数据 然后程序会接着执行 输出结果 如果发现运行结果不对 要重新修改源程序 可以再按 F10 键 并用 使亮块移到 Edit 处 按回车键 即进入编辑状态 可以根据需要修改源程序 并重复上述 2 3 4 步 直到得到正确结果为止 5 可以用 Alt 和 X 键 同时按此两键 脱离TurboC 回到DOS命令状态 此时 可以用DOS命令显示源程序和运行程序 C TYPEtc1 c 列出源程序清单 C tc1 执行目标程序tc1 exe 如果想再修改源程序 可以重新执行步骤 1 并输入源程序文件名即可 2 在UNIX操作系统下运行C程序的步骤 1 用编辑程序 如UNIX系统的文本行编辑程序ed 或屏幕编辑程序vi 将源程序输入计算机 经修改认为无误后 存入文件系统 设用户将源文件定名为f c C源程序的后缀一般定为 c 2 编译 调用C编译程序cc对源文件进行编译 可打入命令 ccf c 如果在编译过程中发现源程序有语法错误 则系统会输出 出错信息 告诉用户第几行有什么样的错误 用户应重新调用编辑程序 修改后再进行编译 如此直到编译通过为止 编译时先 生成一个汇编语言程序 即将C源程序翻译成为一个汇编语言程序 然后由编译程序再将汇编语言程序翻译成机器指令程序 即目标程序 目标程序的文件名与相应的源程序同名 但后缀为 o 表示它是目标文件 上述源文件f c经编译后得到目标程序f o 3 连接 将目标程序和库函数或其他目标程序连接成可执行的目标程序 在UNIX系统下 连接是由cc自动完成的 最后得到可执行文件 文件名由系统自动确定为a out 如果不想用系统定的文件名a out 也可以在编译时自己指定可执行文件名 例如想指定为f out 可以在编译时打入以下命令 cc of outf c 它的作用是将源程序f c编译成可执行程序 文件名为f out 4 执行程序 只需输入可执行文件名即可 例如 a out 系统指定的文件名 或f out 用户指定的文件名 3 在DOS下用MicrosoftC6 0编译程序运行C程序的步骤MicrosoftC是微软公司为IBM系列微机开发的C编译系统 MSC6 0版本提供了多个库函数 老版本的MSC采用基于DOS平台的命令行方式 MSC6 0增加了基于鼠标和窗口的 程序员工作台 programmer sworkbench 缩写为PWB 它也是一个集成环境 MSC也是人们常用的C编译系统之一 目前 大多数使用MSC的人习惯用命令行方式 因此我们在这里只简单地介绍命令行方式的用法 1 编辑C源程序 可以用任何全屏幕编辑系统输入和编辑源程序 假设已输入和编辑好的源文件名为a1 c 2 编译和连接 MSC提供了一个功能很强的CL命令 可一次完成程序的编译和连接 CL是Compile和Link的第一个字母 用法如下 CLa1 c 对源程序a1 c进行编译和连接 如果在编译和连接时出现 出错信息 则需要重新编辑 修改 源程序 编译和连接完成后 产生一个可执行文件a1 exe 3 执行程序 只需输入可执行文件名 a1 即可得到运行结果 以上步骤只需上机试一下 即可明白 习题1 1请根据自己的认识 写出C语言的主要特点 1 2C语言的主要用途是什么 它和其他高级语言有什么异同 1 3写出一个C程序的构成 1 4C语言以函数为程序的基本单位 有什么好处 1 5请参照本章例题 编写一个C程序 输出以下信息 Verygood 1 6编写一个C程序 输入a b c3个值 输出其中最大者 1 7上机运行本章3个例题 熟悉所用系统的上机方法与步骤 1 8上机运行本章习题1 5和1 6
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!