当前课程知识点:C语言程序设计 >  第22讲 编程训练 >  编程训练 >  选择结构常见错误

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

选择结构常见错误在线视频

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

选择结构常见错误课程教案、知识点、字幕

这一讲

讲一下选择结构常见的错误

错误1 if语句后写了分号

我们看例1

if(a>b)

这儿有一个分号

然后后面是max=a

这种情况编译不会出错

但很可能跟你想要表达的含义不一样

你想表达的含义是

如果a>b,那么让a赋值给max

但是你这样写了以后

它等同于下面这个样子if(a>b)

就是a大于b的时候

执行一条空语句然后a赋值给max

在这里

不管上面a是不是大于b

这个地方都会把a赋值给max

就是这一句和上面一句完全没有关系

因为通常来说

我们写一个条件判断

总是要在后面

满足这个条件以后要执行什么语句

很少或几乎没有说一个条件语句后面什么都不执行

我们看例2

这是一个if和else的语句

在这个地方

在if(a>b)后面加了一个分号

这种情况下编译就会出错

我们来看一下程序

我们来看一下

这个程序就是把刚才ppt当中核心的一段放在这儿

在这个地方加了一个分号

我们编译一下

来看看情况

我们可以看到

在这个地方有一个提示一个错误

elsewithoutpreviousif

这个意思是说else前面没有与之匹配的if

为什么会这样呢 你写成这个样子

它表示的含义是这样

刚才前面也说过了

它表示的含义是

如果a大于b

执行一条空语句

然后把a赋值给max

这个else已经和上面没有关系

我们知道

在c语言当中

else必须有一个前面跟它匹配的if

所以正常的写法这个地方

应该把这个分号删掉

这样删掉以后

这个if和else整个就构成一个整体

这个意思是如果如果a大于b这个条件满足

把a赋值给max

else就是它的反例

那么a>b的反例

a>b的反例就是a小于等于b的时候

把b赋值给max

这是一个正确的写法

那同学如果犯了这个地方加了分号的错误

就会提示有这个错误

你以后写程序的时候

如果发现有这个提示错误

你就知道这是怎么引起来的

错误2:复合语句忘了花括号

这个类型的错误和刚才错误1很相似

我们看例1

你本来想写的意思是如果a>b

然后呢

让a赋值给max

同时输出这一句

但是你这样写了以后

这个地方没有花括号

你这样写了以后

它的含义就是如果a>b满足这个条件

执行下面这一句

而这个printf这一句

它跟上面没有关系

就是不管上面这个条件满足不满足

它是单独的一句

它永远都会执行

你想表达的意思

刚才说了

你想表达a>b的时候

要多条语句都执行

应该在这个地方加一个花括号

让它构成一个整体

当然了

这个语句完成的功能和你想要表达的意思不符合

但是它没有编译错误

程序会运行

我们看例2

例2这儿你本来想表达的意思是如果a>b

执行这两句

else就是a小于等于b的时候

执行下面这两句

但是因为你在这个地方没有加花括号

这儿加一个花括号

这儿加一个花括号

把这两句搞成一块

同样的

这儿也没加

那么这个情况下

编译会出错

是个什么错误呢

跟前面错误1的例2一样

也会提示你else没有与之匹配的前面的if

为什么会这样呢

这儿解释一下

你这么写了以后

这个if(a>b)和max=a是一体的

完了以后从printf一直到后面

这是单独的一条语句

后面else也是

这个else就跟这个if没有关系

所以会出现这个错误

第三种常见的错误是误将判断相等写为赋值

这种错误编译器有提醒警告错误

程序仍然能运行

但运行会出错

对于初学者

这种错误比较隐蔽

常常难以发现

if(a=b) 输出a=b

那么

你很可能想表达的意思是这样 两个等号

在c语言中

单等号是赋值的意思

而要想判断两个值相等

使用两个等号

所以应该这样写才是正确的

如果你写成上面这个样子

编译的时候会有个警告错误

在c语言中

你这么写了以后

它是把b赋值给a

如果b的值不为0

这个地方条件就为真

它就会执行这条语句

所以并不是判断a等于b的问题

而是这个地方只是把b赋值给a

如果b不等于0

这个条件都是真的

都会执行这个

那多半跟你想表达的意思不同

错误4 逻辑上可能错误的表达

你本来想判断一个变量是否在0-100之内

结果你写成了这样if(0<=a<=100)

这种写法我们在数学中很常见

也是正确的表达

但是在c语言当中

这样写是错误的

为什么呢 我们来分析一下

假定现在变量a的值是200

C语言是这样处理的

先处理0<=a 因为a的值是200

所以这个结果为真

结果为真

它的值就为1

就是这个的值为1

然后再处理1<=100 就是后半部分

当然这个结果仍然为真

这样呢

这个表达式的结果为真

但是显然跟你想要判断变量是不是在

0-100只内的想法是不符的

那么正确的要想判断一个变量是否在0-100之内

就是大于等于0

小于等于100怎么写呢

应该写成这样 分两部分

这个a>=0并且a<=100

第5种错误是switch语句中缺少break

会导致程序运行出错

我们以程序来看一下

这个程序是前面讲过的

把百分制把转换成5级等级制的这样一个程序

我们看 正确的程序它是大于等于90

小于等于100的时候

输出A 从80到89分 给出B

后面是其它情况

我们看这个地方

如果这儿把break语句漏掉了

我们把它注释掉

注释掉就跟没写它一样

好 我们编译运行一下

比如我们输入98

大家看 得到的结果是AB

这个显然是不对的

我们把break照旧加上去

重新来执行一下

还是98

这儿就得到了正确答案

C语言程序设计课程列表:

第0讲 导言

-简单介绍课程性质等

-关于编程训练

第1讲 C程序框架

-C程序框架

-作业

第2讲 C程序编译环境

-C语言的编译环境

-作业

第3讲 顺序程序的几个例子

-顺序程序的几个例子

-作业

第4讲 常见的编译错误

-常见的编译错误

-作业

-编译错误探讨

第5讲 输入输出精要

-输入输出精要

-作业

-输入输出格式探讨

第6讲 选择结构的典型例子

-选择结构的典型例子

-作业

第7讲 选择结构常见错误

-选择结构常见错误

-作业

第8讲 排除程序错误的常规方法

-排除程序错误的常规方法

-排除错误探讨

第9讲 循环结构基础

-循环结构基础

-作业

-循环类型

第10讲 循环结构程序例子

-循环结构程序例子

-作业

-程序结构

第11讲 函数基础

-函数基础

-作业

第12讲 函数举例

-函数举例(上)

-函数举例(下)

第13讲 变量的作用域与生存期

-变量的作用域与生存期

-变量的使用

第14讲 数组基础

-数组基础

-作业

第15讲 数组应用举例

-数组应用举例(上)

-数组应用举例(下)

第16讲 数组参数传递

-数组参数传递(上)

-数组参数传递(下)

-作业

第17讲 指针变量

-指针变量(上)

-指针变量(下)

-作业

第18讲 字符串

-字符串(上)

-字符串(下)

-作业

第19讲 程序调试

-程序调试

-程序调试的重要性

-程序调试讨论

第20讲 结构体及其应用

-结构体及其应用(上)

-结构体及其应用(下)

第21讲 文件

- 文件(上)

-文件(下)

第22讲 编程训练

- 编程训练

选择结构常见错误笔记与讨论

也许你还感兴趣的课程:

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