循环语句(循环结构)——“C”

news2024/9/20 1:18:14

各位CSDN的uu们好呀,我又来啦,今天,小雅兰给大家介绍的是一个知识点,就是循环语句啦,包括while循环、do-while循环、for循环,话不多说,让我们一起进入循环结构的世界吧

首先,我们先来想一下,为什么需要循环控制?

   在日常生活中,或是在程序所处理的问题中,常常遇到需要重复处理的问题 

  •    要向计算机输入全班50个学生的成绩
  •    分别统计全班50个学生的平均成绩
  •    教师检查30个学生的成绩是否及格

例如:全班有50个学生,统计各学生三门课的平均成绩

 输入学生1的三门课成绩,并计算平均值后输出

scanf("%f %f %f",&s1,&s2,&s3);

aver=(s1+s2+s3)/3;

printf("avver=%7.2f",aver);

 输入学生2的三门课成绩,并计算平均值后输出

scanf("%f %f %f",&s1,&s2,&s3);

aver=(s1+s2+s3)/3;

printf("avver=%7.2f",aver);

要对50个学生进行相同的操作,就意味着上述三行代码需要执行50次,如果没有循环,那么上述三行代码就要重复50次,这样显得代码冗余

  •    大多数的应用程序都会包含循环结构
  •    循环结构、顺序结构和选择结构是结构化程序设计的三种基本结构,它们是各种复杂的基本结构单元

while语句的一般形式如下

   while(表达式)

      循环语句;

while循环的特点是:先判断条件表达式,后执行循环体语句

下面,我给大家举个例子,来让大家更好地理解while循环


  例1:求1+2+3+......+100

    解题思路:

  •         这是累加问题,需要先后将100个数相加
  •         要重复100次加法运算,可用循环实现
  •         后一个数是前一个数加1而得
  •         加完上一个数i后,使i加1可得到下一个数
#include<stdio.h>
int main()
{
   int i=1;
   int sum=0;
   while(i<=100)
   {
      sum=sum+i;
      i++;
   }
   printf("sum=%d\n",sum);
   return 0;
}

下面,我们再来看一个知识点,就是while语句中的break和continue

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

这里程序的输出结果为1 2 3 4

break在while循环中的作用:

其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。

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

所以,当i==5时,break终止本次循环,故而只打印了1 2 3 4

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

这里程序的输出结果为1 2 3 4 死循环

continue在while循环中的作用就是:

continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行, 而是直接跳转到while语句的判断部分

进行下一次循环的入口判断。

所以,当i==5时,continue直接跳过while循环后面的语句,跳转到循环的入口判断,从而导致死循环的结果。


然后,我们再来看一段和continue有关的代码

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

这段代码的输出结果为2 3 4 6 7 8 9 10 11

continue只会跳过本次循环后面的代码


用do-while语句实现循环

  do-while语句的特点:先无条件地执行循环体,然后判断循环条件是否成立

  do-while语句的一般形式为:

                  do

                        循环语句;

                  while(表达式);

例2:用do-while语句求:1+2+3+......+100

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

例3:输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数

#include<stdio.h>
int main()
{
   char ch=0;
   int letters=0;
   int space=0;
   int digit=0;
   int other=0;
   printf("请输入一行字符:\n");
   while((ch=getchar())!='\n')
   {
      if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
      {
          letters++;
      }
      else if(ch==' ')
      {
          space++;
      }
      else if(ch>='0'&&ch<='9')
      {
          digit++;
      }
      else 
          other++;
   }
   printf("字母数为:%d\n空格数为:%d\n",letters,space);
   printf("数字数为:%d\n其它字符数为:%d\n",digit,other);
   return 0;
}

for循环

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

          循环语句;

表达式1

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

表达式2

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

表达式3

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


break和continue在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

与之前介绍的while循环中的break一样,这里面的break也是跳出整个循环,所以5及5之后的数字都不会再打印

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

但是这里面的continue就与我们之前所说的不太一样了,这里面的continue跳过循环后面的语句,回到i++,进行循环条件的调整,直到不满足i<=10

所以,这段代码的输出结果为1 2 3 4 6 7 8 9 10


for语句的循环控制变量

建议:

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

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

      int i=0;

      //前闭后开的写法

      for(i=0;i<10;i++)

      {}

      //两边都是闭区间

      for(i=0;i<=9;i++)

      {}


                                                    死循环

永远不会退出的循环为死循环

for( ; ; )

{}


while(1)

{}


do

{

}while(1)


一般情况下,要极力避免死循环

  绝大多数程序不需要死循环。如果出现,往往都是bug

  时间过长的循环会造成”假死“效果,也要考虑解决


使用嵌套的循环体时,应注意以下问题:

  在嵌套的各层循环体中,使用复合语句(即用一对花括号将循环体语句括起来)保证逻辑上的正确性

  内层和外层循环控制变量不应同名,以免造成混乱

  嵌套的循环最好采用右缩进格式书写,以保证层次的清晰性

  循环嵌套不能交叉,即在一个循环体内必须完整的包含着另一个循环


下面给大家拓展一个小小的知识点

 exit()函数

作用是终止整个程序的执行,强制返回操作系统

调用该函数需要嵌入头文件<stdlib.h>

 


 最后,我们再来小小地看一段代码

#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为假,所以一次循环都不会进入

在C语言中,0表示假,非0表示真


好啦,循环语句的部分就到这里啦,今天小雅兰学到了超多知识,掌握了分支语句和循环语句,分支语句包括if语句和switch语句,循环语句包括while语句、do-while语句和for语句

很高兴能与uu们一起学到更多知识,有不足的还请各位大佬多多指点!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用Python暴力破解邻居家WiFi密码

如觉得博主文章写的不错或对你有所帮助的话&#xff0c;还望大家多多支持呀&#xff01;关注、点赞、收藏、评论。 文章目录一、编写代码二、展示测试结果三、测试四、生成密码本&#xff08;建议自己找一个密码本&#xff09;一、编写代码 在桌面新建一个文件 如果你新建的文…

如何实现everything的http外网访问

Everything是voidtools开发的一款文件搜索工具&#xff0c;官网描述为“基于名称快速定位文件和文件夹。”可以实现快速文件索引、快速搜索、最小资源使用、便于文件分享等功能。 everything部署本地后&#xff0c;可以开启配置Http访问功能&#xff0c;这样在局域网内就可以直…

【自用】Git日常开发教程

因为经常容易忘记指令&#xff08;年纪大了&#xff09;&#xff0c;所以打算记录一下将一堆文件从vscode上传到GitHub仓库 目录软件下载初始化状态过程可能出现的错误其他操作参考资料软件下载 https://gitforwindows.org/ https://code.visualstudio.com/ 初始化状态 过程 …

上海亚商投顾:两市缩量微涨,数字经济概念全线走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。市场情绪三大指数今日缩量震荡&#xff0c;黄白二线有所分化&#xff0c;题材概念表现活跃。数字经济概念全线走强&#xff0…

8、MariaDB11数据库安装初始化密码

MariaDB11安装 安装前准备 下载安装包 点我去MariaDB官网下载安装包 查看相关文档 Mariadb Server官方文档 使用zip安装 解压缩zip 将下载到的zip解压缩到想安装的位置。 生成data目录 打开cmd并进入到刚才解压后的bin目录&#xff0c; 执行mysql_install_db.exe程序生…

Flowable进阶学习(二)流程部署的深入解析

文章目录一、流程部署涉及表及其结构1. 部署流程代码示例&#xff1a;2. 流程部署所涉及表&#xff1a;3. 流程部署涉及表的结构、字段解析二、流程部署中数据的存储的过程一、流程部署涉及表及其结构 1. 部署流程代码示例&#xff1a; 设计俩个流程&#xff0c;并压缩成zip包…

项目引入多类数据源依赖,MyBatisPlus 是如何确定使用哪种数据源的?

背景 壬寅年腊月廿八&#xff0c;坚守在工作岗位。看了一下项目的 pom.xml 依赖&#xff0c;发现了好几个数据库连接相关的包&#xff0c;有 commons-dbcp2、c3p0、hikaricp、druid-spring-boot-starter&#xff0c;这可是四种不同的数据库连接池呢&#xff0c;一个项目中引入…

Github访问办法

GitHub GitHub是为开发者提供Git仓库的托管服务。这是一个让开发者与朋友、同事、同学及陌生人共享代码的完美场所。 GitHub除提供Git仓库的托管服务外&#xff0c;还为开发者或团队提供了一系列功能&#xff0c;帮助其高效率、高品质地进行代码编写。 GitHub的创始人之一Chr…

使用GPIO模拟I2C的驱动程序分析

使用GPIO模拟I2C的驱动程序分析 文章目录使用GPIO模拟I2C的驱动程序分析参考资料&#xff1a;一、回顾I2C协议1.1 硬件连接1.3 协议细节二、 使用GPIO模拟I2C的要点三、 驱动程序分析3.1 平台总线设备驱动模型3.2 设备树3.3 驱动程序分析1. I2C-GPIO驱动层次2. 传输函数分析四、…

SQL注入简介与原理

数据来源 本文仅用于信息安全学习&#xff0c;请遵守相关法律法规&#xff0c;严禁用于非法途径。若观众因此作出任何危害网络安全的行为&#xff0c;后果自负&#xff0c;与本人无关。 SQL注入 首先从SQL注入存在的代码来看 假如这里的id没有过滤&#xff0c;我们就可以输入…

JDK7-hashmap源码

解决冲突的方法 提高效率 特殊情况扰动算法 当冲突大于一定量时需要扩容 在JDK1.7中&#xff0c;HashMap是由数组单向链表实现的&#xff0c;原理图如下&#xff1a; HashMap基本用法 public static void main(String[] args) {//key-value, 数组存储头指针的引用地址&#xf…

SpringCloud项目日志接入ELK实战

写作背景 前面我对SpringCloud Netflix相关的组件&#xff0c;Eureka、Ribbon、OpenFeign、Hystrix和Zuul都进行了复习&#xff0c;后面随着代码越写越多就想着&#xff0c;要不就慢慢完善这个项目代码&#xff0c;把工作里用到的东西慢慢在这个Demo级别的项目里用起来&#x…

idea高效实用优化技巧

文章目录IDEA介绍配置优化注释模板快捷键硬件升级IDEA介绍 IDEA&#xff0c;全称IntelliJ IDEA&#xff0c;是Java语言的集成开发环境&#xff0c;IntelliJ在业界被公认为最好的java开发工具之一&#xff0c;尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、C…

gdb使用简介

目录 编译时&#xff0c;加入-g选项 不加-g选项&#xff0c;将不能加断点 加入-g选项&#xff0c;才能加断点 run与start start run break continue 编译时&#xff0c;加入-g选项 不加-g选项&#xff0c;将不能加断点 加入-g选项&#xff0c;才能加断点 run与start …

经典的 海量数据面试题 —— 送你一套僻邪剑谱~

目录 前言 一、哈希切割 题目一 解法一&#xff1a;哈希切割 二、位图的应用 题目一&#xff1a; 解法一&#xff1a;哈希切割 解法二&#xff1a;双位图 解法三&#xff1a;单位图&#xff08;进阶版&#xff09; 题目二 解法一&#xff1a;哈希切割 解法二&#xff…

ChatGPT踩坑(too many signups from the same IP)

ChatGPT踩坑 首先是去OpenAI的官网注册&#xff0c;点击API 进去注册一个账号 然后就会发现注册不成功&#xff0c;继续尝试就会出现下面的情况 后来我发现比较靠谱的方法是&#xff0c;通过google账号注册&#xff08;或许微软账号也行&#xff09;&#xff0c;后面会有一步让…

python经典刷题-关于文件、日期的题

目录标题1&#xff0c;统计目录下所有文件大小-os的使用2&#xff0c;按文件后缀整理文件夹3&#xff0c;递归搜索目录找出最大文件4&#xff0c;计算不同课程的最高分最低分--分组处理5&#xff0c;实现不同文件的关联6&#xff0c;批量txt文件的合并7&#xff0c;统计每个兴趣…

植物神经紊乱在心脑血管方面可能出现哪些症状

大家好&#xff0c;当植物神经的失衡涉及心脑血管的时候&#xff0c;可能会出现哪些症状表现&#xff1f; 植物神经紊乱为什么会涉及心脑血管&#xff1f; 你们知道吗&#xff1f;植物神经紊乱的实质&#xff0c;是由于体内庞大的神经系统的失衡导致的。而植物神经&#xff0c;…

javaEE 初阶 — 网络通信基础

文章目录1. IP 地址2. 端口号3. 认识协议4. 协议分层4.1 分层的作用4.2 OSI七层模型4.3 TCP/IP五层&#xff08;或四层&#xff09;模型4.4 网络数据传输的基本流程4.4.1 发送方4.4.2 接收方1. IP 地址 IP地址主要用于标识网络主机、其他网络设备&#xff08;如路由器&#xff…

PowerSNMP for .NET 6.1.0.0 Crack

关于适用于 .NET 的 PowerSNMP 创建自定义 SNMP 管理器、陷阱和代理应用程序以监视和控制网络设备。 PowerSNMP for .NET 包括简单网络管理协议 (SNMP) 组件&#xff0c;可无缝集成线程通信、安全和编码/解码&#xff0c;因此您可以快速开发自定义 SNMP 应用程序。该开发工具需…