版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务4.3开发学生成绩管理系统(三)主讲:陈静目录字符数组与字符串基础字符串数组的应用任务实施010203教学目标知识目标理解字符数组与字符串的概念及区别掌握字符数组的定义、初始化方法掌握字符串的输入输出函数使用能力目标能够使用字符数组存储和处理文本信息能够运用字符串处理函数解决实际问题能够实现字符串数组的排序与查询功能素养目标培养科学组织数据的逻辑思维树立责任担当的服务意识践行"知行合一"的编程实践精神教学重难点教学重点字符数组的定义与初始化方法掌握数组声明语法与多种初始化方式字符串的输入输出操作熟练运用scanf/printf及专用函数字符串数组的应用二维字符数组存储多组字符串数据教学难点字符串以空字符\0作为结束标志的理解隐含结束符对字符串长度与操作的影响fgets函数的安全使用及换行符处理缓冲区大小控制与换行符残留问题字符串排序算法的实现strcmp比较与交换逻辑的循环设计任务导入学生成绩管理系统:文本信息的存储与处理遇到的问题使用字符数组存储学生姓名"张三"时出现输出乱码无法正确比较姓名问题根源对C语言中字符数组和字符串的理解不足。C语言没有专门的字符串类型,而是使用字符数组表示字符串,以空字符\0作为结束标志课堂互动请同学们思考:为什么字符数组存储字符串时会出现乱码?如何避免?字符数组与字符串基础01字符数组的定义与初始化字符数组定义charstr[10];//定义可存储9个字符+1个结束符的字符数组方法1字符列表初始化charname1[6]={'Z','h','a','n','g','\0'};逐个字符列出,需手动添加结束符方法2字符串字面量初始化
★常用charname2[6]="Zhang";//自动添加'\0'编译器自动在末尾添加'\0',最常用方式方法3省略数组大小
★常用charname3[]="ZhangSan";//大小为10编译器根据字符串长度自动计算数组大小方法4部分初始化charstr[10]="Hello";//剩余元素为'\0'未显式初始化的元素自动置为'\0'字符串的输入输出字符串输入输出函数安全性对比scanf:存在缓冲区溢出风险fgets:安全输入(推荐)训练项目使用fgets安全输入学生姓名并正确输出printfprintf("%s\n",greeting);格式化输出,需手动添加换行符\nputsputs(greeting);自动添加换行,代码更简洁fgets安全输入fgets(name,sizeof(name),stdin);指定缓冲区大小,防止溢出,推荐使用for(inti=0;name[i]!='\0';i++)if(name[i]=='\n'){name[i]='\0';break;}换行符处理:去除末尾\n字符串数组的应用02字符串数组的定义方法1:二维字符数组charnames[5][20]={"张三","李四","王五","赵六","钱七"};内存布局连续分配5×20=100字节,每行固定20字节,可能产生内存碎片适用场景字符串长度相近、数据量固定、需随机访问方法2:指针数组char*cities[]={"北京","上海","广州","深圳","杭州"};核心特点各字符串长度灵活,指针数组存地址,字符串常量存储于数据区,节省内存适用场景字符串长度差异大、数据量动态变化、需灵活增删选择建议:字符串长度相近用二维数组,长度差异大用指针数组固定长度灵活长度连续存储离散存储VS字符串数组的操作1输入学生姓名使用fgets循环输入2去除换行符students[i][strcspn(students[i],"\n")]='\0';3按字母顺序排序使用strcmp比较、strcpy交换4输出排序结果循环输出排序后的姓名排序算法核心代码for(inti=0;i<count-1;i++){for(intj=i+1;j<count;j++){if(strcmp(students[i],students[j])>0){//交换字符串}}}训练项目编写程序,实现5名学生姓名的输入、按字典序排序并输出码上思悟小课堂数据有序,管理有方在系统开发中培养科学精神与责任意识关键素养科学组织的逻辑思维合理设计数组与字符串,保证数据存储的有序性与完整性责任担当的服务意识确保查询结果准确、排序规则清晰、系统运行可靠案例启示李小缘先生借鉴杜威十进分类法,研制中国特色图书分类工具,使万千册图书有序排列,读者可快速查找课堂互动如何将"追求有序、精准管理"的理念应用到学生成绩管理系统中?任务实施03实施思路系统升级目标基于学生成绩管理系统(一)(二)扩展存储学生姓名字符串类型存储,支持中文姓名管理按姓名查询成绩顺序查找算法实现姓名检索按姓名排序选择排序算法实现姓名字典序排列课程名称动态输入运行时动态指定课程名称,增强灵活性综合运用知识字符数组字符串处理函数选择排序顺序查找版本演进路径系统(一)基础结构系统(二)成绩计算系统(三)姓名管理任务分析序号功能模块详细说明1输入课程名称提示用户输入课程名称(语文、数学、英语)2录入学生成绩提示用户输入学生人数,依次录入姓名及各科成绩3输出成绩报告表格形式显示姓名、各科成绩及平均分4按姓名查询实现按姓名查询功能,输出该学生的各科成绩及平均分5按姓名排序实现按姓名排序功能,按字典序升序排序并输出核心数据结构学生结构体定义structStudent{charname[MAX_NAME_LEN];intscores[MAX_COURSES];};关键宏定义5MAX_STUDENTS30MAX_NAME_LEN3MAX_COURSES20MAX_COURSE_NAME结构体作用封装学生基本信息与成绩数据,实现数据聚合与类型安全访问字段含义name存储学生姓名(字符数组),scores存储多门课程成绩(整型数组)宏定义用途通过编译期常量控制数组边界,便于统一修改与内存预分配内存布局示意name[30]占30字节+scores[3]占12字节→单个Student结构体约44字节(考虑对齐可能为48字节)核心功能模块1输入学生信息input_student_info录入学生基本信息及各科成绩数据→2打印成绩报告print_grade_report输出格式化学生成绩单报表→3学生查询search_student按条件检索特定学生成绩信息→4按姓名排序sort_students_by_name实现学生记录按姓名字典序排列→5课程平均分calculate_course_averages统计计算各门课程的平均成绩input_student_info输入学生信息:实现学生姓名、学号及多门课程成绩的录入功能print_grade_report打印成绩报告:格式化输出学生成绩单,包含总分、平均分统计search_student查询学生成绩:支持按学号或姓名检索单个学生完整成绩信息sort_students_by_name按姓名排序:使用字符串比较算法实现学生记录字典序排列calculate_course_averages计算课程平均分:遍历统计全班各门课程的平均成绩数据按姓名排序实现冒泡排序实现voidsort_students_by_name(structStudentstudents[],intnum_students){
//外层循环:控制比较轮数for(inti=0;i<num_students-1;i++){//内层循环:每轮比较次数递减for(intj=0;j<num_students-i-1;j++){
//字符串比较:升序排列if(strcmp(students[j].name,students[j+1].name)>0){
//交换整个结构体structStudenttemp=students[j];students[j]=students[j+1];students[j+1]=temp;}}}}时间复杂度O(n²)稳定排序原地排序算法解析双重循环结构外层循环控制轮数(n-1轮),内层循环每轮比较次数递减,总比较次数为n(n-1)/2次结构体整体交换使用临时变量temp完成整个Student结构体的赋值交换,确保所有字段同步移动strcmp字符串比较返回值>0表示前字符串字典序更大,触发交换实现升序排列训练项目修改排序算法为降序排列,并测试验证结果思考提示:strcmp返回值如何变化?交换条件应如何调整?教学总结如何优化排序算法以提高效率?如何实现模糊查询功能?字符数组定义核心概念:字符数组是存储字符序列的数据结构关键特性:字符串以空字符\0结尾初始化方法字符列
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中地理2026教资面试全真模拟高频题考题
- 房地产外联课件
- 高中化学2026教资面试专项考题题库及答案
- 小学英语2026教资面试全真模拟答辩
- 常见颈部肿块的护理
- 房地产经纪人培训课件
- 房地产分析课件
- 防冻安全教案课件
- 分层应用课件
- 2026年汽车维修工知识题库(附答案)
- 刺法灸法学各章节习题和各章节参考答案
- 国际汉语教学课程大纲
- 2023CNAO全国中学生天文知识竞赛试题(含答案)
- 个人简历模板 求职简历模板(12套完整版)
- 乳化泵说明书
- 完美着装智慧树知到期末考试答案章节答案2024年武汉纺织大学
- 镇静镇痛治疗的护理课件
- 手绢上的花田
- 火龙罐综合灸疗法
- 复合材料与工程专业大学生职业生涯规划书
- 深圳市中小学生流感疫苗接种知情同意书
评论
0/150
提交评论