C语言项目实战:24点游戏计算器(基于结构体、指针、函数、数组、循环等知识点)
文章目录
- 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点游戏计算器(基于结构体、指针、函数、数组、循环等知识点)相关推荐
- C语言—用结构体指针给数组赋值(结构体指针指向字符串,给字符串赋值)
数组定义: char acBuf[sizeof(TRANS_HEAD_S) + sizeof(USER_HEAD_S) + 4] = {0}; 结构体定义: typedef struct {int i ...
- c语言中指针数组赋值字符串,C语言—用结构体指针给数组赋值(结构体指针指向字符串,给字符串赋值)...
数组定义: char acBuf[sizeof(TRANS_HEAD_S) + sizeof(USER_HEAD_S) + 4] = {0}; 结构体定义: typedef struct { int ...
- go语言json字符串解析为结构体数组,结构体指针的数组
废话不多说直接上效果图 完整代码如下 package main import ("encoding/json""fmt" ) // 结构体定义 type rob ...
- c语言把结构体首地址放入指针,C语言基础———指针,结构体指针,函数指针
指针基础 一 指针就是地址,地址就是指针.指针存储的是内存的地址. 二 指针的定义 1.&表示取址运算符,&a 可以取到 a 在内存中的地址;打印地址的占位符为(%p),printf( ...
- 【C语言】深度探索offsetof,解析结构体的成员数组和指针
目录 一.offsetof的功能 二.自定义offsetof 三.探索结构体 3.1结构体中的成员 3.2结构体指针和数组 该篇博客主要讲了自定义offsetof是如何实现的,为什么要这样写,以此沿生 ...
- 【C语言项目】贪吃蛇游戏(上)
00. 目录 文章目录 00. 目录 01. 开发背景 02. 功能介绍 03. 欢迎界面设计 3.1 常用终端控制函数 3.2 设置文本颜色函数 3.3 设置光标位置函数 3.4 绘制字符画(蛇) ...
- 【C语言项目实战6——指针以及应用】
文章目录 学生管理系统链表问题 项目功能需求 知识点分析 算法思想 系统流程图 项目实现 项目小结 参考文献 学生管理系统的代码: 约瑟夫链表问题 知识点分析 算法思想 系统流程图 项目实现 项目小结 ...
- [开源] C语言项目实战 - 虚拟鼠标 - VirtualMouse
C语言项目实战 - 虚拟鼠标 - VirtualMouse 目录 关于软件 软件介绍 使用帮助 项目介绍 源码及软件下载 知识点扫描 热键的使用 鼠标事件的模拟 字体的选用 开机自启动的设置 为软件添 ...
- 项目的数据存储c语言,C语言项目实战项目8__项目中学生数据的存储与重用.ppt
C语言项目实战项目8__项目中学生数据的存储与重用 项目8 技能目标 能用fopen函数和fclose函数打开和关闭文件 能正确地读写文件 能用文件定位函数对文件进行正确的定位操作 能用格式化读写函数 ...
最新文章
- SQL Server配置支持中文
- Angular界面元素CSS样式的条件式施加方式
- ASP.NET Core如何限制请求频率
- C++类模板实例化条件
- Vue中引入swiper插件报错:To install it, you can run: npm install --save swiper/css/swiper.css
- HOWTO:InstallShield的Basic MSI工程中如何增加序列号输入选项
- centos php mongodb 驱动,安装 MongoDB PHP 驱动 在CentOS 6.x和遇到的问题
- shell脚本合并文件内容
- EasyRecovery最新免费专业版数据恢复软件
- 武汉加油——传染病模型拟合
- asp车衣太阳膜改色膜电子质保卡保修卡实现原理
- vue组件中ctrl键和shift键操作多选
- gentoo 安装笔记
- Axure RP-产品原型设计工具使用
- 麻省理工公开课人工智能笔记六
- vue项目中,js根据文件名后缀,判断文件图片、视频、文档、pdf等类型的方法
- python读取批量txt文件
- 常见的一些 HTTP状态码 404 502 503
- 编写自定义的字符串一致性匹配方法,只要两个字符串包含同样的字符, 不管字符的顺序如何,都认为两个字符串一致,如:”aabbcc”和”abcabc”被认为是一致的
- Linux平台卸载MySQL总结