C++ 程序设计课程介绍

来源:互联网 发布:6379端口 编辑:程序博客网 时间:2024/05/05 01:10

 

 我在大学所学东西,在这倾我所有。简单说是我在大学的课件。也可以说是一个很实用的菜鸟入门课程。课程是IBM教程。§

  

课程介绍

使用书籍
  • IBM C、C++
  • Accelerated C++
       Practical Programming by Example – Andre Koenig, Barbara I. Moo
  • 其他编程工具书,在深入编程后逐步介绍
课程目的和要求
  • 了解程序设计的一般方法
  • 掌握编程语言基础
  • 了解面向对象编程的基本概念
  • 培养基础编码能力和逻辑思维能力

第一讲 C&C++编程介绍

内容安排
 
  • C,C++语言及其他编程语言的介绍
  • 程序设计工具
  • C 语言编程简介

程序语言的发展过程
  • 0和1。二进制是计算机唯一能识别的和执行的语言
  • 汇编程序语言。符号化的机器语言,用专门的翻译工具把符号翻译成机器语言
  • 高级程序设计语言。 接近自然语言和数学表达式。 常用的语言有:Basic,C,C++,Pascal,Java等等,需要翻译成计算机能够识别的机器语言。
  • 面向过程的语言(4GL)。只说明要完成一项任务,而不用说名怎样去做。如SQL
指令:指示不同的对象去完成同一件任务,需要发出不同的指令
程序:一序列的计算机指令,指示计算机去完成一项工作。如:
  • 输入X
  • 输入Y
  • 计算X+Y
  • 输出计算结果
程序语言:程序采用的语言。如:
    • 机器语言 0,1
    • 汇编语言:
    • C,Pascal,C++, JAVA, VB.NET ,C#
    • SQL
程序设计工具的作用
  • 编译(compile)——将程序翻译成机器语言
  • 查错——检查程序中的拼写错误和语法 错误
  • 可视化编程——所见即所得的控件编程
 
主要内容:
1. 简介
计算机主要用于解决大量的计算性问题--问题繁简不一:
  • 简单问题:计算一系列数的平均值
                     计算一定本金的利息收入
  • 复杂问题:如,对联立微分方程求解
                            计算矩阵的乘积
                            统计词典中某一词汇的出现频率
              包括:辨别个人的指纹或声音
                     模拟一场战争演习的状况
                     下一局高水平的国际象棋
  • 计算机的功能极为强大,它可以同时执行好几个任务。
  • 然而事实上,它仍只是一台机器,没有思考的能力。它只能实现由用户或程序交给它的命令。
  • 程序员不能给计算机性质不明的命令。所以所有命令都应明确且详细定义过。
  • 算法的概念便应运而生了。
2. 算法
  • 波斯数学家Abu Jafar Mohammed Ibn Musa Al Khwarizmi 在公元二世纪开发出这一方法并验证其有效;
  • 法国人了解此方法后,将之命名为AlKhwarizmi 或 algorism
  • 这个词演化为algorithm,即我们今天所称之算法
2.1. 算法示例
示例 1.1
假设有三个数字A、B 和C,我们要找出较大的那个:
 S1:获取这三个数字A、B 和C。
 S2:如果A>B 为真,则A 是较大的数字。
                     否则较大的数字是B。
 S3:如果第二步中找出的较大数字小于C,则                    现在较大的数字是C。
                     否则,仍是第二步中获得的较大数字
示例 1.2
              假设我们要判断所给的整数是不是素
数。一个非负的整数如果不可被除 1 和它自
身以外的数除尽即为素数。因此,要判断给
定的整数 n 是否是素数,我们需要检查 n 是
否可以被 1 到 n 之间的某一整数整除。解决
此问题的算法如下:
S1:通过输入获取整数 n。
S2:检查它是否可以被变量 j 整除,j 的值在 2 到 n-1 之间。
S3:如果 n 可以被 j (2 <= j < n-1) 整除,那么整数 n 不是素数,否则 n 是素数。
示例 1.3
假设我们要计算二次方程 ax2 + bx + c = 0 的
根,其中系数 a、b 和 c 是输入值。算法:
       S1: 通过输入获取系数 a、b 和 c 的值。
       S2:计算判别式 discriminant = b2 – 4ac。
       S3:如果判别式 discriminant < 0,根为虚数。运算结束。
       S4: 如果判别式 discriminant = 0,则两根相等,root1 = root2 = -b/2a。运算结束。
       S5:否则,根为 –b + sqrt (discriminant)/2a 和 –b - sqrt (discriminant)/2a。
示例 1.4
假设我们要统计元音字母(A、E、I、O、U)在一个文本文件中出现的次数。解决这一问题的过程极为简单。每次从文本中抽取一个字符并检查它是否为元音字母。如果它是,那么将之计入特定元音的数量中,否则忽略这个字符。重复此操作,检查文本中的所有字母。这一过程的算法如下:
S1:将 CounterA、CounterE、CounterI、 CounterO 和 CounterU 的值设为0。
S2:读取文本中的第一个字符。
S3:重复下列子布骤直到读至文本的末尾:
              如果字符 = A 或 a,CounterA 的值加1。
              如果字符 = E 或 e,CounterE 的值加1。
              如果字符 = I 或 i,CounterI 的值加1。
              如果字符 = O 或 o,CounterO 的值加1。
              如果字符 = U 或 u,CounterU 的值加1。
              否则,略过字符。
              读取下一个字符。
S4:显示 CounterA、CounterE、CounterI、    CounterO 和 CounterU 的值。
算法示例总结
上述示例演示的算法包括:算术计算、检验两个数值是否相等、有选择地执行一系列步骤以及根据条件重复定义好的一系列步骤。我们现在开始学习算法的种类。
 
3. 算法的种类
算法可宽泛地分为三类:
• 有限的,确定性算法
• 有限的,非确定性算法
• 无穷算法
 
3.1. 有限的、确定性算法
这类算法在有限的一段时间内终止。它们可能要花很长时间来执行指定的任务,但仍将在一定的时间内终止。这类算法得出的结果常取决于输入。换言之,只要知道输入值,我们就能得出确切的结果。我们在现实生活中遇到的大多数算法都属于这一类。求二次方程的根、找出 1 到 1000000 之间的所有素数和求方阵的逆矩阵都属于有限的确
定性算法。
3.2. 有限的、非确定性算法
这类算法在有限的一段时间内终止。然而,对于一个(或一些)给定的输入,算法的结果并不是唯一的或确定的。
 
例如生成一个随机数的算法。在数学上有一种经过证明的方法,叫做乘法同余生成法(multiplicative congruential generator ), 通过如下形式的函数实现:Xi = (aXi-1) mod m,其中 a 和 m 为遵循一定规则的常数。所涉及的算法为非确定性算法,因为通过该算法获得的结果每每不同。可是,这正达到了该算法的目的,即生成随机数。
3.3. 无穷算法
是那些由于没有定义终止条件,或定义的条件无法由输入的数据满足而不终止运行的算法。
  • 通常,无穷算法的产生是由于未能正确定义终止条件。
  • 用途:
       1、监控一个核反应堆的温度(只要反应堆还在工作,这个任务就该持续运作)。此任务会一直运行,直至有一个外部刺激因素使之停止。
       2、列举无穷小数pi 的所有位。计算 pi 将会得出一个无穷小数。这个算法在数学运算中是极为有用的。
 
4. 计算机基本组成
  • 《导论》已介绍,在此仅复习带过
  • 计算机是一种电子设备,它使用算法帮助解决计算问题。
  • 一个现代的计算机系统由处理器、存储器、输入/输出设备的互连系统组成
 
5. 什么是计算机程序?
  • 是以一种适合计算机使用的语言表达出来的算法
  • 由一系列经明确定义的无歧义的指令组成。
 例:一个计算两数相除的程序,由一系列指导计算机如何计算除法的指令组成。输入这两个数后,计算机就会在这个程序的帮助下执行这些指令并得出结果。
  • 开发来解决特定的问题的程序称为软件
  • 计算机程序有许多种。一些计算机程序用于协助控制计算机系统的运作并优化资源的使用。它们被称为系统程序, 编写这些程序的人被称为系统程序员
  • 还有一些程序,专门为一个特定的问题或一系列相关的问题提供解决方案。这些程序称为应用程序。大多数计算机程序都属于此类。
  • 应用程序的涵盖范围很广,从计算阶乘的简单程序到解算复杂的差分方程体系的程序、下国际象棋的程序等都在其列。
  • 计算机程序都是用特定的计算机编程语言写成的。
 
6. 为什么我们需要编程语言?
  • 一个算法必须可为计算机理解。一个程序通过一系列指令来达到这个目的。因此,程序里的指令必须清晰,定义明确而无歧义。
  • 自然语言(例如英语)的语法过于丰富。语义对于开发者、学习者和使用者而言过于复杂。
  • 为了保证沟通的清晰与明确编程语言必须毫无歧义。
由此,我们需要一种语法简单,语义精确,性质明
确的计算机编程语言。
6.1. 编程语言的级别
编程语言有不同的层次:
  • 机器语言
  • 汇编语言
  • 高级语言
  • 面向对象编程语言
  • 过程化语言
6.1.1. 机器语言
  • 最基础级别,计算机二进制数处理。
  • 用二进制形式编写的指令称为机器语言。 机器语言将一系列命令以二进制形式(0 和 1 的字符串)传递给计算机。
  • 计算机的电路可以直接以二进制方式执行这些指令。
6.1.2. 汇编语言
  • 机器语言: 对计算机 è 极为方便
                      对人类     è 乏味冗长
       表示相加,使用符号“add”
                     比 1000101001010100 更适合人类 。
       同样,符号“sub”代表减(subtract),“mul”代表乘(multiply)。
  • 汇编语言对每个机器语言指令都有对应的符号(或助记符)。
  • 缺点:使用非常简单的指令(例如 add、sub、mul、move 等等)编写程序比较麻烦。
6.2.3. 高级语言
  • 比机器语言或汇编语言更简单
  • 指令集更接近自然语言,被广泛使用
  • 语法和语义通过对指令进行明确定义
  • 已有约有数百种高级语言被开发。其流行程度不一。大多数高级语言都是通用语言,例如 C、Pascal、FORTRAN、C++、Java 等等。用于编写各种应用程序。
  • 高级语言分面向对象编程语言过程化语言 两类
 
6.1.4 面向对象编程语言
  • 面向对象软件主要针对对象
  • 对象是一个“设备”,它接收并发送消息
  • 对象实际上包含
              ※ 代码(一系列计算机指令)和
              ※ 数据(指令要处理的信息)
       通常,代码和数据分开;
       然而,在一个面向对象编程语言中,代码和数据
       被融为一个对象
  • 流行的面向对象编程语言包括 C++ 和 Java。
 
6.1.5 过程化语言:
  • 使用这种语言,编程者必须给计算机一系列必须遵循的步骤,以获
  • 得所需的输出。流行的过程化语言包括 Basic、Pascal 和 C。
 
 
 
7. 编译器
编译器是一种将输入的高级语言(例如 C)翻译为一系列计算机机器语言的指令的计算机程序。
 
 
8.程序设计工具和程序语言的关系
  • 一种程序设计工具都是针对一种特定语言的。
Vc++                                        -------------------   C++
Delphi                                      -------------------   pascal
Jbuilder eclipse myeclipse    -------------------    java
VS.NET                                   -------------------    VB.NET, C#