第11次课 while循环
课堂学习
while执行流程
使用while循环
练一练
小总结
1.for循环和while循环都可以有循环变量、循环条件、循环步长。
2.for循环和while循环中的循环体可以为一条语句或复合语句。
3.for循环能够实现的功能while循环也可以实现(两种循环可以互相转换)。
应用场景
1、循环次数已知时,一般使用for循环:
·比如:求班里n名学生的总分
·比如:计算1~n的数字之和
2、循环次数未知时,一般使用while循环:
·比如:计算任意整数各个数位上的数字之和
·比如:登录时输入密码,输入错误则重复输入,直至正确为止
do while
语法格式
练一下

课堂训练
3165 角谷猜想
描述
数学界有这样一种猜想:对于每个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,得到的结果再按照上述规则重复处理,最终都能得到1。
该思想最开始流传于美国,不久传到欧洲,后来由一位叫角谷的日本人带到亚洲,因此被称为“角谷猜想”。
角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终都能够得到1。编写程序验证角谷猜想,要求输入一个正整数,将经过处理得到1的过程输出来。
输入描述
一个正整数 n(1≤n≤2000000)。
输出描述
计算过程中的所有整数。
样例输入 1
5
样例输出 1
5 16 8 4 2 1
样例输入 2
10
样例输出 2
10 5 16 8 4 2 1
提示
1≤n≤2000000
#include <iostream>
using namespace std;
int main(){//接收输入的整数int n;cin>>n;//循环计算n的值while(n!=1){cout<<n<<" ";if(n%2==1)n=n*3+1;elsen=n/2;}//输出n最后的值cout<<n;return 0;
}
3168 书香阁的座位数
输入描述
无
输出描述
多行;
每行三个整数,分别表示第几排、座位数、总数,使用空格隔开。
样例输入 1
无
样例输出 1
1 15 15 2 17 32 3 19 51 4 21 72 5 23 95 6 25 120 7 27 147 8 29 176 9 31 207 10 33 240 11 35 275 12 37 312
#include <iostream>
using namespace std;
int main(){int sum,p,x;p=1; //第几排x=15; //这一排的座位数sum=x; //座位总数//循环输出while(sum<=312){cout<<p<<" "<<x<<" "<<sum<<endl;p++;x+=2;sum+=x;}return 0;
}
3163 数字加加乐
描述
童童和美美很喜欢玩“加加乐”游戏,游戏规则是一方报出一个正整数(不能超过6位数),另一方说出该数的各个数位之和。比如:童童说12,美美就说3;童童说567,美美就说18。
请编写一个程序,输入一个正整数,输出它的各个数位之和。
输入描述
一行,一个正整数 n(1≤n<100000)。
输出描述
输出数字 n 各个数位上的数字相加后的结果。
样例输入 1
12
样例输出 1
3
样例输入 2
1234
样例输出 2
10
提示
1≤n<10000
#include <iostream>
using namespace std;
int main(){//接收输入的整数int n;cin>>n;int sum=0;//记录累加和//循环运算while(n!=0){sum+=n%10;n=n/10;}cout<<sum;return 0;
}
3164 输出位数
描述
输入一个正整数,输出该数的位数。
输入描述
一行,一个正整数 n(1≤n≤100000)。
输出描述
一个正整数,表示位数。
样例输入 1
789
样例输出 1
3
样例输入 2
45566
样例输出 2
5
提示
1≤n≤100000
#include <iostream>
using namespace std;
int main(){//接收输入的整数int n;cin >> n;int cnt=0;//记录数字位数//循环计算while(n!=0){n=n/10;cnt++;}cout<<cnt; return 0;
}
3621 产品质检
描述
大嘴猴的工厂生产了一批大嘴猴图案的T恤,T恤需要进行人工质检,工人会给每个T恤标注质检分数(1~100)。如果质检分数小于等于60则为劣质产品,需要被工厂回收。现在工厂想要统计出需要被回收的产品数量,但是每次质检的T恤数量是不确定的。
请编写程序,输入每个T恤的质检分数,输入以0结尾,输出需要被回收的产品数量。
输入描述
一行,若干个正整数x,代表每个T恤的质检分数,以0结尾。 (1≤x≤100)
输出描述
一行,一个整数,代表需要被回收的产品数量。
样例输入 1
50 80 98 54 93 100 88 0
样例输出 1
2
#include <iostream>
using namespace std;int main(){//记录质检分数int x;//记录回收产品数量int cnt=0;//循环输入统计do{cin >> x;if(x<=60) cnt++; }while(x!=0);//输出cout << cnt-1;return 0;
}
3646 数组元素求和
描述
现有一个长度为n的整型数组,需要将对应位置上的元素相加,相加规则如下:
例1:数组长度为10,数组元素为1,2,3,4,5,6,7,8,9,10。1和10相加,2和9相加,3和8相加…5和6相加。
例2:数组长度为5,数组元素为1,2,3,4,5。1和5相加,2和4相加,3和3相加。
输入描述
第一行,一个正整数n,代表数组长度(1≤n≤1000);
第二行,n个整数(0≤整数≤1000)。
输出描述
依次输出若干个元素相加之后的结果,中间使用空格分隔。
样例输入 1
6 1 4 6 2 3 8
样例输出 1
9 7 8
样例输入 2
7 1 4 6 5 2 3 8
样例输出 2
9 7 8 10
#include <iostream>
using namespace std;int main(){int n;cin>>n;//循环接收数组元素int a[1000]={0};for(int i=0;i<n;i++){cin>>a[i];}//记录相加的数组元素的下标int start=0;int end=n-1;while(start<=end){cout<<a[start]+a[end]<<" ";start++;end--;}return 0;
}
尝试挑战
3668 肥宅快乐水
#include <iostream>
using namespace std;
int main(){int n;cin>>n;int sum,p,x;p=1; //第几人x=2; //这一人分得的数量sum=x; //实际总数while(sum<=n){cout<<p<<" "<<x<<" "<<endl;p++;x+=2;sum+=x;}return 0;
}
3677 猴子吃桃
#include <iostream>
using namespace std;
int main(){int n;cin>>n;int a=1;while(n>1){a = (a + 1) * 2;n--;}cout<<a;return 0;
}