控制结构分为三类:
1.循环结构(反复执行某语句):for ,while, do...while
2.跳转结构(从某一个语句跳到另外一个语句):goto
3.选择结构(由某条件来判断是否执行后面的语句):if, switch
依次讲解:
for 结构:
语法(又或通常出现的形式):for(语句①;语句②;语句④){循环体③}
语句①一般为初始化某一个变量如:i=1 等等
语句②一般为条件,用来判断是否执行循环体。如 i<=5
语句④一般为变量的自增或自减,通常有++,--出现,如 i++
执行步骤:语句①👉语句②👉语句③👉语句④
要注意的是:先执行语句③(循环体)再执行语句④
例如:
#include<stdio.h>
int main()
{
int i;
int j=6;
for(i=1;i<=3;i++){
printf("%d",j);
}
return 0;
}
输出结果为:
666
详细步骤:初始化变量i为1,因为1小于3,所以执行printf语句且输出一次6,再i++,i的值变为2,再判断2<3,输出一次6,再i++,这时i等于3,符合条件i<=3,输出一个6,再i++,此时i为4,不符合条件,跳出循环,最终就输出了666。
另外一种for形式:
#include<stdio.h>
int main()
{
int i=1;
int j=6;
for(;i<=3;i++){
printf("%d",j)
}
return 0;
}
省略了语句①,把语句①的意思放在了前面(int i=1;)
while 结构
语法:while (循环条件①){循环体②;}
步骤:循环条件①成立则进入循环体②,当循环到不符合循环条件时退出循环。
例如:
#include<stdio.h>
int main()
{
int i=1;
int j=6;
while(i<=3){
i++;
printf("%d",j);
}
return 0;
}
输出结果也为:
666
do.....while 结构
语法:do{
循环体①
}while(循环条件②);
执行步骤:先执行循环体①再执行循环条件②,若循环条件成真,则继续循环体①,反之退出循环。
do while 和 while 的不同就是,do while会至少执行一次循环体,而while有可能一次也不执行循环体①。
例如:
#include<stdio.h>
int main()
{
int i=0;
do{
i=i+1;
printf("%d\n",i);
}
while(i<2);
return 0;
}
输出结果:
1
2
可知,i先0+1变成1,输出1.再判断i小于2,再进入循环体加1变成2,再输出2.
if 结构
语法:
if (条件①){语句②;}
统一先执行条件①,若满足条件①,则进入语句①,反之,不进入语句①。
例如:
#include<stdio.h>
int main()
{
int i=5;
if(i>4){
i=i-1;
printf("%d",i);
}
return 0;
}
输出结果为:
4
步骤:判断i大于4,条件成立,进去语句①,i的值减一变成4.
拓展的if结构:
第一种:
if(条件①){语句①;}
else {语句②;}
可以翻译成:如果条件①成立,则进入语句①,否则进入语句②
第二种:
if(条件①){语句①;}
else if (条件②) {语句②;}
else if(条件③){语句③;}
......
else{语句n;}
可以理解为:如果条件①成立则进入语句①,若条件①不成立,则
跳到下一句else if 这里来判断条件②是否成立,
直到运行到最后的else(代表前面的条件都不成立)时,就进入语句n。
switch 结构
语法:
switch(表达式)
{ case 表达式①:语句①;
case 表达式②:语句②;
break;
case 表达式③:语句③;
.........
default:语句n;
有上而下执行。
通过实例可以更好理解
如:
#include<stdio.h>
int main()
{
int i;
scanf("%d",&i);
switch(i)
{
case 1:printf("今天是晴天");
break;
case 2:printf("今天是雨天");
break;
case 3:printf("出去玩");
break;
deafault :printf("呆在家");
}
return 0;
}
代码中出现了break和default,先说default,先把所有的break删除掉:
#include<stdio.h>
int main()
{
int i;
scanf("%d",&i);
switch(i)
{
case 1:printf("今天是晴天");
case 2:printf("今天是雨天");
case 3:printf("出去玩");
deafault :printf("呆在家");
}
return 0;
}
我们输入3,按照从上而下的步骤来说应该只会输出:出去玩。但我们看运行结果:
3
出去玩呆在家
多出了default的结果,这代表,不管前面的case有没有执行,最后的default一定会执行!
那如何去掉这个default呢?第一种是直接删掉default,但是我们应该更进一步,在不删掉default的情况下不输出dafault后面的语句,这时聪明的你肯定想到了break。让我们恢复break:
#include<stdio.h>
int main()
{
int i;
scanf("%d",&i);
switch(i)
{
case 1:printf("今天是晴天");
break;
case 2:printf("今天是雨天");
break;
case 3:printf("出去玩");
break;
deafault :printf("呆在家");
}
return 0;
}
输入3,结果为:
3
出去玩
所以,break的作用就呼之欲出了,前面符合条件的,进入语句并执行,碰到break后跳出switch结构,自然就不执行default后面的语句了。
goto 结构:
由两部分组成:
1.跳转语句 :goto 目的地(又或叫做锚点的名字)
2.锚点(目的地):锚点的名字:语句①
注意点:锚点和goto语句必须在同一个函数中使用,跨函数时并不适用
在前提(锚点和goto语句在同一个函数中)下 ,锚点可在goto语句前定义,也可在goto后定义。
#include<stdio.h>
int main()
{ int i=1;
while(i<=3){
i++;
printf("%d\n",i);
if(i=2){
goto A;
}
};
A: printf("在这里");
return 0;
}
输出为:
2
在这里
代表在i自加到2的时候,满足if的条件进入if里面,然后遇到goto语句,跳转到下方的A中,即输出在这里
以上,就是我本人对控制结构的理解,如果对你有用,不要忘了给我点个赞哦。
若有不足,敬请指出,我会加以改正,谢谢大家。