//C语言:输入一个数,输出比这个数小的所有素数,并求出个数。
1 #include<conio.h> 2 #include<stdio.h> 3 #include<stdlib.h> 4 #define MAX 100 5 int fun(int lim, int aa[MAX]) 6 { 7 int i, j,k=0; 8 for (i = 2; i <= lim; i++)//罗列每个数 9 { 10 for (j = 2; j < i; j++)//判断是否为质数(素数:只可以被1和本身整除,必须大于1) 11 { 12 if (i%j == 0) break; 13 } 14 if (j >= i) aa[k++] = i; 15 } 16 return k; 17 } 18 void main() 19 { 20 FILE *wf; 21 int limit,i,sum; 22 int aa[MAX]; 23 system("CLS");//清屏 24 printf("输入一个整数:"); 25 scanf("%d",&limit); 26 sum=fun(limit,aa); 27 for(i=0;i<sum;i++) 28 { 29 if(i%10==0&&i!=0) /*每行输出10个数*/ 30 printf(" "); 31 printf("%5d ",aa[i]); 32 } 33 /******************************/ 34 wf=fopen("out.dat","w"); 35 sum=fun(15,aa); 36 for(i=0;i<sum;i++) 37 { 38 if(i%10==0&&i!=0) /*每行输出10个数*/ 39 fprintf(wf," "); 40 fprintf(wf,"%5d ",aa[i]);//向文件中写入。 41 } 42 fclose(wf); 43 /*****************************/ 44 }
另一种方法:使用标志位。切记要进行标志位的复原。
1 #include<conio.h> 2 #include<stdio.h> 3 #include<stdlib.h> 4 #define MAX 100 5 int fun(int lim, int aa[MAX]) 6 { 7 int i,a=0,j=0; 8 while (lim > 1) 9 { 10 for (i = 2; i < lim; i++) 11 { 12 if (lim%i == 0) a = 1; 13 } 14 if (a == 0) 15 { 16 aa[j++] = lim; 17 } 18 a = 0;//切记使用标志位要记得复位。 19 lim--; 20 } 21 return j; 22 } 23 void main() 24 { 25 FILE *wf; 26 int limit,i,sum; 27 int aa[MAX]; 28 system("CLS"); 29 printf("输入一个整数:"); 30 scanf("%d",&limit); 31 sum=fun(limit,aa); 32 for(i=0;i<sum;i++) 33 { 34 if(i%10==0&&i!=0) /*每行输出10个数*/ 35 printf(" "); 36 printf("%5d ",aa[i]); 37 } 38 /******************************/ 39 wf=fopen("out.dat","w"); 40 sum=fun(15,aa); 41 for(i=0;i<sum;i++) 42 { 43 if(i%10==0&&i!=0) /*每行输出10个数*/ 44 fprintf(wf," "); 45 fprintf(wf,"%5d ",aa[i]); 46 } 47 fclose(wf); 48 /*****************************/ 49 }