(接上一篇)嵌入式c语言中关于几种控制流语句的分析和详细说明。


八、控制流。  --  while循环 
1、在C语言中,控制流有两种,一种是分支,一种是循环。
分支: if-else  switch
循环: for      while   do-while

2、while循环。
1)基本框架。
while(判定条件)
{   //循环体  --> 写你需要循环的内容
    表达式;
}

2)处理流程。
先判断判定条件  --> 真  --> 执行循环体中所有的表达式   --> 判断判定条件  --> 假  --> 跳出循环

3)死循环。
每次判断判定条件结果恒为真,那么这种循环就称之为死循环,也就是说无法通过判定条件为假来跳出循环。
while(1)
{
    xxxx;  //一直被执行
}

4)省略{}情况。
---------------------------------------
while(1)
  xxx;    --> 紧跟着while(1)的语句才是循环体的内容
  yyy;    --> 不属于循环体的内容

等价于
while(1)
{
  xxx;
}
yyy;
---------------------------------------

while(1);  --> 有分号,代表有循环体,但是循环体中没有任何的内容。
   xxx;
   yyy;
等价于
while(1)   --> 空循环
{

}
xxx;
yyy;

结论:
1)当循环体中的表达式大于等于2个时,则复合语句{}不可以省略。
2)当循环体中的表达式只有1个时。则复合语句{}可以省略。


   练习1: 使用while循环输出1~10。

#include <stdio.h>

int main(int argc,char *argv[])
{
    int i = 1;
    while(i < 11)
    {
        printf("i = %d\n",i++);
    }
    
    return 0;
}


   练习2: 实现无论输入多少个参数,都可以将全部的参数打印出来(while循环)

#include <stdio.h>

int main(int argc,char *argv[])
{    
    int i = 0;  //argv数组的下标从0开始的。
    while(i < argc)
    {
        printf("argv[%d]:%s\n",i,argv[i]);
        i++;
    }
    
    return 0;
}

   练习3: 从键盘中获取一个数字,并存放在变量x中,并计算出来1+2+3+4+5+....+x的值是多少。

#include <stdio.h>

int main(int argc,char *argv[])
{
    //1. 从键盘中获取一个数字
    int x;
    scanf("%d",&x);
    
    //2. 求和
    int sum = 0;
    int i = 1;
    while(i <= x)
    {
        sum += i;  //把i累加到sum变量中。
        i++;       //每次累加完之后,i都要加1
    }
    
    //3. 输出结果
    printf("sum = %d\n",sum);
    
    return 0;
}


九、控制流。  ---  for循环。
1)基本框架。
for(初始化控制变量语句;判定条件;变量操作)   --> 里面任意一个东西都可以不填。
{

}

2)处理流程。
aaaa;
for(bbbb;cccc;dddd)
{
    eeee;
}
ffff;

aaaa;  -->  bbbb;   --->  cccc;   --> 真   -->  eeee;   -->  dddd;  --->  cccc;  --> 假   --> ffff;
无论for循环要执行多少次,这个bbbb都只会执行一次。

3)死循环。
for(;;);  等价于  while(1);

等价于
for(;;)   等价于  while(1)
{                 {

}                 }

4)省略{}情况。
for(;;)
  xxx;   --> 属于循环体的内容
  yyy;   --> 不属于循环体的内容

等价于
for(;;)
{
  xxx;
}
yyy;

----------------------------------

for(;;);
  xxx;
  yyy;

等价于
for(;;)
{

}
xxx;
yyy;

    练习4:  使用for循环输出1~10。

#include <stdio.h>

int main(int argc,char *argv[])
{
    int i;
    for(i=1;i<11;i++)
    {
        printf("i=%d\n",i);
    }
    
    return 0;
}


    练习5:  从键盘中获取一个数字,并存放在变量x中,并计算出来1+2+3+4+5+....+x的值是多少。  

#include <stdio.h>

int main(int argc,char *argv[])
{
    int x;
    scanf("%d",&x);
    
    int sum = 0;
    int i;
    for(i=1 ; i<=x  ; i++)
    {
        sum += i;
    }
    
    printf("sum = %d\n",sum);
    
    return 0;
}


十、控制流。  ---  do_while循环
1)基本框架。
do{


}while(判定条件);   --> 注意:如果这里没有分号,就会编译出错。

2)处理流程。
先执行一遍循环体  --> 判断判定条件  --> 真  --> 执行循环体的内容  --> 判断判定条件  --> 假  --> 跳出循环

3)死循环。
do{

}while(1);

4)省略{}情况。
do
   xxx;
while(1);
等价于
do{
   xxx;
}while(1);

-----------------------

do
  xxx;
  yyy;
while(1);   --> 编译出错。

不要以为会等价于
while(1)
   xxx;
   yyy;

等价于
do
  xxx;
while(1);
yyy;


结论:当表达式只有一条,则复合语句{}可以省略,如果大于1条表达式,则必须添加{},否则编译出错。


    练习6: 使用do_while循环输出1~10。

#include <stdio.h>
int main(int argc,char *argv[])
{
    int i = 1;
    do{
        printf("i = %d\n",i);
        i++;
    }while(i < 11);
    
    return 0;
}


    练习7: 从键盘中获取一个数字,并存放在变量x中,并计算出来1+2+3+4+5+....+x的值是多少。

#include <stdio.h>

int main(int argc,char *argv[])
{
    int x;
    scanf("%d",&x);
    
    int sum = 0;
    int i = 1;
    
    do{
        sum+=i;
        i++;    
    }while(i<=x);
    
    printf("sum = %d\n",sum);
    
    return 0;
}


    练习8: 实现无论输入多少个参数,都可以将全部的参数打印出来(do_while循环)
 
#include <stdio.h>

int main(int argc,char *argv[])
{
    int i = 0;
    do{
        printf("argv[%d]:%s\n",i,argv[i]);
        i++;
    }while(i<argc);
    
    return 0;
}

总结:
1、如果是死循环,一般就是使用while循环。
2、如果循环次数有限的,一般就是使用for循环。
3、如果无论如何都要先执行一遍循环体,那么就使用do_while循环。

十一、控制流。  --  分支。
分支:if-else  switch

1、if分支。  --  用法一。
if语句单独使用。

1)基本框架
if(判定条件)   --> 如果判定条件为真,则执行复合语句中的所有表达式,否则就不执行复合语句中的内容。
{  -> 复合语句

}

2)省略{}情况
if(判定条件)
   xxxx;   --> 属于if语句的响应范围
   yyyy;   --> 不属于if语句的响应范围,无论条件真假,yyyy都会执行。

等价于
if(判定条件)
{
   xxxx;
}
yyyy;
-------------------------------

if(判定条件);   -> 无论条件的真假,xxxx与yyyy都会被执行。
   xxxx;
   yyyy;
等价于
if(判定条件)
{

}
xxxx;
yyyy;


2、if分支。  --  用法二。
if语句与else语句配合使用。

1)基本框架
if(判定条件)               --> 如果判定条件为真,就会执行复合语句1。
{  --> 复合语句1

}
else{  --> 复合语句2      --> 不满足判定条件的所有情况,都会执行复合语句2。

}

2)注意以下的情况。
if(判定条件1)   --> 如果判定条件1为真,则执行xxx,如果条件1为假,就不执行xxx
   xxx;
if(判定条件2)   --> 如果判定条件2为真,则执行yyy,如果条件2为假,就执行zzz
   yyy;
else
   zzz;

---------------------

if(判定条件1)    --> 这个写法是错误的。
   xxx;
else
   yyy;
else
   zzz;


  注意:复合语句一与复合语句二之间肯定有一个会被执行。


3、if分支。  --  用法三。
else if多种情况判定。

1)基本框架
if(判定条件1)           --> 如果判定条件1为真,则执行复合语句1,就结束整个分支。
{   --> 复合语句1

}
else if(判定条件2)      --> 如果判定条件1为假,则进行判断判定条件2,如果判定条件2为真,则执行复合语句2,就结束整个分支。
{   --> 复合语句2

}
else if(判定条件3)      --> 如果判定条件2为假,则进行判断判定条件3,如果判定条件3为真,则执行复合语句3,就结束整个分支。
{   --> 复合语句3


else{   --> 复合语句4   --> 如果判定条件3为假,则执行复合语句4,就结束整个分支。  

}


    练习9: 分别使用以上的三种办法,完成该题。

从键盘中获取一个数字。
0~100    输出small
101~200  输出middle
201~300  输出large
其他     输出error

#include <stdio.h>

/*
从键盘中获取一个数字。
0~100    输出small
101~200  输出middle
201~300  输出large
其他     输出error
*/

int main(int argc,char *argv[])
{
    int x;
    scanf("%d",&x);
    
    /* if单独使用 */
    /*
    if(x>=0 && x<=100)  
    {
        printf("small!\n");
    }    

    if(x>=101 && x<=200)
    {
        printf("middle!\n");
    }
    
    if(x>=201 && x<=300)
    {
        printf("large!\n");
    }
    
    if(x < 0 || x > 300)
    {
        printf("error!\n");
    }
    */
    
    /* if else配合使用 */
    /*
    if(x >= 0 && x <= 100)
    {
        printf("small!\n");
    }
    else{  //那不是0~100 , 那么会是什么呢?
        if(x >= 101 && x <= 200)
        {
            printf("middle!\n");
        }
        else{  //那么又是0~100 又不是101~200 那会是多少呢?
            if(x >= 201 && x <= 300)
            {
                printf("large!\n");
            }
            else{
                printf("error!\n");
            }    
        }
    }
    */
    
    /* else if 使用 */
    if(x >= 0 && x <= 100)
    {
        printf("small!\n");
    }
    else if(x >= 101 && x <= 200)
    {
        printf("middle!\n");
    }
    else if(x >= 201 && x <= 300)
    {
        printf("large!\n");
    }
    else{
        printf("error!\n");
    }
    
    return 0;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肖爱Kun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值