没有合适的资源?快使用搜索试试~ 我知道了~
<一>if语句一个简单函数可以有多条语句,但这些语句总是从前到后顺序执行的。除了顺序执行之外,有时候我们需要判断条件,然后根据判断的结果执行相对应的后续代码,在C语言中可以用分支语句(SelectionStatement)实现,如:if语句、if..else语句、switch语句,下面举例:if(x!=0){printf("xisnonzero.\n");}这里if语句的条件,x!=0意思是如果x不等于0,这执行{}花括号里的语句,否则不执行{}语句,直接跳到}后面。其实,if(x)和if(x!=0)是等价的,x值等于0为假,x为非0的值为真。if和控制表达式改变了程序的控制流程(contro
资源推荐
资源详情
资源评论
分支语句分支语句
<一>if语句
一个简单函数可以有多条语句,但这些语句总是从前到后顺序执行的。除了顺序执行之外,有时候我们需要判断条件,然后根
据判断的结果执行相对应的后续代码,在C语言中可以用分支语句(Selection Statement)实现,如:if语句、if..else语句、
switch语句,下面举例:
if(x != 0)
{
printf("x is nonzero.");
}
这里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.");
分析一下分支语句:初学者有些认为,给x初始化,x定义为整型,分配存储空间,然后把-1常量值赋给x,接着if语句判断-1 > 0
为假,然后执行printf语句输出x is positive换行。但实现上编译器不会这样子执行,if(x>0)判断为假,其实什么也没输出,因
为if语句在没有花括号的情况下默认,把第一个分号的语句作为if语句为真后,执行的语句。如果在printf("x is positive.");后
再加一行printf("x x x x");则最后输出的结果是:x x x x
其实上面的程序可以等价于:
int x = -1;
if (x > 0)
{
printf("x is positive.");
}
如果想要输出:x is positive
则可以这样写
int x = -1;
if (x > 0)
{
;
}
else
{
printf("x is positive.");
}
<二>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,这个公式可以用具体值代替,假设a=3,b=2,则(3/2)*2+3%2=3==>1*2+1=3;若a=-3,b=2,则(-3/2)*2+ -3%2 = -3,编译
器编译这样的程序原则是:-(3/2)+(2*(-1)-1)%2= -3;再如:a=3,b=-2,则(3/-2)*(-2)+3%(-2)=3==>-3/2*(-2)+(-2*(-1)+1)%-2=3
可以得到一个结论:%运算符的结果总是与被除数同号
可以编写简单的代码测试
#include <stdio.h>
int main()
{
int a=-3,b=2,x=3,y=-2;
printf("%d\n",a%b);
printf("%d\n",x%y);
return 0;
}
运行结果是
-1
1
回到我们上面的if...else语句中,例子判断x的奇偶性(Parity),看x除以2的余数是否为0,如果为0打印x is even.,如果不是
0则打印x is odd.,读者应该能看出else在这里的作用了,如果在上面的例子中去掉else,则不管x是奇是偶,printf("x is
odd.\n");总是执行。为了让这条语句更有用,可以把它封装(Encapsulate)成一个函数:
void print_parity(int x)
{
if (x % 2 == 0)
printf("x is even.\n");
else
printf("x is odd.\n");
}
把语句封装成函数的基本步骤是:把语句放到函数体中,把变量改成函数的参数。这样,以后要检查一个数的奇偶性只需调用
这个函数而不必重复写这条语句了,例如:
print_parity(17);
print_parity(18);
#include <stdio.h>
void print_parity(int x)
{
if (x % 2 == 0)
printf("x is even.\n");
else
printf("x is odd.\n");
}
int main()
{
print_parity(15);
print_parity(16);
return 0;
}
if或if...else语句的嵌套,下面说一下if ..else 语句的嵌套
if (x > 0)
printf("x is positive.\n");
else if (x < 0)
printf("x is negative.\n");
else
printf("x is zero.\n");
C语言规定,else总是和它上面最近的一个if配对
如:
if(A)
if(B)
剩余6页未读,继续阅读
资源评论
weixin_38622827
- 粉丝: 4
- 资源: 904
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功