C++循环练习
信息学社团暑假第三次复习讲义
循环结构
复习书本for循环、while循环、do-while循环、循环嵌套
for循环
练习1:输出1—100之间所有偶数
练习2:利用for循环计算n!的值。
说明:n!叫做n的阶乘n!=1*2*3*……*n,如:3!=1*2*3
注意:变量类型,因为当n>=13时,s值超过了int类型的表示范围。还有一种比int更大的类型,称为long long,它的表示范围是-263~263-1,比-1019~1019略窄,而我们一直使用的int范围是-231~231-1,只比-2*109~2*109略宽。
练习3、利用for循环,分别计算1—100中奇数的和、偶数的和
上机练习题:
1、求12+22+32+…+1002
2、求s=1+1/2+1/3+…+1/100
3、计算100之内所有的奇数之和。
4、求10个数中的最大值和最小值。
5、按字母表的顺序,从字母A到Z顺序打印输出。
6、求菲波拉契数列a0,a1,a2, (20)
a0=0,a1=1,a2=a1+a0,a3=a2+a1,……,an=an-1+an-2;
如0,1,1,2,3,5,8,13,21,……
while语句
练习1:求s=1 +2 +3……+n,当加到第几项时,s的值会超过1000?
练习2:求两个正整数m,n的最大公约数。
分析:求两个整数的最大公约数可以采用辗转相除法。以下是辗转相除法的算法:分别用m,n,r表示被除数、除数、余数;
1)求m除以n的余数r;
2)当r!=0,执行第3)步;若r==0,则n为最大公约数,算法结束。
3)将n的值赋给m,将r的值赋给n;再求m除以n的余数r。
4)转到第2)步
练习3、编一程序求满足不等式1+ 1/2 + 1/3 …+1/n >=5的最小n值。
分析:此题不等式的左边是一个求和的算式,该和式中的数据项个数是未知的,也正是要求出的。对于和式中的每个数据项,对应的通式为1/i,i=1,2,…n。
所以可采用循环累加的方法来计算出它的值。设循环变量为i,它应从1开始取值,每次增加1,直到和式的值不小于5为止,此时的i值就是所求的n。设累加变量为s,在循环体内把1/i的值累加到s上。
练习4、数据统计
输入一些整数,求出它们的最小值、最大值和平均值(保留3位小数)。输入保证这些数都是不超过1000的整数。
样例输入:2 8 3 5 1 7 3 6
do while语句怎么用样例输出:1 8 4.375
上机练习题:
1、用while循环完成如下3题:
①求s=1+2+3+4+…+10
②求s=1+1/2+1/3+…+1/100
③计算n!,其中n由键盘输入。
2、输入任意的自然数A, B, 求A , B的最小公倍数。
3、小球从100高处自由落下,着地后又弹回高度的一半再落下。求第20次着地时, 小球共通过多少路程?
4、Faibonacci数列前几项为: 0,1,1,2,3,5,8,…,其规律是从第三项起, 每项均等于前两项之和。求前30项,并以每行5个数的格式输出。
do-while语句
练习1、对于求两个正整数m,n的最大公约数可以用do—while实现。
代码如下,请完善:
#include
using namespace std;
int main ()
{
int m,n,r;
cin>>m>>n;
do //辗转相除法
{
r =m % n;
m=____;
n=_____;
}
while ( _______ );
cout<<"the greatest common divisor is:"<<______;
return 0;
}
练习2、求1992个1992的乘积的末两位数是多少?
【分析】积的个位与十位数只与被乘数与乘数的个位与十位数字有关,所以本题相当于求1992个92相乘,而且本次的乘积是下一次相乘的被乘数,因此也只需取末两位参与运算就可以了。
练习3、校体操队到操场集合,排成每行2人,最后多出1人;排成每行3人,也多出1人;分别按每行排4,5,6人,都多出1人;当排成每行7人时,正好不多。求校体操队至少多少人?
【分析】①设校体操队为x人,根据题意x应是7的倍数,因此x的初值为7,以后用x+=7)改变x值;
②为了控制循环, 用逻辑变量yes为真(true) 使循环结束;
③如果诸条件中有一个不满足, yes 的值就会为假(false),就继续循环。
上机练习题:
用do-while循环完成如下3题:
①求s=1+2+3+4+…+10
②求s=1+1/2+1/3+…+1/100
③计算n!,其中n由键盘输入。
2、读一组实数,遇零终止,打印其中正、负数的个数及各自的总和。
3、用辗转相除法求两个自然数的最大公约数。
4、出被2、3、5除时余数为1的最小的十个数。
5、将一根长为369cm的钢管截成长为69cm和39cm两种规格的短料。在这两种规格的短料至少各截一根的前提下, 如何截才能余料最少?
循环嵌套
练习1:求S=1!+2!+3!+ (10)
分析:这个问题是求10以内自然数的阶乘之和,可以用for循环来实现。程序结构如下:for(i=1;i<=10;++i)
{
(1)i阶乘的值存到t;//t=i!
(2)累加t到s中;//s+=t
}
显然根据以上结构,通过10次的循环可以求出1!,2!,…10!,并不断累加起来,求出s。而求t=i!,又可以用一个for循环来实现:
t=1;
for (j=1;j<=i;++j)
t*=j;
}
练习2、一个炊事员上街采购,用500元钱买了90只鸡,其中母鸡一只15元,公鸡一只10元,小鸡一只5元,正好把钱买完。问母鸡,公鸡,小鸡各买了多少只?
【分析】设母鸡i只,公鸡j只,则小鸡为90-i-j只,则15*i+ 10* j+(90-i-j)*5=500,显然一个方程求两个未知数是不能直接求解。必须组合出所有可能的i,j值,看是否满足条件。这里i的值可以是0到33,j的值可以0到50。
练习3、利用for循环语句输出图4-1中的三角形。
*
**
***
****
*****
练习3、求100-999中的水仙花数。若三位数ABC,ABC=A3+B3+C3,则称ABC为水仙花数。例如153,13+53+33=1+125+27=153,则153是水仙花数。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论