1、1程序设计基础Introduction to Computer Programming2教学安排课程名称: 程序设计基础(Introduction to Computer Programming)教学对象: 计算机软件专业的新生教学目标: 目标有二:掌握一种编程工具(C语言);掌握程序设计的基本思路和方法,提高分析问题、解决问题的能力。3教学安排教学方法:课堂讲解:基本概念、C语言的语法、语句,编程解题的基本思路、方法。每堂课要带上纸、笔,进行课题练习。鼓励创新、鼓励上台讲解自己的方法;上机实践:实践性极强的课程,将有大量的编程练习,“赶鸭子上架”。每周有一次固定上机时间,其余自由上机;4教学
2、安排参考书:考核方式:1. “程序设计基础”,吴文虎2. “C 程序设计”,谭浩强;3. The C Programming Language(Kernighan & Ritchie)上机练习 期中考试 期末考试 (20%) (20%) (60%)教 材:“计算机语言与程序设计”,谌卫军 清华大学出版社,20075教学安排教学日历:1. 程序设计概述2. 数据类型与表达式3. 顺序结构程序设计、选择结构程序设计4. 循环控制5. 数组6. 作业讲评(编程规范、程序调试)7. 函数8. 期中考试6教学安排教学日历(续):9.指针10. 结构体11. 链表12. 算法引论13. 基于分治策略的递归
3、算法14. 基于回溯策略的递归算法15. 习题课,总复习7教学安排http:/ door is always open for you.9教学安排COPY若发现两份相同的程序,均记0分。10小调查 编程基础 参加过程序设计类比赛(省、市、全国); 使用过C语言或其他编程语言,编写过一些小程序; 熟悉电脑操作,熟悉Windows操作系统,熟悉各种应用软件的使用; 没有接触过太多的计算机。11两个特别计划 编程非常强的学生 可以申请免修; 做一个大作业,自己选题,教师批准; 编程基础弱的学生 随时到办公室找我问问题。12教学安排Any question?13第 一 章 程序设计概述14第一章 程序
4、设计概述1. 计算机、问题与程序2. C语言简介3. 一个例子4. C程序的上机步骤151.1 计算机、问题与程序1.1.1 这是一个计算机的时代16计算机能够做哪些事情? 琴:电脑合成的音乐; 棋:1997年5月,IBM公司的“深蓝”战胜国际象棋世界冠军卡斯帕罗夫; 书:电脑能够打印出各种字体的文字:宋体、楷体、隶书,等等; 画:在计算机控制下,能够在布匹上刺绣、甚至能编织任意图案的毛线衣!17计算机能够做哪些事情?(续) 听:语音识别技术,文档录入,识别率较高,已有相关的产品,如IBM的ViaVoice; 说:语音合成技术,Text-To-Speech(TTS),新闻阅读、霍金,自然度较好
5、,也有相关产品; 读:自然语言理解,机器翻译、Internet网上基于内容的智能搜索; 写:电脑“写”的作文。18计算机的本质 计算机是一个超级计算器,是一种用来处理数据的通用途机器; 计算机以一种确定的方式来执行指令:F执行的是一组确定的指令序列;F执行的结果取决于系统的当前状态和输入的数据;19计算机硬件的体系结构中央处理器内存程序的执行过程20What makes computers so powerful? 速度快:F537 ?F人:1秒钟?FPentium III:10亿分之1秒! 精度高:F计算机:读取磁盘时,每隔10亿bits可能发生一个错误;F人:清华有多少个学生食堂?211.
6、1.2 这是一个充满问题的世界 中东问题; 国际恐怖主义、毒品问题; 环境卫生问题; 家庭矛盾; 青少年早恋的问题; 22 本课程关心的是:计算机能够解决的问题。 计算机能够解决很多的问题:数学计算、模拟、数据分析、机器人控制、文本编辑、企业管理、,等等; 遗憾的是,这些问题的描述方式一般是自然语言的形式,而不是机器指令的形式。231.1.3 计算机程序 通过编写程序来让计算机帮助我们解决问题; 何为程序?一个程序即一组计算机指令! 如何编写程序? 接受一个问题; 分析这个问题; 设想一种方法来解决这个问题; 在计算机上,用某种计算机语言来描述该解决方案,即编码; 测试和调试程序(debug)
7、。24 编程就象厨师烧菜,以红烧茄子为例; 原料(数据):茄子750克、肉片50克、葱姜蒜50克、酱油、盐、糖、鸡粉适量,水淀粉适量。 制作过程(算法): 将茄子切成块,葱姜蒜切末待用; 起油锅,待油热至八、九成时放入茄子,炸至茄子由硬变软时取出,将油沥干待用; 另起锅,锅中放油三汤匙,油热后,先爆香葱姜蒜,下肉片炒散,烹入酱油,加入少量水和鸡粉,放入茄子、盐、糖,大火煮开后改用小火煮至茄子入味,最后用淀粉勾芡。 程序 数据结构 算法25编程需要哪些技能? 编程既需要高层的创造性思维,又需要低层的细节处理; 一个好的程序员必须学会:F创造性地分析问题、解决问题;F小心翼翼地仔细编码。26计算机
8、语言 机器语言: 机器硬件执行的是用机器语言描述的指令; 指令的格式一般为: 由0、1组成,难以理解和编写,工作效率极低,正确性难以保证。1111011000000110100000000001010000000010011101001010100110000000111111000011001110001001000111101110110000000101101000011000011000000101101000111111010000000101101000111111001000001001操作码OP 地址码AD27 汇编语言: 用符号来表示指令的操作码和数据单元,使用较为方便,如a
9、dd ax,0; 汇编语言程序不能直接执行,需专门的汇编系统把它翻译成机器指令的形式,然后运行。 层次仍然太低,程序开发效率较低。mov eax, dword ptr ebp-4cmp eax, dword ptr ebp-8jle main+36h (00401046)mov ecx,dword ptr ebp-4mov dword ptr ebp-0Ch,ecxjmp main+3Ch (0040104c)mov edx,dword ptr ebp-8mov dword ptr ebp-0Ch,edx28 高级语言: 用一种更自然、更接近于人类语言习惯的符号形式(如数学公式)来编写程序,这
10、样写出来的程序更容易理解和使用; 高级语言程序也不能直接运行,需专门的编译器把它翻译为机器指令的形式,然后运行;if(x y) z = x; else z = y;29 高级语言的发展历史: 1950s:Fortran, Lisp 1960s:Cobol, Algol, APL 1970s:Basic, Pascal, C 1980s:Smalltalk, C+, Modula, Ada, Prolog 1990s:Java301.2 C语言简介1.2.1 C语言的历史C 语言Unix 操作系统管理和分配计算机的软硬件资源,合理地组织计算机的工作流程,并向用户提供各种服务功能。计算机系统示意图
11、CPU、内存、I/O设备(显示器、键盘、软盘机等)。(Word)31 1963年,MIT、贝尔实验室和GE决定联合开发MULTICS操作系统,该系统庞大而复杂,研制的难度远远超出人们的预料,因此贝尔实验室和GE先后退出了该项目; 1969年,贝尔实验室的Ken Thompson在MULTICS上编写了一个叫着“太空旅行”(Space Travel)的游戏,模拟一个飞行员驾驶一艘宇宙飞船在太阳系当中遨游,并且可以在各种星体上着陆。后来他们对MULTICS的访问被关闭了,因此Thompson在贝尔实验室找了一台无人使用的PDP-7计算机,然后和Dennis Ritchie在一台GE-635计算机上
12、,利用其GECOS所提供的一个交叉汇编器,把空间旅行游戏用PDP-7汇编语言重新编写,然后用穿孔纸带把它转移到PDP-7上;32 后来,Thompson和Ritchie等人开始为PDP-7编写一个新的操作系统。在写好了文件系统和一组基本的软件工具以后,他们编写了一个PDP-7的汇编器,这样他们就能够直接在PDP-7上编程了。到了1970年,操作系统的基本元素都已经完成了,他们给系统起了一个名字UNIX; 1970年夏,研究小组得到了一台新机器PDP-11,因此把Unix系统从PDP-7移植到PDP-11,这项工作非常繁琐,因为整个系统都是用汇编语言来编写的。研究小组开始考虑用高级语言来重写整个
13、系统,以提高可移植性和可懂性。33Algol 60Algol 68CPL BCPL B C Simula 67C+196019631967197019721983剑桥大学Matin RichardsKen ThompsonRitchieBjarne Stroustrup可移植C197788 ANSI C1988ANSIANSI C1983ANSI离硬件较远规模太大简单、接近硬件过于简单、数据无类型简化的CPL用C语言重写Unix系统不依赖具体机器341.2.2 C语言的特点 简单。C语言的语法简洁、紧凑,是一个比较小的语言。32个关键字,9种控制语句; 实用。“by programmer,fo
14、r programmer”; 高效。C语言程序生成的目标代码的效率只比汇编语言低10; 可移植性好; 根据一项统计,在企业招聘的软件工程师职位当中,有22.7%的职位要求使用C/C+编程,在所有的编程语言中排名第二。351.2.3 C语言的应用领域 操作系统:Unix、Linux、Windows等; 系统软件:嵌入式系统软件(81%采用C语言)、设备驱动程序、数据库管理系统、病毒程序、磁盘管理工具等; 商业应用:媒体播放软件、游戏软件、专家系统软件、绘图软件等; 教学领域:Matlab、信号处理、数据结构。361.3 一个例子问题:判断一个数是奇数还是偶数?1.3.1 问题描述37 问题分析
15、这个数必须是何种类型? 这个数如何获得? 什么叫“奇数”,什么叫“偶数”?如何来判断? 如何把判断的结果通报给大家?38 接受来自于键盘输入的一个整数; 如果这个数是一个偶数,那么在屏幕上显示“偶数”; 如果这个数是一个奇数,那么在屏幕上显示“奇数”。更准确的问题描述39 输入一个整数; 把该整数除以2; 如果余数等于0,表明这是一个偶数,在屏幕上显示“偶数”;否则的话,表明这是一个奇数,因此在屏幕上显示“奇数”。 例如:92543; 其他方法:判断最低位。解决该问题的算法401.3.2 C语言程序/* 输入一个整数,判断它是奇数还是偶数 */#include void main( ) int
16、 num;/* 输入的整数 */ int rem;/* 除2以后的余数 */ /* 从用户处得到该整数. */ printf( “请输入一个整数:”); scanf( “%d”, &num); 41 /* 计算除2以后的余数并输出结果 */ rem = num % 2; if (rem = 0) printf(“偶数n”); else printf(“奇数n”); 请输入一个整数:17奇数421.3.3 C程序组成/* 输入一个整数,判断它是奇数还是偶数*/#include void main( ) int num;/* 输入的整数 */ int rem;/* 除2以后的余数 */ /* 从用
17、户处得到该整数. */ printf( “请输入一个整数:”); scanf( “%d”, &num); /* 计算除2以后的余数并输出结果 */ rem = num % 2; if (rem = 0) printf(“偶数n”); else printf(“奇数n”); 位于/*和*/之间的文字,称为注释。用来帮助读者理解程序;在程序运行时会被忽略掉。/ 43/* 输入一个整数,判断它是奇数还是偶数*/#include void main( ) int num; /* 输入的整数 */ int rem; /* 除2以后的余数 */ /* 从用户处得到该整数. */ printf( “请输入一
18、个整数:”); scanf( “%d”, &num); /* 计算除2以后的余数并输出结果 */ rem = num % 2; if (rem = 0) printf(“偶数n”); else printf(“奇数n”); 以符号“#”开头的行, 称为编译预处理行;“#include”称为文件预处理命令;“#include ” 是让文件“stdio .h”的内容包含到程序中去;44/* 输入一个整数,判断它是奇数还是偶数*/#include void main( ) int num; /* 输入的整数 */ int rem; /* 除2以后的余数 */ /* 从用户处得到该整数. */ pri
19、ntf( “请输入一个整数: ”); scanf( “%d”, &num); /* 计算除2以后的余数并输出结果 */ rem = num % 2; if (rem = 0) printf(“偶数n”); else printf(“奇数n”); C程序是由函数构成的;main( ) 是每个C程序都必须有的,称为主函数;可以把主函数看成是程序的入口; 和 分别表示函数的开始和结束。45/* 输入一个整数,判断它是奇数还是偶数*/#include void main( void ) int num;/* 输入的整数 */ int rem;/* 除2以后的余数 */ /* 从用户处得到该整数. */
20、 printf( “请输入一个整数:”); scanf( “%d”, &num); /* 计算除2以后的余数并输出结果 */ rem = num % 2; if (rem = 0) printf(“偶数n”); else printf(“奇数n”); 变量的声明部分,定义所用到的变量,指明它们的名字和类型。46/* 输入一个整数,判断它是奇数还是偶数*/#include void main( void ) int num; /* 输入的整数 */ int rem; /* 除2以后的余数 */ /* 从用户处得到该整数. */ printf( “请输入一个整数:”); scanf( “%d”,
21、&num); /* 计算除2以后的余数并输出结果 */ rem = num % 2; if (rem = 0) printf(“偶数n”); else printf(“奇数n”); 函数的执行部分,由若干个语句组成,每一条语句指明了程序即将执行的某一个操作。每一条语句后面必须有一个分号结尾。471.3.4 从C到机器语言 用C语言编写的程序称为C语言的“源程序”(source code); 计算机的处理器CPU只能看懂用它自己的机器语言来编写的“可执行程序”(executable program) 0、1序列; 不同的CPU系列有不同的机器语言,如X86, PowerPC, SPARC, AR
22、M, .; 如何让CPU来执行用C语言编写的程序?48 需要两个步骤,使用两个工具软件,把一个C源程序转换为相应的可执行程序: 使用一个C 编译器(compiler)把C源程序转换等价的、用机器语言来表示的程序(即01序列); 使用一个链接器(linker)把这个转换后的程序与它所引用的库文件(如printf, scanf)链接在一起,生成最终的可执行程序(即 .exe 文件); 类似于Visual Studio 之类的编程环境,可以把这两个步骤合二为一。49从源程序到可执行程序的转换501.4 C程序的上机步骤1.4.1 上机环境 操作系统:Windows系列,如Windows XP 或Vi
23、sta等; 编程工具:Visual C+ 6.0 或以上的版本。511.4.2 上机步骤一、打开Visual C+ 编程环境;二、创建工程;三、创建源文件,编辑源程序;四、编译和链接,生成可执行文件。52一、打开Visual C+ 编程环境进入VC编程环境主要有两种方法: 在Windows系统的桌面双击 VC 图标; 从Windows系统的“开始菜单”进入。53方法1:用鼠标双击“桌面”上的VC图标,进入环境54方法2:从“开始菜单”进入1. 用鼠标点击“开始” 菜单2. 鼠标上移至“程序(p)”3. 将鼠标水平右移至下一级菜单中的“Visual Studio 6.0”4. 点击“VC 6.0
24、”5556File 菜单:文件操作等57Edit 菜单:编辑查找58View 菜单:窗口设置等59Insert 菜单:资源加入等60Project 菜单:工程管理等61Build 菜单:编译链接调试62Tools 菜单:调试工具、系统配置等63Window 菜单:窗口管理64Help 菜单:帮助信息65二、创建一个新的工程 工程(Project)的概念: 由一组相关的文件(源文件、头文件、资源文件、配置文件等)所构成,用来生成一个最终的二进制文件(例如可执行文件EXE、动态链接库DLL等); 每一个程序都需要一个相应的工程,工程名即为生成的程序的名字(而非源文件名)。 工作空间(Workspa
25、ce)的概念: 每个工程都存在于一个工作空间中,在创建一个新的工程时,相应的工作空间也被创建; 一个工作空间可以包含若干个相关的工程。661. 单击“File” “New”或者按快捷键Ctrl+N67创建新工程的界面682. 指定工程的类型、存放位置和名称(a) 类型:控制台程序(b)存放位置(c) 工程名称选择路径693. 指定控制台程序的类型选择空的工程。70确认信息71新工程已创建72三、创建源文件,编辑源程序(a)文件类型:C+源文件(b) 源文件名称test.c1. 创建源文件(方法1:单击“File” “New” )731. 创建源文件(方法2:鼠标右击Source Files)74输入文件名test.c752. 编辑源文件main ( ) printf(“Hello, world! n”);763. 经常性地存盘存盘的方法: 单击“File” “Save” 按快捷键Ctrl+S 在工具栏上点击图标 。77四、编译链接、调试程序(1)单击“Build” “Build” 或者按F7进行编译链接(2)单击“Build” “Execute” 或者按Ctrl+F5运行程序78 END