片头
哈喽!小伙伴们,大家好~,今天我们来学习蓝桥杯基础篇(三),继续练习相关习题,准备好了吗?我们开始啦~
一、while循环
可以简单理解为循环版的if语句。if语句是判断1次,如果条件成立,则执行后面的语句;while是每次判断,如果成立,则执行循环体中的语句,否则停止。
int main() {
int i = 0;
while (i < 10) {
cout << i << endl;
i++;
}
return 0;
}
题目1: 求1~100中所有数的立方和
int main() {
int sum = 0 , sum2 = 0;
int i = 1;
while (i <= 100) {
sum1 += i * i * i;
i++;
}
cout << "1~100中所有数的立方和为: " << sum << endl;
return 0;
}
题目2:求斐波那契数列的第n项。f(1)=1,f(2)=1,f(3)=2,f(4)=3,f(n)=f(n-1)+f(n-2)
首先,我们来观察斐波那契数列,规律是:后一个数=前2个数相加
f(1)=1,f(2)=1
f(3)=f(1)+f(2)
f(4)=f(2)+f(3)
f(5)=f(3)+f(4)
.....
f(n)=f(n-2)+f(n-1)
为此,我们可以列出一张表,表示 i,a,b的关系
i | a | b |
0 | f(1) | f(2) |
1 | f(2) | f(3) |
2 | f(3) | f(4) |
3 | f(4) | f(5) |
4 | f(5) | f(6) |
5 | f(6) | f(7) |
... | ... | ... |
n-3 | f(n-2) | f(n-1) |
n-2 | f(n-1) | f(n) |
n-1 | f(n) | f(n+1) |
通过这张表,我们可以看到,i的范围在0~n-2,采用while循环
//求斐波拉契数列的第n项,
//f(1)=1,f(2)=1,f(3)=2,
//f(4)=3,f(5)=5,f(6)=8,f(7)=13,f(8)=21,f(9)=34,f(10)=55
//f(1)=1,f(2)=1
//f(3)=f(1)+f(2),
//f(4)=f(2)+f(3),
//f(5)=f(3)+f(4),
//...
//f(n)=f(n-2)+f(n-1)
// i a b
// 0 f(1) f(2)
// 1 f(2) f(3)
// 2 f(3) f(4)
// 3 f(4) f(5)
// 4 f(5) f(6)
// 5 f(6) f(7)
// 6 f(7) f(8)
//...
// n-3 f(n-2) f(n-1)
// n-2 f(n-1) f(n)
// n-1 f(n) f(n+1)
//当i=n-1时,应该退出循环
//i的取值范围在0~n-2
int main() {
int i = 0;
int n;
cin >> n;
int a = 1;
int b = 1;
while (i < n - 1) {
int c = a + b;
a = b;
b = c;
i++;
}
cout << a << endl;
return 0;
}
死循环:循环永久执行,无法结束。我们要避免写出死循环。
//死循环: 循环永久执行,无法结束。我们要避免写出死循环
int main4() {
int x = 1;
while (x == 1) puts("!");
return 0;
}
二、do-while循环
do-while循环不常用。do-while语句与while语句非常相似。唯一的区别:do-while语句限制性循环体后检查条件。不管条件的值如何,我们都要至少执行1次循环。
int main() {
int x = 1;
while (x < 1) {
cout << "x!" << endl;
x++;
}
int y = 1;
do {
cout << "y!" << endl;
} while (y < 1);
return 0;
}
输出结果:
y!
再来举一个例子:
int main() {
int r = 0;
int j = 1;
w