已知数据文件IN58.DAT中存有300个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函njsValue(),其功能是:求出这些4位数是素数的个数cnt,再把所有满足此条件的4位数依次存入数组 b中,然后对数组b的4位数按从小到大

admin2009-02-24  26

问题 已知数据文件IN58.DAT中存有300个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函njsValue(),其功能是:求出这些4位数是素数的个数cnt,再把所有满足此条件的4位数依次存入数组 b中,然后对数组b的4位数按从小到大的顺序进行排序,最后调用函数writeDat()把数组b中的数输出到
OUT58.DAT文件中。
   例如:5591是素数,则该数满足条件,存入数组b中,且个数cnt=cnt+1。
   9812是非素数,则该数不满足条件,忽略。
   注意:部分源程序已给出。
   程序中已定义数组:a[300],b[300],已定义变量:cnt。
   请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。
   试题程序:
       #include<stdio.h>
       int a[300],b[300],cnt=0;

       int isP(int m)
       {
           int i;
           for(i=2;i<m;i++)
              if(m%i==0)  return 0;
           return 1;
      jsValue()
      {

      }
      main ( )
      {
         int i;
         readDat ();
         jsValue();
         writeDat ();
         printf ("cnt=~/od\n",cnt);
         for (i=0; i<cnt; i++)
             printf("b[%d]=%d\n",i,b);
     }

     readDat ( )
    {
        FILE *fp;
        int i;
        fp=fopen ("IN58. DAT", "r");
        for (i=0; i<300; i++)
            fscanf (fp, "%d, ’", &a );
        fctose(fp);
    }
    writeDat ()
    {
        FILE *fp;
        int i;
        fp=fopen ( "OUT58. DAT", "w" );
        fprintf ( fp, "%d\n", cnt);
        for (i=0; i<cnt; i++)
            fprintf(fp, "%d\n",b);
        fclose (fp);
   }

选项

答案jsValue ( ) { int i, j, value; for (i=0; i<300; i++) if (isP (a [ii ) ) /*如果该数为素数,则将该数存入数组b中*/ { b[cnt]=a[i]; } for (i=0; i<cnt-1; i++) /*对数组b的4位数按从小到大的顺序进行排序*/ for (j=i+l; j<cnt; j++) if (b [ii >b[j ] ) { value=b [i]; b[i]=b[j]; b [j] =value; } }

解析 本题考查的知识点如下:
   (1)循环的嵌套。
   (2)数据的排序。
   在本题中,已给出了判断素数的函数void isP(int m),只需将数代入进行判断即可。将素数存入数组b,再对数组b中的数进行排序。排序采用“选择排序法”——第一次从第一个数据开始和所有后面的数据进行比较,与比它大(小)的数据交换位置,将数据中最大(小)的数交换到最前面。第二次从第二个数据开始与后面的数据进行比较,将本次比较中最大(小)的数据交换至第二个位置,直至最后一个数据。以此类推,则可完成题目的要求。
转载请注明原文地址:https://jikaoti.com/ti/wfp7FFFM
0

随机试题
最新回复(0)