上次,我们讲了for循环,今天我们讲循环变量。
废话不多说,直接进入正题。
for循环语句的循环变量不仅仅可以用来控制循环运行的次数,还可以参与各种运算。
举几个例子:
观察数列:2 4 6 8 10 ...,输出数列的前n项。
思路:
第1步:因为要输出前n项,所以考虑用for循环。
第2步:显然,循环应该执行n次,每次输出一个整数。
第3步:循环变量i和要输出的数的关系如下:
循环变量i取值
1
2
3
4
5
...
n
要输出的数
2
4
6
8
10
...
2×n
两者关系
2*1
2*2
2*3
2*4
2*5
...
2*n
容易发现要输出的数是循环变量i的2倍。
第4步:定义一个整数变量n。
第5步:读入变量n的值。
第6步:用for语句循环n次,每次输出一个相应的值:
for(int i=1; i<=n; i++) cout<<2*i<<" ";
参考代码
程序 |
#include <bits/stdc++.h> using namespace std; int main() { int n; //定义变量n cin>>n; //读入变量n的值 for(int i=1; i<=n; i++) //i从1开始,i<=n则继续循环,共循环n次 cout<<2*i<<" "; //每次输出第i项的数 return 0; } |
观察数列:10 13 16 19 22 25 28 ...,输出数列的前n项。
思路:
第1步:因为要输出前n项,所以考虑用for循环。
第2步:显然,循环应该执行n次,每次输出一个整数。
第3步:观察循环变量i的值与要输出的数的关系
循环变量i取值
0
1
2
3
...
n-1
要输出的数
10
13
16
19
...
10+(n-1)*3
两者关系
10+0*3
10+1*3
10+2*3
10+3*3
...
10+(n-1)*3
容易发现,要输出的数 = 10 + i * 3。
程序 |
#include <bits/stdc++.h> using namespace std; int main() { int n; //定义变量n cin>>n; //读入变量n的值 for(int i=0; i<n; i++) //循环变量i从0至n-1,共循环n次 cout<<10+3*i<<" "; //每次输出第i项的数 return 0; } |
如果一个整数的个位数字是8,那么称为“幸运数”。输出a至b范围内所有的“幸运数”。从小到大输出,空格分开。
思路:
第1步:定义两个整型变量a和b。
第2步:读入变量a和b的值。
第3步:对a至b范围内的数,逐一判断,如果个位数字是8,则输出。
第4步:用for循环语句,循环变量i从a到b。
第5步:在循环体内,判断i的个位数字是否等于8,如果是,则输出i。
参考程序
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a, b; //定义变量a和b
cin>>a>>b; //读入变量a和b的值
for(int i=a; i<=b; i++) //循环变量i的值从a至b
if(i%10 == 8) //如果i是幸运数
cout<<i<<" "; //输出i
return 0;
}
小锦囊
上面的方法是把[a,b]范围内的每一个数都判断一下是否为“幸运数”。像这种把所有可能的情况都尝试一次的方法,称为“枚举法”。
约数,又称因数。整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。例如:6的约数有1,2,3,6。现在的任务是读入一个a,从小到大输出a的约数,空格分开。
思路:
第1步:定义变量a。
第2步:读入变量a的值。
第3步:因为a的约数的范围是[1,a],所以对[1,a]范围内的每一个整数都判断是否为a的约数。
第4步:用for循环语句实现,循环变量i从1枚举到a。
第5步:在循环体内判断i是否是a的约数,如果是,则输出i。
参考程序
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a; //定义变量a
cin>>a; //读入变量a
for(int i=1; i<=a; i++) //循环变量i从1至a
if(a%i==0) //如果i是a的约数
cout<<i<<" "; //输出i
return 0;
}
小锦囊
本题也用到了“枚举法”,因为a的约数的范围只能在[1,a],所以对[1,a]范围内的每一个数都判断一次,肯定能得到正确的答案。
有一张无穷宽的纸,纸的厚度一开始是1毫米,每对折一次纸的厚度会增加1倍。不断的对折纸,直到纸的厚度超过8844430毫米(珠穆朗玛峰的高度)。在这个过程中,你需要把每次纸的厚度输出,空格分开。
思路:
第1步:由于可能需要折纸多次,所以考虑用for循环语句。
第2步:定义变量h表示纸的当前厚度。
第3步:h赋值为1,表示一开始纸的厚度是1毫米。
第4步:如果h的值没有超过8844430则执行第5步,否则执行第7步。
第5步:输出此时的h,转第6步。
第6步:对折一次,改变h的值,让h = 2 * h,转第4步。
第7步:结束循环。
程序流程图
参考程序
#include <bits/stdc++.h>
using namespace std;
int main()
{
//h的初始值是1毫米,当h<=8844430时,执行循环体语句,然后h=h*2
for(int h=1; h<=8844430; h=h*2)
cout<<h<<" ";
return 0;
}
运行结果
1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152 4194304 8388608
一群小鸟共有n只,由于每年被人类捕获,导致数量每年减少一半,多少年以后,小鸟数量就低于1000只?
思路:
第1步:考虑用for循环语句。
第2步:定义变量n表示当前还剩下n只小鸟。
第3步:读入n的值。
第4步:定义变量y,表示需要y年之后小鸟数量低于1000只。
第5步:初始化让y=0。
第6步:如果n的不少于1000,转第7步,否则执行第8步。
第7步:y加1,小鸟数量n的值减半,转第6步。
第8步:输出y。
第9步:结束程序。
程序流程图如下:
参考程序
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, y;
cin>>n;
for(y=0; n >= 1000; n=n/2 )
y = y + 1;
cout<<y;
return 0;
}
今天就讲到这里,下次就会讲一些稍微难一点点的东西了,拜拜!
标签:约数,输出,变量,10,int,c++,初识,------,循环 From: https://blog.csdn.net/2401_86949778/article/details/144317995