前言
大家好,我是小花椒。首先很荣幸能被各位大佬垂读这篇文章,以下全是小花椒近期关于分支与循环学习的成果,也希望这篇文章能够帮助到大家,如果有什么不对和不足的地方,还请各位大佬多多雅正!🚗🚗🚗
一、分支与循环
分支语句
if
switch
循环语句
while
for
do while
goto语句
二、分支语句
🎈🎈🎈流程图
1.if(条件语句)
(1)if形式
if(表达式)
可执行语句
int main() { int n = 0; if (n == 0) printf("666");//如果n等于0打印666 return 0; }
作用注释:若表达式成立(为真)执行可执行语句,否则不进行任何操作,执行后面语句。
(2)if-else形式
if(表达式)
可执行语句1
else
可执行语句2
int main() { int n = 0; if (n == 0) printf("666");//如果n等于0打印666 else printf("222");//如果n等于1打印222 return 0; }
作用注释:若表达式为真,则执行可执行语句1,否则执行可执行语句2。
(3)else-if形式
if(表达式1)
可执行语句1
else if(表达式2)
可执行语句2
......
else if(表达式n)
可执行语句n
else
可执行语句n+1
作用注释:若表达式1为真,则执行语句1,否则如果表达式2为真,则执行语句2,......,如果if后面所有的表达式都不为真,则执行N+1。
注意:
else会和最近的if进行匹配,不良的代码风格会造成else悬空,以至于没必要的误会,所以大家一定要养成良好的代码风格哦。o((>ω< ))o
2.switch(开关语句)
形式:
switch(表达式)
{
case 常量1:
可执行语句1
break;
case 常量2:
可执行语句2
break;
.....
case 常量n:
可执行语句n
break;
default:
可执行语句n+1
}
作用注释:当问题的讨论情况较多的时候,可以使用开关语句简化程序设计,使一个表达式可以产生不同的结果值。
break:
switch中的break,能帮助我们实现真正的分支。switch语句执行时会从上到下根据括号中表达式的值作比较,当某个case语句中的表达式与此值相同时,就执行这个case语句或语句序列,直到遇到break为止。 break语句是必须有的,它用来结束switch语句的执行。
default:
当所有case语句后面的表达式都不等于switch语句项中case后面整型常量表达式的值,就执行default后面的默认语句序列。不过,default部分是可选的。如果没有这一部分,并遇到所有case语句都不匹配,那么,就不作任何处理而进入后续程序段的执行。
例如下面代码,当输入day的值不同,打印的不同:
#include<stdio.h> int main() { int day = 0; scanf("%d", &day); switch (day) { case 1: printf("Monday\n"); break; case 2: printf("Tuesday\n"); break; case 3: printf("Wednesday\n"); break; case 4: printf("Thursday\n"); break; case 5: printf("Friday\n"); break; case 6: printf("Saturday\n"); break; case 7: printf("Sunday\n"); break; default: break; } return 0; }
注意:
①switch后圆括号内表达式的值一般为整型、字符型或枚举类型,而且每个 case 后的“常量表达式”的类型都应该与switch后括号内表达式的类型一致。
② 若case 后面的语句省略不写,则表示它与后续 case 执行相同的语句。
③程序执行到switch语句时,先计算表达式的值,然后自上而下寻找与该值匹配的 case常量,找到后则按顺序执行此 case 后的所有语句,包括后续case,而不再进行判断,直到遇到break语句或右花括号}为止。因此,只有switch语句和break语句配合才能形成真正意义上的多分支。也就是说,执行完某个分支后,一般要用break 语句跳出 switch 结构。若所有的case常量都不能与表达式的值相匹配,则执行 default 后面的语句序列 n+1。
④ 因为每个case后的常量只起语句标号(Label)的作用,所以 case 常量的值必须互不相同,不能自相矛盾,而且case 后只能是一个常量,不能是一个区间,也不能出现任何运算符(如关系运算符等)。例如,下面的两种写法都是错误的:
case 90~100: printf("8d--A\n",score); break; //语法错误
case 90<=score<=100: printf("8d--A\n",score); break; //语法错误
⑤ 改变 case常量出现的次序,不会影响程序的运行结果。但从执行效率角度考虑,一般将发生频率高的 case 常量放在前面。
三、循环语句
🎈🎈🎈流程图
1.while
形式:
while(表达式)
{
可执行语句
}
int main() { int a = 0; while (a < 10)//表达式 { printf("%d\n", a); a++; } return 0; }
作用注释:执行该语句时,是先判断后执行。先求表达式的值,若其值为非0值(真),表示件成立,则重复执行循环体内的可执行语句序列,直到表达式的值为0(假)时结束循的执行。
2.for
形式:
for(表达式1;表达式2;表达式3)
{
可执行语句
}
int main() { int i = 0; for (i = 0; i < 10; i++) { printf("%d\n", i); } return 0; }
作用注释:其中,表达式1的作用是初始化循环控制变量,即为循环控制变量赋初值:表达式2复行的判断条件,这个条件也用于决定什么时候结束循环;表达式3的作用是给循环控制变量增值,即定义循环控制变量在每次循环结束后按什么方式变化,可以在每次循环时给控制变量增加一个正数值,也可以增加一个负数值。
3.do while
形式:
do
{
可执行语句
}(表达式);
int main() { int i = 0; do { printf("%d\n", i); i++; }while(i < 10); return 0; }
作用注释:与while语句不同的是,do-while语句是先执行后判断。执行do-while语句时,至少先执行一次循环体内的语句,然后才判断while后括号内表达式的值是否为真,若表达式的值为非0值(真),则继续重复执行循环体内的语句,直到表达式的值为0(假)时为止,结束循环。
注意:
循环中:continue结束的是本次循环,break结束的是本层循环,而return可以跳出所有循环。
四、goto语句
形式:
//往前跳
goto 语句标号;
...
语句标号:...
//往后跳
...
goto 语句标号;
for(...) for(...) { for(...) { if(disaster) goto error; } } … error: if(disaster) // 处理错误情况
作用注释:
它的作用是无须任何条件,直接使程序转跳到该语句标号所标识的语句处去执行,语句标号代表goto语句转向的目标位置,其命名规则与变量名相同,不能用整数作为句标号。
实例,关机程序:
int main() { char input[10] = { 0 }; system("shutdown -s -t 60"); again: printf("电脑将在1分钟内关机,如果输入:‘我真帅’,就取消关机!\n请输入: > "); scanf("%s", input); if (0 == strcmp(input, "我是猪")) { system("shutdown -a"); } else { goto again; } return 0; }
大家小心使用哦~不要设置成立刻关机,让朋友运行§(* ̄▽ ̄*)§
总结
以上就是这段学习分支与循环的成果,有什么不足和错误,还望诸位大佬多多指教。🍗🍗🍗
下次为大家带来操作符的分享,还请佬佬们多多关注,不会太久哦~
期待佬佬们的指点,关注。😁
下次见┗|`O′|┛ 嗷~~