当前课程知识点:C语言程序设计(上) > 数组(二) > 5.9 数组综合应用 > 5.9.1 应用1——学生成绩统计
大家好
我们
接下来看一下数组的应用
这边我们给一个例子
是
一个期中考试的成绩的统计
我们就给了三门课
数学 英语和物理
那么要统计什么东西呢
其相当于说
最终我们要求的是
输出这么一个表
这个表里边有学号
有
我们的三门课的成绩
数学 英语
和物理的三门课的成绩
然后还要什么呢
要总分
每个人的总分
还要平均分
还要一个什么东西呢
这三门课
如果哪个同学
三门课都在90分以上
我们给这后边就打一个Y
否则呢打No
比如说
2号同学
92分 91分 90分
三门课都在
90分以上
不是说总分高
一定是三门课都在90分以上
打Yes
否则打No
就这么件事情
大家看看
是说
这看上去就是一个二维表
那么我们数据首先应该放进去
然后去做它的总分的统计
平均分的统计
然后判断
是打Yes呢还是打No
是这么一件事情
怎么做呢
我们看一下
先考虑一下这个算法
我们在考虑这件事情上
它的计算很简单
只是我们要考虑什么呢
这些数据
在内存里
怎么存放
比如说学号
和这些课程的成绩
要存放在一起吗
比如说我们统计出来的
这个结果
总分 平均分
要存放吗
还是说
算出来就输出就行了
不用存放
所有这些东西的安排的不同
我们的程序
设计出来的程序
它的面貌就会不同
比如说我们这样考虑
假如说是
我这样考虑
学号
和成绩
我都放在一起
那么这就给了一个约束
是什么呢
我们的成绩
因为学号不可能有点几
不可能有小数点
那我们成绩也就取整数
我们大家都用整数
如果我们想保留
成绩里边的点5
点几分的话
那
和学号放在一个数组里
那就受了数组的约束
数组必须是同类型的
还有
那么我们不这样考虑
是不是可以这样考虑
我把三门课
放在一个二维数组里
我把这个学号单独放在一个
一维数组里
这样是不是可以呢
当然也可以
比如说我这学号
有的还有字符的
我可以是字符型的
也可以是
整型的
无符号整型的
而我这个
分数呢
就可以是实型的了
那还有一种考虑
我们可不可以把
所有这些
就是不仅仅是原始的数据
我把统计出来的
总分和平均分
有都一起
放在一个二维数组里
那这个二维数组就成了
我们这是6列
6个列
那我们说30人
就是30乘以6列的
这么大的一个数组
愿意选取哪一种
数据结构
来考虑我们的问题呢
选取的不同
我们的程序
就会不同
比如说这是两个数组
数组的大小也不一样
这个是一个数组
那么对数据的约束就不一样
所以呢
这个数据结构
就是到底我们选取什么样的
数据存放形式
基本上是决定了
我们程序的一个
整个呈现出来的面貌
我们在这选取
我们看一下程序
我们选取了一个
什么样的形式呢
4列
把学号和三门课都放在里边
我在这块呢
我们选取了这样的一个形式
然后呢
在这里边做什么呢
在最内循环里边
先把
从0
到小于等于3
也就是说
先输一个人的学号
再输他的三门课的成绩
把所有的这个数组里的
原始数据都放进去
这在哪里做呢
内循环的红颜色的for
外循环的蓝颜色的for
这是
给数组里存数据
存完了以后我们要做什么呢
先打印了一个表头
再打印了一行横线
然后再看
下边我们的程序
这个程序里边
依次对
从0到小于等于n
n在这里边是什么呢
是人数啊
小于等于n
然后每一次做什么呢
输出
第i行
第0列
这是什么呢
学号
这是
我们说的
从0
到小于n的
在每一次我先输出
第0列上的
这是学号
然后在下边呢
单独用一个循环来做什么呢
用一个循环
做里边的三个数的求和
三个数的
就三门课的数据的求和
在出了这个循环
我们求
什么呢
做两件事情
一件事情是说
三门课都大于90分吗
如果是的话
我们给c里边赋值Y
否则c里边赋值的是N
那求平均分
这件事情在哪里做呢
我们看一下
求平均分这件事情
我们在直接输出的时候做
输出
我们算的这个总分在这呢
s里边
s除以3
就是我们要的
平均分
s里边是总分
这是平均分
这是什么呢
这是我们送的
c里边的那个Yes还是No
把它输出
我们看一下这个程序
大家看这是我们刚才看到的
这个a数组
n乘4列的a数组
然后呢
读这个数组
然后
再去计算
最后输出
在这输出
我们运行一下它看一下
运行的时候我们要小心
这个n给了
两行
两个人的
那么就四个数据
第一个数据是学号
后边的那个数据是三门课的成绩
那我们给第一个人
1号同学
给他的成绩是
但是有一门呢
这是1号同学
2号同学呢给一个
我们看
1号同学
总分呢
是这么多
平均分
然后呢
没有达到说每门课都大于90分
而2号同学是
每门课都大于90分
这是我们要的这个结果
那么
同学们试着想一下
你如果不这样定义数组
像我们刚才说的
学号放在一个一维数组里
其它的放在
三门课放在
一个二维数组里
然后呢
你编出来的程序
会跟这个有什么不同呢
大家可以下去试一下
-1.1 计算机的问题求解方法
--讨论题:数学模型
-1.1 计算机的问题求解方法--作业
-1.2 C语言与C程序
--讨论题:运算符
-1.3 C语言处理系统与程序调试运行
--例程
-1.4 程序中的人机交互
--例程
--作业讨论区
-2.1 算术运算的C程序实现
--算术混合运算.c
-2.1 算术运算的C程序实现--作业
-2.2 关系运算的C程序实现
--bukao.c
--字符比较.c
--讨论题:比较大小
-2.2 关系运算的C程序实现--作业
-第二周作业--作业
-2.3 逻辑运算的C程序实现
--计算结合性
--闰年.c
--自动购票问题.c
-2.3 逻辑运算的C程序实现--作业
-2.4 位运算的C程序实现
--讨论题:位运算
-2.5 几种很个别的运算
--讨论题
--讨论题
-2.5 几种很个别的运算--作业
-2.6 混合运算及数据类型转换
--讨论题:数据类型
-2.7 顺序结构程序实例
--Video
--三角形面积.c
--讨论题:工业产值
-2.7 顺序结构程序实例--作业
-3.1 程序中的路径选择实现
--打印学生成绩.c
--一元二次方程.c
-3.1 程序中的路径选择实现--作业
-3.2 路径中的再选择——嵌套判断
--例程
--讨论题:程序改错
-3.2 路径中的再选择——嵌套判断--作业
-3.3 复杂判断问题的C程序设计
--3.3 多级选择
--银行存款.c
--讨论题:多级选择
-3.4 多分支问题的C程序设计
--加减乘除运算.c
-3.4 多分支问题的C程序设计--作业
-3.5 GOTO的适当使用
-3.6 选择结构的程序实例
--3.6 程序展示
--计算第几天.c
--讨论题:输出奇数
--讨论题:计算税金
-3.6 选择结构的程序实例--作业
-第四周作业--作业
-4.1 需要重复执行的程序
--求和.c
--打印学生成绩.c
--统计录入速度.c
--求平均数.c
-4.1 需要重复执行的程序--作业
-4.2 至少要执行一次的循环
--n的阶乘.c
--字符分类统计.c
-4.2 至少要执行一次的循环--作业
-4.3 已知循环次数用for语句
--求和问题.c
--数列求和.c
--讨论题:循环语句
-4.3 已知循环次数用for语句--作业
-4.4 循环控制——简单循环应用
--水仙花数.c
--讨论题:死循环
--讨论题:猜数字
-循环结构的程序设计(一)--4.4 循环控制——简单循环应用
-4.5 循环的嵌套
--讨论题:程序运行
-4.5 循环的嵌套--作业
-4.6 break与continue
--最大素数.c
-4.6 break与continue--作业
-4.7 循环的综合应用
--数的排列组合.c
--鸡兔同笼.c
--打印空心字符.c
--讨论题:打印图形
--讨论题:计算闰年
-第六周作业
-第六周作业--作业
-5.1 同类有序数据处理问题
-5.2 一维数组的定义和引用
--数组定义.c
--数组初始化.c
--反向输出.c
--讨论题:对称数
-5.2 一维数组的定义和引用--作业
-5.3 一维字符串数组
--讨论题:编程
-5.4 字符串处理函数
--字符串反向.c
--字符串函数
-5.5 二维数组的定义与使用
-5.6 二维数组的输入输出
-5.6 二维数组的输入输出--作业
-5.7 二维数组的应用
--转置矩阵.c
--讨论题:修改程序
-5.8 二维字符数组
--5.8 单词排序
--单词排序.c
-5.8 二维字符数组--作业
-5.9 数组综合应用
--统计成绩.c
--统计字符次数.c
--讨论题:洗牌
-本期课程结束语
--end
-第八周编程作业
-《C语言程序设计(上)》期末复习参考
--html
-《C语言程序设计(上)》期末复习参考答案
--html