为了帮助大家更深入地理解本章内容,本书精心设计了一系列以实战操作为主的课后习题。每道题目都清晰地阐述了任务目标和所期望的答案,旨在通过实践操作来加深大家对所学知识的理解和应用。此外,有部分题目需要用到数据,大家可以在本章配套的代码压缩包中找到一个名为“课后习题用到的数据”的子文件夹,题目中用到的数据均可以在这个文件夹中找到。
(配套的代码的下载方式可参考:配套的视频 在第一个视频中有下载方法)
课后习题的讲解视频可在b站搜索:《MATLAB课程第6章课后习题讲解》,也可以直接搜索视频博主:“清风教你学编程”,这个是清风老师的个人号,可在他的主页找到视频。
Q1:整理考试成绩
在“课后习题用到的数据”文件夹中,有一个名为“Q1”的子文件夹,里面有一个名为“考试成绩.txt”的文本文件,该文件记录了A班和B班共计100名学生在四门科目上的成绩。
请大家根据该文件完成以下任务:
(1)导入文本数据
请在MATLAB中导入这个文本文件,并将结果保存到一个100行6列的字符串数组ss中。期望得到的ss的前几行如下图所示:
(2)将A班和B班的成绩分别保存到本地
请根据班级信息将A班和B班的学生成绩数据分别提取出来,并保存到名为“A班成绩.txt”和“B班成绩.txt”的文本文件中。在保存时,需要确保总分高的同学在文件中排在前面。期望得到的结果如下所示:
(3)生成A班同学的成绩报告
A班共57名同学,请你生成具有如下格式的成绩报告:
注:为了保持报告的整齐性,如果同学的姓名只有两个字,请在姓和名之间插入一个全角空格(在MATLAB中可以使用char(12288)来得到全角空格)。
(4)为A班的每位学生单独生成成绩通知文件
首先,使用代码在MATLAB的当前文件夹下创建一个名为“A班各同学的成绩通知单”的子文件夹,并将MATLAB的当前文件夹切换到这个新建的子文件夹内。这一步是为了确保所有生成的成绩通知文件能够保存在这个专门的文件夹中。
接下来,为A班的每位学生单独生成一个成绩通知文件。文件的名称请设置为学生的姓名,文件后缀为txt。文件中的内容应遵循以下模板:“xx同学你好,你的总分是xx,其中:语文、数学、英语和综合成绩分别为xx、xx、xx和xx。”
Q2:导入数据的专项训练
本题包含三个独立的任务,在“课后习题用到的数据”文件夹中有一个名为“Q2”的子文件夹,请大家完成以下任务:
(1)导入颜色列表数据(数据来源:2021华中杯A题)
请导入“任务1:颜色列表.txt”这个文件,并提取其中的RGB,并将其保存在数值矩阵D中(期望得到的D请见右侧,它有216行3列,限于篇幅仅展示前面八行)。
(2)导入指纹数据(数据来源:2022MathorCupA题)
请导入“任务2:指纹数据.txt”这个文件,里面储存着100枚指纹的特征数据。
每一行代表一枚指纹,包括指纹 ID,细节点总数,每一个细节点的三元信息,细节点的每一元之间、细节点之间均用逗号隔开(特别注意:因为每枚指纹提取到的细节点个数不同,所以每一行的长度不同)。例如第一枚指纹的ID为“A1”,里面有50个细节点,第一个细节点的信息为[120,17,352]、第二个细节点的信息为[142,58,174]、依次类推;第二枚指纹的ID为“A2”,里面有56个细节点,第一个细节点的信息为[76,14,332]、第二个细节点的信息为[50,33,139]、依次类推;第三枚指纹的ID为“A3”,里面有46个细节点……
请使用一个100行1列的元胞数组C来保存这100枚指纹的细节点信息,C中的第k个数据用于保存第k枚指纹。例如,C的第一个数据是一个50行3列的数值矩阵:[120,17,352; 142,58,174; …]、C的第二个数据是一个56行3列的数值矩阵。具体结果可参考下图:
(3)导入基因信息数据(数据来源:2016华为杯研赛B题)
文件夹“任务3:基因信息”中包含了300个dat文件,表示300个基因的信息,大家可以使用记事本或者其他文本编辑软件打开。每个dat文件中包含了若干个位点的名称,表示该基因包含的位点信息。举个例子,大家可以查看“gene_1.dat”内的文本,表示基因gene_1包含了rs3094315, rs3131972, ... , rs4040617,共7个位点。
请将这300个基因的位点信息保存到元胞数组C中,C的大小为300行1列。例如C中的第一个数据表示基因gene_1的位点信息;C中的第二个数据表示基因gene_2的位点信息;依次类推。你可以使用字符向量元胞数组或者字符串数组来保存每个基因的位点信息。
Q3:小学生的噩梦:加减运算出题器
(1)生成随机的题目
编写一个程序,该程序的目标是为小学生自动生成50道加减运算的练习题。每道练习题需要包含两个随机的两位数作为操作数,并且随机地选择加法或减法作为运算方式。此外,你需要确保所有生成的练习题的答案也是一个两位数。最终,练习题和它们的答案需要以整洁的方式进行展示,每行包含5道练习题,且每一列的10道题目需要在等号处对齐。
例如下面是我编写的程序生成的练习题C1和答案C2,你可以仿照这个效果编写代码:
(2)将题目保存到本地
为了让这位小学生度过一个充实而快乐的假期,我们将为他/她精心生成一个为期30天的加减运算培训计划。每一天的50道题目和带有答案的版本将被整齐地保存在独立的文本文件中,方便小学生每天练习并核对答案(即需要将上一问的C1和C2变量分别保存在本地,且每天的C1和C2都不同)。例如,第一天的题目将保存在名为“第1天题目.txt”的文件中,而对应的答案则保存在名为“第1天答案.txt”的文件中;依此类推,直至第30天。(坏笑:这样的安排旨在帮助小学生逐步提升运算能力,同时在假期中保持学习的节奏和乐趣。)
期望得到的结果如下图所示:
Q4:爬虫练习题:爬取生态环境相关的文章
本题用到的数据来自以下网址:
生态环境保护图片报道_图片新闻_中国政府网中国政府网新闻主栏目下的生态环境保护图片报道栏目页。https://www.gov.cn/xinwen/tupian/shengtai/home_0.htm
网站中有许多篇与生态环境相关的文章:
网页底部设置有分页功能,可以切换到其他页面:
请爬取前五页的内容,将各篇文章的标题、发表日期以及文章详情页的网页地址保存到字符串数组S中;此外,请将各篇文章的封面图下载到电脑本地,图片的文件名设置为文章的标题。期望得到的结果如下:
Q5:爬虫练习题:爬取即时新闻
本题用到的数据来自以下网址:
网站上有许多篇即时新闻:
页面下方设有分页功能,共有10页,你可以点击相应数字来查看其他页面的新闻:
请爬取这10页的即时新闻,将结果保存在一个1000行4列的字符串数组NEWS中(每一页有100篇新闻,10页共1000篇)。
其中,NEWS的第一列为新闻的类型,第二列为新闻的标题,第三列为新闻发布的时间,最后一列为新闻详情页的网页地址。
Q6:爬虫练习题:获取特定地区未来七天的天气预报
请选择任意一个地区,并利用网络爬虫技术从提供天气预报服务的网站上获取该地区未来七天的天气情况。例如,我找到了某个网站,它提供了上海市未来七天的天气预报:
下面这个元胞数组C就是我在该网站上爬取的内容:
请注意,本题对爬虫的目标网站没有特定限制,你可以自行在网络上寻找合适的天气预报数据源。(注意:提供未来天气预报服务的网站非常多,请大家尽量选择一个静态网页进行爬取)
Q7:爬虫练习题:爬取汽车销量排行榜
本题需要大家爬取下面这个网页上的汽车销量排行榜:
打开网页后,请将鼠标滚轮持续往下滚动,网站会自动加载榜单后面的数据:
…
(注意:上图截取自2024年03月08日,这个排行榜会更新,大家在网站上看到的结果会有所差异)
请大家爬取这个排行榜上的汽车名称、价格区间、汽车厂商、汽车类型以及销量,并将结果保存到字符串数组D中。期望得到的结果如下所示:
Q8:爬虫练习题:批量下载神奇宝贝(宝可梦)中的精灵图片
下面这个网站提供了神奇宝贝(宝可梦)中精灵的图鉴:
初始时网站仅会展示前几个精灵,你需要点击页面下方的“查看更多”获取更多精灵:
请编写爬虫代码将编号0001至编号0100的精灵图片下载到电脑本地。注意,有许多精灵有不同的形态(例如下图的皮卡丘和雷丘),你爬取的结果也应该包含这些不同形态的精灵。
期望得到的结果如下图所示:
在b站上可以观看课后作业的讲解视频,视频的标题如右图所示: (感谢大家投币 点赞 收藏的支持) |