这篇博文题目很拗口,主要是因为这次做的表实在有点奇葩,很难用一两句话表达清楚。最近做个了个学生成绩表,不是真实存在的成绩,而是生成出来的,为了模拟得更像真的,费了不少力气。下面总结一下,备忘。

闲话少说,还是看看要求吧:

学生成绩由A、B、C、D四个学科组成,A学科满分40分,B学科满分50分,C学科满分10分,D学科满分10分,总计110分。

总分90-110分为优秀,75-89分为良好,60-74分为及格,0-59分为不及格。

学生总数为100人,现在指定一个各等级的比例,比如优秀学生数要占总人数的30%左右,良好占40%左右,及格占20%左右,不及格占10%左右。

要求用Excel生成一个包含各学科分数和总分的成绩表。

解决思路:

生成这个成绩表可以分两步来做:首先按照指定比例生成符合要求的总分表,然后再用这个总分表去生成每个学生各学科的分数。

1、按比例生成总分

由于划定了各等级的比例,这个总分表还是很容易生成的。可以使用RANDBETWEEN函数,生成30个90-110分,40个75-89分,20个60-74分,10个0-60分。

但是为了更像真的,还要加一些必要的限制。虽然理论上最低分可以是0分,最高分可以是满分,但实际上0分、极低的分数和满分都是不正常的,所以要排除这些不正常的分数。既然要造,就要造的像样一点。所以我这里指定最低分为51分,最高分为106分。

另外,30%、40%、20%、10%的比例也是明显不正常的,所以要适当做一些调整。

为了容易修改,我这里将最低分、最高分、四个比例值都设置为变量。

新建一个Excel文件,在Sheet1的B1单元格输入最低分51,B2单元格输入最高分106,B3-B6单元格分别输入指定的优秀、良好、及格、不及格的比例值,如28%、41%、24%、7%。

接下来切换到Sheet2,在这个工作表里生成学生总分。

A列填充序号1-100。

B列根据A列的序号和Sheet1的比例变量生成等级,公式如下:

=IF(A1<=100*Sheet1!$B$3,”优秀”,(IF(A1<=100*(Sheet1!$B$3+Sheet1!$B$4),”良好”,(IF(A1<=100*(Sheet1!$B$3+Sheet1!$B$4+Sheet1!$B$5),”及格”,”不及格”)))))

C列根据B列的等级生成随机分数,公式如下:

=IF(B1=”优秀”,RANDBETWEEN(90,Sheet1!$B$2),IF(B1=”良好”,RANDBETWEEN(75,89),IF(B1=”及格”,RANDBETWEEN(60,74),RANDBETWEEN(Sheet1!$B$1,59))))

这样就生成了符合要求的学生总分数,但是明显太假,虽然这个表没有排序,但是按分数段分的清清楚楚,真正的成绩表不应该这样有序,应该是乱序的,所以接下来需要把顺序打乱。

D列用RAND函数生成100个随机数。

E列用RANK函数给D列的这些随机数取一下序号值,获得1-100的序号。一般来讲得到的这个序号是唯一的,不会有重复,因为RAND函数可以精确到小数点后15位。但是就算有重复也不碍事,反而能够增加数据的仿真性。

F列把C列的分数根据E列的序号重新排列,公式如下:

=INDEX(C:C,MATCH(E1,A:A))

这样就完成了学生总分的生成,符合指定比例,限制了最低、最高分,顺序还是乱的。完美。

2、根据总分生成各学科的分数

现在有了学生的总分,也知道各学科最高分,下面需要用随机数函数来生成各科成绩。但是为了让生成的各学科分数加起来等于总分,需要启用迭代计算,在EXCEL的“文件”→“选项”→“公式”窗口勾上“启用迭代计算”即可,为了尽可能一次计算成功,可以将“最多迭代次数”修改为更大的数值,比如1000。

生成各学科分数时仍然要注意仿真性。既然要造,就要造的像样一点。以A学科为例,理论上0-40分都行,但是太低的分数是不正常的,所以这里规定最低分不能低于20分。

把Sheet2的F列复制粘贴到Sheet3的A列,只粘贴数值。以下操作都在Sheet3工作表中进行。

B列用RANDBETWEEN函数生成A学科的分数,最低分20分,最高分40分,公式如下:

=IF(B1+C1+D1+E1=A1,B1,RANDBETWEEN(20,40))

C列生成B学科成绩,最低分20分,最高分50分,公式如下:

=IF(B1+C1+D1+E1=A1,C1,RANDBETWEEN(20,50))

D列生成C学科成绩,最低分5分,最高分10分,公式如下:

=IF(B1+C1+D1+E1=A1,D1,RANDBETWEEN(5,10))

E列生成D学科成绩,最低分5分,最高分10分,公式如下:

=IF(B1+C1+D1+E1=A1,E1,RANDBETWEEN(5,10))

由于迭代计算需要反复进行,尽管已经将最多迭代次数设置为1000次,仍然有可能不能一次成功,还需要做一下校验:

F列计算一下生成的各学科分数加起来是否等于总分,公式如下:

=IF(SUM(A3:H3)=I3,” “,”错误”)

如果显示“错误”,说明计算不对,按F9重新计算即可,反复按F9,直到“错误”消失。

至此,所有分数已成功生成。完美!

按比例算出成绩 用c语言,Excel按指定比例生成学生总分,并迭代计算出各学科分数...相关推荐

  1. 分数段统计函数c语言,Excel 五个函数统计学生期末考试分数段

    考试结束,老师们都要对学生的考试成绩进行分析.各分数段人数的统计是其中一项必做的工作.在Excel中,怎样快速准确地统计分数段人数呢?以下的方法也许对你有所帮助. 先看看原始的学生成绩表.五门功课的成 ...

  2. 怎样用c语言算平均成绩,用C语言编程平均分数

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 当个反面典型,让大家见识下丑陋无比的程序好了,主要是想练练打字,HOHO.应该用二维数组且全部函数化的,rand的%后面或是101或是100,可能和编译器 ...

  3. 用字典存储学生成绩查询_C语言 | 用结构体变量存储学生信息

    "要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人-万中无一" --包租婆这道理放在C语言学习上也一并受用.在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语 ...

  4. JAVA班级年龄平均值代码_java用list集合存储学生信息并算出成绩平均值操作

    需求 键盘输入五名学生信息并录入list集合; 输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值: 计算并输出他们Java语言成绩的最大值和最小值. 思路 用Scanner 键盘输入 ...

  5. java 学生信息 list_java用list集合存储学生信息并算出成绩平均值操作

    需求 键盘输入五名学生信息并录入list集合; 输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值: 计算并输出他们Java语言成绩的最大值和最小值. 思路 用Scanner 键盘输入 ...

  6. 计算机综合成绩怎么算6,高考分数是通过电脑阅卷怎么样算出成绩的

    原标题:高考分数是通过电脑阅卷怎么样算出成绩的 高三考生肯定没看过电脑评卷是怎么样的吧?以为随便划两横.打个X.围个O就可以了,殊不知,这样会让你这道题得0分! 今天就带大家一起到阅卷的现场,看看你的 ...

  7. C语言试题五十一之已知学生的记录是由学号和学习成绩构成,n名学生的数据已存入s结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。

    1. 题目 请编写一个函数void function(Student a[], int n, Student *s),其功能时:已知学生的记录是由学号和学习成绩构成,n名学生的数据已存入s结构体数组中 ...

  8. C语言编程题—结构体—设计程序,已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数 fun:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分

    4 C语言编程题--结构体 **设计程序,已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中.请编写函数 fun,函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有 ...

  9. C语言编程>第十二周 ③ 已知学生的记录由学号和学习成绩构成,M名学生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数。

    已知学生的记录由学号和学习成绩构成,M名学生的数据已存入a结构体数组中.请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分).已给出函数的首部,请完成该函 ...

最新文章

  1. Linux进程状态如何切换,Linux系统如何切换前台进程和后台进程(2)
  2. [html] HTML5中的article和section有什么区别?
  3. c语言画爱心附带解释,用C语言画一个“爱心”
  4. mysql 复制功能_MySQL实现主从复制功能
  5. rdlc tablix_SQL Server中的报表–通过分组功能(由Tablix控件提供)处理数据
  6. manjaro linux下查看硬件温度
  7. python打印当前时间
  8. perl linux 运行,在Ubuntu中启动时运行perl脚本
  9. 华为ENSP安装教程
  10. 分享五个免费图片/视频资源网站
  11. WebRoot与WebContent区别
  12. 转-- 一位存储研发者的图书清单
  13. C++的数据复合类型
  14. 中科院大学计算机科学与技术王伟强,李振宇 - 中国科学院大学 - 计算机科学与技术学院...
  15. PMP报考一定要报培训班吗?
  16. png序列帧转换WebP动画
  17. 关于Linux的发音
  18. python字典、列表、元祖使用场景_(三)PYTHON字典 元祖 列表尝试应用
  19. MySQL日期格式化(format)-%Y-%m-%d %H:%i:%S
  20. camcard for BB

热门文章

  1. mongodb用户管理和服务安装
  2. XML 与动态添加控件
  3. spring boot 使用devtools热部署
  4. 敏捷开发用户故事系列之九:开发与跟进
  5. 04_(终结版)通过App实现对数据库的增删改
  6. Fiddler绕过前端直接和后台进行交互
  7. 设计模式10: Facade 外观模式(结构型模式)
  8. 如何去定义一个jquery插件
  9. db2 常用命令(二)
  10. 《跟我一起做J2EE版Blog–jPress》4(搭建marven下的Spring和Hibernate)