【风马一族_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 }
每天完成一件事。
不管是为了什么。