第3章 编程问题 3.2节 1
来源:互联网 发布:linux退出 编辑:程序博客网 时间:2024/05/19 00:37
题目描述:
数值分数有时是按照所谓的“学积分曲线”的评分模式来转换成字母表示的学分绩的。在这种模式下,将根据下表将一个字母成绩赋给一个数值分数。
这里m是平均值,σ是标准方差:对于n个数
m=
σ=
编写一个程序,读取表示数值分数的一个实数列表,调用函数计算它们的平均值和标准方差,接着调用一个函数得出并显示和每个数值分数相对应的字母成绩。
C++实现:
#include <iostream>using namespace std;double averageOf(const double *array, int length);double standardDeviation(const double *array, int length);double standardDeviation(const double *array, int length, double average);void scoreTransfer(const double *score_array, int length);void main() { const int CAPACITY = 4; double score_array[CAPACITY] = { 45.6, 67.8, 90.5, 87.2 }; scoreTransfer(score_array, 4); system("pause");}/*-------------------------------------接收一个表示数值分数的double型数组,显示和每个数值相对应的字母成绩。参数:const double *score_array:一个表示数值分数的double型数组int length:表示要处理前length个分数,当length等于数组的长度(即数组中元素的个数)时,全部处理-------------------------------------*/void scoreTransfer(const double *score_array, int length) {//在参数前面加const防止对数组中的元素进行修改 if (score_array == NULL || length == 0) { return; } int index = 0; double m = averageOf(score_array, length);//平均值 double std_Dev = standardDeviation(score_array, length, m);//标准方差 while (index < length) { char score_text = 0;//字母形式的成绩 double score_num = score_array[index];//数字形式的成绩 if (score_num < m - 3 * std_Dev / 2) { score_text = 'E';//书上写的是F,但是个人觉得应该是E吧,毕竟前面是ABCD,总不能一下子从D跳到F吧 } else if (score_num < m - std_Dev / 2) { score_text = 'D'; } else if (score_num < m + std_Dev / 2) { score_text = 'C'; } else if (score_num < m + 3 * std_Dev / 2) { score_text = 'B'; } else if (score_num >= m + 3 * std_Dev / 2) { score_text = 'A'; } cout << score_num << "\t" << score_text << endl; index++; }}/*---------------------------------------求一个元素为double型值的数组中前length个元素的平均值,当length等于数组中元素的个数时,这个函数求的是数组中所有元素的平均值。参数:double *array:数组的首地址(或数组名)int length:要求平均值的元素的个数返回值:数组中前length个元素的平均值---------------------------------------*/double averageOf(const double *array, int length) { if (array == NULL || length == 0) { return 0; } double ave = 0; int k = length; while (k > 0) { ave += array[k-1]; k--; } ave /= length; return ave;}/*---------------------------------------求一个元素为double型值的数组中前length个元素的标准方差,当length等于数组中元素的个数时,这个函数求的是数组中所有元素的标准方差。参数:double *array:数组的首地址(或数组名)int length:要求标准方差的元素的个数返回值:数组中前length个元素的标准方差---------------------------------------*/double standardDeviation(const double *array, int length) { if (array == NULL || length == 0) { return 0; } double std_Dev; double ave; double sum = 0; int k = 0; /*先求平均值,调用averageOf函数*/ ave = averageOf(array, length); /*算出每一项和平均值的差的平方的累加和*/ while (k<length) { double a = (array[k] - ave) * (array[k] - ave); sum += a; k++; } /*把累加和除以length,然后开平方根*/ std_Dev = sqrt(sum / length); return std_Dev;}/*---------------------------------------求一个元素为double型值的数组中前length个元素的标准方差,当length等于数组中元素的个数时,这个函数求的是数组中所有元素的标准方差。参数:double *array:数组的首地址(或数组名)int length:要求标准方差的元素的个数double average:给定样本的平均值返回值:数组中前length个元素的标准方差---------------------------------------*/double standardDeviation(const double *array, int length, double average) { if (array == NULL || length == 0 || average==0.0) { return 0; } double std_Dev; //标准差 double sum = 0; int k = 0; /*算出每一项和平均值的差的平方的累加和*/ while (k < length) { double a = (array[k] - average) * (array[k] - average); sum += a; k++; } /*把累加和除以length,然后开平方根*/ std_Dev = sqrt(sum / length); return std_Dev;}
2 0
- 第3章 编程问题 3.2节 1
- 第3章 编程问题 3.2节 3
- 第3章 编程问题 3.2节 2
- 第3章 编程问题 3.2节 4
- 第2章 编程问题 2.2节 3
- 第3章 编程问题 3.3节 9
- 第2章 编程问题 2.2节 1
- 编程珠玑--第12章 取样问题
- 《编程珠玑》第12章:取样问题
- Python核心编程---读书笔记:第1章~第3章
- 编程珠玑 第1/2/3章
- 数据库编程第3章
- 第3章:RDD编程
- 第3章 IAR编程
- 数据库编程第1章
- 《数字技术》连载3:第1章概述 第3节 数字的表示,进位制问题。
- 【C++语言99个常见编程错误】第3章 预处理器问题
- 【C++语言99个常见编程错误】第1章 基础问题
- BZOJ 1008: [HNOI2008]越狱
- CodeForces
- 第19章 连续周期信号的频域分析
- linux下进入mysql数据库出现1045及2003错误,解决方法
- HDU 5806 · NanoApe Loves Sequence Ⅱ【尺取法】
- 第3章 编程问题 3.2节 1
- JAVA源码解析(2)-java.beans.FeatureDescriptor、
- python读取文本数据到矩阵(用于scikit-learn输入)
- 1120. Friend Numbers (20)
- String中substring方法内存泄漏问题
- Java wed 编码问题
- css伪劣的bug
- 【Java EE】--JavaServer Faces 02
- Java 内存区域和GC机制