1 Star 0 Fork 0

Troye / 软工作业

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Math.cpp 16.27 KB
一键复制 编辑 原始数据 按行查看 历史
Troye 提交于 2020-03-04 20:29 . 如果第二次作业
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588
/*假定四则运算
一年级简单程度是10以内2个数加减法,中等程度是10以内3个数加减法,困难程度是20以内3个数加减法
二年级简单程度是100以内2个数加减法,中等程度是100以内3个数加减法,困难程度是1000以内3个数加减法
三年级简单程度是2位数乘1位数乘法,中等是2位数乘2位数乘法。困难是1位数乘法和加减法的混合运算
四年级简单程度是2位数除1位数除法,中等是2位数乘除法混合运算,困难是3位数乘除法的混合运算(答案以整数加余数的形式展现)(a/b/c类型的答案以3位小数展现且abc可为小数)
五年级简单程度是四个分数加减运算,中等是四个分数的的乘除运算,困难是4个分数的混合运算(答案以带分数形式给出)
*/
#include<stdio.h>
#include<iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
//下面的代码根据算法笔记A1081 分数的四则运算修改而得
typedef long long ll;
int ans4,ans5,ans6;//带分数
ll gcd(ll a,ll b){//求最大公约数的辗转相除法递归写法
return b==0?a:gcd(b,a%b);
}
struct Fraction{//分数
ll up,down;//分子,分母
};
Fraction reduction(Fraction result){//分数的化简
if(result.down<0){
result.down=-result.down;
result.up=-result.up;
}
if(result.up==0){
result.down=1;
}else{
int d=gcd(abs(result.up),abs(result.down));
result.down/=d;
result.up/=d;
}
return result;
}
//分数的加减乘除
Fraction add(Fraction f1,Fraction f2){
Fraction result;
result.up=f1.up*f2.down+f2.up *f1.down;
result.down=f1.down*f2.down;
return reduction(result);
}
Fraction minu(Fraction f1,Fraction f2){
Fraction result;
result.up=f1.up*f2.down-f2.up *f1.down;
result.down=f1.down*f2.down;
return reduction(result);
}
Fraction multi(Fraction f1,Fraction f2){
Fraction result;
result.up=f1.up*f2.up;
result.down=f1.down*f2.down;
return reduction(result);
}
Fraction divide(Fraction f1,Fraction f2){
Fraction result;
result.up=f1.up*f2.down;
result.down=f1.down*f2.up;
return reduction(result);
}
//分数的输出
void showResult(Fraction r){
reduction(r);
if(r.down==1) printf("%lld\n",r.up);
else if(abs(r.up)>r.down){//假分数
ans4=r.up/r.down;
ans5=abs(r.up)%r.down;
ans6=r.down;
}else{//真分数
ans4=0;
ans5=r.up;
ans6=r.down;
}
}
int ans;
int ans1;//除法所得结果整数部分
int ans2;//除法所得结果余数部分
double ans3;//(a/b/c类型的答案以3位小数展现)
int a1[100],b1[100],c1[100];//10以内整数
int main(){
Fraction sum,sum2,temp,sum3,sum4;
sum.up=0;
sum.down=1;
sum2.up=0;
sum2.down=1;
sum3.up=1;
sum3.down=1;
sum4.up=1;
sum4.down=1;
int right=0;
int wrong=0;
int grade;
int degree;//3 Difficulty level,respectively are difficult=3 medium=2 easy=1
int num;//题目数量
printf("请输入你的年级,一年级输入1,二年级输入2,三年级输入3,四年级输入4,五年级输入5\n");
scanf("%d",&grade);
printf("请选择难易程度,选择简单输入1,选择中等输入2,选择困难输入3\n");
scanf("%d",&degree);
switch(grade){
case 1:
if(degree==1){
printf("这是一年级运算简单程度\n");
printf("请输入题目数量\n");
scanf("%d",&num);
srand((unsigned) (time(NULL)));
for(int i=0;i<num;i++){
int n1=rand()%10;
int n2=rand()%10;
if(n1>=n2){
a1[i]=n1;
b1[i]=n2;
}
else{
a1[i]=n2;
b1[i]=n1;
}
}
for(int i=0;i<num/2;i++){
printf(" %d + %d = \n",a1[i],b1[i]);
scanf("%d",&ans);
if(a1[i]+b1[i]==ans){
printf("回答正确!\n");
right++;
}
else{
printf("回答错误!\n");
wrong++;
}
}
for(int i=num/2;i<num;i++){
printf("\n %d -%d = ",a1[i],b1[i]);
scanf("%d",&ans);
if(a1[i]-b1[i]==ans){
printf("回答正确!\n");
right++;
}
else{
printf("回答错误!\n");
wrong++;
}
}
printf("你一共答对了%d道题,答错了%d道题\n",right,wrong);
}
else if(degree==2){printf("这是一年级运算中等程度");
printf("请输入题目数量\n");
scanf("%d",&num);
for(int i=0;i<num;){
int n1=rand()%10;
int n2=rand()%10;
int n3=rand()%10;
if(n1+n2-n3>=0&&n1+n3-n2>=0){
a1[i]=n1;
b1[i]=n2;
c1[i]=n3;
i++;}
}
for(int i=0;i<num/2;i++){
printf(" %d + %d -%d= \n",a1[i],b1[i],c1[i]);
scanf("%d",&ans);
if(a1[i]+b1[i]-c1[i]==ans){
printf("回答正确!\n");
right++;}
else{
printf("回答错误!\n");
wrong++;}
}
for(int i=num/2;i<num;i++){
printf("\n %d -%d +%d= ",a1[i],b1[i],c1[i]);
scanf("%d",&ans);
if(a1[i]-b1[i]+c1[i]==ans){
printf("回答正确!\n");
right++;}
else{
printf("回答错误!\n");
wrong++; }
}
printf("你一共答对了%d道题,答错了%d道题\n",right,wrong);
}
else{
printf("这是一年级运算困难程度");
printf("请输入题目数量\n");
scanf("%d",&num);
for(int i=0;i<num;){
int n1=rand()%10;
int n2=rand()%10;
int n3=rand()%10;
if(n1+n2-n3>=0&&n1+n3-n2>=0){
a1[i]=n1+10;
b1[i]=n2+10;
c1[i]=n3+10;
i++;}
}
for(int i=0;i<num/2;i++){
printf(" %d + %d -%d= \n",a1[i],b1[i],c1[i]);
scanf("%d",&ans);
if(a1[i]+b1[i]-c1[i]==ans){
printf("回答正确!\n");
right++;}
else{
printf("回答错误!\n");
wrong++;}
}
for(int i=num/2;i<num;i++){
printf("\n %d -%d +%d= ",a1[i],b1[i],c1[i]);
scanf("%d",&ans);
if(a1[i]-b1[i]+c1[i]==ans){
printf("回答正确!\n");
right++;}
else{
printf("回答错误!\n");
wrong++; }
}
printf("你一共答对了%d道题,答错了%d道题\n",right,wrong);
}
break;
case 2:
if(degree==1){printf("这是二年级运算简单程度");
printf("请输入题目数量\n");
scanf("%d",&num);
srand((unsigned) (time(NULL)));
for(int i=0;i<num;i++){
int n1=rand()%100;
int n2=rand()%100;
if(n1>=n2){
a1[i]=n1;
b1[i]=n2;
}
else{
a1[i]=n2;
b1[i]=n1;
}
}
for(int i=0;i<num/2;i++){
printf(" %d + %d = \n",a1[i],b1[i]);
scanf("%d",&ans);
if(a1[i]+b1[i]==ans){
printf("回答正确!\n");
right++;
}
else{
printf("回答错误!\n");
wrong++;
}
}
for(int i=num/2;i<num;i++){
printf("\n %d -%d = ",a1[i],b1[i]);
scanf("%d",&ans);
if(a1[i]-b1[i]==ans){
printf("回答正确!\n");
right++;
}
else{
printf("回答错误!\n");
wrong++;
}
}
printf("你一共答对了%d道题,答错了%d道题\n",right,wrong);}
else if(degree==2){printf("这是二年级运算中等程度");
printf("请输入题目数量\n");
scanf("%d",&num);
for(int i=0;i<num;){
int n1=rand()%100;
int n2=rand()%100;
int n3=rand()%100;
if(n1+n2-n3>=0&&n1+n3-n2>=0){
a1[i]=n1;
b1[i]=n2;
c1[i]=n3;
i++;}
}
for(int i=0;i<num/2;i++){
printf(" %d + %d -%d= \n",a1[i],b1[i],c1[i]);
scanf("%d",&ans);
if(a1[i]+b1[i]-c1[i]==ans){
printf("回答正确!\n");
right++;}
else{
printf("回答错误!\n");
wrong++;}
}
for(int i=num/2;i<num;i++){
printf("\n %d -%d +%d= ",a1[i],b1[i],c1[i]);
scanf("%d",&ans);
if(a1[i]-b1[i]+c1[i]==ans){
printf("回答正确!\n");
right++;}
else{
printf("回答错误!\n");
wrong++; }
}
printf("你一共答对了%d道题,答错了%d道题\n",right,wrong);}
else{printf("这是二年级运算困难程度");
printf("请输入题目数量\n");
scanf("%d",&num);
for(int i=0;i<num;){
int n1=rand()%1000;
int n2=rand()%1000;
int n3=rand()%1000;
if(n1+n2-n3>=0&&n1+n3-n2>=0){
a1[i]=n1;
b1[i]=n2;
c1[i]=n3;
i++;}
}
for(int i=0;i<num/2;i++){
printf(" %d + %d -%d= \n",a1[i],b1[i],c1[i]);
scanf("%d",&ans);
if(a1[i]+b1[i]-c1[i]==ans){
printf("回答正确!\n");
right++;}
else{
printf("回答错误!\n");
wrong++;}
}
for(int i=num/2;i<num;i++){
printf("\n %d -%d +%d= ",a1[i],b1[i],c1[i]);
scanf("%d",&ans);
if(a1[i]-b1[i]+c1[i]==ans){
printf("回答正确!\n");
right++;}
else{
printf("回答错误!\n");
wrong++; }
}
printf("你一共答对了%d道题,答错了%d道题\n",right,wrong);}
break;
case 3:
if(degree==1){printf("这是三年级运算简单程度");
printf("请输入题目数量\n");
scanf("%d",&num);
srand((unsigned) (time(NULL)));
for(int i=0;i<num;i++){
int n1=rand()%100;
int n2=rand()%10;
printf(" %d * %d = \n",n1,n2);
scanf("%d",&ans);
if(n1*n2==ans){
printf("回答正确!\n");
right++;}
else{
printf("回答错误!\n");
wrong++;}
}
printf("你一共答对了%d道题,答错了%d道题\n",right,wrong);
}
else if(degree==2){printf("这是三年级运算中等程度");
printf("请输入题目数量\n");
scanf("%d",&num);
srand((unsigned) (time(NULL)));
for(int i=0;i<num;i++){
int n1=rand()%100;
int n2=rand()%100;
printf(" %d * %d = \n",n1,n2);
scanf("%d",&ans);
if(n1*n2==ans){
printf("回答正确!\n");
right++;}
else{
printf("回答错误!\n");
wrong++;}
}
printf("你一共答对了%d道题,答错了%d道题\n",right,wrong);}
else{printf("这是三年级运算困难程度");
printf("请输入题目数量\n");
scanf("%d",&num);
srand((unsigned) (time(NULL)));
for(int i=0;i<num;){
int n1=rand()%10;
int n2=rand()%10;
int n3=rand()%100;
if(n1*n2-n3>0){
i++;
printf(" %d * %d-%d = \n",n1,n2,n3);
scanf("%d",&ans);
if(n1*n2-n3==ans){
printf("回答正确!\n");
right++;}
else{
printf("回答错误!\n");
wrong++;}
}
else{
i++;
printf(" %d * %d+%d = \n",n1,n2,n3);
scanf("%d",&ans);
if(n1*n2+n3==ans){
printf("回答正确!\n");
right++;}
else{
printf("回答错误!\n");
wrong++;}
}
}
printf("你一共答对了%d道题,答错了%d道题\n",right,wrong);}
break;
case 4:
if(degree==1){
printf("这是四年级运算简单程度");
printf("请输入题目数量\n");
scanf("%d",&num);
srand((unsigned) (time(NULL)));
for(int i=0;i<num;i++){
int n1=rand()%100;
int n2=rand()%10;
printf(" %d / %d = \n",n1,n2);
scanf("%d %d",&ans1,&ans2);
if(n1/n2==ans1&&n1%n2==ans2){
printf("回答正确!\n");
right++;}
else{
printf("回答错误!\n");
wrong++;}
}
printf("你一共答对了%d道题,答错了%d道题\n",right,wrong);
}
else if(degree==2){printf("这是四年级运算中等程度");
printf("请输入题目数量\n");
scanf("%d",&num);
srand((unsigned) (time(NULL)));
for(int i=0;i<num/2;i++){
int n1=rand()%100;
int n2=rand()%100;
int n3=rand()%100;
printf(" %d * %d/%d = \n",n1,n2,n3);
scanf("%d %d",&ans1,&ans2);
if(n1*n2/n3==ans1&&n1*n2%n3==ans2){
printf("回答正确!\n");
right++;}
else{
printf("回答错误!\n");
wrong++;}
}
for(int i=num/2;i<num;i++){
double n1=rand()%100;
double n2=rand()%100;
double n3=rand()%10;
printf(" %.f /%.f/%.f = \n",n1,n2,n3);
scanf("%lf",&ans3);//注意 scanf("%.3f",&ans3); 这种写法是错误的
double c=n1/(n2*n3);
c=(int)(1000.0*c+0.5)/1000.0;//将计算结果保留为三位小数
if(c==ans3){
printf("回答正确!\n");
right++;}
else{
printf("回答错误!\n");
wrong++;}
}
printf("你一共答对了%d道题,答错了%d道题\n",right,wrong);
}
else{printf("这是四年级运算困难程度");
printf("请输入题目数量\n");
scanf("%d",&num);
srand((unsigned) (time(NULL)));
for(int i=0;i<num/2;i++){
int n1=rand()%1000;
int n2=rand()%1000;
int n3=rand()%1000;
printf(" %d * %d/%d = \n",n1,n2,n3);
scanf("%d %d",&ans1,&ans2);
if(n1*n2/n3==ans1&&n1*n2%n3==ans2){
printf("回答正确!\n");
right++;}
else{
printf("回答错误!\n");
wrong++;}
}
for(int i=num/2;i<num;i++){
double n1=rand()%1000;
double n2=rand()%1000;
double n3=rand()%100;
printf(" %.f /%.f/%.f = \n",n1,n2,n3);
scanf("%lf",&ans3);//注意 scanf("%.3f",&ans3); 这种写法是错误的
double c=n1/(n2*n3);
c=(int)(1000.0*c+0.5)/1000.0;//将计算结果保留为三位小数
if(c==ans3){
printf("回答正确!\n");
right++;}
else{
printf("回答错误!\n");
wrong++;}
}
printf("你一共答对了%d道题,答错了%d道题\n",right,wrong);
}
break;
default://五年级
if(degree==1){printf("这是五年级运算简单程度");
printf("请输入题目数量\n");
scanf("%d",&num);
srand((unsigned) (time(NULL)));
for(int i=0;i<num;i++){
sum.up=0;
sum.down=1;
for(int i=0;i<2;i++){
temp.up=rand()%10;
temp.down=rand()%10+1;
printf("%lld/%lld+",temp.up,temp.down);
sum=add(sum,temp);
}
temp.up=rand()%10;
temp.down=rand()%10+1;
printf("%lld/%lld-",temp.up,temp.down);
sum=add(sum,temp);
temp.up=rand()%10;
temp.down=rand()%10+1;
printf("%lld/%lld=",temp.up,temp.down);
sum=minu(sum,temp);
showResult(sum);
int o=0,p=0,q=0;
scanf("%d %d/%d",&o,&p,&q);
if(o==ans4&&p==ans5&&q==ans6){ printf("回答正确!\n");
right++;}
else{
printf("回答错误!\n");
wrong++;}
}
}
else if(degree==2){printf("这是五年级运算中等程度");
printf("请输入题目数量\n");
scanf("%d",&num);
srand((unsigned) (time(NULL)));
for(int i=0;i<num;i++){
sum3.up=1;
sum3.down=1;
for(int i=0;i<2;i++){
temp.up=rand()%10;
temp.down=rand()%10+1;
printf("%lld/%lld*",temp.up,temp.down);
sum3=multi(sum3,temp);
}
temp.up=rand()%10;
temp.down=rand()%10+1;
printf("%lld/%lld/",temp.up,temp.down);
sum3=multi(sum3,temp);
temp.up=rand()%10;
temp.down=rand()%10+1;
printf("%lld/%lld=",temp.up,temp.down);
sum3=divide(sum3,temp);
showResult(sum3);
int o=0,p=0,q=0;
scanf("%d %d/%d",&o,&p,&q);
if(o==ans4&&p==ans5&&q==ans6){ printf("回答正确!\n");
right++;}
else{
printf("回答错误!\n");
wrong++;}
}
}
else{printf("这是五年级运算困难程度");
printf("请输入题目数量\n");
scanf("%d",&num);
srand((unsigned) (time(NULL)));
for(int i=0;i<num;i++){
sum3.up=1;
sum3.down=1;
for(int i=0;i<2;i++){
temp.up=rand()%10;
temp.down=rand()%10+1;
printf("%lld/%lld*",temp.up,temp.down);
sum3=multi(sum3,temp);
}
temp.up=rand()%10;
temp.down=rand()%10+1;
printf("%lld/%lld/",temp.up,temp.down);
sum3=multi(sum3,temp);
temp.up=rand()%10;
temp.down=rand()%10+1;
printf("%lld/%lld=",temp.up,temp.down);
sum3=divide(sum3,temp);
showResult(sum3);
int o=0,p=0,q=0;
scanf("%d %d/%d",&o,&p,&q);
if(o==ans4&&p==ans5&&q==ans6){ printf("回答正确!\n");
right++;}
else{
printf("回答错误!\n");
wrong++;}
}
}
}
system("pause");
return 0;
}
1
https://gitee.com/tao_tao_chen1/soft_work.git
git@gitee.com:tao_tao_chen1/soft_work.git
tao_tao_chen1
soft_work
软工作业
master

搜索帮助