ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:54.62KB ,
资源ID:12518397      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12518397.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言课程设计报告参考题目.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言课程设计报告参考题目.docx

1、C语言课程设计报告参考题目C语言课程设计参考课题第1题 破译密码问题:据说最早的密码来自于罗马的凯撒大帝。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母A都分别替换成字母F)。而你要获得消息原文,也就是要将这个过程反过来。 密码字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z M 原文字母:V W X Y Z A B C D E F G H I J K L M N O P Q R S T U (注意:只有字母会发生替换,其他非字母的字符不变,并且消息原文的所有字母都是大写的。)输

2、入:最多不超过100个数据集组成,每个数据集之间不会有空行,每个数据集由3部分组成: 1. 起始行:START 2. 密码消息:由1到200个字符组成一行,表示凯撒发出的一条消息. 3. 结束行:END 在最后一个数据集之后,是另一行:ENDOFINPUT。输出:每个数据集对应一行,是凯撒的原始消息。 Sample InputSTARTNS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJXENDSTARTN BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFS XJHTS

3、I NS WTRJENDSTARTIFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJENDENDOFINPUT Sample OutputIN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSESI WOULD RATHER BE FIRST IN A LITTLE IBERIAN VILLAGE THAN SECOND IN ROMEDANGER KNOWS FULL WELL THAT CAESAR IS MORE DANGEROUS THAN HE解题思路

4、凯撒编码,判断字符是否是字母,并循环-5即可,记得要循环哦,非常简单的题目哦第2题 方阵填数第3题 第4题 进制转换问题1. 问题描述实现将N进制到M进制数的转换(1 N,M = 36)。对于11到36进制数,其基数使用从A到Z的英文字母(全部为大写)代替。例如对于11进制,其基数10(十进制)使用A表示;对于36进制,其基数35(十进制)使用Z表示。被转换的数全部为正数且小于2147483647(long型的最大值)。下表为十进制数100对应的各进制数:进制1011162735数值10091643J2U 2. 要求:(1).实现10进制数到M进制数的转换。(2).程序具有较强的容错能力(例如

5、对错误的输入数字串的处理)。(3). N进制到M进制数(1 N,M 36)的转换(扩展要求,选做)。3. 输入: 输入文件名为convert.in,文件内容格式为第一列为被转换数的进制数,第二列为被转换数,第三列为转换后的进制。这三列内容均为字符串形式。每列之间使用一个空格隔开。4. 输出: 输出文件名为convert.out,文件内容为转换后的数。对于一切错误,则输出“error”字符串。5. 输入输出文件样例: 样例1convert.inconvert.out10 100 273J 样例2convert.inconvert.out3 140 27error 第5题 打鱼还是晒网 中国有句俗

6、语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。*问题分析与算法设计 根据题意可以将解题过程分为三步:1)计算从1990年1月1日开始至指定日期共有多少天;2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;3)根据余数判断他是在“打鱼”还是在“晒网”; 若 余数为1,2,3,则他是在“打鱼” 否则 是在“晒网” 在这三步中,关键是第一步。求从1990年1月1日至指定日期有多少天,要判断经历年份中是否有闰年,二月为29天,平年为28天。闰年的方法可以用伪语句描述如下: 如果 (年能被4除尽 且 不能被

7、100除尽)或 能被400除尽) 则 该年是闰年; 否则 不是闰年。 C语言中判断能否整除可以使用求余运算(即求模)第6题 素数幻方 求四阶的素数幻方。即在一个4X4 的矩阵中,每一个格填 入一个数字,使每一行、每一列和两条对角线上的4 个数字所组成的四位数,均为可逆素数。*问题分析与算法设计 有了前面的基础,本题应当说是不困难的。 最简单的算法是:采用穷举法,设定4X4矩阵中每一个元素的值后,判断每一行、每一列和两条对角线上的4个数字组成的四位数是否都是可逆素数,若是则求出了满足题意的一个解。 这种算法在原理是对的,也一定可以求出满足题意的全部解。但是,按照这一思路编出的程序效率很低,在微机

8、上几个小时也不会运行结束。这一算法致命的缺陷是:要穷举和判断的情况过多。 充分利用题目中的“每一个四位数都是可逆素数”这一条件,可以放弃对矩阵中每个元素进行的穷举的算法,先求出全部的四位可逆素数(204个),以矩阵的行为单位,在四位可逆素数的范围内进行穷举,然后将穷举的四位整数分解为数字后,再进行列和对角线方向的条件判断,改进的算法与最初的算法相比,大大地减少了穷举的次数。 考虑矩阵的第一行和最后一行数字,它们分别是列方向四位数的第一个数字和最后一个数字,由于这些四位数也必须是可逆素数,所以矩阵的每一行和最后一行中的各个数字都不能为偶数或5。这样穷举矩阵的第一行和最后一行时,它们的取值范围是:

9、所有位的数字均不是偶数或5的四位可逆数。由于符合这一条件的四位可逆素数很少,所以这一范围限制又一次减少了穷举的次数。 对算法的进一步研究会发现:当设定了第一和第二行的值后,就已经可以判断出当前的这种组合是否一定是错误的(尚不能肯定该组合一定是正确的)。若按列方向上的四个两位数与四位可逆数的前两位矛盾(不是其中的一种组合),则第一、二行的取值一定是错误的。同理在设定了前三行数据后,可以立刻判断出当前的这种组合是否一定是错误的,若判断出矛盾情况,则可以立刻设置新的一组数据。这样就可以避免将四个数据全部设定好以后再进行判断所造成的低效。 根据以上分析,可以用伪语言描述以上改进的算法: 开始 找出全部

10、四位的可逆素数; 确定全部出现在第一和最后一行的四位可逆素数; 在指定范围 内穷举第一行 在指定范围内穷举第二行 若第一、第二、三行已出现矛盾,则继续穷举下一个数; 在指定范围内穷举第四行 判断列和对角方向是否符合题意 若符合题意,则输出矩阵; 否则继续穷举下一个数; 结束 在实际编程中,采用了很多程序设计技巧,假如设置若干辅助数组,其目的就是要最大限度的提高程序的执行效率,缩短运行时间。下面的程序运行效率是比较高的。第7题 乘式还原(1) A代表数字0到9中的前五个数字,Z代表后五个数字,请还原下列乘式。 A Z A A A Z - A A A A A A Z Z Z A A - Z A Z

11、 A A*问题分析与算法设计 问题本身并不复杂,可以对乘式中的每一位使用穷举法,最终可以得到结果。本题的关键在于怎样有效的判断每个部分积的每一位是否满足题意,这一问题处理不好,编写的程序会很长。程序实现中可采用了一个判断函数,通过传入函数的标志字符串对所有的数进行统一的判断处理。乘式还原(2) 有乘法算式如下: - - 18个的位置上全部是素数(1、3、5或7),请还原此算式。*问题分析与算法设计 问题中虽然有18数位,但只要确定乘数和被乘数后经过计算就可确定其它的数位。 乘数和被乘数共有5个数位,要求每个数都是质数。完全可以采用穷举的方法对乘数和被乘数进行穷举,经过判断后找出答案。但是这种方

12、法给人的感觉是“太笨了”,因为组成的数字只是质数(4个),完全没有必要在那么大的范围内进行穷举,只需要试探每一位数字为质数时的情况即可。 采用五重循环的方法实现对于5个数字的穷举,前面的许多例题中都已见过。循环实现简单易行,但嵌套的层次太多,需要穷举的变量的数量直接影响到循环嵌套的层数,这种简单的实现方法缺少技巧性。本例的程序中给出了另外一种同样功能的算法,该算法的实现思想请阅读程序。 程序中并没有直接对质数进行穷举,而是将每个质数与1到4顺序一一对应,在穷举时为处理简单仅对1到4进行穷举处理,待要判断产生的乘积是否满足条件时再利用一个数组完成向对应质数的转换。请体会程序中的处理方法。程序中使

13、用的算法实际上是回朔法。第8题 除式还原(1) 给定下列除式,其中包含5个7,其它打的是任意数字,请加以还原。 7 -商 - 除数-| -被除数 7 7 - 7 7 - - *题目分析与算法设计 首先分析题目,由除式本身尽可能多地推出已知条件。由除式本身书已知: 1、被除数的范围是10000到99999,除数的范围是10到99,且可以整除; 2、商为100到999之间,且十位数字为7; 3、商的第一位与除数的积为三位数,且后两位为77; 4、被除数的第三位一定为4; 5、 7乘以除数的积为一个三位数,且第二位为7; 6、商的最后一位不能为0,且与除数的积为一个二位数。由已知条件就可以采用穷举的

14、方法找出结果。除式还原(2) 下列除式中仅在商中给定了一个7,其它打的位置全部是任意数字,请还原。 7 -商 - 除数 -| -被除数 -1) - -2) -3) - -4) -5) - -6) -7) - 0*题目分析与算法设计 这道题是不可能用单纯的穷举法求解的,一则计算时间太长,二则难于求出除式中各部分的值。 对除式进行分析,改可能多地推出限制条件: 由3)可以看出,商的第二位7乘除数得一个三位数,所以除数=112。同时商的第五位也为8或9数的前四位一定=1000+10。 由4)、5)、6)可以看出,4)的前两位一定为“10”;5)的第一位一定为“9”;6)的前两位一定在10到99之间;

15、商的第四位一定为为0。 由 5)的第一位一定是“9”和“112”=除数=142可知:商的第三位可能为7或8。 由除式本身可知:商的第四位为0。 由 1)可知:除数X商的第一位应当为一个四位数。 由 5)可知:除数X商的第三位应当为一个三位数。 编程时为了方便,将被除数分解:前四位用a0表示,第五位用a1,第六位用a2,第七八两位用a3;除数用变量b表示;分解商:第一位用c0,第五位用c2;其它的部分商分别表示为:2)的前两位为d0,4)的前三位为d1,6)的前二位为d2。将上述分析用数学的方法综合起来可以表示为: 被除数: 1010=a0=1377 0=a1=9 0=a2=9 0=a3=99

16、除数: 112=b =142 商: 8=c0=9 7=c1=8 8=c2=9 2)的前两位: 10=d0=99 4)的前三位: 100=d1b 6)的前两位: 10=d21000 5)式部分积: 100b*c11000第9题 约瑟夫问题 这是17世纪的法国数学家加斯帕在数目的游戏问题中讲的一个故事:15个教徒和15 个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个人围成一圆圈,从第一个人开始依次报数,每数到第九个人就将他扔入大海,如此循环进行直到仅余15个人为止。问怎样排法,才能使每次投入大海的都是非教徒。*问题分析与算法设计 约瑟夫问题并不难,但求

17、解的方法很多;题目的变化形式也很多。这里给出一种实现方法。 题目中30个人围成一圈,因而启发我们用一个循环的链来表示。可以使用结构数组来构成一个循环链。结构中有两个成员,其一为指向下一个人的指针,以构成环形的链;其二为该 人是否被扔下海的标记,为1表示还在船上。从第一个人开始对还未扔下海的人进行计数,每数到9时,将结构中的标记改为0,表示该人已被扔下海了。这样循环计数直到有15个人被扔下海为止。第10题 卡布列克常数 验证卡布列克运算。任意一个四位数,只要它们各个位上的数字是不全相同的,就有这样的规律: 1)将组成该四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数; 2)将组成

18、该四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数中含有0,则得到的数不足四位); 3)求两个数的差,得到一个新的四位数(高位零保留)。 重复以上过程,最后得到的结果是6174,这个数被称为卡布列克数。*问题分析与算法设计 题目中给出的处理过程很清楚,算法不需要特殊设计,可按照题目的叙述直接进行验证。第11题 自动发牌 一副扑克有52张牌,打桥牌时应将牌分给四个人。请设计一个程序完成自动发牌的工作。要求:黑桃用S(Spaces)表示;红桃用H(Hearts)表示;方块用D(Diamonds)表示;梅花用C(Clubs)表示。*问题分析与算法设计 按照打桥牌的规定,每

19、人应当有13张牌。在人工发牌时,先进行洗牌,然后将洗好的牌按一定的顺序发给每一个人。为了便于计算机模拟,可将人工方式的发牌过程加以修改:先确定好发牌顺序:1、2、3、4;将52张牌顺序编号:黑桃2对应数字0,红桃2对应数字1,方块2对应数字2,梅花2对应数字3,黑桃3对应数字4,红桃3对应数字5,.然后从52 张牌中随机的为每个人抽牌。 这里采用C语言库函数的随机函数,生成0到51之间的共52个随机数,以产生洗牌后发牌的效果。第12题 黑白子交换 有三个白子和三个黑子如下图布置: . 游戏的目的是用最少的步数将上图中白子和黑子的位置进行交换: . 游戏的规则是:(1)一次只能移动一个棋子; (

20、2)棋子可以向空格中移动,也可以跳过一个对方的棋子进入空格,但不能向后跳,也不能跳过两个子。请用计算机实现上述游戏。*问题分析与算法设计 计算机解决胜这类问题的关键是要找出问题的规律,或者说是要制定一套计算机行动的规则。分析本题,先用人来解决问题,可总结出以下规则: (1) 黑子向左跳过白子落入空格,转(5) (2) 白子向右跳过黑子落入空格,转(5) (3) 黑子向左移动一格落入空格(但不应产生棋子阻塞现象),转(5) (4) 白子向右移动一格落入空格(但不应产生棋子阻塞现萌),转(5) (5) 判断游戏是否结束,若没有结束,则转(1)继续。 所谓的“阻塞”现象就是:在移动棋子的过程中,两个

21、尚未到位的同色棋子连接在一起,使棋盘中的其它棋子无法继续移动。例如按下列方法移动棋子: 0 . 1 . 2 . 3 . 4 两个连在一起产生阻塞 . 或4 两个白连在一起产生阻塞 . 产生阻塞的现象的原因是在第2步(状态)时,棋子不能向右移动,只能将向左移动。 总结产生阻塞的原因,当棋盘出现“黑、白、空、黑”或“白、空、黑、白”状态时,不能向左或向右移动中间的棋子,只移动两边的棋子。 按照上述规则,可以保证在移动棋子的过程中,不会出现棋子无法移动的现象,且可以用最少的步数完成白子和黑子的位置交换。第13题 抢 30 这是中国民间的一个游戏。两人从1开始轮流报数,每人每次可报一个数或两个连续的数

22、,谁先报到30,谁就为胜方。*问题分析与算法设计 本题与上题类似,算法也类似,所不同的是,本谁先走第一步是可选的。若计算机走第一步,那么计算机一定是赢家。若人先走一步,那么计算机只好等待人犯错误,如果人先走第一步且不犯错误,那么人就会取胜;否则计算机会抓住人的一次错误使自己成为胜利者。第14题 搬山游戏 设有n座山,计算机与人为比赛的双方,轮流搬山。规定每次搬山的数止不能超 过k座,谁搬最后一座谁输。游戏开始时。计算机请人输入山的总数(n)和每次允许搬山的最大数止(k)。然后请人开始,等人输入了需要搬走的山的数目后,计算机马上打印出它搬多少座山,并提示尚余多少座山。双方轮流搬山直到最后一座山搬

23、完为止。计算机会显示谁是赢家,并问人是否要继续比赛。若人不想玩了,计算机便会统计出共玩了几局,双方胜负如何。*问题分析与算法设计 计算机参加游戏时应遵循下列原则: 1) 当: 剩余山数目-1=可移动的最大数k 时计算机要移(剩余山数目-1)座,以便将最后一座山留给人。 2)对于任意正整数x,y,一定有: 0=x%(y+1)=y 在有n座山的情况下,计算机为了将最后一座山留给人,而且又要控制每次搬山的数目不超过最大数k,它应搬山的数目要满足下列关系: (n-1)%(k+1) 如果算出结果为0,即整除无余数,则规定只搬1座山,以防止冒进后发生问题。第15题 人机猜数游戏 由计算机“想”一个四位数,

24、请人猜这个四位数是多少。人输入四位数字后,计算机首先判断这四位数字中有几位是猜对了,并且在对的数字中又有几位位置也是对的,将结果显示出来,给人以提示,请人再猜,直到人猜出计算机所想的四位数是多少为止。 例如:计算机“想”了一个“1234”请人猜,可能的提示如下: 人猜的整数 计算机判断有几个数字正确 有几个位置正确 1122 2 1 3344 2 1 3312 3 0 4123 4 0 1243 4 2 1234 4 4 游戏结束 请编程实现该游戏。游戏结束时,显示人猜一个数用了几次。*问题分析与算法设计 问题本身清楚明了。判断相同位置上的数字是否相同不需要特殊的算法。只要截取相同位置上的数字

25、进行比较即可。但在判断几位数字正确时,则应当注意:计算机所想的是“1123”,而人所猜的是“1576”,则正确的数字只有1位。 程序中截取计算机所想的数的每位数字与人所猜的数字按位比较。若有两位数字相同,则要记信所猜中数字的位置,使该位数字只能与一位对应的数字“相同”。当截取下一位数字进行比较时,就不应再与上述位置上的数字进行比较,以避免所猜的数中的一位与对应数中多位数字“相同”的错误情况。人机猜数游戏(2) 将以上游戏双方倒一下,请人想一个四位的整数,计算机来猜,人给计算机提示信息,最终看计算机用几次猜出一个人“想”的数。请编程实现。*问题分析与算法设计 解决这类问题时,计算机的思考过程不可

26、能象人一样具完备的推理能力,关键在于要将推理和判断的过程变成一种机械的过程,找出相应的规则,否则计算机难以完成推理工作。 基于对问题的分析和理解,将问题进行简化,求解分为两个步聚来完成:首先确定四位数字的组成,然后再确定四位数字的排列顺序。可以列出如下规则: 1)分别显示四个1,四个2,.,四个0,确定四位数字的组成。 2)依次产生四位数字的全部排列(依次两两交换全部数字的位置)。 3)根据人输入的正确数字及正确位置的数目,进行分别处理: (注意此时不出现输入的情况,因为在四个数字已经确定的情况下,若有3个位置正确,则第四个数字的位置必然也是正确的) 若输入4:游戏结束。 判断本次输入与上次输

27、入的差值 若差为2:说明前一次输入的一定为0,本次输入的为2,本次交换的两个数字的位置是正确的,只要交换另外两个没有交换过的数字即可结束游戏。 若差为-2:说明前一次输入的一定为2,本次的一定为0。说明刚交换过的两个数字的位置是错误的,只要将交换的两个数字位置还原,并交换另外两个没有交换过的数字即可结束游戏。 否则:若本次输入的正确位置数=m=n0)求出满足以下方程的正整数数列 i1,i2,.,in,使得:i1+i1+.+in=m,且i1=i2.=in。例如: 当n=4, m=8时,将得到如下5 个数列: 5 1 1 1 4 2 1 1 3 3 1 1 3 2 2 1 2 2 2 2*问题分析与算法设计 可将原题抽象为:将M分解为N个整数,且N个整数的和为M,i1=i2=.=in。分解整数的方法很低多,由于题目中有i1=i2=.=i

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1