for循环
for循环语法形式
for 循环是三种循环中使⽤最多的, for 循环的语法形式如下:
//形式1
for(表达式1; 表达式2; 表达式3)
语句;
//形式2
//如果循环体想包含更多的语句,可以加上⼤括号
for(表达式1; 表达式2; 表达式3)
{
语句1;
语句2;
...
}
表达式1 ⽤于循环变量的初始化
表达式2 ⽤于循环结束条件的判断
表达式3 ⽤于循环变量的调整
执⾏流程
⾸先执⾏ 表达式1 初始化循环变量,接下来就是执⾏ 表达式2 的判断部分, 表达式2 的结果如果
==0
,则循环结束; 表达式2 的结果如果!=0
则执⾏循环语句,循环语句执⾏完后,再去执⾏表 达式3,调整循环变量,然后再去 表达式2 的地⽅执⾏判断, 表达式2 的结果是否为0,决定循环是否继续。
整个循环的过程中, 表达式1 初始化部分只被执⾏1次,剩下的就是 表达式2 、循环语句、 表达式3在循环。
实践
练习:
使⽤ for 循环在屏幕上打印1~10的值
#include <iostream>
using namespace std;
int main()
{
int i = 0;
for (i = 0; i <= 10; i++)
{
cout << i << " ";
}
return 0;
}
#include <iostream>
using namespace std;
int main()
{
for (int i = 0; i <= 10; i++)
{
cout << i << " ";
}
return 0;
}
![[Pasted image 20250212125934.png]]
上⾯两种代码的差异是,代码1中for循环结束后,i的值还可以继续使⽤;但是代码2中for循环的外边是不能使⽤的,i只能在for循环中使⽤。
while和for对⽐
for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部分⾮常集中,便于代码的维护,⽽如果代码较多的时候 while 循环的三个部分就⽐较分散,所以从形式上 for 循环要更优⼀些。
练习
求和2
计算1~100之间3的倍数的数字之和
#include <iostream>
using namespace std;
int main()
{
int sum = 0;
for (int i = 1; i <= 100; i++)
{
if (i % 3 == 0)
sum += i;
}
cout << sum << endl;
return 0;
}
// 优化
#include <iostream>
using namespace std;
int main()
{
int sum = 0;
for (int i = 3; i <= 100; i += 3)
{
sum += i;
}
cout << sum << endl;
return 0;
}
B2054 求平均年龄
#include <iostream>
using namespace std;
#include <cstdio>
int tmp;
int sum;
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> tmp;
sum += tmp;
}
printf("%.2f\n", sum * 1.0 / n);
return 0;
}
B2058 奥运奖牌计数
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int a, b, c;
int r1 = 0, r2 = 0, r3 = 0;
for (int i = 0; i < n; i++)
{
cin >> a >> b >> c;
r1 += a;
r2 += b;
r3 += c;
}
int sum = r1 + r2 + r3;
printf("%d %d %d %d\n", r1, r2, r3, sum);
return 0;
}
B2065 鸡尾酒疗法
#include <iostream>
using namespace std;
int main()
{
int n = 0;
cin >> n;
int s1, s2;
cin >> s1 >> s2;
double p = s2 * 1.0 / s1;
for (int i = 1; i < n; i++)
{
cin >> s1 >> s2;
if (p - s2 * 1.0 / s1 > 0.05)
cout << "worse" << endl;
else if (s2 * 1.0 / s1 - p > 0.05)
cout << "better" << endl;
else
cout << "same" << endl;
}
return 0;
}
B2066 救援
#include <iostream>
#include <cmath>
using namespace std;
int n;
double x, y;
int p;
int main()
{
cin >> n;
double t = 0;
for (int i = 0; i < n; i++)
{
cin >> x >> y >> p;
float dis = sqrt(x * x + y * y);
t += p * 1 + dis / 50 + p * 0.5 + dis / 50;
}
cout << (int)ceil(t) << endl;
return 0;
}
向上取整算法
double d = 6.5
int q = (int)d;
double q = d - q;
if (p > 0.0)
(int)(d + 1);
else
(int)d;
ceil 和 floor 函数
- ceil - 对⼀个浮点数向上取整,需要头⽂件
<cmath>
。
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
cout << ceil(2.3) << endl;
cout << ceil(3.8) << endl;
cout << ceil(-2.3) << endl;
cout << ceil(-3.8) << endl;
return 0;
}
输出结果
3
4
-2
-3
- floor - 对⼀个浮点数向下取整,需要头⽂件
<cmath>
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
cout << floor(2.3) << endl;
cout << floor(3.8) << endl;
cout << floor(-2.3) << endl;
cout << floor(-3.8) << endl;
return 0;
}
输出结果
2
3
-3
-4
B2070 计算分数加减表达式的值
#include <iostream>
using namespace std;
int n;
int main()
{
cin >> n;
double sn = 0;
int flag = 1;
for (int i = 1; i <= n; i++)
{
sn += flag * 1.0 / i;
flag = -flag;
}
printf("%.4f", sn);
return 0;
}
#include <iostream>
using namespace std;
#include <cmath>
int n;
int main()
{
cin >> n;
double sn = 0;
for (int i = 1; i <= n; i++)
{
sn += pow(-1, i-1) * 1.0 / i;
}
printf("%.4f", sn);
return 0;
}
B2069 求分数序列和
#include <iostream>
using namespace std;
#include <cstdio>
int n;
int main()
{
cin >> n;
int p = 1, q = 2;
double sum = 0;
for (int i = 1; i <= n; i++)
{
sum += q * 1.0 / p;
int tmp = p + q;
p = q;
q = tmp;
//或者q = q + p; p = q - p;
}
printf("%.4f\n", sum);
return 0;
}