《编程导论》课程设计题目

西南大学

计算机与信息科学学院

2015级计算机科学与技术大类专业

《编程导论》课程设计A案

适合 大一上期计算机类各专业

1 课程设计的基本要求

1.1能从实际应用问题出发,合理选择数据结构,设计算法形成完整的设计方案。

1.2使用Python实现算法,合理添加注释以保证程序的可读性。

1.3针对项目认真撰写课程设计报告。

2 课程设计主要内容

课程设计题目由教师提供(见第5节),内容可以是一个具体的数据处理问题、字符串处理问题、统计问题和数据挖掘问题。允许学生自拟题目,但需经过教师审核。教师可根据教学实际情况增加题目。

3 课程设计考核方法及成绩评定

3.1考核方式:考查。

3.2成绩评定:课程设计成绩采用100分制,从以下几个评级指标进行评定:

 

评价指标(所占比例)

成绩

代码可读性强 (10分)

 

程序结构合理 (30分)

 

课程设计结果正确 (20分)

 

课程设计分析、总结全面 (30分)   

 

课程设计报告规范 (10分)

 

 

4课程设计报告主要内容和要求

4.1 课程设计报告主要内容

       封面

 

课程:

课程设计题目:

班级:

学号:

姓名:

指导教师:

上交日期:

 

 

主要内容

 

1 概述

设计主要完成的任务和解决的主要问题。

2 算法描述

给出你算法的详细描述,用自然语言描述。

3 源代码

提供项目源代码。

4 简要的使用说明

提供输入、输出描述,并举例说明。

5 总结

对项目完成情况进行总结。包括存在问题的总结。

6 参考文献

 

4.2 课程设计报告编写的基本要求

(1)采用A4纸书写或打印;

(2)如为打印,题目采用宋体3号字加重,正文小标体采用宋体四号,正文采用宋体五号字。

5、课程设计选题

5.1题目:数据挖掘:股票价格 

数据挖掘是通过对大量的数据进行排序,挑选出相关信息的过程。商业情报结构和金融分析师会用到它,而且正日益被用在科学领域中,从现代实验和观测方法所产生的巨大数据集中提取信息。

在这个项目中,我们想要对一些公司的股票价格进行初步的数据挖掘。以Google公司为对象。程序将计算出2010-2015年间Google股票的每月平均价格,并得出Google公司最好和最坏的6个月。提供读取函数的数据,请编写下面几个函数和调用这些函数的主程序。

(a)      首先需要股票历史价格。访问finance.yahoo.com,在搜索字段中输入Google,选择“Historical Prices”(目前在页面左侧),并找到“Download toSpreadsheet”选项。将文件保存在Python程序所在文件夹中。默认名称是“table.csv”,将使用该名称。文件格式由文件前几行给出:

Date, Open, High, Low, Close,Volume, Adj Close

2015-10-11, 461.00, 462.07,443.28, 449.15, 10006000, 449.15

2015-10-10, 422.64, 439.18,410.50, 439.08, 8589400, 439.08

(b)     getDataList (FileName)

“CSV”文件是“用逗号分隔的文件”,所以可以在逗号处分割数据。下面的函数将读取一个文件,从逗号处分隔文件中每行,并把数据放到返回的列表中。结果是二维列表,列表的每行又是一个列表。此外,每个项都是一个字符串。读文件需要使用文件名进行调用:getDataList(‘table.csv’),在shell中应用此函数,了解函数的返回值是什么。

def getDataList(fileName):

dataFile =open(fileName, ‘r’)

dataList = []        # start with an empty list

for line indataFile:

    # strip end-of-line, split on commas, andappend items to list

dataList. append (line.strip().split(‘,’))

           return dataList   

(c)      getMonthlyAverages (dataList)

在这个函数中,将使用getDataList函数产生的dataList作为参数。使用Date,Volume, AdjClose计算每月平均价格。下面是一个计算月平均价格的公式,其中Vi代表Volume,Ci是当天调整收盘价(Adj Close)。

averagePrice = (V1 * C1 + V2 *C2+ …….+ Vn * Cn)/(V1 + V2 + ……+ Vn)

为每个月创建包含两个项的元组,包括该月的平均价格和日期(只需要年份和月份)。将每个月的元组添加到列表中(例如monthlyAveragesList),计算所有月的平均值后,返回此列表。在这里使用元组,是因为这些值计算出来后不想意外的更改它们!

(d)     printInfo (monthlyAveragesList)

在这个函数中,需要使用getMonthlyAverages函数得到月平均价格列表。需要查找和显示Google股价中6个最好(最高平均价格)和6个最坏(最低平均价格)的月份。按从高到低的顺序显示,要求精确到小数点后2位。对输出进行格式化,得到美观的输出(包括信息标题栏)。此函数不返回任何值。

(e)      如果不调用这些函数,它们不起作用。因此,应该写代码来调用他们。

提示:

(a)         列表sort( )和reverse( )方法会起作用。做实验来观察如何在元组列表上使用这两个方法,注意是如何按第一个项进行排序的。

(b)        创建元组,项是圆括号内用逗号分隔的列表:(x,y)。

(c)         使用二维列表(或元组列表)时,第一个列表的第一项是someList[0][0],第一个列表的第二项是someList[0][1]。

 

5.2题目:(使用turtle仿真:自我规避随机游走)

(a)在一个网格中的自我规避游走是一条从一点到另一点的路径,并且这条路径不会经过同一个点两次。自我规避游走在物理、化学和数学中有很多的应用。它可以用来模拟链状实体,例如溶剂和高分子聚合物。编写一个Turtle程序显示一条随机路径,该路径从中心点开始在边界上的某点结束。或者在死点处结束(即该点被其他已经经过的4个点包围)。假设这个网格的大小是16*16。

(b)再编写一个仿真程序来显示随着网格大小的扩大,路径在死点结束的概率将会提高。程序模拟网络大小从10变化到50。对于每一种网格大小,仿真10000次自我规避游走然后显示在死点结束的概率,输出如下所示。

For latticeof size 10, the probability of dead-end paths is 10.57%

For latticeof size 11, the probability of dead-end paths is 14.09%

……

For latticeof size 49, the probability of dead-end paths is 94.22%

Forlattice of size 50, the probability of dead-end paths is 94.33% 

5.3题目:金融风暴

银行间会相互借贷。在经济艰难时期,如果一家银行宣告破产,它可能无法偿还贷款。一家银行的资产总额是它现有的余额加上它给其他银行的贷款。下图显示了5家银行之间的借贷关系和自身资产余额。各银行的现有余额分别是25、125、175、75和181百万美元。节点1到节点2的有向边表明银行1将40百万美元借给银行2。




如果一家银行的资产总额低于一定的界限,这家银行就身处险境了。此时该银行将无法给其他银行偿还它的贷款,因此贷方银行无法将这些贷款计入它的资产总额。因此,该贷方银行的资产总额同样可能低于这个界限,它也就可能变得危险。编写一个程序找出所有不安全的银行。程序应读入如下所示的输入值。它首先读入两个整数n和limit,其中n表明银行的数量,limit是维持银行安全的最低资产总额。接着读入n行信息,它们以0到n-1标识这n家银行。行中的第一个数是银行的余额,第二个数指明从银行贷款的银行数量,其余数字都是由两个数组成的数对。每对数描述一个借方。每对数的第一个数是借方银行的标识,第二个数是所借的金额。例如,上图中五家银行的输入值如下所示(注意界限是201)。

5 201

25 2 1 100.54 320.5

125 2 2 40 385

175 2 0 125 375

75 1 0 125

181 1 2 125

银行3 的资产总额是(75+125),低于201,因此银行3是不安全的。在银行3不再安全之后,银行1的资产总额下降到低于界限(125+40),因此银行1也变成不安全的。程序的输出应该是:

Unsafe banksare 3 1

 

(提示:使用二维列表borrowers来表示贷款,borrowers[i][j]表示银行i贷款给银行j的总额。一旦银行j不再安全,borrowers[i][j]应当置为0。)

 

5.4题目: ISBN条码

       国际标准书号(International Standard BookNumber,ISBN)每一本公开发行的书,在封底都有一个10位或13位的编号ISBN。ISBN的最后一位数字称为计算机校验码,相当于奇偶校验位。书店的计算机仅通过查看ISBN的校验码便能判断是否犯了错误,避免买错书。 13位ISBN的校验码算法如下:

       将第一位乘以1,第2位乘以3,第3位乘以1,第四位乘以3,以此类推,直到第12位乘以3,将各位结果相加之后,取总和的末位数字(即除以10后的余数)后再减去10(如果结果为10,取0)即可。

       例如:

       ISBN-978-897283571-4

       (9×1)+(7×3)+(8×1)+(8×3)+(9×1)+(7×3)+ (2×1)+(8×3)+(3×1)+(5×3)+(7×1)+(1×3)=146

   146 ÷ 10= 14  (余6) 10 - 6 = 4

       请编写一个条码分析和生成程序,具有以下功能:

       1)利用随机函数自动生成一个13位ISBN号,满足检验码规则

       2)利用turtle画出该条码,条码编码规则如下图:




参考文献


《Python入门经典 以解决计算问题为导向的Python编程》

前3题来至参考文献

课程设计制定者:周竹荣,李娅

------------------------------------------------------------------------------------------------

周竹荣,博士,西南大学,计算机与信息科学学院,计算机科学与技术系主任

硕士导师


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值