1.if语句
1.1.if
语法形式
if (表达式)
语句
如果表达式结果为真(非0),语句执行
结果为假(0),语句不执行
\\输入一个整数,判断是否为奇数
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d",&num);
if(num % 2 == 1)
printf("%d是奇数\n",num);
return 0;
}
1.2.else
语法形式
if (表达式)
语句1;
else
语句2;
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d",&num);
if (num % 2 == 0)
printf("%d是偶数");
else
printf("%d是奇数");
return 0;
}
1.3分支中包含多条语句
如果if或else后有多条语句,需要把多条语句用大括号放到一个代码块里
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if (age >= 18)
{
printf("成年了\n");
printf("可以玩游戏了\n");
}
else
{
printf("未成年\n");
printf("好好学习\n");
}
return 0;
}
1.4嵌套语句
可在if或else中嵌套判断语句
判断输入的数字是正数,负数,还是零
include <stdio.h>
int main()
{
int n = 0;
scanf("%d",&n);
if (n == 0)
printf("输入的值是0\n");
else
{
if (n > 0)
printf("输入的值是正数\n");
else
printf("输入的值是负数\n");
}
return 0;
}
可简化为
include <stdio.h>
int main()
{
int n = 0;
scanf("%d",&n);
if (n == 0)
printf("输入的值是0\n");
else if (n > 0)
printf("输入的值是正数\n");
else
printf("输入的值是负数\n");
return 0;
}
输⼊⼀个⼈的年龄 如果年龄<18岁,打印"少年"
如果年龄在18岁⾄44岁打印"⻘年"
如果年龄在45岁⾄59岁打印"中⽼年"
如果年龄在60岁⾄89岁打印"⽼年"
如果90岁及以上打印"⽼寿星"
#include <stdio.h>
int main()
{
int age = 0;
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;
}
1.5 悬空else问题
如果有多个 if 和 else ,, 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;
}
以上结果为什么都不输出,因为下方else与最近的if匹配,而只有第一个if为真才能执行下一组ifelse语句,而第一个if为假,所以什么都不输出。
2. 关系操作符
C 语言中用于比较的表达式,称为 “关系表达式”,⾥⾯使⽤的运算符就称 为“关系运算符”,主要有下⾯6个
> ⼤于运算符
< ⼩于运算符
>= ⼤于等于运算符
<=⼩于等于运算符
== 相等运算符
!= 不相等运算符
关系表达式通常返回 0 或 1 ,表⽰真假。 C 语⾔中, 0 表⽰假,所有⾮零值表⽰真。⽐如20>12返回 1 , 12 > 20 返回 0 。
#include <stdio.h>
int main()
{
int a = 2;
printf("%d", a == 3);
return 0;
}
输出结果为0。
不要把=赋值和==相等用错
#include <stdio.h>
int main()
{
int x = 0;
if (x = 3)
printf("hehe");
return 0;
结果为hehe,因为将x赋值为3,为真
为了规避这种错误,当我们拿变量与常量比较是否相等时,可以将变量写在右侧,使用=号时就会报错
#include <stdio.h>
int main()
{
int x = 0;
if (3 == x)
printf("hehe");
return 0;
多个操作运算符不宜连用
#include <stdio.h>
int main()
{
int a = 2;
int b = 20;
int c = 5;
if (a < b < c)
printf("hehe");
else
printf("haha");
return 0;
结果为hehe,因为a<b为真,会判断为1,接着用1与c进行比较,结果为真
连用需要i < j && j < k
3.条件操作符(三目操作符)
形式:exp1 ? exp2 : exp3
条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果 exp1 为假, exp3 计算,计算的结果是整个表达式的结果。
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int m = a>b ? a : b;
printf("%d\n", m);
return 0;
4. 逻辑操作符:&& , || , !
(一个全局变量不初始化,它的值为零。一个局部变量不初始化,它的值为随机值)
逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符。
! :逻辑取反运算符(改变单个表达式的真假)
&& :与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)
|| :或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)
4.1 逻辑取反运算符 !
⽐如,我们有⼀个变量叫 flag ,如果flag为假,要做⼀个什么事情,就可以这样写代码:
#include <stdio.h>
int main()
{
int flag = 0;
if(!flag)
{
printf("do something\n");
}
return 0;
}
因为flag为假,所以!flag为真,执行
4.2 逻辑与运算符
&& 就是与运算符,也是并且的意思, && 是⼀个双⽬操作符,使⽤的⽅式是 a&&b , && 两边的表达式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。
int month = 0;
scanf("%d", &month);
if(month >= 3 && month <= 5)
{
printf("春季\n");
}
4.3 逻辑或运算符
|| 就是或运算符,也就是或者的意思, || 也是⼀个双⽬操作符,使⽤的⽅式是 a || b , || 两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。
int month = 0;
scanf("%d", &month);
if(month == 12 || month==1 || month == 2)
{
printf("冬季\n");
}
4.4 练习:闰年的判断
输⼊⼀个年份year,判断year是否是闰年
闰年判断的规则:
1. 能被4整除并且不能被100整除是闰年
2. 能被400整除是闰年
int main()
{
int year = 0;
scanf("%d", &year);
if(year%4==0 && year%100!=0)
printf("是闰年\n");
else if(year%400==0)
printf("是闰年\n");
return 0;
}
结果无法输出,因为进入了第一个if就不能再进入else
正确方法
int main()
{
int year = 0;
scanf("%d", &year);
if((year%4==0 && year%100!=0) || (year%400==0))
printf("是闰年\n");
return 0;
}