600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > C语言项目实战:24点游戏计算器(基于结构体 指针 函数 数组 循环等知识点)

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

时间:2021-03-08 10:50:56

相关推荐

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、选择项目

打开VS,点击创建新项目-》然后选择如下如图所示的选项创建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调试结果如下所示

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。