C/C++程序设计实践(9题)[2024-05-23]

C/C++程序设计实践(9题)[2024-05-23]

2023-2024-2 程序设计实践
B230418/19 实验指导书

基本要求:

  1. 严格遵守纪律,按计划进度完成程序设计实践任务。
  2. 严格遵守实验室的各项规章制度,严禁做与实验无关的任何事情。
  3. 在完成过程中,要求理论联系实际,注意所学知识的综合运用,并能综合利用各种资源(包括网络、图书馆等),注重创造力的培养。
  4. 程序设计实践过程中,要始终坚持严肃认真、实事求是、独立思考、虚心学习、刻苦钻研的态度,要加强对基础理论、基本知识与基本技能的掌握和运用。
  5. 请注意保存和备份自己的文档。
  6. 禁止利用实验室条件进行看电影、打游戏、聊天等与老师布置的上机任务不相干的事情。
    内容要求:
    本实践性环节主要涉及《高级语言程序设计》、《面向对象程序设计及C++》或《Java程序设计》等课程。涉及的知识点:数组、字符串、排序、常见算法等。学生要理论联系实际,编写C、C++或Java程序来分析与解决问题,要求具体完成基本程序设计、基本数据结构设计、基本算法设计、高级算法设计等。
    课题

源码联系UP主 -> https://space.bilibili.com/329101171

一、排序算法(必做题)
除了常见的冒泡排序和选择排序,常见的排序方法还有多种:
(1) 插入排序
(2) 快速排序
(3) 希尔排序
(4) 归并排序
(5) 堆排序
请使用上述5种排序算法分别实现如下功能:
(1) 对随机产生的100个整数进行排序,并输出排序后的结果;
(2) 对文件中的若干个字符串进行排序,并将排序后的字符串更新到文件中。(注:字符串排序,不是字符排序,文件可使用txt文件,自备)

二、豆机
豆机也称为梅花瓶或髙尔顿瓶,它是一个用来做统计实验的设备,是用英国科学家瑟弗兰克斯髙尔顿的名字来命名的。它是一个三角形状的均匀放置钉子(或钩子)的直立板子,如图1所示。

图1 每个球都选取一个随机路径,然后掉入一个槽中
球都是从板子口落下的。每当球碰到钉子,它就有 50%的机会落向左边或落向右边。在板子底部的槽子中都会累积一堆球。
编写程序模拟豆机。程序应该提示用户输入球的个数以及机器的槽数。打印每个球的路径模拟它的下落。例如:在上图b中球的路径是LLRRLLR,而在上图c中球的路径是RLRRLRR。显示槽中球的最终储备量。下面是程序的一个运行示例:

三、猜单词游戏
准备一个词库文件,放入一批你准备的单词,如:

从词库文件中随机产生一个单词,提示用户一次猜测一个宇母,如运行示例所示。单词中的每个字母显示为一个星号。当用户猜测正确后,正确的字母在正确的位置显示出来。
当用户猜出一个单词,显示猜错的次数,并且询问用户是否继续对继续猜下一个单词。

四、八皇后
经典的八皇后难题是要将八个皇后放在棋盘上,任何两个皇后都不能互相攻击(即没有两个皇后是在同一行、同一列或者同一对角上)。可能的解决方案有很多。编写程序一种解决方案。输出格式如下图所示。

五、点对最短距离
给定的二维平面上有n个点,采用分治法进行研究,找其中的一对点,使得在n个点的所有点对中,该点对的距离最小。

六、井字游戏
在井字游戏中,两个玩家使用各自的标志(一方用 X 则另一方就用O),轮流填写 3 x 3 的网格中的某个空格。当一个玩家在网格的水平方向、垂直方向或者对角线方向上出现了三个相同的 X 或三个相同的O时,游戏结束,该玩家获胜。平局(没有贏家)是指当网格中所有的空格都被填满时没有任何一方的玩家获胜的情况。
创建一个玩井字游戏的程序。程序提示两个玩家可以选择 X 和O作为他们的标志。当输入一个标志时,程序在控制台上重新显示棋盘,然后确定游戏的状态(是获胜、平局还是继续)。下面是一个运行示例:


七、检验变量名的合法性
编写程序检验变量名的合法性。程序对用户输入的变量名进行检验,做出如下判断:
(1)illegal;
(2)legal, but uses poor style;
(3)professional。
用户输入‘q’,程序结束。
具体标准如下。
legal的判断标准:
-只包含字母、数字、_和 符号。 − 只能以字母 、 或 者 符号。 -只能以字母、_或者 符号。只能以字母开始。
-不能以数字开始。
-不能是关键字。
professional的判断标准:
-合法的
-只使用数字和字母
-第一个字母是小写字母

运行示例如下:
This program checks the properness of a variable name
Enter a variable name (q to quit): streetAddress2
Professional!
Enter a variable name (q to quit): street address2
Illegal.
Enter a variable name (q to quit): StreetAddress2
Legal, but uses poor style.
Enter a variable name (q to quit): 2ndStreetAddress
Illegal.
Enter a variable name (q to quit): street$address$2
Legal, but uses poor style.
Enter a variable name (q to quit): q

八、信用卡验证
信用卡号码遵循一定的模式。信用卡号码必须是13至16位数字。它必须从以下几点开始:
4 for Visa cards
5 for Master cards
37 for American Express cards
6 for Discover cards
1954年,IBM的Hans Luhn提出了一种验证信用卡号码的算法。该算法有助于确定卡号输入是否正确,或者信用卡是否被扫描仪正确扫描。几乎所有的信用卡号码都是在这种有效性检查后生成的,通常称为Luhn检查或Mod 10检查,其描述如下(举例来说,请考虑卡号4388576018402626):

(1)从右到左每第二个数字翻倍。
如果一个数字翻倍得到一个两位数,那么把这个两位数的两个数字加起来就得到一个一位数。

(2)把第一步中的每个数字加起来求和。
4 + 4 + 8 + 2 + 3 + 1 + 7 + 8 = 37

(3)从右到左,对每个奇数位上的数字进行求和。
6 + 6 + 0 + 8 + 0 + 7 + 8 + 3 = 38

(4)把第2步和第3步的结果求和。
37 + 38 = 75

(5)如果步骤4的结果能被10整除,则卡号有效,否则无效。例如,数字4388576018402626是无效的,但是数字4388576018410707是有效的。

范例如下:
Sample 1:

Sample 2:

Sample 3:

九、计算器
用户输入一个四则运算混合算式,输出运算结果。处理过程要求:将输入的中缀表达形式的算式,转换为后缀表达式后再进行运算。

十、自选题目
自选题目建议:登录http://poj.org/,选择北大poj中的题目,题目的通过率必须<=45%。网站具体使用方式见附件。
https://blog.csdn.net/a1dark/article/details/11714009(该网页给出了poj中经典推荐,可参考)

课程说明:

  1. 每位同学需完成必做题和(至少)四道选做题,题目难度、完成情况、做题数量与成绩相关。报告上撰写必做题和自己选取的两道题,按要求进行书写。
  2. 提交材料:
    6月3日前纸质报告和电子版材料交给班长,重修同学直接发给我。
    报告有模板,请严格按照报告模板书写。

纸质材料:程序设计报告打印稿一份,单面A4纸打印,两颗订书钉左边装订(打印完请仔细检查确保各项内容无误)。
电子材料:报告 + 源代码

(1) 文件夹命名:完整学号姓名
(2) 电子版程序设计报告(命名格式如上图所示)
(3) 所完成的程序源代码(所有完成的程序源代码,不仅仅是写在报告中的)

  1. 评分标准:
    本实践环节总评成绩由出勤、程序完成情况、程序设计实践报告等组成,出勤占总评的10%,程序完成情况占总评的30%,程序报告占总评的30%,答辩情况占总评的30%。出勤以外的其余项评分标准见报告模板最后一页。

    附件:《北大poj使用说明》
  1. 打开http://poj.org/

  2. 注册,ID请使用“njupt+学号”

  3. 注册成功后,点击problem,可以选择题目

  4. 题目信息如下:

  5. 写好代码后,可以自行设计数据测试正确,或者将网页题目里面的例子复制粘贴进去测试程序正确性,如果要提交代码,点击submit

  6. 将代码粘贴到对话框中,选择编译器语言

7.点击提交,可以看到自己的记录,不断刷新,可以看到新的result状态

如果显示accepted,则为正确

其他结果的含义:
Compile Error 编译错误
Wrong answer 答案错误,程序算法不对
Runtime Error 编译正确,但是运行时出错,可能数组越界,除以0等等
Time Limit Exceeded 超时,算法太慢
Output Limit Exceeded输出太多,算法有误
Memory Limit Exceeded使用太多内存
Presentation Error 恭喜你,答案对了,但是输出格式有误,看看是否多输出了一些空格或者逗号什么的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值