if语句的相关介绍
1.if语句
if的语法形式如下:
if(表达式)
语句
表达式为真,则语句执行,表达式为假,则语句不执行。
在C语言中,0为假,非零为真, 也就是表达式的结果如果是0,则语句不执行,表达式的结果不为0,则语句执行。
例子: 输⼊⼀个整数,判断是否为奇数
#include<stdio.h>
int main()
{
int i=0;
scanf("%d",&i);
if(i%2==1)
printf("%d是奇数\n",i);
return 0;
}
2.else
如果⼀个数不是奇数,那就是偶数了,如果任意⼀个整数,我们要清楚的判断是奇数还是偶数怎么表
⽰呢?
这⾥就需要if…else… 语句了,语法形式如下:
if(表达式)
语句1;
else
语句2;
例⼦: 输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印偶数。
#include<stdio.h>
int main()
{
int i = 0;
//输入
scanf("%d",&i);
//判断是奇数还是偶数
if (i % 2 == 1)//这是判断奇数的
printf("%d是奇数\n", i);
else
printf("%d是偶数\n", i);
return 0;
}
3.多分支选择语句
默认在 if 和 else 语句中默认都只控制⼀条语句,⽐如:
```c
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if (age >= 18)
printf("成年了\n");
printf("可以谈恋爱了\n");
return 0;
}
上⾯的代码,你会发现输⼊的值不管是>=18 还是<18,“可以谈恋爱了” 都会打印在屏幕上。
这是因为 if 语句只能控制⼀条语句,就是 printf(“成年了\n”) ,if语句为真,则打印成年了,
if语句为假,则不打印。对于 printf(“可以谈恋爱了\n”); 是独⽴存在的,不管if语句的条件的真
假,都会被执⾏。
那如果我们要if语句同时控制2条语句,怎么办呢?那就要使用 { } 将代码括起来,
else 后也可以跟上大括号。如下:
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if (age >= 18)
{
printf("成年了\n");
printf("可以谈恋爱了\n");
}
else//else 后使⽤ { } 控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("还未成年\n");
printf("好好学习\n");
}
return 0;
}
4.嵌套 if
在 if else 语句中,* else* 可以与另⼀个 if 语句连⽤,构成多重判断。
例子1: 要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。请看如下代码:
#include<stdio.h>
int main()
{
int i = 0;
scanf("%d",&i);
if (i == 0)
printf("%d是正数\n",i);
else//i不等于0,走 else, 这里的else语句又嵌套了一个 if...else...语句
{
if (i > 0)
printf("%d是正数\n", i);
else
printf("%d是负数\n",i);
}
return 0;
}
以上就是嵌套if语句的语法,有了嵌套if语句,就可以完成更多复杂逻辑的判断。
*例子2:*输⼊⼀个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:非正数。
#include<stdio.h>
int main()
{
int i = 0;
scanf("%d",&i);
if (i > 0)
{
if (i % 2 == 1)//这是判断奇数的
printf("%d是奇数\n", i);
else
printf("%d是偶数\n", i);
}
else
printf("非正数\n");
return 0;
}
5.悬空 else 问题
如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。
来看一个代码
#include<stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("hello world!\n");
else
printf("I like this world!\n");
return 0;
}
打印的结果是什么呢?
刚开始学的时候,认为是这样的:
判断 a 是0,不等于1,那就执行 else 语句,打印 I like this world!
当你去运行的时候,结果:什么都不输出
为什么呢?
这就是悬空 else 的问题,如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。
上面的代码排版,让* else* 和第⼀个 if 语句对齐,让我们以else 是和第一个 if 匹配的。
当 if 语句不成立的时候,自然想到的就是执行 else 句子,打印 I like this world! 。
但实际上 else 是和第二个 if 进行匹配的,这样后边的 if…else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不成立,嵌套 if 和 else 就没机会执行了,最终什么都不打印。
如果代码改成下⾯这样就更加容易理解了
#include<stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)
{
if (b == 2)
printf("hello world!\n");
else
printf("I like this world!\n");
}
return 0;
}
这就很容易看出这个代码怎样执行了。
只要带上适当的大括号,代码的逻辑就会更加的清晰,所以大家以后在写代码的时候要注意括号的使用,让代码的可读性更高。