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;
}