清华大学计算机程序设计基础_12
计算机基础与C语言程序设计(第四版)

教材目录
(注:目录排版顺序为从左列至右列)
教材资源
配套资源
配套教材
《计算机基础与C语言程序设计(第四版)》配套的电子课件、习题答案和实例源文件。
该教材有配套教材——《计算机基础与C语言程序设计实验指导(第四版)》。
教材特色
(1)对C语言中的重点、难点进行分解,将重点、难点分散编排,使学生在学习过程中循序渐进。
计算机基础与C语言程序设计(第四 版)
清华大学出版的图书
01 成书过程
03 教材目录 05 教材特色
目录
02 内容简介 04 教材资源 06 作者简介
《计算机基础与C语言程序设计(第四版)》是焉德军、刘明才主编,清华大学出版社于2021年8月1日出版 的高等院校计算机应用系列教材、辽宁省“十二五”普通高等教育本科省级规划教材。该教材既可作为高等院校 非计算机专业的C语言程序设计课程的教学用书,也可作为报考全国计算机等级考试(NCRE)人员的参考资料C语言程序设计”课程的教学工作,在总结多年的教学经 验和教改实践的基础上编写而成。
该教材由焉德军、刘明才任主编,辛慧杰、王鹏任副主编。第1章由辛慧杰编写,第2~6章由焉德军编写,第 7~10章由刘明才编写,第11章由王鹏编写。
2021年8月1日,该教材由清华大学出版社出版。
作者简介
焉德军,大连民族大学计算机科学与工程学院教授、副院长。研究方向:混沌与分形理论与应用、大数 据。
刘明才,大连民族大学计算机科学与工程学院教师。 辛慧杰,大连民族大学计算机科学与工程学院讲师。 王鹏,大连民族大学计算机科学与工程学院讲师。
谢谢观看
内容简介
该教材共11章。第1章介绍计算机系统与工作原理、数制与编码;第2章介绍C程序的基本构成和简单的C程序 示例;第3章介绍基本数据类型、常用的输入输出函数;第4章介绍各种运算符和表达式;第5章介绍C语言的控制 结构(顺序结构、选择结构、循环结构);第6章介绍数组的使用及常用字符串处理函数;第7章介绍函数的使用 及变量的存储类别;第8章介绍编译预处理命令;第9章介绍指针的使用方法;第10章介绍结构体和共用体的使用 以及链表及其操作;第11章介绍文件的类型和操作。
清华大学计算机科学与技术专业课程表

信息学院本科指导性教学计划(公共课)第一学年秋季学期课号课程名学分周学时考试或考查说明及主要先修课10610022思想道德修养22考查10640433英语选修22考查10420874一元微积分44考试10420684几何与代数(1)44考试20240013离散数学(1)33考试20230093计算机语言与程序计33考试30250023计算机语言与程序计33考试30240233程序设计基础33考试四选一34100063程序设计基础33考试30210041信息科学技术概论11考查春季学期00501622毛泽东思想概论32考试10640443英语选修22考查10420884多元微积分44考试一元微积分10420692几何与代数(2)22考试几何与代数(1) 二选一10420913几何与代数(2)33考试几何与代数(1)10430484大学物理B(1)44考试一元微积分10430344大学物理(1)(英)44考试一元微积分三选一10430525大学物理A(1)55考试一元微积分20220214电路原理44考试20220221电路原理实验11考查第二学年秋季学期课号课程名学分周学考试或考查说明及主要先修课10420753高等微积分22考试一元微积分10420252复变函数引论22考试一元微积分二选一复变函数33考试一元微积分10430535大学物理A(2)55考试大学物理A(2)20250093电子技术基础33考试电路原理二选一30230563数字逻辑电路33考试电路原理电子技术基础实验22考查跨学期课,本学期完成1学分10420262数理方程引论22考查不修该课程20130342工程图学基础22考试春季学期10420243随机数学方法33考试二选一10420803概率论与数理统计33考试数字逻辑电路33考试电路原理电子技术基础电子技术系列实验22考查跨学期课,本学期完成1学分30230104信号与系统44考试微积分电路复二选一40250144信号与系统分析44考试变几何与代数40240013系统分析与控制33考试微积分电路复二选一40250074自动控制理论(1)44考试变几何与代数3025数据结构33考试四选一34100044数据结构与算法44考试微电子学导论33考试半导体器件与集成电路33考试三选一集成电路原理与设计33考试物理、生物类课程≥2220240023离散数学(2)(选)33考试夏季学期电子技术课程设计33考查电子技术基础Java语言(选)22考查计算机语言与程序设计二选一语言(选)22考查计算机语言与程序设计第三学年秋季学期课号课程名学分周学时考试或考查说明及主要先修课汇编语言程序设计33考试40240354计算机组成原理44考试汇编语言程序设计数字电子技术基础40240432形式语言与自动机22考试3024信号处理原理44考试微积分电路复变几何与代以下专业方向课选修不少于3学分30240262数据库系统原理22考试数据结构30240042人工智能导论22考试离散数学30240222VLSI设计导论22考查数字逻辑与数字电路网络编程与计算技术22考查40240642现代控制技术22考查自动控制理论(1)春季学期10610053马克思主义哲学原理32考试30240243操作系统33考试计算机组成原理40240144编译原理33考试数据结构、汇编语言程序设计40240433计算机系统结构33考试计算机组成原理20240433数值分析(选)或同组其它数学类课33考试微积分、线性代数体育专项(2)以下专业方向课选修不少于3学分40240412数字系统设计自动化22考查数字逻辑与数字电路40240392多媒体技术基础及应用22考查40240452模式识别22考查概率与统计初等数论及其应用22考试30240253微计算机技术33考试计算机组成原理、汇编语言程序设计40240422计算机图形学基础22考查数据结构30230313通信电路33考试电子技术基础数字逻辑电路30240163软件工程33考试数据结构第四学年秋季学期课号课程名学分周学时考试或考查说明及主要先修课40240243计算机网络33考试必修操作系统30210033通信原理33考试必修二选一30230343现代通信原理33考试必修通信电路计算机网络专题训练11B34:专业专题训练≥4≥4体育专项(3)人文选修课≥6≥6见全校性选修课选课手册以下专业方向课选修不少于4学分30240192高性能计算导论22考查22考查﹡模式识别基础40240062数字图像处理22考查22考查40240362电子商务平台及核心技术33考试40240472计算机实时图形和动画技术40240372信息检索22考查数据结构40240402虚拟现实22考查40240492数据挖掘22考试40240502软件开发方法22考试嵌入式系统33考试操作系统合计≥21≥21 春季学期综合论文训练1015周必修体育专项(4)选修注:带*者为院平台课,可在信息学院范围内选修不低于所列学分的同类课程计算机科学与技术专业核心课程6 门,17学分课号课程名学分先修要求40240433计算机系统结构3(春)操作系统30240243操作系统3(春)计算机组成原理,数据结构40240144编译原理4(春)数据结构40240243计算机网络3(秋)操作系统40240432形式语言与自动机2(秋)离散数学(1)20240103汇编语言程序设计3(秋)计算机科学与技术专业限选课不少于11学分,其中:计算机系统结构-----计算机科学与技术专业选修不少于2学分课号课程名学分先修要求30240253微计算机技术3汇编语言程序设计嵌入式系统3计算机组成原理操作系统40240412数字系统设计自动化2数字逻辑电路30240222VLSI设计导论2数字逻辑电路计算机软件与理论---计算机科学与技术专业选修不少于2学分课号课程名学分先修要求初等数论及其应用2离散数学30240192高性能计算导论2(英语讲课)计算机系统结构30240262数据库系统原理2数据结构网络编程与计算技术2计算机组成原理软件开发方法2C++ 数据结构软件工程30240134软件工程3C++数据结构计算机应用技术-----计算机科学与技术专业选修不少于2学分课号课程名学分先修要求30240042人工智能导论2离散数学40240452模式识别2几何与代数概率与统计人工智能导论40240062数字图象处理2概率与统计程序设计基础40240392多媒体技术基础及应用2信号处理原理40240422计算机图形学基础2数据结构40240472计算机实时图形和动画2几何与代数技术40240402虚拟现实2计算机组成原理40240462现代控制技术2系统分析与控制40240372信息检索2数据结构40240362电子商务平台及核心技术2数据结构JAVA程序设计数据库系统原理40240492数据挖掘2数据库系统原理计算机科学与技术专业专题训练不少于5学分,其中计算机网络专题训练为必选课号课程名学分先修要求计算机网络专题训练1(秋)操作系统专题训练2(秋)编译原理专题训练2(秋)数据库专题训练2(秋)计算机科学与技术专业的任选课程课号课程名学分先修要求30240253微计算机技术3汇编语言程序设计初等数论及其应用2离散数学网络编程与计算技术2计算机组成原理30240134软件工程3C++数据结构30240042人工智能导论2离散数学40240452模式识别2几何与代数概率与统计人工智能导论40240062数字图象处理2概率与统计程序设计基础40240392多媒体技术基础及应用2信号处理原理40240422计算机图形学基础2数据结构40240472计算机实时图形和动画技术2几何与代数40240402虚拟现实2计算机组成原理40240462现代控制技术2系统分析与控制40240372信息检索2数据结构40240362电子商务平台及核心技术2数据结构JAVA程序设计数据库系统原理40240492数据挖掘2数据库系统原理计算机科学与技术专业 业务培养目标:本专业培养具有良好的科学素养,系统地、较好地掌握计算机科学与技术包括计算机硬件、软件与应用的基本理论、基本知识和基本技能与方法,能在科研部门、教育单位、企业、事业、技术和行政管理部门等单位从事计算机教学、科学研究和应用的计算机科学与技术学科的高级专门科学技术人才。
清华大学“C语言程序设计”期末试卷

样例: 输入 1 2 -4 0 32 1 -2 2 输出 3 -4+x^2
第三部分
综合问题 (任选一题完成,共 10 分)
3-A. 代数式处理 ( 3-A.cpp ) 读入一个仅含变量 x 的代数式和 x 的值, 输出该式在 x=x0 处的函数值和导函数的值。 表达式中除了字母 x 和+, -, *, /, (, )外没有其他字符
试卷说明: 考试形式为上机考试,考试时间总计 3 小时 请在 C 盘根目录下建立一个子目录,以自己的学号命名,并将所有的程序存入 此目录。如,学号为 010000 的同学,需要建立目录 C:\010000,并将程序存入 此目录。按照题目名称中指定文件名保存你的程序,并保存一个备份,以免程 序被意外破坏。例如,第一题应当保存一个叫做 1-1bak.cpp 的文件。 3-A 和 3-B 最多只能选择一道题目。如果同时存在 3-A.cpp 和 3-B.cpp,我们将 随机选择一道题目进行评分。 所有题目采用键盘输入和屏幕输出,你的程序不得访问任何文件。 评分时将查看源程序,请严格遵守题目中给出的限制。
输入: 先读入一个字符串,字符总数不超过 100 并且不会有格式错误的代数式。 然后读入一实数作为 x0 的值。
输出:
7
包含两个实数,分别是函数值和导函数值。把所得结果保留 2 位小数输出。如果出 现分母为 0 的情况则只输出一个字符串"error"。
样例: 输入 x*(x+x/x) 100 输出 10100.00 201.00
输入: 第 1 行为一个整数 t,表示任务的类型,t=1 表示做加法,t=2 表示做减法。 第 2 行为 1 个整数 n,表示需要计算的数的位数。 以后 n 行,每行为 2 个数字,分别是同一位上的被加数和加数(当 t=1 时);或被 减数和减数(当 t=2 时)。从第 3 行起,位数依次由高到低,第 3 行为最高位,第 n+2 行为最低位。
大学计算机基础教程(第二版)

该是2012年广东省高等学校教学质量与教学改革工程专项资金资助项目研究成果之一。
大学计算机基础教程(第二版)
20xx年清华大学出版社出版的图书
01 成书过程
03 教材目录 05 教材特色
目录
02 内容简介 04 教学资源 06 作者简介
《大学计算机基础教程(第二版)》是徐红云主编,2014年清华大学出版社出版的普通高等教育"十一五"国 家级规划教材、计算机系列教材。该教材可作为高等学校非计算机专业的大学计算机基础、计算机技术导论、计 算机实用技术等课程的教材,也可以供其他读者作为学习参考用书。
该教材内容主要围绕计算机技术的系统平台、程序设计基础、数据分析与信息处理、信息系统开发四大领域 的基础知识与基本技术来组织。
成书过程
修订情况
出版工作
该教材是是参照教育部计算机基础课程教学指导委员会2009年提出的计算机基础课程教学基本要求的主要思 想进行编写的。
该教材与前一版相比,主要有以下修改:
教材目录
(注:目录排版顺序为从左列至右列 )
教学资源
ห้องสมุดไป่ตู้
该教材配有辅助教材《大学计算机基础实验指导与习题集(第二版)》。 该教材还配有电子课件、习题解答、实验的操作录像。
教材特色
该教材在内容选取上,以介绍计算机的基本理论知识和计算思维方式为主,而软件与工具则是以有关理论技 术应用的实例形式出现,比如Windows7是在介绍了操作系统的概念、功能后,列举的一种具体的操作系统,又如 PhotoshopCS6则是以多媒体技术应用中实现图片编辑的一种工具的形式出现,这样使读者对计算机基本理论和技 术有一个整体的概念和宏观的认识。
清华大学计算机系列教材.

数据的结构的表示:
顺序存储结构
链式存储结构 顺序映象——是借助元素在存储器中的相对位置来表示数据元素之 间的逻辑关系。 非顺序映象——是借助指针表示数据元素之间的逻辑关系。 例子:表示复数z1=3.0-2.3i和z2=-0.7+4.8i … … 0415 -2.3 0300 3.0 -2.3 0302 … … 0632 -0.7 3.0 0611 4.8 0634 0613 0415 … …
/ mod
18
逻辑结构的描述——二元组(D,S) 数据结构
(存储结构+操作)的描述——高级语言中的“数据类型
定义 抽象数据 类型ADT 表示 实现
——三元组(D,S,P)
19
抽象数据类型的形式定义-----三元组: (D,S,P) D – 数据对象; S – D上的关系; P – 对D的基本操作集;
24
IsDescending(T) 初始条件: 三元组T已经存在。 操作结果: 如果三元组T的三个元素按降序排列,则 返回TRUE; 否则返回FALSE。 Max(T,&e) 初始条件: 三元组T已经存在,。 操作结果: 用e返回三元组T的最大值。 Min(T,&e) 初始条件: 三元组T已经存在,。 操作结果: 用e返回三元组T的最小值。
S01 L01 S01 S02 …
001,… 003,…
… … … … … L
S …
高等数学 001,003,… 理论力学 002,…
002,…
001,003,…
线性代数 004,…
…
栾汝书 004,…
计算机处理的对象之间存在着一种简单的线性关系,称为线性 7 数据结构。
例子2:计算机和人对奕问题。 × × × × × ×
Visual Basic程序设计基础教程

1.3.5 常用工作窗口
1.工程(Project)资源管理器窗口
工程是指用于创建一个应用程序的文件的集合。工程 资源管理器列出了当前工程中的窗体和模块
这些文件包括:窗体文件 (.FRM)、标准模块文件 (.BAS)、类模块文件(.CLS)、 工程文件(.VBP)、工程组文件 (.VBG)、资源文件(.RES)
4. 编写程序代码(事件响应代码)
对象名称
Command1 Command2 Command3 Form
事件
单击(Click) 单击(Click) 单击(Click) 装入(Load)
响应
将窗体的背景设置为白色 将窗体中文本的颜色设置为红色 结束程序运行 显示“VB程序设计示例”
双击
5. 保存程序
如:工程1—Microsoft Visual Basic(设计) 方括号中的“设计”表示处于设计阶段,随着工作状态
的不同,括号内的信息可能是:“运行”,表示处于程序运 行阶段;“Break”表示处于程序中断阶段。这三个阶段也称 为设计模式、运行模式和中断模式。
1. 设计模式:可进行用户界面的设计和代码的编制。 2. 运行模式:运行应用程序,不可编辑代码和界面。 3. 中断模式:中断运行,可编辑代码,但不可编辑界面。
“工程资源管理器窗口”中 还有三个按钮:
• “查看代码”:用于查看相应文件的程序代码。 • “查看对象”:用于查看相应的窗体。 • “切换文件夹”:用于查看文件所在的文件夹。
1.3.5 常用工作窗口
窗体设计器窗口 它是设计程序时主要操作的窗口,设计程序的第一步,
就是在该窗口中绘制各种控件,窗口显示的也就是程序运行 的界面。
1.1.1 基本术语 1.1.2 程序设计语言 1.1.3 程序的基本结构 1.1.4 程序设计的一般步骤
c语言ppt

2
教学目标: • 了解计算机程序和语言的概念; • 了解C语言的基本构成; • 掌握C程序的运行步骤。 本章重点: • 计算机程序和计算机语言的概念;程序设计的基 本任务;C语言程序的基本构成;运行C程序的步 骤和方法。 本章难点: • C语言程序的基本构成;运行C程序的步骤和方法。
《程序设计基础(C语言)》
《程序设计基础(C语言)》
10
• 编译方式使用编译程序(编译器)。在应用程序 执行之前,就将程序源代码翻译成目标代码(机 器语言),因此其目标程序可以脱离其语言环境 而反复独立执行,使用比较方便、运行效率较高 ,但一旦应用程序需要修改时,必须先修改其源 代码,再重新编译生成新的目标程序才能执行, 很不方便。编译型高级语言有很多,例如Visual C++、Visual FoxPro、Delphi等。
《程序设计基础(C语言)》
• 1995年,ISO对C90做了一些修订,即“1995基准 增补 1(ISO/IEC 9899/AMD1:1995)”。1999年, ISO又对C语言标准进行修订,在基本保留原来的C 语言特征的基础上,针对应用的需要,增加了一 些功能,尤其是C++中的一些功能,命名为 ISO/IEC 9899:1999。2001年和2004年先后进行了 两次技术修正,即2001年的TC1和2004年的TC2。 ISO/IEC 9899:1999及其技术修正被称为C99,C99 是C89(及1995基准增补1)的扩充。 • 本书以C99标准为依据,为了与C89作比较,在本 书的叙述中对C99新增加的功能作特别的说明。
《程序设计基础(C语言)》1.4.2 C和C++
• C++语言是在C语言的基础上,添加了面向对象、 模板等现代程序设计语言的特性而发展起来的。 C++吸收了C语言的诸多优点,同时又添加了面向 对象程序设计的新理念,非常适用于开发复杂的 大型软件,这也是它成为主流程序设计语言的主 要原因。 • 但是,C语言兼顾了接近底层和高性能这两个显著 特性,同时又比C++语言更加简洁,随着当今世界 嵌入式开发技术的发展、大型算法的应用,特别 是搜索引擎、云计算的兴起,C语言的用武之地不 但没有萎缩,反而有逐渐扩展的趋势。
大学计算机基础教程(清华大学出版社)课后习题答案(全)

大学计算机基础教程习题参考答案习题11.1 选择题1. 美国宾夕法尼亚大学1946年研制成功的一台大型通用数字电子计算机,名称是( C)。
A) Pentium B) IBM PC C) ENIAC D) Apple2.1981年IBM公司推出了第一台(B)位个人计算机IBM PC5150。
A) 8 B) 16 C) 32 D) 643. 中国大陆1985年自行研制成功了第一台PC 兼容机,即(C)0520微机。
A) 联想B) 方正C) 长城D)银河4. 摩尔定律主要内容是指,微型片上集成的晶体管数目每(C)个月翻一番。
A) 6 B) 12 C) 18 D) 245. 第四代计算机采用大规模和超大规模( C)作为主要电子元件。
A) 电子管B) 晶体管C)集成电路D)微处理器6. 计算机中最重要的核心部件是( B)。
A) DRAM B) CPU C) CRT D) ROM7. 将微机或某个微机核心部件安装在某个专用设备之内,这样的系统称为(C)。
A) 大型计算机B) 服务器C) 嵌入式系统D)网络8. 冯.诺依曼计算机包括,(B)、控制器、存储器、输入设备和输出设备五大部分组成。
A) 显示器B)运算器C)处理器D)扫描仪9.从市场产品来看,计算机大致可以分为大型计算机、(C)和嵌入式系统三类A) 工业PC B) 服务器C) 微机D) 笔记本微机10.大型集群计算机技术是利用许多台单独的(B)组成的一个计算机系统,该系统能够像一台机器那样工作。
A) CPU B) 计算机C) ROM D)CRT1.2 填空题1. 计算机的发展经历了(电子管)、(晶体管)、(集成电路)和(大规模集成电路)四代变迁。
2.未来的计算机可能朝着(量子计算机)、(光子计算机)、(生物计算机)等方向发展。
3. 计算机系统是由(硬件系统)、(软件系统)两部分组成的。
4. 从目前市场上产品来看,微机包括(个人计算机)、(苹果系列微机)、(一体微机)、(笔记本微机)、(平板微机)、(掌上微机)和PC 服务器等几种。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
清华大学 黄维通 设计制作
3
栈的基本操作有: l ClearStack(&S):清空一个栈; l GetTop(S, &e):获取栈顶元素(不删 除该栈顶元素); l Pop(S, &e):获取栈顶元素但同时删 除该元素; l Push(&S, e):向栈顶插入一个元素; l Empty(S):判断是否为空栈的函数。 当S为空栈时,返回true,否则返回false
清华大学 黄维通 设计制作
9
(3) 获取栈顶元素但同时删除该元素 void Pop(Stack s, TYPE * element) { if (Empty(s)) element = NULL; else { *element = s->element; s = s->next; } }
(4) 向栈顶插入一个元素的操作 void Push(Stack s, TYPE element) { Node * node; node = malloc(sizeof(Node)); node->field = element; node->next = s; s = node; } (5) 判断是否为空栈的操作 int Empty(Stack s) { return (s == NULL); }
清华大学 黄维通 设计制作
13
void Pop(Stack * s, TYPE * element) //获取栈顶元素但同时删除该元素 {if(Empty(*s) )element = NULL; else { *element = s->element[s->top]; s->top--; } } void Push(Stack * s, TYPE element) //向栈顶插入一个元素 { if(s->top == MAXLENGTH-1) return; else { s->top++; s->element[s->top]=element; } }
清华大学 黄维通 设计制作
15
括号匹配的检验
在编译C语言的源程序时,要对括号进行配对检查,如:
[( [ ] [ ] { } ) ] 1 2 3 4 5 6 7 8 9 10
[ ( [ 1、2、3 4 ] ( [ [ ( [ 5 6 ] ( [ { ( } ( [ 8 9 [ 10 ) ]
[
7
接收1时,就等待第10 ,然而等来的是2,2又等9,…全部配套 后,编译通过,否则出现错误提示。 每读入一个括号,若是右括号,则使栈顶的最急迫的期待 得以消除,若是不合法的情况,如是左括号,则作为一个新的 ,更急迫的期待压入栈中。
•
(8) (n-2) (9) (n-1) (10) n
3 2 1
(n-2)! (n-1)! n!
19
清华大学 黄维通 设计制作
4
栈的基本操作
Top为栈顶指针,随 着不同操作而移动 top bottom 空栈 增加元素 top bottom
top top bottom
清华大学 黄维通 设计制作
bottom
5
删除元素
12.2 栈的实现
栈是一种特殊的表,因此凡是 可以用来实现表的数据结构都可以 用来实现栈。
清华大学 黄维通 设计制作
18
栈的应用--递归编程的应用
常见的阶乘运算的编程,可以引入栈的应用
栈顶元 素为1
fac( int n) { float f; if(n==1||n==0) f=1; else f=n*fac(n-1); return(f); }
清华大学 黄维通 设计制作
例:求10!
n
1!
清华大学 黄维通 设计制作
14
void conversion() //进制转换 {Stack s; int dec; ClearStack(&s); scanf("%d",&dec); while( dec > 0) { Push(&s, dec % 2); dec=dec/2;} while(!Empty(s)) { Pop(&s,&dec); printf("%d",dec);} printf("\n"); }
清华大学 黄维通 设计制作
8
ቤተ መጻሕፍቲ ባይዱ
(1) 清空一个栈的操作 void ClearStack(Stack s) { Node * p = s; while(p != NULL) { s = s->next; free(p); s = NULL; }
p = s; }
(2) 获取栈顶元素的操作 void GetTop(Stack s, TYPE * element) { if(Empty(s)) element = NULL; else *element = s->element; }
清华大学 黄维通 设计制作
16
行编辑程序
简单的行编辑器的 功能是接收用户从终端 输入的程序或者数据并 存入用户的数据区。 用户编辑的特点: • 输入时不能不出错 • 若输入一个字即送入用户数据区,显然 是不恰当的最好是一行输入一次数据区 • 应该允许用户及时修改当前行的错误 假定从终端输入如下的字符: whab##ile(s# *s) outcha@putchar(*s=#++)
第12章 栈及其应用
清华大学 黄维通 设计制作
1
本章主要内容
• 栈的定义及其基本操作 • 栈的实现 • 进制转换--栈的应用实例
清华大学 黄维通 设计制作
2
12.1 栈的定义及其基本操作
栈是一种只允许在栈顶进行插入和删除 操作的线性表,可用数组或线性表来实现
出栈 入栈
栈顶
an a n -1
a1 栈底 a0
清华大学 黄维通 设计制作
6
12.2.1 栈的数组实现
#define MAXLENGTH 256
#define TYPE int struct TStack { int top; TYPE element[MAXLENGTH]; }; typedef struct TStack Stack;
清华大学 黄维通 设计制作
清华大学 黄维通 设计制作
12
void ClearStack(Stack *s) { s->top = -1; } int Empty(Stack s) { if (s.top == -1) else return 0; }
//清空栈
//判断是否为空栈 return 1;
void GetTop(Stack s, TYPE * element) //获取栈顶元素 { if(Empty(s)) element = NULL; else *element=s.element[s.top]; }
7
12.2.2 栈的链式存储实现
链式存储栈的类型说明如下: #define TYPE int //定义任意类型的栈结构 struct TNode {TYPE field; //TYPE泛指任意可能的类型 struct TNode * next; }; typedef struct TNode * Stack; //定义一个Stack栈
假定 #:退格 @:退行,当前行无效
过程:先判断它是否是退格符或者 退行符,若不是,就将字符压入栈 顶。 若是退格符:从栈顶删除一个字符 若是退行符:将字符栈清为空栈
清华大学 黄维通 设计制作
while(*s) putchar(*s++)
17
接收用户输入的数据,存入用户的数据区 “ #”表示退格符,“ @”表示退行符。 void LineEdit() {InitStack(S); // 构造空栈 ch=getchar(); // 从终端接收一个字符 while(ch!=EOF) // EOF为全文结束符 {while(ch!=EOF && ch!='\n') {switch (ch) {case ‘#’:Pop(S,c); break; //退格,删除栈顶元素 case ‘@’:ClearStack(S); break; //当前行无效 default:Push(S,ch);break; } //插入ch为新的栈顶元素 ch=getchar(); //接收下一个字符 } ClearStack(S);//重置S为空栈,以便重新放入行内容 if(ch!=EOF) ch=getchar(); } DestroyStack(S); //销毁栈,栈不再存在 }
清华大学 黄维通 设计制作
10
12.3进制转换--栈的应用实例
(1) 算法
清华大学 黄维通 设计制作
11
12.3.2 算法的实现
例:(15)10=(1111)2
#include <stdio.h> #include <stdlib.h> #define MAXLENGTH 32 #define TYPE int struct TStack //定义栈结构 { int top; TYPE element[MAXLENGTH]; }; typedef struct TStack Stack;