建立两个磁盘文件f1.dat和f2.dat,编程序实现以下工作: 1) 从键盘输入20个整数,分别存放在两个磁盘文件中(每个文件中放10个整数); 2) 从f1.dat读入10个数,然后存放到f2.dat文件原有数据的后面; 3) 从f2.dat中读入20个整数,对它们按从小到大的顺序存放到f2.dat中,不保留原来的数据。
时间: 2024-03-05 16:51:24 浏览: 117
好的,以下是一个示例程序,可以实现你的要求:
```c
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
int main() {
int num, i, j;
FILE *f1, *f2;
int arr1[SIZE], arr2[SIZE * 2];
// 从键盘输入20个整数,分别存放在两个磁盘文件中(每个文件中放10个整数)
f1 = fopen("f1.dat", "wb");
f2 = fopen("f2.dat", "wb");
printf("请输入20个整数:\n");
for (i = 0; i < SIZE * 2; i++) {
scanf("%d", &num);
if (i < SIZE) {
fwrite(&num, sizeof(int), 1, f1);
}
fwrite(&num, sizeof(int), 1, f2);
}
fclose(f1);
fclose(f2);
// 从f1.dat读入10个数,然后存放到f2.dat文件原有数据的后面
f1 = fopen("f1.dat", "rb");
f2 = fopen("f2.dat", "ab");
printf("f1.dat文件中的前10个数已经存放到f2.dat文件中,请打开f2.dat文件查看!\n");
for (i = 0; i < SIZE; i++) {
fread(&num, sizeof(int), 1, f1);
fwrite(&num, sizeof(int), 1, f2);
}
fclose(f1);
fclose(f2);
// 从f2.dat中读入20个整数,对它们按从小到大的顺序存放到f2.dat中,不保留原来的数据
f2 = fopen("f2.dat", "rb+");
printf("f2.dat文件中的20个数按照从小到大的顺序存放成功,请打开f2.dat文件查看!\n");
for (i = 0; i < SIZE * 2; i++) {
fread(&arr2[i], sizeof(int), 1, f2);
}
for (i = 0; i < SIZE * 2 - 1; i++) {
for (j = i + 1; j < SIZE * 2; j++) {
if (arr2[i] > arr2[j]) {
int tmp = arr2[i];
arr2[i] = arr2[j];
arr2[j] = tmp;
}
}
}
fseek(f2, 0, SEEK_SET);
for (i = 0; i < SIZE * 2; i++) {
fwrite(&arr2[i], sizeof(int), 1, f2);
}
fclose(f2);
return 0;
}
```
这个程序的大致思路是:先创建两个文件f1.dat和f2.dat,从键盘输入20个整数,分别存放在两个磁盘文件中。然后从f1.dat读入前10个数,存放到f2.dat文件原有数据的后面。最后从f2.dat中读入20个整数,对它们按从小到大的顺序存放到f2.dat中,不保留原来的数据。
阅读全文