已知数据文件in.dat中存有300个四位数,请编制一函数jsValue(),其功能是:求出所有这些四位数是素数的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及不满足此条件的四位数平均值pjz2。
那个数据文件是怎么回事,在哪建?里面的300个数据要用随机数填充吗?还有数据文件建好后怎么引用到C语言程序中!请高手帮忙写一个完整的,能运行的程序!(包括数据文件)本人将不胜感激!急!!!
第1个回答 2009-08-30
#include <stdio.h>
#include <math.h>
#define DEBUG //条件编译开关,为了程序的保险起见,如果程序无误则删除该条语句就OK
int Data[300]; //存放文件中的300个整数
int cnt = 0; //素数个数
float pjz1/*素数平均值*/, pjz2/*非素数平均值*/;
void readData(char* filename,int Data[]);
void writeData(char* filename);
void jsValue();
void main()
{
char filename[] = "d:\\in.dat"; //可以根据具体情况自己写路径
writeData(filename);
readData(filename,Data);
jsValue();
}
void readData(char* filename,int Data[])
{
FILE *fpr;
int i;
fpr = fopen(filename,"r");
for(i = 0; i < 300; i++)
{
fscanf(fpr,"%d",&Data[i]); //格式化读文件
}
fclose(fpr);
}
void writeData(char* filename) //写入300个四位数(1000-1299)到in.dat文件中
{
FILE *fpw;
int i;
fpw = fopen(filename,"w");
for(i = 1000; i <= 1299; i++)
{
fprintf(fpw,"%d\n",i); //格式化写文件
}
fclose(fpw);
}
void jsValue()
{
long sumAll = 0/*所有数的和*/, sumPrim = 0/*所有素数的和*/;
int k, m, i, j;
for(i = 0; i < 300; i++) //判断是否为素数:如果整数k在2~sqrt(k)之间没有因子,则k一定是素数
{
k = Data[i];
m = (int)sqrt(k);
sumAll += k;
for(j = 2; j <= m; j++)
{
if(k % j == 0) //不是素数
break;
}
if(j > m) //是素数
{
#ifdef DEBUG //如果DEBUG被宏定义,则编译下面语句,下同(检查素数判断是否正确)
printf("%d\n",k);
#else
#endif //如果DEBUG没被宏定义,则不编译
sumPrim += k;
cnt++;
}
}
pjz1 = (float)sumPrim / cnt;
pjz2 = (float)(sumAll - sumPrim) / (300 - cnt) ;
#ifdef DEBUG
printf("cnt = %d\nsumAll = %ld\nsumPrim = %ld\npjz1 = %f\npjz2 = %f\n",cnt, sumAll, sumPrim, pjz1, pjz2); //检查计算是否正确
#else
#endif
}本回答被提问者采纳
#include <math.h>
#define DEBUG //条件编译开关,为了程序的保险起见,如果程序无误则删除该条语句就OK
int Data[300]; //存放文件中的300个整数
int cnt = 0; //素数个数
float pjz1/*素数平均值*/, pjz2/*非素数平均值*/;
void readData(char* filename,int Data[]);
void writeData(char* filename);
void jsValue();
void main()
{
char filename[] = "d:\\in.dat"; //可以根据具体情况自己写路径
writeData(filename);
readData(filename,Data);
jsValue();
}
void readData(char* filename,int Data[])
{
FILE *fpr;
int i;
fpr = fopen(filename,"r");
for(i = 0; i < 300; i++)
{
fscanf(fpr,"%d",&Data[i]); //格式化读文件
}
fclose(fpr);
}
void writeData(char* filename) //写入300个四位数(1000-1299)到in.dat文件中
{
FILE *fpw;
int i;
fpw = fopen(filename,"w");
for(i = 1000; i <= 1299; i++)
{
fprintf(fpw,"%d\n",i); //格式化写文件
}
fclose(fpw);
}
void jsValue()
{
long sumAll = 0/*所有数的和*/, sumPrim = 0/*所有素数的和*/;
int k, m, i, j;
for(i = 0; i < 300; i++) //判断是否为素数:如果整数k在2~sqrt(k)之间没有因子,则k一定是素数
{
k = Data[i];
m = (int)sqrt(k);
sumAll += k;
for(j = 2; j <= m; j++)
{
if(k % j == 0) //不是素数
break;
}
if(j > m) //是素数
{
#ifdef DEBUG //如果DEBUG被宏定义,则编译下面语句,下同(检查素数判断是否正确)
printf("%d\n",k);
#else
#endif //如果DEBUG没被宏定义,则不编译
sumPrim += k;
cnt++;
}
}
pjz1 = (float)sumPrim / cnt;
pjz2 = (float)(sumAll - sumPrim) / (300 - cnt) ;
#ifdef DEBUG
printf("cnt = %d\nsumAll = %ld\nsumPrim = %ld\npjz1 = %f\npjz2 = %f\n",cnt, sumAll, sumPrim, pjz1, pjz2); //检查计算是否正确
#else
#endif
}本回答被提问者采纳