C语言分支和循环语句(概念总结+简例解释)
一、if-else语句
if(表达式)
语句1;
else
语句2;
表达式成立-为真-非0为真;
表达式不成立-为假-0为假。
1.分支中包含多条语句
if和else语句默认都只能控制一条语句,所以如果想同时控制两条及以上语句,使用大括号{}将语句代码括起来;
int year = 0;
scanf("%d\n",&year);
if (year >= 2000)
printf("进入二十一世纪!\n");
printf("科技迅速发展!");
2024
进入二十一世纪!
科技迅速发展!
2.嵌套else if
用于进行多重判断。
eg:正数和负数判断
int num = 0;
scanf("%d",&num);
if(num < 0)
printf("%d是负数",num);
else if(num > 0)
printf("%d是正数",num);
else
printf("%d既不是正数也不是负数(是0)",num);
3.悬空else问题
else总是与和它最近的if相匹配,与对齐排版无关。
int a = 0;
int b = 1;
if(a == 2)
if(b == 1)
printf("熊猫\n");
else
printf("竹子\n");
熊猫
竹子
操作符
1.关系运算符
关系表达式返回值为0或1,表示真假。
注意1:相等运算符 == 与赋值运算符 =不同
if(x==1)//当x等于1时执行if后的语句
...
if(x=1)//将1赋值给x,这样式子恒成立,无法完成判断工作
...
if(1=x)//将变量写在右边,编译器会报错方便发现并改正问题
...
注意2:多个关系运算符不宜连用
if(1 < i < 100)//从左到右计算,首先进行一轮判断返回0或1,
//再将0或1同100比较,再次返回0或1
if(i > 1 && i < 100)//表示大于1并小于100
2.条件运算符
exp1 ? exp2 : exp3
如果exp1为真,执行exp2,反之执行exp3。
eg.比较两个数中的较大值:
int a = 0;
int b = 0;
scanf("%d %d\n",&a,&b);
int m = a > b ? a : b;
printf("%d\n",m);
3.逻辑运算符
!:非,真变假,假变真(单目);
&&:与,同真为真,同假为假(双目);
||:或,有真即真,无真即假(双目)。
eg.闰年的判断(规则:能被4整除且不能被100整除;能被400整除)
if(year % 4 == 0 && year % 100 != 0)||(year % 400 == 0)
注意:短路问题
运算顺序:从左到右
eg.计算结果
int i = 0,a = 0,b = 2,c = 3,d = 4;
i = a++ && ++b && d++;
printf("a = %d\n b = %d\n c = %d\n d = %d\n",a,b,c,d);
printf("i = %d\n",i);
1 2 3 4
0
赋值运算符优先级较低,先计算右边表达式,a++先使用0再++变为1,并且逻辑运算符为&&,即整个表达式值为0,后面表达式再不计算。
二、switch语句
switch(expression){
case 1:...
break;
case 2:...
break;
...
default:...
break;}
注意:
- expression必须为整型表达式;
- case后的值必须为整型常量表达式。
1.break
int n = 0;
scanf("%d\n",&n);
switch(n % 2){
case 0:
printf("整除!\n");
case 1:
printf("余数是1\n");
2
整除!
余数是1
2.default
在switch中的表达式没有匹配到所有case中的情况使用default,case像if语句中的else if,default像if语句中的else。
3.break和default的顺序
根据实际需求,没有固定顺序;
通常将default放在末尾。
三、while循环
while(表达式)
语句;
执行流程:
执行判断表达式,非0进入循环体 >> 操作完继续循环判断 >> 直到表达式为0,结束循环。
eg.打印1-10的值
int i = 1;
while(i <= 10){
printf("%d\n",i)
i++;}
四、for循环
for(表达式1;表达式2;表达式3)
语句;
1:循环变量的初始化;2:循环结束条件;3:循环变量的变化
执行流程:
表达式1 >> 表达式2判断,非0进入循环体 >> 执行语句 >> 表达式3对变量进行调整 >> 继续根据表达式2判断直到为0结束。
eg.同while打印1-10的值
for(int i = 1;i <= 10; i++)
printf("%d\n",i);
和while语句的对比:
for循环的三个部分较为集中,更便于维护。
五、do-while循环
do
语句;
while(表达式);
执行流程:
定义初始值 >> 先执行一次语句 >> (语句内包括循环变量使变化的语句) >> 执行判断表达式,非0继续,为0结束.
eg.同上
int i = 1;
do{
printf("%d\n",i);
i++;}
while(i <= 10);
和for,while语句的对比:
至少执行一次。
break和continue语句
break:永久终止循环,跳出循环往后执行;
continue:跳过本次循环continue后的代码。
注意: 在不同语句使用下有轻微区别,注意区分观察总结。
for(int i = 1;i <= 10; i++){
if(i == 5)
break;
printf("%d",i);}
1 2 3 4
for(int i = 1;i <= 10; i++){
if(i == 5)
continue;
printf("%d",i);}
1 2 3 4 6 7 8 9 10
六、其他:goto语句
在同一个函数内跳转到设置好的标号处。
{
printf("小明\n");
goto index;
printf("小红\n");
index:
printf("小美\n");
小明
小美
尽量减少使用,容易造成混乱。