目录
流程结构思维导图:
选择结构
若语句为真则执行,否则不执行;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
到这里流程结构的主要问题就没啦,感谢阅读!