24点游戏简单程序设计

24点游戏简单程序设计

俺是一个c语言初入学习者,本程序是学校要求的程序设计课,跟大家分享,请多指教。(程序写的较快,思维简单,请多包涵)

程序设计要求

(1) 计算机随机给出 4 个 1-13 的数值(以扑克牌为例,模拟扑克牌的点数);
(2) 用户根据这四个数,输入能算出 24 的表达式(只能用加、减、乘、除及括号
组成的四则运算);
(3) 计算机检验用户给出的表达式正确与否(包括是否用计算机所给出的四张牌);
(4) 计算机根据该表达式计算出值,判断用户的表达式是否正确。

实现方式

1、由于要求要用数据结构的知识,在计算四则运算时,用到栈的操作。
这里我用一个数组存储操作数,一个栈存储操作符,先将操作数 则放入操作数数组,在存入操作符的时候,注意操作符栈顶元素,如果放入操作符优先级高,则将栈顶放入操作数栈,如果读入右括号则将在左括号之前的操作符出栈,最后将操作符栈出栈,放到操作数数组中,完成中缀表达式变成后缀表达式。然后再对后缀表达式求值

//************************************中缀表达式变成后缀表达式******//
	while (str[s] != '\0')
	{
		if (str[s] > '0'&&str[s] <= '=')//如果是操作数 则放入操作数栈   1~13
			 M1[i++]=str[s++];
		else if (str[s] == '(' || str[s] == '+' || str[s] == '-' || str[s] == '*' || str[s] == '/' || str[s] == ')')
		{
			if ( str[s]  == '*' || str[s] == '/')//看栈顶的优先级  
			{
				if (!IsEmpty(M2))
				{
					while (Top(M2) == '*'|| Top(M2) == '/')
					{
						M1[i++]=Top(M2);      //如果放入操作符优先级高,则将栈顶放入操作数栈
						Pop(M2);
						if (IsEmpty(M2))
							break;
					}
				}
				Push(str[s], M2);
				s++;
			}
			else if ( str[s] == '-' || str[s] == '+')//看栈顶的优先级  
			{
				if (!IsEmpty(M2))
				while (Top(M2) == '*'|| Top(M2) == '/')
				{
					M1[i++] = Top(M2);      //如果放入操作符优先级高,则将栈顶放入操作数栈
					Pop(M2);
					if (IsEmpty(M2))
						break;
				}
				Push(str[s], M2);
				s++;
			}
			else if(str[s] == '(')
				Push(str[s++], M2);
			else if (str[s] == ')')      //如果读入右括号则将在左括号之前的操作符出栈
			{
				while (Top(M2) != '(')
				{
					M1[i++] = Top(M2);
					Pop(M2);
				}
				s++;
			}	
		}	
	}

2、随机数产生
用rand()这个函数,虽然时一个伪随机数的产生函数,但是多次调用后,可以实现随机。
rand() % 13 + 1 我们从这里规定产生的随机数为最小是1,最大为13

		int  i, j;
	int **a = (int **)malloc(M * sizeof(int *));
	for (i = 0; i < M; i++)
		a[i] = (int *)malloc(N * sizeof(int));

	srand((unsigned)time(NULL));
	for (i = 0; i < M; ++i) {
		Random_four1(a[i], N);
		for (j = 0; j < N; ++j);
			//printf("%3d ", a[i][j]);
		//printf("\n");
	}
	return a[0];

3、界面控制台
1、改变控制台背景颜色
system(“color E0”); 设置背景为黄色
2、控制键盘光标 选择选项
4、运用穷举法的方法进行列举各种表达式,判断产生的四位随机数可否完成24点。

已知bug,无法接收超过两位数(乱输入一堆数字会卡斯哈哈哈)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值