软件工程导论作业

|博客班级 | 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;

}



posted @ 2020-10-27 13:03  ahpu-yzz  阅读(101)  评论(1编辑  收藏  举报