四则运算作业

 

 

 

 

 代码思路:

写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:

1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24

2)程序要求能处理用户的输入,判断对错,累积分数

3)程序支持可以由用户自行选择加、减、乘、除运算

4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目

 

代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int s;//答对的题目数量
float score;//得分(百分制)

//判断答案是否正确
void judge0(float a,float ta) //专为除法提供判断函数
{
float error=a-ta;//计算结果与真正答案的误差小于一定值
if((error<=0.005)&&(error>=-0.004))
{printf("回答正确!\n");s++;}
else
printf("回答错误,正确答案是 %.2f\n",ta);
}

void judge(int a,int ta) //加法减法,乘法的判断函数
{
if(a==ta)
{printf("回答正确!\n");s++;}
else
printf("回答错误,正确答案是 %d\n",ta);
}

void judge1(int a1,int a2,float ta) //真分数运算的判断函数
{
float a=(float)a1/(float)a2;
if(a==ta)
{printf("回答正确!\n");s++;}
else
printf("回答错误,正确答案是 %.2f\n",ta);
}

//真分数的随机运算
int random0()
{
int num,i=0;
printf("请输入题目数量\n");
scanf("%d",&num);
srand(unsigned(time(NULL)));

while(i<num)
{
int type;//运算类型,加减乘除
int left1,left2,right1,right2;
int answer1,answer2;
float trueanswer;
left1= rand() % 100;
left2= rand() % 100;
type = rand() % 4;
if(left1>left2)    //转化为真分数    
{
int t;
t=left1;
left2=left1;
left1=t;
}
right1 = rand() % 100;
right2 = rand() % 100;
if(right1>right2)//转化为真分数    
{
int t;
t=right1;
right2=right1;
right1=t;
}
switch(type)
{
case 0:
trueanswer=((float)left1/(float)left2)+((float)right1/(float)right2);
printf("%d/%d + %d/%d = ", left1, left2,right1,right2);
scanf("%d/%d",&answer1,&answer2);
judge1(answer1,answer2,trueanswer);
break;
case 1:
trueanswer=((float)left1/(float)left2)-((float)right1/(float)right2);
printf("%d/%d - %d/%d = ", left1, left2,right1,right2);
scanf("%d/%d",&answer1,&answer2);
judge1(answer1,answer2,trueanswer);
break;
case 2:
trueanswer=((float)left1/(float)left2)*((float)right1/(float)right2);
printf("%d/%d * %d/%d = ", left1, left2,right1,right2);
scanf("%d/%d",&answer1,&answer2);
judge1(answer1,answer2,trueanswer);
break;
case 3:
trueanswer=((float)left1/(float)left2)/((float)right1/(float)right2);
printf("%d/%d / %d/%d = ", left1, left2,right1,right2);
scanf("%d/%d",&answer1,&answer2);
judge1(answer1,answer2,trueanswer);
break;
}
i++;
}
return num;
}

// 整数的随机运算
int random()
{
int num,i=0;
printf("请输入题目数量\n");
scanf("%d",&num);
srand(unsigned(time(NULL)));

while(i<num)
{
int type;//运算类型
int left, right;
int answer,trueanswer;
left = rand() % 100;
type = rand() % 4;
right = rand() % 100;
switch(type)
{
case 0:
trueanswer=left+right;
printf("%d + %d = ", left, right);
scanf("%d",&answer);
judge(answer,trueanswer);
break;
case 1:
trueanswer=left-right;
printf("%d - %d = ", left, right);
scanf("%d",&answer);
judge(answer,trueanswer);
break;
case 2:
trueanswer=left*right;
printf("%d * %d = ", left, right);
scanf("%d",&answer);
judge(answer,trueanswer);
break;
case 3:
float answer0,trueanswer0;
trueanswer0=((float)left)/((float)right);
printf("%d /%d = ", left, right);
scanf("%f",&answer0);
judge0(answer0,trueanswer0);
break;
}
i++;
}
return num;
}

//加法
int add()
{
int num,i=0;
printf("请输入题目数量\n");
scanf("%d",&num);
srand(unsigned(time(NULL)));

while(i<num)
{
int left, right,answer,trueanswer;
left = rand() % 100;
right = rand() % 100;
trueanswer=left+right;
printf("%d +%d = ", left, right);
scanf("%d",&answer);
judge(answer,trueanswer);
i++;
}
return num;
}

//减法
int subtract()
{
int num,i=0;
printf("请输入题目数量\n");
scanf("%d",&num);
srand(unsigned(time(NULL)));

while(i<num)
{
int left, right,answer,trueanswer;
left = rand() % 100;
right = rand() % 100;
trueanswer=left-right;
printf("%d -%d = ", left, right);
scanf("%d",&answer);
judge(answer,trueanswer);
i++;
}
return num;
}

//乘法
int multiply()
{
int num,i=0;
printf("请输入题目数量\n");
scanf("%d",&num);
srand(unsigned(time(NULL)));

while(i<num)
{
int left, right,answer,trueanswer;
left = rand() % 100;
right = rand() % 100;
trueanswer=left*right;
printf("%d *%d = ", left, right);
scanf("%d",&answer);
judge(answer,trueanswer);
i++;
}
return num;
}

//除法
int divide()
{
int num,i=0;
printf("请输入题目数量\n");
scanf("%d",&num);
srand(unsigned(time(NULL)));

while(i<num)
{
int left, right;
float answer,trueanswer;
left = rand() % 100;
right = rand() % 100;
trueanswer=((float)left)/((float)right);
printf("%d /%d = ", left, right);
scanf("%f",&answer);
judge0(answer,trueanswer);
i++;
}
return num;
}


//打印界面提示信息
void main()
{
printf("welcome!\n");
printf("\n");
int choose,t;
do
{
s=0;
score=0;
int n;
printf("********************四则运算********************\n");
printf("\n");
printf(" 1.随即题目\n");
printf(" 2.加法题目\n");
printf(" 3.减法题目\n");
printf(" 4.乘法题目\n");
printf(" 5.除法题目\n");
printf(" 6.分数运算\n");
printf(" 7.退出\n");
printf("\n");
printf("******************Designed by 吴山茶******************\n");
printf("\n");
printf("请选择计算类型:");
scanf("%d",&t);
choose=t;
printf("%d",choose);
printf("\n");
system("cls");
switch(choose)
{    
case 1:n=random();printf("\n");break;
case 2:n=add();printf("\n");break;
case 3:n=subtract();printf("\n");break;
case 4:n=multiply();printf("\n");break;
case 5:n=divide();printf("\n");break;
case 6:n=random0();printf("\n");break;
default:break; 
}
score=(float)s/(float)n;
printf("得分:%.2f\n",score);
}while(choose!=7);
exit(0);
}

 结果:

 

posted @ 2021-09-21 23:27  心辰  阅读(62)  评论(0)    收藏  举报