实践是能力赖以生长的土壤!高级语言程序设计主讲教师:贾彩燕计算机与信息技术学院计算机科学与技术系cyjia@bjtu.edu.cn第一章程序设计与C语言(下)主要内容程序和程序语言程序和程序语言算法及其描述工具程序开发过程问题与程序设计1.4.1程序—直观理解“程序”(program)通常指完成某些事务的一种既定方式和过程。例1:到图书馆借参考书1)进入图书馆;2)查书目;3)填写索书单;4)如果书未借出那么:交图书馆工作人员取书;办理借书手续;到5;5)如果还需借其它书,回到2;否则到6;6)离开图书馆。例2:计算n的阶乘#includestdio.hintmain(){inti=1,n;/*定义i和n变量,并为一i赋初值1*/longp=1;/*因阶乘取值范围较大,故p定义长整型,并赋初值1*/printf(Pleaseentern:);scanf(%d,&n);/*输入n值*/while(i=n)/*先判断后执行,循环n次*/{p=p*i;/*做累乘运算*/i++;/*累乘数计数器加1*/}printf(%d!=%ld\n,n,p);/*以长整型格式输出计算结果*/return0;}一些直观特征按部就班地进行;开始与结束;完成某项具体任务;需要用某种记法形式描述(计算机程序需要用某种精确定义的形式描述);是在一些基本动作的基础上描述的;不同的描述粒度(细节程度);……程序程序程序规定了计算机执行的动作和动作的顺序。如同开会的议程,每周的课程安排表一样。一个程序应包括以下两方面的内容:对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构。对操作的描述。即操作步骤,也就是算法(解决问题的方法和步骤)。数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。程序=数据结构+算法著名计算机科学家NikiklausWirth作为程序设计人员,必须认真考虑和设计数据结构和操作步聚硬件层面上的程序是机器指令的序列。程序执行:将程序存入内存,通知CPU第一条指令的地址。命令它“开始”!一般情况下,CPU执行完一条指令后,自动取出下一条指令,并如此继续下去。转跳指令明确指定下一条指令的位置,人可以基于转跳指令描述复杂的执行流程。人命令计算机去执行一个程序,计算机就会一丝不苟地按这个程序的内容,一条一条指令执行,直至程序结束(指令执行到了最后,或者遇到明确的停止指令)。程序的执行算法:解决问题的方法和步骤。例1:用公式y=x2-2x+3计算x=0,1,2,3,……100所对应的y值,使用如下算法:(1)置x为0;(2)置x的上界n=100;(3)当x≤n时,重复执行3.1,3.2,3.3步,否则,算法停止。(3.1)用公式计算y值;(3.2)打印一组x和y的值;(3.3)x值增加1。1.4.2算法算法的5个特性有穷性即算法通过有限步骤后能够结束确定性无二义性,算法必须具有清晰的定义、不能存在任何的模糊有0个或多个输入有一个或多个输出可行性即算法的每一步都是可执行的同一个问题可以有多种算法算法的描述工具流程图(传统流程图)用一些图框表示各种操作,形象直观,易于理解ANSI规定一些常用的流程图符号流程图-ANSI(AmericanNatronalStandardsInstitute)标准起止框选择框YN处理框输入输出框注释框连接点流程线算法的描述工具:流程图一个流程图包括以下几部分表示相应操作的框带箭头的流程线框内外必要的说明文字x=nx=0,n=100计算y=x*x-2*x+3打印x,yx=x+1开始结束真假算法的描述工具:N-S图N-S图(流程图)x=0,n=100x=n计算y=x*x-2*x+3打印x,yx=x+1算法的描述工具:伪码伪码begininitializextozeroinitializento100whilex=ncalculateyprintx,yaddonetoxend例2:求1+2+…+100的和i=100sum=0,i=1sum=sum+ii=i+1开始结束真假printsum传统流程图例2:求1+2+…+100的和beginsum0,i1;whilei=100sumsum+i;ii+1;printsumendsum=0,i=1i=100sum=sum+1i=i+1printsumN-S图伪代码课堂练习1请为2+4+6+…+200设计算法并画流程图课堂练习2判断某一年是否为闰年能被400整除能被4整除,但不能被100整除起床刷牙洗脸吃饭早自习拿饭碗去食堂排队买饭吃饭洗碗离开食堂排队选饭选菜付款“程序”分解实例(早起活动):程序设计过程:自顶向下逐步细化编写程序不应该从第一个细节开始逐步分解,直至分解到程序语言提供的功能。程序设计思想自顶向下、逐步细化从问题出发,从高层开始设计程序;逐步分解程序功能,直至可以用程序语言实现。结构化三种基本结构(顺序、选择、循环)的组合模块化函数结构化程序设计的三种基本结构(顺序、选择、循环)和改进的流程图(1)顺序结构AB入口出口特点:无条件顺序执行A,B语句或语句串A,B可能是其他结构(2)选择结构AB入口出口特点:要么执行A,要么执行B条件P满足执行A不满足执行BA,B可能是空语句条件PYN结构化程序设计的三种基本结构(顺序、选择、循环)和改进的流程图(3)循环结构a.当型循环(while)b.直到型循环(do-while)特点:条件P满足执行A再测试条件……不满足结束先判断,后执行有可能A一次也没执行A入口条件PYN出口a.当型循环(while)结构化程序设计的三种基本结构(顺序、选择、循环)和改进的流程图(3)循环结构a.当型循环(while)b.直到型循环(do-while)特点:条件P不满足执行A再测试条件……满足结束先执行,后判断A至少执行一次A入口条件PYN出口b.直到型循环(do-while)一般一个算法既可以用while型也可以用do-while型实现结构化程序设计的三种基本结构(顺序、选择、循环)和改进的流程图N-S结构图表示ABPYNABA顺序结构选择结构当P成立当型循环A直到P成立直到型循环主要内容程序和程序语言程序和程序语言算法及其描述工具程序开发过程问题与程序设计1.4C程序的加工和执行用C语言写出的程序称为源程序,不能直接执行。为执行C程序,必须先把它转换为可执行程序。这种转换称为C程序的加工,是C语言系统的主要功能。C程序加工通常分两步:编译:编译程序处理源程序,生成机器语言目标模块,目标文件。目标模块不能执行,缺少必要的C程序运行系统和库功能。连接:连接程序把目标模块与运行系统、库模块组合起来,构成完整的可执行程序。编译C语言函数库连接C源程序目标模块可执行程序C源程序的加工过程程序代码的录入,生成源程序*.c语法分析查错,翻译生成目标程序*.obj与其它目标程序或库链接装配,生成可执行程序*.exe源程序目标程序可执行程序内容程序设计语言机器语言机器语言可执行不可以不可以可以文件名后缀.c或.cpp.obj.exe不同C系统启动程序加工的方式不同。集成程序开发环境(IDE,IntegratedDevelopmentEnvironment)是支持软件开发过程的软件系统。IDE把编程所需软件集成起来统一管理和使用。采用窗口菜单技术,提供编程用编辑环境,通过菜单提供编译、连接、执行程序等命令。C的运行环境:TurboC(TC)VisualC(VC)程序调试和排误调试(Testing)和排除错误(排错,Debugging)是编程的必经阶段。初学者的观点:我写的程序肯定没问题,照书上写的,是系统或者计算机有问题程序中的错误是人的错误。排除程序错误就是排除自己在程序设计中所犯错误。错误可分为两类:语法错误程序形式不符合语言规定。C语言系统在加工时能指出程序里的这类错误。逻辑错误、链接错误程序形式正确,能完成加工,产生可执行程序。但程序工作不正常:或在执行中出问题,或计算结果(或执行效果)不合要求。常见Bug:违反环境要求;死循环,异常,逻辑错误语言系统查出错误时,将产生一些“错误信息”行,指明发现位置和错误类型,供人参考。注意:应仔细阅读系统报错信息,检查所指位置附近的源程序,找到实际错误并予以排除。基本原则:集中精力排除系统发现的第一个错误。两个问题:1)实际错误可能出现在指定错误位置前面很远处。2)一个实际错误有时会导致许多出错信息行。应注意警告信息(Warning)。警告常表示隐藏较深的错误,必须认真弄清原因。主要内容程序和程序语言程序和程序语言算法及其描述工具程序开发过程问题与程序设计1.5问题与程序设计过程程序设计是智力劳动,编一个程序就是解决一个问题。用计算机解决问题的过程可分为三步:分析问题,设计一种解决问题方案(算法设计);用某种程序语言严格描述这一解决方案(编程);在计算机上试用程序,看它能否解决问题(调试)。算法是核心、是灵魂,程序是外壳!分析问题编制程序编译连接调试运行完成编译中发现错误,转回修改源程序。连接中发现错误,转回修改源程序。调试运行中发现问题分析本身有错误,重新分析问题。程序的开发过程调试运行中发现程序编写有错误,修改源程序。分析抽象实现问题解决方法精确描述(算法)程序(源程序)算法:由若干条指令组成的有穷序列,满足一定条件。程序:是算法用程序设计语言的具体实现。程序设计语言程序计算机翻译机器语言执行程序设计语言设计方法程序程序=算法+数据结构+程序设计方法总结掌握语法规则,体会程序设计语言结构;理解算法,掌握程序设计的方法和技巧;能剖析和理解经典算法;养成良好的程序设计习惯,编制复杂程序;高级语言程序设计是一门实践性较强的课程,必须多上机练习,积累编程经验。学习要求第二章数据对象与计算(上)问题1:读入两个整数,输出它们的乘积m=x*y问题2:输入三角形的三边长,求三角形面积area=s(s-a)(s-b)(s-c),s=(a+b+c)/2思考:数据如何输入给计算机?计算机如何计算?结果如何输出?x,y,a,b,c,…定义?类型?输入?如何写公式(表达式)?计算?结果以什么形式给出?屏幕显示?用计算机解决需考虑什么问题?提出问题?问题1:读入二个整数,输出它们的积/*inputtwonumbers,outputtheproduct*/#includestdio.hvoidmain(){intx,y,m;printf(“Pleaseinputxandy\n”);scanf(“%d%d”,&x,&y);m=x*y;printf(“%d*%d=%d\n”,x,y,m);}Pleaseinputxandy282*8=16运行结果:/*已知三角形三边边长求三角形的面积*/#includestdio.h#includemath.hvoidmain(){doublea,b,c,s,area;printf(Pleaseinputa,bandc\n);scanf(%lf,%lf,%lf,&a,&b,&c);s=(a+b+c)/2.0;area=sqrt(s*(s-a)*(s-b)*(s-c));printf(a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n,a,b,c,s);printf(area=%7.2f\n,area);}Pleaseinputa,bandc3,4,6a=3.00,b=4.00,c=6.00,s=6.50area=5.33运行结果:问题2:输入三角形的三边长,求三角形面积area=(s(s-a)(s-b)(s-c)s=(a+b+c)/2主要内容(第二章:数据与对象)基本字符、标识符和关键字数据类型基本类型与数据表示基本输入输出运算符、表达式与计算数学函数库及使用本章学习目标学习