#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 什么是循环结构呢
要多次执行程序,我们就需要用到循环。那么,什么是循环呢?想必大家都玩过scratch吧?
上图展示了scratch中的三种循环 ,第一种是永远循环,也就是死循环。第二种是次数循环,对应我们的for循环。(这种循环其实也可以用递归函数来做到,只是会让程序变得很繁琐)第三种则是条件循环,通常对应while循环。
循环结构,是指程序重复多次完成某一特定语句(或语句块)的结构,通常需要一个条件表达式来指定是否继续循环。我们可以用一个流程图来表示循环结构。如下:
1)程序开始
2)判断条件是否成立,成立则进入循环执行步骤3),否则跳出循环执行步骤4)
3)在循环内,执行完循环内语句后回到步骤2)
4)结束
在流程图中我们可以看到,执行的语句需要改变条件(就是改变参与条件判断的变量值),比如:假设条件表达式是(b > 10),则改变b的值。这样做的目的是为了结束循环。有一种循环结构则不需要跳出循环,即死循环。因此,死循环中条件表达式的值恒为1。
注意:死循环对程序通常是致命的!因此在编写程序时要注意尽量避开死循环!这很有用!
好了,关于循环结构我们先介绍到这里。接下来,我们来详细地了解一种循环语句。
1.2 for循环
for循环是一种循环语句,常被用于次数循环。
我们先来看一看for循环的基本结构吧:
for循环有一组括号,括号内部有一个负责循环的变量声明语句用于控制循环;有一个跳出循环的条件表达式,当这个表达式为真,for就会一直循环下去 ;还有一个改变这个控制循环的变量的值的语句。以上图为例,它的基本工作流程是:
- 声明变量i;
- 判断i是否小于10,否就跳出循环;
- 执行循环内语句;
- 将i的值加上1;
- 回到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之前,我们需要考虑:
- for循环使用的变量是否已被声明
- for循环需要循环几次
- 每一次循环如何改变变量的值
在给出的程序中,我们并未声明任意变量。因此我们可以在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版,反正敬请期待
淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼淼