C语言之for while语句详解

C语言之for while语句详解

文章目录

  • C语言之for while语句详解
    • 简介
    • 1 while语句
      • 1.1while语句的格式
      • 1.2 while语句的实践
    • 2 for
      • 2.1 for语句格式
      • 2.2 for循环的实践
    • 3 do while
      • 3.1 do while语句格式
      • 3.2 do while循环的实践
    • 3 循环中break和continue
      • 3.1 while语句中的break和continue
      • 3.1.1break和continue举例
      • 3.2 for语句中的break和continue
      • 3.2.1break和continue举例
    • 4 循环的嵌套
    • 5 go to语句

简介

在上一篇博客中,我们了解了基本的两种分支结构,在这篇博客中我将介绍一下循环结构,包括whilefordo while

1 while语句

1.1while语句的格式

while语句的格式如下:

1 while(表达式)
2      语句;

while语句流程图如下:
在这里插入图片描述
  ⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。

1.2 while语句的实践

练习1:在屏幕上打印1~100的数字

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

练习2:输入一个正整数,逆序打印这个数
例如:输入 3541 输出 1453
思路:

  1. 一个数%上10,即可得到这个数的最后一个位数。如1234%10=4。
  2. 一个数/上10,即可将这个数的最后一位去掉。
    即可打印一下最低位然后删除最低位 重复1 2步直到这个数为0即可实现逆序打印

代码实现如下:

#include <stdio.h>
int main()
{int num = 0;scanf("%d", &num);while (num){printf("%d ", num % 10);//打印最低位的数num /= 10;//删除最低位是数}return 0;
}

2 for

2.1 for语句格式

1 for(表达式1;表达式2;表达式3)
2       语句;
//表达式1为循环的初始化
//表达式2为循环的判断
//表达式3为循环的调整

for语句流程图如下:
在这里插入图片描述
  ⾸先执⾏ 表达式1 初始化循环变量,接下来就是执⾏ 表达式2 的判断部分, 表达式2 的结果如果==0,则循环结束; 表达式2 的结果如果!=0则执⾏循环语句,循环语句执⾏完后,再去执⾏表 达式3 ,调整循环变量,然后再去 表达式2 的地⽅执⾏判断, 表达式2 的结果是否为0,决定循环是否继续。整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循环。

2.2 for循环的实践

练习1:在屏幕上打印1~100的数字

代码如下:

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

for和while之间的异同点
  for和while语句都有初始化,判断和循环这三个部分,但for语句的三个部分更为紧凑,便于后期的代码维护,若while语句中的代码量较大的时候,这三个部分会显得十分分散,不利于代码的可读。

3 do while

3.1 do while语句格式

1 do
2     语句;
3 while(表达式);

  forwhile语句都是先判断表达式,若表达式不为真,则不继续执行。而do while语句,无论表达式为真假都会执行一次,执行完一次后再判断表达式真假,是否重复执行。
do while流程图如下:
在这里插入图片描述
  在 do while 循环中先执⾏图上的“语句”,执⾏完语句,在去执⾏“判断表达式”,判断表达式的
结果是!=0,则继续循环,执⾏循环语句;判断表达式的结果==0,则循环结束。
所以在 do while 语句中循环体是⾄少执⾏⼀次的,这是 do while 循环⽐较特殊的地⽅。

3.2 do while循环的实践

练习1:在屏幕上打印1~100的数字

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

练习2:输入一个数,判断这是个几位数
例如:输入 5672 输出 4
思路:
上面提到一个数/10可以删除最低位,那么在删除的同时用个标志记录下,删除一次,标志加一

代码实现如下:

#include <stdio.h>
int main()
{int flag = 0;int num = 0;scanf("%d", &num);do{flag++;num /= 10;} while (num);printf("%d\n", flag);return 0;
}

3 循环中break和continue

在循环语句中,如果我达到了某种目标,我想让代码停下来就可以使用breakwhile
break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执
⾏。
continue 的作⽤是跳过本次循环 continue 后边的代码,在 for 循环和 while 循环中有所
差异的。

3.1 while语句中的break和continue

3.1.1break和continue举例

在这里插入图片描述
  在上述代码中,打印1~10的代码中,我想让他打印到4就停止,我就可以在循环中加入一个判断,当num ==5的时候,代码就停止,利用break永久的终止循环。

在这里插入图片描述
  在上述代码中出现了死循环,这是因为当num == 5时,continue终止了本次循环,同时跳过了num++代码的调整部分,使得每次num回到判断部分num始终小于10,再次下去又continue跳过了调整部分,使得代码出现死循环。因此我们应该合理的使用continue。

do while语句中的break和continueh使用方法一样,故不作介绍

3.2 for语句中的break和continue

3.2.1break和continue举例

在这里插入图片描述
在for语句中,break用法与while语句一样,当num == 5时,永久终止本次循环,所以不会打印4之后的值。

在这里插入图片描述

在本次代码中,与while语句不同的是,continue只是跳过了num == 5时,continue后边的代码,故不会打印5,for语句的调整部分在上边,所以调整部分不会被跳过,故代码可以继续执行,不会进入死循环。

4 循环的嵌套

练习:打印100~200之间的素数
思路:

  1. 素数又叫质数(prime number),有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
  2. 先产生100~200之间的素
  3. 要想知道n的素数,要用2~n-1的数试除n,也就需要生成
  4. 如果2~n-1之间有数字能整除n,则n不是素数,如果都不能整除,则n是素数
    代码实现:
#include <stdio.h>
int main()
{int i = 0;int count = 0;for (i = 100; i <= 200; i++) //生成100~200的数{int j = 0;int flag = 1; //设置一个标志 1代表素数,0代表非素数for (j = 2; j < i; j++) //生成2~i-1的数{if (i % j == 0) //判断是否为素数{flag = 0;break;}}if (flag == 1){printf("%d ", i);//打印素数count++; //打印一次+1}}printf("\n%d", count); //100~200之间的素数return 0;
}

上面介绍了一种打印素数的方法,感兴趣的可以去打印素数的三种方法看看其他写法

5 go to语句

 C 语言中的 goto 语句允许把控制无条件转移到同一函数内的被标记的语句。

应用:

#include <stdio.h>
int main()
{printf("hehe\n");goto next:printf("haha\n");next:printf("跳过了haha的打印\n"); return 0;
}

  注意:在任何编程语言中,都不建议使用 goto 语句。因为它使得程序的控制流难以跟踪,使程序难以理解和难以修改。任何使用 goto 语句的程序可以改写成不需要使用 goto 语句的写法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/192409.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DGL如何表征一张图

有关于DGL中图的构建 DGL 将有向图表示为一个 DGL 图对象。图中的节点编号连续&#xff0c;从0开始。我们一般通过指定图中的节点数&#xff0c;以及源节点和目标节点的列表&#xff0c;来构建这么一个图。 下面的代码构造了一个图&#xff0c;这个图有五个叶子节点。中心节点…

java并发编程JUC:一、专栏配置+进程与线程+并行和并发+同步和异步+线程的创建、调用、查看、运行原理和相关API

专栏配置 pom.xml <properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies><dependency><groupId>org.projectlombok<…

Python与ArcGIS系列(九)自定义python地理处理工具

目录 0 简述1 创建自定义地理处理工具2 创建python工具箱0 简述 在arcgis中可以进行自定义工具箱,将脚本嵌入到自定义的可交互窗口工具中。本篇将介绍如何利用arcpy实现创建自定义地理处理工具以及创建python工具箱。 1 创建自定义地理处理工具 在arctoolbox中的自定义工具箱…

Java的IO流-缓冲流

字节缓冲流 package com.itheima.d2;import java.io.*;public class Test1 {public static void main(String[] args) {try (InputStream is new FileInputStream("IO/src/itheima01.txt");//1、定义一个字节缓冲输入流包装原始的字节输入流InputStream bis new Bu…

Flutter 3.16 中带来的更新

Flutter 3.16 中带来的更新 目 录 1. 概述2. 框架更新2.1 Material 3 成为新默认2.2 支持 Material 3 动画2.3 TextScaler2.4 SelectionArea 更新2.5 MatrixTransition 动画2.6 滚动更新2.7 在编辑菜单中添加附加选项2.8 PaintPattern 添加到 flutter_test 3. 引擎更新&#xf…

97.qt qml-自定义Table之实现ctrl与shift多选

我们之前实现了:93.qt qml-自定义Table优化(新增:水平拖拽/缩放自适应/选择使能/自定义委托)-CSDN博客 实现选择使能的时候,我们只能一行行去点击选中,非常麻烦,所以本章我们实现ctrl多选与shift多选、 所以在Table控件新增两个属性: 1.实现介绍 ctrl多选实现原理:当我…

基于乌燕鸥算法优化概率神经网络PNN的分类预测 - 附代码

基于乌燕鸥算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于乌燕鸥算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于乌燕鸥优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络…

实用篇-ES-DSL查询文档

数据的存储不是目的&#xff0c;我们希望从海量的酒店数据中检索出需要的信息&#xff0c;这就是ES的搜索功能 官方文档: https://elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html#query-dsl。DSL是用来查询文档的 Elasticsearch提供了基于JSON的DSL来定…

大师学SwiftUI第18章Part1 - 图片选择器和相机

如今&#xff0c;个人设备主要用于处理图片、视频和声音&#xff0c;苹果的设备也不例外。SwiftUI可以通过​​Image​​视图显示图片&#xff0c;但需要其它框架的支持来处理图片、在屏幕上展示视频或是播放声音。本章中我们将展示Apple所提供的这类工具。 图片选择器 Swift…

基于libcurl+libopenssl开源库编译出curl下载工具及代码集成curl功能

准备素材&#xff1a; 1. openssl的版本&#xff1a; openssl-1.1.1w.tar.gz 2.curl的版本&#xff1a;curl-8.4.0.tar.gz 目标&#xff1a; 1.编译出openssl库&#xff1b; 2.编译出curl可执行文件及库&#xff1b; 步骤一&#xff1a;先解压压缩包 tar -zxvf openssl-1…

魔术《4 Kings 折纸》的三重境界(四)——魔术效果的突破

‍ ‍早点关注我&#xff0c;精彩不错过&#xff01; 在前三篇文章里&#xff0c;我们解释清楚了分别基于奇偶性&#xff0c;集合和群论来解释《4 Kings 折纸》这个魔术的过程&#xff0c;详情请戳&#xff1a; 魔术《4 Kings 折纸》的三重境界&#xff08;三&#xff09;——群…

量化交易:传统小市值策略 VS AI市值策略

在BigQuant平台上可以快速开发股票传统策略和股票AI策略&#xff0c;今天拿市值因子来练手&#xff0c;看看两个策略在2015-01-01到2016-12-31这两年时间各自的收益风险情形。 市值因子是国内股票市场能够带来超额收益的alpha因子&#xff0c;已经被验证为长期有效的因子&…