从存放一些列的整形数据文件中,求最大十位数之和的立方根。并输出到result.dat文件中

题目如下

在这里插入图片描述

代码如下

仅供参考

#include 
#include
#include 

#define IntMax 600  //定义数组最大值

int  *readDat01();
double intSunMax(int *p, int num);
double result(int num);
void writeDat02(double num);

int main()
{	
	int num=0;
	double re;
	num=intSunMax(readDat01(), num);
	printf("%d\n",num);
	re = result(num);
	printf("%f\n", re);
	writeDat02(re);
	
}
int *readDat01()
{
	//获取文件的行数
	FILE *fp = fopen("dat1.dat", "r");  //保证dat1.dat文件与源代码文件在同一文件夹下
	if (fp == NULL)  
	{ 
		printf("Open failed\n");//判断是否有文件
	}
	int flag = 0, count=0;
	while (!feof(fp)) {
		flag = fgetc(fp);
		if (flag == '\n')
			count++;     //求文件的行数
	}
	fclose(fp);



	//获取所有元素
	FILE *fp1 = fopen("dat1.dat", "r");  
	if (fp1 == NULL) 
	{
		printf("Open failed\n");
	}
	int c[IntMax];
	int i;
	//printf("%d", count);
	for (i = 0; i < count; i++)
	{
			fscanf(fp1, "%d", &c[i]);  //把文件里的内容传给数组
			//printf("%d", c[i]);
			//putchar('\n');
	}
	fclose(fp1);

	//排序  冒泡排序
	int t,k,j;
	for (j = 0; j < count; j++) {
		for (k = 0; k < count - 1 - j; k++) {
			if (c[k] < c[k + 1]) {
				t = c[k+1];
				c[k+1] = c[k];
				c[k] = t;
			}
		}
	}
	int m;
	/*
	for (m = 0; m < count; m++)
	{
		printf("%d", c[m]);
		putchar('\n');
	}
	*/
	//获取前十位最大数
	int array[10];
	for (m = 0; m < 10; m++) {
		array[m] = c[m];
	}

	return array;  
}
//求前十位最大数的和
double intSunMax(int *p, int num) {
	num = *p;
	p = p++;
	num += num;
	return num;
}
//求立方跟
double result(int num) {
	double x1, x2, w;
	x1 = num;
	x2 = (2.0*x1 + num / (x1*x1)) / 3.0;
	w = (x2 - x1) / x1;
	if (w < 0)
		w = w * -1;
	while (w >= 1e-6)
	{
		x1 = x2;
		x2 = (2 * x1 + num / (x1*x1)) / 3.0;
		w = (x2 - x1) / x1;
		if (w < 0)
			w = w * -1;

	}
	return x2;
}

//创建restult.dat文件并把值写入
void writeDat02(double sum) {
	FILE *fp = fopen("result.dat", "w");
	if (fp == NULL)
	{
		printf("创建失败\n");
	}
	fprintf(fp, "%f", sum);
	fclose(fp);
}

你可能感兴趣的:(从存放一些列的整形数据文件中,求最大十位数之和的立方根。并输出到result.dat文件中)