6.72k likes | 6.89k Views
程序设计. 翁惠玉 Email: hyweng@sjtu.edu.cn weng-hy@cs.sjtu.edu.cn. 第 1 章 绪论. 计算机的组成 程序设计 上机准备. 计算机的组成. 计算机,也被称之为“电脑”,是一种能够按照事先存储的程序自动、高效地对数据进行输入、处理、存储和输出的系统. 硬件:计算机的躯壳 软件:计算机的灵魂. 输入设备. 存储器. 输出设备. 控制器. 运算器. CPU. 计算机硬件. 存储器. 保存正在运行的程序代码和数据
E N D
程序设计 翁惠玉 Email: hyweng@sjtu.edu.cn weng-hy@cs.sjtu.edu.cn
第1章 绪论 • 计算机的组成 • 程序设计 • 上机准备
计算机的组成 计算机,也被称之为“电脑”,是一种能够按照事先存储的程序自动、高效地对数据进行输入、处理、存储和输出的系统 • 硬件:计算机的躯壳 • 软件:计算机的灵魂
输入设备 存储器 输出设备 控制器 运算器 CPU 计算机硬件
存储器 • 保存正在运行的程序代码和数据 • 内存的最小单元是bit,一个bit存储一个二进制位。一般8个bit组成一个byte,若干个byte组成一个word • 在一般的机器中,内存按字节编址,内存大小也是按字节计量 • 关机后,内存的数据全部丢失
CPU CPU (Central Processing Unit) 有两个部件组成: • ALU – Arithmetic-Logic Unit(运算器) • Control unit (控制器)
控制器 • 控制器控制计算机的其余部分如何完成程序的指令 • 指挥内存和其它部件之间的信息的传送(包括信息和指令) • 指挥CPU和输入输出设备之间的控制信息的传送
控制器中的信息存储 • 控制器中有两个寄存器: • 指令寄存器( IR ):保存当前正在执行的指令 • 程序计数器 ( PC ):保存下一条要执行的指令地址
控制器的工作 • 取下一条指令:按PC指定的地址到内存中取出下一条指令,存入IR。 • 解码指令:将指令解码成一系列的控制信号 • 执行指令:将控制信号发送给相关部件,执行相应的运算
运算器的组成 • 逻辑电路:执行控制器发出的控制信号 • 一组存放正在运算的数据的寄存器
输入输出设备 • 输入设备将人能理解的符号转换成计算机能处理的符号。常用的输入设备有:键盘、鼠标、光笔等 • 输出设备将计算机的输出转换成人能理解的输出。常用的输出设备有:显示器、打印机、音响设备等
计算机的组成 计算机,也被称之为“电脑”,是一种能够按照事先存储的程序自动、高效地对数据进行输入、处理、存储和输出的系统 • 硬件:计算机的躯壳 • 软件:计算机的灵魂
计算机软件 • 软件可以分为系统软件和应用软件。 • 系统软件居于计算机系统中最靠硬件的部分,它将计算机的用户与硬件隔离。系统软件与具体的应用无关,但其他的软件要通过系统软件才能发挥作用。常用的系统软件有操作系统、编译器、网络软件等。 • 应用软件是为了支持某一应用而开发的软件。如字处理软件、财务软件等。
第1章 计算机简介 • 计算机的组成 • 程序设计 • 上机准备
程序设计 程序设计就是教会计算机去完成某一特定的任务,即设计出完成某个任务的程序 。程序设计包括以下几个阶段: • 算法设计:设想计算机是如何一步一步完成这个任务 • 编码:用计算机认识的语言,如C++语言,描述这个完成任务的过程 • 编译与调试:检验程序是否正确,达到预期的目标
算法 • 算法必须是: • 表述清楚、明确,无二义性。 • 有效性。即每一步骤都切实可行。 • 有限性,即可在有限步骤后得到结果。 • 算法的表示 :有自然语言、传统的流程图、结构化流程图、伪代码和PAD图等方法
编码:C和C++ • 用程序设计语言表示算法 • C++是从C发展而来,而C又是从B语言发展而来 • C语言是由贝尔实验室在B语言的基础上开发的,并有美国国家标准组织和国际标准化组织进行了标准化 • C++是C的扩展,主要是提供了面向对象的功能
main() {int i, s; i=1; s=0; 01100010 11101001 C compiler Object program Source program 编译与调试 • 解释执行:逐句翻译并执行 • 编译执行:全部翻译成机器指令
连接与加载 • 连接(link):将目标程序与已有的其它目标程序连接起来,产生一个可执行的程序 • 加载(load):为程序在内存中定位
目标文件 可执行文件 源文件 01101010001000 main() {…} 011010100010000101010010001000010101 compiler linker 01101010001000 其他目标文件/库函数 程序执行过程
程序的调试 • 语法错误和词法错误 :由编译器检查,指出错误。程序员根据编译器输出的信息修改程序 • 逻辑错误 bug :通过分段观察程序的阶段性结果来找出错误的位置和原因。 • 程序的调试及测试只能发现程序中的错误,而不能证明程序是正确的 !!!
第1章 计算机简介 • 计算机的组成 • 程序设计 • 上机准备
VC6.0的使用—简单情况 • 创建源文件:.在工具栏里面最左面的一个按钮是用来创建一个空白文件的。 • 输入源程序:现在屏幕的中右部出现了一个空白编辑环境,是用来编辑我们的程序的。 • 保存源文件:按一下Ctrl+S即可,此时系统会让你输入文件名字。注意一定要写扩展名“.cpp”。 • 编译链接程序:在菜单里面找到Build然后单击里面的Build菜单项,接下来系统会弹出几个对话框,你直接点击“确定”即可。 • 运行程序:第4步执行完后没有错误,现在就可以运行你的程序了。运行方法是点击工具条右后部的“!”或者直接按Ctrl+F5。你的程序如果正常执行的话,屏幕上回显示出一个DOS窗口输出你的运行结果。
VC6.0的使用—一般情况 • 建立工程:在file菜单下选择new一个project • 建立源文件 • 将源文件加入工程:在project菜单中选择“insert file into project” • 编译链接 • 执行程序
程序的调试 • 程序中的错误 • 语法错误:由编译器找出这些错误 • 逻辑错误:可以利用调试工具 • VC支持各种调试工具,包括 • 断点设置 • 单步执行 • 变量跟踪
第二章 通过例子学习 第一个程序 第二个程序 变量定义 数据类型 符号常量 算术表达式 赋值表达式 自增自减运算符 强制类型转换 数据的输入输出 构思一个程序
C++程序的基本组成 • 基本的C++程序结构 // File: hello.cpp // this program prints the message // “hello everyone” on the screen #include <iostream> int main() { std::cout << “hello everyone” << std::endl; return 0; } 程序注释 预处理命令 主程序
注释 • C++的注释是从//开始到本行结束 ,也可以采用C风格的注释,即从/*与*/之间所有的文字都是注释,可以是连续的几行。 • 注释是写给人看的,而不是写给计算机的。 • 程序注释 :从整体描述程序操作过程 • 注释也可以出现在主程序中,解释主程序中一些比较难理解的部分。 • 给程序添加注释是良好的程序设计风格
C程序的基本组成 • 基本的C程序结构 // File: hello.cpp // this program prints the message // “hello everyone” on the screen #include <iostream> int main() { std::cout << “hello everyone” << std::endl; return 0; } 程序注释 预处理命令 主程序
编译预处理 • C++的编译分成两个阶段:预编译和编译 • 预编译处理程序中的预编译命令,即那些以#开头的指令 • 编译预处理主要有: • 库包含:用#include实现,表示程序使用了某个库 • 宏定义 :用#define实现。宏包括不带参数的宏和带参数的宏。不带参数的宏通常用来定义符号常量。带参数的宏用来定义一些较为复杂的操作。
库包含的格式 • 库是预先做好的一些工具程序。 • 每个库要提供一个接口,告诉库的用户如何使用库提供的功能。 • 库包含就是把库的接口文件放入源文件,以便编译器检查程序中对库的调用是否正确。 • 库包含格式: • #include <filename>:包含了一个系统库 • #include “filename”:包含了一个用户自定义的库
宏定义 • 不带参数的宏定义通常用于为程序中的常量取一个名字,称为符号常量。格式: #define 标识符 替换文本 如:#define RADIUS 5 #define PI 3.14159 #define AREA PI*RADIUS*RADIUS • 用define定义宏是C语言的习惯,在C++中有更好的解决方案
使用符号常量的好处 • 含义清楚,提高了程序的可读性。 • 在需要改变一个常量时能做到“一改全改”
C程序的基本组成 • 基本的C程序结构 // File: hello.cpp // this program prints the message // “hello everyone” on the screen #include <iostream> int main() { std::cout << “hello everyone” << std::endl; return 0; } 程序注释 预处理命令 主程序
主程序 • 主程序由一个或多个函数组成 • 函数是一系列独立的程序步骤,这些程序步骤集合在一起,并赋予一个名字。 • 每个程序都必须有一个名为main的函数,它是程序的入口。
函数的构成 int main() 函数头 { std::cout << “hello everyone” << std::endl; return 0; } 函数体
函数头 • 说明函数和外界的交流 • 形式: 返回类型 函数名(参数表) • 返回类型:是函数的输出值的类型 • 函数名:是函数的名字。程序可以通过函数名执行函数体的语句 • 参数表:是函数的输入 • 可以把函数想象成数学中的函数。参数表是一组自变量,返回类型是函数值的类型
函数体 • 函数如何完成预定功能的过程。它说明了如何从输入(参数)得到输出的(返回值)的过程。 • 可以把它想象成数学中的函数表达式
输出流对象std::cout • “流”指的是设备之间传递的数据流 • 输出流是传给输出设备的数据流 • cout代表显示器 • 格式 • 将hello显示在屏幕上:std::cout << “hello” • std::cout << “hello, everyone” << std::endl • std::endl表示换行
名字空间 • 在大型的程序时,每个源文件可能由不同的开发者开发。不同的源文件中可能有同样的名字。当这些源文件连接起来形成一个可执行文件时,就会造成重名。 • 名字空间是把一组程序实体组合在一起,构成的一个作用域。 • 一个名字空间中不能有重名,不同的名字空间中可以定义相同的实体名。当引用某个实体时,需要加上名字空间的限定 • 程序中的std是C++中所有标准库的名字空间名。
使用名字空间的指令 • 格式: using namespace 名字空间名; • 一旦用了使用名字空间的指令,该名字空间中的所有的实体在引用时就不需要再加名字空间的限定了。 • 第一个程序可以改写为:
// file: hello.cpp // This program prints the message “Hello world.” // On the screen #include <iostream> using namespace std; int main() { cout << “Hello world.” << endl; return 0; }
第二章 通过例子学习 第一个程序 第二个程序 变量定义 数据类型 符号常量 算术表达式 赋值表达式 自增自减运算符 强制类型转换 数据的输入输出 构思一个程序
计算园的面积和周长 // file: circle.cpp // 该程序用于计算园的面积和周长 #define PI 3.14159 //定义符号常量 #include <iostream> using namespace std; int main() { double radius, area, circum; cout << "请输入圆的半径:" ; cin >> radius; area = PI * radius * radius; circum = 2 * PI * radius; cout << endl; cout << "园的面积为:" << area << endl; cout << "园的周长为:" << circum << endl; return 0; } 变量定义 输入阶段 计算阶段 输出阶段
程序的组成 • 变量定义:为一些在程序编写时值未知的数据预约它们的存放处 • 输入阶段 :获取执行时才能确定的用户数据。输入过程一般包括两步 : • 显示提示信息 • 读取数据 • 计算阶段 :由输入推导出输出的过程。通常通过各种计算得到。 • 输出阶段:显示程序执行的结果
第二章 通过例子学习 第一个程序 第二个程序 变量定义 数据类型 符号常量 算术表达式 赋值表达式 自增自减运算符 强制类型转换 数据的输入输出 构思一个程序
变量定义 • 变量,也称为对象,是数据的存放之处 • 变量有三个重要属性:名称、值、类型 。变量定义就是告诉编译器变量的名字及该变量中可以存放哪一类数据类型的值 • C++中变量定义的格式: 类型名 变量名1,变量名2,…,变量名n; • 如: int num1, num2; double area; • 在C++中,每个变量在使用前必须被定义,以便编译器检查变量使用的合法性。
变量命名 • 名字必须以字母或下划线开头。C++语言中,名字中出现的大写和小写字母被看作是不同的字符,因此ABC,Abc,abc是三个独立的变量名。 • 名字中的其它字符必须是字母、数字或下划线,不得使用空格和其它特殊符号 • 名字不可以是系统的保留词,如:int, double, for, return等,它们在C++语言中有特殊用途 • C++没有规定过名字的长度,但各个编译系统都有自己规定。 • 名字应使读者易于明白其存储的值是什么,做到“见名知意”。
第二章 通过例子学习 第一个程序 第二个程序 变量定义 数据类型 符号常量 算术表达式 赋值表达式 自增自减运算符 强制类型转换 数据的输入输出 构思一个程序
数据类型 • 数据类型包括两个方面: • 数据的取值范围 • 可用的操作 • C/C++中的数据类型分为两大类: • 基本数据类型:整型、浮点型、字符型和布尔型 • 构造数据类型:数组、结构、联合和枚举