哈喽!这里是一只派大鑫,不是派大星。本着基础不牢,地动山摇的学习态度,从基础的C语言语法讲到算法再到更高级的语法及框架的学习。更好地让同样热爱编程(或是应付期末考试 狗头.jpg)的大家能够在学习阶段找到好的方法、路线,让天下没有难学的程序(只有秃头的程序员 2333),学会程序和算法,走遍天下都不怕!
今天写真题的时候,解决了好久的疑惑,对的没错 就是文件操作!
早年真题试卷最后大题几乎都是手写文件的一些操作程序,虽然文件操作并不难,但是真正手写出来感觉又是很不一样的。
来看这样一道题:
选自中国海洋大学研究生入学考试2013年真题,该题目在早期期末题也出现过!懂的都懂
题目:
编写一个学生成绩管理程序。有M个(M=50),每个学生有N门(N=3)课程的成绩。
学生信息包括学号、姓名、3门课的成绩及平均成绩
(1)定义结构体类型、各个变量、结构体数组等
(2)编写read函数,用来输入学生信息并存入学生信息文件中
(3)编写average函数从文件中读取数据至结构体数组中,并求出每位同学的平均成绩
(4)编写write函数从文件中读取数据至结构体数组中,并求出每位同学的平均成绩
(5)编写主函数调用以上各函数
简单分析一下,输入是输入到文件中去,并不是直接输入到结构体数组中!
所以两个函数分别打开操作关闭函数。
使用fscanf和fprintf来进行文件的读取和输入比较方便,能直接对应格式~
所以给出我的参考代码:
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
using namespace std;
#define ans 50
struct student{
int num;
double s1,s2,s3,avg;
}stu[ans];
void write(){
printf("学号\t成绩1\t成绩2\t成绩3\t平均成绩:\n");
for(int i=1;i<=ans;i++){
printf("%d\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",
stu[i].num,stu[i].s1,stu[i].s2,stu[i].s3,stu[i].avg);
}
}
void read(){
FILE *fp;
if((fp = fopen("E:\\ftest.txt","w"))==NULL){
printf("can not open file\n");
}
int n; double a,b,c,p;
for(int i=1;i<=ans;i++){
scanf("%d%lf%lf%lf",&n,&a,&b,&c);
p = (a+b+c)/3.0;
fprintf(fp,"%d %lf %lf %lf %lf\n",n,a,b,c,p);
}
fclose(fp);
}
void average(){
FILE *fp;
if((fp = fopen("E:\\ftest.txt","r"))==NULL){
printf("can not open file\n");
}
for(int i=1;i<=ans;i++){
fscanf(fp,"%d %lf %lf %lf %lf",
&stu[i].num,&stu[i].s1,&stu[i].s2,&stu[i].s3,&stu[i].avg);
}
fclose(fp);
}
int main()
{
read();
average();
write();
return 0;
}
是不是一看就懂了! 看懂固然重要,但是实践才是检验真理的唯一标准,不妨自己动手试一试~