当前课程知识点:C语言程序设计(上) >  选择结构的程序设计 >  3.5 GOTO的适当使用 >  3.5 GOTO的适当使用

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

3.5 GOTO的适当使用在线视频

3.5 GOTO的适当使用

下一节:3.6 程序展示

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

3.5 GOTO的适当使用课程教案、知识点、字幕

下面我们讨论一下goto

goto为什么要单独拿出来

它就是一个简单的语句

要单独拿出来做一些讨论

是因为这个goto

通常是个有争议的

有的人觉得它特别好使

有的人觉得它简直不能用

那为什么会这样呢

我们先看一下它怎么用

然后呢 它在哪里用

然后我们再讨论它能不能用

goto是这样

很简单就一句话

goto没条件

这里有条件吗 没条件

goto到说到哪里去

把你要去的地方说清楚

我就直接可以去了

那你要去的地方

当然在你的程序里边必须有

goto到你的一个记号

我到了这个记号

无所不能去这是它的优势

它都能去

那就说它的功能无条件的转向

你那标号所指定的地方

比如说我们看个例子

这是一个非常简单的例子

就是我们从键盘上录入字

录入这一行字符到底多少个你数数看

这个程序怎么写呢

我们看前面定义了n

那这n里边是什么东西呢

n我们来做一个计数器

我这一行到底敲了几个字符

在这里边

说给我提个醒

说你输入一个字符

输入一个字符串string 

输入一个字符串

那我就在这开始输入

如果 大家看我怎么输入呢

如果我们条件里边给的是什么

大家还记不记得这个getchar的功能

getchar是从键盘上获取一个字符

就你从键盘上敲一个字

屏幕上给你显示出来

并且你要回车

你要敲一下回车

这个字才真的进去了

那这是一个C的内部函数

从键盘上获取一个键值

获取一个键

你敲进来的这个东西

不是斜杠n

斜杠n是什么

斜杠n不就是回车吗

你敲进来这个东西是不拐弯吗

不到另一个新的行上去吗

如果是的话

就说你不到另一个行上去

还在这一行我就要给你计数了

你要到了另一行上

那说明这一行敲完了

我就不计数了

所以就是说你每敲进来一个字符

我问你 你不换行吗

不换行就计数

如果你不换行

这个条件就叫做 你不换行吗

不换行就是真的

如果你不换行

计数器加1

自增一次

自增完了到哪去了呢

goto loop

loop在哪

在这儿

自增完了什么条件都没有

你就给我无条件的

转回到loop的这个地方

这个地方又开始做 说

你再从键盘上敲一个字

然后我问你你敲的那个是要换行吗

那当然

你如果需要换行你必须敲一个斜杠n

那就表示这行

录入完了我不给你数数了

否则它一直给你数着数

看你这一行一共敲了多少个字符

这里边用到了goto

我们没有把goto涂成红色

我们把loop涂成了红色

是因为它比goto都重要

是因为

它是要goto到达的地方

如果你说loop

你写了一个loop

你这却忘了

程序在你这个

整个的流程里边找不到一个loop

那goto就没法去了

这程序就走不通了

这是一种可能

还有一种可能是

loop本来是要到这

你却把它写到上面这一行上

写错了

那它就去错了

它就去到了

说再提示你

来输入一个什么什么input a string

你就错了

所以大家明确了吗

为什么要有争议

争议就是它太容易出错了

它太容易出错了就说

有可能是loop写不对地方

有可能是你忘了写了

比如说你这个程序里有很多个goto

你会有很多个标记

这几个标记会不会弄乱

那第二个问题是说

它太容易啦

它哪都能去

它说loop到哪里

它说goto到哪里就到哪里

那这样的话

它可以goto在这

它也可以goto的出去

它也可以goto到这

那整个如果程序长了

一旦我程序走不通的时候

咱就goto

goto到那边

那个地方在走走走走走

走不通的时候再拿goto回来

goto在这个地方

大家平常把这个叫什么程序

面条程序

搅成一团了

后边

这给谁造成了困难

也许你搅成一团你这程序走完了

结果是正确的

是走的通的

但是读程序的人

读不懂很乱

将来要维护你这个程序的人

如果你做了一个软件

你软件里都是这样跳来跳去的

这个软件维护起来就是相当的困难

所以争议就在于说

它最主要的负面影响是什么

它使程序的可读性变的极差

甚至是没法维护它

就是面条程序面条代码

如果我们适当的使用

它是不就一定都是那么恶略的影响

那可不一定

有时候

它能使代码的质量提高很多

执行效率提高很多

比如说给大家一个简单的程序

这是循环

循环我们还没有讲

下边我们会讨论循环的问题

这块我们看

一层循环两层循环三层循环

如果你没学过的话

没有关系

你只要知道这是

一层两层很多层循环

如果在这个循环题里边

做到某一个程度

我已经达到了我的目标

我直接可以goto out

out到哪里

我直接不用说

到了第二层

再到上一层

第一层再出来

我直接可以goto出来

否则的话这个循环结束是

先回到上一层

再回到它的上一层

它才能跳出来

所以这样的话就是

程序的效率提高很多

所以我们是说

不提倡使用goto

但是偶尔在特别需要的地方

用一下

但是我们并不提倡使用

因为C给你的结构化语句

就是它的语句

支持结构化的程序设计

已经是相当好了

没有goto完全不受影响

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

3.5 GOTO的适当使用笔记与讨论

也许你还感兴趣的课程:

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