所有分类
  • 所有分类
  • 实时新闻

QtC++编程实例│猴子选大王(附源码)

原标题:Qt c++编程实例│猴子选大王(附源码)

QtC++编程实例│猴子选大王(附源码)

一群猴子(设共number只)要选新猴王了。选择方法是:先按照1、2、3 、…、number的顺序给每个猴子一个编号,再按照编号的顺序围坐成一个圆圈(number号猴子之后是1号猴子),接着从第1号猴子开始往下数,每数到第指定个数字(用m表示)的猴子,该猴子就要离开圆圈,接着从紧邻的下一只猴子开始重新从1开始往下数,如此直到圈中最后只剩下一个猴子为止,最后的这只猴子就是选出的新猴王。本节将编写程序模拟并展示选新猴王的过程。

01

Qt C++编程实例:猴子选大王

创建一个基于QWidget、带界面的应用程序,然后设计如图5-12所示的界面。

由于初始时需要用户设置猴子的总数以及指定的数字m,因此考虑在主界面显示之前先请用户输入这两个数据,并使用这两个数据来对主界面进行一些初始化的工作。因此主函数代码实现如下:

/****************************************

* 项目名:5_10

* 文件名:main.cpp

* 说明:主函数实现

****************************************/

include“widget.h”

include

include

intmain(intargc,char*argv[])

{

QApplicationa(argc, argv);

intnumber;

number=QInputDialog::getInt(nullptr,“初始设置”,“有多少只猴子?”,1,1,100);

intm;

m=QInputDialog::getInt(nullptr,“初始设置”,“数到几的猴子退出?”,1,1,100);

Widget w;

w.show;

w.initial(number,m);

returna.exec;

}

代码中定义的number用于接收输入对话框用户输入的猴子数量,m用于接收输入对话框用户输入的指定数,接着再显示主要的界面w。可以看到,主函数中还调用了自定义窗口类Widget中的initial成员函数(是自定义的成员函数,用来完成对窗口显示内容的初始设置,将在随后介绍)。

图5-12 例5_10界面

为了处理的方便,在Widget类中声明如下数据成员:

private:

int m;

QLinkedList monkeyList;

QLinkedList::iterator currentMonkey;

m是指定数(数到m时,猴子退出)。链表monkeyList来表示猴子围成的圆圈,每个未退出的猴子都是链表中的一个节点。链表迭代器currentMonkey表示当前正数到的猴子。

为了处理方便,还需在类中添加私有的成员函数showMonkeyList用于在界面的猴子序列区域(多行文本框)中显示猴子序列,代码如下:

void Widget::showMonkeyList//遍历显示猴子链表

{

QString str;

QLinkedList::iterator iter;

for(iter= monkeyList.begin;iter!=monkeyList.end;iter++)

{

if(iter==currentMonkey)

str+=*+*iter+;

else

str+=*iter+;

}

ui->textEdit->setText(str);

if(monkeyList.size==1)

{

QString bigBoss=*monkeyList.begin;

QMessageBox::information(this,“结果”,“新大王为猴子”+bigBoss);

this->close;

}

}

依次遍历链表,并将各节点中的内容连接成字符串,然后显示在多行文本框中。如果链表中只有一个节点,则说明此时已找到新大王,弹出显示结果的消息框,之后关闭整个窗口结束程序。

添加公有initial成员函数用于初始化窗口中显示的内容,代码如下:

voidWidget::initial(intnumber, int m)

{

this->m=m;

ui->labelInfo->setText(“共”+QString::number(number)+“只猴子,数到”

+QString::number(m)+“退出”);

for(int i=1;i<=number;i++)//初始化猴子链表

monkeyList.append(QString::number(i));

currentMonkey=monkeyList.begin;

showMonkeyList;

}

功能为将传入的固定数m的值存储于对象内部的数据成员m中、设置界面上方标签显示的文字、使用循环初始化猴子链表(将number个猴子依次链接到链表)、设置当前开始数的位置为第一只猴子、然后再调用showMonkeyList显示初始状态的猴子序列。此处使用链表来表示猴子围成的圆圈(当访问到链表结尾时,会继续接着从链表头开始访问)。

点击图5-12中的下一个出列的猴子按钮时,执行的自关联槽定义如下:

void Widget::on_pushButton_clicked

{

for(int i=1;i

{

currentMonkey++;

if(currentMonkey==monkeyList.end)

currentMonkey=monkeyList.begin;

}

ui->lineEdit->setText(*currentMonkey);//显示将被删除的猴子

currentMonkey=monkeyList.erase(currentMonkey);

if(currentMonkey==monkeyList.end)

currentMonkey=monkeyList.begin;

showMonkeyList;

}

功能为从当前猴子处往下数数,到第m个的时候停止(如果中间有已到链表尾的情形,则切换到链表头继续),此时currentMonkey指向的即为当前要出列的猴子节点。将其显示在界面单行文本框中、从链表中删除此猴子节点、然后显示更新后的猴子序列。

程序运行结果如图5-13所示,左图为指定共10只猴子、数到3出列后的初始界面,右图为最终得到的结果。

图5-13 例5_11运行效果

本小节的例子实际上是计算机和数学领域中的经典约瑟夫问题,程序只是模拟了原始的求解过程,实际上还有更多高效率的解法,感兴趣的读者可以再参考更多的资料以作了解。

02

源代码下载

关注微信公众号,后台回复关键词猴子选大王即可获得完整源代码。

03

参考书籍

《Qt C++编程从入门到实战-微课视频版》

作者:彭源、孙超超、田秀霞、李红娇

定价:79.80元

编辑推荐

1. 以Qt框架为载体,讲授C++面向对象机制

2. 贯彻实例式学习法,在实例中理解、掌握和深化概念

3. 注重编程习惯的培养,注重与动手实践的衔接

4. 注意与前序、后继课程之间的衔接

5. 具备知识的拓展性

本书配套资源丰富,包括教学大纲、教学课件、电子教案、程序源码、习题答案、教学进度表和在线作业,作者还为本书精心录制了500分钟的微课视频。

04

精彩推荐

  • Qt C++编程实例│计算器(附源码)

  • Qt C++案例│使用OpenCV库进行图像读写(源码+视频)

  • 通关操作系统 | 外存分配方式(附视频限免)

  • 通关操作系统 | 页面置换算法(附视频限免)

  • 通关操作系统 | 页式存储管理(附视频限免)

  • 通关操作系统 | 银行家算法(附视频限免)

  • 通关操作系统 | 死锁问题(附视频限免)

  • 通关操作系统 | 调度算法(附视频限免)

  • 通关操作系统 | 同步问题举例(附视频限免)

  • 通关操作系统 | 进程的同步与互斥(附视频限免)

  • 通关操作系统 | 进程控制(附视频限免)

  • 通关操作系统 | 进程的概念(附视频限免)

  • 人工智能实践: 基于T-S 模型的模糊推理(附源码)

  • Python自然语言处理|语料清洗(附视频)

  • Python编程|实现基于字典的通讯录

  • CCF CSP-J/S第一轮认证考纲详解

  • Python 韩信点兵思政案例(含优惠码)

  • Python ︱爬取天气预报信息(附视频)

  • 《机器学习》实验指导书(附实验参考+代码)

  • Python爬虫综合实战 │ 创建云起书院爬虫(附代码)

  • Python爬虫实战 │ Email提醒(附代码)

  • Python深度学习 │一文掌握卷积神经网络返回搜狐,查看更多

责任编辑:

原文链接:https://www.w1ym.com/83221/,转载请注明出处~~~
0

评论0

请先

站点公告

【温馨提示】 本站不建议您对本站支付任何费用或开通任何会员本站99%资源为免费资源只提供共享不提供技术支持,本站资源主要以学习开发为主,本站是为个人资源记录学习研究等情况而建立,如特殊原因下载,需在24小时删除相关资源。本站资源均来自互联网收集或网友分享,若有侵权,请联系站长删除,谢谢。立即查看
显示验证码
没有账号?注册  忘记密码?