C - 循环分支



分类:

  1. C程序是结构化程序,以顺序、分支、循环三种基本结构构建的单入口单出口程序。
  2. 顺序结构:CPU从上到下依次运行;

形式1. 逻辑判断

//为防止出错,将==写成=,if(a=1)//成立,变成赋值;if(1=a)//gcc报错,帮你纠错
if (1==a)
{
    printf("a等于1\n");
}

if (1=a)//gcc报错,不能给常数赋值1,纠错
{
       printf("a=1,a=%d\n",a);
}

形式2. if else

if(表达式){  //若为真,运行1,否则运行2
    语句1}
else{
    语句2}

形式3. if else if else

条件分支使用注意事项:

  1. if 和 else的配对原则:else或者 else if和最近的 if 配对;
  2. 如果语句只有一条,{}可以省略;
  3. 是否独占一行,linux开发中,{}不会独占一行;
//如果表达式1为真,执行1,若不为真,执行表达式2;
//如果2为真,执行语句2,若不为真,依次向下;若以上条件都不合适,执行M语句
 if(表达式1){ 
     语句1}
 else if(表达式2){
     语句2}
 ...
 else if(表达式3){
     语句n; 
 }
 else{   //我不知道条件是什么,就用else
     语句M; 
 }

举例:

//利用 if else 判断3个数字最小
#include <stdio.h>
int main(void)
{
    int a,b,c;
    printf("请输入三个数字:\n");
    scanf("%d%d%d",&a,&b,&c);//321,判断谁最小
    if(a>b){
        if(b>c){
            printf("最小数是%d\n",c)                    
           } 
           else{
           printf("最小数是%d\n",b)                           
           }                                                                                   
    }
    else{
        if(a>c){
            printf("最小数是%d\n",c)                    
           } 
           else{
           printf("最小数是%d\n",a)                           
           }         
    }
    return 0;
}

形式4. switch开关分支

概念: switch开关分支,控制表达式的值和下面case对应的常量表达式(相等),执行效率高,一旦break,开关分支立马结束,若case 都不相等,最后执行default 语句;

注意事项:

  1. 控制表达式被当成Int处理,可以是char,但不能是浮点数和字符串,如"5.5",“abc”
  2. 常量表达式必须是常量,不允许重复分支;
  3. 如果某个case对应的break没有添加,当case成立时,运行语句后会继续执行下一个case
    3.1 如果代码需要break,写完case,先写一个break,避免漏掉
  4. default 关键字可以写在任意case的前面,但是需要添加break;如果default 关键字写在最后,break可以省略
//switch(5)可以
//switch(5.5)不可以
//switch("abc")不可以
//switch('a')可以
switch (控制表达式){   
    case (常量表达式):
    	语句1breakcase (常量表达式):
    	语句2break;
     。。。。
     default:
     	语句M;
      	break;         
}

形式5. For循环

  1. 语法:
For(表达式1; 表达式2; 表达式3){
	循环语句;
}
  1. 语义:
    第 1 步:首先计算,运行表达式1;
    第 2 步:然后计算,运行表达式2;
    第 3 步:如果2为真,则继续执行循环;若为假,For循环退出;
    第 4 步:如果表达式2为真,执行运行循环语句,并当循环语句执行完毕后再运行表达式3,完毕后,执行步骤2;
  2. 使用形式

形式1:

int i;
for(i=0;i<5;i++)
{
    printf("i=%d\n",i);//i为循环变量
}
return 0;

形式2:

int i=0;
for(;i<5;i++)//i已经赋值运算过
{
    printf("i=%d\n",i)}
return 0;

形式3:

int i=0;
for(;i<5;)
{
    printf("i=%d\n",i);
    i++;//可后置
}
return 0;

形式4:死循环// ctrl + c 退出死循环;

int i=0;
for(;;){
    printf("i=%d\n",i);
    i++;//循环变量放在循环语句中
    if(i>=5{
        break;//执行中断,退出for循环    //如果for循环嵌套,中断最内层的for循环
    }
}
return 0;

形式5:复合形式

int i,j;
for(i=0,j=0;i<5 && j<5;i++,j++){  //{}可以考虑省略,但是不要这样
    printf("i=%d,j=%d\n",i,j);
}
return 0;

形式7: continue :中断本次循环,直接跳至下一次循环

int i;
for(i=0;i<5;i++){
    if(3==i){
        continue;   //终端本次循环,直接跳至下一次循环//当i=3时,执行continue//
        //后面循环的语句不再执行,直接执行i++;下一次循环         
    }
    printf("i=%d\n",i);
}

形式6. While循环

  1. 语法
while(循环控制表达式)
{
循环语句;
}
  1. 执行步骤:1. 运算循环控制表达式,如果结果为真,那么执行循环语句;若为假,结束;
  2. 循环语句 执行完毕,继续执行第一步;
int i=0;
while(i<5){
    printf("i=%d\n");
    i++;///i=4时/ gameover
}
while(1){
    printf("hello,world\n");死循环 
}
i=0;
while(++i<5){
    printf("i=%d\n",i);//输出 1、2、3、4
}
i=0while(i++<5{
    printf("i=%d\n",i);//输出1\2\3\4\5
}

形式7. do-while循环语句【至少执行一次】

  1. 语法
do{
	循环语句;
}while(循环控制表达式)//切记分号不可省略
  1. 流程:
    第 1 步:先执行循环语句;//第一次不做判断
    第 2 步:然后计算,运行循环语句,后续依次重复;
    如果为真,继续执行循环语句,后续依次重复;
    如果为假,循环结束;
int i=0;
do{
    printf("i=%d\n",i);
}while(i++<5);//输出0、1、2、3、4、5

形式8. goto 语句

  1. 作用:可以让cpu跳转到任何一条语句中去执行
  2. 应用场景:linux内核操作系统大量使用goto语句
  3. 语法:goto 标签名;//标签名就是指定要跳转的地方

形式一:

标签名:
	语句; 
	... ;
goto 标签名;
... ;
int main(void)
{
    label:
        printf("1\n");
    goto label;//死循环
    printf("2\n")//不执行
    return 0;
}
//若不想死循环,可考虑使用if语句判断
int main(void)
{
    int a=1;
lable:
    printf("1\n");
    if(1==a){    //此过程判断a是否等于1,执行两次printf 1的操作
    a=0;
goto lable; //lable与goto lable之前的程序循环               
    }
    else{
        printf("2\n");    
    }
    return 0;
}

形式二:

goto 标签名;
	...
标签名:
	语句;
	...  
int main(void)
{
	goto label;
	printf("2\n");//忽略此语句,翻过去了  
	label:
	        printf("1\n"); 
	return 0;
}

总结

提示:这里对文章进行总结:

  1. 章节包含内容:循环分支类型罗列
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值