计算概论(IntroductiontoComputing)主讲人:马思伟北京大学数字媒体研究所第五讲程序设计简介及编程环境222提纲程序设计语言程序基本框架及基本元素程序书写规则编程环境学习程序设计五要素333程序设计语言程序:描述计算机处理数据、解决问题的过程,这是程序的实质,但程序的描述形式却可以是多种多样的,可以用不同的方式表述。程序设计:为计算机的执行部件----CPU安排执行计划程序设计语言:(也被称为“编程语言”,ProgrammingLanguage)是人们编制程序所使用的语言。机器语言:01000000表示把存储在寄存器EAX中的数值加1汇编语言:INCEAX(汇编器将其转化为机器语言)高级语言444机器语言机器指令采用二进制代码形式,符合具体计算机的指令系统,可以由计算机直接执行是一种可以在程序设计中使用的语言,被称为“机器语言”每一条机器指令包括两个主要方面:操作(指出计算机应做什么)和被操作的对象(指出处理的数据或它的地址)机器指令格式:操作码操作数……操作数分类:数据传送、算术运算、逻辑运算、控制转移…555机器语言8086/8088的指令系统133条基本指令,可分成6个功能组:数据传送:通用传送、地址传送、标志传送、输入输出等算术运算:加减乘除符号扩展等逻辑运算、移位指令:逻辑运算、移位、循环移位串操作:串处理和重复控制控制转移:无条件转移、条件转移、循环控制、过程调用、中断指令等处理器控制:停机、等待等下面给出了几条以二进制形式描述的Intel80386指令以及对它们的文字解释。01000000:把一个寄存器(EAX)的值加一100010110000010100000000011110011000111110101101从某个内存单元取出数据,装入EAX寄存器666机器语言机器指令的执行过程在CPU的运算器ALU中执行首先将程序指令和数据放到主存储器中程序开始,将第一条指令地址放到程序控制单元的IP寄存器中并启动程序逐条传送指令到运算器中执行,中间结果保存到寄存器组中,控制单元负责取下一条指令遇到停机指令,程序结束777机器语言数据流控制流取数存数地址指令(内)存储器控制器运算器输出设备输入设备程序+数据操作命令处理结果反馈信号响应信号请求信号响应信号请求信号机器指令的执行过程888机器语言缺点:难记忆,编程效率低;难调试用机器语言编程,不仅指令操作需要用规定的二进制代码描述,程序里的数据也要程序设计者自己安排存储位置程序不易修改,无法由一种计算机环境移植到其他环境上999汇编语言“汇编程序设计语言”的基本想法:采用帮助记忆作用的符号例如用ADD表示加法操作,用JMP表示控制性转移等操作的对象(数据或数据的地址)也能用符号形式表示,例如用X、Y代表两个存储数据的容器格式助记符操作数…操作数101010汇编语言一组具有帮助记忆作用的“汇编指令”,每条汇编指令都和一条机器指令相对应,只是指令码和操作数都采用符号形式。……PUSHECXMOVERROR,0MOVECX,EAXCMPECX,0JMPFAILCALLFACT……111111汇编语言汇编程序:计算机是不能直接执行的,必须在交给计算机执行之前先把它翻译成二进制的机器语言指令程序汇编器:把用汇编语言书写的程序翻译成机器语言程序的软件121212汇编语言编程例:算术运算计算135+22-1MOVAX,135MOVBX,22ADDAX,BXSUBAX,1HLT寄存器组AX……00BXCPUCXDX00HL000000000000寄存器组AX……00BXCPUCXDX87HL001600000000131313汇编语言编程计算135+22-1MOVAX,135MOVBX,22ADDAX,BXSUBAX,1HLT寄存器组AX……00BXCPUCXDX9DHL001600000000寄存器组AX……00BXCPUCXDX9CHL001600000000141414汇编语言编程累加运算例:计算从1累加到100的和用AX保存累加结果,从1开始,每次加一个数,到100为止。将被加数放到BX中保存,即每次加BX,加完后对BX进行加1运算设置一个循环,判断是否加到100,即判断BX是否为101CMP指令对两个操作数作减法运算,将影响的标记记录在标志位中,供查询使用,而源目操作数均不改变。MOVAX,1MOVBX,2calc:CMPBX,101JEstopADDAX,BXINCBXJMPcalcstop:HALT寄存器组AX……00BXCPUCXDX01HL000200000000寄存器组AX……00BXCPUCXDX03HL000300000000CPU寄存器组AX……13BXCXDXBAHL006500000000151515汇编语言编程求最大值例:求一组整数33,15,21,7,9,23,4,76,87,45中的最大值定义一个数组变量DATA存储给定的数据。用BX记录当前数的索引,每处理完一个数加1。CX为计数寄存器,隐式地为循环指令LOOP计数。MOVAL,0MOVBX,0MOVCX,10next:CMPDATA[BX],ALJLunchangedMOVAL,DATA[BX]unchanged:INCBXLOOPnextHLT寄存器组AX……00BXCPUCXDX00HL0000000A0000寄存器组AX……00BXCPUCXDX21HL000100090000161616汇编语言缺点:描述机制层次太低,其基本描述单位仍然是指令,这种方式与人们描述计算过程的需要之间差距太大与计算机硬件的具体结构、指令系统联系过于紧密,这种情况造成的后果是在一种计算机上开发的程序极难搬到另一种不同结构的计算机上使用不仅工作量将非常大(与重写差不多),而且很容易引出程序错误,修改也非常困难。特点直接对硬件操作,运行效率高需要对硬件熟悉,编程难度高171717高级程序设计语言特点在对计算过程的描述方面,完全脱离了简单的指令方式,采用类似于数学公式的书写方式描述由一些数据计算出结果的过程用一些更高级程序流程描述结构取代简单的跳转指令方式,以更好地满足书写程序的需要程序=存储数据的空间+处理数据的语句181818高级程序设计语言4个核心概念变量表达式、语句、赋值191919高级程序设计语言4个核心概念变量内存中的若干字节,存放数据,初值、中间结果、最终结果高级语言中的变量采用字符串形式的名字,如x、len、Max、Number等一方面名字可以帮助人们掌握变量所代表的信息含义,在程序里只要用变量的名字就可以读写访问它的存储单元里的数据202020高级程序设计语言4个核心概念变量表达式、语句、赋值表达式:类似于数学中的代数运算式。语句:程序中基本的动作单位赋值语句:最基本的语句X=2*1.047-2;//左面是变量,右面是表达式Y=X*X;//读取变量X的值,参与计算X=2*SIN(1.047);Y=X*COS(W);212121高级语言程序的执行高级语言程序不可能直接地在计算机上执行要在计算机上执行高级语言程序,有两种基本方法第一种方法称为编译(Compilation):把高级语言程序(也称为“源程序”)转换成为机器语言的可以由计算机直接执行的程序,即转变为“可执行程序”(ExecutableProgram)另一种称为“解释”(Interpretation)的实际执行方式222222高级语言程序的执行编译器把高级语言程序看成是符合一定语法结构的符号串,对它进行加工变换,一般分为两个阶段,源程序首先被翻译成机器语言,这种翻译结果称为“目标码”(objectcode),目标码构成的程序片段称为目标模块。第二步,这些目标模块被与其他一些基本模块(由编译软件提供)连接在一起,最终形成“可执行程序”(executableprogram)第一个加工步骤称为“编译”(compiling),第二个步骤称为“连接”(linking)。编译过程232323高级语言程序的执行高级语言程序还可以采用另一种称为“解释”(Interpretation)的实际执行方式。这种方式由一种称为“解释器”(Interpreter)软件实现。解释器在工作方式上与编译器不同,它不对源程序进行翻译,而是直接对源程序的语句进行分析和解释,实现源程序所描述的功能。242424高级语言FortranFormularTranslation,IBM,20世纪50年代(1954-1957)主要用于科学计算COBOL1960,CommonBusinessOrientedLanguage,可读性强,程序罗嗦主要用于编制商业企业信息管理系统的处理程序和软件BASICBeginner’sAll-purposeSymbolicInstructionCode,JohnKemeny,ThomasKurtz,1964年1985年TrueBasic;QuickBasic,VisualBasic252525高级语言PASCAL1968,N.WirthC/C++1972年,DennisRetchie,C语言1983年,BjarneStoustup,C++,面向对象程序设计Ada美国军用程序设计语言,针对装备在机电设备、武器装备里的计算机控制、管理软件系统开发应用。Java1991年,Sun公司,JameGosling,BillJoe262626C语言由美国贝尔实验室的DennisRetchie在1972年设计开发,开发目的是想成为一种编制“系统程序”的工具语言Retchie等人首先用自己发明的C语言编写了UNIX操作系统。以后C语言逐步发展成为开发系统软件的主要语言C语言已成为最重要的软件系统开发语言,由此可见C语言在计算机领域地位之重要。272727C++语言C++是在C语言基础上发展出的一种“面向对象”语言,由BjarneStroustrup在美国贝尔实验室开发的(1983),是目前使用最广泛的一种面向对象的程序设计语言。C++是C语言的一个扩充它一方面修正了C的一些弱点和不足,使用起来更方便可靠另一方面,支持“面向对象”(Object-Oreinted,简称为OO)的程序设计方法为基本目标,提供了一套支持面向对象程序设计的机制,如“类”(class)、“对象”(object)等等面向对象的方法被认为是开发复杂软件系统的一种有效途径,OO程序设计语言也已经被广泛接受282828JAVAWriteonce,runeverywhere.目前网络程序开发的主要语言特点面向对象便于网络开发简单易学292929关于语言的思考自然语言字-词-短语-句子-文章-文集-文库词:动词、名词….短语:成语、短句C语言关键字-常量/变量-表达式-语句-程序-程序包-软件系统常量、变量:整数、浮点数…303030提纲程序的基本框架程序的基本元素标识符和关键字数据类型、常量和变量运算符和表达式语句313131程序的基本框架编译预处理(宏、头文件)自定义函数声明intmain(){说明部分/*变量定义等*/执行部分/*输入/输出/计算*/}自定义函数323232程序的基本框架333333程序的基本框架基本元素主函数:main()每个程序有一个主函数且只能有一个程序执行从主函数开始,从主函数结束主函数可以调用其它函数(标准库函数,用户自定义函数),其它函数不能调用主函数,但其他函数相互之间遵循一定的规则可以相互调用343434程序的基本框架基本元素标准库函数C语言提供的各种标准的通用功能函数,调用前必须在程序开始的地方用include语句包含含该函数的定义文件例:s=(float)(PI*pow(r,2));pow(x,y)//