已知数据文件in.dat中存有300个四位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出所有这些四位数是素数的个数cnt,再把所有满足此条件的四位数依次存入数组b中,然后对数组b的四位数按从小到大的顺序进行排序。最后main()函数调用写函数writeDat()把数组b中的数输出到out.dat文件中。
例如:5591是素数,则该数满足条件存入数组b中,且个数cnt=cnt+1。
9812是非素数,则该数不满足条件忽略。
注意:部分源程序存在test.c文件中。
程序中已定义数组:a[300],b[300],已定义变量:cnt
请勿改动数据文件in.dat中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
#include <stdio.h> //include语句说明各程序中包含vc6.0中的标准输入输出库函数stdio.h
int a[300],b[300],cnt=0; //定义全局数组a[300],b[300]和变量cnt,并且对变量cnt赋初值0
void readDat(); //函数readDat()说明语句
void writeDat(); //函数writeDat()说明语句
void jsValue(); //函数jsValue()说明语句
int isP (int m) //函数isP(m)判断m是否为素数,如果是素数,返回1,否则返回0
int i; //定义变量i
for (i=2; i<m; i++) //循环变量i从2依次递增,直到i等于或大于m退出循环
if (m%i==0)
return 0; //如果m能被i整除,返回0
return 1; //否则返回1
void jsValue()
void main()
int i; //定义变量i
readDat(); //调用readDat()函数从数据文件in.dat中读取300个四位数存入数组a中
jsValue(); //调用函数jsValue()实现题目所要求的功能
writeDat(); //调用writeDat()函数把计算结果写入到数组b中的数输出到out.dat文件
printf("cnt=%d\n",cnt); //在屏幕上显示素数的个数
for (i=0; i<cnt; i++)
printf("b[%d]=%d\n",i,b[i]); //在屏幕上显示数组b中的所有元素
void readDat()
FILE *fp; //定义文件指针变量fp
int i; //定义整型变量i
fp=fopen("in.dat","r"); //以只读的方式打开文件in.dat,并用fp指向这个文件
for (i=0; i<300; i++)
fscanf( fp,"%d,",%a[i]); //从文件in.dat中读取300个四位数到数组a中
fclose(fp); //关闭文件in.dat
void writeDat()
FILE *fp; //定义文件指针变量fp
int i; //定义整型变量i
fp=fopen("out.dat","w"); //以只写的方式打开文件out.dat,并用fp指向这个文件
fprintf(fp, "%d\n",cnt); //把素数的个数写入到文件out.dat
for (i=0; i<cnt; i++)
fprintf(fp,"%d\n",b[i]); //把数组b中的所有元素写入到文件out.dat
fclose (fp); //关闭文件out.dat
参考答案:int i,j,tmp; //定义整型变量i,j,tmp
for (i=0; i<300; i++) //循环变量i从0依次递增到299
if (isP(a[i])) b[cnt++]=a[i]; //如果数组元素a[i]是素数,则把a[i]赋给b[cnt],同时数组下标变量cnt加1
for (i=0; i<cnt; i++) //循环变量i从0开始依次递增,直到其值等于cnt
{
for(j=i+1; j<cnt; j++) //循环变量j从i+1开始依次递增,直到其值等于cnt
{
if(b[i]>b[j]) //如果数组元素b[i]大于b[j],则进行互换
{
tmp=b[j]; //把b[j]的值赋给变量tmp
b[j]=b[i]; //把b[i]的值赋给b[j]
b[i]=tmp; //把变量tmp的值赋给b[i]
}
}
}
解析: 求素数的个数,存入数组,按从小到大的顺序排序。
[解题思路]
①首先定义两个循环变量循环i、j和一个用于数据交换的整型变量tmp。
②通过for循环依次读取数组中的300个数,其中,循环变量i从0开始每次加1,直到1<300停止循环;在每次循环中判断a[i]是否是素数,如果是素数,则把a[i]的值赋给数组b[cnt],同时数组下标变量cnt值加1。
③在退出循环后,用两个for循环对数组b[]中元素进行两两比较,实现数组元素从小到大的排序,比较过程中通过整型变量tmp实现两个数的交换。