首页 理论教育 C语言程序设计:循环结构实例

C语言程序设计:循环结构实例

时间:2023-10-20 理论教育 版权反馈
【摘要】:因为一个数的因子总是成对出现,显然,如果有因子,一定有一个在n 的平方根之前,而另一个一定在n 的平方根之后。判断一个数不是素数,只要找到一个除1 和它本身以外的因子即可,所以查找范围可缩小到n的平方根之内。在编写程序时,可用循环在2 到n 的平方根之内逐个数判断,如果找到一个因子,则提前结束循环,如果找不到因子则按循环条件正常结束循环。

C语言程序设计:循环结构实例

【例6.11】逆序输出某个数字。

运行结果:

程序讲解:

在程序中,我们每计算出一位数字,就把它显示出来。需要提醒读者注意的是,在while循环体中的printf语句中,我们没有输出换行符,这样所有输出的数字就会显示在同一行上。我们在程序的最后使用printf 函数,该函数仅仅输出一个换行符,这样,在程序输出了所有的数字之后,光标将被移到下一行的开始。

【例6.12】输入一个大于2 的整数n,判断其是否为素数

分析:

素数是除了1 和它本身以外,不能被其他数整除的数。

设该数为n,可以在[2,n-1]范围内逐个取数,判断该数是否能被n整除,如果都不能,则n 为素数,否则不是素数。因为一个数的因子总是成对出现,显然,如果有因子,一定有一个在n 的平方根之前(包括平方根),而另一个一定在n 的平方根之后(包括平方根)。判断一个数不是素数,只要找到一个除1 和它本身以外的因子即可,所以查找范围可缩小到n的平方根之内(包括平方根)。

在编写程序时,可用循环在2 到n 的平方根之内逐个数判断,如果找到一个因子,则提前结束循环,如果找不到因子则按循环条件正常结束循环。因为这两种方法结束循环时,循环控制变量的值不同,所以可以通过检查循环变量的值来确定程序是否正常结束循环。如果循环是正常结束,则该数为素数,否则该数不是素数。判断一个数是不是n 的因子,可用n除以该数取余,如果余数为0 则说明该数是n 的因子。

运行结果:

程序讲解:

本例程序中,for 循环在2 到n 的平方根之内逐个数判断,如果找到一个因子,则提前结束循环,如果找不到因子则按循环条件正常结束循环。如果循环是正常结束,则该数为素数,否则该数不是素数。

思考:如何找出所有三位的素数?

【例6.13】求1-1/2+1/3-1/4+1/5-1/6+…-1/100 的值。

分析:

用一个变量专门处理符号位,每处理一个数后,将符号位变量取反。注意符号位变量的初值,它必须与第1 个数的符号保持一致。

运行结果:

程序讲解:

本例程序中for 循序主要处理:当i 值为奇数时,t=1,s 与t*1.0/i 相加;当i 值为偶数时,t=-1,s 与t*1.0/i 相减。循环结束之后,输出s 的值。

【例6.14】验证哥德巴赫猜想:任一充分大的偶数,可以用两个素数之和表示。例如:

4 = 2 + 2

6 = 3 + 3

…(www.xing528.com)

9 8 = 1 9 + 7 9

分析:

我们先不考虑怎样判断一个数是否为素数,而从整体上对这个问题进行考虑,可以这样做:读入一个偶数n,将它分成p和q,使n=p+q。怎样分呢?可以令p从2开始,每次加1,而令q=n-p,如果p、q均为素数,则正为所求,否则令p=p+q再试。

其基本算法如下:

(1)读入大于3 的偶数n。

(2)p=1

(3)do{

(4)p=p+1;q=n-p;

(5)p是素数吗?

(6)q是素数吗?

(7)}while p、q有一个不是素数。

(8)输出n=p+q。

为了判明p、q是否是素数,我们设置两个标志量flagp和flagq,初始值为0。若p是素数,令flagp=1;若q是素数,令flagq=1。于是第7步变成:(7)}while(flagp*flagq==0);

再来分析第(5)、第(6)步,怎样判断一个数是不是素数呢?

素数就是除了1 和它自身外,不能被任何数整除的整数,由定义可知:

2、3、5、7、11、13、17、19 等是素数;

1、4、6、8、9、10、12、14 等不是素数;

要判断i 是否是素数,最简单的办法是用2、3、4、…、i-1 这些数依次去除i,看能否除尽,若被其中之一除尽,则i 不是素数,反之,i 是素数。

但其实,没必要用那么多的数去除,实际上,用反证法很容易证明,如果小于等于i 的平方根的数都除不尽,则i 必是素数。于是,上述算法中的第(5)步、第(6)步可以细化为:

程序代码如下:

运行结果:

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

我要反馈