分支语句、循环语句(C)

在c编程中,有时我们需要先对语句作出判断然后选择相应的语句执行,这样就会使用到我们的分支语句。分支语句是根据编程着输入的指令有条件的选择执行路径,而不是只按照语句的顺序依次执行。分支结构的设计关键在于分支条件的构建,适合于带有逻辑或比较关系等的判断。

1.分支语句

1.1if  else

1.11单分支

此语句if首先判断条件的真假,若条件为真则执行属于if语句作用域下的语句或语句块,否则执行else语句作用域下的语句或语句块。

#include<stdio.h>
int main()
{
    if()
    语句1;        
    else
    语句2;                   //分号作为语句的结束
    语句3;                   //此语句不属于if  else 控制之内
    if()
    {
      语句4;                 
    }
    else 
    {
      语句5;               
      语句6;        //语句5.6都数于if else控制之内,一对花括号就是一个代码块,同属于一个作用域
    }
}

示例:

#include<stdio.h>
int main()
{
    int a=30,b=20;
    int max=0;
    if(a>b)
    {
        max=a;
    }
    else 
    {
        max=b;
        a++;
        
    }
    return 0;
}
#include<stdio.h>
int main()
{
    int a=30,b=20;
    int max=0;
    if(a>b)
    max=a;
    else
    max=b;
    a++;
    return 0;
}

你知道这两个程序中最终a的值各是多少吗?可能有人认为二者输出的值一样,但事实却不是这个样子的,由于第二个程序未加花括号,else后面只执行max=b语句,无论a、b谁的值大最终都会执行a++,所以第一个输出a=30,第二个输出a=31.

小提示:不管if  else后有几条语句都应用{}括起来,这样的代码风格良好,简单易懂。

1.12多分支、嵌套

不管是多分支还是单分支,if  else的使用规则是不变的,使用分支嵌套时需要注意if  和   else的配对问题,他们一般情况对称配对,else与和它最近的if配对。

示例:

1.嵌套

#include<stdio.h>
int main()
{
    int a=10,b=20;
    if(a!=b)
    {
         if(a>b)
         {
              printf("a>b\n");
         }
         else 
         {
              printf("a<b\n");
         }
    }
    else
    {
         printf("a=b\n");
    }
    return 0;
}

2.多分支 

#include<stdio.h>
int main()
{
    int a=0,b=0;
    scanf("%d %d",&a,&b);
    if(a>b)
    {
        printf("a>b");
    }
    else if(a<b)
    {
        printf("a<b");
    }
    else
    {
        printf("a==b");
    }
    return 0;
}

1.2switch

switch用来代替简单的、有多个分支的if   else语句。

#include<stdio.h>
int main()
{
    switch(整型变量表达式)
    {
     case 常量1:语句1;break;     //break用于跳出switch语句;
     case 常量2:语句2;break;
     case 常量3:语句3;break;
     dafault:语句;break;        
    }

}

当变量表达式中的值与case后面的某一常量值相等时就执行此case后面的语句,若都不相等,则执行dafatul后面的语句;如果所执行的case后语句没有break关键字,则执行完后紧接着执行下一个case后的语句,直到遇到break跳出或程序结束。

注意:

  • switch只能用于基本数据类型的整型数据,如int  char  short等,对于其他类型的只能用if  else语句
  • switch()中参数只能是整型数据
  • case标签中只能时常量表达式,并且唯一,不允许重复,如4、‘a’或者'a'+1等
  • dafatul不是必须,如果所有case匹配失败,则switch中什么也不执行,退出
#include<stdio.h>
int main()
{
    int a=0;double b=0;
    scanf("%d %lf",&a,&b);
    switch(a)                          //switch(b)是错误的
    {
     case 1:printf("");
     case 2+3:printf("");
     case 'A':printf("");
     case 9.5:printf("");            //错误,9.5不是整数
     case a:printf("");              //错误,a是变量
     case &a+10:printf("");          //错误,含变量
     case "true":printf("");         //错误,不能含字符串
    }
}

2.循环语句

在有循环语句的程序中,通常需要对循环条件进行初始化,并且在循环体中要有可以修改循环条件的语句,否则循环将成为死循环。

2.1while循环

#include<stdio.h>
int main()
{
    while(循环条件)
    {
        语句块;
    }
}

示例:

#include<stdio.h>
int main()
{
    int i=1;
    while(i<10)
    {
         printf("%d*%d=%d\n",i,i,i*i);
         i++;
    }
    printf("\n");
    return 0;
}

 

 

 

 

 

 2.2do{ }  while;

do{ } while;循环实质和while循环一样,只不过do{ }  while循环先执行语句后判断,至少执行一次花括号内语句块。

#include<stdio.h>
int main()
{
    do
    {
        语句块;
    }while;
}
#include<stdio.h>
int main()
{
    int i=1;
    do
    {
         printf("%d*%d=%d\n",i,i,i*i);
         i++;
    }while(i<10);
    printf("\n");
    return 0;
}

 

 

 

 

 

 2.3for循环

#include<stdio.h>
int mian()
{
    for(表达式1;判断语句;表达式2)    //表达式1通常对循环条件初始化,表达式2通常修改循环条件
    {
       语句块;
    }
}

 

注意:

  • 在for循环中,表达式可在循环之前定义,也可在内部定义,表达式2也可放在语句块后,但要在花括号内
  • 在.cpp文件中for循环可这样写—for(int i=0;i<10;i++),在.c文件中int i;只能在循环之前定义,但可在内部赋值—int i;for(i=0;i<10;i++)
  • 在for循环中任何情况下两个分号不能省略
#include<stdio.h>
int main()
{
    for(int i=1;i<10;i++)
    {
        printf("%d    ",i*i);
    }
    return 0;
}

 

#include<stdio.h>
int main()
{
    int i=1;
    for(;i<10;)
    {
        printf("%d    ",i*i);
        i++;
    }
    return 0;
}

以上两种代码等价;

2.4无限循环的使用

for( ; ; )
{
    语句块;
}
while(1)
{
    语句块;
}

在for循环中及时所有语句为空也要有分号,while循环中括号内参数必须有,括号内只要不为0,即为真则无限次执行。

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值