C语言是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构,C语言是能够实现这三种结构的,其实我们仔细分析可以发现我们日常所见的事情都可以拆分成这三种结构或者这三种结构的组合。
我们可以用if、switch实现分支结构,使用for、while、do while实现循环结构。
而今天我们先来讲解一些if语句的用法
if
if语句的语法形式如下:
if(表达式)
语句
在我们的日常生活中,经常有真假两面的说法,就像西游记中的真假孙悟空,不是真的就是假的,而只有真的一起才能继续前行,假的只有中途丧命。
而只有上面的语法形式中的表达式也是同样的道理,只有为真时,才会执行下面的语句,为假则会自动跳过该语句。
而在C语言中的真指的是非零数,假指的是零。
例如:输入一个整数,判断是否为奇数。
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\n", num);
return 0;
}
else
如果一个数不是奇数,那就是偶数了,那该怎样判断并输出呢?
这里就需要用到if……else语句了,语句形式如下:
if(表达式)
语句1;
else
语句2;
例如:输入一个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印偶数。
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\n", num);
else
printf("%d 是偶数\n", num);
return 0;
}
分支中包含多条语句
在C语言中,if和else都默认只控制一条语句。
例如:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
printf("成年了\n");
printf("可以谈恋爱了\n");
return 0;
}
输入10
输出结果:
10
可以谈恋爱了
输入20
输出结果:
20
成年了
可以谈恋爱了
这是因为if只能控制它下面的一条语句,为真时,同时打印两条语句,为假时,打印第二条语句。
所以第二条语句printf("可以谈恋爱了\n");是一条独立的语句,不会受到if的影响,而如果我们想要让if也管理第二条语句该怎么做呢?这时候就要用上{}把这两条语句括起来了,else后面也可以跟上大括号。
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)//if后使用()控制多条语句-这个块也叫程序块,或者复合语句
{
printf("成年了\n");
printf("可以交女朋友了\n");
}
else//else后使用()控制多条语句-这个块也叫程序块,或者复合语句。
{
printf("未成年\n");
printf("不可以早恋噢\n");
}
return 0;
}
嵌套if
在if else语句中,我们也可以进行嵌套,即else中再套一个if连用,构成多重判断。
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num == 0)
{
printf("输入的值是0\n");
}
else
{
if (num > 0)
printf("输入的值是正数\n");
else
printf("输入的值是负数\n");
}
return 0;
}
再比如:输入一个整数,如果是正数,再判断是奇数还是偶数,并判断;如果不是正数则输出:负数。
#include <stdio.h>
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;
}
悬空else问题
如果有多个if和else,一定要记住else总是和最接近的if匹配。
这是我们在使用if 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后的条件不成立,结果导致程序直接结束。
{
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
}
return 0;
}
这就是悬空else的问题,一定要记住这样一条规则,如果有多个if和else,else总是和最接近的if匹配。
我们想要的是让第一个if和else匹配的结果,所以需要在第一个if下给第二个if加上{},这样子告诉编译器第二个if是包含在第一个if内的,而else是和第一个if配对的。
代码如下:
#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;
}
只要带上适当的{},就不会让编译器错误理解你的意思。而代码逻辑也会更清晰。
我们今天介绍了C语言中的真假关系,而其中用来判断真假关系的操作符,也是我们经常会用到的内容,我们留到下次来讲。
今天的内容就到这里,如果有疑问,可以在评论区留言或者私信。