您的位置:首页 > 其它

四则运算升级版

2015-04-09 18:33 267 查看
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int cc,i,n,z;//操作数
int count;//题目数目
int max,min;//数据的最大值、最小值
int dt=0;//记录做对题目的数目
int shu[4];
char fh[4]={'+','-','*','/'};
void zhengshu();
void fenshu();
int main(void)
{
int xz;//操作数
srand((unsigned)time(NULL));

printf("输入题目题数!--");//输入题目总数
scanf("%d",&count);

printf("是否有乘除法!(1/否,2/是.)--");//决定是否产生乘除法
scanf("%d",&cc);

printf("数值范围!(1 100)--");//输入数值范围
scanf("%d %d",&min,&max);

printf("\n请选择!");
printf("\n1)整数运算.");
printf("\n2)分数运算.--");
scanf("%d",&xz);

if(xz==1)
{
zhengshu();
}
else
{
fenshu();
}
printf("\n一共%d道题,答对%d道题!\n",count,dt);

}
void zhengshu()
{
int x=0,y=0;//用户输入答案、正确答案
int fz0,fm0;//已约分正确分子、分母
int fz,fm;//用户输入分子、分母
int jlfz,jlfm;//操作数
int ys;
char ch;
for(i=0;i<count;i++)
{
for(n=0;n<2;n++)//生成等式
{
shu
=rand()%(max-min+1)+min;
printf(" %d ",shu
);
if(n<1)
{
z=rand()%(cc*2);
printf("%c",fh[z]);
}
else
{
printf("=");
}
}
switch(z)//算数正确答案
{
case 0:
y=shu[0]+shu[1];
break;
case 1:
y=shu[0]-shu[1];
break;
case 2:
y=shu[0]*shu[1];
break;
case 3:
y=shu[0]/shu[1];
break;
default:
break;
}
if(z==3)
{
jlfz=shu[0];//约分
jlfm=shu[1];

while(shu[1]!=0)
{
ys=shu[0]%shu[1];
shu[0]=shu[1];
shu[1]=ys;
}
fz0=jlfz/shu[0];
fm0=jlfm/shu[0];
if(fm0<0)
{
fz0=fz0*-1;
fm0=fm0*-1;
}

scanf("%d%c%d",&fz,&ch,&fm);
if(fz==fz0&&fm==fm0)
{
printf("答对了!\n");
dt++;
}
else
{
printf("答错了!\n");
}
}
else
{
scanf("%d",&x);
if(x==y)
{
printf("答对了!\n");
dt++;
}
else
{
printf("答错了!\n");
}
}
}
}
void fenshu()
{
int fz,fm;//用户输入分子、分母
int fz0,fm0;//已约分正确分子、分母
int fz1,fm1;//未约分正确分子、分母
int jlfz,jlfm;//操作数
int temp,ys;//操作数
char ch;
for(i=0;i<count;i++)
{
for(n=0;n<4;n++)//产生四个随机数
{
shu
=rand()%(max-min+1)+min;
}
if(shu[0]>shu[1])//确保分母大于分子
{
temp=shu[1];
shu[1]=shu[0];
shu[0]=temp;
}

if(shu[2]>shu[3])//确保分母大于分子
{
temp=shu[3];
shu[3]=shu[2];
shu[2]=temp;
}
z=rand()%(cc*2);

switch(z)
{
case 0:
fz1=shu[0]*shu[3]+shu[1]*shu[2];
fm1=shu[1]*shu[3];
break;
case 1:
fz1=shu[0]*shu[3]-shu[1]*shu[2];
fm1=shu[1]*shu[3];
break;
case 2:
fz1=shu[0]*shu[2];
fm1=shu[1]*shu[3];
break;
case 3:
fz1=shu[0]*shu[3];
fm1=shu[1]*shu[2];
break;
default:
break;
}

jlfz=fz1;//约分
jlfm=fm1;
while(fm1!=0)
{
ys=fz1%fm1;
fz1=fm1;
fm1=ys;
}
fz0=jlfz/fz1;
fm0=jlfm/fz1;
if(fm0<0)
{
fz0=fz0*-1;
fm0=fm0*-1;
}

printf("%d/%d %c %d/%d = ",shu[0],shu[1],fh[z],shu[2],shu[3]);//打印分式
printf("----|%d/%d|----",fz0,fm0);
scanf("%d%c%d",&fz,&ch,&fm);
if(fz==fz0&&fm==fm0)
{
printf("答对了!\n");
dt++;
}
else
{
printf("答错了!\n");
}

}
}






这是实验一的升级版,在编程时遇到的主要问题是分数很难去判断,不过到后面,自己仔细琢磨和参考资料还是搞定了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: