1.if语句
1.1if
if(表达式)//表达式:真:非0 假:0
语句
表达式成立为真,则语句执行;表达式不成立为假,则语句不执行
输入一个数,判断是否为奇数
int main()
{
int num = 0;
scanf("%d", &num);
if (num % 2 == 1)
printf("%d是奇数\n", num);
return 0;
}
1.2else
if (表达式)
语句1;
else
语句2;
输入一个数,判断是否为奇数,如果是奇数打印是奇数,否则打印偶数
}
输入一个年龄>=18岁就输出成年,否则就输出未成年
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
printf("成年\n");
else
printf("未成年\n");
return 0;
}
1.3分支包含多条语句
if (age >= 18)
{
printf("成年\n");
printf("可以谈恋爱");
}
1.4嵌套if
在if else语句中,else可以与另一个if语句连用,构成多重判断
例如:输入一个整数,判断输入的整数是零,还是正数或负数
例1: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;
}
例2: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岁打印青年
如果在44岁到59岁打印中老年
如果在60岁到89岁打印老年
如果90岁以上打印老寿星
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和esle,可以记住这样一条规则,else总是跟最近的if匹配
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
2.关系操作符
>大于
<小于
>=大于等于
<=小于等于
==等于
!=不等于
关系表达式通常返回0或1,表示真假
int main()
{
int a = 6;
printf("%d\n", a==6);
printf("%d\n", a==5);
return 0;
}
通常运用于if或while
int main()
{
int x = 0;
if (x == 3)
printf("hehe"\n);
return 0;
}
当我们拿一个变量和一个常亮比较是否相等的时候
int main()
{
int x = 0;
//if (x == 3)
//printf("hehe"\n);
if (3 == x)
pritnf("hehe\n");
return 0;
}
多个运算符不易连用:i<j<k
int main()
{
int a = 0;
int b = 20;
int c = 5;
if (a < b < c)//应用(a<b&&b<c)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
我们输入一个年龄,如果在18~36岁之间,我们输出青年
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18&&age<=36)
printf("青年\n");
return 0;
}
3.条件操作符:也叫三目操作符
表达式1 ? 表达式2 :表达式3
表达式1如果结构为真,表达式2 计算,计算结果是整个表达式结果;如果表达式1为假,表达式3计算,
计算结果是整个表达式的结果。
int main()
{
int a = 0;
int b = 0;
scanf("%d", & a);
if (a > 5)
b = 3;
else
b = -3;
b = (a > 5 ? 3 : -3);
printf("%d\n", b);
return 0;
}
练习2使用条件表达式实现找两个数中较大值
int main()
{
int a = 0;
int b = 0;
scanf("%d%d", &a, &b);
int m = 0;
m = (a > b ? a : b);
printf("%d\n", m);
return 0;
}
4.逻辑操作符:&& || !
!:逻辑取反运算符
&&:逻辑与运算符
||:逻辑或运算符
4.1逻辑取反运算符!
int main()
{
int flag = 0;//需要初始化,如果一个变量不初始化,它的值的为随机值
if (!flag)//一个全局变量不初始化,它的值是0
printf("do some thing\n");
return 0;
}
4.2逻辑与运算符
int main()
{
int month = 0;
scanf("%d", &month);
if (month >= 3 && month <= 5)
printf("春季\n");
return 0;
}
4.3逻辑或运算符
int main()
{
int month = 0;
scanf("%d", &month);
if (month == 12 || month == 1 || month == 2)
printf("冬季\n");
return 0;
}
输入一个年份,判断是否为闰年
判断闰年的规则:
1.能被4整除,并且不能被100整除
2.能被400整除是闰年
例1.int main()
{
int year = 0;
scanf("%d", &year);
if (year % 4 == 0)
{
if (year % 100 != 0)
printf("闰年\n");
}
if(year % 400 == 0)
printf("闰年\n");
return 0;
}
例2.int main()
{
int year = 0;
scanf("%d", &year);
if((year % 4 == 0)&&(year % 100 !=0)||(year % 400 == 0))
printf("闰年\n");
return 0;
}
例3.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;
}
4.5短路
c语言的逻辑运算符还有一个特点,它总是先对左侧的表达式求值,再对右侧的表达式求值,这个顺序是保证的
,如果左边的表达式满足逻辑运算符条件,就不再对右边的表达式求值。这种情况叫“短路”
if (month >=3 && month <=5)
if (month ==12 || month ==1 ||month ==2)
像这种仅仅根据左边操作符的结果就能知道整个表达式结果,不再对右操作符进行计算的运算称为短路求值
总结:
&& 左边为假,右边无需计算,整体为假
|| 左边为真,右边无需计算,整体为真
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ && ++b && d++;// a++ || ++b || d++ 1 3 3 4 1
printf("a=%d\nb=%d\nc=%d\nd=%d\n", a, b, c, d);
printf("i=%d", i);//
return 0;
}
int main()
{
int i = 0, a = 1, b = 2, c = 3, d = 4;
i = a++ ++&&b && d++;// a++ || ++b || d++ //2 2 3 4 1
printf("a=%d\nb=%d\nc=%d\nd=%d\n", a, b, c, d);//2 3 3 5 1
printf("i=%d", i);
return 0;
}
5.switch语句
switch语句是一种特殊形式的if else结构,用于判断条件有多个结果的情况。它把多重的else if改成更易用、可读性更好的形式。
switch(表达式)
case1
case2
case3
default :
switch后的expression必须为整型常量表达式
case后的值,必须是整型常量表达式
int main()
{
int n = 0;
scanf("%d", &n);
if (n % 3 == 0)
printf("整除了,余数是0\n");
else if ("n%3 == 0")
printf("余数是1\n");
else
printf("余数是2\n");
return 0;
}
int main()
{
int n = 0;
scanf("%d", &n);
switch (n % 3)
{
case 0:
printf("整除了,余数是0\n");
break;
case 1:
printf("余数是1\n");
break;
case 2:
printf("余数是2\n");
break;
}
return 0;
}
注意:1.case和后边的数字之间必须有空格
2.每一个case语句中的代码执行完成后,需要加上break,才能跳出这个switch语句
5.2switch语句中的break
练习:输入一个1~7的数字,打印对应的星期几
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
}
return 0;
}
需求发生改变:输入1~5,输出工作日
输入6~7,输出休息日
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
}
return 0;
}
5.3switch语句中的 default
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
printf("输入错误\n");
break;
}
return 0;
}
5.4switch语句中的case和default的顺序问题
没有明确的顺序要求
6.while循环6
6.1 if和while的区别
if (表达式)
语句;
while (表达式)
语句;
int main()
{
if (1)
printf("hehe\n");
return 0;
}
6.2while语句的执行流程
首先上来就是执行判断表达式,表达式为0,循环直接结束;表达式的值不为0,则执行循环语句,语句
执行完后再继续判断,是否进行下一次判断。
6.3while循环的实战
练习:在屏幕上打印1~10
int main()
{
int i = 1;
while (i <= 10)
{
printf("%d", i);
i++;
}
return 0;
}
6.4练习
int main()
{
int n = 0;
scanf("%d", &n);
while (n)
{
printf("%d ", n % 10);//获取一个数的最低位
n = n / 10;//去掉一个数的最低位
}
return 0;
}