我来
以下可以实现先乘除后加减
而且是随机出的一个表达式,比如
说程序随机产生:
58*59-24+12/5-2
你给出答案3次不对
程序给出答案符合你的要求:希望对
你有所帮助。你可以根据思路自己修
改你想要的参数,以便增加或者降低
运算难度。
你输入答案的时候用整数输入舍点小数部
分因为如果要输入浮点数,可能这辈子都
答不对,尽管也许就差那么0.000几或者
0.00001。
通过编译绝对稳当
以下是代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
int n,i,m,time1=0;long answer1,answer;float a[10]; char c[2],str[10];
long result(float a[],char str[],int n);
begin:
time1=0;
srand(time(NULL));
n=(rand()%10)+3;
if(n/2)
n=n+1;
for(i=0;i<(n+1)/2;i++)
a[i]=rand()%300+1;
for(i=0;i<(n-1)/2;i++)
{
m=rand()%4;
switch(m)
{
case 0:str[i]='+';break;
case 1:str[i]='-';break;
case 2:str[i]='*';break;
case 3:str[i]='/';break;
}
}
printf("this is a text please show right answer\nyou have 3 times\nGOOD LUCK\n");
for(i=0;i<(n-1)/2;i++)
printf("%.2f%c",a[i],str[i]);
printf("%.2f",a[(n+1)/2-1]);
printf("\n");
printf("input your answer\n");
answer=result(a,str,n);
do
{
scanf("%ld",&answer1);
getchar();
time1++;
}while(answer1!=answer&&time1<=3);
if(answer==answer1)
printf("you are right\n");
if(answer!=answer1)
printf("sorry the right answer is %ld\n",answer);
printf("try again?Y/N\n");
scanf("%s",c);
if(c[0]=='y'||c[0]=='Y')
goto begin;
}
long result(float a[],char str[],int n)
{
int i,j,a1,b;
a1=(n-1)/2;
b=(n+1)/2;
for(i=0;i<a1;i++)
{
if(str[i]=='*')
{
a[i]=a[i]*a[i+1];
a1--;b--;
for(j=i;j<a1;j++)
str[j]=str[j+1];
for(j=i+1;j<b;j++)
a[j]=a[j+1];
i--;
}
if(str[i]=='/')
{
a[i]=a[i]/a[i+1];
a1--;b--;
for(j=i;j<a1;j++)
str[j]=str[j+1];
for(j=i+1;j<b;j++)
a[j]=a[j+1];
i--;
}
}
for(i=0;i<a1;i++)
{
if(str[i]=='+')
{
a[i]=a[i]+a[i+1];
a1--;b--;
for(j=i;j<a1;j++)
str[j]=str[j+1];
for(j=i+1;j<b;j++)
a[j]=a[j+1];
i--;
}
if(str[i]=='-')
{
a[i]=a[i]-a[i+1];
a1--;b--;
for(j=i;j<a1;j++)
str[j]=str[j+1];
for(j=i+1;j<b;j++)
a[j]=a[j+1];
i--;
}
}
return((long)a[0]);
}
温馨提示:内容为网友见解,仅供参考