请编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。 例如,若输入:17,则应输出: 4 6 8 9 10 12 14 15 16。 注意:部分源程序在文件PROG1.C中。

admin2018-09-27  17

问题 请编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。
    例如,若输入:17,则应输出:
    4 6 8 9 10 12 14 15 16。
    注意:部分源程序在文件PROG1.C中。
    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
1  #include<stdio.h>
2  void fun(int m,int *k,int xx[])
3  {
4
5  }
6  main()
7  {
8  int m,n,zz[100];
9  void NONO();
10  printf(’’\nPlease enter aninteger number between 10 and100:’’);
11  scanf(’’%d’’,&n);
12  fun(n,&m,zz);
13  printf(’’\n\nThere are%d nonprime numbers less than%d:’’,m,n);
14    for(n=0;  n<m;  n++)
15    printf(’’\n%4d’’,zz[n]);
16  NONO();
17  }
18  void NONO()
19  {
20  /*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/
21  int m,n,zz[100];
22  FILE *rf,*wf;
23  rf=fopen(’’in.dat’’,’’r’’);
24  wf=fopen(’’out.dat’’,’’w’’);
25  fscanf(rf,’’%d’’,&n);
26  fun(n,&m,zz);
27  fprintf(wf, ’’%d\n%d\n’’,m,n);
28  for(n=0;n<m; n++)
29  fprintf(wf, ’’%d\n’’,zz[n]);
30  fclose(rf);
31  fclose(wf);
32  }

选项

答案1 int i,j; 2 int t=0; //初始化数组个数 3 for(i=2,i<m;i++) //循环判断小于n的数是否为素数 4 { j=2; 5 while(j<i) 6 { if(i%j==0) //如果i不是素数 7 { xx[t]=i; 8 t++; 9 break; 10 } 11 j++;} 12 *k=t; }

解析 该程序功能是将所有大于1小于整数m的非素数存入xx所指数组中。求素数的常用方法是:从2到m-1去除m,如果中间的任何数被整除,则不是素数。
    (1)根据求素数的方法判断数i是否为素数。
    (2)把不是素数的数留下来,其方法是:如果该数是素数则不处理;如果不是素数则放到数组xx中,并且把数组的下标加1,为下一个不是素数的数放在数组中做准备。
    (3)返回个数,把xx数组中已经写入的数的个数返回即可,即把数组xx的最大下标加1返回即可。
转载请注明原文地址:https://kaotiyun.com/show/H8xp777K
0

最新回复(0)