什么是语句?
C语句可分为以下五类:
- 表达式语句
- 函数调用语句
- 控制语句
- 复合语句
- 空语句
以下主要讲的是控制语句。控制语句又包含九种控制语句:
- 条件判断语句(分支语句):if语句,switch语句
- 循环执行语句:do while语句,while语句,for语句
- 转向语句:break语句,goto语句,countinue语句,return语句
分支语句(选择语句)
if语句
//语法结构:
if(表达式)//若表达式为真(0为假,非0为真),才会执行语句
语句;
if(表达式)
语句1;
else
语句2;
//多分支:
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
悬空else
例如以下代码:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
这个代码实际上什么也不会输出,它等价于:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
}
return 0;
}
因此要注意else悬空的匹配机制:else是和它最近的if匹配。
关系操作符
主要有以下六个:
- >大于操作符
- <小于操作符
- >=大于等于操作符
- <=小于等于操作符
- !=不等于操作符
- ==等于操作符
关系表达式通常返回 0 或 1 ,表⽰真假。
另外要非常注意"=="与“=”,千万不要写错,不然会出大错误,因此,在写代码是可以写成:
if(3==x)//这样当==写成=是就会报错引起你的注意
x++;
还要注意避免使用连续关系操作符,因为它极易出现错误。例如:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(18<=age<=36)
{
printf("⻘年\n");
}
return 0;
}
当你输入10时,代码输出的结果会是青年,因为它的运算顺序是这样的:先运算18<=10,结果为0,再运算0<=36,结果为1,因此输出青年。
此代码因改为:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(18<=age && age<=36)
{
printf("⻘年\n");
}
return 0;
}
逻辑操作符
有以下三个:
- !逻辑反运算
例如:若a=0 则!a=1,若a=1,则!a=0。 - &&逻辑与
它的运算规律是:有0取0 - ||逻辑或
它的运算规律是:有1取1
短路
例如:
if(i>=5 && i<=25)
当i<5时,计算机就不会执行i<=25这个代码,就像是被短路。
if(i>=5 || i<=25)
当i>5时,计算机不会执行i<=25这个代码。
像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进⾏计算的运算称为短路求值。
switch语句
switch(整型表达式)
{
语句项;
}
case 整型表达式:
语句;
default:
语句;
1.需要注意的就是switch后只能为整型表达式,case后也只能为整型表达式。
2.case 和后边的数字之间必须有空格。
3.每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。
例子:
#include<stdio.h>
int main()
{
int n=1;
int m=2;
switch(n)
{
case 1:
m++;//1
case 2:
n++;//2
case 3:
switch(n)
{
case 1:
n++;//3
case 2:
m++;//4
n++;//5
break;
}
case 4:
m++;//6
break;
default:
break;
}
printf("m=%d,n=%d\n",m,n);
return 0;
}
由于不是每个语句都有break,导致计算机执行了1,2,4,5,6,这五个关于m,n的语句,导致m=5,n=3。
default
- 每个switch语句只能有一条defalut子句。
- default子句可以出现在语句列表的任何位置。