自动生成四则运算

一.作业规范要求
发布一篇随笔,使用markdown语法进行编辑
文字准确,样式清晰
请在本次及之后的每次作业随笔的最前面加上以下内容

博客班级 https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18
作业要求 https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11377
作业目标 <编写一个可以自动生成支持整数和真分数的四则运算题目的程序;能够精准高效完成四则运算并输出结果;迅速理解需求定制功能>
学号 <3180701121>

二.题目要求

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

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

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

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

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

三.代码提交

头文件

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int mark=0;

整数加法

void zhengadd()
{
	int a,b,c;
	a=rand()%100;
    b=rand()%100+1;
    printf("请输入你的答案:%d + %d = ",a,b);
    scanf("%d",&c);
    if(a+b==c)
      {
            printf("输入正确\n");
			mark++;
    
      }
      else
      {
            printf("输入错误\n");

      }
}

整数减法

void zhengsub()
{
	int a,b,c;
	a=rand()%100;
    b=rand()%100;
    printf("请输入你的答案:%d - %d = ",a,b);
    scanf("%d",&c);
    if(a-b==c)
      {
            printf("输入正确\n");
			mark++;
      }
      else
      {
      printf("输入错误\n");
      }
}

整数乘法

void zhengmul()
{
	int a,b,c;
	a=rand()%100;
    b=rand()%100;
    printf("请输入你的答案: %d * %d = ",a,b);
    scanf("%d",&c);
    if(a*b==c)
      {
            printf("输入正确\n");
				mark++;
    
      }
      else
      {
            printf("输入错误\n");
          
      }
}

整数除法

void zhengdiv()
{
	 int a,b,c;
     a=rand()%100;
     b=rand()%100;
     printf("请输入你的答案: %d / %d = ",a,b);
     scanf("%d",&c);
     if(a/b==c)
      {
            printf("输入正确\n");
           	mark++;
      }
      else
      {
            printf("输入错误\n");
            
      }

}

约分

int yuefen(int fenzi,int fenmu)
{
	int da=fenzi,xiao=fenmu;
	if(da<xiao)
	{
		int t=da;
		da=xiao;
		xiao=t;
	}
	while(da%xiao!=0)
	{
		da=da/xiao;
		if(da<xiao)
		{
			int t=da;
			da=xiao;
			xiao=t;		
		}
	}
	return xiao;
}

分数加法

void fenadd()
{
	int n1,n2,m1,m2,zuida,M1,M,N1,N;//
	char v;

	n1=rand()%100;
    m1=n1+rand()%100+1;
	n2=rand()%100;
	m2=n2+rand()%100+1;
	M=m1*m2;
	N=n1*m2+n2*m1;

	zuida=yuefen(N,M);
	if(zuida!=1)
	{
		N=N/zuida;
		M=M/zuida;
	}

    printf("请输入你的答案:%d/%d + %d/%d = ",n1,m1,n2,m2);
    scanf("%d%c%d",&N1,&v,&M1);
    if(N==N1&&M==M1)
      {
            printf("输入正确\n");
            	mark++;
      }
      else
      {
            printf("输入错误\n");
		
      }
}

分数减法

void fensub()
{
	int n1,n2,m1,m2,zuida,M1,M,N1,N;//
	char v;
	n1=rand()%100;
    m1=n1+rand()%100+1;
	n2=rand()%100;
	m2=n2+rand()%100+1;
	M=m1*m2;
	N=n1*m2-n2*m1;

	
	zuida=yuefen(N,M);
	if(zuida!=1)
	{
		N=N/zuida;
		M=M/zuida;
	}

    printf("请输入你的答案:%d/%d - %d/%d = ",n1,m1,n2,m2);
    scanf("%d%c%d",&N1,&v,&M1);
    if(N==N1&&M==M1)
      {
            printf("输入正确\n");
        	mark++;
      }
      else
      {
            printf("输入错误\n");
			
      }
}

分数乘法

void fenmul()
{
	int n1,n2,m1,m2,zuida,M1,M,N1,N;//
	char v;

	n1=rand()%100;
    m1=n1+rand()%100+1;
	n2=rand()%100;
	m2=n2+rand()%100+1;
	M=m1*m2;
	N=n1*n2;

	zuida=yuefen(N,M);
	if(zuida!=1)
	{
		N=N/zuida;
		M=M/zuida;
	}

    printf("请输入你的答案:%d/%d * %d/%d = ",n1,m1,n2,m2);
    scanf("%d%c%d",&N1,&v,&M1);
    if(N==N1&&M==M1)
      {
            printf("输入正确\n");
          	mark++;
      }
      else
      {
            printf("输入错误\n");
		
      }
}

分数除法

void fendiv()
{
	int n1,n2,m1,m2,zuida,M1,M,N1,N;//
	char v;//用来表示分数中的"/"

	n1=rand()%100;
    m1=n1+rand()%100+1;
	n2=rand()%100;
	m2=n2+rand()%100+1;
	M=m1*n2;
	N=n1*m2;

	zuida=yuefen(N,M);
	if(zuida!=1)
	{
		N=N/zuida;
		M=M/zuida;
	}
    printf("请输入你的答案:%d/%d / %d/%d = ",n1,m1,n2,m2);
    scanf("%d%c%d",&N1,&v,&M1);
    if(N==N1&&M==M1)
      {
            printf("输入正确\n");
        	mark++;
      }
      else
      {
            printf("输入错误\n");
		
      }
}

整数选择

int zhengcount()
{
	int c1;

	printf("选择你测试的运算:加:1 减:2 乘:3 除:4\n");
	scanf("%d",&c1);
	switch(c1)
	{
	case 1:
		zhengadd();
		break;
	case 2:
		zhengsub();
		break;
	case 3:
		zhengmul();
		break;
	case 4:
		zhengdiv();
		break;
	default:
		printf("输入错误!");
		break;
	
	}
	return 0;
}

分数选择

int fencount()
{
	int c2;
	printf("选择你测试的运算:加:1 减:2 乘:3 除:4\n");
	scanf("%d",&c2);
	switch(c2)
	{
	case 1:
		fenadd();
		break;
	case 2:
		fensub();
		break;
	case 3:
		fenmul();
		break;
	case 4:
		fendiv();
		break;
	default:
		printf("输入错误!");
		break;
	}	
	return 0;
}

主函数

void main()
{
	int c,s=1,sum,i=0;
	printf("-----------四则运算--------------\n");
	printf("请生成题数:");
	scanf("%d",&sum);
	while(s)
	{
		if(s==1)
		{
			if(i==sum)
			{
				printf("\n答题结束!\n");
				break;
			}
			printf("\n整数运算还是真分数运算?\n整数运算1   真分数运算2  退出3  \n");
			printf("请输入: ");
			scanf("%d",&c);
			if(c==3)
			{
				s=0;
				break;
			}
			switch(c)
			{
			case 1:
				zhengcount();
				i++;
				break;
			case 2:
				fencount();
				i++;
				break;
			default:
				printf("错误输入项!");
				s=0;
				break;
			}
		}
		if(s==0)
			break;
	}
	printf("分数为%d",mark);
}

四.个人小结

1)在软件开发中,掌握时间是一个很重要的技能,请通过psp表格做到:

2)此次的博客园注册与作业的完成,都让我对于代码学习有了新的认识,通过博客园可以更好地总结自己所学习到的知识,四则运算的编写也是最为基础的算法,但是在写的时候,仍然会出现大量的问题,这些问题有大有小,都是值得自己关注的,比如对于整数进行约分,并且区分分数和整数的计算函数,自己还是要不断地来编写代码来提升自己的编程能力。

posted @ 2020-11-08 17:48  Alex-Mercer-zxy  阅读(107)  评论(0编辑  收藏  举报