计算机三级数据库技术上机考试试题五(附答案)
来源:优易学  2010-1-20 17:28:40   【优易学:中国教育考试门户网】   资料下载   IT书店

已知数据文件IN.dat中存有300个四位数,并已调用读函数Rdata()把这些数存入数组a中,请编写函数primeCal(),其功能是:求出这些四位数中素数的个数count,再求出所有满足此条件的四位数的平均值Ave1以及不满足此条件的四位数的平均值Ave2。最后调用写函数Wdata(),把结果countAve1Ave2输出到OUT.dat文件中。

例如,5591是素数,则该数满足条件计算平均值Ave1,且个数count=count+19812是非素数,则该数不满足条件计算平均值Ave2

注意:部分源程序已经给出。程序中已定义数组a[300],已定义变量countAve1Ave2。请勿改动主函数main()、读函数Rdata()和写函数Wdata()的内容。

#include <stdio.h>

int  a[300], count = 0;

double  Ave1 = 0.0, Ave2 = 0.0;

int isP(int m)

{    int  i;

      for (i=2; i<m; i++)

                if (m%i == 0)

                         return 0;

      return 1;

}

void primeCal()

{

 

}

void Rdata()

{    FILE  *fp;

      int  i;

      fp = fopen("in.dat", "r");

      for (i=0; i<300; i++)

                fscanf(fp, "%d,", &a[i]);

      fclose(fp);

}

void Wdata()

{    FILE  *fp;

      fp = fopen("out.dat", "w");

      fprintf(fp, "%d\n%7.2f\n%7.2f\n", count, Ave1, Ave2);

      fclose(fp);

}

main()

{    Rdata();

      primeCal();

      Wdata();

      printf("count=%d\n满足条件的平均值Ave1=%7.2f\n不满足条件的平均值Ave2=%7.2f\n", count, Ave1, Ave2);

}

试题答案及详解

【审题分析】分析题目可知,本题只要实现PrimeCal()函数的功能即可。PrimeCal()要实现的功能是:求出这些四位数中是素数的个数count,再求出所有满足此条件的四位数的平均值Ave1以及不满足此条件的四位数的平均值Ave2。因此解答本题的关键在于如何判断一个数为素数。

【解题思路】在for循环语句中当自变量1递增到299时,对数组a中的每一个元素a[i]调用函数isP(a[i])来判断元素a[i]是否为素数,如果是素数,则把a[i]加入Ave1上,count自加;否则把a[i]加入Ave2上。当退出循环时,用Ave1除以count就得到所有满足此条件的四位数的平均值,用Ave2除以300-count就得到所有不满足此条件的四位数的平均值。

【参考答案】

void primeCal()

{   int  i;

     for (i=0; i<300; i++)

            if (isP(a[i]))

            {     Ave1 += a[i];

                   count++;

            }

            else

            {     Ave2 += a[i];

            }

     Ave1 = Ave1/count;

     Ave2 = Ave2/(300-count);

}

【易错分析】退出for循环时,变量Ave1的值是所有满足条件的四位数的和;变量Ave2的值是所有不满足条件的四位数的和。

【考点链接】for循环语句、if else 条件判断语句。

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训