目录
流程结构思维导图:
选择结构
若语句为真则执行,否则不执行;C语言中0为假,非0为真
第一种方式,若a等于0则执行语句,否则跳过语句执行
int a = 0;
//第一种
if (a==0)
{
……
}
第二种方式,若a不等于1,为假,则执行else中的语句
int a = 0;
//第二种
if (a == 1)
{
……
}
else
{
……
}
第三种方式,若a不等于1,则判断a是否等于2,依次判断条件……,若都为假,则执行else中的语句
//第三种
if (a == 1)
{
……
}
else if (a == 2)
{
……
}
…………
else
{
……
}
条件语句嵌套
嵌套即条件语句中包含了更加细分的条件,为了方便理解,这里直接展示代码
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
{
printf("青少年\n");
}
else
{
if (age <= 44)
{
printf("少年\n");
}
else
{
if (age <= 59)
{
printf("中老年\n");
}
else
{
if (age <= 90)
{
printf("老年\n");
}
else
{
printf("老寿星\n");
}
}
}
}
return 0;
}
这个结构中,else都各自对应哪个if条件,一目了然
在条件语句中,若只包含一个执行语句,我们可以不用加“{}”,但是这样容易造成混淆,不建议这样做
int main()
{
int a = 0;
if (a == 1)
printf("hello\n");
else
printf("hehe\n");
return 0;
}
那么问题来了,如果碰到上面那总嵌套的情况,没有大括号,我们该如何区分else对应的是那个if,还是看对齐吗?
且看代码:
这里是打印hehe还是haha?
int main()
{
int a = 10;
int b = 20;
if (a == 5)
if (b == 20)
printf("hehe\n");
else
printf("haha");
return 0;
}
答案是都不打印,else总是和最接近的if匹配
程序判断a不等于5时,直接跳过了,并没有进入else,因为else和里面的if匹配
这是条件语句中值得注意的点
switch语句
最后这里还有一个switch语句
主要规则如下:
1.若执行语句相同可以采用如下做法
2.每个case执行完语句后要加break
3.若没有匹配case语句的值,则执行default中的语句,default放哪里都可以,但建议放 最后
int main()
{
int a = 0;
scanf("%d", &a);
switch (a)
{
case 1:
case 2:
printf("hehe\n");
break;
case 3:
case 4:
case 5:
case 6:
printf("haha\n");
break;
default:
printf("错误的数字\n");
break;
}
return 0;
}
如果不加break会出现什么问题:
int main()
{
int a = 0;
scanf("%d", &a);
switch (a % 3)//可以放类似此的表达式
{
case 1:
printf("hello\n");
case 2:
printf("hehe\n");
break;
case 3:
case 4:
case 5:
case 6:
printf("haha\n");
break;
default:
printf("错误的数字\n");
break;
}
return 0;
}
输入1后得到结果
可见case 2中的语句也被打印,如果case 2中无break,会一直不停地往下执行,则达不到条件的效果
循环结构
循环三种形式:for、while、do……while
具体格式我们看代码:
int main()
{
//for
int i = 0, j = 0, k = 0;
for (i = 0; i < 5; i++)
{
printf("haha\n");
}
printf("i的值:%d\n", i);
printf("*******************\n");
//while
while (j < 5)
{
printf("hehe\n");
j++;
}
printf("j的值:%d\n", j);
printf("*******************\n");
//do……while
do
{
printf("hello\n");
k++;
} while (k < 5);
printf("k的值:%d\n", k);
return 0;
}
从这段代码我们可以明白每个语句的大致用法
这里给出三段大致一样的形式,帮大家梳理三种语句的区别,for和while我们经常看见,我们都知道do……while循环是先执行再进行判断,所以有时候也会让我们混淆它最后是否比前两个循环多打印了,或者条件多判断了一次等。for、while循环中均打印五次,do……while打印几次,条件判断了几次,k的值最后是否和i、j一样?
由打印结果我们可以知道,do……while仅仅只是先执行再判断,不管是判断条件变量还是执行次数都是和for、while循环一样的,这是容易造成误区的点
break和continue
这里最值得注意的是:break和continue都是跳出当前循环,而不是所有循环
break:直接跳出循环,并且循环以后的都不再执行
continue:跳出本次循环,循环以后的继续执行
break循环嵌套举例:
int main()
{
int i = 0;
int j = 0;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
//跳出当前循环
if (j == 1)
{
break;
}
printf("hehe\n");
}
}
return 0;
}
如果没有break,循环将会打印25个hehe,如果break跳出所有循环,这里只会打印一个hehe,如果break只是跳出当前循环则打印五个hehe(仅仅是小循环后面不再执行,大循环继续)
continue循环嵌套举例:
int main()
{
int i = 0;
int j = 0;
int count = 0;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j == 1)
{
//仅停止这一次
continue;
}
printf("hehe\n");
count++;
}
}
printf("一共有%d个hehe\n",count);
return 0;
同理,continue作用下,这里应该会打印20个hehe
到这里流程结构的主要问题就没啦,感谢阅读!