if语句的写法如下:
if (表达式)
语句
括号里的表达式如果成立,则会执行下面的语句,如果不成立,则不执行
C语言中成立就为真,不成立就为假,1为真,0为假,所以表达式里如果是1则会执行下面语句,如果是0则不执行
下面是使用if语句判断是否为奇数
#include
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\n", num);
return 0;
}
如果这个数不是奇数,那么应该就是偶数了,这时候就可以使用到else了
if (表达式)
语句1
else
语句2
这时候如果 if 里的表达式不成立,则会执行语句2
例题:输入一个数,判断是否为奇数,如果是奇数打印奇数,否则打印偶数
#include
int main()
{
int a;
scanf("%d", &a);
if (a % 2 == 1)
printf("奇数");
else
printf("偶数");
return 0;
}
还是用奇数偶数来说:如果上面那道题这样写:
#include
int main()
{
int a;
scanf("%d", &a);
if (a % 2 == 1)
printf("奇数");
printf("不是偶数"); //加了这一行
else
printf("偶数");
return 0;
}
多半你的编译器就会报错了
因为默认在 if 和 else 语句中只控制一条语句
为了解决这个问题我们可以加个大括号{}如下:
#include
int main()
{
int a;
scanf("%d", &a);
if (a % 2 == 1) { //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
printf("奇数");
printf("不是偶数");
}
else {
printf("偶数");
}
return 0;
}
这样就可以完美运行了
如果要有多次判断,可以使用(else if)语句放在 if 和 else 之间,形成多次判断,例如:
int main()
{
int a;
scanf("%d", &a);
if (a == 0) {
printf("结果为0");
}
else if (a > 0) {
printf("结果为正数");
}
else {
printf("结果为负数");
}
return 0;
}
这样就可以形成三次判断,三种情况,如果想要更多情况可以持续的增加 (else if)的个数
嵌套就是一个套一个的感觉,在这里要说的是一个if 语句中再套一个if 语句,如下:
#include
int main()
{
int num = 0;
scanf("%d", &num);
if(num>0)
{
if(num%2 == 0)
printf("偶数\n");
else
printf("奇数\n");
}
else
{
printf("⾮正数\n");
}
return 0;
}
在if 语句中还有一个if 语句,这个就是嵌套if
当num>0的时候,会进入到另一个if 语句里面,判断num%2 == 0这个条件
#include
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
猜猜上述程序运行的结果是什么?
如果你想成了:因为a = 0,所以不满足第一个if(a == 1)的语句然后进入else运行printf("haha\n")这行代码就中陷阱了
因为else语句总是会与最接近它的if 语句匹配
所以代码的呈现应该是这样
#include
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
所以最终结果为无任何输出
如果想输出printf("haha\n")该怎么改呢?如下:
#include
int main()
{
int a = 0;
int b = 2;
if(a == 1){
if(b == 2)
printf("hehe\n");
}
else {
printf("haha\n");
}
return 0;
}
顾名思义比较两者之间的关系,操作符有多种
>(大于) <(小于) >=(大于等于) <=(小于等于) ==(等于) !=(不等于)
这些操作符通常返回1表示真,0表示假
a = (1 > 0) //真为1,a = 1
b = (20 < 2) //假为0,b = 0
c = (20 == 5) //c = 0
但是要注意的是,判断是否相等用的是两个等号(==),而一个等号(=)的含义是将等号右边的值赋给左边,且关系符不能连用
int a = 5,b = 3,c = 2;
if (a > b > c) { //err
printf("hello world");
}
这样子连用是达不到目的的,因为关系运算符会从左到右依次计算,先判断a是否大于b,如果a>b,则它们的值为1,然后开始比较1是否大于c,所以最好别连用关系符,如果实在是想要知道怎么样可以这样比,可以看看下面的逻辑操作符
条件操作符也叫三目操作符,拥有三个操作数
ret = (a > b) ? c : b
它类似于 if 语句,先判断(a>b),如果是真(返回1),则返回:前面的c,否则返回0,返回值为b
上面的条件操作符也可以用下面的if语句代替
if (a > b) {
ret = c;
}
else {
ret = b;
}
&&是表示并且的意思,||是表示或的意思,!是取反(比如如果1是真,加上!1就是假)
上面说了不能使用a > b > c这种连续的关系操作符,那么这时候就可以使用&&并且达到目的
int a = 5,b = 3,c = 2;
if (a > b && b > c) {
printf("hello world");
}
表达式的意思是 a > b 和 b > c 两者的表达式都为真时,整体才为真,才能执行语句
int a = 5,b = 3,c = 2;
if (a > b || b > c) {
printf("hello world");
}
如果这用 || 表示的就是如果 a > b 或者 b > c任意一个表达式成立,那么就为真,执行语句
上面说了,!表示取反
int a = 5,b = 3,c = 2;
if (!(a > b)) {
printf("hello world");
}
上面是执行不了语句的,因为a > b为真,那么取反过后为假,则不会执行下面语句
int a = 3,b = 5,c = 2;
if (a > b && b > c) {
printf("hello world");
}
还是这段代码举例,在表达式 (a > b && b > c) 中,必须要两个都为真才能整体为真,那如果第一个 a > b 不成立,那么整体就都为假,第二个就不需要判断了,这个时候就称为短路,把第二个给短路了
或语句也一样,(a > b || b > c) 中,只要两个之一为真那么整体就为真,所以当第一个为真时,就无需判断第二个是否为真了,这个时候就把第二个给短路了
除了 if 语句可以做分支结构外,switch也可以做分支结构
switch 相比与 if 语句在处理将要使用多个 (else if)有时候更好用,且更容易让人读懂
switch(表达式) {
case 值1: (语句)
case 值2: (语句)
.
.
.
default: (语句)
}
表达式中的值如果为值1,则从 case 值1开始往下执行,如果表达式中的值case中无符合的值,那么就由default开始执行
注:default并不是只能放在末尾,case也不是只能放前面
感谢大家的观看,如有问题可共同讨论
完