分支语句(选择结构)
生活中我们会遇到许多选择性的问题,如下图这样
在C语言中,该如何实现这种选择方式呢?
if语句
语法结构:方式1: if(表达式)
语句;
方式2:
if(表达式)
语句1;
else
语句2;
方式3:
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
if语句举例
int main() { int age = 0; scanf("%d", &age); if(age<18) { printf("未成年\n"); } }
输入一个年龄,如果年龄小于18则打印未成年
if else 语句举例
#include <stdio.h> int main() { int age = 0; scanf("%d", &age); if(age<18) { printf("未成年\n"); } else { printf("成年\n"); } }
输入一个年龄,如果年龄小于18打印未成年,如果年龄大于18打印成年
if else if else 举例
#include <stdio.h> int main() { int age = 0; scanf("%d", &age); if(age<18) { printf("少年\n"); } else if(age>=18 && age<30) { printf("青年\n"); } else if(age>=30 && age<50) { printf("中年\n"); } else if(age>=50 && age<80) { printf("老年\n"); } else { printf("老寿星\n"); } }
输入年龄,如果年龄<18,打印少年
年龄>=18并且年龄<30,打印青年
年龄>=30并且年龄<50,打印中年
年龄>=50并且年龄<80,打印老年
如果年龄不在以上数字段内,打印老寿星
注意事项:如果if或else或else if后面的表达式语句,超过了一句,我们要用{}将属于if或属于else或属于else if的语句括起来
判断条件
在C语言中,0为假,非0为真,当选择语句()里面的内容为真时,则会执行当前语句的表达式。
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; }
我们发现此时什么都没打印,这是因为 ,a=0,进入不了if(a==1)表达式,此时if(b==2)是属于if(a==1)的表达式,所以也无法执行if(b==2),这里的else是跟if(b==2)相匹配的,即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; }
switch语句
switch语句也是一种分支语句。 常常用于多分支的情况。
比如:从1-7中每输入一个数字就打印相对应的星期。若是用if语句得用7次,有点麻烦,此时我们可以用另一种语句叫switch语句
switch语句格式,switch(整型表达式)
{ case 整形常量表达式: 语句; }
从1-7中输入数字,打印所对应得星期
#include <stdio.h> int main() { int day = 0; 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; }
break的作用:如果输入1,打印星期一之后没有break,程序会自动往下进行,进入case2直到遇到break跳出程序或一直到switch语句结束。
但如果输入的值超出了case语句后的范围怎么办?C语言中,当switch()中的值没有对应的case时候,我们可以用defalut语句。
default语句作用:当switch()中输入的值在case中没有相对应的满足条件时,即超出case的范围时,这种语句会统一进入default语句,default在switch语句中的位置,对输出的结果无影响,但一般人们默认把它放在switch{}的末尾。
注意事项:switch(整形表达式),()中的内容可以是整形表达式,也可以是char类型,因为字符型本身也是整形,这是因为它还是以ASCII码值进行保存的,case 整形常量表达式: 语句; case 后的表达式必须是常量,不能是变量,如果是变量则会报错。
switch嵌套
switch语句允许嵌套使用
#include <stdio.h> int main() { int n = 1; int m = 2; switch (n) { case 1: m++; case 2: n++; case 3: switch (n) {//switch允许嵌套使用 case 1: n++; case 2: m++; n++; break; } case 4: m++; break; default: break; } printf("m = %d, n = %d\n", m, n); return 0; }
循环语句
while()循环
while(表达式)
循环语句;
在屏幕上打印1-10
#include <stdio.h> int main() { int i = 1; while(i<=10) { printf("%d ", i); i = i+1; } return 0; }
while(表达式)
循环语句;
使用while语句时,首先会对表达式进行判断,若表达式为真,则执行循环语句,若表达式为假,则不进入while循环