【风马一族_C】c语言版,在2到n中寻找出所有的素数

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <math.h>
 4 
 5 /* run this program using the console pauser or add your own getch, system("pause") or input loop */
 6 
 7 //判断用户输入的数据是否大于2的正整数
 8 bool isNaN(int number) {
 9     if(number>2)
10         return true;
11     else    
12         return false;
13 }
14 
15 
16 //输入数据的函数 
17 int InNumber(){
18     int number;
19     printf("请输入一个大于2的正整数");
20     scanf("%d",&number);
21     if(isNaN(number))
22         return number;
23     else
24         //让用户重新输入
25         InNumber();         
26 }
27 
28 //判断一个数字大于2的正整数是否为素数 
29 bool prime(int number){
30     
31     int numI=2;
32     double sum=0;
33     
34     do{
35         sum=number%numI;
36         if(sum==0){
37             return true;
38             break;
39         }else{
40             ++numI;
41         }
42     }while(numI<number);    
43         
44     return false;
45 }
46 
47 //循环n次数 
48 void more(int number){
49     int num[number];
50     int j=0;
51     for(int i=3;i<=number;++i){
52         if(prime(i)){
53             num[j]=i;
54             ++j;
55         }            
56         else{
57                 }    
58     }
59     
60     
61     
62     
63     /*int numI=3;
64     bool bo=prime(numI);
65     int numPrime[number];
66     int i=0;
67     if(bo){
68         numPrime[i]=numI;
69         ++i;
70     }else{
71         //放弃    
72     }
73     
74     if(numI<number){
75         ++numI;
76         more(numI);    
77     }    */
78 }
79 
80 int main(int argc, char** argv) {
81     
82     //1:输入数据
83         //1:确保数字大于2的正整数 isNaN() 
84     //2:判断数据是否为素数
85         //1:使用for(),让程序提供n次检测的机会
86         //2:使用prime()判断每个数据是否为素数 
87     //3:输出结果 
88     
89     int number=InNumber();
90     more(number);
91     return 0;
92 }

 ------------------------------------------------------------------------------------

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <math.h>
 4 
 5 //判断用户输入的数据是否大于2的正整数
 6 bool isNaN(int number) {
 7     if(number>2)
 8         return true;
 9     else
10         return false;
11 }
12 
13 
14 //输入数据的函数
15 int InNumber() {
16     int number;
17     printf("请输入一个大于2的正整数");
18     scanf("%d",&number);
19     if(isNaN(number))
20         return number;
21     else
22         //让用户重新输入
23         InNumber();
24 }
25 
26 //判断一个数字大于2的正整数是否为素数
27 bool prime(int number) {
28 
29     int numI=2;
30     double sum=0;
31 
32     do {
33         sum=number%numI;
34         if(sum==0) {
35             return true;
36             break;
37         } else {
38             ++numI;
39         }
40     } while(numI<number);
41 
42     return false;
43 }
44 
45 //按每行最多10个元素的输出素数 
46 void OutNumber(int num[],int primeJ){
47     int i=0;
48     do{
49         printf("%d\t",num[i]);
50         ++i;
51         
52         //当连续输出10个元素时,就跳行 
53         if(i%10==0)
54             printf("\n");        
55     }while(i<primeJ);
56 }
57 
58 //n次循环,处理每个数字,记录素数 
59 void more(int number) {
60     int num[number];
61     int primeJ=0;    //记录素数的数量
62     for(int i=3; i<=number; ++i) {
63         if(prime(i)) {
64             num[primeJ]=i;
65             ++primeJ;
66         } else {
67             // 记录合数的数量
68         }
69     }
70     
71     OutNumber(num,primeJ);    
72 }
73 
74 int main(int argc, char** argv) {
75 
76     //1:输入数据
77     //1:确保数字大于2的正整数 isNaN()
78     //2:判断数据是否为素数
79     //1:使用for(),让程序提供n次检测的机会
80     //2:使用prime()判断每个数据是否为素数
81     //3:输出结果
82 
83     int number=InNumber();   //输入 
84     more(number);             //中间处理 
85  
86     
87     //OutNumber();             //输出 
88     
89     return 0;   
90 }
91                      

 ---------------------------------------------------------------------------------------------------------------------

第三个方式

  1 #include <iostream>
  2 #include <stdio.h>
  3 #include <math.h>
  4 
  5 //判断用户输入的数据是否大于2的正整数
  6 bool isNaN(int number) {
  7     if(number>2)
  8         return true;
  9     else
 10         return false;
 11 }
 12 
 13 
 14 //输入数据的函数
 15 int InNumber() {
 16     int number;
 17     printf("请输入一个大于2的正整数");
 18     scanf("%d",&number);
 19     if(isNaN(number))
 20         return number;
 21     else
 22         //让用户重新输入
 23         InNumber();
 24 }
 25 
 26 //判断一个数字大于2的正整数是否为素数
 27 bool prime(int number) {
 28 
 29     int numI=2;
 30     double sum=0;
 31 
 32     do {
 33         sum=number%numI;
 34         if(sum==0) {
 35             return true;
 36             break;
 37         } else {
 38             ++numI;
 39         }
 40     } while(numI<number);
 41 
 42     return false;
 43 }
 44 
 45 //按每行最多10个元素的输出素数 
 46 void OutNumber(int num[],int primeJ){
 47     int i=0;
 48     do{
 49         printf("%d\t",num[i]);
 50         ++i;
 51         
 52         //当连续输出10个元素时,就跳行 
 53         if(i%10==0)
 54             printf("\n");        
 55     }while(i<primeJ);
 56 }
 57 
 58 //n次循环,处理每个数字,记录素数 
 59 int more(int number) {
 60     int num[number];
 61     int primeJ=0;    //记录素数的数量
 62     for(int i=3; i<=number; ++i) {
 63         if(prime(i)) {
 64             // 记录合数
 65         } else {            
 66             num[primeJ]=i;
 67             ++primeJ;
 68         }
 69     }
 70     
 71     OutNumber(num,primeJ);
 72 }
 73 
 74 int main(int argc, char** argv) {
 75 
 76     //1:输入数据
 77     //1:确保数字大于2的正整数 isNaN()
 78     //2:判断数据是否为素数
 79     //1:使用for(),让程序提供n次检测的机会
 80     //2:使用prime()判断每个数据是否为素数
 81     //3:输出结果
 82 
 83     /***************************************************
 84         主支干上,
 85             设计模式
 86                 函数接收外界的数据,使用完后,反馈数据
 87                 这种一进一去的函数设计方式,称之为 什么好呢!
 88         分支干上,
 89             用来辅助主支干的函数的需要 
 90     ***************************************************
 91         目的:变量的数据在函数内处理,函数外的数据由函数来处理
 92         意料发现:这样全局变量就不用存在了 
 93         从函数来看:函数从外界获取数据,并向外界反馈数据
 94         设计模式:略学了设计模式,不知道这种方式算什么方式 
 95      
 96     ******************************************************/
 97     int number=InNumber();   //输入函数,函数使用完,返回数值 
 98     more(number);             //中间处理, 可惜c无法直接返回数组,用指针的话,又说数组长度要用固定长度,
 99                              //需要用指针的话,或许可以让它返回数据 
100      
101     //OutNumber();             //输出 ,因为more(number)没有返回数据,此方法待定 
102     
103     return 0;   
104 }
105         

 ------------------------------------------------------------------------------

第四种方式,这是进一步的更新,增加 每次运行完后,提示用户是否想重新玩一次,

  1 #include <iostream>
  2 #include <stdio.h>
  3 #include <math.h>
  4 
  5 //判断用户输入的数据是否大于2的正整数
  6 bool isNaN(int number) {
  7     if(number>2)
  8         return true;
  9     else
 10         return false;
 11 }
 12 
 13 
 14 //输入数据的函数
 15 int InNumber() {
 16     int number;
 17     printf("请输入一个大于2的正整数");
 18     scanf("%d",&number);
 19     if(isNaN(number))
 20         return number;
 21     else
 22         //让用户重新输入
 23         InNumber();
 24 }
 25 
 26 //判断一个数字大于2的正整数是否为素数
 27 bool prime(int number) {
 28 
 29     int numI=2;
 30     double sum=0;
 31 
 32     do {
 33         sum=number%numI;
 34         if(sum==0) {
 35             return true;
 36             break;
 37         } else {
 38             ++numI;
 39         }
 40     } while(numI<number);
 41 
 42     return false;
 43 }
 44 
 45 //按每行最多10个元素的输出素数
 46 void OutNumber(int num[],int primeJ) {
 47     int i=0;
 48     do {
 49         printf("%d\t",num[i]);
 50         ++i;
 51 
 52         //当连续输出10个元素时,就跳行
 53         if(i%10==0)
 54             printf("\n");
 55     } while(i<primeJ);
 56 }
 57 
 58 //n次循环,处理每个数字,记录素数
 59 int more(int number) {
 60     int num[number];
 61     int primeJ=0;    //记录素数的数量
 62     for(int i=3; i<=number; ++i) {
 63         if(prime(i)) {
 64             // 记录合数
 65         } else {
 66             num[primeJ]=i;
 67             ++primeJ;
 68         }
 69     }
 70 
 71     OutNumber(num,primeJ);
 72 }
 73 
 74 //运用完一次后,判断用户是否想重新再来一次
 75 void EndlessLoop() {
 76 
 77     int number=InNumber();   //输入函数,函数使用完,返回数值
 78     more(number);
 79 
 80     printf("\n\n你是否重新再来一次,请输入1,不要请输入其它字符:  ");
 81     int boNum;
 82     scanf("%d",&boNum);
 83     if(boNum==1) {
 84         EndlessLoop();
 85     } else {
 86         //退出 不处理
 87     }
 88 }
 89 
 90 int main(int argc, char** argv) {
 91 
 92     //1:输入数据
 93     //1:确保数字大于2的正整数 isNaN()
 94     //2:判断数据是否为素数
 95     //1:使用for(),让程序提供n次检测的机会
 96     //2:使用prime()判断每个数据是否为素数
 97     //3:输出结果
 98 
 99     /***************************************************
100         主支干上,
101             设计模式
102                 函数接收外界的数据,使用完后,反馈数据
103                 这种一进一去的函数设计方式,称之为 什么好呢!
104         分支干上,
105             用来辅助主支干的函数的需要
106     ***************************************************
107         目的:变量的数据在函数内处理,函数外的数据由函数来处理
108         意料发现:这样全局变量就不用存在了
109         从函数来看:函数从外界获取数据,并向外界反馈数据
110         设计模式:略学了设计模式,不知道这种方式算什么方式
111 
112     ******************************************************/
113     //int number=InNumber();   //输入函数,函数使用完,返回数值
114     //more(number);             //中间处理, 可惜c无法直接返回数组,用指针的话,又说数组长度要用固定长度,
115     //需要用指针的话,或许可以让它返回数据
116 
117     //OutNumber();             //输出 ,因为more(number)没有返回数据,此方法待定
118 
119     EndlessLoop();
120 
121     return 0;
122 }

 

posted @ 2016-09-20 18:35  风马一族  阅读(796)  评论(0编辑  收藏  举报