610 likes | 777 Views
计算机程序设计 2014 年春季学期 305-307 教室. 唐晋韬 助理研究员 计算机学院 613 教研室 邮件: tangjintao@nudt.edu.cn 电话: 13755120042 , 574631 办公室:一号院银河楼前楼 118. 一 个小调查. 不知所云. 部分看得懂. 我能写出来. 这段语句是什么意思?. 我 会更复杂的. 学习目标. 对程序设计没有概念的同学 理解计算机问题求解的过程与方法 具有程序设计思维,能够用计算机语言描述问题、表述求解问题的逻辑步骤,具有一定的算法思维,能够根据问题设计求解算法
E N D
计算机程序设计2014年春季学期305-307教室 唐晋韬 助理研究员 计算机学院613教研室 邮件:tangjintao@nudt.edu.cn 电话:13755120042,574631 办公室:一号院银河楼前楼118
一个小调查 不知所云 部分看得懂 我能写出来 • 这段语句是什么意思? 我会更复杂的
学习目标 • 对程序设计没有概念的同学 • 理解计算机问题求解的过程与方法 • 具有程序设计思维,能够用计算机语言描述问题、表述求解问题的逻辑步骤,具有一定的算法思维,能够根据问题设计求解算法 • 掌握C++编程语言的基本语法、编程环境 • 养成良好的编程习惯及风格 • 之前学过编程语言的同学 • 更要注意培养良好的编程习惯 • 理解C++语言在语法、环境、调试上的独特之处 • 程序设计思维和算法思维的培养 不用担心周围的“高手” 你们的差距仅在经验!
学习方法 • 课堂学习+课后实践 • 问题引导的课堂学习:每节课求解一个问题,达到一个小目标 • 理论指导下的实践,实践出真知 • 在编写大量程序之后,才能感到运用自如 • 所有小目标完成后,期末会有让你惊讶的能力和代码量 • 独立学习+团队协作 • 自信、自立、自尊、自强 • 自学、练习、调试、上网查阅为主 • 教辅指导、请教同学、参看代码 • 不能抄袭,参看代码要注释说明
交流辅导 • 课程网站 • http://course.trustie.net/projects/139 • 教学网、民网 • 上机辅导 • 每周一次,晚上 • 辅导教员 傅翔 15574804059 黄鸿杰 13297498284 • 答疑安排 • 网络答疑 • 教室答疑
课程网站 • http://course.trustie.net/projects/139 密码:305307 课程资源的发布 作业的提交、评阅 课程相关事项通知 网络答疑 讨论区,欢迎多发帖交流
计算机程序设计 第一章 计算机与程序设计 计算机学院613教研室 唐晋韬
本章内容 • 1.1 计算机系统概述 • 1.2 软件的形成 (1.4节) • 1.3 程序设计基本概念 (1.2 节) • 1.4 程序设计方法 (1.3节) • 1.5 第一个C++程序 • 1.6 程序设计风格
学习目标 • 了解程序设计语言、程序设计的基本概念 • 初步掌握C++程序的结构 • 明确程序设计风格的意义 • 实践目标:开始编程的奇幻旅程 • C++编程环境的安装与使用 • 编写第一个C++程序
1.1 计算机系统 • 计算机系统 • 机器系统 • 能接收和存储信息 • 能对数据进行处理和计算 • 能输出结果 • 整个过程的执行者是硬件,但硬件是受软件控制的 • 程序设计,就是编写软件,使硬件按人的意图工作
1.2 软件的形成 为什么不用机器码编写软件? • 软件(Software)的形成 • 程序员(Programmer)编写程序源代码(Source Code) • 编译器(Compiler)把源代码转换为可被计算机理解的机器代码(Machine Code) • 并把机器代码以可执行文件(Executable File)的形式保存在磁盘上
1.2 软件的形成 • 人使用自然语言 ,计算机使用机器码(二进制) • 机器码的“1+1” • 汇编语言的“1+1” 10111000 00000001 00000000 00000101 00000001 00000000 MOV AX, 1 ADD AX, 1
1.2 软件的形成 Java语言编写的1+1程序 • 一种程序设计语言对应一种编译器,实现从源程序到可执行程序的转换 C语言编写的1+1程序
52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 Ada Modula-2 Pascal ALGOL60 ALGOL68 C CPL BCPL B C++ Smalltalk 80 Java Simula 67 QBASIC VB ANSI-BASIC BASIC FORTRAN90 FORTRAN FORTRAN77 PL/1 COBOL LISP PROLOG
1.2 软件的形成 • C语言的历史 • 起源于Algol 60 • 在Algol 60的基础上发展出CPL语言 • 1967年发展为BCPL,用于编写操作系统和编译器 • 1970年贝尔实验室将BCPL改良成B,并用B语言实现了第一个UNIX操作系统 • 1972年左右,Dennis Ritchie和Ken Thompson在贝尔实验室设计UNIX系统时,开发出了C语言 • 之后,C语言发展出很多版本 • 1988年,美国国家标准化协会(ANSI)制定了C的标准——ANSI C
1.2 软件的形成 • C++语言:在C语言中引入了面向对象的思想,可不加修改地使用C语言代码 • 1983年8月, 第一个C++语言投入使用 • 1985年10月,完成了经典巨著The C++ Programming Language第一版 • 1991年6月, 第二版完成 • 1997年7月, 第三版完成 • 1998年11月,ISO标准被批准
1.2 软件的形成 • C语言的历史及作用 接受美国国家技术勋章 C语言主要发明者:Dennis Ritchie Dennis 和 Ken在开发Unix系统
1.2 软件的形成 应用程序(Application) 基于平台的应用程序 高级语言的地盘 C语言的地盘 应用平台 操作系统(OS) 低级语言的地盘 硬件(Hardware)
1.3 程序设计的基本概念(1.2节) • 问题求解过程 • 问题定义——明确要解决的问题 • 算法设计——把要求解的问题转化为计算机的解题步骤 • 程序编码——对设计出来的算法进行编程实现 • 测试和调试——发现和纠正程序中的错误
1.3 程序设计的基本概念 测试调试 50% 开发步骤 编码 20% 设计 20% 分析10% 时间及工作量
1.3 程序设计的基本概念 • 算法与程序(1.2.2节) • 算法——由有限个步骤组成的求解问题的方法 • 算法的特点 • 有穷性:执行有穷个步骤后必须终止 • 确定性:每一个步骤必须是无二义的 • 能行性:每一个步骤都可以在有限时间内做完 • 输入:一般有输入信息 • 输出:一般有一个或多个输出信息
1.3 程序设计的基本概念 • 算法的描述方式 • 文字描述 • 自然语言 • 图形描述 • 流程图、盒图,PAD图等 • 程序语言描述 • 计算机程序语言,如C++ • 伪码描述
算法描述示例 • 求两个整数m、n(m≥n)的最大公因子 程序语言描述 void main(){ int m,n,r; scanf(″please input m,n:\n″,&m,&n); r = m % n; while (r != 0) {m = n ; n = r ; r = m % n;} printf(″max_common_factor is:″,r); } 文字描述 ①求余数:以n 除m, 并令r为余数 (0 ≤ r < n); ②判断余数是否为零:若r = 0 则结束算法,n 就是最大公因子; ③若r ≠ 0 则m ← n, n ← r,返回 ① 。 伪码描述: int max_common_factor (int m, int n) { int r = m % n; while (r != 0) {m = n ; n = r ; r = m % n;} return n ; } 流程图描述
1.3 程序设计的基本概念 数据输入 数据输出 数据处理 • 程序 • 程序的组成 • 数据 • 数据结构,程序处理的数据 • 操作 • 处理数据的操作步骤,即算法 程序 = 数据结构 + 算法
1.3 程序设计的基本概念 • 程序设计和编码 • 先设计,后编码 • 设计是基础,是编码的依据 • 设计的好坏影响代码的质量
1.4 程序设计方法(1.3节) • 结构化程序设计 • 任何程序逻辑都可以用顺序、选择和循环三种基本结构表示 顺序结构 选择结构 循环结构
1.4 程序设计方法 • 结构化程序设计 • 自顶向下,逐步求精 • 描述问题,分析问题,分解问题成相对独立的子问题(反复进行,逐步分解) • 描述子问题的数据和操作 • 模块化原则 • 尽量采用典型基本控制结构:顺序、选择、循环 • 缺点(对于大型软件开发) • 稳定性低、可修改性和可重用性差
1.4 程序设计方法 • 面向对象程序设计 • 面向问题 • 现实世界是由对象组成的 • 由哪些对象组成?对象之间如何相互作用? • 结构化程序由函数组成,面向对象程序由对象组成 • 易于扩展、可维护性好
1.4 程序设计方法 • 面向对象分析和设计步骤 • 找出问题中的对象和类 • 确定每个对象应具备的属性和功能 • 确定类、对象之间关系,相互作用的方式 • 用程序代码实现这些对象和类
1.5 第一个C++程序 • 使用集成开发环境(IDE) • 编辑(Edit) • 编译(Compile) • 链接(Link) • 运行 (Run) Eclipse CDT/C++ Builder/Netbeans C++ 本次课程需要Visual C++ 6.0
编辑 编译 链接 运行 1.5 第一个C++程序 • 使用IDE开发C++程序 程序代码的录入, 生成源程序*.c,*.cpp 出错? 语法分析查错,翻译 生成目标程序*.obj 与其它目标程序或库 链接装配,生成可执行 程序*.exe 出错? 结果错?
1.5 第一个C++程序 工程 文件1.cpp 文件2.cpp …… • Visual C++ 6.0使用 • 建立工程 • 建立文件 • 编写程序 • 编译 • 程序有错,则定位并修正语法错误 • 运行 • 运行结果出错,则跟踪调试修正逻辑错误 文件1.obj 文件2.obj 工程.exe
1.5 第一个C++程序 • 建立工程 • 菜单“文件”-“新建” • 在“新建”对话框选择“工程” • 选择“Win32 Console Application” • 输入工程名字 • 选择工程存放位置 • 单击“确定” • 在“step 1 of 1”选择“An empty project”,单击“完成”
“新建”对话框 输入工程名称 选择工程存放位置 选择工程类型
1.5 第一个C++程序 • 新建文件 • 菜单“文件”-“新建” • 在“新建”对话框中选择“文件” • 选择“C++ Source File” • 输入文件名 • 确保“添加工程”被选中,工程名正确 • 单击“确定”
“新建文件”对话框 文件要加入工程 输入文件名 选择新建文件类型
1.5 第一个C++程序 • 文件编辑 • 在IDE左边的“工作区”选择“FileView” • 选择“Source Files”查看源文件 • 选择“Header Files”查看头文件 • 选中(双击)要编辑的文件进行编辑
“文件编辑”窗口 程序编辑窗口 工作区
1.5 第一个C++程序 • 编译,纠正语法错误 • 单击工具栏上的 按钮 • 或者使用快捷键“F7” • 或者使用菜单“编译”-“构件…”
“编译”窗口 编译按钮 编译结果,英文,很好懂,英语一级就够了
1.5 第一个C++程序 • 纠错 • 编译完成后如果有语法错误,将会显示在IDE下面的“编译”窗口 • 双击相应的错误,将会定位产生错误的语句 • 修改错误后重新编译
“纠错”窗口 错误定位 双击错误信息“mx:undeclared identifier”
1.5 第一个C++程序 • 运行 • 单击工具栏上的 按钮 • 或者使用快捷键“Ctrl+F5” • 或者使用菜单“编译”-“执行…” • 运行结果(输入输出)在一个弹出的桌面窗口中显示
1.5 第一个C++程序 • 调试(debug),纠正逻辑错误 • 单步执行(快捷键“F10”或点击 ) • 进入函数(快捷键“F11”或点击 ) • 跳出函数(快捷键“Shift+F11”或点击 ) • 执行到光标处(快捷键“Ctrl+F10”或点击 ) • 设置断点(快捷键“F9”或点击 ) • 运行到结束或到断点处(快捷键“F5”或点击 )
“调试”窗口 可以调试程序,让程序执行到某一行后暂停 显示部分变量的值 还想看其他变量的值?加到这里
1.5 第一个C++程序 • 调试时获取变量的值 • 将鼠标放到变量上面,会通过浮动窗口显示相应变量的值 • 在“watch”窗口中加入相应变量会自动显示该变量的值 • 在变量上点击鼠标右键,选择菜单“QuickWatch”查看变量的值
1.5 第一个C++程序 • Hello World! • 我们知道了输出语句是printf(); • 请写个程序,向C++的世界Say Hi