项目四设计学生成绩管理系统--PPT课件.ppt_第1页
项目四设计学生成绩管理系统--PPT课件.ppt_第2页
项目四设计学生成绩管理系统--PPT课件.ppt_第3页
项目四设计学生成绩管理系统--PPT课件.ppt_第4页
项目四设计学生成绩管理系统--PPT课件.ppt_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目四学生成绩排序 项目要点 1 各种数组的定义和使用方法2 数组的存储结构3 数组的输入输出及数组的应用4 常用的字符串处理函数学习目标 1 使用一维数组和二维数组处理同一类型的大批数据2 使用字符数组处理字符串3 使用二维数组处理字符串 C语言程序设计 1 工作任务导入 学生成绩管理是学校教学管理中的一个非常重要而又非常繁琐的工作 传统的手工管理 已经不能满足现代教育和管理的要求 取而代之的是运用高效能的计算机来对学生的成绩进行管理 本书将运用C语言开发一个学生成绩管理系统 系统的功能将在项目四 五 六 七 八5个项目任务中由简入繁 逐步得到实现 完善和优化 项目四主要实现的功能包括对多名学生1门课程的成绩和多名学生多名课程的成绩进行管理 功能模块如图4 1所示 2 引导问题 1 多名学生1门课程的学生成绩如何存储 2 如何录入和输出多名学生1门课程的成绩 3 如何查询学生的成绩 如何对学生成绩进行排序 4 如何录入和输出多名学生多门课程的成绩 5 如何计算每位学生的总成绩 6 如何对学生的姓名进行处理 3 本项目由5个任务组成 任务1实现多名学生1门课程成绩的录入 输出 任务2对学生的成绩进行查询 任务3对多名学生1门课程的成绩排序 任务4对多名学生多门课程的成绩进行处理 计算每位学生的总分 并按照总分由大到小的顺序输出班级学生成绩单 任务5输入 输出学生的姓名 4 任务1录入 输出多名学生1门课程的成绩 任务分析某班50名学生参加了一次C语言程序设计考试 现要录入和输出全班同学的成绩 本任务要将50名学生成绩录入并全部输出 按照前面学过的知识就需要使用50个简单变量来存储这批数据 光定义这批数据的变量名就需要大量的工作 这显然是不合理的 如何处理这样大批的数据呢 这就需要引入一个数据结构 数组来存储学生的成绩 5 任务实施 在本任务中将定义一个数组intscore 50 用来存放50名学生的C语言成绩 采用单循环实现学生成绩的录入和输出 还将设计学生成绩管理系统的菜单界面 6 任务1录入 输出多名学生1门课程的成绩 main inti x s 0 for i 0 i 50 i scanf d 只用了三个变量就解决了问题 但数据没有保存 如果需要把成绩按从高到低的顺序全部打印出来 怎么办 计算50个学生成绩的平均分 7 任务1输入 输出多个学生一门课程的成绩 8 一维数组的定义 数据类型数组名 常量表达式 数组元素的数据类型 遵循C语言标识符规则 数组长度几个数组元素 4 1 2一维数组 例如 inta 5 9 说明 常量表达式表示元素的个数 即数组长度 常量表达式中可以包括常量和符合常量 不能包含变量 4 1 2一维数组 inti 5 inta i 数组长度为变量 10 4 1 2一维数组 以下对一维整型数组a的正确定义的是 A inta 10 B intn 10 a n C intn inta n D defineSIZE10scanf d n inta SIZE 11 4 1 3一维数组的引用 表示引用数组a中的第2个元素 数组名 下标表达式 表示引用数组a中的第6个元素 表示引用数组a中的第16个元素 若一个数组长度为n 其下标值范围是0 n 1 C语言规定只能逐个引用数组元素而不能一次引用整个数组 12 试一试 问题4 1给一个数组元素赋值并输出 分析 输入和输出数组中的10个元素 必须使用循环语句逐个输出各下标变量 13 4 1 3一维数组的引用 输入5个学生的数学成绩 计算平均分 将平均分输出到屏幕上 voidmain inti mathScore 5 sum 0 floataverage for i 0 i 5 i scanf d 数组元素的地址也是通过 运算符得到的 14 4 1 3一维数组 1 上例中 语句average sum 5 0 修改为average sum 5 结果如何 2 练习 从键盘输入5个学生的成绩 求出并输出分数最高的学生序号及最高成绩 15 数组的赋值只能逐个对数组元素赋值 不能直接对数组名赋值 因数组在内存占一片连续的存储空间 可用循环语句处理数组 4 1 2一维数组的引用 16 1 在定义数组时 对全部数组元素赋初值此时可以省略数组的长度 4 1 4一维数组的初始化 C语言程序设计 17 4 1 4一维数组的初始化 2 在定义数组时 对部分数组元素赋初值 C语言程序设计 18 4 1 4一维数组的初始化 3 当初值的个数多于数组元素的个数时 编译出错 19 试一试 问题4 3输出Fibonacci数列的前20项 Fibonacci数列 第一项和第二项为1 以后各项为前两项之和 分析 前面我们使用迭代法解决了这个问题 现在我们用数组来解决 首先定义一个大小为20的数组 然后f 0 1 f 1 1 f n f n 1 f n 2 n 1 运用该公式即可求出数组中后面各项的内容 20 任务2查询学生成绩 任务分析 任务1中录入了50名学生的成绩并保存到了数组中 任务2实现学生成绩管理系统中的查询功能 用户输入待查找学生的序号 输出该学生的成绩 查找学生成绩中的最高分 最低分及所在位置 即实现学生成绩管理系统的第3个和第4个功能 21 任务实施 输入学生的序号 序号减去1 就得到了该学生在数组中的下标 直接对数组元素进行引用即得到该学生的成绩 查找学生成绩的最高分和最低分 关键在于增加两个变量 max表示当前的最高分 min表示当前的最低分 22 4 2 2成绩查询 用初始化方法 把10名学生的数学成绩存储在数组中 再输入一个考分 查找该分数是否存在在数组中 如果是 则输出它是第几名学生的成绩 分析 采用 顺序查找 法 即将数组中的元素一个一个依次取出 与待查找的数比较 如果相等 则找到了 如果所有元素取出后 都没有找到相等的 则该数不存在 23 4 2 3查询成绩的最大值 从键盘输入10名学生的成绩 输出分数最高的学生序号及最高成绩 分析 定义一个变量max 它表示当前最大的值 然后把a 0 送入max中作为初始值 再设计一个for语句 从a 1 到a 9 逐个取出并与max中的内容比较 若比max的值大 则把该下标变量的值送入max中 因此max总是在已比较过的下标变量的值中为最大者 比较结束 输出max的值 24 任务3学生成绩排序 任务分析实现学生成绩管理系统中的成绩排序功能 将某班50位同学参加C语言程序设计考试的成绩 按从高到低的顺序排序并输出 即实现学生成绩管理系统中的第5个功能 25 任务实施 数组的排序法有很多 这里介绍冒泡排序法 冒泡排序 Bubblesort 顾名思义 就是数据由最大值排列到最小值 像是在水里吐气泡一样 大气泡由于浮力较大 因此会先浮出水面 26 两层循环结构外层循环每次把操作范围内最大的数放到最后位置内层循环每次把较大的数放到靠后的位置 4 3 2冒泡法排序 27 有数组a 其元素值为7 1 5 6 9 3 现要把该数组按从小到大的顺序排列并输出 main inta 7 1 5 6 9 3 inti j t printf thesortednembers n for i 0 i 6 i printf 5d n x i for i 0 ix j 1 t x j x j x j 1 x j 1 t 28 4 2 1冒泡法排序 1 上例中 如果要按从大到小的顺序排序 该如何修改程序呢 2 练习 一个班50位同学参加了一次C语言程序设计考试 现要输入全班同学的成绩 并按从低到高排序并输出 29 任务4处理多名学生多门课程的成绩 任务分析 在前面的任务中 我们实现了对多名学生1门课程成绩的管理 在实际应用中 我们经常还需要处理这样的问题 某班50名学生参与考试 考了3门课程 现要求按总成绩的高低输出成绩单 成绩单的格式如下 排序数学C语言英语总分19887882732968688270这就涉及到多名学生多门课程处理的问题 如果仅仅使用一维数组进行上述处理 是很困难的 此时需要使用二维数组 30 x 0 0 x 0 1 x 0 2 x 1 0 x 1 1 x 1 2 数据类型数组名 常量表达式1 常量表达式2 行 列 inta 3 4 b 3 4 intc d 3 4 4 3 1二维数组 二维数组的定义 31 任务实施 实现对多名学生多门课程的成绩管理 首先计算出每位同学3门课程的总分 然后按照总分由大到小的顺序输出班级成绩单 本任务最关键的问题是排序 采用的方法是冒泡法 只是在总分进行交换时 还应该将此同学的科目成绩进行交换 所以交换的数据比较多 显得比较繁琐 32 数组名 行下标 列下标 a 3 4 3 a 1 2 1 引用 下标越界 a 1 2 1 4 3 2二维数组 33 二维数组元素的表示形式为 数组名 行下标 列下标 4 3 2二维数组的引用 34 试一试 问题4 5输入5名学生3门课程的成绩并输出 分析 用双重循环输入和输出二维数组的元素 外循环控制行 内循环控制列 35 练一练 输入一个4行3列的二维数组 计算所有元素之和 36 1 分行对二维数组初始化 inta 2 3 1 2 3 4 5 6 初始化后 123456 4 3 4二维数组的初始化 37 inta 2 3 1 2 3 4 5 6 初始化后 123456 2 按数组排列的顺序初始化 4 3 4二维数组的初始化 38 4 3 4二维数组的初始化 3 对全部数组元素初始化 inta 3 1 2 3 4 5 6 初始化后 123456 省略行号 39 用二层循环语句处理数组 通常外循环控制行 内循环控制列 for i 0 i 3 i for j 0 j 4 j a i j i j 二维数组的赋值 0123234345 4 3 4二维数组的初始化 40 二维数组的输入输出 intb 3 4 i j for i 0 i 3 i for j 0 j 4 j scanf d 4 3 4二维数组的初始化 41 试一试 问题4 6编写程序 将一个二维数组行和列元素互换 存放到另一个二维数组中 42 分析 二维数组行和列互换 就是指i行j列的元素 变成j行i列的元素 43 问题4 7用初始化方法 把5名同学3门课程成绩存储在二维数组中 计算每位同学的总成绩和平均分 输出总分最高的学生的总成绩 44 练习 下列程序有哪些错误 请解释错误原因 1 main intx a 10 for x 0 x 10 x scanf d a x x 10 45 练习 下列程序有哪些错误 请解释错误原因 2 main inti j a 4 1 2 3 4 5 6 7 8 for i 0 i 4 i for j 0 j 2 j printf d a i j inta 2 1 2 3 4 5 6 7 8 46 作业 345678897654324190938876704097321 找出其中的最大值 及所在的位置 2 计算出所有元素之和 3 计算出主对角线上元素之和 47 案例 1 输入10个整数 计算出平均值 并统计小于平均值的数据的个数 2 将两个矩阵相加 48 任务5输入 输出学生姓名 任务分析 完善任务4的功能 在输出某班50位学生3门课程考试的成绩单时 输出学生的姓名 这就需要对学生的姓名进行处理 学生的姓名是由若干个字符组成的字符串 本任务需要解决字符串的存放问题 49 任务实施 C语言中可以用字符数组存放字符串 字符数组中的各数组元素依次存放字符串的各字符 字符数组的数组名代表该数组的首地址 这为处理字符串中个别字符和引用整个字符串提供了极大的方便 50 4 4 2字符数组 char数组名 常量表达式 二维字符数组 char数组名 常量表达式1 常量表达式2 一维字符数组str 二维字符数组s1 51 1 用字符常数初始化 charc C h i n a 0 初始化后 4 4 2字符数组 52 4 4 2字符数组 charc China charc China 初始化后 2 直接用字符串常量初始化 53 4 4 2字符数组 1 用字符常数初始化 charLan 5 8 B A S I C 0 F O R T R A N 0 P A S C A L 0 C 0 J A V A 0 二维字符数组的初始化 每行存放一个字符串 54 4 4 2字符数组 二维字符数组的初始化 chara 3 10 basic pascal c 2 直接用字符串常量初始化 55 问题4 8给字符数组初始化为 Happy 并输出各个数组元素 问题4 9输出一个钻石图形 如图所示 试一试 56 4 4 3字符串 字符串是用双引号括起来的若干有效字符序列 字符串可以包括字母 数字 转义字符等 C语言中 将字符串作为字符数组来处理 57 4 4 3字符串 C语言规定了一个 字符串结束标志 以字符 0 代表 在处理字符数组的过程中 一旦遇到结束符 0 就表示已达到字符串末尾 数组的长度是6 而不是5 58 练习 1 分析以下程序 其运行结果是什么 voidmain charc 5 a b 0 c 0 printf s n c 2 有字符串 abcAbcDEFDef 把该字符串中的小写字母转换为大写字母后输出 4 4 3字符串 59 任务4输入 输出学生 4 4 3字符串输入 输出 1 字符数组的元素逐个输入和输出 用格式输入输出函数scanf 和printf 使用 c 格式符 或用字符输入输出函数getchar 和putchar 每次输入或输出一个字符 for i 0 i 10 i scanf c for i 0 i 10 i c i getchar 注 getchar 和putchar 定义在标题文件 stdio h 中 使用前要用 include把它们包含进来 60 4 4 4字符串输入 输出 2 字符数组整体输入和输出 用格式输入输出函数scanf 和printf 使用 s 格式符 输入和输出字符串 1 一维字符数组 scanf s 字符数组名 printf s 字符数组名 chars1 10 scanf s s1 printf s s1 不用加 61 4 4 4字符串输入 输出 2 字符数组整体输入和输出 2 二维字符数组 在二维数组中每行存放一个字符串 输入输出时要用行的首地址 scanf s 字符数组名 行下标 printf s 字符数组名 行下标 charstr 3 10 scanf s str 1 printf s str 1 62 main charss 3 10 inti for i 0 i 3 i scanf s ss i for i 0 i 3 i printf s ss i 注意 在scanf 和printf的 s 是直接控制字符串的 只要求某个字符串的起始地址作为参数 输入时 scanf 会自动把用户输入的回车符 空格或制表符转换成 0 加在字符串的末尾 printf 则在遇到 0 就结束输出 但不能自动换行 main charstr 14 scanf s str printf n s str printf string 输入 Howareyou 输出 Howareyou 输入 Howareyou 输出 Howstring 63 问题4 11编写程序 输入和输出3名学生的姓名 试一试 64 任务6任务拓展 4 6 1字符串处理函数 程序中如果调用下面介绍的4个字符串处理函数 在程序的开始应该写预处理命令 include 在字符串处理函数中 凡是用数组名或字符串首地址作参数的地方 都可以用指针变量作参数 指针变量的概念在第6章介绍 说明 65 任务6任务拓展 4 6 1字符串处理函数 1 求字符串长度函数strlen 格式 strlen str 功能 测试字符串长度 函数值就是str中字符的个数 不包含字符串的结束符 0 66 任务6任务拓展 4 6 1字符串处理函数 1 求字符串长度函数strlen charstr 10 China printf d strlen str 或printf d strlen China 输出结果 5 67 任务6任务拓展 4 6 1字符串处理函数 2 字符串复制函数strcpy 格式 strcpy str1 str2 功能 将str2中的字符串复制到str1数组中 68 任务6任务拓展 4 6 1字符串处理函数 2 字符串复制函数strcpy chars1 10 s2 Beijing strcpy s1 s2 或 st

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论