学生信息登录系统(下)——判断循环语句(五)(for循环篇)

news2025/1/16 6:51:32
#include <iostream>
using namespace std;
int main()
{
    bool student[46] = 0;    //student[0]空出不用
    int bianhao = 0;
    cin >> bianhao;
    student[bianhao] = 1;
    return 0;
}
/*
可是,这个程序只能执行一遍,一次只能录入一个学生,并且无法查询学生到校情况。该怎么办呢?

(未完待续。。。)
————————————————
版权声明:本文为CSDN博主「RedstoneCuberoot」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hongshideng/article/details/130453950
*/

(接上文:学生信息登录系统(上)——判断循环语句(四)(数组篇))


目录

目录

目录

1.是时候让循环结构来帮忙了

1.1 什么是循环结构呢

1.2 for循环

2.让for循环接手学生信息登录系统的工作

尾声


1.是时候让循环结构来帮忙了

1.1 什么是循环结构呢

要多次执行程序,我们就需要用到循环。那么,什么是循环呢?想必大家都玩过scratch吧?

scratch循环结构

上图展示了scratch中的三种循环 ,第一种是永远循环,也就是死循环。第二种是次数循环,对应我们的for循环。(这种循环其实也可以用递归函数来做到,只是会让程序变得很繁琐)第三种则是条件循环,通常对应while循环。

循环结构,是指程序重复多次完成某一特定语句(或语句块)的结构,通常需要一个条件表达式来指定是否继续循环。我们可以用一个流程图来表示循环结构。如下:

循环结构流程图

1)程序开始

2)判断条件是否成立,成立则进入循环执行步骤3),否则跳出循环执行步骤4)

3)在循环内,执行完循环内语句后回到步骤2)

4)结束

在流程图中我们可以看到,执行的语句需要改变条件(就是改变参与条件判断的变量值),比如:假设条件表达式是(b > 10),则改变b的值。这样做的目的是为了结束循环。有一种循环结构则不需要跳出循环,即死循环。因此,死循环中条件表达式的值恒为1。

注意:死循环对程序通常是致命的!因此在编写程序时要注意尽量避开死循环!这很有用!

好了,关于循环结构我们先介绍到这里。接下来,我们来详细地了解一种循环语句。

1.2 for循环

for循环是一种循环语句,常被用于次数循环。

我们先来看一看for循环的基本结构吧:

for循环有一组括号,括号内部有一个负责循环的变量声明语句用于控制循环;有一个跳出循环的条件表达式,当这个表达式为真,for就会一直循环下去 ;还有一个改变这个控制循环的变量的值的语句。以上图为例,它的基本工作流程是:

  1. 声明变量i;
  2. 判断i是否小于10,否就跳出循环;
  3. 执行循环内语句;
  4. 将i的值加上1;
  5. 回到2.

在语句for(int i = 0;i < 10;i ++)之后,如果只需要执行单条语句,在后面直接加上语句即可。如:

for (int i = 0;i < 10;i ++)//直接在这里写语句即可

如果要执行多条语句,则需在for后先加上花括号。如:

for (int i = 0;i < 10;i ++)
{                            
    //在这里编写程序
}//注意,这里有花括号

注:用花括号括起来的语句叫做复合语句。复合语句简单来说就是把多个语句看成一个语句。你可以在函数、循环、选择结构等里面发现它的身影。

在for循环中,“()”里的语句可以省略,但分号不可以,如:

for (;i < 10;i ++)

基于这个,for循环也可以用于死循环,如下:

for (;;)
{
    //语句
}

言简意赅的说,就是:木有变量!木有条件!木有更改!只要一直循环下去就可以了!

那么,关于for循环的基本理论知识就讲到这里先,(也许我们在后面会慢慢补充呢)接下来,让我们用几个小小的实例来体会一下for循环的工作。

实例1.2-1:老狼老狼几点了

有些同学看到这个实例可能会觉得很眼熟——我们在早期的java分支与循环结构里已经学过用java语言实现这个实例,(木有学习过java的同学不用担心看不懂,因为for循环语句的结构在c++和java里面都是一样的)让我们一起回顾一下:

两个小朋友在玩老狼老狼几点了的游戏,请试编一程序,输出这段话:

老狼老狼几点了?一点了

老狼老狼几点了?二点了

老狼老狼几点了?三点了

老狼老狼几点了?四点了

老狼老狼几点了?五点了

老狼老狼几点了?六点了

老狼老狼几点了?七点了

老狼老狼几点了?八点了

老狼老狼几点了?九点了

老狼老狼几点了?十点了

老狼老狼几点了?十一点了

老狼老狼几点了?十二点了

狼来啦,快跑!

public class Solution{

    public static void main(String[] args){

        System.out.println(“老狼老狼几点了?一点了\n老狼老狼几点了?二点了\n老狼老狼几点了?三点了\n老狼老狼几点了?四点了\n老狼老狼几点了?五点了\n老狼老狼几点了?六点了\n老狼老狼几点了?七点了\n老狼老狼几点了?八点了\n老狼老狼几点了?九点了\n老狼老狼几点了?十点了\n老狼老狼几点了?十一点了\n老狼老狼几点了?十二点了\n狼来啦,快跑!”);

    }

}

有人说,很简单,只要复制黏贴就可以简单解决,但是如果有几千句或几万句呢?这时就可以用循环结构来解决。

public class Solution{

    public static void main(String[] args){

        for(int i = 1;i <= 12;i ++){

            System.out.println(“老狼老狼几点了?” + i + “点了”);

        }

    }

}
————————————————
版权声明:本文为CSDN博主「RedstoneCuberoot」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hongshideng/article/details/123415550

(文中用红色加粗字体标出了for循环的作用域)

那么,参考这个程序,现在你是否有这个实例的c++版本的实现方法?相信是的,接下来让我们一起看看如何用c++实现这个实例。

首先,是万年不变的开头与结尾:

#include <iostream>
using namespace std;
int main()
{
    //在此处编程
    return 0;
}

接下来,使用for循环。注意,在使用for之前,我们需要考虑:

  1. for循环使用的变量是否已被声明
  2. for循环需要循环几次
  3. 每一次循环如何改变变量的值

在给出的程序中,我们并未声明任意变量。因此我们可以在for语句的“()”内声明一个变量用以控制循环。并且由题可知,我们需要循环输出12次。

#include <iostream>
using namespace std;
int main()
{
    for (int i = 1;i <= 12;i ++)
    {
        //在此处编程
    }
    return 0;
}

这里为了便于理解,我们赋给变量i初值1,在i <= 12的情况下循环,每次循环结束就将i的值 + 1,刚好循环12次。你也可以给变量i赋值0,让它在i < 12的情况下循环,结果相同。

接下来就简单了,在循环内部每次都输出“老狼老狼几点了? i 点了”即可(但如果你用的循环是上述第二种情况,即i初值为0,则要输出“老狼老狼几点了? i+1 点了”)

#include <iostream>
using namespace std;
int main()
{
    for (int i = 1;i <= 12;i ++)
    {
        cout << "老狼老狼几点了?" << i << "点了" << endl;
    }
    return 0;
}

2.让for循环接手学生信息登录系统的工作

这个章节和前面的章节编辑间隔了两个多月的时间,绝对不是因为作者懒得写!(啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊什么时候才能结束循环这一系列!!!!!!)

啊哈,让我们直接跳过@#$##@#$%#$#$%$%^&^%$%^&%$的一大堆步骤来到这一步:

#include <iostream>
using namespace std;
int main()
{
    bool student[46] = 0;    //student[0]空出不用
    int bianhao = 0;
    cin >> bianhao;
    student[bianhao] = 1;
    return 0;
}

在学生信息登录系统(上)——判断循环语句(四)(数组篇)我们讲过,这只能录入一个信息,但我们有45个学生,所以这明显是不可行的。但是,你总不可能把这一串代码复制粘贴44遍:

cin >> bianhao;
student[bianhao] = 1;

所以,我们要让循环来帮我们循环地进行录入,并且要判断是否存在重复录入(就是一个编号录入了两次)。

那么,相信聪明的你一定知道怎么做了,我就不用讲了8?

水水水水水水水水水水水水水水水水水水水水水水水水水水水水水水水水水水水水水水水水

开个玩笑,该讲还是得讲。首先我们加入for循环:
 

#include <iostream>
using namespace std;
int main()
{
    bool student[46] = 0;    //student[0]空出不用
    int bianhao = 0;
    for (int i = 1;i <= 45;i ++)
    {  //循环45次
        cin >> bianhao;
        student[bianhao] = 1;
    }
    return 0;
}

这样就可以循环录入45个数据。接下来,我们要加入判断的部分:万一有人记错了自己的学号,我们得提醒下他,谁让我们这么好心呢~

#include <iostream>
using namespace std;
int main()
{
    bool student[46] = 0;    //student[0]空出不用
    int bianhao = 0;
    for (int i = 1;i <= 45;i ++)
    {  //循环45次
        cin >> bianhao;
        if (student[bianhao] == 1)
        {
            cout << "学生已存在!请重新输入" << endl;
        }
        else
        {
            student[bianhao] = 1;
        }
    }
    return 0;
}

但是这样一来,循环的次数就减少了一次,也就意味着有一个学生无法登录!所以我们还需要将i减去一次以获得多的一次循环

#include <iostream>
using namespace std;
int main()
{
    bool student[46] = 0;    //student[0]空出不用
    int bianhao = 0;
    for (int i = 1;i <= 45;i ++)
    {  //循环45次
        cin >> bianhao;
        if (student[bianhao] == 1)
        {
            cout << "学生已存在!请重新输入" << endl;
            i --;
        }
        else
        {
            student[bianhao] = 1;
        }
    }
    return 0;
}

快去试试吧!


尾声

写这篇文章还真的花了太长时间真的不想写尾声了sdhdfghjuhuigdfsdhrfeqhoe3h8f1h398cfy

还是写几个字吧。。。(循环什么时候才能讲完都已经(5)了。。。)

关于我的世界红石教程,以后可能会详细的出一个专栏吧。。。不过是java版,反正敬请期待

淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼

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

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

相关文章

网络请求【小程序】

一、get 二、post 1.获取相应数据 Page({/*** 页面的初始数据*/data: { inptValue:, isArr:[]},/*** 生命周期函数--监听页面加载*/onLoad(options) {},onSubmit(){// console.log(this.data.inptValue)//2.后台请求数据wx.request({url: https://tea.qingnian8.com/demoArt/…

esxi网卡直通后虚拟机无网

出现选网卡的时候无法选中&#xff0c;这里应该是一个bug。 解决方法如下&#xff1a; 1.先随便选择一个网卡 2.勾先取消再重新勾选 3.保存退出&#xff0c;重启虚拟机即可

机器学习 day34(机器学习项目的完整周期、精确度和召回率、F1)

机器学习项目的完整周期 第一步&#xff0c;决定项目是什么。第二步&#xff0c;收集数据。第三步&#xff0c;训练模型&#xff0c;进行错误分析并改进模型&#xff0c;可能会回到第二步。第四步&#xff0c;当模型足够好后&#xff0c;部署在生产环境中&#xff0c;继续监控…

竞赛选题 基于深度学习的人脸专注度检测计算系统 - opencv python cnn

文章目录 1 前言2 相关技术2.1CNN简介2.2 人脸识别算法2.3专注检测原理2.4 OpenCV 3 功能介绍3.1人脸录入功能3.2 人脸识别3.3 人脸专注度检测3.4 识别记录 4 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的人脸专注度…

阿里云服务器上CentOS 7.6使用rpm包安装MySQL 8.0.31

我这里下载的是最新版本&#xff0c;需要到MySQL官网最新版本下载地址。 要是想要下载以前的版本需要到MySQL以前版本网址中。 1&#xff09;先使用wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.31-1.el7.x86_64.rpm-bundle.tar&#xff08;这个网址现在已经不…

【C语言】用冒泡排序实现my_qsort

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解如何用冒泡排序实现my_qsort&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 一. 前言二. 冒泡排序三. 4个参数3.1 第一个参数void* base3.2 第二个参数…

驱动开发,stm32mp157a开发板的led灯控制实验(再优化),使用ioctl函数,通过字符设备驱动分步注册方式编写LED驱动,完成设备文件和设备的绑定

1.实验目的 编写LED灯的驱动&#xff0c;在应用程序中编写控制LED灯亮灭的代码逻辑实现LED灯功能的控制&#xff1b; 2. LED灯相关寄存器分析 LED1->PE10 LED1亮灭&#xff1a; RCC寄存器[4]->1 0X50000A28 GPIOE_MODER[21:20]->01 (输出) 0X50006000 GPIOE_ODR[10]-&…

CTyunOS安装MySQL8.0

CTyunOS安装MySQL8.0 1.yum安装2. 启动配置3.注意事项 最近天翼云搞活动&#xff0c;购了一台4U8G的服务器&#xff0c;这里讲解一下如何安装Mysql吧。 1.yum安装 yum install -y mysql yum install -y mysql-common yum install -y mysql-errmsg yum install -y mysql-libs y…

Jenkins :添加node权限获取凭据、执行命令

拥有Jenkins agent权限的账号可以对node节点进行操作&#xff0c;通过添加不同的node可以让流水线项目在不同的节点上运行&#xff0c;安装Jenkins的主机默认作为master节点。 1.Jenkins 添加node获取明文凭据 通过添加node节点&#xff0c;本地监听ssh认证&#xff0c;选则凭…

Ansible 自动化运维工具部署主从数据库+读写分离

文章目录 Ansible 自动化运维工具部署主从数据库读写分离一、主从复制和读写分离介绍二、准备工作&#xff08;1&#xff09;节点规划&#xff08;2&#xff09;修改主机名&#xff08;3&#xff09;免密&#xff08;4&#xff09;配置IP映射&#xff08;5&#xff09;安装ansi…

电荷型 和 IEPE/ICP型振动传感器的比较

PE(压电式)和IEPE(集成电路压电式,PCB公司叫做ICP)传感器的对比说明,供各位参考。 1. PE/IEPE传感器的敏感元件均为压电晶体,通过压电效应感受被测物理量。 2.PE传感器:输出电荷量,也叫电荷传感器。不需要供电,两根信号线,可直接接入电荷放大器进行测量。 优点―――结…

Java————List

一 、顺序表和链表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c; 常见的线性表&#xff1a;顺序表、链表、栈、队列… 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直…

基础篇之SDK编译

文章目录 一、 Ubuntu系统固件下载1. 固件下载2 放入SDK根目录中 二、编译SDK三、说明 一、 Ubuntu系统固件下载 1. 固件下载 在资源下载页面下载Ubuntu Rootfs固件&#xff0c;文件夹有三个文件&#xff0c;其区别如下&#xff0c;根据情况进行选择下载 资源名称作用Ubuntu2…

【毕设选题】opencv 图像识别 指纹识别 - python

文章目录 0 前言1 课题背景2 效果展示3 具体实现3.1 图像对比过滤3.2 图像二值化3.3 图像侵蚀细化3.4 图像增强3.5 特征点检测 4 OpenCV5 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往…

网络安全深入学习第三课——热门框架漏洞(RCE—Struts2远程代码执行)

文章目录 一、Struts2框架介绍二、Struts2远程代码执行漏洞三、Struts2执行代码的原理四、Struts2框架特征五、漏洞手工POC六、漏洞工具复现 一、Struts2框架介绍 ------ Struts2是apache项目下的一个web 框架&#xff0c;普遍应用于阿里巴巴、京东等互联网、政府、企业门户网…

Linux——Shell脚本编程(2)

一、Shell变量 Linux Shell 中的变量分为&#xff0c;系统变量 和 用户自定义变量 (这个用的比较多)。 系统变量 : $HOME、$PWD、$SHELL、$USER 等等&#xff0c;比如 : echo $HOME 等等.. 显示当前shell中所有变量 : set 举例说明&#xff1a; 二、设置环境变量 记得在注释…

ReactNative 网络库

What JS判断网络状态不准确 react-native-netinfo在Android中的结构 type-CellularGeneration&#xff1a;G网模式枚举 type-ConnectionType&#xff1a;网络连接类型 AmazonFireDeviceConnectivityPoller&#xff1a;Amazon设备网络适配&#xff0c;可忽略 BroadcastRec…

DP专题1 斐波那契数列II

题目&#xff1a; 思路&#xff1a; 通过样例 3 &#xff0c;我们可以看出&#xff0c;将我们所对应的每个步骤进行拆分后&#xff0c;可以知道&#xff0c;每个步骤中都是调用了前面我们计算过的重复计算&#xff0c;所以这里的 dp[i] 中&#xff0c;i 表示 相应的Fbn(i) 的结…

数据结构入门-14-排序

一、归并排序MergeSort 更加复杂的递归算法 O(nlogn)的时间复杂度 1.1 归并思想 将一个数组一分为二 &#xff0c;分别排序&#xff0c;得到两个排序后的子数组 对两个子数组排序的方法还是继续划分 MergeSort(arr, l, r) 对 arr数组的 l 到 r 区间进行排序1.2 归并步骤 递…