C语言中输入输出fread和fwrite函数的用法
生活随笔
收集整理的這篇文章主要介紹了
C语言中输入输出fread和fwrite函数的用法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、前言
回顧了一下譚浩強老師的C語言設計書,在文件一章中發現了一些不錯的題目。
二.題目
5.有5個學生,每個學生有3門課程的成績,從鍵盤輸入學生數據(包括學號,姓名,3門課程成績),計算出平均成績,將原有數據和計算出的平均分數存放在磁盤文件stud中。
#include<stdio.h> #include<stdlib.h> typedef struct{int num;//學號 char name[10];//姓名 float scores[3];//3門課成績 float aver;//平均成績 } Student; int main(){void print(Student* p);void initiate(Student* p);float average(float*a,int n);Student students[5];FILE*fp;int i;//循環變量 Student* p;p=students;initiate(p);for(i=0;i<5;i++){p->aver=average(p->scores,3);p++;}print(students);if((fp=fopen("C:\\Users\\17604\\Desktop\\stud.dat","wb"))==NULL){printf("打開文件失敗!!");exit(0); }p=students;for(i=0;i<5;i++){if(fwrite(p,sizeof(Student),1,fp)!=1){printf("寫入文件失敗!!\n");}p++; }fclose(fp);return 0; } void initiate(Student* p){//賦值,從鍵盤輸入學生數據Student*i;int count=0;for(i=p;i<p+5;i++){count++;printf("請輸入%d個學生的學號,姓名,3門課程成績:\n",count);scanf("%d%s%f%f%f",&i->num,i->name,&i->scores[0],&i->scores[1],&i->scores[2]);} }float average(float*a,int n){//求一個學生的平均成績,n為課程數 float sum=0;//總分float*i;for(i=a;i<a+n;i++){sum+=*i; } return sum/n; }void print(Student* p){//打印學生成績表 Student*i;printf("學號 姓名 score1 score2 score3 average:\n");for(i=p;i<p+5;i++){printf("%-5d %-6s %-7.2f %-7.2f %-7.2f %-7.2f\n",i->num,i->name,i->scores[0],i->scores[1],i->scores[2],i->aver);} }6.將第5題stud文件中的學生數據,按平均分進行排序處理,將已排序的學生數據存人一個新文件stu_sort中。
#include<stdio.h> #include<stdlib.h> typedef struct{int num;//學號 char name[10];//姓名 float scores[3];//3門課成績 float aver;//平均成績 } Student; int main(){void sort(Student* p,int n);void print(Student* p);Student students[5];FILE*fp;int i;//循環變量 Student* p;if((fp=fopen("C:\\Users\\17604\\Desktop\\stud.dat","rb"))==NULL){printf("打開文件失敗!!");exit(0); }p=students;for(i=0;i<5;i++){if(fread(p,sizeof(Student),1,fp)!=1){printf("讀入文件失敗!!\n");}p++; }fclose(fp);printf("File:\n");print(students);sort(students,5);printf("\n");printf("\n");print(students);if((fp=fopen("C:\\Users\\17604\\Desktop\\stu_sort.dat","wb"))==NULL){printf("打開文件失敗!!");exit(0); }p=students;for(i=0;i<5;i++){if(fwrite(p,sizeof(Student),1,fp)!=1){printf("寫入文件失敗!!\n");}p++; }fclose(fp);return 0; } void print(Student* p){//打印學生成績表 Student*i;printf("學號 姓名 score1 score2 score3 average:\n");for(i=p;i<p+5;i++){printf("%-5d %-6s %-7.2f %-7.2f %-7.2f %-7.2f\n",i->num,i->name,i->scores[0],i->scores[1],i->scores[2],i->aver);} }void sort(Student* p,int n){//排序 按平均分進行排序 降序 int i;int j;Student temp;for(i=0;i<n-1;i++){for(j=i+1;j<n;j++){if((p+j)->aver>(p+i)->aver){temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp;}}} }7.將第6題已排序的學生成績文件進行插入處理。插入一個學生的3門課程成績,程序先計算新插入學生的平均成績,然后將它按成績高低順序插入,插入后建立一個新文件。
#include<stdio.h> #include<stdlib.h> typedef struct{int num;//學號 char name[10];//姓名 float scores[3];//3門課成績 float aver;//平均成績 } Student; int main(){float average(float*a,int n);void sort(Student* p,int n);void print(Student* p,int n);Student students[10];FILE*fp;int i;//循環變量 Student* p;if((fp=fopen("C:\\Users\\17604\\Desktop\\stu_sort.dat","rb"))==NULL){printf("打開文件失敗!!");exit(0); }p=students;for(i=0;i<5;i++){if(fread(p,sizeof(Student),1,fp)!=1){printf("讀入文件失敗!!\n");}p++; }fclose(fp);printf("Original date:\n");print(students,5);printf("請輸入要插入的學生的學號,姓名,3門課程成績:\n");scanf("%d%s%f%f%f",&p->num,p->name,&p->scores[0],&p->scores[1],&p->scores[2]);p-> aver=average(p->scores,3);sort(students,6);printf("New:\n");print(students,6);if((fp=fopen("C:\\Users\\17604\\Desktop\\stu_.dat","wb"))==NULL){printf("打開文件失敗!!");exit(0); }p=students;for(i=0;i<6;i++){if(fwrite(p,sizeof(Student),1,fp)!=1){printf("寫入文件失敗!!\n");}p++; }fclose(fp);return 0; } void print(Student* p,int n){//打印學生成績表 Student*i;printf("學號 姓名 score1 score2 score3 average:\n");for(i=p;i<p+n;i++){printf("%-5d %-6s %-7.2f %-7.2f %-7.2f %-7.2f\n",i->num,i->name,i->scores[0],i->scores[1],i->scores[2],i->aver);} }void sort(Student* p,int n){//排序 按平均分進行排序 降序 int i;int j;Student temp;for(i=0;i<n-1;i++){for(j=i+1;j<n;j++){if((p+j)->aver>(p+i)->aver){temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp;}}} }float average(float*a,int n){//求一個學生的平均成績,n為課程數 float sum=0;//總分float*i;for(i=a;i<a+n;i++){sum+=*i; } return sum/n; }8.將第7題結果仍存入原有的stu_sort文件而不另建立新文件。
#include<stdio.h> #include<stdlib.h> typedef struct{int num;//學號 char name[10];//姓名 float scores[3];//3門課成績 float aver;//平均成績 } Student; int main(){float average(float*a,int n);void sort(Student* p,int n);void print(Student* p,int n);Student students[10];FILE*fp;int i;//循環變量 Student* p;if((fp=fopen("C:\\Users\\17604\\Desktop\\stu_sort.dat","rb"))==NULL){printf("打開文件失敗!!");exit(0); }p=students;for(i=0;i<5;i++){if(fread(p,sizeof(Student),1,fp)!=1){printf("讀入文件失敗!!\n");}p++; }fclose(fp);printf("Original date:\n");print(students,5);printf("請輸入要插入的學生的學號,姓名,3門課程成績:\n");scanf("%d%s%f%f%f",&p->num,p->name,&p->scores[0],&p->scores[1],&p->scores[2]);p-> aver=average(p->scores,3);sort(students,6);printf("New:\n");print(students,6);if((fp=fopen("C:\\Users\\17604\\Desktop\\stu_sort.dat","wb"))==NULL){printf("打開文件失敗!!");exit(0); }p=students;for(i=0;i<6;i++){if(fwrite(p,sizeof(Student),1,fp)!=1){printf("寫入文件失敗!!\n");}p++; }fclose(fp);return 0; }void print(Student* p,int n){//打印學生成績表 Student*i;printf("學號 姓名 score1 score2 score3 average:\n");for(i=p;i<p+n;i++){printf("%-5d %-6s %-7.2f %-7.2f %-7.2f %-7.2f\n",i->num,i->name,i->scores[0],i->scores[1],i->scores[2],i->aver);} }void sort(Student* p,int n){//排序 按平均分進行排序 降序 int i;int j;Student temp;for(i=0;i<n-1;i++){for(j=i+1;j<n;j++){if((p+j)->aver>(p+i)->aver){temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp;}}} }float average(float*a,int n){//求一個學生的平均成績,n為課程數 float sum=0;//總分float*i;for(i=a;i<a+n;i++){sum+=*i; } return sum/n; }三.后記
自己刷完,還是覺得收獲滿滿的。
總結
以上是生活随笔為你收集整理的C语言中输入输出fread和fwrite函数的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MongoDB未授权访问漏洞记录(端口:
- 下一篇: linux下的ps命令