C语言分支和循环

目录

一.分支

一.if

[二.if else](#二.if else)

[三.if else嵌套](#三.if else嵌套)

[四.else if](#四.else if)

五.switch语句

二.循环

[一.while (do while)break :](#一.while (do while)break :)

二.for函数:

三.goto语句:

四.猜数字:


一.分支

一.if

if要条件为真才执行为假不执行而且if只能执行后面第一条如果要执行多条就得用{}包起来

下面if的判断条件是a等于2就为真执行打印yes否则为假不执行直接跳过printf执行下一条语句

0表示假非0表示真

cpp 复制代码
int main()
{
int a=1;
if(a==2)
printf("yes");
}

下面的代码是输入一个数如果小于5为真执行if{}里的俩条printf语句如果大于或等于5就不执行if{}里的语句直接跳过

cpp 复制代码
int main()
{
    int a;
    scanf("%d",&a);
    if(a<5)
    {
        printf("yes\n");
        printf("yes\n");
    }
}

二.if else

这段代码是判断输入的a是否为1,如果是1为真就只执行printf("1");不执行printf("a不等于1");如果输入的数不是1就不执行if里的只执行else里的内容,else是后离他最近的if匹配的

cpp 复制代码
#include<stdio.h>
int main()
{
    int a;
    scanf("%d",&a);
    if(a==1)
    {
        printf("1");
    }
    else 
    {
        printf("a不等于1");
    }
}

三.if else嵌套

代码风格很重要比如这个和小他下面的就有区分if else匹配的难度了可以多用{}

cpp 复制代码
#include<stdio.h>
int main()
{
    int a=0;
    int b=0;
    if(a==2)
    {
        if(b==2)
        {
        printf("a,b的值都是2");
        }
    }
    else
    {
        if(b==2)
        {
        printf("只有b是2");
        }
        else
        {
          printf("都不等于2");
        }
    }
}
cpp 复制代码
#include<stdio.h>
int main()
{
    int a=0;
    int b=0;
    if(a==2)
        if(b==2)
        printf("a,b的值都是2");
    else
        if(b==2)
        printf("只有b是2");
        else
          printf("都不等于2");
        
    
}

四.else if

下面程序执行后输入1就执行if(a==1)的语句并不再执行他的其他分支else if ,a为2就只执行else if(a==2)里的内容并不再继续执行后面的分支 ,如果a不等于1,2,3就执行else里的内容

当然也可以把最后一个else不要

cpp 复制代码
#include<stdio.h>
int main()
{
    int a;
    scanf("%d",&a);
    if(a==1)
    {
        printf("1");
    }
    else if(a==2)
    {
        printf("2"):
    }
    else if(a==3)
    {
        printf("3");
    }
    else
    {
        printf("没得");
    }
}

分支语句中也可以嵌套分支比如:

cpp 复制代码
int main()
{ 
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a<=10)
{
    if(b<=10)   
    {
        if(c<=10)
        {
        printf("a,b,c中全是小于等于10的值");
        }
        else
        {
        pintf("a,b,c中有2个小于等于10的值");
        }
    }
    else
    {
    printf("a,b,c中有1个上小于等于十的值");
    }
}
else
{
    printf("a,b,c中一个以上大于等于10的值");
}
}

五.switch语句

switch语句也是一种分支语句,常常用于多分支情况:

比如

输入1,输出星期一

输入2,输出星期二

输入3,输出星期三

输入4,输出星期四

输入5,输出星期五

输入6,输出星期六

输入7,输出星期七

switch语句一般是从匹配case的地方开始执行

break;是用来跳出语句的如果没有break;则会以只从开始执行的语句执行下去知道遇到break;或者执行完

cpp 复制代码
#include<stdio.h>
int main()
{
    int day=0;
    scanf("%d",&day);
    switch(day)
    {
        case 1:
            printf("星期一\n");
            break;
       case 2:
            printf("星期二\n");
            break;
       case 3:
            printf("星期三\n");
            break;
       case 4:
            printf("星期四\n");
            break;
       case 5:
            printf("星期五\n");
            break;
       case 6:
            printf("星期六\n");
            break;
       case 7:
            printf("星期七\n");
            break;
    }
}

如果表达式的值与所有的case标签的值都不匹配也就是所有的语句都被条过而已,但是如果你并不想忽略不匹配所有标签的表达式的值可以再语句列表中增加一条defaul语句当switch表达式不匹配所有的case标签的值是这个default就会执行所以每个switch语句中只能出现一条default但是他可以出现在switch里的列表的任何位置,switch允许嵌套

cpp 复制代码
#include<stdio.h>
int main()
{
    int n=1;
    int m=2;
    switch(n)
    {
    case 1:
        m++;
    case 2:
        n++;
    case 3:
        switch(n)
        {
        case 1:
            n++;
        case 2:
            m++;
            n++;
            break;
        }
    case 4:
        m++;
        break;
    default:
        break;
    }
    printf("m=%d,n=%d\n",m,n);
}

二.循环

一.while (do while)break :

如果要打印1-100的数字用可以用while来执行流程是这样的先判断成立进去执行里面的代码执行完之后就回到while这继续判断如果成立继续进去不成立跳过这端语句

cpp 复制代码
#include<stdio.h>
int main()
{
    int i=1;
    while(i<=100)
    {
    printf("%d ",i);
    i=i+1;
    }
}

在while语句中的break的使用:下面的带码只会打印1,2,3,4因为到5时就会到if里的break那退出了后面的内容不会执行

cpp 复制代码
#include<stdio.h>
int main()
{
    int i=1;
    while(i<=10)
    {
    if(i==5)
    {
      break;
    }
    printf("%d ",i);
    i=i+1;
    }
}

continue的介绍:执行到continue里就会直接结束本次循环回到while里重新判断后面的代码依然不会执行,这个成是进入之后i的值先加1后判断i==5,直到i等于5进入执行continue后会不执行后面的代码直接回到循环判断那所只打印2,3,4,6,7,8,9,10

cpp 复制代码
#include<stdio.h>
int main()
{
    int i=1;
    while(i<=10)
    {
        i=i+1;
        if(i==5)
        {
            continue;
        }
        printf("%d ",i);
    }
}

do while是先进入执行执行完了再判断如果成立就继续执行否则直接退出循环,执行流程是这样的:

cpp 复制代码
#include<stdio.h>
int main()
{
    int i=1;
    do
    {
        printf("%d ",i);
        i++;
    }while(i<=10);
}

break和continue在do while的应用:这里是打印了1,2,3,4,6,7,8,9因为print在break前面所已有9

cpp 复制代码
#include<stdio.h>
int main()
{
    int i=1;
    do
    {
    if(i==5)
        continue;
    printf("%d",i);
    if(i==9)
        break;
    }while(i<=10);
}

二.for函数:

for(表达式1;表达式2;表达式3),表达式1为初始化部分用于初始化循环变量的,表达式2是判断条件部分用于判断循环时候终止,表达式3为调整部分,用于循环条件的调整,使用for在屏幕上打印1-10的数字是这样写的,执行流程是这样的。

cpp 复制代码
#include<stdio.h>
int main()
{
    int i=0;
    for(i=1;i<=10;i++)
    {
    printf("%d ",i);
    }
}

对比for循环和while循环:可以发现while循环中依然存在循环的三个必须条件,但是由于风格问题使得三个部分可能很偏离较远查找修改就不够集中和方便所以,for循环的风格更胜一筹;for使用的频率也最高

cpp 复制代码
#include<stdio.h>
int main()
{
    int i=0;
    i=1;//功能相同
    while(i<=10)//判断部分
    {
        printf("hehe\n");
        i=i+1;//调整部分
    }
    //使用for实现了相同的功能
    for(i=1;i<=10;i++)
    {
    printf("hehe\n");
    }
}

break和continue在for循环中的使用:他们的意义和在while循环中是一样的,但是因为for的写法不同所以使用中和while中使用还是有区别的,break是打印到5就结束了,continue是不打印5其他的都打印

cpp 复制代码
#include<stdio.h>
int main()
{
    int i=0;
    for(i=1;i<=10;i++)
    {
        if(i==5)
            break;
        printf("%d ",i);
    }
}
cpp 复制代码
#include<stdio.h>
int main()
{
    int i=0;
    for(i=1;i<=10;i++)
    {
    if(i==5)
       continue;
    printf("%d ",i);
    }
}

for循环的初始化部分,判断,调整部分是可以省略的但是不建议初学时省略,容易导致问题

三.goto语句:

C语言提供了可以随意滥用的goto语句和标记跳转标号,goto语句最常用在嵌套结构过深的程序中,如依次跳出多层循环,跳出多层循环使用break是达不到目的,他只能从最内层循环退到上一层的循环,下面使用goto语句的一个例子,一个关机程序

cpp 复制代码
#include<stdio.h>
#include<stdlib.h>
int main()
{
    char input[10]={0};
    system("shutdown -s -t 60");
again:
    printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
    scanf("%s",input);
    if(0==strcmp(input,"我是猪"))
   {
    system("shutdown -a");
    }
    else
    {
    goto again;
    }
}

四.猜数字:

是用do while来反复游玩 switchcase选择是玩还是不玩 if来判断输入 rand和srand随机生成数后余100就得出了100以内的随机数

cpp 复制代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
    int input = 0,random_num = rand() % 100 + 1;
    srand((unsigned)time(NULL));
    do
    {
        printf("**********************\n");
        printf("******  1.play   *****\n");
        printf("******  0.exit   *****\n");
        printf("**********************\n");
        printf("请选择>:");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            input = 0;
            while (1)
            {
                printf("请输入猜的数字>:");
                scanf("%d", &input);
                if (input > random_num)
                {
                    printf("猜大了\n");
                }
                else if (input < random_num)
                {
                    printf("猜小了\n");
                }
                else
                {
                    printf("恭喜你,猜对了\n");
                    break;
                }
            }
        case 0:
            break;
        default:
            printf("选择错误,请重新输入!\n");
            break;
           
        }
    } while (input);
}
相关推荐
AI人H哥会Java2 分钟前
【Spring】基于XML的Spring容器配置——<bean>标签与属性解析
java·开发语言·spring boot·后端·架构
开心工作室_kaic12 分钟前
springboot493基于java的美食信息推荐系统的设计与实现(论文+源码)_kaic
java·开发语言·美食
析木不会编程18 分钟前
【C语言】动态内存管理:详解malloc和free函数
c语言·开发语言
达帮主20 分钟前
7.C语言 宏(Macro) 宏定义,宏函数
linux·c语言·算法
神仙别闹24 分钟前
基于Java2D和Java3D实现的(GUI)图形编辑系统
java·开发语言·3d
雪球不会消失了32 分钟前
SpringMVC中的拦截器
java·开发语言·前端
钝挫力PROGRAMER33 分钟前
#!/bin/bash^M 坏的解释器:没有哪个文件或者目录
开发语言·bash
茶猫_41 分钟前
力扣面试题 39 - 三步问题 C语言解法
c语言·数据结构·算法·leetcode·职场和发展
初学者丶一起加油43 分钟前
C语言基础:指针(数组指针与指针数组)
linux·c语言·开发语言·数据结构·c++·算法·visual studio
程序员大阳1 小时前
闲谭Scala(1)--简介
开发语言·后端·scala·特点·简介