项目4任务4.1 开发学生成绩管理系统(一)_第1页
项目4任务4.1 开发学生成绩管理系统(一)_第2页
项目4任务4.1 开发学生成绩管理系统(一)_第3页
项目4任务4.1 开发学生成绩管理系统(一)_第4页
项目4任务4.1 开发学生成绩管理系统(一)_第5页
已阅读5页,还剩22页未读, 继续免费阅读

下载本文档

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

文档简介

任务4.1开发学生成绩管理系统(一)主讲:陈静教学目标知识目标1.理解数组的基本概念与特点,掌握一维数组的定义、初始化(完全/部分/不指定长度)及元素访问方法。2.掌握使用循环结构遍历数组的方法,理解数组下标从0开始及越界访问的危害。3.掌握数组作为函数参数的传递方式(地址传递),理解其与普通变量值传递的本质区别。能力目标1.能运用一维数组批量存储同类型数据,通过循环遍历实现数据的统计(平均分、最高分、最低分)。2.能将数组作为函数参数编写模块化程序,实现数组的排序、查找、反转等常见操作。3.能独立开发学生成绩管理系统,实现成绩输入、统计、排序和查询四大核心功能。素养目标1.培养"严谨务实"的工作态度,认真处理每一条数据,确保统计与计算结果准确无误。2.树立"开拓进取"的创新意识,在掌握基本功能基础上思考算法优化与效率提升。3.学习华罗庚先生脚踏实地、服务集体的精神,理解个体发展与集体协作的辩证关系。树立"开拓进取"的创新意识教学目标与重难点提示:难点需要重点突破,建议结合调试工具观察内存变化理解数组概念理解一维数组的基本概念和内存存储特点掌握定义初始化掌握一维数组的定义、初始化和元素访问方法循环遍历数组能够使用循环结构遍历数组元素函数参数传递理解数组作为函数参数的传递机制解决实际问题能够运用数组解决实际数据处理问题定义与初始化一维数组的定义与初始化方法访问与遍历数组元素的访问与遍历操作下标从0开始数组下标从0开始的索引机制,这是C语言数组的核心特性,也是初学者最容易出错的地方地址传递特性数组作为函数参数时的地址传递特性,理解传址与传值的本质区别目录一维数组的基本概念一维数组的定义与初始化数组元素的访问与遍历数组作为函数参数数组的常见操作任务实施——学生成绩管理系统010203040506一维数组的基本概念01一维数组的基本概念数组是相同类型数据元素的有序集合类型统一所有元素的类型必须相同连续存储各个元素在内存中连续存储,彼此相邻长度固定数组的长度在定义时即固定,无法动态改变下标访问访问元素时通过下标进行,且下标从0开始应用场景学生成绩温度记录字符序列课堂互动为什么不能为每个学生单独定义变量(score1,score2,...score50)?代码冗长需要定义50个变量名,重复代码量大,书写繁琐难以批量处理计算平均分、排序等操作无法通过循环统一实现维护困难扩展性差,学生人数变化时需大量修改代码数组如何解决?用一个数组名+下标即可统一管理,循环遍历高效处理一维数组的定义与初始化02一维数组的定义intscores[5];定义包含5个整数的数组floattemperatures[7];定义包含7个浮点数的数组charletters[26];定义包含26个字符的数组语法格式数据类型

数组名[数组长度];拓展要点命名规则数组名的命名规则和变量名相同,遵循标识符命名规则方括号含义方括号中的常量表达式表示元素的个数,即数组长度常量表达式限制常量表达式中可以包括常量和符号常量,不能包含变量一维数组的初始化1完全初始化intnumbers[5]={1,2,3,4,5};数组所有元素均被显式赋值,每个位置都有确定的初始值2部分初始化intvalues[5]={10,20};未显式初始化的元素自动置0,结果为[10,20,0,0,0]3不指定长度intdays[]={31,28,31,30,31,30,31,31,30,31,30,31};编译器自动计算数组长度,此处确定为12个元素4指定初始化器intarr[10]={[3]=5,[7]=9};C99特性:索引3和7初始化为指定值,其他元素自动为0训练项目7天温度数据一周温度数组浮点型数组使用float类型定义数组,存储带小数的温度数值完全初始化采用花括号{}在声明时一次性完成所有元素的赋值温度值列表23.5,25.0,22.8,24.1,26.3,25.5,23.9参考代码floatweek_temp[7]={23.5,25.0,22.8,24.1,26.3,25.5,23.9};存储周一至周日共7天的温度记录数组下标0-6对应每一天的数据访问动手实践,巩固一维数组初始化语法数组元素的访问与遍历03数组元素的访问访问语法数组名[下标]重要特性下标从0开始第一个元素的下标是0最后一个元素下标=长度-1数组长度为n时,末元素下标为n-1越界访问风险下标超出合法范围引发未定义行为数组元素索引与值映射访问示例scores[0]=85//访问第一个元素scores[2]=78//访问第三个元素scores[1]=95//修改第二个元素,原值92→95数组元素的遍历数组遍历过程示意循环变量i从0到size-1的迭代过程访问点遍历顺序越界边界遍历概念按照一定的顺序,依次访问数组中的每一个元素for(inti=0;i<size;i++){printf("学生%d:%d分\n",i+1,scores[i]);}遍历要点通常使用循环结构实现遍历逻辑,for循环最常用循环变量作为下标,从0开始自增,循环条件设置i<n到数组长度减1为止,防止越界⚠️

关键警告i<=n

会导致数组越界访问,引发程序错误课堂互动错误代码1234intarr[5]={10,20,30,40,50};for(inti=0;i<=5;i++){printf("%d\n",arr[i]);}问题分析循环条件i<=5会导致i取值为0,1,2,3,4,5当i=5时,arr[5]越界访问(数组只有arr[0]到arr[4])可能导致程序崩溃或输出错误数据修正方法1234intarr[5]={10,20,30,40,50};for(inti=0;i<5;i++){printf("%d\n",arr[i]);}边界条件对比错误i<=5访问arr[5]越界正确i<5仅访问arr[0]~arr[4]正确i<=4等效写法,同样安全数组作为函数参数04数组作为函数参数传递机制传递的是首元素地址非整个数组副本数组作为函数参数时,实际上传递的是数组首元素的地址,而不是整个数组的副本重要特性函数中对数组元素的修改会直接影响到原始数组形参可以写成数组形式intarr[]或指针形式int*arr,两者等价函数内部无法通过数组名直接获取数组大小,需额外传递长度参数函数原型格式数组形式返回值类型

函数名(数据类型arr[],int数组长度);指针形式返回值类型

函数名(数据类型*arr,int数组长度);两种写法完全等价数组作为函数参数函数定义float

calculate_average(intarr[],intsize){intsum=0;for(inti=0;i<size;i++){sum+=arr[i];}return(float)sum/size;}调用示例intscores[5]={85,92,78,96,88};intsize=sizeof(scores)/sizeof(scores[0]);floatavg=calculate_average(scores,size);printf("平均分:%.2f\n",avg);数组名作为参数传递首地址数组名在传参时自动退化为指向首元素的指针,函数内通过下标访问可遍历整个数组需额外传递数组长度size数组传参后无法获取原数组长度,必须通过第二个参数传入元素个数函数内可修改原数组元素由于传递的是地址,函数内部对数组元素的修改会直接影响原数组输出结果平均分:87.80数组的常见操作05数组的常见操作查找最大值int

find_max(intarr[],intsize){intmax=arr[0];//初始化:假设首元素最大for(inti=1;i<size;i++){//从第二个元素开始遍历if(arr[i]>max){//发现更大值max=arr[i];//更新最大值}}returnmax;}时间复杂度:O(n)—需遍历整个数组空间复杂度:O(1)—仅用单个变量存储查找最小值int

find_min(intarr[],intsize){intmin=arr[0];//初始化:假设首元素最小for(inti=1;i<size;i++){//从第二个元素开始遍历if(arr[i]<min){//发现更小值min=arr[i];//更新最小值}}returnmin;}时间复杂度:O(n)—需遍历整个数组空间复杂度:O(1)—仅用单个变量存储数组的常见操作数组反转voidreverse_array(intarr[],intsize){intstart=0;intend=size-1;while(start<end){inttemp=arr[start];arr[start]=arr[end];arr[end]=temp;start++;end--;}}双指针法:首尾交换,向中间靠拢冒泡排序voidbubble_sort(intarr[],intsize){for(inti=0;i<size-1;i++){for(intj=0;j<size-i-1;j++){if(arr[j]>arr[j+1]){inttemp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}}外层循环控制轮数,内层循环相邻比较交换1反转执行流程1初始化双指针:start指向首元素(0),end指向尾元素(size-1)2交换arr[start]与arr[end]的值,借助temp临时变量3start++右移,end--左移,向中间靠拢4当start≥end时停止,数组完成反转2冒泡执行流程1外层循环i控制排序轮数,共需size-1轮2内层循环j遍历未排序区间,范围逐轮缩小(size-i-1)3相邻元素比较:若arr[j]>arr[j+1]则交换位置4每轮将当前最大元素"冒泡"到正确位置训练项目编程练习训练项目定义数组定义一个包含10个整数的数组,为后续操作准备数据存储空间循环输入使用循环结构输入10个整数,掌握数组元素的批量录入方法调用函数调用函数计算并输出最大值、最小值和平均值,实现数据统计功能排序输出对数组进行排序后输出,巩固冒泡排序或选择排序算法的应用技术提示一使用

sizeof(arr)/sizeof(arr[0])

计算数组长度,提高代码通用性技术提示二复用本节课学习的查找函数和排序函数,避免重复造轮子任务实施:学生成绩管理系统06任务实施——学生成绩管理系统利用C语言数组批量存储和处理同类型数据的特点,设计学生成绩管理系统成绩输入从键盘依次获取每个学生的成绩,存入数组中成绩统计遍历数组,计算所有学生的平均分,并找出最高分和最低分成绩排序对数组中的成绩按从高到低的顺序进行排列成绩查询根据用户输入的学号(数组下标),输出对应学生的成绩任务实施——学生成绩管理系统===学生成绩管理系统===请输

温馨提示

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

评论

0/150

提交评论