快速业务通道

第 4 章 分支语句

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-16
<一>if语句
一个简单函数可以有多条语句,但这些语句总是从前到后顺序执行的.除了顺序执行之外,有时候我们需要判断条件,然后根据判断的结果执行相对应的后续代码,在C语言中可以用分支语句(Selection Statement)实现,如:if语句、if..else语句、switch语句,下面举例:
if(x != 0)
{
printf("x is nonzero.\n");
} 这里if语句的条件,x!=0意思是如果x不等于0,这执行{}花括号里的语句,否则不执行{}语句,直接跳到}后面.其实,if(x)和if(x!=0)是等价的,x值等于0为假,x为非0的值为真.if和控制表达式改变了程序的控制流程(control Flow),不再是从前到后顺序执行,而是根据条件执行不同的语句,这种控制流程称为分支(Branch).
知识扩展,关系运算符和相等性运算符
运算符 含义
== 等于
!= 不等于
> 大于
< 小于
>= 大于或等于
<= 小于或等于
注意一下几点:
1.这里的==表示数学中的相等关系,相当于数学中的=号,而数学中的等号(=)在C语言中是赋值运算符,两者的含义完全不同.
2.if里面表达式所表示的关系成立则值为真(True),否则为假(False),在C语言中分别用int型的1和0表示.如果为真,则值为1;同理,如果为假,则值为0.举个例子:如果if(x>0),如果x的值1,则为真,执行if花括号里面的语句.如果x=-1,则为假,跳到if花括号后面执行接下来的语句.
3.在数学中a<b<c表示b既大于a又小于c,但作为C语言表达式却不是这样.以上几种运算符都是左结合,什么是左结合呢?这些运算符有些不是同等级的优先符,同一优先级别共同存在的时候,都是从左往右执行的.这里说到关系运算符(Relational Operator)(>、<、>=、<=)属于第6优先级的双目运算符,而相等运算符(Equality Operator)(==和!=)属于第7优先级双目运算符,属于左结合.相等性运算符的优先级低于关系运算符
4.这些运算符的两个操作数应该是相同类型的,两边都是整型的,两边都是整型或者是浮点型可以做比较,但两个字符串不能做比较.
和if语句相关的语法规则如下: 语句 → if (控制表达式) 语句
语句 → { 语句列表 }
语句 → ;
在C语言中,任何允许出现语句的地方既可以是由分号结尾的语句,也可以是由{}括起来的若干条语句或声明组成的语句块(Statement Block).加分号表示一个语句的结束;如果是单分号表示一条空语句(Null Statement).
1、以下程序段编译能通过,执行也不出错,但是执行结果不正确(根据第 3 节 “程序的调试”的定义,这是一个语义错误),请分析一下哪里错了.还有,既然错了为什么编译能通过呢?
int x = -1;
if (x > 0)
printf("x is positive.\n");
分析一下分支语句:初学者有些认为,给x初始化,x定义为整型,分配存储空间,然后把-1常量值赋给x,接着if语句判断-1 > 0为假,然后执行printf语句输出x is positive换行.但实现上编译器不会这样子执行,if(x>0)判断为假,其实什么也没输出,if语句在没有花括号的情况下默认,把第一个分号的语句作为if语句为真后,执行的语句.如果在printf("x is positive.\n");后再加一行printf("x x x x\n");则输出的结果是:x x x x
其实上面的程序可以等价于:
int x = -1;
if (x > 0)
{
printf("x is positive.\n");
} 如果想要输出:x is positive
则可以这样写
int x = -1;
if (x > 0)
{
;
}
else
{
printf("x is positive.\n");

} <二>if/else语句
if语句还可以带一个else子句,如:
if(x%2==0)
printf("x is even.\n");
else
printf("x is odd.\n");
这里的%是取模(Modulo)运算符,x%2表示x除以2所得的余数(Remainder),C语言规定%运算符的两个操作数是整型的.但如果操作数中有负数,结果应该是正是负呢?C99规定,如果a和b是整型,b不等于0,则表达式(a/b)*b a%b的值总是等于a,这个公式可以用具体值代替,假设

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号