当前课程知识点:C语言程序设计(上) >  从问题到C语言程序设计 >  1.1 计算机的问题求解方法 >  1.1.4-1-程序设计方法

返回《C语言程序设计(上)》慕课在线视频课程列表

1.1.4-1-程序设计方法在线视频

1.1.4-1-程序设计方法

下一节:1.1.4-2-程序设计方法

返回《C语言程序设计(上)》慕课在线视频列表

1.1.4-1-程序设计方法课程教案、知识点、字幕

大家好

接下来我们讨论

这里边我们关心两个问题

一个是

另外一个是

这个不同的时期有不同的标准

而到现今的 评价的方法

只有两个

排在第一位的 一定是

好 我们

这块专门来讨论可读性好的问题

怎么样才能让一个程序可读性好

什么叫可读性好

最简单的可读性好 就是说

我写的程序

让对方看的时候也能看明白

那么

我写的程序 一年以后

或者两年以后要修改的时候

也是方便的

修改不一定是我去做

可能是我团队的别人去做

或者是说我这个程序

要进行功能扩展的时候

也是很方便插进去的

也就说 可维护

可裁剪

可修改

好那么什么样的程序才能做到这个

基本上现在追求的是

一个是说

你的程序结构是要良好的

怎么做到

用三种基本结构

来构建程序

第二个是

尽可能的

我这写 取消GOTO

实际上说尽可能的不用GOTO

然后是用结构化程序的设计方法

我们分别来讨论这三个

什么是三种基本结构

大家看

有明确的输入

而且只有从一个地方输入

从一个地方输出

好接下来

我们看第一种

怎么讲

条件 这里边

三个里边

都至关重要的是它们的判断条件

如果条件满足

做一件事 否则继续往下走

不做事

继续往下走

这是单选择的结构

双选择的结构

是说 如果满足条件

做这件事

否则 做另一件事

无论做了哪件事

顺序往下走

这是 双选择的结构

多选择呢

就是 路更多了

我先做条件判断

你适合走那条路

而且路的多少是没有限制的

可以有 N多个

你符合什么样的条件

就走什么样的路

好 这个多选择的结构

仍然是

一个地方进来 一个地方出去

就说 无论你走了哪条路

都从同一个点上出去

所以

我们在这

顺序结构 选择结构里边

共同的一点 大家看

共同的一个特点是什么

一个入口 一个出口

这就是 这个结构的特点

顺序结构 选择结构

都是一个入口 一个出口

那我们再看第三种 循环结构

是不是这样子

循环结构 也是有两种

怎么讲 我们看当型循环

也是进来先判断

条件满足吗

如果条件满足

你就去做这个循环

否则 就不做了

也就说 如果条件满足

你才去做这个循环

否则 连一次都不做

好 直到型循环是怎么样

进了 先做

做完了 再判断

你条件满足

满足了 我就不做

不满足 这个条件 我再回去再做

所以 这里边的特色是什么

构成了循环

只是说在这个循环的过程里边

是两种情况

一种是先判断再执行这个循环

一种是先执行循环再判断

也就说

你到底是在入口处判断

还是在出口处判断

出口处判断是

直到条件满足了就不循环了

好 入口处判断是

当条件满足的时候才做这个循环

这就是 循环结构

在这里边 同样

只有一个入口 一个出口

我们把这三种基本结构

来拿到应用里边看

大家现在看第一个图

输入a b c x这是我们大家熟悉的

这是前面见过的求m的值

求函数值

这里边大家看到用了什么样的结构

我们看到总体来讲一定是顺序的

但是这个中间

用了一个什么样的结构

用了一个选择结构

对选择结构来说

它是一个入口 一个出口

衔接的是谁

衔接的是顺序结构的入口和出口

那么就说它上接顺序结构的出口

下接顺序结构的入口

这个结构总体来说是顺序结构

里边嵌套了选择结构

这个选择结构是

什么样的选择

我们刚才给了三种选择

这个是一个什么样的选择结构

我们看因为它YES 执行一种运算

否则又执行另一种运算

所以是双选择结果

接下来我们再看另一个

大家仅仅通过这个流程

能不能看到这是做一件什么事情

我们看它提供的数据是mn

而它输出的是n

大家下去自己分析一下

这是一个解决什么样的问题的

一个流程

接下来 我们看关于取消GOTO

关于GOTO这件事其实争议还是挺大的

有的人是极力主张

不要 坚决不能用

因为它太随意了

有的人认为

有了它很方便 能够解决很多问题

到底是什么样的一个

它有什么不好 我们先看

在这个流程里 我们刚才看到了

给大家看的这个例题 这个流程里

这是一个GOTO线

从下边一直到了上边

再从YES一直到了结束

哪都能去 就是说它哪都能去

也就是说

所以它会造成程序的可读性会差

必须是 有了它

能使算法的效率提高

或者能使程序显的简洁

这个时候再用它 原则上是不用的

N-S图就是结构化程序设计

提供的一种描述表达算法的图形工具

N-S图怎么表达这么三种基本结构

我们看 这是顺序结构

这样没有流程线

S1执行完了你就执行S2

你想到哪去不可能

你顺着来

选择结构一样

条件判断YES

执行一个块 否则执行另一个块

执行完了你想到别处去不可能

顺着这个继续往下走

没有流程线 循环结构是一样的

当型循环 当条件满足的时候

执行S循环体 否则

你就继续跳出你这个循环

继续往下走

直到型循环是说

你先执行这个循环 然后再判断

条件为真吗

为真结束这个循环往下走

否则拐回去还在循环的路口

继续做这个循环

这种结构强制的去掉了流程线

大家看上去

时常大家不很习惯用这个

看上去怪怪的

不知道这个流程到底怎么走

我们用这个方法把刚才的

我们计算函数值的这个流程

给到这 我们看开始

输入a b c x

这有影响吗 没有

开始提供一个输入 接下来就判断

判断x小于等于a吗

根据这个判断的结果决定

执行哪一种运算

完了 接着往下走

输出m 这有影响吗

没有流程线 什么也没有影响

流程结束

我们说 这是顺序结构里面嵌套了

选择结构

N-S图的特点是什么

就像这边我们在给的这个流程

我们刚才前面给了说

让大家去考虑

这是一个什么样的结构的流程

我们用N-S图把它画出来

大家看它的功能域是非常明确的

在哪里需要循环

在哪里需要输入 输出 结束

另外

看着一目了然

另外 它因为没有流程线

所以它不可能转移到别处去

也就是说它不可能任意转移

还有

所以N-S图

是工程化里边要求的

就是结构化程序里边要求使用的

一种描述方法

在这里边 我们

拿这个例子看 这里边嵌套了两种

一个顺序结构里边嵌套了两种结构

现在红线框框出来的

是选择结构

我们再框 框出来的是循环结构

总体讲它是一个顺序结构

结构化程序设计的方法

是什么 第一

其实 我们在前边

开始讲流程图的时候

开始讲问题用流程图表达的时候

已经用了这种方法

自顶向下 逐步求精什么意思

我们任何程序可以用三步

输入 输出和处理

处理如果复杂

我们一步一步的再进行分解

如果输入复杂

我们再一步一步的进行分解

就跟我们原来画的

三个数排序 我们做了一次细化

再次细化

然后才完成了

这个所有的过程

这就是自顶而下逐步求精的过程

程序控制的结构

在结构化设计方法里边

最强调的是什么

一个入口 一个出口

对谁 对单独的结构而言

就是我们刚才说的

顺序结构 选择结构 循环结构

对单独的结构而言 它一定是

一个输入 一个输出

什么样的情况

它就不是结构化的程序设计了

比如说 我们现在给的这条线

我们看这条线

如果我们把这条线连上

它就成了什么

我们从另一个选择结构里

转向了

另外一个选择结构

也就是说我们从

c大于b的选择结构

跳到了c小于a的选择结构

这就是不符合结构化程序设计的

结构化程序设计是说

任何一个结构它是独立存在的

不能从这个结构里跳到那个结构

而且 任何一个结构只能有一个输入

一个输出

这是我们在做程序设计的时候

尤其是对复杂问题分解的时候

我们要分解分解细化到了

程序能够执行的程度

然后每一步的分解都能够用

三种基本结构去描述

C语言程序设计(上)课程列表:

从问题到C语言程序设计

-1.1 计算机的问题求解方法

--1.1.1--程序设计面向的问题

--1.1.2--关于计算

--1.1.3-1关于算法-算法的特征

--1.1.3-2关于算法——算法的表示

--1.1.3-3关于算法——算法的优化

--1.1.4-1-程序设计方法

--1.1.4-2-程序设计方法

--讨论题:数学模型

-1.1 计算机的问题求解方法--作业

-1.2 C语言与C程序

--1.2.1-1-C概述

--1.2.1-2-C概述

--1.2.2-C初步

--讨论题:运算符

-1.3 C语言处理系统与程序调试运行

--1.3.1C程序如何调试运行

--1.3.2常用C语言处理系统

--1.3.3DEVC++的使用-v1

--1.3.4C语言概貌小程序

--例程

-1.4 程序中的人机交互

--1.4 printf用法

--1.4.2 scanf的用法

--例程

--作业讨论区

数据计算实现与顺序结构程序设计(一)

-2.1 算术运算的C程序实现

--2.1.1 第二章

--2.1.2 C语言算术表达式概念

--2.1.3 算术运算的实现

--2.1.4 整数相除

--2.1.5 输入格式造成的计算错误

--2.1.6 求余运算

--2.1.7 自增自减运算

--2.1.8 复合运算

--fangcheng.c

--fangcheng-1.c

--fangcheng-2.c

--fangcheng-3.c

--fangcheng-4.c

--算术混合运算.c

--讨论题:自增自减符

--讨论题:程序输出结果

--讨论题:程序运行结果

-2.1 算术运算的C程序实现--作业

-2.2 关系运算的C程序实现

--2.2.1 关系比较问题

--2.2.2 C语言关系表达式

--2.2.3关系运算优先级

--2.2.4 用关系运算做判断条件

--2.2.5 程序实例

--2.2.6 字符比较

--bukao.c

--pingshifen-1.c

--panduanzhengshu.c

--pingshifen-2.c

--字符比较.c

--讨论题:比较大小

--讨论题:程序的运行

-2.2 关系运算的C程序实现--作业

-第二周作业--作业

数据计算实现与顺序结构程序设计(二)

-2.3 逻辑运算的C程序实现

--2.3.1 逻辑运算问题~1

--2.3.2 逻辑运算表达式

--2.3.3 如何判断闰年

--2.3.4 逻辑运算优先级

--2.3.5 条件运算符

--计算结合性

--2.3.7 一个简单实例

--闰年.c

--自动购票问题.c

--讨论题:逻辑表达式

-2.3 逻辑运算的C程序实现--作业

-2.4 位运算的C程序实现

--2.4.1 什么是位运算

--2.4.2 位运算有哪些

--2.4.3 位运算怎么用

--讨论题:位运算

-2.5 几种很个别的运算

--2.5 几个很个别的运算

--讨论题

--讨论题

-2.5 几种很个别的运算--作业

-2.6 混合运算及数据类型转换

--2.6 混合运算及数据类型转换

--讨论题:数据类型

-2.7 顺序结构程序实例

--2.7.1 第一个程序:三角形

--Video

--三角形面积.c

--讨论题:工业产值

--讨论题:程序无效结果

-2.7 顺序结构程序实例--作业

选择结构的程序设计

-3.1 程序中的路径选择实现

--3.1.1_1 第三章

--3.1.1_2 神奇的if_else

--打印学生成绩.c

--一元二次方程.c

-3.1 程序中的路径选择实现--作业

-3.2 路径中的再选择——嵌套判断

--3.2.1_1 if语句的嵌套

--3.2.1_2三个数排序1029

--例程

--3.2.2 用户登录检查

--三个数排序_未优化.c

--三个数排序_优化.c

--讨论题:程序改错

-3.2 路径中的再选择——嵌套判断--作业

-3.3 复杂判断问题的C程序设计

--3.3 多级选择

--银行存款.c

--讨论题:多级选择

-3.4 多分支问题的C程序设计

--3.4.1 switch语句表达式

--3.4.2 加减乘除计算

--3.4.3 几类说明

--加减乘除运算.c

--讨论题:关于switch

-3.4 多分支问题的C程序设计--作业

-3.5 GOTO的适当使用

--3.5 GOTO的适当使用

-3.6 选择结构的程序实例

--3.6 程序展示

--计算第几天.c

--存款利息__switch实现.c

--讨论题:输出奇数

--讨论题:计算税金

-3.6 选择结构的程序实例--作业

-第四周作业--作业

循环结构的程序设计(一)

-4.1 需要重复执行的程序

--4.1.1----第四章~1

--4.1.2---while实现先判断后循环~1

--4.1.3----while循环的应用-录入速度~1

--求和.c

--打印学生成绩.c

--统计录入速度.c

--求平均数.c

-4.1 需要重复执行的程序--作业

-4.2 至少要执行一次的循环

--4.2.1至少要执行一次的循环

--4.2.2-do-while循环应用

--成绩录入_do while实现.c

--n的阶乘.c

--字符分类统计.c

--讨论题:关于while

-4.2 至少要执行一次的循环--作业

-4.3 已知循环次数用for语句

--4.3.1--用for语句控制循环次数

--4.3.2--循环的应用-求和

--求和问题.c

--斐波那契数列问题.c

--数列求和.c

--讨论题:循环语句的不同

--讨论题:循环语句

-4.3 已知循环次数用for语句--作业

-4.4 循环控制——简单循环应用

--4.4.1-循环的应用-找数-水仙花数

--4.4.2--循环的应用-求素数

--水仙花数.c

--讨论题:死循环

--讨论题:continue和break

--讨论题:猜数字

-循环结构的程序设计(一)--4.4 循环控制——简单循环应用

循环结构的程序设计(二)

-4.5 循环的嵌套

--4.5.1 循环的嵌套——九九乘法表

--4.5.2 循环的嵌套——打印三角形

--打印九九乘法表.c

--打印实心三角图案.c

--打印空心三角图案.c

--讨论题:程序运行

-4.5 循环的嵌套--作业

-4.6 break与continue

--4.6 循环中断与继续循环——break再讨论

--最大素数.c

--求正数个数及平均数.c

-4.6 break与continue--作业

-4.7 循环的综合应用

--4.7.1 数的排列组合问题

--4.7.2 循环综合应用——穷举算法

--4.7.3 循环综合应用——满足条件的数

--4.7.4 循环综合应用——求最后三位数

--4.7.5 循环综合应用——打印空心图案

--数的排列组合.c

--数的排列组合优化.c

--鸡兔同笼.c

--找满足条件的数.c

--输出14的13次方的最后三位数.c

--打印空心字符.c

--讨论题:打印图形

--讨论题:打印空心图形

--讨论题:计算闰年

-第六周作业

--虚拟实验:循环程序设计实验

-第六周作业--作业

数组(一)

-5.1 同类有序数据处理问题

--5.1.0 数组开篇

--5.1.1 同类有序数据存储问题

--讨论题:下标变量与下标

-5.2 一维数组的定义和引用

--5.2.1_1 数组的定义~1

--5.2.1_2 数组的初始化

--5.2.2 一维数组的输入输出

--5.2.3 一维数组的应用1--成绩排序(选择法)~2

--5.2.4 一维数组的应用2--Fibonacci数列

--数组定义.c

--数组初始化.c

--输出大于平均值的数.c

--反向输出.c

--选择法_成绩排序.c

--求斐波那契数列前n项.c

--讨论题:对称数

--讨论题:关于'\0'

-5.2 一维数组的定义和引用--作业

-5.3 一维字符串数组

--5.3 一维字符串数组11.24~1

--用函数测试字符串长度.c

--讨论题:编程

-5.4 字符串处理函数

--5.4 字符数组的输入与输出

--字符串反向.c

--字符串函数

--讨论题:程序如何运行

--讨论题:黑色星期五

数组(二)

-5.5 二维数组的定义与使用

--5.5 二维数组定义

--二维数组的定义与初始化.c

-5.6 二维数组的输入输出

--5.6 二维数组的输入与输出

--二位数组输出_矩阵输出.c

--讨论题:随机数据存储

-5.6 二维数组的输入输出--作业

-5.7 二维数组的应用‍

--5.7.1二维数组的应用-转置矩阵

--5.7.2 用一维数组方式引用二维数组元素

--转置矩阵.c

--找二维数组最大数.c

--讨论题:修改程序

--讨论题:关于随机数函数 rand()

-5.8 二维字符数组

--5.8 单词排序

--单词排序.c

--讨论题:回文字符串

-5.8 二维字符数组--作业

-5.9 数组综合应用

--5.9.1 应用1——学生成绩统计

--统计成绩.c

--5.9.2 应用2——删除重复字符

--删除串中的重复字符串

--5.9.3 应用3——统计字符

--5.9_4数组的应用4--矩阵相乘

--统计字符次数.c

--讨论题:洗牌

-本期课程结束语

--end

-第八周编程作业

--虚拟实验:冒泡排序算法程序设计实验

期末复习

-《C语言程序设计(上)》期末复习参考

--html

期末复习答案

-《C语言程序设计(上)》期末复习参考答案

--html

1.1.4-1-程序设计方法笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。