《程序设计基础》实验报告.docx
程序设计基础实验报告.doc 程序设计基础实验报告 班级:030991 姓名:冯小康 学号:03099018 所选题目:1 2 5 6 7 9 第1题 1、实现简单的学生成绩信息管理软件。 学生信息包括:学号、姓名、4门课程的成绩(计算机,数学,英语,物理)。要实现的功能:学生信息的录入、修改、删除和查询。 算法描述: 1.建立动态结构体数组 2.介绍软件功能 3.让用户选择(录入or退出) 若退出 Exit(ok) 若录入 3.1获取学生数并判断输入格式是否正确 3.2每次录入一个学生的所有信息 4. 返回主菜单,选择操作 4.1若添加,进入添加函数 4.11获取添加人数并判断数据格式是否正确 4.12处理溢出问题 4.13添加,并随时改变表示学生个数 4.14添加成功,返回主菜单4 4.2若查询 4.21列出全部学生的序号、学号、姓名,让用户选择序号 4.22列出全部科目序号、让用户选择科目序号 4.23根据序号,显示要查询的同学该科的成绩 4.24查询成功,选择继续查询or返回主菜单 4.241若继续查询,返回4.21 4.242否则返回主菜单4 4.3若修改 4.31列出全部学生的序号、学号、姓名,让用户选择序号 4.32列出全部科目序号、让用户选择科目序号 4.33根据序号,显示要修改的同学该科的成绩 4.34录入新的成绩,执行修改 4.35修改成功,选择继续修改or返回主菜单 4.351若继续修改,返回4.31 4.352否则返回主菜单4 4.4若删除 4.41选择选择修改方式 4.41a若删除整个学生 4.41a1列出全部学生的序号、学号、姓名,让用户选择 4.41a1删除该学生,执行4.42 4.41b若删除单科成绩 4.41b1列出全部学生的序号、学号、姓名,让用户选择序号 4.41b2列出全部学生的序号、学号、姓名,让用户选择序号 4.41b3删除该成绩(变为0),执行4.42 4.42删除成功,选择继续删除or返回主菜单 4.351若继续删除,返回4.41 4.352否则返回主菜单4 4.0若退出 4.01提示礼貌退出信息(Welcome back!) 4.02退出 源程序: 见no1.cpp 测试数据: 学号姓名 1. 03099017 huiyujiang 2. 03099018 fengxiaokang 3. 03099019 zhaohongwu 4. 03099020 liuandi - This is a simple student infomation managering program, you can add, change, delete or search the infomation. - 1. 录入信息 . 退出 - 请选择操作: >1 Input number of students: >3 - 请一次输入学生的学号、姓名、计算机、数学、英语和物理科的成绩(用一个空格隔开): - Student 1:03099017 huiyujiang 98 97 97 100 Student 2:03099018 fengxiaokang 80 80 90 90 Student 3:03099019 zhaohongwu 90 90 90 90 - 数据成功录入。 - 1.添加信息 2.查询信息 3.修改信息 4.删除信息 0.退出 请选择操作(序号): >1 - 请输入添加学生个数: >1 - 请一次输入学生的学号、姓名、计算机、数学、英语和物理科的成绩(用一个空格隔开): - Adding Student 4:03099020 liuandi 90 98 89 89 - 信息添加成功,返回主菜单。 - 1.添加信息 2.查询信息 3.修改信息 4.删除信息 0.退出 请选择操作(序号): >3 - 全部信息如下:请输入要修改学生的序号:1 - 1. 计算机 2. 数学 3. 英语 4. 物理 请输入要修改的科目的序号:1 - 目前成绩为:98 要修改为:100 - 修改成功!是否继续修改:1.是.返回主菜单 1 - 全部信息如下: 学号姓名 1. 03099017 huiyujiang 2. 03099018 fengxiaokang 3. 03099019 zhaohongwu 4. 03099020 liuandi 请输入要修改学生的序号:1 - 1. 计算机 2. 数学 3. 英语 4. 物理 请输入要修改的科目的序号:2 - 目前成绩为:97 要修改为:100 - 修改成功!是否继续修改:1.是.返回主菜单 2 - - 1.添加信息 2.查询信息 3.修改信息 4.删除信息 0.退出 请选择操作(序号): >4 - 请先选择删除方式: 1.删除学生 2.删除单科成绩 1 全部信息如下: 学号姓名 1. 03099017 huiyujiang 2. 03099018 fengxiaokang 3. 03099019 zhaohongwu 4. 03099020 liuandi 请输入需要的学生的序号:4 - 删除成功!是否继续删除: 1.是.返回主菜单 1 - 请先选择删除方式: 1.删除学生 2.删除单科成绩 2 全部信息如下: 学号姓名 1. 03099017 huiyujiang 2. 03099018 fengxiaokang 3. 03099019 zhaohongwu 请输入需要删除信息的学生的序号:- 2 1. 计算机 2. 数学 3. 英语 4. 物理 请输入要删除的科目的序号: - 1 - 删除成功!是否继续删除: 1.是.返回主菜单 2 - 1.添加信息 2.查询信息 3.修改信息 4.删除信息 0.退出 请选择操作(序号): >2 - 全部信息如下: 学号姓名 1. 03099017 huiyujiang 2. 03099018 fengxiaokang 3. 03099019 zhaohongwu 请输入需要查询的学生的序号:1 1. 计算机 2. 数学 3. 英语 4. 物理 请输入要查询的科目的序号:1 - 计算机科成绩为:100 - 是否继续查询: 1.是.返回主菜单 1 - 全部信息如下: 学号姓名 1. 03099017 huiyujiang 2. 03099018 fengxiaokang 3. 03099019 zhaohongwu 请输入需要查询的学生的序号:2 1. 计算机 2. 数学 3. 英语 4. 物理 请输入要查询的科目的序号:1 - 计算机科成绩为:0 - 是否继续查询: 1.是.返回主菜单 2 - 1.添加信息 2.查询信息 3.修改信息 4.删除信息 0.退出 请选择操作(序号): >q Input error! Retry: >q1 Input error! Retry: >afsdfsdfsf Input error! Retry: >0 Welcome back! Press any key to continuexxxx 第2题 2、编写小学生数学测试软件。 (1) 可选择题型加,减,乘。 (2) 可选择每次答题的个数。 (3) 随机生成两个数进行运算。 (4) 每次输入答案后判断对错,若答案错误,给出正确答案。 (5) 最后给出做对题目的总个数。 算法描述: 1.介绍软件信息 2.出题:选择运算方式并(判断输入格式) 3.输入做题个数(判断输入格式) 4.进入做题函数Action 4.1出题循环 4.11用函数产生两个随机的运算数 4.12根据方式出题 4.13接收答案,计算正确答案 4.14判断正误 4.14a若正确,正确计数加1 4.14b若不正确,输出正确答案,错误数加1 4.15判断是否答完 4.15a若是,执行 4.15b若不是,返回4.11 4.2通知结束,并打印答对、答错数 4.3选择继续答题or退出 4.31若继续答题,返回4.1 4.32否则,返回退出标志 5.友好退出 源程序: No2.cpp 测试数据: 这是一个简单的智商测试软件,利用三则运算法实现, 选择题型(加、减、乘),输入答题个数,即可进行智商测试。 - 请选择一项运算方式: 1. + 2. - 3. x >1 - 您希望这次做多少题: >2 - no. 1 49 + 41 = 90 Bingle! - no. 2 85 + 85 = 170 Bingle! - 您的战绩: - 此阶段已经结束,是否继续答题? 1. 是 2. 否 1 - 请选择一项运算方式: 1. + 2. - 3. x >2 - 您希望这次做多少题: >2 - no. 1 49 - 49 = 0 Bingle! - no. 2 96 - 44 = 52 Bingle! - 您的战绩: - 此阶段已经结束,是否继续答题? 1. 是 2. 否 1 - 请选择一项运算方式: 1. + 2. - 3. x >3 - 您希望这次做多少题: >2 - no. 1 24 x 66 = 3 恭喜您,答错了! 正确答案应该是:1584 - no. 2 56 x 4 = 224 Bingle! - 您的战绩: - 此阶段已经结束,是否继续答题? 1. 是 2. 否 2 - Welcome back! - Press any key to continue 第5题 5、打印类似如下方阵 (1) 螺旋方阵: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 算法描述 1.建立一个二维数组用来存储相应位置的数字 2.输入边长(处理非正常输入) 3.初始化(行计数、列计数、走向方式、横向步长、纵向步长) 4.回旋矩阵复赋值 4.1根据走向固定每一阶段参数 4.2根据走向用循环赋值 5. 用二重for循环打印阵列 6. 退出 源程序 见no3.cpp 运行: 输入一个边长,程序将打印相应的蛇形矩阵。 请输入边长: (输入) >6 (输出) 边长为6的回旋阵列为: 1 2 3 4 5 6 20 21 22 23 24 7 19 32 33 34 25 8 18 31 36 35 26 9 17 30 29 28 27 10 16 15 14 13 12 11 Press any key to continue 第6题 6、已知2000年1月1日为星期六,输入任一年的年份后,打印该年的年历。 算法描述: 1.用13元数组存储平年每月天数 2.介绍程序功能 3.输入要打印年的年数(处理非正常输入) 4.判断闰年,并标记 5.计算该年第一天星期数 6.打印日历 6.1计算第monthi月第一天的星期数 6.2打印第monthi月的日历 7.退出 源程序 见no6.cpp 输入: This progrem gets you a year, then outputs the calender: The year: 2022 输出: Calender of 2022年1月 * SU MO TU WE TH FR SA * 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 * Calender of 2022年2月 * SU MO TU WE TH FR SA * 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 * Calender of 2022年3月 * SU MO TU WE TH FR SA * 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 * Calender of 2022年4月* SU MO TU WE TH FR SA * 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 * Calender of 2022年5月 * SU MO TU WE TH FR SA * 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 * Calender of 2022年6月 * SU MO TU WE TH FR SA * 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 * Calender of 2022年7月 * SU MO TU WE TH FR SA * 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 * Calender of 2022年8月 * SU MO TU WE TH FR SA * 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 * Calender of 2022年9月 * SU MO TU WE TH FR SA * 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 * Calender of 2022年10月 * SU MO TU WE TH FR SA * 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 * Calender of 2022年11月 * SU MO TU WE TH FR SA * 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 * Calender of 2022年12月 * SU MO TU WE TH FR SA * 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 * 请按任意键继续. . . 第7题 假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,实际的长整数m表示为: m=ak×10k-1+ak-1×10k-2+.+a2×10+a1 其中a0保存该长整数的位数。完成(任选一题): (1) 长整数乘普通整数。 算法描述 1.用字符数组储存输入的长整数 2.获取短整数(非正常输入处理) 3.获取长整数位数(strlen),并倒叙存储在动态整型数组里 4.从第一位开始把长整数的每一位依次乘以短整数得到的结果加上前一位进十的数(temp) 4.1结果对十取余放在结果数组里的相应位置上 4.2结果整除以十存在临时变量里(temp) 5. 判断最后一位是否进位 5.1若进位,则存 5.2若不进位,记录结果位数的变量减一 6. 利用循环,倒序打印存放结果数组里的每一位数 7. 释放动态建立的指针,退出程序 源程序 见no7.cpp - Please input a long integer: (输入) >456231321223654021012 Please inout a short integer: >12345 - 结果为: (输出) >5632175660506008889393140 - 请按任意键继续. . . 第9题 算法问题(任选一题)。 (1)皇后问题:在国际象棋中,能否在空棋盘上摆放八个皇后,并使其中任意两个皇后不能在 同一行或同一列或同一对角线上,并编写完整的摆放八皇后问题的程序。要求:第一个皇后的起始位置由键盘输入,国际象棋的棋盘为8*8的方格。 算法描述 1.在8X8的二维数组中,某一位置放置皇后后,其势力范围用四个参数来确定:该行行数、该 列列数、行列数之差、行列数之和 2.另外建立一个9x9的二维数组存储皇后的标志 1.获取第一个皇后的位置(非正常输入处理) 2.建立四个布尔类型的数组,初始化为true,当某位置放置皇后时,相应参数变为false 3.递归其余七个皇后 3.1排除该行为初始行 3.2在该行对应的一列中依次找可行位置 3.21若该位置为可行位置 3.22放置皇后,并用固定参数保存该处行列数 3.23该处对应的参数改为false 3.24判断该行是否为最后一行 3.241若是 3.241a 标志变量改为BOTTOM 3.241b 二维数组中该位置赋为1 3.241c返回上一级 3.242若不是,递归至下一行 3.25判断标签变量 3.251若标签变量为BACK, 3.251a在这一级固定的位置的参数改为true 3.251b标签初始化 3.252若标签变量为BOTTOM 3.252a该级固定的位置在二维数组中赋为1 3.252b返回上一级 3.3若在该行对应的列中找不到可放置皇后的位置 3.31标签改为BACK 3.32返回标签 4.若标签为BOTTOM 4.1打印皇后排列情况 5.否则打印无解 6.退出 源程序 见no9.cpp 皇后问题是在8x8的棋盘上放置8个皇后,且彼此不在别的皇后的势力范围的一种排列。请把第一个皇后的位置输入计算机(行,列): (输入) >5 6 (输出) 皇后为下列棋盘中的 8 - . . 8 . . . . . . . . . 8 . . . . 8 . . . . . . . . . . . . . 8 . . . . . 8 . . . . . 8 . . . . . . . . . . 8 . 8 . . . . . . . - 请按任意键继续. . . 课程设计小结 自打上学期学了C语言后,我对编程有了一定的认识,而且时常体会到编程带来的乐趣指导计算机解题的乐趣。那是一个程序的规模很少有超过60行的,所以在一段时间有成就感后,后来就没感觉了,总觉得编程没什么,无非是Designing,Coding & Debuging,而且考试时也还不错,所以就开始觉得编程很简单,而看不到其背后的艰辛。直到这十天的解题经历,才恍然大悟,自己原先真的是井底之蛙。原来老师教学的重点只是让我们掌握这门语言,而Programing至关重要的确实运用这门语言解决问题,而真正的难度是蕴涵在算法设计之中的,而这又牵扯到数据结构、软件工程等等更多的大腕。就像仅仅学会了学会英语无法在国外立足一样,实现价值的根本,还是靠自身实力的提升锻炼真正重要的能力。 在经历编程规模由几十行变成几百行的过程中,许多从未遇到的问题一下子全都冒了出来。从见到一道题到解出一道题之间的过程的确令人玩味:遇到题后的分析,对算法的冥思苦想,反复凝练算法,类似于体力活的编码,丈二和尚的调试,以及对某一棘手问题(输入规范问题)处理方法的再构思,包括美观处理,添加注释等等,都是由一道小有规模的问题引发出来的,而回过头来也许问题仅仅只有几十字。况且这种规模还是编程世界里的一朵小浪花,问题的规模还有相当大的扩大空间,伴随着更加复杂的问题产生这其中是有利有弊的。坏的方面是,选择走这条路的我们,还要遇到许多更为头疼的事,我们会为此付出更为超乎寻常的劳动。好的方面则为,这标志着,我们还有更为广阔的发展空间,随着解题规模的扩大,我们的能力会在不知不觉中提高,而提高的程度会让我们一段时间后反思时大吃一惊。 鉴于我们都是计算机人,我们应把计算机当成是一项事业,为她赋予一定的责任,在她这里倾注我们的心血,留下我们艰难攀登的足迹是一件很有意义的事情。 计算机学院 030991班 冯小康 03099018 2022年3月18日