当前课程知识点:C++语言程序设计基础 > 第1章 绪论 > 程序的开发过程 > 程序的开发过程
程序的开发过程
l源程序:
n用源语言写的,有待翻译的程序;
l目标程序:
n源程序通过翻译程序加工以后生成的机器语言程序;
l可执行程序:
n连接目标程序以及库中的某些文件,生成的一个可执行文件;
n例如:Windows系统平台上的.EXE文件。
l汇编程序:
n将汇编语言源程序翻译成目标程序;
l编译程序:
n将高级语言源程序翻译成目标程序;
l解释程序:
n将高级语言源程序翻译成机器指令,边翻译边执行。
l算法与数据结构设计;
l源程序编辑;
l编译;
l连接;
l测试;
l调试。
大家好欢迎继续学习
C++语言程序设计
接下来这一讲呢
我来介绍程序的开发过程
学完这一章以后呢
从下一章开始
我们就要开始写程序了
所以现在我们大致要了解一下
一个C++程序的开发过程
是什么样的
那么程序我们知道
它分成机器语言程序
汇编语言程序和高级语言程序
那我们要写的是高级语言程序
计算机硬件系统它能够理解的
只有二进制的机器语言代码
我们喜欢用的是高级语言
中间距离这么远怎么办
高级语言我说了
是类似于英语的单词语句
数学中的式子
这样的东西构成的程序
那它不是0和1构成的代码
机器怎么认得呢
这中间就要有一个过程
要有翻译程序
替我们来做一些事情
所以我们自己写的高级语言程序
叫做高级语言源程序
要把它变成二进制的指令
机器才能识别
把它翻译成二进制的代码以后
叫做目标程序
它已经是完全的机器源指令
是二进制的了
那是不是翻译成二进制代码
就可以直接运行了呢
那我们考虑
一个程序如果比较大的话
它可能有多个模块来协作
说我程序很小很简单
是不是直接把高级语言程序
翻译成二进制就可以了也不是
对于一些常用的
你每次亲自写又比较麻烦的
这样的功能
所有的高级语言几乎都会配套
跟这个编译器一起配套
有程序库
替你把这些常用的模块
都已经先做好了
比如说我们想往显示器送信息
这样一件事
就已经有预先编译
已经翻译成二进制的模块
放在程序库里面了
那我们写高级语言程序的时候
写C++程序的时候
直接就说我要向显示器写东西
我把那个模块拿来
你替我完成吧
就这么一件简单的事情就完成了
那所以说呢
我们写的程序
和编译器带的这个程序库里面的
我们要用得着
要调用的模块要合在一起
才能构成一个可以执行的程序
这个就是程序的连接过程
连接完了以后
形成一个可执行程序
那说到翻译
就要有翻译工具
翻译工具分成三类
一类是汇编程序
一类是编译程序
一类是解释程序
汇编程序是干什么呢
就是把我们用汇编语言写的那些
注记符翻译成机器语言的
二进制代码
编译程序就是我们这门课要用的
写C++程序
要另外一个编译工具
也叫编译系统也叫编译环境
实际上就是编译程序
来为我们做翻译
把高级语言的语句
翻译成二进制的代码
那么解释程序是什么呢
它也是用来
高级语言的解释程序
也是用来处理高级语言的
也要做翻译
只不过它与编译的差别在于什么
什么时候翻译
翻译多少次
我们当然希望说
我这程序都不动了
都固定好了也不再修改了
你翻译一次放在那儿
每次我就执行它多好啊
效率多高啊
编译指
我们的编译程序就是干这个的
那么解释程序呢不是
它翻译一条送去执行一条
翻译一条送给计算机执行一条
一条一条语句来翻译
那么好
我执行完了一遍
下次再执行要不要重翻译
重新来又解释一遍
翻译一条又叫做解释一条
执行一条解释一条执行一条
那这样它的执行效率就比较低
不管你这个解释程序
说我翻译的速度非常非常快
基本上不占时间
那你也比那个没有要占点时间吧
每次运行你都要现翻译现执行
那效率肯定低
有这样三类翻译程序
大家现在一定有一个疑问
迫不及待的有一个疑问
那干吗呀
要那解释程序干吗呀
都编译不是挺好的吗
一个工具它存在一定有它的道理
不然它早就消亡了
就不存在了
目前一个非常非常流行的语言
就是用半编译半解释的方式的
有很多同学知道吧 Java语言
大家知道Java语言很好
可以跨平台写网络应用程序
为什么它为什么能跨平台
比如说我们现在用的
这个装Windows平台的这台机器
和另外一个装苹果系统的机器
还有你装Linux系统的
它所能够运行的可执行程序
是不同的
你要为不同的系统
去编译连接形成它本地系统上
可执行的这个程序
大家都有这个经验
你要在mac平台上运行
你要专门去下载
适合那个平台的软件
你把Windows平台的软件
直接装到mac平台上
是装不上去的
所以一个软件
它对于不同的平台
它做不同的版本
那为什么Java程序
就可以到处运行
一次编写多处执行
它是用半编译半解释的方式
它是把Java源代码
编译程一个中间的二进制码
它也是二进制的
这个中间二进制码是给谁用的
给Java虚拟机用的
Java虚拟机就是
装在宿主系统上面的
装在宿主机上面的
一个用软件模拟的机器
就叫虚拟机
实际上它的很大一部分作用
是在做解释
那么把Java程序写好了以后
编译成中间的二进制代码
那是什么
是所有的平台上的Java虚拟机
的统一标准代码
都可以识别的二进制代码
然后每一个系统上的Java虚拟机
再把已经变成二进制代码的
这个程序再解释一遍
转换成真正本地系统可以识别的
可以执行的这个二进制指令
所以Java程序是半编译半解释的
而C++程序呢
是直接编译成本地平台
可执行的程序的
这是这几种翻译程序
它的不同点
那么就要经过这样几个过程
先进行算法设计
设计好你的方法
算法设计非常的重要
经常有初学程序设计的同学
说我怎么觉得程序设计这么难呢
我本来人工是会做的
那么让我写程序我就不会
实际上呢
你人工可能会做
一件一件具体事情
但是你要让计算机去替你做
这些事情
你要教会它
你不能一时一式只教它
这一件事情怎么做
如果只教它这一件事情怎么做
你去写个程序
不如你自己去做就做完了
你一定要教它同一类事情怎么做
所以你要归纳你的解决问题方法
这就是要把算法写出来
当然不是我们学了
一门程序设计课
就可以写所有复杂算法的
还有其他的算法可以要学
比如说非数值算法呢
你要学数据结构课
数值算法呢
你要学数值计算的课程
还有很多其他课程
都会在里面有讲算法
那么在我们这门课里呢
你能够对于一般的简单问题
自己设计好解决问题步骤就行了
那么这是算法设计
算法设计好了
你要用这种程序语言
把算法描述出来
然后把它输入到计算机里面去
这是一个编辑过程
而用任何一个编辑器都可以
但一般来说呢
你的编译系统会自带一个
比较好用的编辑器
编辑完了以后就要编译
编译的过程不是说你写什么
编译器就给你翻译什么
你得写的对
你的语法要是写得不对
那编译器就翻译不了
怎么办呢
编译器它会先给你做语法检查
然后告诉你哪句哪句错了
哪句哪句错了指出错误
然后这时候你去修改错误
把错误修改完了
好你完全符合语法规定了
没有错误了它就给你翻译
就进行编译
编译完了再进行连接
刚才我说这个连接
就是把其他的人分工的
不同的模块合在一起
把你调用的程序库里面的模块
合在一起
形成一个可执行的程序
那么到这个时候
是不是就万事大吉了呢
远远没有到
我们写第一个程序的时候
好不容易编译成功了
连接成功了能执行了
可高兴了但是不要高兴太早
执行以后你要看运行结果对不对
不对还要修改
怎么去看运行结果对不对呢
初学的人直观的会感觉到
这个结果对那个结果不对
实际上我们一个程序写好了以后
要经过测试的
用各种数据去试它
那么测试有测试的规则
大家会在软件工程课里面学到
经过测试后发现程序
好像某些数据给它的时候
它输出的结果是不对的
那怎么办呢要找原因
这个过程要调试
所以调试就是找到错误的原因
并且把它修改好
所以最后运行调试
然后这才是一个程序的
完整的开发过程
-导学
--第1章导学
-计算机系统简介
--计算机系统简介
--计算机系统简介 测试题
-计算机语言和程序设计方法的发展
--计算机语言和程序设计方法的发展 测试题
-面向对象的基本概念
--面向对象的基本概念 测试题
-程序的开发过程
--程序的开发过程
--程序的开发过程 测试题
-信息的表示和储存
--计算机的数字系统
--数据的编码表示
--信息的表示和储存 测试题
-实验指导
-导学
--第二章导学
-C++语言概述
--C++语言概述 测试题
-基本数据类型、常量、变量
--程序举例
--基本数据类型、常量、变量 测试题
-运算与表达式
--运算与表达式 测试题
-实验二:简单程序设计(上)
-数据的输入和输出
--数据的输入和输出
--数据的输入和输出 测试题
-选择结构
--if语句
--switch语句
--选择结构 测试题
-循环结构
--for语句
--循环结构 测试题
-自定义类型
--自定义类型
--自定义类型
-第2章小结
--第二章小结
-实验二:C++简单程序设计(下)
-导学
--导学
-函数定义
--函数定义
--函数定义 测试题
-函数调用
--例3-2
--例3-3
--例3-4
--例3-5
--例3-6
--函数调用 测试题
-嵌套与递归
--例3-9
--例3-10
--嵌套与递归 测试题
-函数的参数传递
--函数的参数传递
--函数的参数传递 测试题
-引用类型
--引用类型 测试题
-含有可变参数的函数
--含有可变参数的函数 测试题
-内联函数
--内联函数 测试题
-constexpr函数
--CONSTEXPR函数课后习题
-带默认参数值的函数
--带默认参数值的函数 测试题
-函数重载
--函数重载 测试题
-C++系统函数
--C++系统函数习题
-第3章小结
--第三章小结
-实验三(上)函数的应用
-实验三(下)函数的应用
-导学
--导学
-面向对象程序的基本特点
--面向对象程序的基本特点 测试题
-类和对象
--类和对象的定义
--类和对象 测试题
-构造函数
--构造函数基本概念
--委托构造函数
--复制构造函数
--构造函数 测试题
-析构函数
--析构函数
--析构函数 测试题
-类的组合
--类的组合
--类的组合程序举例
--前向引用声明
--类的组合 测试题
-UML简介
--UML简介
--UML简介课后习题
-结构体与联合体
--结构体与联合体 测试题
-枚举类
--枚举类
--枚举类 测试题
-第4章小结
--第四章小结
-实验四(上)
--实验四(上)
-实验四(下)
--实验四(下)
-导学
--导学
-标识符的作用域与可见性
--标识符的作用域与可见性 测试题
-对象的生存期
--对象的生存期
--对象的生存期 测试题
-类的静态成员
--类的静态成员 测试题
-类的友元
--类的友元 测试题
-共享数据的保护
--共享数据的保护 测试题
-多文件结构和预编译命令
--多文件结构和预编译命令 测试题
-第5章小结
--小结
-实验五
--实验五
-导学
--导学
-数组的定义与初始化
--数组的定义与使用
--一维数组应用举例
--数组的定义与初始化 测试题
-数组作为函数的参数
--数组作为函数的参数 测试题
-对象数组
--对象数组
--对象数组 测试题
-基于范围的for循环
-指针的定义和运算
--指针的定义和运算 测试题
-综合实例
--综合实例
-实验六(上)
--实验六上
-指针与数组
--指针数组
--指针与数组 测试题
-指针与函数
--指针类型的函数
--指向函数的指针
--指针与函数 测试题
-对象指针
--对象指针
--对象指针 测试题
-动态内存分配
--动态内存分配 测试题
-智能指针
--智能指针
-vector对象
--vector对象
--vector对象 测试题
-对象复制与移动
--移动构造
--对象复制与移动 测试题
-字符串
--C风格字符串
--string类
--字符串 测试题
-第6章小结
--第六章小结
-综合实例
--综合实例
-实验六(下)
--实验六(下)