一:if...else...
语句
1.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;
}
注意: 变量在创建的时候最好给其一个值(初始化),防止报错
2.else
:
语法格式:
if(表达式)
代码块1;
else
代码块2;
如果if
语句成立,则执行代码块1;如果if
不成立,则执行else
语句中的代码块2
注意: else
后面不可以加判断条件;但可以加if
示例1:输入一个整数,判断是否为奇偶数
#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;
}
示例2:输入一个年龄,如果大于或等于18就输出成年;否则就输出未成年
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if(age >= 18)
printf("成年\n");
else
printf("未成年\n");
return 0;
}
3.分支中包含多条语句:
在C语言中,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;
}
像这样,被{}
包裹的代码叫做代码块也叫程序块,或者复合语句
4.嵌套if
:
在if...else...
语句中,else
可以与另一个if
语句连用,构成多重判断
示例1:输入一个整数,判断输入的整数是0,还是正负数
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d",&num);
if(num == 0)
printf("输入的数字是0\n");
else if(num > 0) // 这里的if相当于嵌套在else语句中,形成了嵌套结构
printf("输入的数字是正数\n");
else
printf("输入的数字是负数\n");
return 0;
}
示例1:嵌套
if
语句的第二种写法:
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d",&num);
if(num == 0)
printf("输入的数字是0\n");
else
{
if(num > 0)
printf("输入的数字是正数\n");
else
printf("输入的数字是负数\n");
}
return 0;
}
示例2:输入一个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数,则输出不是正数
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d",&num);
if(num>0)
{
if(num % 2 == 0)
printf("此数是偶数\n");
else
printf("此数是奇数\n");
}
else
printf("此数不是正数\n");
return 0;
}
示例3:输入一个人的年龄,如果该年龄小于等于18岁,打印“少年”;如果年龄在18~44岁之间,打印“青年”;如果年龄在45~59岁之间,打印“中年”;如果年龄在60~89岁之间,打印“老年”;如果年龄在90及90岁以上,打印“神仙”
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if(age <= 18)
printf("少年\n");
else if(age < 45)
printf("青年\n");
else if(age < 60)
printf("中年\n");
else if(age < 90)
printf("老年\n");
else if(age > 90)
printf("神仙\n");
return 0;
}
5.悬空else
问题:
如果有多个if
和else
,else
总是跟最接近的if
匹配 —— 就近原则
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("chang\n");
else
printf("xin\n");
return 0;
}
上述代码准确来说应该是这样的结构:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("chang\n");
else
printf("xin\n");
return 0;
}
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
printf("chang\n");
else
printf("xin\n");
}
return 0;
}
注意: 此时不会输出任何东西。所以代码一定要注意缩进问题;或者适当的带上大括号,代码的逻辑就会更加的清晰
二:switch
语句
- 除了
if
语句外,C语言还提供了switch
语句来实现分支结构 switch
语句是一种特殊形式的if...else...
结构,用于判断条件有多个结果的情况switch
语句把多重的else if
改成更易用、可读性更好的形式
语法格式:
switch(整型表达式)
{
case 值1:
代码块1;
case 值2:
代码块2;
default:
代码块3;
}
上述语法格式中,根据表达式不同的值,执行相应的case
分支;如果找不到对应的值,就执行default
分支
注意:
switch
后的表达式必须是整型表达式case
后的值,必须是整型常量表达式
1.if
语句和switch
语句:
输入任意一个整数值,计算除以3后的余数:
示例1 --
if
语句实现:
#include <stdio.h>
int main()
{
int a = 0;
printf("输入一个数:");
scanf("%d",&a);
if(a % 3 == 0)
printf("整数且余数为0\n");
else
{
if(a % 3 == 1)
printf("余数为1\n");
else
printf("余数为2\n");
}
return 0;
}
示例2 --
switch
语句实现:
#include <stdio.h>
int main()
{
int a = 0;
printf("输入一个数:");
scanf("%d",&a);
switch(a % 3)
{
case 0:
printf("整数且余数为0\n");
break;
case 1:
printf("余数为1\n");
break;
case 2:
printf("余数为2\n");
break;
}
return 0;
}
注意:
switch
语句中的case
语句只决定了程序的入口,并没有决定出口,它会继续执行下一个case
语句- 想要在
switch
语句中实现分支结构必须要有break
- 当表达式的结果能够明确的计算出一个值的时候,才会用到
switch
语句
2.练习:
示例1 -- 输入一个1~7的数字,打印对应的星期:
#include <stdio.h>
int main()
{
int day = 0;
printf("请输入日期:");
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;
}
示例2 -- 输入1~5,输出的是工作日;输入6、7,输出的是休息日:
#include <stdio.h>
int main()
{
int day = 0;
printf("请输入日期:");
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;
}
注意: 根据实际需求,决定是否使用break
3.default
子句:
在switch
语句中,如果switch
后面表达式中的值匹配不到任何case
语句的时候,就需要我们在switch
语句中加入default
子句以维持程序的正常执行
#include <stdio.h>
int main()
{
int day = 0;
printf("请输入日期:");
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;
}
注意:
在switch
语句中case
语句和default
语句是没有顺序要求的,只要顺序满足实际的需求就可以