第2章 程序的灵魂-算法
前面的话:
这是给几个高中的兴趣班讲解谭浩强的《C程序设计》第三版的讲义之节选,实际讲解时使用了10个道具盒子演示计算过程。另外,例子的解释选取了2.1、2.3、2.4这3个比较典型的,最后用谭浩强先生书上的几个简单的例子给出了关于什么是结构化的程序设计方法的解释
例2.1
例2.3
去掉了s2后,算法的功能保持不变哦!!!!!!!
例2.4
面向过程的结构化程序设计的一般性解题方法:
假想现在你是一个老师,希望让你的小学学生为你完成一个题目的计算,但是, 并不想告诉他解决的是什么问题,你,可以把题目分解成简单到只有+ - x / 步骤的命令表,让他照表上的命令从头到尾执行完,把结果给你。这时,他并不知道这个命令表的目的,但你的结果拿到了。。。。。,这就是程序设计。
给编程序打个比方:
一个只会加减乘除的小学生,现在你要让他帮助你求某些数字的最大公约数.
有几种办法可选
1.教会他求最大公约数的方法
2.把求解方法分解成他现在就能马上能计算的若干步,让他按照步骤作,不用告他在求解什么,只要正确的按步骤求解出结果就可以了.
显然,方法2这个小学生更容易上手.
对于机器而言,你只能选择方法2,因此,在让机器运算以前,你必须对计算的每一步十分了解,并确保正确,因此,你必须首先具体到机器能理解的每一步,这也是学习程序设计方法的精髓所在.........
电脑就是机器,它的智力并不能理解上面求某些数字的最大公约数的例子,同时也不会理解诸如: 给出一个百分制成绩,要求输出成绩等级,A,B,C,D,E. 90以上为A,80-89为B,70-79为C,60-69为D,60以下为E的问题。。。。。。,但是我们可以将求解的过程分解成它能理解并执行的+、-、X、/、比大小等命令的列表,如何分解成这样的列表呢?
看一下下面给成绩分级的例子,求解它的机器命令列表生成的全过程。
例子: 给出一个百分制成绩score,要求输出成绩等级,A,B,C,D,E. 90以上为A,80-89为B,70-79为C,60-69为D,60以下为E.
1、 好,现在,我给你一个分数95 ,你能判断的出他的成绩等级吗? 当然 ,是A。
2、 好,现在,我给你一个分数85 ,你能判断的出他的成绩等级吗? 当然 ,是B。
3、 好,现在,我给你任一个分数 ,你能判断的出他的成绩等级,并写在黑板上吗? 当然,那么,告诉我你是如何做的?
你会,这样描述给我:
设,有一个分数变量
当给定此变量一个百分制分数时
如果 分数<=100 同时 分数>=90 写下 A
否则 如果 分数>=80 写下 B
否则 如果 分数>=70 写下 C
否则 如果 分数>=60 写下 D
否则 如果 分数>=0 写下 E
否则 写下 给错分数了
4、 好,现在把上面的这段话翻译成英文:
float score
input a float data -----> score
if score<=100 and score>=90 then write A
else if score>=80 then write B
else if score>=70 then write C
else if score>=60 then write D
else if score>=0 then write E
else write down "input data Error!!!!!!!!!!!"
这个时候的表达,已经很接近计算机可以理解的C程序了(毕竟计算机是起源于美国,他能理解的东西更接近英语)。
5、由于计算机C语言的write是printf,因此继续进行语法规范如下:
float score; /*设有一个变量score*/
scanf("%f",&score); /*给出一个百分制成绩score的值*/
if (score<=100&&score>=90) printf("A");
else if (score>=80) printf("B");
else if (score>=70) printf("C");
else if (score>=60) printf("D");
else if (score>=60) printf("D");
else if (score>=0) printf("E");
else printf("input data Error!!!!!!!!!!!");/* 输入数据错误>100或<0 */
这个时候的表达,已经是计算机可以理解的C程序了。
6、在加上计算机可理解的简单程序所须的格式:
开头是: #include<stdio.h>
void main(){
结尾是: }
最终程序如下:
#include<stdio.h>
void main(){
float score; /*设有一个变量score*/
scanf("%f",&score); /*给出一个百分制成绩score的值*/
if (score<=100&&score>=90) printf("A");
else if (score>=80) printf("B");
else if (score>=70) printf("C");
else if (score>=60) printf("D");
else if (score>=60) printf("D");
else if (score>=0) printf("E");
else printf("input data Error!!!!!!!!!!!");/* 输入数据错误>100或<0 */
}
最终的程序完成了,这就是计算机可以理解的命令列表-------程序,其中只含有计算机可以理解执行的简单的命令。
从上面可以得出计算机程序设计的一般性的编程解题方法:
1、你自己先解题目,就象上面的1、2步。
这个步骤达到的目的是:让你充分的了解题目,也就是对它的求解过程的全面接触
2、 记录下你解决问题的过程的每一步并整理,就象上例中的第3步(最重要的步骤)
尽量只使用 + - x / 和比较大小以及所需数据的输入和输出命令。
这个步骤达到了一个重要的目的:
你写下的解题步骤,交给任何一个识字并且会比大小的人,比如一个小学生,他不理解这些步骤的最终目的,但是只要严格按照步骤进行,就能得出正确的最后结果。
3、接下来的第4、5、6步,就是翻译成英语和规范成C语言了。
注意:绿色的大大的过程两个字,传达了一个信息,编制程序的出发点和目标就是发现并记录下你自己在解决问题时采用的步骤的全部,即解决问题的全过程,对编程序再次做一个简单的比喻:你见过摆骨牌的吗?设定好全部前后顺序,然后推倒第一个骨牌, 你就不用管了,剩下的事情它自己完成,编程序就象是从头到尾摆骨牌。执行程序就象是推倒第一个骨牌,而程序就象是骨牌倒下的全过程,结果就是最后呈现在你面前的骨牌图案。计算机的智能是极其有限的,各种程序就是我们人的思想在计算机中的再现,这种再现能指挥计算机工作。你的任务就是再现要完成的任务的全部过程。
因此我们编制小型程序就是在寻找这个过程,找到了它,你的任务也就差不多完成了,这就叫面向过程。
转载于:https://blog.51cto.com/yonghu/1321435
第2章 程序的灵魂-算法相关推荐
- c语言的程序灵魂是什么,C语言 第二章 程序的灵魂--算法
<C语言 第二章 程序的灵魂--算法>由会员分享,可在线阅读,更多相关<C语言 第二章 程序的灵魂--算法(39页珍藏版)>请在人人文库网上搜索. 1.第二章 程序的灵魂-算法 ...
- C程序设计-谭浩强 第三版-学习笔记 第2章 程序的灵魂 算法
第 2 章 算法 --程序的灵魂 程序 = 算法 + 数据结构 (沃思,计算机科学家) 一个程序应该包括两方面: 对数据的描述:在程序中要指定数据的类型和数据的组织形式,即数据结构(data stru ...
- 程序的灵魂-----算法
一个程序应包括以下两方面的内容: 1. 转载于:https://www.cnblogs.com/lzhn/p/7650689.html
- md5与des算法有何不同_Python算法详解:为什么说算法是程序的灵魂?
算法是程序的灵魂,只有掌握了算法,才能轻松地驾驭程序开发.软件开发工作不是按部就班,而是选择一种最合理的算法去实现项目功能.算法能够引导开发者在面对一个项目功能时用什么思路去实现,有了这个思路后,编程 ...
- C语言程序设计(理论课)第二章(理解)算法和第三章数据类型及其运算
第二章算法--程序的灵魂 算法+数据结构=程序 数据结构 对数据的描述.在程序中要指定用到哪些数据,以及这些数据的类型和数据的组织形式. 算法 对操作的描述.即要求计算机进行操作的步骤. 广义的 ...
- C语言灵魂——算法!
程序的灵魂-算法 一个程序应包括: 对数据的描述.在程序中要指定数据的类型和数据的组织形式,即数据结构(data structure). 对操作的描述.即操作步骤,也就是算法(algorithm). ...
- 程序员与算法的羁绊,是几世以前就定下的
程序员 与算法 本章的标题既然是"程序员与算法",就必然要涉及一个基本问题,那就是"程序员是否必须会算法". 这是一个充满争议的问题,虽然并不像"生存 ...
- 《C语言程序设计》(谭浩强第五版) 第2章 算法——程序的灵魂
<C语言程序设计>(谭浩强第五版) 第2章 算法--程序的灵魂 习题解析与答案 你也可以上程序咖(https://meta.chengxuka.com),打开大学幕题板块,不但有答案,讲解 ...
- 第二章:算法——程序的灵魂
第二章:算法--程序的灵魂 2.1 程序 = 算法 + 数据结构 一个程序主要包括以下两方面的信息: 对数据的描述.在程序中指定用到哪些数据,以及这些数据的类型和数据的组织形式.这就是数据结构. 对操 ...
- moead算法流程步骤_算法——抓住程序的灵魂
做任何事情都要有一定的步骤,为了解决一个问题而采取的方法和步骤就称为算法.C语言的算法是计算机算法,即计算机能够执行的算法.只有明确了算法后,才能使应用程序实现某些功能.所以,通常人们会将算法称为程序 ...
最新文章
- 一小时讲懂图神经网络在分子上的应用
- 学用 ASP.Net 之 System.Char 结构
- [NOI2007]货币兑换
- spring-boot注解详解(五)
- usb端点轮询_使用Spring Integration轮询http端点
- uva 11387——The 3-Regular Graph
- 微博开始动手了:禁言关闭六神磊磊等50个头部账号
- Mozilla 修复已遭利用的两个火狐浏览器 0day
- 20190905 Lombok常用注解
- (转)CentOS7安装Nginx1.14.2
- oracle数据库建语句吗,Oracle建表语句是什么_数据库
- 循环系统疾病病人的护理题库【2】
- 巧用讯飞TTS进行文本合成语音(LINUX操作系统)
- 42表盘直径是从哪测量_手表尺寸怎么选择 手表尺寸怎么测量
- TestCenter Layer4-7分析
- 零基础应该怎么学剪辑,大概要学多长时间?在磨金石教育学靠谱吗?
- 使用 flying-saucer-pdf 实现html转换pdf补充
- 怎么放大图片像素不模糊?
- 计算机睡眠状态能挂游戏,台式电脑怎么设置WIN7睡眠状态下不断网我要挂游戏。...
- 注册表编辑器打开方法
热门文章
- linux+默认启动windows系统,windows liunx两个系统修改默认启动项
- IntelliJ IDEA+Maven运行apache-storm的LocalCluster例子
- MySQL的select语法
- LINUX SHELL脚本如何判断一个目录下有没有文件
- 传统武术家为什么看起来厉害?谈实战的重要性
- 吹嘘自己,只是想别人从吾这里学点东西
- configure: line syntax error near unexpected token `win32-dll'
- 工作要求,写了一些没用的设计文档
- 本博客自排名300到264的各项数据变化
- 热感传导不能证明经络的存在