文章目录

  • C语言项目实战:24点游戏计算器(基于结构体、指针、函数、数组、循环等知识点)
    • 前言:24点游戏计算器的规则如下
    • 一、项目的创建标
      • 1、选择项目
      • 2、输入项目名称和路径
      • 3、创建头文件Main.h、PointGame.h和源文件Main.c、PointGame.c如下所示
    • 二、项目的编写
      • 1、Main.h头文件的编写
      • 2、PointGame.h头文件的编写
      • 3、PointGame.c源文件的编写
      • 3、Main.c源文件的编写
    • 三、项目的调试结果

C语言项目实战:24点游戏计算器(基于结构体、指针、函数、数组、循环等知识点)

前言:24点游戏计算器的规则如下

24点是一种益智游戏,24点是把4个整数(一般是正整数)通过加减乘除以及括号运算,使最后的计算结果是24的一个数学游戏,24点可以考验人的智力和数学敏感性,它能在游戏中提高人们的心算能力。

24点通常是使用扑克牌来进行游戏的,一副牌中抽去大小王后还剩下52张(如果初练也可只用1~10这40张牌),任意抽取4张牌(称为牌组),用加、减、乘、除(可加括号)把牌面上的数算成24。每张牌必须只能用一次,如抽出的牌是3、8、8、9,那么算式为(9-8)×8×3或3×8÷(9-8)或(9-8÷8)×3等。

一、项目的创建标

1、选择项目

打开VS2019,点击创建新项目-》然后选择如下如图所示的选项创建C语言项目

2、输入项目名称和路径

3、创建头文件Main.h、PointGame.h和源文件Main.c、PointGame.c如下所示

二、项目的编写

1、Main.h头文件的编写

#pragma once#include <stdio.h>
#include <stdlib.h>

2、PointGame.h头文件的编写

#pragma once#include <stdbool.h>
#include <math.h>#define PRECISION 1E-6
#define TARGET 24
#define SIZE 4/*
* 最终表达式由四个数、括号、运算符组成,其大小不会超过
* 5 * (SIZE - 1) + SIZE * 2 + 1
*/typedef struct card
{double value;char expression[5 * (SIZE - 1) + SIZE * 2 + 1];
} Card, *pCard;bool game24(pCard card, int size);

3、PointGame.c源文件的编写

#define _CRT_SECURE_NO_WARNINGS#include "Main.h"
#include "PointGame.h"/*
* 牌堆中计算24点
*   card  牌堆
*   size  个数
*/
bool game24(pCard card, int size)
{Card stack[3];/** 如果牌堆里只有一张牌,判断是否就是需要的目标*/if (size == 1){if (fabs(card[0].value - TARGET) < PRECISION){printf("%d = %s\n", TARGET, card[0].expression);return true;}else{return false;}}/**从牌堆中任选两张牌*/int m, n, i, t;for (m = 0; m < size - 1; m++){for (n = m + 1; n < size; n++){/** 剩余的牌放入新牌堆*/t = 0;for (i = 0; i < size; i++){if (i != m && i != n){stack[t].value = card[i].value;sprintf(stack[t].expression, "%s", card[i].expression);t++;}}/** 选中两张牌的和放入新牌堆*/stack[size - 2].value = card[m].value + card[n].value;sprintf(stack[size - 2].expression, "(%s + %s)", card[m].expression, card[n].expression);if (game24(stack, size - 1)){return true;}/** 选中两张牌的差放入新牌堆*/if (card[m].value > card[n].value){stack[size - 2].value = card[m].value - card[n].value;sprintf(stack[size - 2].expression, "(%s - %s)", card[m].expression, card[n].expression);}else{stack[size - 2].value = card[n].value - card[m].value;sprintf(stack[size - 2].expression, "(%s - %s)", card[n].expression, card[m].expression);}if (game24(stack, size - 1)){return true;}/** 选中两张牌的积放入新牌堆*/stack[size - 2].value = card[m].value * card[n].value;sprintf(stack[size - 2].expression, "%s * %s", card[m].expression, card[n].expression);if (game24(stack, size - 1)){return true;}/** 选中两张牌的商放入新牌堆*/if (card[m].value != 0){stack[size - 2].value = card[n].value / card[m].value;sprintf(stack[size - 2].expression, "%s / %s", card[n].expression, card[m].expression);if (game24(stack, size - 1)){return true;}}if (card[n].value != 0){stack[size - 2].value = card[m].value / card[n].value;sprintf(stack[size - 2].expression, "%s / %s", card[m].expression, card[n].expression);if (game24(stack, size - 1)){return true;}}}}return false;
}

3、Main.c源文件的编写

#define _CRT_SECURE_NO_WARNINGS#include "Main.h"
#include "PointGame.h"int main()
{system("color 3E");int i, poke;Card card[SIZE];printf("请输入4个数字 以判断解法:");for (i = 0; i < SIZE; i++){scanf("%d", &poke);card[i].value = (double)poke;sprintf(card[i].expression, "%d", poke);}if (game24(card, SIZE)){printf("Done\n");}else{printf("No Answer\n");}system("pause");return 0;
}

三、项目的调试结果

选择生成----》生成解决方案。
结果如下

按F5调试结果如下所示

C语言项目实战:24点游戏计算器(基于结构体、指针、函数、数组、循环等知识点)相关推荐

  1. C语言—用结构体指针给数组赋值(结构体指针指向字符串,给字符串赋值)

    数组定义: char acBuf[sizeof(TRANS_HEAD_S) + sizeof(USER_HEAD_S) + 4] = {0}; 结构体定义: typedef struct {int i ...

  2. c语言中指针数组赋值字符串,C语言—用结构体指针给数组赋值(结构体指针指向字符串,给字符串赋值)...

    数组定义: char acBuf[sizeof(TRANS_HEAD_S) + sizeof(USER_HEAD_S) + 4] = {0}; 结构体定义: typedef struct { int ...

  3. go语言json字符串解析为结构体数组,结构体指针的数组

    废话不多说直接上效果图 完整代码如下 package main import ("encoding/json""fmt" ) // 结构体定义 type rob ...

  4. c语言把结构体首地址放入指针,C语言基础———指针,结构体指针,函数指针

    指针基础 一 指针就是地址,地址就是指针.指针存储的是内存的地址. 二 指针的定义 1.&表示取址运算符,&a 可以取到 a 在内存中的地址;打印地址的占位符为(%p),printf( ...

  5. 【C语言】深度探索offsetof,解析结构体的成员数组和指针

    目录 一.offsetof的功能 二.自定义offsetof 三.探索结构体 3.1结构体中的成员 3.2结构体指针和数组 该篇博客主要讲了自定义offsetof是如何实现的,为什么要这样写,以此沿生 ...

  6. 【C语言项目】贪吃蛇游戏(上)

    00. 目录 文章目录 00. 目录 01. 开发背景 02. 功能介绍 03. 欢迎界面设计 3.1 常用终端控制函数 3.2 设置文本颜色函数 3.3 设置光标位置函数 3.4 绘制字符画(蛇) ...

  7. 【C语言项目实战6——指针以及应用】

    文章目录 学生管理系统链表问题 项目功能需求 知识点分析 算法思想 系统流程图 项目实现 项目小结 参考文献 学生管理系统的代码: 约瑟夫链表问题 知识点分析 算法思想 系统流程图 项目实现 项目小结 ...

  8. [开源] C语言项目实战 - 虚拟鼠标 - VirtualMouse

    C语言项目实战 - 虚拟鼠标 - VirtualMouse 目录 关于软件 软件介绍 使用帮助 项目介绍 源码及软件下载 知识点扫描 热键的使用 鼠标事件的模拟 字体的选用 开机自启动的设置 为软件添 ...

  9. 项目的数据存储c语言,C语言项目实战项目8__项目中学生数据的存储与重用.ppt

    C语言项目实战项目8__项目中学生数据的存储与重用 项目8 技能目标 能用fopen函数和fclose函数打开和关闭文件 能正确地读写文件 能用文件定位函数对文件进行正确的定位操作 能用格式化读写函数 ...

最新文章

  1. SQL Server配置支持中文
  2. Angular界面元素CSS样式的条件式施加方式
  3. ASP.NET Core如何限制请求频率
  4. C++类模板实例化条件
  5. Vue中引入swiper插件报错:To install it, you can run: npm install --save swiper/css/swiper.css
  6. HOWTO:InstallShield的Basic MSI工程中如何增加序列号输入选项
  7. centos php mongodb 驱动,安装 MongoDB PHP 驱动 在CentOS 6.x和遇到的问题
  8. shell脚本合并文件内容
  9. EasyRecovery最新免费专业版数据恢复软件
  10. 武汉加油——传染病模型拟合
  11. asp车衣太阳膜改色膜电子质保卡保修卡实现原理
  12. vue组件中ctrl键和shift键操作多选
  13. gentoo 安装笔记
  14. Axure RP-产品原型设计工具使用
  15. 麻省理工公开课人工智能笔记六
  16. vue项目中,js根据文件名后缀,判断文件图片、视频、文档、pdf等类型的方法
  17. python读取批量txt文件
  18. 常见的一些 HTTP状态码 404 502 503
  19. 编写自定义的字符串一致性匹配方法,只要两个字符串包含同样的字符, 不管字符的顺序如何,都认为两个字符串一致,如:”aabbcc”和”abcabc”被认为是一致的
  20. Linux平台卸载MySQL总结

热门文章

  1. 由Finalizer和SocksSocketImpl引起的Fullgc问题盘点
  2. iOS拍照和录制视频 摄像头使用
  3. 从BIM到GIS(高级)| IFC LOD 200转LOD 3 CityGML
  4. Apache Marmony
  5. 全球plc品牌总结(欢迎补充)
  6. AIR780E系列教程目录
  7. 设置成功的开源计划办公室(OSPO)的指南
  8. html5文档样式,jQuery HTML5文件上传美化插件jQuery.filer
  9. 4.19 使用QT做上位机与下位机通讯
  10. 笔记本电脑终于可以待机了