早教吧 育儿知识 作业答案 考试题库 百科 知识分享
早教吧考试题库频道 --> 计算机类考试 -->计算机三级 -->

已知数据文件IN.DAT中存有300个四位数,并已调用读函数READDAT() 把这些数存入数组a中。请编制函数

题目

已知数据文件IN.DAT中存有300个四位数,并已调用读函数READDAT() 把这些数存入数组a中。请编制函数Svalue(),其功能是:求出这些四位数中素数的个数cnt,再把所有满足此条件的四位数依次存入数组b中,然后将数组b中的四位数按从小到大的顺序排序,最后调用写函数writeDat(),把结果输出到文件OUT.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;}void jsValue(){ }void ReadDat(){ FILE *fp; int i; fp = fopen("in.dat", "r"); for (i=0; i<300; i++) fscanf(fp, "%d,", &a[i]); fclose(fp);}void writeDat(){ FILE *fp; int i; fp = fopen("out.dat", "w"); fprintf(fp, "%d\n", cnt); for (i=0; i<cnt; i++) fprintf(fp, "%d\n", b[i]); fclose(fp);}main(){ int i; ReadDat(); jsValue(); writeDat(); printf("cnt=%d\n", cnt); for (i=0; i<cnt; i++) printf("b[%d]=%d\n", i, b[i]);}

参考答案
正确答案:参考试题解析
【解析及答案】本题的程序属于按条件查找特定类型的数字的程序,考核的知识点为判断素数和排序算法。
本题的解题思路是:逐个判断数组a中的元素是否为素数,如果是素数,则将其存入数组b中,最后对数组b进行升序排列。计算方法是:每次选定一个位置的元素,然后将该元素与该元素后面的所有元素进行比较,如果该元素比其后面的元素大,则两者交换,较比完成后,此位置的元素比其后面所有的元素都小;比较一直进行到所有元素均被访问后结束。在该程序中已经给出一个函数 isP()。通过分析可知,该函数的功能是判断参数m是否为素数,若是素数,则返回1;若不是,则返回0。在解答本题时,若题目中提供了此类函数,就可以直接调用,为编程提供便利。
程序的流程是:首先调用函数ReadDat() 读入数据,然后调用函数jsValue() 对数据进行处理,最后由函数writeDat() 将结果写回到文件out.dat中。在函数jsValue() 中,首先通过一个for循环来判断a[i] 是否为素数,若是素数,则把a[i] 存入数组b中,且记录个数的变量cnt的值将增加1,然后通过两重for循环将数组b中的元素进行升序排列,函数结束。
void jsvalue() /*标准答案*/
{int j,I,value;
for(I=0;I<300;I++)
if(isP(a[I])) {b[cnt]=a[I];cnt++;}
for(I=0;Ifor(j=I+1;jif(b[I]>b[j])
{value=b[I]; b[I]=b[j]; b[j]=value;}
}
看了已知数据文件IN.DAT中存有...的网友还看了以下: