第13、14讲 程序设计基础
程序概念 维基解释(zh.wikipedia.org) http://zh.wikipedia.org/zh-cn/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E8%AF%AD%E8%A8%80
另一种解释 参见Wiki解释http://www.wikilib.com/wiki?title=%E7%A8%8B%E5%BA%8F&variant=zh-cn 计算机程序或者软件程序(通常简称程序)是指一组指示计算机每一步动作的指令,通常用某种程序设计语言编写,运行于某种目标体系结构(执行机构)上。打个比方,一个程序就像一个用汉语(程序设计语言)写下的红烧肉菜谱(程序),用于指导懂汉语的人(体系结构)来做这个菜。 通常,计算机程序要经过编译和链接而成为一种人们不易理解而计算机理解的格式,然后运行。 未经编译就可运行的程序通常称之为脚本程序。
CPU五大部件
语言分级 高级语言 机器语言
高级语言 机器语言 6
江西财经大学信息管理学院 《数据库应用》课程组2007 高级语言 编译 或 解释 机器语言 江西财经大学信息管理学院 《数据库应用》课程组2007 7
程序设计过程 程序设计即是计算机用户根据解决某一问题的步骤,按一定的逻辑关系,将一系列的有序指令组合在一起。
有序性的例子P287 例如,从图书馆借一本书的过程可以描述为6个步骤: ① 进入图书馆。 ② 从图书管理系统终端机上查找书目信息。 ③ 根据查找结果决定采取的行动,若查到书目并且图书在馆,则转到步骤④;若查到图书但不在馆,则转到步骤⑤;若无所需图书,直接转到步骤⑥。 ④ 进入书库取书,办理借书手续,完成后转步骤⑥。 ⑤ 办理图书预约手续。 ⑥ 离开图书馆。
问题如何描述有序性 答案:流程图 ANSI流程图 N-S流程图 什么是流程图? 流程图是一种用图解方式说明,解决一个问题所要的一系列操作。流程图比文字更容易理解,更加直观. ANSI流程图 N-S流程图
ANSI流程图 起止框:表示程序的开始或结束 处理框:表示对数据进行处理 输入/输出框:表示数据的输入、输出操作 判断框 箭头:表示程序流向 连接符号:表示图标之间相互连接关系 判断框:表示根据条件决定程序走向 过程:表示该流程部分是一个过程 输入/输出框:表示数据的输入、输出操作 处理框:表示对数据进行处理 起止框:表示程序的开始或结束
流程图描述P287例子
男女关系进化流程图
编程一般步骤
算法(1) 程序的设计过程,核心问题是设计一个合理、有效的算法。 一般认为,算法就是在有限的时间内,可以根据明确规定的运算规则,在有穷步骤内得出确切计算结果的机械步骤或能运行的计算程序。
算法(2) 算法特性: (1)有序性:每个步骤被执行的顺序是确定的。 (2)有限性:即解题步骤是有限的,无穷的步骤意味无解。 (3)确定性:多次运行同样一个程序,其结果相同。 此外,算法可以没有输入(因为输入由计算机自动产生),但一定要有输出,输出用来表示问题是否有解。
算法(3) 顺序结构是程序设计中最基本的结构。在该结构中,程序的执行是按命令出现的先后顺序依次执行的。 三种基本控制结构:顺序、分支、循环 顺序结构是程序设计中最基本的结构。在该结构中,程序的执行是按命令出现的先后顺序依次执行的。 分支结构是按给定的选择条件成立与否来确定程序的走向。分支结构可分为双重分支选择和多重分支选择。在任何条件下,无论分支多少,只能选择其一。
算法(4) 循环结构是一种重复结构,即某一程序段将被反复执行若干次。 三种基本控制结构:顺序、分支、循环 按循环体执行的条件性质,循环又可分为:While(当型)循环和Until (直到型)循环。 按循环的嵌套层次,循环可分为简单循环结构和循环嵌套(也称为多重循环)结构。 无论何种类型的循环结构,都要确保循环的重复执行能够终止。
算法(5) 结构化程序是指仅由三种基本控制结构组成的程序,它具有以下特点: (1) 整个程序模块化。 (2) 每个模块只有一个入口和一个出口。 (3) 每个模块都应能单独执行,且无死循环。 (4) 采用黑箱的思想,宏观地描述任何一个程序,可以将它看成为顺序结构。
1. ANSI流程图(2) 顺序结构
1. ANSI流程图(3) 条件分支结构
1. ANSI流程图(4) 循环结构 While型循环结构 Until型循环结构
2. N-S图 (1) 顺序结构 语句块1 语句块2 语句块3
2. N-S图 (2) 条件分支结构
2. N-S图 (4) 循环结构 Until型循环结构 While型循环结构
例 从键盘输入两个数, 判断两个数的大小。 分析:这是一个分支程序设计,具体的过程描述为: 开始,定义两个变量: x,y 输入二个数给x,y 否则 输出:x小于y,结束
答案 开始 定义两个变量:x,y 给x,y输入相应的值 真 假 x>y? 输出:x大于y 输出: x小于y 结束 两数中求最大值流程图
While型循环一般结构 循环初值 否 循环条件 是 被循环执行的代码 改变循环值 循环结束需要的处理
江西财经大学信息管理学院 《数据库应用》课程组2007 求s=1+2+…+99+100 s = 0 i = 1 否 i <= 100 是 s = s+i i = i +1 输出s的值 江西财经大学信息管理学院 《数据库应用》课程组2007
课题练习 s=2+4+…+98+100 否 是 江西财经大学信息管理学院 《数据库应用》课程组2007 34
习题1 输入一个数,如果此数大于零,输出一个’+’号,否则输出一个’-’号,请描述程序设计的过程,并画出流程图。 提示: 用判断的方法解决此问题,可以描述为: 程序开始 定义变量 读入一个数 如果此数大于0 输出+ 否则 输出- 程序结束
习题2 3. 以循环的方式计算某人的年收入,假定此人以月为单位的收入,请描述程序设计的过程,并画出流程图。 3. 以循环的方式计算某人的年收入,假定此人以月为单位的收入,请描述程序设计的过程,并画出流程图。 提示:循环12次 4. 键盘输入一批数,输入零时结束,分别计算负数与正数的总和,最后输出结果,请描述程序设计的过程,并画出流程图。 5. 有一批数,在这批数中要查找一个特定的数是否存在,请描述程序设计的过程,并画出流程图。
A Joke(C语言版)
姑娘爱小伙(伪C语言版) result love(boy, girl ){ if( boy.有房() and boy.有车()){ boy.set(nothing); return girl. 嫁给(boy); }
姑娘爱小伙 (搞笑版) if( girl.愿意等 ()){ while(!(boy.赚钱 > 100,000 and girl.感情 > 8 )){ for ( day=1; day <=365; day++){ if( (day == 情人节 or day == girl.生日)& and boy.givegirl(玫瑰)) girl.感情++; else girl. 感情--; boy.拼命赚钱(); }//for }//while
姑娘爱小伙(搞笑版) if( boy.有房() and boy.有车() ){ boy.set(nothing); return girl.嫁给(boy); } else{ 年龄++; girl.感情--; return girl.goto( another_boy);
姑娘爱小伙(搞笑版)完整版 result love(boy, girl ){ if( boy.有房() and boy.有车()){ boy.set(nothing); return girl. 嫁给(boy); } if( girl.愿意等 ()){ while(!(boy.赚钱 > 100,000 and girl.感情 > 8 )){ for ( day=1; day <=365; day++){ if( (day == 情人节 or day == girl.生日)& and boy.givegirl(玫瑰)) girl.感情++; else girl. 感情--; boy.拼命赚钱(); }//for }//while if( boy.有房() and boy.有车() ){ return girl.嫁给(boy); else{ 年龄++; girl.感情--; }//if愿意等 return girl.goto( another_boy);
程序可读性 缩格 对齐
教科书习题 (1)有一函数: x ( x<1 ) y = 2x-1 ( 1≤x<10 ) 3x-11 ( x≥10 )
(2)给出一个百分制成绩,要求输出成绩对应的等级‘A’、‘B’、‘C’、‘D’、‘E’。90~100分为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,0~59分为‘E’。 (3)输入20个学生的成绩,统计各分数段的人数。分数段为:90到100分,80到89分,70到79分,60到69分,0到59分。
(4)有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13,...,求该数列的前20项之和。 (5)由1、2、3、4能组成多少个互不相同且无重复数字的三位数。 (6)输入三个整数x,y,z,由小到大输出这三个数。
(7)求出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,153=13+53+33。 (8)一个数如果恰好等于它的因子之和,就称这个数为“完数”,如6=1+2+3,找出1000以内的所有完数。