理论教育 语言程序设计举例及运行结果包含最小公倍数计算

语言程序设计举例及运行结果包含最小公倍数计算

时间:2023-11-02 理论教育 版权反馈
【摘要】:例4.14输入两个正整数m和n,求它们的最小公倍数。程序代码如下:例4.15统计若干个成人的身高,从键盘输入若干个成人身高,分三种范围:≥180厘米、≥160并且<180厘米、<160厘米,统计各个范围的人数。程序代码如下:例4.16利用下面的格里高利公式计算圆周率π的近似值,在逐项累加的过程中,若某一项的绝对值小于10-6,则停止累加,输出π的近似值。程序代码如下:程序运行结果:例4.20猜数游戏。

语言程序设计举例及运行结果包含最小公倍数计算

例4.14 输入两个正整数m和n,求它们的最小公倍数。

【分析】m*n是m和n的一个公倍数,设p是m和n中比较大的数,则p有可能是m和n的公倍数,而小于p的数不可能是m和n的公倍数,所以可以使用循环方法,在m*n到p的范围内找出m和n的最小公倍数。

程序代码如下:

例4.15 统计若干个成人的身高,从键盘输入若干个成人身高(单位:厘米),分三种范围:≥180厘米、≥160并且<180厘米、<160厘米,统计各个范围的人数。

【分析】可以通过while循环实现统计。每次循环输入一个身高值,判断该身高值属于哪种范围,然后让相应的变量累加。

程序代码如下:

例4.16 利用下面的格里高利公式计算圆周率π的近似值,在逐项累加的过程中,若某一项的绝对值小于10-6,则停止累加,输出π的近似值。

【分析】这是一个级数求和问题,可以通过循环实现逐项累加求和。用变量pi存放各项的和,用变量t存放某一项的值。t的值在每次循环中都会改变,t的值由分母(从1开始的某个奇数)和正1或负1(轮流出现)组成。

程序代码如下:

例4.17 输入一个正整数,存放变量m中,判断m是否为素数

【分析】判断m是否为素数,需要检查m是否能被2~m-1之间的整数整除。根据数学理论,只须检查m能否被img之间的整数整除即可。设i取img范围的整数,如果m不能被该区间上的任何一个整数整除,即对img上的每一个整数i,m%i都不为0,则m是素数;但是只要有一个i能使m%i为0,则m不是素数。

程序代码如下:

若执行语句“break;”使循环提前结束,则“m%i”的值应该为0且满足“i<=k”,m不是素数;否则“i<=k”不成立,循环不会提前结束。因此可以用“i<=k”来判断m是否为素数。

例4.18 已知在直角坐标平面上圆的方程是x2+y2=36,从键盘输入100个点的坐标x和y(x和y都是整数),判断每个点在圆内、圆外、还是圆上。

【分析】可以用循环来解决此问题。设变量x和y存放点的坐标,输入每一个点的坐标(x,y),由平面几何知识可知:若x2+y2的值小于36,则该点在圆内;否则,若x2+y2的值大于36,则该点在圆外;否则,则该点在圆上。

程序代码如下:

例4.19 从键盘输入一个十六进制正整数(该整数为unsigned int型),将其转换为二进制数。例如,输入十六进制数“fcdef”,输出“0000000000001111-1100110111101111”。例如,输入十六进制数“5678”,输出“0000000000000000-0101011001111000”。例如,输入十六进制数“15”,输出“0000000000000000-0000000000001111”。(www.daowen.com)

【分析】对于十六进制整数n,可以从最高位到最低位测试它的二进制(32位)形式的各位,判断每位是1还是0。具体作法:定义一个标志变量flag(其十六进制形式为0x80000000,二进制形式为10000000 00000000 00000000 00000000),将flag与n进行按位与运算,运算的结果或者为真、或者为假;若为真,则说明n的最高位值为1;若为假,则说明n的最高位值为0。然后将flag右移一位后,再将flag与n进行按位与运算,根据按位与运算结果的真假,判断n的第2位是1还是0。照此类推,循环32次,即可求出n的每位是1还是0。

程序代码如下:

程序运行结果:

例4.20 猜数游戏。让计算机随机生成一个1到100之间的整数,请你猜该数是多少,输出你猜的次数以及该数的值。请你每次从键盘输入所猜的数。若猜大了或猜小了,计算机就给出提示,你再重新猜。

【分析】可能第一次就猜对了,因此不用进入循环,循环体不被执行,所以选择while循环语句比较好。若某次未猜对,就需要继续猜,则循环体被执行。在循环中,根据所猜的数(number)与被猜的数(guess)的大小关系,显示提示信息。

程序中使用函数srand()设置随机数种子,每次执行程序时该函数产生不同的整数序列,即传递给srand()一个整数,以便决定rand()函数从何处开始生成随机数。函数srand()调用函数time(NULL)返回一个自1970年1月1日以来经历的秒数。函数rand()的值是取值为0~32767的随机整数。

程序代码如下:

例4.21 古典算术问题:搬砖块。某工地需要搬砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬1块。请问用45个人正好搬45块砖,有多少种搬法?

【分析】对于这个组合问题,3个因素决定一种搬法,即男人数、女人数、小孩数,每类人数的取值范围为0~45的整数,各类人数的取值之和正好等于45。因此,对于每类人数的取值都要反复测试,最后确定正好满足45人搬45块砖的组合。

可以采用三重循环嵌套来解决此问题,程序代码如下:

程序运行结果:

由于只有45块砖,因此:男人的数量不会超过15人,女人的数量不会超过22人,而且男人和女人的数量确定下来后,小孩的数量就确定了,小孩数=45-男人数-女人数。

根据以上分析,上述程序可以改进如下:

例4.22 已知方程f(x)=2x3+13x2-52x-315=0在区间(2,9)内有一个根,并且f(x)在区间(2,9)单调递增。请用二分法编程求这个根。二分法的算法:对于函数f(x)=2x3+13x2-52x-315,设x1=2、x2=9,将区间(x1,x2)二等分,中点为x0,若f(x0)=0,则x0是根;若f(x0)*f(x1)<0,则根在(x1,x0)内,将x0赋给x2;否则根在(x0,x2)内,将x0赋给x1;得到新的区间(x1,x2)。新的区间(x1,x2)的长度是原来的二分之一。重复上述过程,再求新的x0,使得区间(x1,x2)的长度越来越小,直到x0与根非常接近为止。

【分析】可用循环编程。根在(x1,x2)内,按照给定的算法,每次求(x1,x2)的中点x0,若x0是根,则结束循环,否则让含根区间缩小一半,得到新的(x1,x2),再求新的(x1,x2)的中点x0,直到x0与根非常接近为止。例如,让(x1-x0)的绝对值小于给定的小正数(10-5)。

程序代码如下:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈