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

简介: 返回:贺老师课程教学链接【项目2-用文本文件保存的学生名单】 文件score.dat中保存的是若干名学生的姓名和C语言课、高数和英语成绩。 (1)定义学生结构体,其中包含姓名、C++课、高数和英语成绩及总分数据成员。//定义学生结构体typedef struct { string name; double cpp; double mat

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

【项目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;
}
目录
相关文章
|
3月前
|
存储 算法 C语言
通义灵码在考研C语言和数据结构中的应用实践 1-5
通义灵码在考研C语言和数据结构中的应用实践,体验通义灵码的强大思路。《趣学C语言和数据结构100例》精选了五个经典问题及其解决方案,包括求最大公约数和最小公倍数、统计字符类型、求特殊数列和、计算阶乘和双阶乘、以及求斐波那契数列的前20项和。通过这些实例,帮助读者掌握C语言的基本语法和常用算法,提升编程能力。
95 4
|
29天前
|
存储 网络协议 编译器
【C语言】深入解析C语言结构体:定义、声明与高级应用实践
通过根据需求合理选择结构体定义和声明的放置位置,并灵活结合动态内存分配、内存优化和数据结构设计,可以显著提高代码的可维护性和运行效率。在实际开发中,建议遵循以下原则: - **模块化设计**:尽可能封装实现细节,减少模块间的耦合。 - **内存管理**:明确动态分配与释放的责任,防止资源泄漏。 - **优化顺序**:合理排列结构体成员以减少内存占用。
133 14
|
2月前
|
C语言 开发者
C语言中的模块化编程思想,介绍了模块化编程的概念、实现方式及其优势,强调了合理划分模块、明确接口、保持独立性和内聚性的实践技巧
本文深入探讨了C语言中的模块化编程思想,介绍了模块化编程的概念、实现方式及其优势,强调了合理划分模块、明确接口、保持独立性和内聚性的实践技巧,并通过案例分析展示了其应用,展望了未来的发展趋势,旨在帮助读者提升程序质量和开发效率。
64 5
|
2月前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
52 2
|
3月前
|
存储 API C语言
【C语言】实践:贪吃蛇小游戏(附源码)(一)
【C语言】实践:贪吃蛇小游戏(附源码)
|
3月前
|
C语言 定位技术 API
【C语言】实践:贪吃蛇小游戏(附源码)(二)
【C语言】实践:贪吃蛇小游戏(附源码)
【C语言】实践:贪吃蛇小游戏(附源码)(二)
|
3月前
|
C语言
【C语言】实践:贪吃蛇小游戏(附源码)(三)
【C语言】实践:贪吃蛇小游戏(附源码)
|
4月前
|
C语言
C语言程序设计核心详解 第四章&&第五章 选择结构程序设计&&循环结构程序设计
本章节介绍了C语言中的选择结构,包括关系表达式、逻辑表达式及其运算符的优先级,并通过示例详细解释了 `if` 语句的不同形式和 `switch` 语句的使用方法。此外,还概述了循环结构,包括 `while`、`do-while` 和 `for` 循环,并解释了 `break` 和 `continue` 控制语句的功能。最后,提供了两道例题以加深理解。
110 7
|
4月前
|
存储 C语言
C语言程序设计核心详解 第十章:位运算和c语言文件操作详解_文件操作函数
本文详细介绍了C语言中的位运算和文件操作。位运算包括按位与、或、异或、取反、左移和右移等六种运算符及其复合赋值运算符,每种运算符的功能和应用场景都有具体说明。文件操作部分则涵盖了文件的概念、分类、文件类型指针、文件的打开与关闭、读写操作及当前读写位置的调整等内容,提供了丰富的示例帮助理解。通过对本文的学习,读者可以全面掌握C语言中的位运算和文件处理技术。
|
4月前
|
存储 C语言
C语言程序设计核心详解 第七章 函数和预编译命令
本章介绍C语言中的函数定义与使用,以及预编译命令。主要内容包括函数的定义格式、调用方式和示例分析。C程序结构分为`main()`单框架或多子函数框架。函数不能嵌套定义但可互相调用。变量具有类型、作用范围和存储类别三种属性,其中作用范围分为局部和全局。预编译命令包括文件包含和宏定义,宏定义分为无参和带参两种形式。此外,还介绍了变量的存储类别及其特点。通过实例详细解析了函数调用过程及宏定义的应用。