程序设计百科

广告

C语言程序分析4

2012-06-19 11:10:16 本文行家:玻尔特.李

在一个范围内,选择是否素数的数输出。

问题:求100200内的全部素数

分析

1.算法

       m2~m除,若m能被2~m之中任何一个整数整除,则提前结束循环,此时游标i必然小于或等于k=m

      若m不能被2~k之间的任一整数整除,则最后一次循环时游标i应加1,因此i=k+1;终止循环。

      循环终止,判别i的值是否大于或等于k+1;若是,则表明m未曾被2~k之间任一整数除过,输出m是素数。否则,m不是素数,不输出。

2.程序设计

数据用

1)从100200判断。

     循环。用m表示从100200。第一层循环。

2)是否素数。用i表示2到√m的数,不必从1开始比较。

     第二层循环,从2到√m

程序用

   1)偶数不是素数,所以for 循环中m的增量是2m101开始计算,因为100是偶数。

   2)屏幕输出,每10个一行,然后换行,用n当计数器。

程序

main()

{int m,k,i,n=0;                    //n控制屏幕输出素数的格式

for(m=101;m<200;m=m+2)       //偶数不是素数。边界101200

          { k=sqrt(m);

            for(i=2;i<=k;i++)            //判断m是不是素数,边界2

                                                //sqrt(m)m2~m比较,是否整除   

            if(m%i==0)   break;

                                             //能整除则跳出素数判断循环,说明不是素数

                                               //保留i的当前值

          if(i>=k+1)   

                              //i>=k+1,m是素数。第2个循环素数判断循环全部执行

                               //i<k+1,执行了break语句则m不是素数不输出

          { printf(%d,m);  n=n+1;                        

             if(n%10==0)  printf(“ ”);            //设置屏幕输出格式

           }                                                               

       } //第一层for循环结束

    printf(“ ”);                                //构成一个表格

}

3.程序分析

1)程序结构

      用一层for循环判断从100200中间的数,设置数的边界;可称为判数范围。

第二层循环,判断每一个数是不是素数。设置第二层循环,判断的范围从2sqrt(m);可称为素数判断循环。

       素数判断循环的相关语句。i是不是等于sqrt(m)+1,若是则m是素数。所以if(i>=k+1)语句是素数判断循环的相关语句。

2)程序的细节

(1)素数的判断

      当一个m能整除任意一个第二层循环的比较数时,则跳出循环,m不是素数,没有需要再比较下去了。用break语句跳出循环;

      否则在结束一次素数判断后,在素数判断循环外再用if语句判断i是不是等于sqrt(m)+1,若是则m是素数。

(2)表格形式的输出

    用行计数器n,设置屏幕的表格格式,当n%10,则一行输出结束,到下一行输出素数。

4.过程分析

            m<200    2sqrt(m)              i>=k+1       n%10==0

101           1                                                 

102           1           1                            0             0

103           1                                                 0

…     

200           0

 

 

分享:
标签: 自然科学 计算机软件 | 收藏
百科的文章(含所附图片)系由网友上传,如果涉嫌侵权,请与客服联系,我们将按照法律之相关规定及时进行处理。如需转载,请注明来源于www.baike.com
广告

本文行家向Ta提问

玻尔特.李软件专业硕士生,编程,计算机硬件设计,网络。

行家更新