今天来学习循环结构程序设计,内容如下
1,为什么学循环?
2,三种循环结构
3,循环相关的知识
为什么学循环?
如果我们想要输入一个数并且输出这个数的话,我们只需要写如下代码
#include <stdio.h>
int main()
{
int a;
scanf("%d", &a);
printf("%d\n", a);
return 0;
}
输入两个数的时候,我们可以这么写
#include <stdio.h>
int main()
{
int a;
scanf("%d", &a);
printf("%d\n", a);
scanf("%d", &a);
printf("%d\n", a);
return 0;
}
可是如果有一百个数要输入输出的话,我们要怎么做?
重复一百遍可能不够多,但如果更多呢?有多少次我就要写多少行代码吗?
如果有一个东西能让我重复一个固定的操作确定的次数,那么不说一百次,一万次,十万次,我也可以做到,而我只需要改变重复次数就可以了,而这种结构就是循环结构
三种循环
C语言里,我们可以用for, while, do while三种方式来实现循环,下面我来分别介绍
(1) for循环
下面是一个伪代码,用来解释代码的结构
for(在循环开始的时候会执行的语句; 判断循环执行的条件,如果满足,会不断进入循环; 内容结束后执行的语句,在左边的判断之前执行)
{
内容,每一次循环都会执行一遍
}
如果用for循环来进行一百次输入输出的话,我们可以这么做
#include <stdio.h>
int main()
{
int a, i, n = 100;
for(i = 0; i < n; i ++ )
{
scanf("%d", &a);
printf("%d", a);
}
return 0;
}
而我们也可以实现之前所说的想执行多少次就执行多少次
只需要在前面加入一个对执行次数n的读入就可以了
#include <stdio.h>
int main()
{
int a, i, n;
scanf("%d", &n);
for(i = 0; i < n; i ++ )
{
scanf("%d", &a);
printf("%d", a);
}
return 0;
}
(2) while循环
伪代码:
while(判断条件)
{
内容
}
用while实现100次输入输出
#include <stdio.h>
int main ()
{
int a, n = 100;
while (n -- )
{
scanf("%d", &a);
printf("%d", a);
}
return 0;
}
(3) dowhile循环
伪代码
do
{
内容
} while (判断条件)
#include <stdio.h>
int main ()
{
int a, n = 100;
do
{
scanf("%d", &a);
printf("%d", a);
} while (n -- )
return 0;
}
dowhile循环与前两者有一个明显不同
前两种循环都会先判断条件为真才会进入循环,而dowhile 会先进入循环,也就是do中的部分,然后判断条件是否为真
这意味着无论如何,dowhile写出的循环都会执行至少一次内容,这一点通常是不好用的,因此我们通常不会用dowhile
循环相关知识
(1)多组输入
在上面的样例中,我们知道要循环多少次,但如果我们不知道要循环多少次呢?
我们来做这样一道题:
偷懒的高叶同学1
琦煜老师在上课,高叶同学想偷个懒,但是琦煜老师有这样一种检查手段,他会给出t次数字n,高叶同学需要在一行内回复数字n作为听课的证明
注: t 的数量未知
输入示例:
1
2
3
4
5
6
输出示例:
1
2
3
4
5
6
我们如何实现多组输入呢?
#include <stdio.h>
int main ()
{
int n;
while (scanf("%d", &n) != EOF)
{
printf("%d\n", n);
}
return 0;
}
(2)跳过本次循环和跳出循环
在C语言中,我们使用continue和break来实现对循环的跳过和跳出
continue
举例,如果我们要跳过循环,只需要在循环体里写一个continue就可以了,代码会执行到continue,然后结束本次循环
效果如下
while(true)
{
执行部分
continue;
不执行部分
}
让我们来想一下这能做什么,当我们在某种情况下不需要执行循环中的某一部分时,我们只需要continue就可以了
让我们来做一道题
偷懒的高叶同学2
琦煜老师在上课,高叶同学想偷个懒,但是琦煜老师有这样一种检查手段,他会给出t次数字n,高叶同学需要在一行内回复数字n作为听课的证明,但是琦煜老师不喜欢数字3,所以当输入为 3 时, 请不要答复
但是,当n为3时,不要回答!不要回答!不要回答!
注: t 的数量未知
输入示例:
1
2
3
4
5
6
输出示例:
1
2
4
5
6
#include <stdio.h>
int main ()
{
int n;
while (scanf("%d", &n) != EOF)
{
// 当 n 为 3 时,我们会结束这次循环, 不会输出 3
if (n == 3) continue;
printf("%d\n", n);
}
return 0;
}
break
break比continue更霸道,会直接跳出循环,这意味着不仅不会执行循环中位于break后的部分,还不会再判断是否执行循环,直接运行循环后的部分
while(1)
{
执行部分
break;
不执行部分
}
在break后,将跳至这一步而非判断是否循环
我们来想一下break有什么用
我们再来做一道题
偷懒的高叶同学2
琦煜老师在上课,高叶同学想偷个懒,但是琦煜老师有这样一种检查手段,他会给出t次数字n,高叶同学需要在一行内回复数字n作为听课的证明,输入为0的时候退出
注: t 的数量未知
输入示例:
1
2
3
4
5
6
0
输出示例:
1
2
3
4
5
6
0
#include <stdio.h>
int main ()
{
int n;
while (1)
{
scanf("%d", &n);
// if (!n)
if (n == 0)
{
break;
}
printf("%d\n", n);
}
return 0;
}