题目如下:

Please write a program, enter the scores of the three courses for 5 students, and use the function to find:

  1. Average score per student (first line output);
  2. Average score for each course (second line output);
  3. Average variance (third line output).

where xi is the average score of a student and the output decimal place is 3 digits.

在主函数中先定义一个double型3行5列的数组(double ss[3][5];),用来储存这五个学生的各科成绩,因为此题需要运用多次循环结构,所以接着再定义几个整型变量,用于实现循环结构。(int  i,x, y, z;)

运用循环以及scanf_s函数从键盘上把数据存储到数组中。

for(z = 0; z <= 4; z++)

{

printf("请分别输入学生%d的3科成绩:", z + 1);

scanf_s("%lf %lf %lf", &ss[0][z], &ss[1][z],&ss[2][z]);

}

printf函数是提示我们在键盘上怎样输入数据,scanf_s函数的作用则是让输入的数据按每一列从上到下的顺序存储在数组中,其中,每一列就代表一个学生三门课程的成绩,因为我们定义的是一个double型的数组,在输入它其中的元素时需要用%lf格式,不然就会出错。循环结构在此处的作用是让我们一共输入五次,每次输入的是一个学生的三门成绩。

得到数据之后,我们就需要使用函数来帮我们进行下一步的数据处理,由题意可知,解题需要用到求数据的平方,因此,我们在开头添加一个提供包含数学公式的头文件(#include<math.h>)。接下来,在主函数中对我们接下来要写的函数进行申明:(double average_ps(int n, double ss[3][5]);)此函数的作用是求某个学生三个科目的平均分,(int n)的意思是输入要求学生的代号,比如学生1,那么在之前存储学生分数的数组中第一列就是他的三个科目的分数。( double ss[3][5])的作用在于把数组中的数据作为形参传入函数中进行运算。接下来是这个求某个学生平均分的代码:

double average_ps(int n, double ss[3][5])

{

int x;

double sum;

x = n - 1;

sum = (ss[0][x] + ss[1][x] + ss[2][x]) / 3;

return sum;

}

由于我们传入的整数n是1~5,但是数组中的排序是从0开始的,因此需要(int x;),再对x进行减一,就得到此学生在数组中真正的排序。因为此函数需要返回一个带有小数的数据,因此我们(double sum;),利用sum来存储计算好的数据,最后再返回它到主函数中。(sum = (ss[0][x] + ss[1][x] + ss[2][x]) / 3;)此行代码是求平均分的核心代码,括号中表示调用数组中属于这个学生的三科成绩,(ss[0][x])中的x是定位到属于此学生的成绩的那一列,因为数组中的排序是从0开始的,所以0就表示这个学生第一科的成绩,以此类推,这括号中的代码就表示这个学生的三科成绩,最后在除以3,就得到了这个学生的平均分。

接着是定义第二个函数(double average_ec(int n, double ss[3][5]);),函数代码如下:

double average_ec(int n, double ss[3][5]) {

int i, x;

double sum = 0, average;

x = n - 1;

for (i = 0; i <= 4; i++) {

sum = sum + ss[x][i];

}

average = sum / 5;

return average;

}

与之前求个人平均分的代码不同,这串代码中的n表示的是某科的意思,n的范围是1~3,分别表示第一科,第二科和第三科。因为我们计算各科平均分时需要把所有的分数加起来,并且所求得的数据带有小数,所以(double sum = 0, average;)(int i),定义的这个i用来进行循环,把所有的分数都加起来。sum表示的是所有数据加起来的总和,average就是所要求的平均分。

(for (i = 0; i <= 4; i++) {

sum = sum + ss[x][i];

})

此段代码就是对每个学生的这一科成绩进行累加,因为我们在数组中的每一行表示的就是一科的成绩,每一列就表示某个学生的三科成绩,因此,i就代表了数组中某行的第i+1个元素,x就代表的是第x+1行。利用这段循环,我们就可以得到某一科的总分sum,最后再对sum除以5得到average,也就是这一科的平均分。最后在把此平均分返回到主函数中,我们的这个函数就达到了求各科平均分的作用。

接下来就到主函数的代码部分:

第一段代码:

for (y = 1; y <= 5; y++) {

p[y - 1] = average_ps(y, ss);

printf("学生%d:",y);

printf("%.2f  ", p[y-1]);

}

我们在主函数中对所要使用的函数进行了申明,需要用到函数处理数据时,我们就可以直接调用需要用到的函数。

这段代码是分别对每一个学生求他们的平均分,所以我们需要定义一个数组(double  p[5];),用来储存他们的平均分。y从1到5,进行五次循环,并且y也代表了学生1到学生5。(p[y - 1] = average_ps(y, ss);),因为数组中的排序是从0开始的,因此p[y-1]就表示第一个学生的平均分,再利用average_ps(y, ss)这个函数求得平均分的值,把它赋予等号左边数组中的元素,用来储存。接着:

printf("学生%d:",y);

printf("%.2f  ", p[y-1]);

就是输出学生y的平均分是多少,格式是保留两位小数,数据后有一个空格把接下来的数据隔开。

在输出数据之后为了达到美观的效果,我们在每段输出之后用一个换行符隔开。

第二段代码

for ( x= 1; x <=3 ; x++) {

printf("科目%d平均分:",x);

printf("%.2f ", average_ec(x, ss));

}

此段代码是利用循环和average_ec函数求各科的平均分以及输出此平均分,x从1到3表示进行三次循环,同时也表示第1~3科目。

题目已经给出了求方差的公式

因此我们接下来就要求平均分的方差

第三段代码如下:

for (i = 0,pfqh=0,qh=0; i <= 4; i++) {

pfqh += p[i]*p[i];

qh += p[i];

d = pfqh / 5 - pow(qh / 5, 2);

printf("variance:%lf", d);

}

根据公式, 表示的是某个学生的平均分,我们在之前的p数组中正好储存了学生们的平均分,所以其中的元素可以用来表示  ,接着我们在主函数中(double pfqh,qh,d;),并赋予pfqh,和qh初值等于0 ,否则在进行循环求值是会出错。pfqh表示的是∑xi²,qh表示的是∑xi,d表示的是所求的平均方差。i的范围是0~4,进行五次循环,p[i]表示的是数组中第i+1个元素。

pfqh += p[i]*p[i];

qh += p[i];

这两行代码就是对数组中的元素进行累加,最后得到∑xi²和∑xi 。

d = pfqh / 5 - pow(qh / 5, 2);

这段代码表示的就是题目中给的公式,pow() 函数用来求∑xi /5的 2 次幂(次方)。

最后,printf("variance=%lf", d); 输出平均方差。

运行结果如下:

#include<stdio.h>
#include<math.h>
int main(){double ss[3][5];int  i,x, y, z;double average_ps(int n, double ss[3][5]);double average_ec(int n, double ss[3][5]);double  p[5],pfqh,qh,d;for(z = 0; z <= 4; z++)                {printf("请分别输入学生%d的3科成绩:", z + 1);scanf_s("%lf %lf %lf", &ss[0][z], &ss[1][z],&ss[2][z]);}                                                    //分别录入5个学生的3门成绩for (y = 1; y <= 5; y++) {p[y - 1] = average_ps(y, ss);printf("学生%d:",y);printf("%.2f  ", p[y-1]);}                                                    //输出每个学生的平均分printf("\n");for ( x= 1; x <=3 ; x++) {printf("科目%d平均分:",x);printf("%.2f ", average_ec(x, ss));}                                                    //输出每科成绩的平均分printf("\n");for (i = 0,pfqh=0,qh=0; i <= 4; i++) {pfqh += p[i]*p[i];qh += p[i];}                                                     d = pfqh / 5 - pow(qh / 5, 2);                      //计算平均分方差printf("variance=%lf", d);return 0;
}
double average_ps(int n, double ss[3][5])
{int x;double sum;x = n - 1;sum = (ss[0][x] + ss[1][x] + ss[2][x]) / 3;return sum;
}                                                                   //求每个学生的平均分
double average_ec(int n, double ss[3][5]) {int i, x;double sum = 0, average;x = n - 1;for (i = 0; i <= 4; i++) {sum = sum + ss[x][i];}average = sum / 5;return average;
}                                                                   //计算各科成绩的平均值

利用函数求平均分及方差相关推荐

  1. 利用函数求数组中的最大值

    利用函数求数组中的最大值 <!DOCTYPE html> <html lang="en"><head><meta charset=&quo ...

  2. 利用函数求任意两个数之间的和

    利用函数求任意两个数之间的和 <!DOCTYPE html> <html lang="en"><head><meta charset=&q ...

  3. 利用函数求两个数的最大值

    利用函数求两个数的最大值 <!DOCTYPE html> <html lang="en"><head><meta charset=&quo ...

  4. JavaScript-84:利用函数求任意两个数的和

    1 利用函数求任意两个数的和 function getSum (num, num1) {console.log(num + num1); } getSum(1, 2); getSum(1100, 30 ...

  5. python3,利用函数求两个数的和与差。

    基础内容: 相信很多刚接触 python 的同学都有遇到过这种题.以下是 在 python 中的利用函数求两个数的和与差. class Calculate: def --init--(self,num ...

  6. 利用函数求出两个数的最大值

    利用函数,求出两个数的最大值,要求可以自己输入数值,并且利用函数 例如 a=10 b=20 最后的结果为20 函数段 int MAX(int x, int y) {int z = 0;if (x &g ...

  7. HTML语言利用函数求中位数,javascript-使用OnClick()计算用户放入HTML表中的数字的平均值...

    当前在识别我的HTML / JavaScript代码中的错误时遇到问题,这阻止了我的JavaScript函数计算由表用户输入的五个数字的平均值. 将数字输入所需的单元格后,单击"计算成绩&q ...

  8. python利用函数求20的阶乘_请运用reduce函数,计算20的阶乘,慕课网2-19

    # 从functools 中导入reduce函数 from functools import reduce def use_reduce(data): # 使用result接收reduce实现20的阶 ...

  9. 利用函数求三个数的最大值

    我率先抄书 #include<stdio.h> int main() {int max(int x, int y);//声明函数maxint a, b, c, d;scanf(" ...

最新文章

  1. VS2017增加数据库连接串
  2. 连接linux工具Mtr,mtr命令_Linux mtr命令使用详解:网络连通性判断工具
  3. 启动rrt什么意思_python学习第144课--创建虚拟机、设置虚拟机参数以及启动虚拟机...
  4. 判断js中数据类型 的最短代码
  5. 聊聊Spring Data Auditable接口的变化
  6. Delphi - 注入的方式来禁止任务管理器
  7. Atitit 多继承实现解决方案 java c#
  8. 易筋SpringBoot 2.1 | 第廿五篇:SpringBoot之Jedis访问Redis
  9. python 离散点 等高线_飞时达软件离散点高程、等高线高程、特征线高程等检查与处理...
  10. 如何对 List集合进行排序
  11. 远程桌面连接下拉框IP地址删除
  12. VGA接口、DVI接口、HDMI接口
  13. 牛蛙怎么做好吃 牛蛙的家常做法
  14. 超实用的doc 转 docx
  15. mysql查询bom清单_U8 数据库BOM表SQL语句查询
  16. 一个程序员的奋斗历程(绝对励志!) [转]
  17. 智能照明控制系统在城市夜景照明工程中的应用
  18. 常用的python读写函数
  19. WAF——web安全及web应用防火墙
  20. Windows 2003和XP之间的异同

热门文章

  1. 服务器2颗cpu的性能,DIY从入门到放弃:两颗CPU性能更强吗?
  2. EasyDarwin开源流媒体服务器Golang版本:拉转推功能之拉流实现方法
  3. 静态html使用js发送邮件,科技常识:html实现邮箱发送邮件_js发送邮件至指定邮箱功能...
  4. video在iPhone浏览器上播放没有声音
  5. 使用ivx滑动时间轴制作动画效果的经验总结
  6. 微信小程序--行星轨迹
  7. ​手把手教你做个AR涂涂乐 ​
  8. 成都市计算机会考考试题,成都市初中信息技术会考试题_第七套.docx
  9. 【头歌实验】五、Python循环结构
  10. SylixOS动态内存分配操作