分支语句和循环语句
C语言是一门结构化的程序设计语言
生活中的结构无非就3种
-
顺序结构
-
选择结构
-
循环结构
现在着重学习后两种
什么是语句?
在C语言中,由;
隔开的就是一个语句
int main()
{
int a = 0;//这是一条语句
;//这也是语句——空语句
return 0;
}
分支语句(选择结构)
if的语法结构:
if(表达式)
语句;
如果结果为真,则执行语句,如果为假,则什么都不执行。
在C语言中如何表示真假?
0表示假,非0表示真,如-1,不是零,表示为真。
if(表达式)
语句1;
else
语句2;
如果结果为真,则执行语句1,如果为假,则执行语句2。
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
如果表达式1成立,执行语句1,表达式1不成立再判断表达式2,表达式2成立就执行语句2,不成立则执行语句3,只能执行这三种的其中一种。
else if可以写多个
int age = 10;
if(age<18)
printf("未成年\n");
这是一个单支结构,只有一个分支
int age = 10;
if(age<18)
printf("未成年\n");
else
printf("成年\n");
if- else语句
int age = 10;
if(age<18)
printf("未成年\n");
else if(18<=age && age<28)
printf("青年\n");
else if(28<=age && age<50)
printf("壮年\n");
else//上述任何一种情况都不成立也就是年龄>=50执行这一行
printf("老年\n");
如果想写18-28属于青年的话,直接写else if(18<=age<28)
是不行的,代码在执行的时候会先执行前半段18<=age
,结果为假,这部分的结果变成0
,然后接着执行0<28
,结果为真,输出结果为青年
,而设定的age为10,这显然是个错误的结果。
想同时满足两个条件应该用&&
连接。
上述代码写成以下也是可以的,
int age = 10;
if(age<18)
printf("未成年\n");
else //在age>=18的情况下,再细分
{
if(18<=age && age<28)
printf("青年\n");
else if(28<=age && age<50)
printf("壮年\n");
else//上述任何一种情况都不成立也就是年龄>=50执行这一行
printf("老年\n");
}
注意
- if语句控制多条语句要用大括号括起来
int age = 10;
if(age<18)
{
printf("未成年\n");
printf("不能打游戏\n");
}
-
一对大括号
{ }
就是一个代码块 -
else会和距离最近未为匹配的if匹配
int main()
{
int a = 0;
int b = 2;
if(a==1)
if(b==2)
printf("111\n"):
else//虽然这里的缩进是和第一个if对齐的,但实际上是和第二个if成对。
printf("222\n");
return 0;//最终打印结果是空。
}
如何打印出222呢?加一个大括号即可:
int main()
{
int a = 0;
int b = 2;
if(a==1)
{
if(b==2)
printf("111\n"):
}//这里就变成了一个代码块,条件成立,执行这个代码块,条件不成立,执行else。
else
printf("222\n");
return 0;//最终打印结果是222。
}
- 使用if的时候要注意代码的可读性
if(condition){
return x;
}
return y;
if(condition)
{
return x;
}
else
{
return y;
}
这两段代码表达的意思完全一样:条件成立,返回x的值,条件不成立,返回y的值。但是第一段代码读起来的时候,要理解意思会困难许多。
- 注意=与==的区别
int num = 4;
if(num = 5)//一个=是赋值,==才是判断相等
{
printf("111\n");//这样写无论num是多少都会打印这一行。
}