循环语句这些知识点你真的会了吗?(1)

目录:

前言
1.while循环
1.1.while语句中的break
1.2.while语句中的continue
2.for循环
2.1.for语句中的break和continue
3.do...while()循环
3.1.do while循环中的break和continue
一些话

前言

控制语句有分支语句和循环语句,其中循环语句分为while循环语句,for循环语句和do while循环语句,其中for语句用到最多的循环语句。

1.while循环

语法结构:

while(表达式)
      循环语句;

例如:在屏幕上打印1-10的数字。

#include
int main()
{
    int i = 1;//初始化变量i
    while (i <= 10)//判断变量i是否小于等于10,如果小于等于10,则继续循环;否则结束循环
    {
        //循环体
        printf("%d ", i);//打印i的值
        i++;//即i = i + 1//使i由1增加到11
    }
    return 0;
}

那么大概了解了while语句的基本语法,那再了解一下:

1.1.while语句中的break

while语句中break是用于永久的终止循环。但是一次只能终止一个循环

#include 
int main()
{
    int i = 1;//初始化变量i
    while (i <= 10)//判断变量i的值
    {
        if (i == 5)//判断变量i的值是否等于5,如果不等于则if语句为假,不执行break,如果为真,则执行break
            break;
        printf("%d ", i);
        i = i + 1;
    }
    return 0;
}

由代码和结果可知,当变量i=5后,if语句为真,则执行break命令,此时结果就只为1 2 3 4,由此可见执行break语句后直接结束了循环。故break在while循环中的作用:

其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。
所以:while中的break是用于永久终止循环的。

如果把break换成continue会怎么样?

1.2.while语句中的continue

while语句中的continue作用:跳过本次的循环后面的代码,直接进行下一次循环的判断部分,进行下一次的判断。

#include 
int main()
{
    int i = 1;//初始化
    while (i <= 10)//判断
    {
        //循环体
        if (i == 5)
            continue;
        printf("%d ", i);
        i = i + 1;
    }
    return 0;
}

此时结果是1 2 3 4死循环,因为当i=5时候,if语句为真,执行continue命令,直接跳过本次循环,即跳过了打印i的值和i++,直接进行下一次循环,即i依然是5,故会继续死循环下去。
如果把i++放到if前面,结果会发生变化

#include
int main()
{
    int i = 1;
    while (i <= 10)
    {
        i++;
        if (i == 5)
            continue;
        printf("%d ", i);
    }
    return 0;
}

此时结果为2 3 4 6 7 8 9 10 11。直接跳过了5,因为当i=5时候,if语句为真,则执行continue命令,即跳过本次循环中continue后面的代码,直接进行下一次循环的判断。

#include
int main()
{
    int ch = 0;
     ch = getchar();//获取一个字符,并用该字符的ASCII码值放到ch中
    printf("%c\n", ch);
    putchar(ch);//打印字符
    return 0;
}
int getchar( void );//getchar()类型是int

读取错误或文件结束条件,getchar返回EOF

其中EOF是end of file

在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~127,不可能出现-1,因此可以用EOF作为文件结束标志。
getchar函数从标准输入里读取下一个字符,返回类型为int型,返回值为用户输入的ASCⅡ码,出错返回EOF。即EOF的值是-1
ch=getchar();等待从键盘上输入一个字符,
putchar(ch);输出此字符,

#include
int main()
{
    int ch = 0;
    while ((ch = getchar()) != EOF)//判断读到的字符是不是EOF,不是则循环,不是则结束循环
        putchar(ch);
    return 0;
}

按Crtl+z即可停止读取

  //举一个例子
    //假设密码是一个字符串
#include
int main()
{
    char password[20] = { 0 };
    printf("请输入密码:>");
    scanf("%s", password);//123456
    printf("请确认密码(Y/N):>");
    int ret = getchar();
    if ('Y' == ret)
    {
        printf("Yes\n");
    }
    else
    {
        printf("No\n");
    }
    return 0;
}

此时直接输入了NO,并没有经过我们的确认,这是因为scanf只读取密码abcd,还剩余一个'/n',那么getchar()不会等我们输入,直接读取‘/n’,/n不等于Y,导致直接打印NO。那么我们可以通过两种办法来改良。
方法一:

#include
int main()
{
    char password[20] = { 0 };
    printf("请输入密码:>");
    scanf("%s", password);//123456

    getchar();//读取了\n
    int ch = 0;

    printf("请确认密码(Y/N):>");
    int ret = getchar();
    if ('Y' == ret)
    {
        printf("Yes\n");
    }
    else
    {
        printf("No\n");
    }
    return 0;
}

由此可见,方法一在没有空格时候是可以运行的,但是有空格后一样直接输出NO,没有经过我们的确认,这是因为scanf在读取时候,遇到空格则会停止读取,而getchar一次只能读取一字符,即此时第一个getchar只读取一个空格,而第二个getchar读取了e,e不等于Y,则打印NO。
方法二:

#include
int main()
{
    char password[20] = { 0 };
    printf("请输入密码:>");
    scanf("%s", password);//123456
    int ch = 0;
    while ((ch = getchar()) != '\n')
    {
        ;
    }
    printf("请确认密码(Y/N):>");
    int ret = getchar();
    if ('Y' == ret)
    {
        printf("Yes\n");
    }
    else
    {
        printf("No\n");
    }
    return 0;
}

因为有了whlie循环,则getchar会一直读取直到读取到/n才停止读取,此时输入缓冲区没有可读取的字符,则第二个getchar会等待我们输入。

//代码2
#include 
int main()
{
char ch = '\0';
while ((ch = getchar()) != EOF)
{
if (ch  ‘9’)
continue;
putchar(ch);
}
return 0;
}
//这个代码的作用是:只打印数字字符,跳过其他字符的、

2.for循环

for(表达式1; 表达式2; 表达式3)
循环语句;
表达式1
表达式1为初始化部分,用于初始化循环变量的。
表达式2
表达式2为条件判断部分,用于判断循环时候终止。
表达式3
表达式3为调整部分,用于循环条件的调整。
//使用for循环 在屏幕上打印1-10的数字。
#include 
int main()
{
    int i = 0;
    //for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
    for (i = 1; i <= 10; i++)//
    {
        printf("%d ", i);
    }
    return 0;
}

for循环流程
即第一步先初始化变量,第二步判断变量是否符合循环条件,如果符合则执行循环语句,之后再执行循环调整部分,再开始下一次循环;如果不符合则结束循环。

//对比for语句和while语句
int i = 0;
//实现相同的功能,使用while
i=1;//初始化部分
while(i<=10)//判断部分
{
printf("hehe\n");
i = i+1;//调整部分
}
//实现相同的功能,使用while
for(i=1; i<=10; i++)
{
printf("hehe\n");
}

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

2.1.for语句中的break和continue

我们发现在for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。

//代码1
#include 
int main()
{
    int i = 0;
    for (i = 1; i <= 10; i++)
    {
        if (i == 5)
            break;
        printf("%d ", i);
    }
    return 0;
}

当i=5,直接结束循环。和while循环中break一样。

//代码2
#include 
int main()
{
    int i = 0;
    for (i = 1; i <= 10; i++)
    {
        if (i == 5)
            continue;
        printf("%d ", i);
    }
    return 0;
}

可见for语句中的continue和while循环语句中continue一样都是都是跳过本次循环continue后面的语句,进行下一次循环的判断。

1\. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
2\. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
//代码1
#include 
int main()
{
    int i = 0;
    for(i=1; i<=10; i++)
      {
          if(i == 5)
          break;
          printf("%d ",i);
      }
     return 0;
}
//代码2
#include 
int main()
{
     int i = 0;
     for(i=1; i<=10; i++)
      {
       if(i == 5)
          continue;
       printf("%d ",i);
      }
      return 0;
}

int i = 0;
//前闭后开的写法
for(i=0; i<10; i++)
{}
//两边都是闭区间
for(i=0; i<=9; i++)
{}

for循环中的一些变形

#include 
int main()
{
    //代码1
    for (;;)
    {
        printf("hehe\n");
    }
    //for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问
    题。
        //代码2
        int i = 0;
         int j = 0;
    //这里打印多少个hehe?
    for (i = 0; i < 10; i++)
    {
        for (j = 0; j < 10; j++)
        {
            printf("hehe\n");
        }
    }//答案是100个hehe
    //代码3
    int i = 0;
    int j = 0;
    //如果省略掉初始化部分,这里打印多少个hehe?
    for (; i < 10; i++)
    {
        for (; j < 10; j++)
        {
            printf("hehe\n");
        }
    }//答案是10个hehe
    //代码4-使用多余一个变量控制循环
    int x, y;
    for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
    {
        printf("hehe\n");
    }
    return 0;
}
#include
int main()
{
    int i = 0;
    int k = 0;
    for (i = 0, k = 0; k = 0; i++, k++)
        k++;
    return 0;
}

答案是零循环

这是因为在判断部分中的k=0是假,即不循环。

3.do...while()循环

//do...while()循环的语法结构
do
循环语句;
while(表达式);

因为do...while循环语句循环至少执行一次,使用的场景有限,所以不是经常使用。

#include 
int main()
{
    int i = 10;
    do
    {
        printf("%d\n", i);
    } while (i < 10);
    return 0;
}

3.1.do while循环中的break和continue

do...while循环语句中的break和continue和前面两个循环语句中的break和continue用法一样。即

#include 
int main()
{
    int i = 10;
    do
    {
        if (5 == i)
            break;
        printf("%d\n", i);
    } 
    while (i < 10);
    return 0;
}

友友们可以自己去尝试一下。

一些话

循环语句中break,continue用法都差不多,即break是永久结束循环,一次只能结束一个,continue结束当前循环,进行下一次循环的判断。while,for和do...while循环的结构等,都需要友友们去消化和掌握,记得要自己动手测试一下上面的代码,只有这样才能了解更加透彻。
不知不觉,又码完了一章,如果觉得对你有帮助的话,给个赞吧。感谢各位友友们的支持,我将会持续更新C语言,C++等语言的。感谢友友们的阅读,下一章见了。

#C是最好的语言##C/C++#
全部评论

相关推荐

头像 会员标识
昨天 17:08
已编辑
牛客_产品运营部_私域运营
腾讯 普通offer 24k~26k * 15,年包在36w~39w左右。
点赞 评论 收藏
分享
5 6 评论
分享
牛客网
牛客企业服务