已知数据文件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.租赁(lìn)浸渍(zì)椽子(chuán)长歌当哭( 语文 2020-05-16 …
图形编号(1)面积1,编号2面积3,编号3面积6,编号4面积10第n个编号图形面积是什么用代数式表 数学 2020-05-22 …
从m中任取n个数编写一个程序需要一个函数,它的功能是从m个数中任意取n个数,并且对于取出的数能索引 其他 2020-06-28 …
一个有N个整数组成的数组,写一个函数,找出数组中最大的K个数例如:N=1000000K=10用C+ 其他 2020-07-10 …
java编程问题描述给定一个整数数列,数列中连续相同的最长整数序列算成一段,问数列中共有多少段?输 其他 2020-07-17 …
一个n位正整数,其各位数的n次方之和等于这个数,称这个数为Armstrong数.例如,153=1^ 其他 2020-07-18 …
用C++编写程序,越简单越好,循环结构判断第n个斐波那契数列能否被3整除给定斐波那契数列为:F(0 其他 2020-07-23 …
计算机VFP紧急求助3.Fibonacci数列计算方法如下:F(1)=1,F(2)=1,F(n)= 数学 2020-07-23 …
4.编写一个递归函数,计算F(n)=F(n-1)+F(n-2)其中f1=1,f2=1 数学 2020-07-23 …
1.任意输入10数,编程输出正数个数,正数和,负数个数,负数和.2.编程输出S=1!+2!+3!+ 其他 2020-07-30 …