《C语言及程序设计》实践参考——用文本文件保存的学生名单

返回:贺老师课程教学链接

【项目2-用文本文件保存的学生名单】
文件score.dat中保存的是若干名学生的姓名和C语言课、高数和英语成绩。
(1)定义学生结构体,其中包含姓名、C++课、高数和英语成绩及总分数据成员。

//定义学生结构体
typedef struct
{
    string name;
    double cpp;
    double math;
    double english;
    double total;
}Student

(2)用对象数组进行存储学生的成绩,读入成绩并计算总分;将总分高于平均总分且没挂科的同学的信息保存到文件pass_score.dat中。

int main( ){
    Student stud[200],t; //stud[200]为保存数据的对象数组
    //从文件score.dat中读入数据,保存到对象数组中

    //总分高于平均总分且没挂科的同学的信息保存到文件pass_score.dat中
    return 0;
}

[参考解答]

#include <stdio.h>
#include <stdlib.h>
typedef struct
{
    char num[13];
    char name[10];
    double c;
    double math;
    double english;
    double total;
} Student;
int pass(Student); //判断一个学生的各门课是否通过
int main( )
{
    Student stud[200]; //stud[200]为保存数据的对象数组
    int stu_num=0, total_sum=0, i=0;
    //从文件score.dat中读入数据,保存到对象数组中
    FILE *fp;
    if((fp=fopen("score.dat","r"))==NULL)
    {
        printf("数据文件不存在!\n");
        exit(1);
    }
    while(!feof(fp))
    {
        fscanf(fp, "%s %s", stud[i].num, stud[i].name);
        fscanf(fp, "%lf %lf %lf", &stud[i].c,&stud[i].math, &stud[i].english);
        stud[i].total=stud[i].c+stud[i].math+stud[i].english;
        stu_num++;   //在读入数据过程中,记录下来具体的学生人数和总分和
        total_sum+=stud[i].total;
        i++;
    }
    fclose(fp);

    //总分高于平均总分且没挂科的同学的信息保存到文件pass_score.dat中
    if(stu_num>0)
    {
        double total_avg = total_sum / stu_num;
        fp=fopen("pass_score.dat","w");
        if(!fp)
        {
            printf("无法输出到文件!\n");
            exit(1);
        }

        for(i=0; i<stu_num; i++)
        {
            if(stud[i].total>total_avg&&pass(stud[i]))
            {
                fprintf(fp, "%s\t%s\t", stud[i].num, stud[i].name);
                fprintf(fp, "%.2lf\t%.2lf\t%.2lf\t", stud[i].c,stud[i].math, stud[i].english);
                fprintf(fp, "%.2lf\n", stud[i].total);
            }
        }
        fclose(fp);
        printf("请到文件pass_score.dat中查看名单\n");
    }
    return 0;
}

int pass(Student s) //判断一个学生的各门课是否通过
{
    int p=0;
    if(s.c>=60 &&s.english>=60&&s.math>=60)
        p=1;
    return p;
}
时间: 2024-09-19 07:27:38

《C语言及程序设计》实践参考——用文本文件保存的学生名单的相关文章

C++语言实践参考——用文件保存的学生名单

[项目-用文件保存的学生名单] 文件score.dat中保存的是若干名学生的姓名和C++课.高数和英语成绩.(1)定义学生类,其中包含姓名.C++课.高数和英语成绩及总分数据成员. //定义学生类 class Student{ public: //声明必要的成员函数 private: string name; double cpp; double math; double english; double total; static int stu_num; //学生人数,处理为类的静态成员合适

c#-C#语言文本框里怎么计算文本文件中所有学生成绩的平均数?有没有简单的办法?

问题描述 C#语言文本框里怎么计算文本文件中所有学生成绩的平均数?有没有简单的办法? C#语言文本框里怎么计算文本文件中所有学生成绩的平均数?有没有简单的办法? 解决方案 文本文件的格式不知道,假设是回车分行,每行一个成绩,可以这么算 int avg = File.ReadAllLines("1.txt").Select(x => int.Parse(x)).Average(); 解决方案二: int avg = File.ReadAllLines("1.txt&quo

《C++语言基础》实践参考—— 链表类

返回:贺老师课程教学链接  项目要求 [项目 - 链表类]动态链表也是程序设计中的一种非常有用的数据结构.可以说,是否能够理解有关操作的原理,决定了你是否有资格称为"科班"出身.在后续的专业基础课中,相关的内容还会从不同的角度,反复地认识,反复地实践.不过,在现阶段多些体验,也是很有必要的了.(1)阅读下面的程序,回顾一下动态链表,阅读程序过程中,请用笔画一画形成链表的过程中指针值的变化. #include <iostream> using namespace std; s

《C++语言基础》实践参考——小玩文件

返回:贺老师课程教学链接  项目要求 [项目1 - 小玩文件](1)下面程序的功能是统计文本文件abc.txt中的字符个数,请填空将程序补充完整. #include <iostream> #include <cstdlib> #include _____________ // (1) using namespace std; int main() { fstream file; file.open("abc.txt", _________); // (2) if

《C++语言基础》实践参考——旱冰场造价

返回:贺老师课程教学链接 [项目1 - 旱冰场造价] 有一个圆形的旱冰场地,场地内抹水泥,造价为每平方米M元,围栏用木条围成,每米造价N元,输入旱冰场半径,用程序计算出其造价. 一级提示: 先定义类,确定其数据成员和成员函数.在这里要定义的旱冰场类,实际我们只关心其面积和周长,根据面积计算场地内抹水泥的造价,根据周长计算围栏的造价.有了类的定义,在main函数中定义该类对象,调用成员函数即可以完成求解.二级提示: 实际上,对于旱冰场,我们只关心它就是一个圆.这就是设计中抓住了本质.于是,设计一个

《C++语言基础》实践参考——指向学生类的指针

返回:贺老师课程教学链接 [项目4-指向学生类的指针] 设计一个学生类Student,数据成员包括学号(num)和成绩(score),成员函数根据需要自行设计(建议配备需要的set.get函数,以及必要的输入或输出,给出的代码中也可以找到需要成员函数的线索).在main函数中,要做到: 建立一个对象数组,通过初始化,设置5个学生的数据,要求: 用指针指向数组首元素,输出第1.3.5个学生的信息: 设计一个函数int max(Student *arr);,用指向对象的指针作函数参数,在max函数中

《C++语言基础》实践参考——复数模板类

返回:贺老师课程教学链接 [项目6-复数模板类]    阅读教材例10.1.该例实现了一个复数类,但是美中不足的是,复数类的实部和虚部都固定只能是double型的.可以通过模板类的技术手段,设计Complex,使实部和虚部的类型为定义对象时指定的实际类型.    (1)要求类成员函数在类外定义.    (2)在此基础上,再实现减法.乘法和除法    你可以使用的main()函数如下. int main( ) { Complex<int> c1(3,4),c2(5,-10),c3; //实部和虚

《C++语言基础》实践参考——Josephus(约瑟夫环)问题

返回:贺老师课程教学链接  项目要求 [项目-Josephus(约瑟夫环)问题]n个小孩子围成一圈,从第一个小孩子开始顺时针方向数数字,到第m个小孩子离开,这样反反复复,最终只剩下一个小孩子,求第几个小孩子留下?    提示:约瑟夫环即是一个首尾相连的链表,在建立好这个环以后,从头结点开始,每次间隔m孩子删除一个结点,直至只余下一个结点(删除了n-1个).     参考下面的代码,也可以自行设计类. //链表结点kid,其中number为这个人的编号 struct kid { int numbe

《C++语言基础》实践参考——友元类

返回:贺老师课程教学链接 [项目5-友元类]定义下面两个类的成员函数(为体验友元类,实际上本例并不一定是一个好的设计,将两个类的合并为一个DateTime,日期.时间都处理更好) class Date; //对Date类的提前引用声明 class Time { public: Time(int,int,int); void add_a_second(Date &); //增加1秒,1秒后可能会到了下一天,乃到下一月.下一年 void display(Date &); //显示时间,格式:月