1.题目要求

作为教师,考试以后对试卷进行分析和研究是必须做的一项工作,假定某学校要求老师在考试之后填写的一个表格,并要求教师根据考试分数分布情况画出直方图。下面就来解决这个实际问题。

2.题目分析

  1. 程序运行时,首先必须接收总评成绩的计算比例,因为针对不同的课程,平时成绩和期末考试成绩所占的比例可能不同。
  2. 接收若干同学的平时成绩和期末考试成绩,计算出总评成绩,总评成绩的计算方法是“平时成绩所占比例×平时成绩+期末成绩所占比例×期末成绩”。
  3. 根据考试成绩计算分数段的分布情况,画出直方图。
  4. 计算平时成绩、期末成绩和总评成绩的平均分和标准差,以及期末考试卷面的及格率、最高分和最低分等。

由于针对一个学生有3个有关成绩的数据,因此最简单的方法就是使用结构体数组。第1列为学生的学号,第2列为学生的平时成绩,第3列为学生的期末成绩,第4列为学生的总评成绩。

3.文件说明

main.c//主要的函数调用
function.c//函数执行
function.h//整个程序的头文件

4.函数说明

int accept_date(STUDENT stu[],int grade[] ,int size_t);//输入数据
void show_data(STUDENT stu[],int sum,int grade[]);//输出所有的学生学号,成绩
void count(int* max,int* min,double* pass,double ave[],double f[],STUDENT stu[],int sum);//计算期末考试成绩及格率、最高分最低分以及平时、期末和总评成绩的平均分和标准差
void show_data2(int max,int min,double pass,double ave[],double f[]);//显示期末考试成绩及格率、最高分最低分以及平时、期末和总评成绩的平均分和标准差
void draw(int grade[]);//画出频率分布直方图

5.程序编写

5.1 fuction.h

#ifndef TEXT5_7_FUNCTION_H
#define TEXT5_7_FUNCTION_H
#endif //TEXT5_7_FUNCTION_H
#include<stdio.h>
#include <math.h>
#include <string.h>
#include <conio.h>
typedef struct student//定义一个结构体变量
{
int number;//定义学号
int source[3];//定义期中、期末、总评成绩
}STUDENT;
typedef enum { False, True } FLAG;//枚举定义

5.2 main.c

#include "function.h"
int accept_date(STUDENT stu[],int grade[] ,int size_t);//输入数据
void show_data(STUDENT stu[],int sum,int grade[]);//输出所有的学生学号,成绩
void count(int* max,int* min,double* pass,double ave[],double f[],STUDENT stu[],int sum);//计算期末考试成绩及格率、最高分最低分以及平时、期末和总评成绩的平均分和标准差
void show_data2(int max,int min,double pass,double ave[],double f[]);//显示期末考试成绩及格率、最高分最低分以及平时、期末和总评成绩的平均分和标准差
void draw(int grade[]);//画出频率分布直方图
int main()
{
int sum = 0,max = 0,min = 0;//初始化数据
double pass = 0;
int SIZE = 0;
printf("请输入学生人数\n");
scanf("%d",&SIZE);
int grade[11] = {0};
STUDENT stu[SIZE];
double ave[SIZE],f[SIZE];
sum = accept_date(stu,grade,SIZE);//输入数据
show_data(stu,sum,grade);//输出所有的学生学号,成绩
count(&max,&min,&pass,ave,f,stu,sum);//计算期末考试成绩及格率、最高分最低分以及平时、期末和总评成绩的平均分和标准差
show_data2(max ,min,pass,ave,f );//显示期末考试成绩及格率、最高分最低分以及平时、期末和总评成绩的平均分和标准差
draw(grade);//画出直方图
return 0;
}

5.3 fuction.c

#include "function.h"
int accept_date(STUDENT stu[],int grade[],int size_t)//输入数据声明
{
int i = 0,sum = 0,temp = 0,a1 = 0,a2 = 0;
FLAG flag;
printf("请输入期中期末占总评成绩的百分比,用整数表示\n");
scanf("%d %d",&a1,&a2);
while(i<size_t){
printf("请输入学号:\n");
scanf("%d",&stu[i].number);
if(stu[i].number==-1)
{
sum = i;
break;//sum记录的是输入的人数
}
printf("请输入平时成绩和期末成绩:\n");
flag = True;
while(flag==True)//重复读取成绩,直到正确为止
{
scanf("%d %d",&stu[i].source[0],&stu[i].source[1]);
if(stu[i].source[0]<=100&&stu[i].source[0]>=0&&stu[i].source[1]<=100&&stu[i].source[1]>=0)//输入成绩合理,停止循环
{
flag = False;
}
else//输入成绩不合理,重新输入
{
printf("输入错误,请重新输入。\n");
}
}
temp = (int)(1.0*a1/100*stu[i].source[0]+1.0*a2/100*stu[i].source[1]);//计算总评成绩
stu[i].source[2] = temp;
temp = stu[i].source[1]/10; //分数分段
if(temp==10)
{
grade[10]++;
}
else
{
grade[temp+1]++;
}
i++;
}
return sum;
}
void show_data(STUDENT stu[],int sum,int grade[])//输出成绩
{
for (int i = 0; i < sum; ++i)
{
printf("%d",stu[i].number);//输出学号
for (int j = 0; j < 3; ++j)
{
printf("%d",stu[i].source[j]);//输出期中期末总评
printf("\n");
}
}
for (int i = 0; i < 10; ++i)
{
printf("%d\n",grade[i]);
}
}
void count(int* max,int* min,double* pass,double ave[],double f[],STUDENT stu[],int sum)
{
int i = 0, j = 0, p_sum = 0;
int total[3];
double temp = 0;
*max = *min = stu[0].source[1];//最大最小值初始化
if(stu[0].source[1]>=60)
{
p_sum++;
}
for ( i = 1; i < sum; ++i)
{
if(stu[i].source[1]>*max)
{
*max = stu[i].source[1];//若高于最高分,将其覆盖
}
if(stu[i].source[1]<*min)
{
*min = stu[i].source[1];//若低于最低分,将其覆盖
}
if(stu[i].source[1]>=60)
{
p_sum++;//计算及格的人数
}
}
*pass = (1.0*p_sum/sum)*100;//计算及格率
for ( i = 0; i <= 2; ++i)
{
total[i] = 0;
}
for (j = 0; j < 3; j++)
{
for (int i = 0; i < sum; ++i)
{
total[j] = total[j] + stu[i].source[j];
}
}
for ( j = 0; j < 3; ++j)
{
ave[j] = total[j]/sum;
}
for (j = 0; j < 3; j++)//计算标准差
{
f[j] = 0;
for (i = 0; i < sum; i++)
{
temp = stu[i].source[j] - ave[j];
f[j] = f[j] + temp*temp;
}
f[j] = sqrt(fabs(f[j])/sum);
}
}
void show_data2(int max,int min,double pass,double ave[],double f[])
{
int j = 0;
char str1[3][20] = {"平时成绩平均分","期末成绩平均分","总评成绩平均分"};
char str2[3][20] = {"平时成绩标准差","期末成绩标准差","总评成绩标准差"};
printf("及格率:%f 最高分:%d 最低分:%d\n",pass,max,min);//输出期末及格率,最高分,最低分
for (int i = 0; i < 3; ++i)
{
printf("%s = %f %s = %f\n",str1[i],ave[i],str2[i],f[i]);//循环输出平时期末总评成绩的平均分和标准差
}
}
void draw(int grade[])
{
int max = 0,k = 0, temp = 0, x = 0;
char screen[22][24];
printf("模拟直方图\n");
for (int i = 1; i <= 10; ++i)
{
if(grade[i]>max)
{
max = grade[i];
}
}
for (int i = 1; i <= 10; ++i)
{
grade[i]=(int)(20.0*grade[i]/max+0.5);//计算显示星号个数
}
for (int i = 0; i <= 21; i++)//现将所有点清零
{
for (int j = 0; j <= 42; j++)
{
screen[i][j] = 0;
}
}
//画x轴
for (int i = 0; i < 41; ++i)
{
screen[21][i] = '_';
}
screen[21][41] = 'x';
//画y轴
screen[0][0] = 'y';
for (int i = 1; i <= 21;i++)
{
screen[i][0] = '|';
}
k = 1;
for (x = 1; x <= 10; x++,k=k+4)
{
temp = grade[x];
if(temp!=0)
{
for (int i =1 ; i <= temp; i++)
{
for (int j = 1; j <= 4; j++)
{
screen[20-i+1][j+k] = '*';
}
}
}
}
for (int i = 0; i <= 21; i++)
{
for (int j = 0;j <=41; j++)
{
if(screen[i][j]!=0)
{
printf("%c",screen[i][j]);
}
else
{
printf(" ");
}
printf("\n");
}
printf("0 10 20 30 40 50 60 70 80 90 100\n");
}
getch();
}

6 主要C语言知识点

  • 函数
  • 多维数组
  • 指针
  • 结构体
  • 循环

C语言实战项目——学生试卷分数统计的更多相关文章

  1. Kafka项目实战-用户日志上报实时统计之应用概述

    1.概述 本课程的视频教程地址:<Kafka实战项目之应用概述> 本课程是通过一个用户实时上报日志来展开的,通过介绍 Kafka 的业务和应用场景,并带着大家搭建本 Kafka 项目的实战 ...

  2. Kafka项目实战-用户日志上报实时统计之编码实践

    1.概述 本课程的视频教程地址:<Kafka实战项目之编码实践>  该课程我以用户实时上报日志案例为基础,带着大家去完成各个KPI的编码工作,实现生产模块.消费模块,数据持久化,以及应用调 ...

  3. Kafka项目实战-用户日志上报实时统计之分析与设计

    1.概述 本课程的视频教程地址:<Kafka实战项目之分析与设计>  本课程我通过一个用户实时上报日志案例作为基础,带着大家去分析Kafka这样一个项目的各个环节,从而对项目的整体设计做比 ...

  4. WinForm多语言版本实战项目演练

    一.课程介绍 关于如何实现“WinForm多语言版本”网上有很多实现技术方案,可以说是“琳琅满目”,"包罗万象".俗话说的好:一千个读者就有一千个哈姆雷特!如果您工作中恰好也遇到这 ...

  5. go语言实战教程:Redis实战项目应用

    项目Redis配置 在实战项目中使用Redis功能,首先需要进行Redis配置.本实战项目中,关与Redis的配置项包含:连接类型.地址.端口.公共前缀.以上配置项被定义包含在Iris框架的redis ...

  6. Go语言实战爬虫项目

    Go语言爬虫框架之Colly和Goquery Python爬虫框架比较多有requests.urllib, pyquery,scrapy等,解析库有BeautifulSoup.pyquery.Scra ...

  7. C语言 · 分数统计

    算法提高 分数统计   时间限制:1.0s   内存限制:512.0MB      问题描述 2016.4.5已更新此题,此前的程序需要重新提交. 问题描述 给定一个百分制成绩T,将其划分为如下五个等 ...

  8. go语言实战教程:项目文件配置和项目初始化运行

    在上节内容中,我们已经搭建了实战项目框架,并将实战项目开发所需要的静态资源文件进行了导入.在本节内容中,我们将讲解如何通过相关的配置,并初始化运行项目. conf配置文件读取配置信息 我们前面说过,使 ...

  9. go语言实战教程:实战项目资源导入和项目框架搭建

    从本节内容开始,我们将利用我们所学习的Iris框架的相关知识,进行实战项目开发. 实战项目框架搭建 我们的实战项目是使用Iris框架开发一个关于本地服务平台的后台管理平台.平台中可以管理用户.商品.商 ...

  10. R语言实战(九)主成分和因子分析

    本文对应<R语言实战>第14章:主成分和因子分析 主成分分析(PCA)是一种数据降维技巧,它能将大量相关变量转化为一组很少的不相关变量,这些无关变量成为主成分. 探索性因子分析(EFA)是 ...

随机推荐

  1. Inno Setup 出现 the drive or unc share you selected does not exist or is not accessible 解决记录

    背景 软件是使用Inno Setup的,且安装后,再次安装是默认安装到历史路径.一次用户电脑维修后,发现再次安装后报错 解决办法 取消自动安装到默认路径就好了~ UsePreviousAppDir=n ...

  2. Apache DolphinScheduler 社区5月月报更新!

    各位热爱 DolphinScheduler 的小伙伴们,社区5月份月报更新啦!这里将记录 DolphinScheduler 社区每月的重要更新,欢迎关注,期待下个月你也登上Merge Star月度榜单 ...

  3. SMU 2024 spring 天梯赛3

    SMU 2024 spring 天梯赛3 7-1 重要的话说三遍 - SMU 2024 spring 天梯赛3 (pintia.cn) I'm gonna WIN! I'm gonna WIN! I' ...

  4. SMU Summer 2023 Contest Round 9(2019 山东省大学生程序设计竞赛)

    2019 山东省大学生程序设计竞赛 A. Calandar 纯模拟吧(感觉我做麻烦了(?), 就是如果问的是未来的日期,就用相隔天数取模后加上这天的星期, 如果问的是曾经的,就用这天的星期减去相隔天数 ...

  5. 将微信小程序的代码上传到github

    在微信小程序端上传的时候会报错,昨天整了一晚上,没有解决.今天偶然发现了解决方案,下面分为两种情况来说. 一.未生成git仓库 将一号区域的代码粘贴到微信小程序的终端即可 二.已生成了git仓库 将二 ...

  6. 【测试平台开发】——01Vue前端框架实操

    一.VScode官网地址 https://code.visualstudio.com/ 但是官网下载贼慢,需要修改下国内地址: 原地址:https://az764295.vo.msecnd.net/s ...

  7. 将.gradle下的 带hash名称文件夹中的依赖 转换为 .m2上的依赖

    背景:  android studio 在无法下载依赖的情况下 , 仅 使用 mavenLocal() 本地 .gradle 下有对应依赖 , .m2下没有 故将.gradle下的 带hash名称文件 ...

  8. C++: 智能指针的自定义删除器 `Custom Deleter` 有什么用?

    C++11智能指针std::shared_ptr和std::unique_ptr都支持自定义删除器,本文将介绍自定义删除器的使用场景和使用方法.智能指针模板参数的第二个类型是删除器,一般是一个函数指针 ...

  9. OData – Query to Expression

    前言 EF Core 可以把 expression 转换成 string, 但没办法转回来. 想把 string 转成 expression, 目前最合适的工具是 OData. 虽然 Dynamic ...

  10. @RequestBody注意事项

    使用@RequestBody注解时,是用于接收Content-Type为application/json类型的请求,数据类型是JSON:{"aaa":"111" ...