1.要求设计一个程序,键盘输入一个 n 值(如,6。本程序要求 n 值不超过 65),程序将显示斐波那契数列的前 n 项数列值同时还要将前 n 项数列值写入一个二进制文件保存,该二进制文件名指定为 Fibonacci.dat。上传源程序文件。
2 打开上一题建立的二进制文件 Fibonacci.dat,从中读取数据送屏幕上显示。上传源程序文件。
能帮我看看哪错了吗?
主要是fread和fwrite函数的使用不当,修改如下:
参考资料:
C 库函数 – fread() | 菜鸟教程
C 库函数 – fwrite() | 菜鸟教程
#include <stdio.h>
#include <stdlib.h>
#define N 65
double Fibon(int n);
int readFiboFile(int j);
int main(void){
int i,j;
FILE * pf_b = NULL;
// char new_file_name[30]="二进制_file.data";
char new_file_name[30]="二进制_file.data";
double num[65];
pf_b=fopen(new_file_name,"wb");
if(pf_b==NULL){
printf("\n\n\t open %s fail.\n\n",new_file_name);
return 0;
}
do{
printf("请输入你想查看前几项数列值(不大于65):");
scanf("%d",&j);
}while(j>66||j<0);
int k=0;
for(i=1;i<=j;i++){
printf("%.0lf ",Fibon(i));
num[k]=Fibon(i);
k++;
}
// printf("k=%d\n",k);
//从存储斐波那契数的数组的起始位置读取k个double长度的数据到文件中
//fwrite第一个参数是要写入文件的元素数组指针,第二个参数是要写入的元素的大小,第三个元素是要写入元素的个数,第四个参数是文件指针
fwrite(&num[0],sizeof(double),k,pf_b);
fclose(pf_b);
// scanf("%d",&i);
readFiboFile(j);
return 0;
}
int readFiboFile(int n){
FILE * pf_c =NULL, *pf_b=NULL;
// char num[N];
double num[N];
int count=0,i,j;
char read_file_name[30]="二进制_file.data";
pf_b = fopen(read_file_name,"rb");
if(pf_b==NULL){
printf("\n\n\t Open %s fail. \n\n",read_file_name);
return 0;
}
// fwrite(&num[65],60,1,pf_b);
i=0;
while(feof(pf_b)==0){
//从文件读取一个斐波那契数读入数组当前位置
//fread函数第一个参数是要存储数据的地址,第二个是一次读取的元素的大小,第三个参数是要读取几个元素,第四个参数是文件指针
fread(&num[i],sizeof(double),1,pf_b);
i++;
}
// printf("\ni=%d\n",i);
if(fclose(pf_b)!=0){
printf("\n Close fail. \n");
}
printf("\n读取的信息为:\n");
for(j=0;j<n;j++){
printf("%.0lf ",num[j]);
}
}
double Fibon(int n){
if(n==1 || n==2){
return 1;
}else{
return Fibon(n-1)+Fibon(n-2);
}
}