c语言--基于结构体的学生成绩管理系统

简介: 1.创建结构体,对象为学生,结构体信息有学号,分数,总分,排名 2.使用函数实现不同的功能2.1.输入学生的信息:

1.创建结构体,对象为学生,结构体信息有学号,分数,总分,排名

    typedef struct{
    int ID;
    float score[3];
    float total ;
    int rank;
  }STU;

2.使用函数实现不同的功能

2.1.输入学生的信息:

void input_data(STU s[])
{
    int i = 0;
    for (i = 0; i < 10; i++)//这里假设有十个学生
    {
        scanf("%d", &s[i].ID);//输入每个学生的ID
        for (int j = 0; j < 3; j++)
        {
             scanf("%f", &s[i].score[j]); //输入每个学生的语文,数学,英语三门科目的分数
        }
    }
}
void input_data(STU s[])
{
    int i = 0;
    for (i = 0; i < 10; i++)//这里假设有十个学生
    {
        scanf("%d", &s[i].ID);//输入每个学生的ID
        for (int j = 0; j < 3; j++)
        {
             scanf("%f", &s[i].score[j]); //输入每个学生的语文,数学,英语三门科目的分数
        }
    }
}

2.2.函数:计算学生的总分

void calculate(STU s[])
{
    for(int i=0;i<10;i++)
    {
        s[i].total =0; //在这里将总成绩初始化为0,也可以在创建结构体时
        将总成绩初始化为0
    }
    for(int i=0;i<10;i++)
    {
        for(int j=0;j<3;j++)
        {
            s[i].total += s[i].score[j];//求和
        }
    }
}

将学生的各科成绩求和 如上:

2.3. 按总成绩从高到低进行排序

使用冒泡排序

void sort_total(STU s[])
{
    STU tmp;//结构体变量,需要什么类型的临时存储值,就创建什么类型的临时变量
    int i=0;
    int j=0;
    for(i=0;i<10;i++)
    {
        for(j=0;j<10-i-1;j++)
        {
            if(s[j].total<s[j+1].total)
            {
                tmp =s[j];
                s[j] = s[j+1];
                s[j+1] = tmp;
            }
        }
    }
}

2.4.对排好名次后的每个学生赋予名次

void add_rank(STU s[])
{
    for(int i=0;i<10;i++)
    {
        s[i].rank =i+1; //i+1 是由于数组从0开始,而常见的排名是从第一名到第n名
    }
}


2.5 将所有数据输出

void print_data(STU s[])
{
  /********** Begin **********/
    int i=0;
    int j =0;
    printf("学号:         语文:         数学:         英语:         总分:         名次:\n");
    for(i=0;i<10;i++)
    {
        printf("%-15d",s[i].xuehao);
        for(j=0;j<3;j++)
        {
            printf("%-15.1f",s[i].score[j]);
        }
        printf("%-15.1f%d",s[i].total,s[i].rank);
        printf("\n");
    }


主函数如下:

int main()
{
    STU s[10];
    input_data(s);
    calculate(s);
    sort_total(s);
    add_rank(s);
    print_data(s);
    return 0;
}


相关文章
|
27天前
|
IDE 编译器 开发工具
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
在本文中,我们系统地讲解了常见的 `#pragma` 指令,包括其基本用法、编译器支持情况、示例代码以及与传统方法的对比。`#pragma` 指令是一个强大的工具,可以帮助开发者精细控制编译器的行为,优化代码性能,避免错误,并确保跨平台兼容性。然而,使用这些指令时需要特别注意编译器的支持情况,因为并非所有的 `#pragma` 指令都能在所有编译器中得到支持。
101 41
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
|
22天前
|
存储 编译器 C语言
【C语言】C语言的变量和声明系统性讲解
在C语言中,声明和定义是两个关键概念,分别用于告知编译器变量或函数的存在(声明)和实际创建及分配内存(定义)。声明可以多次出现,而定义只能有一次。声明通常位于头文件中,定义则在源文件中。通过合理组织头文件和源文件,可以提高代码的模块化和可维护性。示例包括全局变量、局部变量、函数、结构体、联合体、数组、字符串、枚举和指针的声明与定义。
46 12
|
27天前
|
存储 网络协议 编译器
【C语言】深入解析C语言结构体:定义、声明与高级应用实践
通过根据需求合理选择结构体定义和声明的放置位置,并灵活结合动态内存分配、内存优化和数据结构设计,可以显著提高代码的可维护性和运行效率。在实际开发中,建议遵循以下原则: - **模块化设计**:尽可能封装实现细节,减少模块间的耦合。 - **内存管理**:明确动态分配与释放的责任,防止资源泄漏。 - **优化顺序**:合理排列结构体成员以减少内存占用。
122 14
|
1月前
|
存储 编译器 C语言
【C语言】结构体详解 -《探索C语言的 “小宇宙” 》
结构体通过`struct`关键字定义。定义结构体时,需要指定结构体的名称以及结构体内部的成员变量。
143 10
|
2月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
151 13
|
2月前
|
存储 数据建模 程序员
C 语言结构体 —— 数据封装的利器
C语言结构体是一种用户自定义的数据类型,用于将不同类型的数据组合在一起,形成一个整体。它支持数据封装,便于管理和传递复杂数据,是程序设计中的重要工具。
|
2月前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
51 1
|
2月前
|
人工智能 安全 算法
基于C语言的嵌入式系统开发,涵盖嵌入式系统概述、C语言的优势、开发流程、关键技术、应用实例及面临的挑战与未来趋势。
本文深入探讨了基于C语言的嵌入式系统开发,涵盖嵌入式系统概述、C语言的优势、开发流程、关键技术、应用实例及面临的挑战与未来趋势。C语言因其高效、可移植、灵活及成熟度高等特点,在嵌入式系统开发中占据重要地位。文章还介绍了从系统需求分析到部署维护的完整开发流程,以及中断处理、内存管理等关键技术,并展望了嵌入式系统在物联网和人工智能领域的未来发展。
77 1
|
1月前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
62 10
|
1月前
|
存储 程序员 C语言
【C语言】文件操作函数详解
C语言提供了一组标准库函数来处理文件操作,这些函数定义在 `<stdio.h>` 头文件中。文件操作包括文件的打开、读写、关闭以及文件属性的查询等。以下是常用文件操作函数的详细讲解,包括函数原型、参数说明、返回值说明、示例代码和表格汇总。
50 9