【C语言航路】第二站:分支与循环(二)

简介: 【C语言航路】第二站:分支与循环(二)

三、循环

在c语言中,循环共有三种,while循环,for循环,do while循环。在之前我们粗略的了解了while循环,现在我们来详细了解这三种循环。

1.while循环

(1)基本原理与用法

我们在上一篇文章中已经了解了if语句的使用,我们这里复习一个简单的if语句。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
  int num = 0;
  if (num == 0)
    printf("hehe");
  return 0;
}

这段代码的意思很简单,只要if里面条件成立,则打印hehe。其实while循环和if语句是非常相似的。我们这里在上面的代码稍作修改,将if改为while会发生什么呢?

#include<stdio.h>
int main()
{
  int num = 0;
  while (num == 0)
    printf("hehe");
  return 0;
}

输出结果为一个无限打印hehe。对于while语句

一般是这样的形式

while(判断语句)

       循环体;

只有当判断语句为真的时候,可以执行下面的语句。执行完以后重新判断,如果仍为真,继续判断,直到为假才能跳出循环。当然上面这种情况下,循环体只能是一条语句,如果想要是多条语句则需要加上大括号

while(判断语句)

       {

               循环体;

       }

这样的话就是多条语句的循环,不难看出,和if语句是很相似的。

我们来实现一个简单的题目,打印出1---10的数字

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

(2)break在while循环中的作用

我们看这样一段代码

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

这段代码的运行结果是1 2 3 4

也就是说,我们可以调试一下分析该代码,我们会发现当i等于5时,满足if的条件,执行了break,然后下一步我们的代码就跳出了while循环。程序就结束了。

也就是说break的作用是打破循环

结论:break在while循环中的作用:

在while循环中遇到break,就会停止后期所有的循环,直接终止循环

所以,while中的break是用于永久终止循环的

(3)continue在while循环中的作用

我们先看一段代码,并思考一下运行结果是什么

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

运行结果为,1234然后死循环但是不打印任何东西。

我们在给出一段代码。看看这个运行结果是什么

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

运行结果为

现在已经不是死循环了,可以打印出来值,并且使得循环结束。

那么continue的作用到底是什么呢?我们给出结论

continue在while循环中的作用:

continue是用于终止本次循环的,也就是本次循环中continue后面的代码都不会被再次执行

而是直接跳转到while语句的判断部分,进行下一次的循环入口判断。

(4)一图总结while循环

2.for循环

(1)基本语法

#include<stdio.h>
int main()
{
  for (表达式1; 表达式2; 表达式3)
  {
    表达式4;
  }
  return 0;
}

如图所示,for循环先执行表达式1,然后表达式2为判断,如果成立,则执行表达式4,然后执行表达式3,在进行表达式2判断,如此循环下去。

其中

表达式1

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

表达式2

表达式2条件判断部分,用于判断循环时候终止。

表达式3

表达式3调整部分,用于循环条件的调整。

我们举一个简单的例子,打印1--10之间的数字

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

(2)break在for循环中的作用

我们来看这样一段代码

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

运行结果为1 2 3 4

可见,break在for循环中的作用与while循环一样

(3)continue在for循环的作用

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

运行结果为

我们发现于while循环中有一定差异,因为while循环中不执行调整语句,而for循环执行调整语句,可见存在稍微的差异,导致结果不同,但是其实仍然具有一定的统一性,因为都是只跳过了本次循环的大括号里面的语句,while循环中,调整语句就在大括号里面,所以跳过,而for循环调整语句不在大括号里面,所以不跳过调整语句。

(4)for循环几个建议

①不可在for循环体内修改循环变量,防止for循环失去控制。

②建议for语句的循环控制变量的取值采用“前闭后开区间”写法

(5)变种的for循环

①下面代码中,for循环可以省略初始化部分,判断部分,调整部分,如果省略了判断部分,则判断恒为真。为死循环。

#include <stdio.h>
int main()
{
  for (;;)
  {
    printf("hehe\n");
  }
  return 0;
}

②这条语句总共打印9个hehe,因为是两个for循环的嵌套使用

#include<stdio.h>
int main()
{
  int i = 0;
  int j = 0;
//这里打印多少个hehe?
  for (i = 0; i < 3; i++)
  {
    for (j = 0; j < 3; j++)
    {
      printf("hehe\n");
    }
  }
}

③这段代码省略了初始化部分,只打印3个hehe,因为j不会被再次初始化

#include<stdio.h>
int main()
{
  int i = 0;
  int j = 0;
  //如果省略掉初始化部分,这里打印多少个hehe?
  for (; i < 3; i++)
  {
    for (; j < 3; j++)
    {
      printf("hehe\n");
    }
  }
}

④使用了多余一个变量来控制循环,如下所示,结果为两个hehe

#include<stdio.h>
int main()
{
//使用多余一个变量控制循环
  int x, y;
  for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
  {
    printf("hehe\n");
  }
  return 0;
}

(6)一道经典的错误标准的零分

#include <stdio.h>
int main()
{
  int i = 0;
  int k = 0;
  for (i = 0, k = 0; k = 0; i++, k++)
    k++;
  return 0;
}

这段代码中,判断语句是赋值的,k赋值后是0,为假,因为只有0为假,非零都为真。所以,这道题什么都不打印。

3.do while循环

(1)do while语句的语法

#include<stdio.h>

int main()

{

   do

   {

       //代码块

   } while();

   return 0;

}

在do while语句中,无论条件是否成立,代码是先执行一次,然后在进行判断的,如果为真,则进入循环。值得注意的是,do while的判断语句后面有一个分号,这点于while和for循环不太一样。

我们仍然举一个简单的例子,打印1---10

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

(2)break在do while循环中的作用

我们看这样一段代码

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

输出结果为

可见,break的作用为打破循环。与在while和for循环中的作用一样

(3)continue在do while循环中的作用

我们看这样一段代码

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

输出结果为12345555555555555

可见continue的作用仍为,结束本轮循环,也就是跳过本次循环的大括号内剩余的内容。重新进入判断。

4.一些经典的题目

为了使文章条理更加清晰一些,我们将这一部分放在了另外一篇博客中,读者可以通过该链接进行跳转经典题目详解

5.猜数字游戏

为了使得文章条理清晰,我们将该部分放在了另外一篇博客中,这是链接 猜数字游戏

6.goto语句

C语言中提供了可以随意滥用的goto语句和标记跳转的标号。

从理论上goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。

但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。

例如:一次跳出两层或多层循环。

多层循环这种情况使用break是达不到目的。它只能从最内层循环退出到上一层的循环。

如下代码所示,是一个简单的goto使用

#include<stdio.h>
int main()
{
  flag:
    printf("haha");
    goto flag;
    return;
}

我们在举一个例子,是goto语句在关机程序中的使用

一个关机程序

程序执行起来就倒计时关机,60秒后关机

如果输入:我是猪,就取消关机

#include<stdio.h>
#include<windows.h>
int main()
{
  char input[20] = { 0 };
  system("shutdown -s -t 60");
again:
  printf("你的电脑将在60s后关机,如果输入我是猪,就取消关机");
  scanf("%s", input);
  if (0 == strcmp(input, "我是猪"))
  {
    system("shutdown -a");
  }
  else
  {
    goto again;
  }
}

这就是我们的代码,当我们输入我是猪时候,就会停止关机

其中有几个库函数和命令需要大家了解一下

showdown -s -t 60的意思是60秒后关机

showdown -a的意思是取消关机

当然还有很多命令我们这里附上一个链接,希望大家可以去这里面都自己学习一下这个命令。

showdown的命令拓展


总结

本节主要讲述了,三大循环,以及goto循环的一些应用。如果对你有帮助的话,不要忘记点赞加关注哦。

相关文章
|
21天前
|
C语言
【C语言】循环语句
C语言中循环语句的相关知识点
19 2
【C语言】循环语句
|
1月前
|
C语言
C语言循环与分支
C语言循环与分支
28 5
|
1月前
|
存储 算法 C语言
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
|
22天前
|
Linux C语言
【编程小实验】C语言实现:无限循环写入文本文件,支持Ctrl+C中断与数据追加(附完整源码)
在Linux中,文件I/O(输入/输出)是程序与文件进行交互的基本方式,包括读取文件内容和向文件写入数据。这通常通过标准的C库函数来实现,下面是一些基本的文件读写操作和代码示例。
|
29天前
|
Java 程序员 Linux
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
25 0
|
1月前
|
C语言
C语言---正方形图案--循环
C语言---正方形图案--循环
|
1月前
|
C语言
C语言----循环---n的k次方
C语言----循环---n的k次方
|
1月前
|
C语言
C语言---循环迭代的方式求第n个斐波那契数
C语言---循环迭代的方式求第n个斐波那契数
|
1月前
|
C语言
C语言---循环迭代---n的阶乘
C语言---循环迭代---n的阶乘
|
IDE 定位技术 开发工具
C语言 第四章 关系、逻辑运算与分支流程控制
一、关系运算 若干表达式用关系运算符连接而成,就构成关系表达式。 关系表达式中,表达式成立,其值为1(真);表达式不成立,其值为0(假)。其他表达式中,其结果如果是非0则为真,结果为0则为假。 关系运算符的优先级低于算术运算符,高于赋值运算符。
1024 0

热门文章

最新文章