软件工程导论作业
|博客班级 | https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19/ |
|作业要求 | https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19/homework/11376|
|作业目标 | 写一个能自动生成小学四则运算题目的程序 |
|学号 | 3190704120 |
#include <iostream>
#include<ctime>
#include <stdlib.h>
#include <time.h>
int grade=0;
void yzz(int i);
int yzz_wei(int i)
{
switch(i){
case 1:return rand()%10;break;
case 2:return (rand()%90)+10;break;
case 3:return (rand()%900)+100;break;
case 4:return (rand()%9000)+1000;break;
case 5:return (rand()%90000)+10000;break;
default:break;
};
return 0;
}
void fengshu_yzz(int t)
{
int x1,x2,a,b,i,x3,x4,x5,x6;
srand(time(0)); //通过系统时间初始化随机数种子,若不设置则每次产生随机数相同
for(i=0;i<=t;i++)
{
x1=rand()%100; //产生随机整数
x2=rand()%100;
x3=rand()%100;
x4=rand()%100;
x5=rand()%100;
x6=rand()%100;
for(;x4==0;) //用于分母是否为零的判断
{
x4=rand()%100;
}
for(;x6==0;) //用于分母是否为零的判断
{
x6=rand()%100;
}
a=rand()%4; //产生随机整数用于除四取余后进行四种运算符号和四种数的选择
b=rand()%4;
switch(b) //用于随机整数和真分数四种组合情况的选择
{
case 0: //整数整数运算
switch(a) //用于四则运算四种符号的选择
{
case 0:
//cout<<x1<<"+"<<x2<<"="<<endl;
printf("%d+%d=\n",x1,x2);
break;
case 1:
// cout<<x1<<"-"<<x2<<"="<<endl;
printf("%d-%d=\n",x1,x2);
break;
case 2:
//cout<<x1<<"*"<<x2<<"="<<endl;
printf("%d*%d=\n",x1,x2);
break;
case 3:
for(;x2==0;) //用于分母是否为零的判断
{
x2=rand()%100;
}
//cout<<x1<<"/"<<x2<<"="<<endl;
printf("%d/%d=\n",x1,x2);
break;
default:
break;
}
break;
case 1: //分数分数运算
for(;x3>x4;)
{
x3=rand()%100;
}
for(;x5>x6;)
{
x5=rand()%100;
}
switch(a)
{
case 0:
//cout<<"("<<x3<<"/"<<x4<<")"<<"+"<<"("<<x5<<"/"<<x6<<")"<<"="<<endl;
printf("(%d/%d)+(%d/%d)=\n",x3,x4,x5,x6);
break;
case 1:
//cout<<"("<<x3<<"/"<<x4<<")"<<"-"<<"("<<x5<<"/"<<x6<<")"<<"="<<endl;
printf("(%d/%d)-(%d/%d)=\n",x3,x4,x5,x6);
break;
case 2:
//cout<<"("<<x3<<"/"<<x4<<")"<<"*"<<"("<<x5<<"/"<<x6<<")"<<"="<<endl;
printf("(%d/%d)/(%d/%d)=\n",x3,x4,x5,x6);
break;
case 3:
for(;x5==0;)
{
x5=rand()%100;
}
for(;x5>x6||x5==x6;)
{
x5=rand()%100;
}
//cout<<"("<<x3<<"/"<<x4<<")"<<"/"<<"("<<x5<<"/"<<x6<<")"<<"="<<endl;
printf("(%d/%d)/(%d/%d)=\n",x3,x4,x5,x6);
break;
default:
break;
}
break;
case 2: //整数分数运算
for(;x3>x4;)
{
x3=rand()%100;
}
switch(a)
{
case 0:
//cout<<x1<<"+"<<"("<<x3<<"/"<<x4<<")"<<"="<<endl;
printf("%d+(%d/%d)=\n",x1,x3,x4);
break;
case 1:
//cout<<x1<<"-"<<"("<<x3<<"/"<<x4<<")"<<"="<<endl;
printf("%d-(%d/%d)=\n",x1,x3,x4);
break;
case 2:
//cout<<x1<<"*"<<"("<<x3<<"/"<<x4<<")"<<"="<<endl;
printf("%d*(%d/%d)=\n",x1,x3,x4);
break;
case 3:
for(;x3==0;)
{
x3=rand()%100;
}
for(;x3>x4||x3==x4;)
{
x3=rand()%100;
}
//cout<<x1<<"/"<<"("<<x3<<"/"<<x4<<")"<<"="<<endl;
printf("%d/(%d/%d)=\n",x1,x3,x4);
break;
default:
break;
}
break;
case 3: //分数整数运算
for(;x5>x6;)
{
x5=rand()%100;
}
switch(a)
{
case 0:
//cout<<"("<<x5<<"/"<<x6<<")"<<"+"<<x2<<"="<<endl;
printf("(%d/%d)+%d=\n",x5,x6,x2);
break;
case 1:
//cout<<"("<<x5<<"/"<<x6<<")"<<"-"<<x2<<"="<<endl;
printf("(%d/%d)-%d=\n",x5,x6,x2);
break;
case 2:
//cout<<"("<<x5<<"/"<<x6<<")"<<"*"<<x2<<"="<<endl;
printf("(%d/%d)*%d=\n",x5,x6,x2);
break;
case 3:
for(;x2==0;) //用于分母是否为零的判断
{
x2=rand()%100;
}
//cout<<"("<<x5<<"/"<<x6<<")"<<"/"<<x2<<"="<<endl;
printf("(%d/%d)/%d=\n",x5,x6,x2);
break;
default:
break;
}
break;
default:
break;
}
}
}
void Add_yzz(int n)
{
printf("%d位数加法运算\n",n);
int count=0;
for(int i=1;i<=10;i++){
int a = yzz_wei(n);
int b = yzz_wei(n);
printf("%d + %d = ",a,b);
int result;scanf("%d",&result);
if(result==a+b){
count++;
yzz(1);
}
else yzz(0);
}
double rate = count / 10;
if(rate<0.75)
{
printf("失败!\n");
grade--;
}
else
{
printf("成功!\n");
grade++;
}
}
void Subtr_yzz(int n)
{
printf("%d位数减法运算\n",n);
int count=0;
for(int i=1;i<=10;i++){
int a = yzz_wei(n);
int b = yzz_wei(n);
printf("%d - %d = ",a,b);
int result;scanf("%d",&result);
if(result==a-b){
count++;
yzz(1);
}
else yzz(0);
}
double rate = count / 10;
if(rate<0.75)
{printf("失败!");grade--;
}
else {printf("成功!");grade++;
}
}
void Mult_yzz(int n)
{
printf("%d位数乘法运算\n",n);
int count=0;
for(int i=1;i<=10;i++){
int a = yzz_wei(n);
int b = yzz_wei(n);
printf("%d * %d = ",a,b);
int result;scanf("%d",&result);
if(result==a*b){
count++;
yzz(1);
}
else yzz(0);
}
double rate = count / 10;
if(rate<0.75) {printf("失败!\n");grade--;
}
else
{printf("成功!\n");grade++;
}
}
void Divi_yzz(int n)
{
printf("%d位数除法运算(注意保留6位有效小数点)\n",n);
int count=0;
for(int i=1;i<=10;i++){
int a = yzz_wei(n);
int b = yzz_wei(n);
if(n==1) //两位除法特殊,除数不能为0
{
int b = (rand()%9)+1; //除数不能为0
}
printf("%d / %d = ",a,b);
float result;scanf("%f",&result); //生成数字的时候,应该循环一系列数字
if(result==1.0*a/b){
count++;
yzz(1);
}
else yzz(0);
}
float rate = count / 10;
if(rate<0.75) {printf("失败!\n");grade--;}
else {printf("成功!\n");grade++;}
}
void super_yzz(int n)
{
int count;
for(int i=0;i<10;i++){
float result;
int c = rand()%4;
int a = yzz_wei(n);
int b = yzz_wei(n);
switch(c){
case 0: //加法
printf("%d + %d = ",a,b);
scanf("%f",&result);
if(result==a+b){
count++;
yzz(1);
}
else yzz(0);break;
case 1:
printf("%d - %d = ",a,b);
scanf("%f",&result);
if(result==a-b){
count++;
yzz(1);
}
else yzz(0);break;
break;
case 2:
printf("%d * %d = ",a,b);
scanf("%f",&result);
if(result==a*b){
count++;
yzz(1);
}
else yzz(0);break;
break;
case 3:
if(n==1)
{
int b = (rand()%9)+1;
}
printf("%d / %d = ",a,b);
scanf("%f",&result);
if(result==1.0*a/b){
count++;
yzz(1);
}
else yzz(0);break;
break; //除法
default:break;
};
}
float rate = count / 10;
if(rate<0.75) {
printf("失败!\n");
grade--;
}
else {
printf("成功!\n");
grade++;}
}
void yzz(int i)
{
if(i==1){
int j = rand()%3;
switch(j){
case 0:printf("yes!\n");grade++; printf("当前得分%d\n",grade);break;
case 1:printf("再接再厉!\n");grade++; printf("当前得分%d\n",grade);break;
case 2:printf("厉害了!\n"); grade++;printf("当前得分%d\n",grade);break;
default:break;
}
}
else if(i==0){
int k = rand()%4;
switch(k){
case 0:printf("加油!\n"); grade--;printf("当前得分%d\n",grade);break;
case 1:printf("别灰心!\n");grade--;printf("当前得分%d\n",grade);break;
case 2:printf("努力!\n"); grade--;printf("当前得分%d\n",grade);break;
case 3:printf("继续加油哦\n");grade--;printf("当前得分%d",grade);break;
default:break;
}
}
}
int main()
{
srand((unsigned)time(NULL));
while(true){
int choice1,choice2;
printf("运算选择:\n1 加法\t 2 减法\t 3 乘法\t 4 除法\t 5 四种运算类型的随机混合 \n6 fengshu30\n\n");
printf("难度选择:\n1 一位数字运算\n2 两位数字运算\n3 三位数字运算\n4 四位数字运算\n5 五位数字运算\n\n");
printf("键入运算难度和难度选择:");scanf("%d%d",&choice1,&choice2);
switch(choice1){
case 1:Add_yzz(choice2);break;
case 2:Subtr_yzz(choice2);break;
case 3:Mult_yzz(choice2);break;
case 4:Divi_yzz(choice2);break;
case 5:super_yzz(choice2);break;
case 6:printf("enter Boss\n");
fengshu_yzz(choice2);break;
}
}
return 0;
}