for循环引入:
现实生活中,有许多重复执行的事件,大家还记得小学学习算盘时,有一题需要计算:
1+2+…+100 = 5050
计算过程:我们从1一直累加到100,对于每个数我们都做相同的操作,即累加到 算盘 上。
其实计算机特别擅长做重复的事,对于算盘计算问题,我们用c++来实现就特别简单:
int ans = 0;
for (int i = 1;i <= 100;i ++){
ans += i;
}
他们的执行过程完全一样,但是计算机代替我们做了重复的事情,这就是循环!
学习for循环: ????????for循环是一种计数控制循环,即我们知道循环执行的确切次数,重复特定次数的循环就称为计数控制循环。 ????????例如,算盘例子中,我们知道求和需要重复累加100次,这实际上意味着,循环数为?12。
计数控制循环必须具有 3 个要素:
1、必须将循环变量初始化为起始值。
2、必须通过将其与最终值进行比较来测试循环变量。当循环变量达到其最终值时,循环终止。
3、必须在每次迭代期间更新循环变量。这通常通过变量递增或递减来完成。
for 循环专门用于初始化、测试和更新循环变量。
?for循环有格式!!!
以下是?for 循环的格式:
for (初始化;测试;更新)
{
??? 语句;
??? 语句;
??? //根据需要在此放置更多语句
}
? ? ??如果循环体中只有一个语句,则可以省略大括号。
? ? ? for?循环的第一行是循环头。在关键词?for?之后,括号内有?3?个表达式,用分号分隔(注意第?3?个表达式之后没有分号):
? ? ? 第一个表达式是初始化表达式,它通常用于将循环变量初始化为其起始值。这是循环执行的第一个动作,只做一次。
? ? ? 第二个表达式是测试循环变量。它控制循环的执行。只要这个条件为?true,for?循环的主体将重复,它在每次迭代之前判断测试表达式。
? ? ? ?第三个表达式是更新表达式。它在每次迭代结束时执行。通常,这是一个递增循环计数器变量的语句。
简单的例子:
以下是一个简单的?for 循环示例,将打印“Hello”字符串 5 次:
for (count = 1; count <= 5; count++)
??? cout << "Hello" << endl;
? ? ?在该循环中,初始化表达式为?count = 1,测试表达式为“count <= 5”,更新表达式为 count++。循环的主体只有一个语句,即 cout 语句。下图说明了循环执行过程中发生的事件顺序。
? ? ??请注意,只要测试表达式为真,就重复步骤?3?4。图 2 以流程图形式显示了 for 循环的一般逻辑。
? ? ??请注意如何使用计数器变量?count?来控制循环迭代的次数。它的值从?1?开始,每次循环迭代之后递增?1。只要表达式?"count <= 5"?保持为?true,循环将重复迭代。但是,在?5?次迭代之后,count?将变成?6,这导致测试表达式变为?false,所以循环终止。
? ? ? 还要注意的是,在这个例子中,count?变量仅在循环头中使用,以控制循环迭代的次数。它不用于任何其他目的。当然,也可以在循环体内使用计数器变量。例如,来看下面的代码:
for (number = 1; number <= 5; number++)
??? cout << number << " ";
? ? ? 此循环中的计数器变量为?number。除了控制迭代次数之外,它也被用在循环体中
简单的例题:
? ? ? ?
first:? ? ? ?
????????班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数点后两位。
输入格式:
第一行有一个整数n(1≤ n ≤ 100),表示学生的人数。其后n行每行有1个整数,表示每个学生的年龄,取值为15到25。
输出格式:
输出一行,该行包含一个浮点数,为要求的平均年龄,保留到小数点后两位。
限制:
空间限制:128MByte
时间限制:1秒
样例:
输入:
2
18
17
输出:
17.50
? ? ? ? ?分析:
? ? ? ? ? ? ? ? 就是单纯的输入然后计算输出即可。
? ? ? ? 代码:
????????????????
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,sum=0;
int age[100];
float b;
cin >> n;
for(int i=0;i<n;i++){
scanf("%d",&age[i]);
sum+=age[i];
}
b=(float)sum/n;
printf("%.2lf",b);
return 0;
}
second:
????????计算非负整数m到n(包括m和n)之间的所有奇数的和,其中,m 不大于 n,且n 不大于300。例如 m=3, n=12, 其和则为:3+5+7+9+11=35。
输入格式:
两个数 m 和 n,两个数以一个空格分开,其中 0 ≤ m ≤ n ≤ 300 。
输出格式:
输出一行,包含一个整数,表示m到n(包括m和n)之间的所有奇数的和。
限制:
空间限制:128MByte
时间限制:1秒
?分析:
????????从m到n的单数相加,有two种方法:
? ? ? ? (1):遍历m到n,判断是不是单数,是那就加
? ? ? ? ? (2):遍历m到n的单数,如果m是单数,直接i+=2,反之 把m+1后遍历。
代码:
? ? ? ? 方法1:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int m ,n ,sum = 0;
cin >> m >> n;
for(int i = m;i <= n;i++)
{
if(i% 2 != 0)
{
sum += i;
}
}
cout<<sum;
return 0;
}
? ? ? ? 方法2:
????????
#include <bits/stdc++.h>
using namespace std;
int main()
{
int m ,n ,sum = 0;
cin >> m >> n;
if(m % 2 == 0)
{
m += 1;
}
for(int i = m;i <= n;i+=2)
{
sum += i;
}
cout<<sum;
return 0;
}
Finally:
编写程序,输入n的值,求 1/1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + 1/7 - 1/8 + … + (-1)n-1·1/n 的值。
输入格式:
输入一个正整数n。1 <= n <= 1000。
输出格式:
输出一个实数,为表达式的值,保留到小数点后四位。
限制:
空间限制:128MByte
时间限制:1秒
样例:
输入:
2
输出:
0.5000
?分析:
? ? ? ? 按照数学思想计算即可。
代码:
#include<iostream>
int main()
{
int n,a=1,b=2;
double c=0;
scanf("%d",&n);
for(int i=1;i<n;i++)
{
c+=1.0/a-1.0/b;
a=b+1,b=a+1;
}
printf("%.4lf",c);
return 0;
}
总结:
for循环十分重要,也有很多可以优化的地方,要持续的学才行。
|