data01.dat存放的是一系列整型数据,求data01.dat中的最大十个数的和的立方根(先求十个数的和再求立方根),求得的结果显示在屏幕上,并且将最大的十个数与所求得的结果输出到result.dat中。提示:先对data01.dat中的数据进行排序,然后再进行计算。要求:
1)使用函数double intSumMax(int *p,int num)
{
}
来实现,并把该函数放在头文件ISmax.h中以便在主函数中调用该函数.
2)主函数中使用的数组使用动态数组来创建.
3)result.dat在程序的执行过程中创建。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define IntMax 600
int* readDat01();
double intSumMax(int* p, int num);
double result(int num);
void writeDat02(double num);
int main()
{
int num = 0;
double re;
num = intSumMax(readDat01(), num);
printf("%d\n", re);
writeDat02(re);
}
int* readDat01()
{
FILE* fp = fopen("dat01.dat", "r");
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("dat01.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(fp);
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 intSumMax(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;
}
void writeDat02(double sum)
{
FILE* fp = fopen("result.dat", "w");
if (fp == NULL)
{
printf("creat failed\n");
}
fprintf(fp, "%f", sum);
fclose(fp);
}