五、C语言-流程控制

四、C语言-数组

五、C语言流程控制

1.流程控制简介

什么是流程控制

程序代码执行的顺序

流程控制的分类

  • 顺序执行
  • 选择执行
  • 循环执行
    用流程控制可以解决所有问题

2.选择

定义

有选择的执行某些代码

if语句

if最简单的用法
格式:
if (表达式)
     语句
功能:如果表示式为真,执行语句
     如果表达式为假,语句不执行
if的范围问题
(1)
if (1>2)
printf("aaa\n");(语句a)
printf("bbb\n");(语句b)
if 默认只能控制语句a的执行或不执行,无法控制语句b的执行或不执行。或者讲,语句b一定执行
if (1>2)
{
	printf("aaa\n");(语句a)
	printf("bbb\n");(语句b)
}
此时if可以控制语句a和b,由此可见if只能控制一个语句的执行或不执行,若if想控制多个语句的执行,需要用{}将语句括起来
if,else的用法
   if (3 > 2)
    printf("aaaa\n");
    else
    printf("bbbb\n");
printf("cccc\n");
同样的,else也只控制一个语句

if ,else if,else…的用法
格式
If (1)
A;
else if (2)
B;
else if(3)
C;
else
D;

C语言对真假的处理

非零是真
零就是假
真用1表示
假用0表示

if的常见问题解析
(1);(分号)是一个空语句
例如:
    if (1>2);
    printf("aaaa\n");
printf("bbbb\n");
在if语句后面加了一个分号,此段程序就变成了三个语句,下面两个printf语句不受if控制

(2)
If (1);
语句A
是错误的

(3)
if (表示式1)
语句A;
else if (表达式2)
语句B;
else 
语句C;
当表达式1和2同时成立时,只执行语句A,因为当表达式1成立时,就没有否则了。
(4)
if (表示式1)
语句A;
else if (表达式2)
语句B;
当没有else时,语法不会出错,逻辑上有漏洞
(5)
if (表示式1)
语句A;
else if (表达式2)
语句B;
else (表达式3)
语句C;
这样写是不对的,正确的写法是:
要么去掉else后面的表达式
要在在else后面加if
(6)
else (5>10); //无实际意义的语句
printf(“AAA\n”);
等价于:
else5>10;
Printf(“AAA\n”);

switch语言

switch(表达式)
{
case 常量表达式1:语句1;
case 常量表达式2:语句2;
…
case 常量表达式n:语句n;
default :语句n+1;
}

1

2
所以,一般case的语句后面会加break,表示满足当前case情况,就不再向下面的case执行。

3.循环

定义

某些代码会被重复执行

for循环

for循环

第一次循环:1,2,4,3
第二次循环:2,4,3
…直到不满足循环条件2

格式
for (1;2;3)
语句A;
执行的流程(重点)
单个for循环的使用
多个for循环的嵌套使用
for(1; 2; 3) //1
     for(4; 5; 6)//2
          A;//3
          B;//4
整体是两个语句,1,2,3是第一个语句,4是第二个语句
范围问题
for(在不加{}情况下)一次只能控制一个语句
for(1;2;3)
     for(4;5;6)
        A;
        B;
顺序1,2,4,5,A,6,5,A,6,
当5不成立执行3,2,然后4,5,A,6。
当5不成立执行3,然后执行2,当2不成立,执行B

while

执行顺序
格式:
while(表达式)
语句;

for(1;2;3)
A;
等价于
1;
While(2)
{
	A;
	3;
}
与for的比较

for和while可以相互转化,但for的逻辑性更强,更不容易出错,推荐多使用for

while举例

从键盘输入一个数字,如果该数字是回文数,则返回yes,否则返回no。
回文数:正着写和倒着写都一样
比如:121,12321

什么时候使用While,什么时候使用for

没法说,用多了就知道了

do while

主要用于人机交互
格式
do
{} While(表达式);
While(表达式)
{}
for(1;2;3)
A;
do…while并不等价于for,当然也不等价于while

4.break和continue

break的用法

  • break如果用于循环是用来终止循环
  • break如果用于switch,则是用于终止switch.
  • break不能直接用于if,除非if属于循环内部的一个子句
例:
for (i=0; i<3; ++i)
{
      if (3>2)
      break; //break虽然是if内部的语句,但break终止的是外部的for循环
      printf("嘿嘿\n");//永远不会输出
}
  • break用于多层循环,只能终止最里面包裹它的循环
for (i=0; i<3; ++i)
{
     for (j=1; j<4; ++j)
     break;//break只能终止距离它最近的循环
     printf("你好\n");
}
  • 在多层switch嵌套中,break只能终止距离它最近的switch
  int x = 1;
  int y = 0;
  int a, b;
  a = b =0;

 switch(x) //第一个switch
   {
       case 1:
       switch(y) //第二个switch
       {
           case 0:
           a++;
           break;//终止第二个switch
           case 1:
           b++;
           break;

       }
       b=100;
       break;//终止第一个switch
       case 2:
       a++;
       b++;
       break;
   }
printf("a = %d, b = %d",a, b);
最终a=1,b=100

continue的用法

用于跳过本次循环余下的语句,转去判断是否需要执行下一次循环。

例1:
for (1;2;3)
{
	A;
	B;
	Continue;//如果执行完该语句后,会执行语句3,C和D都会被跳过去,不会被执行
	C;
	D;
}
while(表达式)
{
	A;
	B;
	Continue;//如果执行该语句,则执行完该语句后,会执行表达式,C和D会被跳过,不被执行。
	C;
	D;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值