if语句和语句中的各种符
在C语言中有循序结构、选择结构、循环结构三大结构,这三大结构可以包含日常所见的所有事情,要不说编程语言是生活的高度抽象呢
我们可以使用if、switch实现分支结构、使用for、whlie、do while实现循环结构
1.if语句
if的语法形式如下
if(表达式)
语句
表达式成立,语句执行,不成立语句则不执行
也就是表达式结果非零(真)执行,为零(假)则不执行
例:输入一个整数,判断是否为奇数
//输入一个整数,判断其是否为奇数
#include<stdio.h>
int main() {
int a = 0;
scanf("%d", &a);
if (a % 2 == 1) {
printf("%d为奇数", a);
}
return 0;
}
流程图:
else
一个数不是奇数就是偶数,判断是奇数还是偶数就可以用if......else......
语法形式:
if(表达式)
语句1
else
语句2
#include<stdio.h>
int main() {
int a = 0;
scanf("%d", &a);
if (a % 2 == 1) {
printf("%d为奇数\n", a);
}
else
printf("%d为偶数\n", a);
return 0;
}
注意:if和else都只默认控制一条语句
if(age >= 18)
printf("成年了\n");
printf("可以谈恋爱了\n");
上面这个if中,无论age是否大于等于18,都会打印“可以谈恋爱了”
如果需要if控制两条语句,就需要用{}
if(age >= 18){
printf("成年了\n");
printf("可以谈恋爱了\n");
}
这样的话两条语句就都被if所控制
else后面也是如此
嵌套if
if else语句中,else可以和另一个if语句连用,构成多重判断
比如整数就分为了正负数和0,这时候判断就需要用多重判断
#include<stdio.h>
int main() {
int a = 0;
scanf("%d", &a);
if (a == 0)
printf("输入的数字是零");
else if (a > 0)
printf("输入的数字是正数");
else
printf("输入是数字是负数");
return 0;
}
嵌套if语句可以实现更多复杂逻辑的判断
例:
输⼊⼀个⼈的年龄
如果年龄<18岁,打印"少年"
如果年龄在18岁⾄44岁打印"⻘年"
如果年龄在45岁⾄59岁打印"中⽼年"
如果年龄在60岁⾄89岁打印"⽼年"
如果90岁以上打印"⽼寿星"
#include<stdio.h>
int main() {
int age = 0;
while (1) {
scanf("%d", &age);
if (age < 18)
printf("少年\n");
else if (age < 44)
printf("青年\n");
else if (age < 59)
printf("中老年\n");
else if (age < 89)
printf("老年\n");
else
printf("老寿星\n");
}
return 0;
}
运用的while实现了多次输入,这个循环后续也会讲到的
当出现多个if和else的时候,else总是跟最近的if匹配
例:
#include<stdio.h>
int main() {
int a = 0;
int b = 0;
if (a == 1)
if (b == 2)
printf("123\n");
else
printf("321\n");
return 0;
}
结果是什么呢?
是321?
结果是没有结果,什么都不好输出,因为else跟最近的,而不是对齐的if,在第一个if(a == 1)的判断时,结果为假,所以后面的语句不会执行,自然也没有结果输出
在代码中加入大括号可以很好的帮助我们去理清逻辑关系,要知道代码并不是越短越好是越能懂越好。
2.关系操作符
主要用于比较大小关系
>
<
>=
<=
== 等于
!= 不等于
上诉关系如果成立,则表达式返回1(真),不成立则返回0(假)
*注意:相等运算符==和赋值运算符=是不一样的运算符
为了避免这种错误可以吧变量写在等号右边
if(3 == x)
这时候用等号就会报错
*多个运算符连用语法不错但通常达不到预想结果
如:i < j < k
因为运算符是从左往右运行,所以计算机的认为是(i < j)< k
先将i与j比较,得到返回值0或者1,再将0或1与k比较
为了到达我们所预想的
i < j && j < k
如年龄在18到30之间
18 <= age && age <= 30
3.条件操作符
三目操作符
a1 ?a2 :a3
逻辑为:如果a1为真,a2计算;如果a1为假,a3计算
常用例子两数比大小
#include<stdio.h>
int main() {
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int max = a > b ? a : b;
printf("%d\n", max);
return 0;
}
4.逻辑操作符:&& || !
!:逻辑取反,即不...
&& :与/并且 全真则真,一假即假
|| : 或/或者 全假则假,一真即真
例:判断闰年
1.能被4整除并且不能被100整除
2.能被400整除
#include<stdio.h>
int main() {
//法1
int year = 0;
scanf("%d", &year);
if (year % 4 == 0 && year % 100 != 0)
printf("%d是闰年", year);
if (year % 400 == 0)
printf("%d是闰年", year);
return 0;
//法2
int year = 0;
scanf("%d", &year);
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
printf("%d是闰年", year);
return 0;
}
短路
这可不是电路短路哦,博主的理解是最短路径
C语言对于逻辑运算符的执行,总是先对左侧的表达式求值,再对右边的表达式求值
如果左边的满足逻辑运算符条件,则右边的不在计算,这就是短路
如:
if(month >= 3 && month <= 5)
当month大于等于3不成立时,左边表达式结果为0 ,即整个表达式结果为0
对于&&,左为0则右不执行,整体为0
if(month == 12 || month == 1 || month == 2)
如果month等于12,最左边表达式结果为1,整个表达式结果为1
对于||,左为1则右不执行,整体为1
说白了,就是两个逻辑运算符性质的一个体现
#include<stdio.h>
int main() {
int i = 0, a = 0, b = 2, c = 3, d = 4;
//i = ++a && ++b && d++;
//i = a++ && ++b && d++;
i = ++a || ++b ||d++;
printf("%d\n%d\n%d\n%d\n", a, b, c, d);
return 0;
}
结束语
今天除了讲if语句外,主要是讲解了一下语句中的各类操作符,这对于我们后续学习switch、
for...有很大的帮助
希望大家可以喜欢!