if语句
形如
if(表达式)
语句
非0为真,执行语句。0为假,不执行语句。
#include<stdio.h>
int main()
{
int i = 0;//初始化
scanf("%d", &i);
if (i % 2)//或i%2==1
printf("%d是奇数", i);
return 0;
}
else
if(表达式)
语句1
else
语句2
表达式输出结果为真,执行语句1。输出结果为假,执行语句2.
#include<stdio.h>
int main()
{
int i = 0;//初始化
scanf("%d", &i);
if (i % 2)//或i%2==1
printf("%d是奇数", i);
else
printf("%d是偶数", i);
return 0;
}
分支中包含多条语句
if和else默认控制一条语句
#include<stdio.h>
int main()
{
int i = 0;//初始化
scanf("%d", &i);
if (i % 2)//或i%2==1
printf("%d是奇数\n", i);//语句a1
printf("不能被2整除\n");//语句a2
else
printf("%d是偶数", i);//语句b1
printf("可以被2整除");//语句b2
return 0;
}
直接在a1后用enter进入下一行,自动缩进如上述,但即使手动将a1a2,b1b2,对齐,结果也一样,都会报错,没有匹配 if 的非法 else
如果删去语句a2,不会报错,但是由于b2不受else控制,所以无论输入什么都会打印“可以被2整除”
想要if或else控制多条语句需要加上大括号
#include<stdio.h>
int main()
{
int i = 0;//初始化
scanf("%d", &i);
if (i % 2)//或i%2==1
{
printf("%d是奇数\n", i);
printf("不能被2整除\n");
}
else
{
printf("%d是偶数\n", i);
printf("可以被2整除\n");
}
return 0;
嵌套if
if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断
#include<stdio.h>
int main()
{
int num = 0;
printf("请输入一个整数\n");
scanf("%d", &num);
if (num ==0)
printf("%d是0\n", num);
else
{
if (num > 0)
printf("%d是正整数\n", num);
else
printf("%d是负整数\n", num);
}
return 0;
}
可写为
#include<stdio.h>
int main()
{
int num = 0;
printf("请输入一个整数\n");
scanf("%d", &num);
if (num == 0)
printf("%d是0\n", num);
else if (num > 0)
printf("%d是正整数\n", num);
else
printf("%d是负整数\n", num);
return 0;
}
悬空else问题
如果有多个if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。
#include<stdio.h>
int main()
{
int a = 1, b = 2;
if (a == 0)//if1
if (b == 2)//if2
printf("haha");
else
printf("hehe");
return 0;
}
上述代码中,if2实际上受if1的控制,else与if2匹配,所以执行后不会打印任何东西
如果希望else和if1匹配,可以用大括号将if2和其语句括起来
为了代码书写与阅读的准确性,应该注意对齐,缩进,适当添加大括号
关系操作符
大于>
小于<
大于等于>=
小于等于<=
相等运算符==(不要和=赋值符号弄混)
int a=3;
if(a=2)
(if括号内的返回值为2,判断为真,继续执行语句)
(为了防⽌出现这种错误,有的程序员喜欢将变量写在等号的右边。
5==a与a==5相同。但5=a会报错)
不相等运算符!=
关系表达式通常返回1或0,表达真假,常用于if while语句
20>12,返回1
12>20,返回0
多个关系操作符不宜连用,如a<b<c
因为关系操作符是从左到右计算,所以真正的意思是(a<b)<c
a=-3,b=-2,c=-1
a<b的返回值为1(判断为真),1<c的返回值为0
整体的返回值为0,判断为假
条件操作符(三目操作符)
exp1 ? exp2 : exp3
条件操作符的计算逻辑是:
如果, exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果exp1 为假 ,exp3 计算,计算的结果是整个表达式的结果
int a = 0, b = 0;
b = (a ? 5, 3: -3);
printf("%d\n", b);
int a = 2, b = 3,m=0;
m = (a > b ? a : b);//将更大的数赋给
printf("%d", m);
return 0;
逻辑操作符
简要介绍
!逻辑取反运算符(改变单个表达式的真假)
&&逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)
||逻辑或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)
!(取反面)
|
a |
!a |
|
非0 |
0 |
|
0 |
1 |
int a = 0, b = 0;
if (!a)//如果a是0
printf("a=0\n");
&&(必须同时满足才为真)
|
a |
b |
a&&b |
|
非0 |
非0 |
1 |
|
非0 |
0 |
0 |
|
0 |
非0 |
0 |
|
0 |
0 |
0 |
int month = 5;
if (month > 3 && month < 6);
printf("现在是春天");
||(有一个为真就是真)
|
a |
b |
a||b |
|
非0 |
非0 |
1 |
|
非0 |
0 |
1 |
|
0 |
非0 |
1 |
|
0 |
0 |
0 |
int month = 1;
if (month > =11 || month < 2)
printf("现在是冬天");
逻辑操作符的混合使用
#include<stdio.h>
int main()
{
int year = 0;
printf("请输入年份\n");
scanf("%d", &year);
/*if (year % 4 == 0 && year % 100 != 0)
printf("是闰年");
else if (year % 400 == 0)
printf("是闰年");*/
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
printf("是闰年");
return 0;
}
短路
逻辑运算符总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。
如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”
&&左边为0,直接返回为0,右边就不算了
||左边为非0,直接返回为1,右边就不算了
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ && ++b && d++;
printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
输出结果a=1,b=2,c=3,d=4
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ || ++b || d++;
printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
输出结果为a=1,b=3,c=3,d=4
switch
switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重的
else if 改成更易用、可读性更好的形式
switch (expression)
{
case value1: statement
case value2: statement
...
default: statement
}
int num = 0;
scanf("%d", &num);
if (num % 3==0)
printf("整除");
else if (num % 3 == 2)
printf("余1");
else
printf("余2");
int num = 0;
scanf("%d", &num);
switch (num % 3)
{
case 0:
printf("整除");
break;
case 1:
printf("余1");
break;
case 2:
printf("余2");
break;
}
如果找不到对应的值,执行default
switch后面的expression必须是整型表达式(字符也可以,因为字符属于整形家族)
case后面的值必须是整形常量表达式
break代表跳出
如果不添加break,执行后找到对应case,执行相应语句后,会把这个case之后所有case控制的语句都执行一遍
int num = 0;
scanf("%d", &num);
switch (num % 3)
{
case 0:
printf("整除\n");
case 1:
printf("余1\n");
case 2:
printf("余2\n");
}
输入3,将会出现以下结果

虽然最后一个case直接就能结束,但是建议也加上break,便于后续修改时加上其余case
因为有break的存在,一条case可以控制多条语句,只要在最后一条后面加上break就行
int day = 0;
scanf("%d", &day);
switch(day)
{
case 1:
printf("星期一\n");
printf("一周最痛苦的一天\n");
break;
case 2:
printf("周二\n");
break;
case 3:
printf("周三\n");
break;
}
如果多条case控制语句相同,可以用break简化代码
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日");
break;
case 6:
case 7:
printf("休息日");
break;
}
return 0;
}
default
当所有case无法与返回值对应时执行default,default与case无顺序要求,系统通过switch后面表达式的值判断执行哪个语句
1293

被折叠的 条评论
为什么被折叠?



