S2-分支语句和循环语句(2)上

简介: S2-分支语句和循环语句(2)

循环的使用:for>while>do......while(具体按实际情况来看)

引言:什么是循环呢?

循环:重复执行一组“相同”或“相似”操作的流程

如:我们每天都要吃饭、睡觉这就是一个循环。

3.1 while循环

在前面我们已经掌握了,if语句:

1. if(表达式)
2.     语句;

当表达式为真时,if语句后的语句才执行,否则不执行。

但是这个语句只会执行一次。

由于我们发现生活中很多的实际例子是:同一件事情我们需要重复完成很多次。

那我们怎么用程序表达呢?

C语言中给我们引入了:while语句,可以实现循环。

//while语法结构

while(表达式)

       循环语句;

while循环语句执行的流程:

如实现在屏幕上打印1-10

//在屏幕上打印1-10
#include<stdio.h>//预处理,头文件对printf函数的声明
int main()
{
  int i = 1;//循环的初始化
  while (i <= 10)//循环的判断
  {
    printf("%d ", i);
    i++;//循环的调整
  }
  return 0;
}

从上面这个实例中我们可以知道:

1、while语句和if语句相似:

(1)表达式为真,才执行后面的循环语句;

(2)while后面只能控制一条语句,循环体如果要包含一个以上的语句,必须使用代码块(复合语句)

2、但也有区别,一个循环有着三个重要组成:

(1)循环的初始化部分(用来初始化循环变量的)

(2)循环的条件判断部分(表达式,用来判断循环什么时候终止)

(3)循环的调整部分(用于循环条件的调整---使循环条件趋于假的语句,如果无此语句,则循环变量始终不改变,无限循环)

3.1.1 while语句中的break和continue

1、break的作用和应用

//break代码实例
#include<stdio.h>
int main()
{
  int i = 1;//循环的初始化
  while (i <= 10)//循环的条件判断
  {
    if (5 == i)//当比较一个变量和常量是否相等是,好的习惯是变量放在右边
    {
      break;//break-打破,终止-终止循环
    }
    printf("%d ", i);
    i++;//循环的调整
  }
  return 0;
}

输出是什么?

总结:


(1)break在循环中的作用:循环中break的作用是永远终止循环(在循环中只要遇到break,就停止后期的所有的循环,直接终止循环)


(2)应用:在某种情况(条件)满足时,想让循环提前终止。


(3)break只在switch和循环中应用(在switch中break的作用是实现分支)


2.continue的作用和应用


//continue代码实例
#include<stdio.h>
int main()
{
  int i = 1;
  while (i <= 10)
  {
    if (5 == i)
    {
      continue;//终止本次循环,进行下一次循环的入口判断
    }
    printf("%d ", i);
    i++;
  }
  return 0;
}

输出什么呢?

输出:1 2 3 4之后陷入死循环

//continue代码实例2
#include<stdio.h>
int main()
{
  int i = 0;
  while (i < 10)
  {
    i++;
    if (5 == i)
    {
      continue;//终止本次循环,进入下一次循环的入口判断
    }
    printf("%d ", i);
  }
  return 0;
}

输出什么呢?


输出:1 2 3 4 6 7 8 9 10


总结:


(1)continue在while的作用:终止本次循环,进入下一次循环的入口判断(也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分)


(2)应用:当某种情况(条件)满足是,这一次循环内部后面的代码我不想它执行了


(3)continue只在循环中应用


补充:我们还可从上面两个代码得出---在循环体中语句的先后位置必须符合逻辑,否则会影响运算结果。

再看几个代码

//代码什么意思
//代码1
#include<stdio.h>
int main()
{
  int ch = 0;//定义一个整形变量
  while ((ch = getchar()) != EOF)//getchar-输入一个字符,读取失败返回EOF(按ctrl+z)
  {
    putchar(ch);//putchar()-输出一个字符在屏幕上
  }
  return 0;
}


注意:getchar和putchar只针对字符

这里介绍大家一个网站:https://cplusplus,com ->进去后点【legacy version】老版本可以查找这些库函数的详细知识。


我们可以知道:

(1)getchar()是一个无参函数(参数:传递给函数的叫参数)

(2)返回值:读取成功,返回其ASCII值;读取失败,返回EOF

ch=getchar();具体是如何赋值的如下


注:getchar函数没有参数,所接受的字符可以赋给字符型或整型变量,也可以作为表达式的一部分。

//代码2
#include<stdio.h>
int main()
{
  int ch = 0;
  char password[20] = { 0 };
  printf("请输入密码:>\n");
  scanf("%s", password);//数组名本来就是地址
  printf("请确认密码(Y/N):>\n");
  ch = getchar();
  if ('Y' == ch)
    printf("确认正确\n");
  else
    printf("确认失败\n");
  return 0;
}

我们发现还没有输入确认密码,就直接失败了,这是为什么呢?


scanf-按照指定的格式,输入数据

scanf默认回车和空格是输入不同组之间的间隔和结束标志。也就是说他不会在读取空格和

‘\n’。


getchar-每调用一次读取一个字符(包括空格符、‘\n’)


getchar---可应用于清理缓存区

调用一次读一个字符---多个----循环(getchar!=‘\n’)


//代码3
#include<stdio.h>
int main()
{
  int ch = 0;
  char password[20] = { 0 };
  printf("请输入密码:>\n");
  scanf("%s", password);//数组名本来就是地址
  while (getchar() != '\n')//消除\n-清理缓存区
  {
    ;
  }
  printf("请确认密码(Y/N):>\n");
  ch = getchar();
  if ('Y' == ch)
    printf("确认正确\n");
  else
    printf("确认失败\n");
  return 0;
}


//只打印数字字符,跳过其他字符的

//只打印数字字符,跳过其他字符的
#include<stdio.h>
int main()
{
  int ch = 0;
  while ((ch = getchar()) != EOF)
  {
    if (ch >= '0' && ch <= '9')
    {
      putchar(ch);
    }
  }
  return 0;
}


3.2 for循环

我们已经知道了while循环,为什么还要一个for循环呢?

我们先来看看for的语法结构吧

3.2.1 语法

for(表达式1; 表达式2; 表达式3)

       循环语句;

表达式1

表达式1为初始化部分,用来初始化循环变量的

表达式2

表达式2为条件判断部分,用来判断循环什么时候终止的

表达式3

表达式3为调整部分,用于循环条件的调整(循环中,必须有使循环条件趋于假的语句)

for循环的流程执行图:


我们对for与while进行对比:

打印1-10

#include<stdio.h>
int main()
{
  int i = 0;//初始化
  while (i < 10)//条件判断
  {
    i++;//调整
    printf("%d ", i);
  }
  return 0;
}
#include<stdio.h>
int main()
{
  int i = 0;
  for (i = 1; i <= 10; i++)
  {
    printf("%d ", i);
  }
  return 0;
}

由于风格的问题while形式比较分散,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹;for循环使用的频率也最高。

3.2.2 break和continue在for循环中

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

输出:1 2 3 4

break在for与while中是一样的作用:终止循环(注:在多层循环中,一个break语句只向外跳一层)

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

输出:1 2 3 4 6 7 8 9 10


continue在for与while中作用是一样的:终止本次循环(不执行continue后面的语句)进入下一次循环,但还是有一点区别,for回去是先进入调整部分,再进入条件判断部分,而while可能跳过调整部分


从这我们又看出for比while更优


相关文章
|
6月前
|
Go C语言
分支语句与循环语句,详细讲解
分支语句与循环语句,详细讲解
|
7月前
|
算法 Unix 数据安全/隐私保护
分支和循环语句2
分支和循环语句2
65 0
|
6月前
|
数据安全/隐私保护
分支和循环语句(2)
分支和循环语句(2)
39 1
|
6月前
|
C语言
分支和循环语句(3)
分支和循环语句(3)
40 0
分支和循环语句(3)
|
7月前
|
缓存 编译器 Go
分支语句和循环语句
分支语句和循环语句
74 0
|
编译器 C语言 C++
分支语句和循环语句上
分支语句和循环语句
63 0
分支语句和循环语句上
|
C语言
分支语句和循环语句(1)
分支语句和循环语句(1)
55 0
|
数据安全/隐私保护 C语言
分支语句与循环语句(2)
分支语句与循环语句(2)
62 0
|
编译器
分支语句与循环语句题
分支语句与循环语句题
75 0
|
缓存 Go 数据安全/隐私保护
分支语句和循环语句下
分支语句和循环语句
77 0