一、作业信息

作业班级 https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18
作业要求 https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11377
作业目标 能对需求进行分析并实现;编码格式规范;学习博客撰写
学号 3180701337

二、作业要求

写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:
1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24
2)程序要求能处理用户的输入,判断对错,累积分数
3)程序支持可以由用户自行选择加、减、乘、除运算
4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目

三、代码提交与运行截图

1.源代码

include<stdio.h>

include<stdlib.h>

include<time.h>

include<string.h>

include<math.h>

void getZquestion();
void getFquestion();
char operators();
int ZResult(int,int,char);
int FZResult(int,int,int,int,char);
int FMResult(int,int,int,int,char);

(一)、主函数

void main()
{
    int key;
    printf("请选择需要进行四则运算的类型\n");
    printf("********1.整数************\n");
    printf("********2.真分数**********\n");
    printf("请输入数字进行选择:");
    scanf("%d", &key);
    switch(key)
	{
	case 1:
		{
			int i;
			printf("请输入题目的个数:");
			scanf("%d", &i);
			for (int j = 0; j < i; j++)
			{
				getZquestion();
			}
		}
	case 2:
		{
			int i;
			printf("请输入题目的个数:");
			scanf("%d", &i);
			for (int j = 0; j < i; j++)
			{
				getFquestion();
			}
		}
	}
}

(二)、整数类型题目生成与解答

void getZquestion()
{	
    int n1,n2;
    char symbol;
    int answer;
    srand((unsigned)time(NULL));    //用时间做种子生成随机数
    symbol=operators();
    n1=rand()%101;
    n2=rand()%101+1;             //使n2不为0;防止在除法运算中无意义
    if(symbol=='-')
    {
        if(n1<n2)             //判断两个数的大小,使n1为较大的数,方便在运算符号为减号时使结果有意义
        {
            int temp;
            temp=n1;
            n1=n2;
            n2=temp;
        }
    }
    printf("%d%c%d=",n1,symbol,n2);
    scanf("%d",&answer);
    if(ZResult(n1,n2,symbol)==answer)    //判断使用者的答案是否正确
    {
	printf("Right\n");
    }
    else 
    {
        printf("Wrong\n");
        printf("正确答案:%d\n",ZResult(n1,n2,symbol));
    }
}

(三)、获取运算随机符

char operators()
{
    char symbol[4]={'+','-','*','/'};
    srand((unsigned)time(NULL));
    return symbol[rand()%4];           //根据时间来获得随机数从而进一步随机获得运算的符号
}

(四)、整数型运算结果判断

int ZResult(int n1,int n2,char symbol)
{
    int r;
    switch(symbol)
    {
    case '+':
        r=n1+n2;break;
    case '-':
        r=n1-n2;break;
    case '*':
        r=n1*n2;break;
    case '/':
        r=n1/n2;break;
    default:
        r=0;
        printf("运算符不符合规则\n");
    }
    return r;          //结果验证
}

(五)、分数类型题目生成与解答

void getFquestion()
{	
    int n1,n2,n3,n4,a1,a2;     //n1,n3分别为两个数的分子,n2,n4分别为两个数的分母
    char symbol;
    srand((unsigned)time(NULL));
    symbol=operators();
    n1=rand()%101;
    n2=rand()%101+1;
    n3=rand()%101;
    n4=rand()%101+1;        //使n2,n4两个分母不为0
	if(n1>n2)
	{
	int temp;
        temp=n1;
        n1=n2;
        n2=temp;
	}
	if(n3>n4)            //将n1,n2和n3,n4中较小的数作为分子,使分数为真分数
	{
	int temp;
        temp=n3;
        n3=n4;
        n4=temp;
	}
    printf("(%d/%d)%c(%d/%d)=",n1,n2,symbol,n3,n4);
    printf("分别输入答案的分子和分母:");
    scanf("%d,%d",&a1,&a2);
    if((FZResult(n1,n2,n3,n4,symbol)==a1)&&(FMResult(n1,n2,n3,n4,symbol)==a2))        //判断分子和分母是否都对,若都对,则表示结果正确
    {
	printf("Right\n");
    }
    else
    {
        printf("Wrong\n");
        printf("正确答案:%d/%d\n",FZResult(n1,n2,n3,n4,symbol),FMResult(n1,n2,n3,n4,symbol));    //错误时输出正确答案
    }
}

(六)、得到分数类型题目结果的分子

int FZResult(int n1,int n2,int n3,int n4,char symbol)   //该函数用以得到正确答案的分子
{
    int Z,g;   //Z表示分子
    switch(symbol)
    switch(symbol)
    {
    case '+':
	   Z=n1*n4+n3*n2;
	   break;
    case '-':
	   Z=n1*n4-n3*n2;
	   break;
    case '*':
       Z=n1*n3;break;
    case '/':
       Z=n1*n4;break;
    }
    return Z;
}

(七)、得到分数类型题目结果的分母

int FMResult(int n1,int n2,int n3,int n4,char symbol)   //该函数用以得到正确答案的分母
{
    int M,g;   //M表示分母
      switch(symbol)
    {
    case '+':
	   M=n2*n4;
	   break;
    case '-':
	   M=n2*n4;
	   break;
    case '*':
       M=n2*n4;break;
    case '/':
       M=n2*n3;break;
    }
    return M;
}

2.运行截图

四、个人小结

本次在博客园进行作业的完成使我学到了很多,因为是第一次使用在使用过程中也遇到了许多问题,好在大都已经解决。对于本次的作业,虽然四则运算是最基础的算法问题之一,但我在撰写代码的过程中仍遇到了许多问题,例如没有考虑很多特殊的情况,也让我明白需要多加练习与学习来提高自己的水平。

(PSP)

psp2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 10 12
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 8 10
Development 开发 250 280
Analysis 需求分析(包括学习新技术) 5 8
Design Spec 生成设计文档 5 5
Design Review 设计复审 5 5
Coding Standard 代码规范 5 3
Design 具体设计 12 15
Coding 具体编码 20 25
Code Review 代码复审 20 12
Test 测试(自我测试,修改代码,提交修改) 15 24
Reporting 报告 9 10
Test Report 测试报告 3 3
Size Measurement 计算工作量 2 2
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 5 3
posted on 2020-11-09 01:33  outlier7  阅读(118)  评论(0编辑  收藏  举报