)用dat1.dat中的前100个数据给数组int a[100]赋值,并在屏幕上输出(每行10个元素)。 2)使用函数 double isaver(int *p,int num) { } 求数组a中所有数组元素平均值。 3)把该函数放在头文件ISaver.h中以便在主函数中调用该函数。把所有小于平均值的数组元素(每行10个元素)和小于平均值的数组元素个数输出出来。(在屏幕上和数据文件d:\dat6.dat中同时输出)
时间: 2024-02-09 09:13:31 浏览: 62
好的,我理解了你的问题。以下是代码实现:
1. 给数组赋值并输出:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
int main() {
FILE *fp;
int a[MAX_SIZE];
int i, j;
fp = fopen("dat1.dat", "r");
if (fp == NULL) {
perror("Error opening file");
return EXIT_FAILURE;
}
for (i = 0; i < 100; i++) {
fscanf(fp, "%d", &a[i]);
}
fclose(fp);
for (i = 0; i < 100; i++) {
printf("%d ", a[i]);
if ((i + 1) % 10 == 0) {
printf("\n");
}
}
return 0;
}
```
2. 计算平均值的函数:
```
double isaver(int *p, int num) {
int i;
double sum = 0;
for (i = 0; i < num; i++) {
sum += *(p + i);
}
return sum / num;
}
```
3. 头文件 ISaver.h:
```
#ifndef _ISAVER_H_
#define _ISAVER_H_
double isaver(int *p, int num);
#endif
```
在主程序中调用该函数:
```
#include <stdio.h>
#include <stdlib.h>
#include "ISaver.h"
#define MAX_SIZE 100
int main() {
FILE *fp1, *fp2;
int a[MAX_SIZE];
int i, j, count = 0;
double avg;
fp1 = fopen("dat1.dat", "r");
if (fp1 == NULL) {
perror("Error opening file");
return EXIT_FAILURE;
}
for (i = 0; i < 100; i++) {
fscanf(fp1, "%d", &a[i]);
}
fclose(fp1);
avg = isaver(a, MAX_SIZE);
fp2 = fopen("dat6.dat", "w");
if (fp2 == NULL) {
perror("Error opening file");
return EXIT_FAILURE;
}
for (i = 0; i < 100; i++) {
if (a[i] < avg) {
count++;
fprintf(fp2, "%d ", a[i]);
if (count % 10 == 0) {
fprintf(fp2, "\n");
}
}
}
fclose(fp2);
printf("Average: %.2f\n", avg);
printf("Elements smaller than average:\n");
count = 0;
for (i = 0; i < 100; i++) {
if (a[i] < avg) {
count++;
printf("%d ", a[i]);
if (count % 10 == 0) {
printf("\n");
}
}
}
printf("\nNumber of elements smaller than average: %d\n", count);
return 0;
}
```
注意,我们使用了头文件 ISaver.h,并且在编译时需要同时编译包含该头文件的 C 文件(即 isaver.c)和主程序文件。如果使用 GCC 编译器,则可以使用以下命令:
```
gcc -o main main.c isaver.c
```
其中,main.c 是主程序文件,isaver.c 是包含 isaver 函数的 C 文件。
阅读全文