24点小游戏(c语言)

24点游戏,输入四个数字,分别进行加减乘除四则运算结果为24的输出成立表达式。

 

#include <stdio.h>
#include <stdio.h>

/* 本函数用于判断符号的种类*/
char operator_signaltype( int signal_i )
{
    switch( signal_i )
 {
 case 0: return '*';
 case 1: return '/';
 case 2: return '+';  //这里不能加''符号,那样就成了字符了
 case 3: return '-';
 default: printf("error_1\n"); break;
 }
}
/*对两个数进行算术运算*/
double operation( double a, double b, int op )
{
 switch( op )
 {
 case 0: return( a*b );
 case 1: return( a/b );
 case 2: return( a+b );
 case 3: return( a-b );
 }
}
/*人工计算函数*/
double signal_man( char fu , int a, int b )
{
 switch( fu )
 {
 case'*': return( a*b );
 case'/': return( a/b );
 case'+': return( a+b );
 case'-': return( a-b );
 }
}
/*通过参数中的值计算并输出*/
int deal( int *pp , int a, int b, int c )  //pp是输入的4个数字,ff存了3个运算符
{
 int exp[40];
 double sum=0;
 char ch1, ch2, ch3;
 sum= operation( *pp , *(pp+1), a );
 sum= operation( sum, *(pp+2) , b );
 sum= operation( sum, *(pp+3) , c );
 if( (sum > 23.9) && (sum < 24.1) )
 {  
  ch1 = operator_signaltype( a );
  ch2 = operator_signaltype( b );
  ch3 = operator_signaltype( c );
  printf("[(%d%c%d)%c%d]%c%d=24\n", *pp, ch1, *(pp+1), ch2, *(pp+2), ch3, *(pp+3) );
 }
}
/*处理人工计算函数*/
int deal_man( int *pw, char ff[] )
{
 double sum=0.0;
 sum= signal_man( ff[0], *pw , *(pw+1) );
 sum= signal_man( ff[1], sum , *(pw+2) );
 sum= signal_man( ff[2], sum , *(pw+3) );
 if( (sum > 23.9)&&( sum < 24.1 ) )  /*这里因为sum用的浮点数,所以乘法和除法都会有零点几的误差,
                                         这里值得注意*/
 {
  printf("回答正确!\n");
 }
 return 0;
}

/*电脑处理调度函数*/
int put_in()
{
 int i,j,k, fn[4],c;  /*pa是充当数组,存储3个操作符
                   fn[4]是用来存储输入的四个数字的数组*/
 int *pa;
 double sum=0.0;
 char fu[4], num;
 printf("请输入4个数字(中间用空格分开):");
 fflush(stdin);  //清空输入缓冲

 scanf("%d %d %d %d", &fn[0], &fn[1], &fn[2], &fn[3] );
 printf("是否进行人工计算(Y/N):");
 fflush(stdin);  //清空缓冲区

 scanf("%c", &num );
 if( num == 'Y' || num == 'y' )
 {
  printf("请输入三个运算符:");
  while( ( c=getchar() != '\n' )  && c != EOF );  //清空输入缓冲

  scanf("%s", fu);  //存储自己输入的3个运算符
  deal_man( fn, fu );  //数字,运算符
 }
 printf("所有可能结果如下:\n");
 for( i=0; i<4; i++ )
  for( j=0; j<4; j++ )
   for( k=0; k<4; k++ )
    deal( fn , i, j, k );
 return 0;
}
/*主函数                  */
int main()
{
 char temp, c;
 while( 1 )
 {
  printf("24点游戏\n");
  printf("是否进行游戏(Y/N):");
  fflush(stdin);  //++

  scanf("%c", &temp );
  if( temp == 'N' || temp == 'n' )
  {
   printf("退出程序\n");
   return 0;
  }
  while( ( c=getchar() != '\n' ) && c != EOF );  //清空输入缓冲
  put_in();   /*输入及处理函数*/
 }
 return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值