请看正文

我们知道,C语言提供了三种基本流程控制结构,分别为顺序结构、选择结构和循环结构。对于选择结构,则是程序根据输入条件或中间执行结果的不同而选择执行不同的语句块。选择结构分为if语句和switch语句两种。本文仅谈一谈if语句基本用法与使用技巧。

1、if语句基本用法

if语句基本用法有如下四种形式,我们分别来看。

1)简单的if语句形式

if(表达式)

语句块;

该语句形式的语义是:如果表达式为真,则执行语句块;否则,将跳过该语句块,执行整个if分支语句后面的其它语句。上述语句块,可以是一条语句,也可以是多条语句组合。(下同)

2)if-else语句形式

if(表达式)

语句块1;

else

语句块2;

该语句形式的语义是:如果表达式为真,则执行语句块1;否则,执行语句块2。也就是说语句块1和语句块2两者必执行其一。然后,再执行整个if分支语句后面的其它语句。

3)if-else-if语句形式

if(表达式1)

语句块1;

else if(表达式2)

语句块2;

……

else if(表达式m)

语句块m;

else

语句块n;

该语句形式的语义是,如果依次判断各表达式,若表达式为真,就执行对应的语句块,然后跳出整个if分支语句,执行后面的语句;如果前m个表达式均不为真,则会执行语句块n,然后再跳出整个if分支语句,执行后面的语句;也就是整个if分支语句的n个语句块,程序必定会执行其一。

4)if语句嵌套形式

所谓的if语句嵌套形式是指if语句某一分支里又是一个if语句。通俗的理解是,前三种用法形式里的语句块,又是一个if语句,而且可以是前三种用法形式的任一种。C语言的C89标准指明,编译程序必须最少支持15层嵌套;C99标准把限度提升到127层。不过虽然支持这么多层嵌套,但实际编程应用时,为了保持程序的可读性及简洁程度,应尽量减少嵌套层次。

2、if语句用法技巧

1)合理调整if分支顺序

在编程应用时,应合理调整if分支顺序,把大概率为真对应情况的语句块直接放在if后面,不要放在else后面。这样做有利于减少程序的判断次数,提高执行效率。

例如,我们把学生成绩分成60分及以上、40-60分、40分以下三个分数段。很显然,及格的学生是大多数,也就是某个学生及格的可能性较大,低于60分较少,低于40分的更少。在编程处理学生成绩的应用时,通常用if-else-if语句形式,就应该把60分及以上的学生处理情况直接放到if语句之后,40-60分段放到else if语句后面,低于40分的情况放到else语句后面处理,这种安排很符合大家的逻辑思维习惯。如果把顺序颠倒,if语句处理40分以下,else if语句处理40-60分段,60分及以上放到else语句后面,无形中增加了成倍的成绩比较次数。

2)else结合问题

C语言if语句编程应用时,应该注意else的配对问题,它始终与最近的未匹配的if相结合。如果不注意该问题,有可能程序执行结果与预期相去甚远。请看下面的例子说明。

if(表达式1)

if(表达式2)

语句块1;

else

语句块2;

上面的例子我们来看,作者的意图是,如果表达式1与表达式2均为真的情况下,执行语句块1;如果表达式1为假,则执行语句块2。这里虽然else与表达式1的if对齐,但它们并不能配对;事实上else是与表达式2的if相结合。实际执行逻辑是:在表达式1为真的情况下,继续判断表达式2,若表达式2为真则执行语句块1,若表达式2为假则执行语句块2。可见与作者的意图相差太远。

要想实现作者意图,解决办法是合理使用“{}”,将上述表达式修改成如下形式即可。

if(表达式1)

{

if(表达式2)

语句块1;

}

else

语句块2;

3)避免if/else语句后面加分号“;”

C语言中,分号“;”组成的语句称为空语句,它什么都不做,通常被用来做空循环体。如果不小心在if/else语句后面加了分号“;”,程序执行有可能违背了你的意图,导致意外结果。例如:

if(表达式);

语句块;

本来意图是表达式为真就执行语句块,现在不小心在if后面加了个分号“;”,则上述表达式实际上变成了如下形式:

if(表达式)

;

语句块;

也就是说如果表达式为真,则执行一个空语句。然后再执行语句块。此时上述语句块不再是在表达式为真的条件下执行,而是会无条件的执行。

可见,一个分号“;”误用会带来不可预计的后果。而且,此种错误在程序编译时是发现不了的,不会有任何错误提示。因此,建议大家编程时一定要细心。

好了,关于if语句的用法今天就总结到这,如果大家有任何疑问请留言探讨。我是“C语言知识传播者”,志在瞄准C语言,挖掘和总结C语言的难点和痛点,给C语言编程爱好者和本领域从业人员提供参考,我会用心总结C语言知识的点点滴滴,您的关注是我持续创作的动力,请收藏本文、转发并点赞,希望得到您的持续关注,谢谢!

举报/反馈

大学c语言程序中if语句,浅谈C语言中if语句相关推荐

  1. c语言switch语句最大嵌套数,浅谈C语言中switch 语句的嵌套使用

    浅谈C语言中switch 语句的嵌套使用 作者:未知 [摘要]switch语句是一种分支控制语句,它的应用在程序设计中起至了很重要的作用.由于其格式复杂,对于初学者来说很难掌握,switch语句的嵌套 ...

  2. c语言switch语句嵌套,浅谈c语言中switch语句的嵌套使用

    switch语句是一种分支控制语句,它的应用在程序设计中起到了很重要的作用.由于其格式复杂,对于初学者来说很难掌握,switch语句的嵌套使用更是让初学者难以理解.本文通过介绍switch嵌套语句的形 ...

  3. c语言 strcpy原型,浅谈C语言中strcpy,strcmp,strlen,strcat函数原型

    实例如下: //strcat(dest,src)把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0' char *strcat(char * strDest, cons ...

  4. c语言if语句知识点总结,c语言中if语句知识点总结.docx

    c语言中if语句知识点总结.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3. ...

  5. C语言条件循环语句执行步骤,C语言中for语句的执行过程是什么?

    C语言中for语句的执行过程是:1.会先判断条件表达式是否成立,如果条件成立则执行中间循环体,执行完中间循环体后接着执行末尾循环体 :2.在执行完末尾循环体后对条件表达式再次判断,若条件还成立,则继续 ...

  6. c语言数组中逗号的作用,在C语言中,每个语句和数据定义是用( )结束。? 逗号|括号|分号|句号...

    在C语言中,每个语句和数据定义是用( )结束.? 逗号|括号|分号|句号 更多相关问题 [多选题]有关商事登记的内容,下列表述哪些是不正确的: A. 商事登记不是取得商人资格的必备条件 B. 商事登记 ...

  7. c语言中管道符作用,由Linux中管道的buffer,浅谈C语言中char类型字符串拷贝使用strcpy()和=赋值符号的区别...

    今天在写父子进程用两个单向管道通信时,出现了错误: Segmentation fault (core dumped) 打开core文件发现: 附上源码: 1 #include 2 #include 3 ...

  8. c语言编程中负1什么意思,C语言中的if(1)是什么意思啊

    if(表达式)表达式的值为1后面的程序执行,若为0则不执行. 比如if(1>2)其中1>2是个逻辑判断,1<2当然是假,所以就是false(false为0,true为1),但cpu不 ...

  9. c语言scanf中的分隔符的作用,C语言中scanf与分隔符(空格回车Tab)

    众所周知,C语言中的scanf函数的作用是从标准输入设备(通常是键盘)读取输入值,并存储到参数列表中指针所指向的内存单元.下面从几个方面说一下一些稍微细节的东西.下面的实验都在vc6.0中通过. 1. ...

  10. linux strcpy 用法,由Linux中管道的buffer,浅谈C语言中char类型字符串拷贝使用strcpy()和=赋值符号的区别...

    今天在写父子进程用两个单向管道通信时,出现了错误: Segmentation fault (core dumped) 打开core文件发现: 附上源码: 1 #include 2 #include 3 ...

最新文章

  1. 如何查找僵尸进程并Kill之,杀不掉的要查看父进程并杀之
  2. deepin--解决QQ时间与系统时间不一致
  3. notes邮件正文显示不全_Outlook邮件中的可操作消息(Actionable Message)
  4. Spring如何加载XSD文件
  5. LeetCode 1340. 跳跃游戏 V(DP)
  6. Java转JSON串的几种方式
  7. weblogic hibernate HqlToken
  8. (整理)C/C++野指针
  9. MySQL 第四次练习(多表查询)
  10. aar打包依赖 android_快速了解:十四、Android打包编译的进阶流程
  11. java完全自学手册pdf,附答案+考点
  12. 图像列表控制(CImageList)
  13. tftpd32刷路由器方法_不走弯路:小米路由器3G 刷Padavan固件简单教程
  14. html侧边导航栏,浮动侧边导航栏的基本布局
  15. 深度学习概念名词解释总结
  16. android拦截所有短信源码,拦截垃圾短信咱可别手软 安卓和苹果系统手机处理方法不同...
  17. java实现求最小公倍数_使用Java代码进行因数分解和求最小公倍数的示例
  18. 人脸性别转换APP有什么?快把这些APP收好
  19. cordova 调用蓝牙_ionic蓝牙插件(cordova-plugin-ble-central)(个人翻译转载请注明)
  20. MATLAB R2018a简介

热门文章

  1. win10查看桌面壁纸路径
  2. python基础ppt_python基础知识(三)
  3. 信度spss怎么做_信度分析(spss信度分析步骤)
  4. css 图片放大1.2倍,什么是二倍图?怎样使用二倍图?
  5. 带本科生做毕设是什么样的体验,看看学生是怎么评价我的
  6. 【转】地址线和数据线的计算
  7. 斗战神服务器正在维护6,斗战神3月6日更新维护内容介绍
  8. Flash 原版官网下载
  9. 朗强科技解读:什么是HDMI接口,有什么用处,以及HDMI延长器
  10. word取消限制编辑