已知数据文件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;I
{value=b[I]; b[I]=b[j]; b[j]=value;}
}
已知a+b+c=H a+b+e=J a+d+e=K b+c+d=M c+d+e=N 求a=?b=? 数学 2020-05-16 …
已知a=0.1b=0.3c=0.4d=0.5e=0.6f=0.8若使a=c,则a为()c为()若使 数学 2020-06-09 …
五元一次方程的解法0.01349/[e+0.6842(1-e)]=a0.8638/[e+0.565 数学 2020-07-16 …
在实际生产中冷端温度往往不为零摄氏度,而是某一温度t1,实际设备的温度为t,则测得热电势为()a: 其他 2020-07-29 …
已知点A(10,0),B(10,8),C(5,0),D(0,8),E(0,0),(请看补充问题,位 数学 2020-07-30 …
积分的问题∫∫e^(x^2+y^2)∫∫e^(x^2+y^2)=∫(0,π/2)dθ∫(0,R)re 数学 2020-10-31 …
设随机变量服从指数分布,且D(X)=0.2,则E(X)=.设随机变量服从泊松分布,且D(X)=0.3 数学 2020-11-06 …
多元一次方程求解a=0.1072(a+b+c+d+e)b=0.041(a+b+c+d+e)c=0.2 数学 2020-12-14 …
求解多元一次不等式的编程47a-b-c-d-e-f-g>047b-a-c-d-e-f-g>023c- 其他 2020-12-14 …
某校对文明班的评选设计了a,b,c,d,e五个方面的多元评价指标,并通过经验公式来计算各班的综合得分 政治 2020-12-14 …