C语言实现学生奖学金评定系统

 更新时间:2022年03月15日 19:32:11   作者:一粒程序米  
这篇文章主要介绍了C语言实现学生奖学金评定系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言实现学生奖学金评定系统的具体代码,供大家参考,具体内容如下

说明:

学生综合积分由文化积分和德育积分构成,文化积分是所有门课程成绩总和除以课程门数(平均分),德育积分是参加各类活动的积分,学生综合积分=文化积分×70%+德育积分×30%。按照学生综合积分排名,获得一等奖学金1名学生,获得二等奖学金2名学生,获得三等奖学金3名学生,项目要求输入班级学生成绩信息,输出获得奖学金的学生名单。已知学生成绩信息包括学号、姓名、英语成绩、网络成绩、C语言成绩、数据库成绩、文化积分、德育积分和综合积分,运行结果如图所示。

实例分析与实现

首先,按照学生成绩信息的组成定义结构体,输入各门课程成绩和德育积分,根据已知的公式,求出文化积分和综合积分;然后,按照学生综合积分从高到低进行排名,并输出排名结果;最后,输出下标为0的学生获得一等奖学金,下标为1和2的学生获得二等奖学金,下标为3、4、5的学生获得三等奖学金。具体算法如下。

① 定义结构体类型student。
② 利用定义的结构体类型定义一个十名学生的数组。
③ 利用for循环输入十名学生的各门课成绩,计算学生文化积分和综合积分。
④ 利用for循环嵌套对学生的成绩按总积分由高到低进行排序。
⑤ 打印总积分从高到低的排序结果、获得奖学金学生名单。
⑥实现输出每门课程不及格学生名单。

#include <stdio.h>
#include <windows.h>
#include<string.h>
#define NUM 10  //修改NUM就可以加学生数量

struct student_scores{//定义学生属性
    int ID;//学号
    char name[20];//姓名
    float english;//英语
    float net;//网络
    float c_;//c语言
    float sql_;//数据库
    float ave;//文化积分
    float deyu;//德育  德育积分是参加各类活动的积分
    float zonghe;//综合        
};

//学生综合积分由文化积分和德育积分构成,文化积分是所有门课程成绩总和除以课程门数(平均分),
//德育积分是参加各类活动的积分,学生综合积分=文化积分×70%+德育积分×30%。按照学生综合积分排名,
//获得一等奖学金1名学生,获得二等奖学金2名学生,获得三等奖学金3名学生,项目要求输入班级学生成绩信息,输出获得奖学金的学生名单。

void main()
{    
    struct student_scores student[NUM],temp;//定义一个结构体名称数组 10个学生
    int i,k;
    printf("请按1键开始录入\n");    
    printf("请输入学号、姓名、英语成绩、网络成绩、C语言成绩、数据库成绩、德育积分>:\n");    
    printf("-----------------------------------------------------------------------\n");
    for( i=0;i<NUM;i++)//动态录入
    {            
        scanf("%d ",&student[i].ID);
        scanf("%s ",&student[i].name);                                              
        scanf("%f %f %f %f %f",&student[i].english,&student[i].net,&student[i].c_,&student[i].sql_,&student[i].deyu);
        student[i].ave=(student[i].english+student[i].net+student[i].c_+student[i].sql_)/4;//文化积分(平均分)
        student[i].zonghe=student[i].ave*70/100+student[i].deyu*30/100;
    }
    printf("-----------------------------------------------------------------------\n");    
    printf("\n");
//    system("cls");//清屏
    for( i=0;i<NUM-1;i++)
    {
        for(k=0;k<NUM-1-i;k++)
        {
            if(student[k].zonghe<student[k+1].zonghe)
            {
                temp.ID = student[k].ID;
                for(i=0;i<20;i++)
                {
                    temp.name[i] = student[k].name[i];
                }
                temp.ave = student[k].ave;
                temp.deyu = student[k].deyu;
                temp.zonghe = student[k].zonghe;
                
                student[k].ID = student[k+1].ID;
                for(i=0;i<20;i++)
                {
                    student[k].name[i] = student[k+1].name[i];
                }
                student[k].ave = student[k+1].ave;
                student[k].deyu = student[k+1].deyu;
                student[k].zonghe = student[k+1].zonghe;

                student[k+1].ID = temp.ID;
                for(i=0;i<20;i++)
                {
                    student[k+1].name[i] = temp.name[i];
                }
                student[k+1].ave =temp.ave;
                student[k+1].deyu =temp.deyu;
                student[k+1].zonghe = temp.zonghe;
            }
        }
    }
    printf("成绩排名<学号、姓名、文化积分、德育积分、总积分>:\n");    
    printf("-----------------------------------------------------------------------\n");
    printf("\n");
    for(i=0;i<NUM;i++)
    {
        printf("%d ",student[i].ID);
        printf("%s ",student[i].name);                                              
        printf("%f %f %f\n",student[i].ave,student[i].deyu,student[i].zonghe);
    }
    printf("-----------------------------------------------------------------------\n");
    printf("奖学金名单如下:\n");    
    printf("-----------------------------------------------------------------------\n");
    printf("一等奖学金获得者:%s\n",student[0].name);
    printf("二等奖学金获得者:%s %s\n",student[1].name,student[2].name);
    printf("三等奖学金获得者:%s %s %s\n",student[3].name,student[4].name,student[5].name);
    system("pause");
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • c/c++语言位域注意事项分析

    c/c++语言位域注意事项分析

    所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,答应在程序中按域名进行操作
    2013-09-09
  • C语言驱动开发之通过ReadFile与内核层通信

    C语言驱动开发之通过ReadFile与内核层通信

    驱动与应用程序的通信是非常有必要的,内核中执行代码后需要将其动态显示给应用层。为了实现内核与应用层数据交互则必须有通信的方法,微软为我们提供了三种通信方式,本文先来介绍通过ReadFile系列函数实现的通信模式
    2022-09-09
  • C++ Boost ScopeExit超详细讲解

    C++ Boost ScopeExit超详细讲解

    最近研究了boost中的ScopeExit,发现是个这是个很高级的特性,可以在作用域结束时自动关闭已经打开的资源或做某些清理操作,这篇文章主要介绍了C++ Boost ScopeExit
    2022-11-11
  • C语言 动态内存分配详解

    C语言 动态内存分配详解

    这篇文章主要介绍了C语言 动态内存分配详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • Qt两种定时器使用实现方式

    Qt两种定时器使用实现方式

    这篇文章主要给大家介绍了关于Qt两种定时器使用实现方式的相关资料,Qt中的定时器类是QTimer,QTimer不是一个可见的界面组件,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • 关于C语言中的指针与二维数组

    关于C语言中的指针与二维数组

    这篇文章主要介绍了关于C语言中的指针与二维数组,C语言中,指针是一个复杂但又灵活多变的知识点,我们知道,在一维数组中,对于一个数组a[],*a,a,&a,都表示a的首地址,但如果与二维数组混合使用,就显得更为复杂了,需要的朋友可以参考下
    2023-07-07
  • C语言快速掌握位段使用

    C语言快速掌握位段使用

    位段位段的声明和结构是类似的,但是也会有所不同,此篇文章将带你了解位段是什么已以及位段的使用和位段的特性,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-09-09
  • Qt 事件过滤器的具体实现

    Qt 事件过滤器的具体实现

    事件过滤器,见名之意,就是将事件过滤一遍,将不需要的事件都清除掉,剩下需要的事件进行操作。本文详细的介绍了Qt 事件过滤器的具体实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • C++变量初始化形式及其默认初始值问题

    C++变量初始化形式及其默认初始值问题

    这篇文章主要介绍了C++变量初始化形式及其默认初始值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • C++入门之基础语法学习教程

    C++入门之基础语法学习教程

    这篇文章主要介绍了C++入门之基本语法学习教程,列出了C++的关键字,同时讲解了注释的写法,需要的朋友可以参考下
    2016-05-05

最新评论