1. if 语句
(1)if
( if 的语法形式)
if(表达式)
语句;
表达式成立(真),则执行下面语句,表达式不成立(假),则语句不执行。
在C语言中,0表示假,非0表示真,就是表达式的结果为0,语句不执行,表达式结果非0,语句执行。
例:输入一个整数,判断是否为奇数(是奇数打印是奇数,不是奇数不打印)
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\n", num);
return 0;
}
if 语句执行流程:表达式 -----为0------结束;表达式 -----非0------执行语句-----结束
(2)else
如果一个数不是奇数,那就是偶数,如果任给一个整数,要判断是奇数还是偶数?
可以用 if ... 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;
}
练习:输入一个年龄,>= 18 输出:成年,否则输出:未成年
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age>=18)
printf("成年\n");
else
printf("未成年\n");
return 0;
}
(3)分支中可以包含多条语句
if 和 else 语句中都默认只控制一条语句
如果想要 if 和 else 语句控制多条语句可以使用 {} 将需要控制的语句括起来
例:
if(表达式)
{
语句1;
语句2;
...
}
else
{
语句1;
语句2;
...
}
(4)嵌套if
在 if ... else ... 语句中可以 嵌套 if ... else ... 语句
例:
if(表达式)
{
if(表达式)
语句1;
else
语句2;
}
else
{
if(表达式)
语句1;
else
语句2;
}
// if ... else ... 语句可以单独放在if语句里或者放在else语句里面也可以都放
(5)悬空else 问题
如果有多个 if 和 else ,要记住 else 永远和离他最近的那个 if 匹配
例:
#include <stdio.h>
int main()
{
int a = 0;
int b = 1;
if(a == 1)
if(b == 1)
printf("b\n");
else
printf("a\n");
return 0;
}
这段代码中的 else 是和 if(b == 1) 匹配的
这一段代码最后的运行结果是:什么也没有输出
不管代码的排版如何 else 永远和离他最近的 if 匹配
如果想要让 else 和 第一个 if 相匹配可以这样写
#include <stdio.h>
int main()
{
int a = 0;
int b = 1;
if(a == 1)
{
if(b == 1)
printf("b\n");
}
else
printf("a\n");
return 0;
}
2.switch
除了 if 语句外,C语言还提供了 switch 语句实现分支结构。
switch 语句是一种特殊形式的 if ... else ... 结构,用于判断条件有多个结果的情况。
它把多重的 if ... else ... 改成更易用、可读性更好的形式。
(1)switch 语句语法形式
switch(整型表达式)
{
case 整型常量表达式1:
语句1;
break;
case 整型常量表达式2:
语句2;
break;
...
case 整型常量表达式n:
语句n;
break;
default:
语句n+1;
break;
}
上面代码中,根据表达式不同的值,执行相应的 case 分支。
如果找不到对应的值,就执行 default 分支。
重点:
switch 后的 表达式 必须是 整型表达式
case 后的值,必须是 整型常量表达式
case 和后边的数字之间必须有 空格
每一个 case 语句中的代码执行完成后,需要加上 break ,才能跳出这个 switch 语句。
例:输入一个 1 ~ 7 的数字,打印对应的星期几
#include <stdio.h>
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;
default:
printf("输入错误\n");
break;
}
return 0;
}
case 语句中的 break 也不是每句都得有,需要根据实际情况来看
例:输入1 ~ 5,输出 “工作日”;
输入6 ~ 7,输出 “休息日”
#include <stdio.h>
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;
}
上面这两个代码,说明我们应该根据实际的情况,在代码中觉得是否使用 break , 或者在哪里使用
break ,才能正确的完成实际的需求。
(2)default
在使用 switch 语句的时候,我们可能经常遇到一种情况,比如 switch 后的表达式中的值无法匹配代码中的 case 语句的时候,这个时候就可以做一些处理,可以再 switch 语句中加入 default 字句。 也可以不做处理。
switch(整型表达式)
{
case 整型常量表达式1:
语句1;
break;
case 整型常量表达式2:
语句2;
break;
...
case 整型常量表达式n:
语句n;
break;
default:
语句n+1;
break;
}
switch 后面的表达式结果不符合 case 后面的整型常量表达式的时候就会执行 default 字句。
case 和 default 字句的顺序问题
在 switch 语句中 case 和 default 语句是没有顺序要求的,只要你的顺序满足实际需求就可以。
不过 我们通常是把 default 字句放在最后处理。