个人作业-四则运算题目生成程序

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

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

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>
#define Num 10         /*Num为参数,控制生成题目的个数*/
void menu();           /*声明菜单函数*/
int add();             /*声明加法函数*/
int sub();             /*声明减法函数*/
int multi();           /*声明乘法函数*/
int divi();            /*声明除法函数*/

int main()
{
    int i,y=0;
    int op;
    srand((unsigned)time(NULL));
    menu();
    scanf("%d",&op);
    switch(op)
    {
    case 1:
        for(i=0;i<Num;i++)
        {
            if(add()==1)                         /*调用加法函数*/
            y++;
        }
        break;
    case 2:
        for(i=0;i<Num;i++)
        {
            if(sub()==1)                         /*调用减法函数*/
            y++;
        }
        break;
    case 3:
        for(i=0;i<Num;i++)
        {
            if(multi()==1)                       /*调用乘法函数*/
            y++;
        }
        break;
    case 4:
        for(i=0;i<Num;i++)
        {
            if(divi()==1)                        /*调用除法函数*/
            y++;
        }
        break;
    }
    printf("***正确率为%.0f%%***
",100.0*y/Num);   /*计算正确率,用百分比显示*/
    return 0;
}


/*菜单函数*/
void menu()
{
    printf("
----欢迎进入小学四则运算练习系统----
");
    printf("*********1.加法运算*********
");
    printf("*********2.减法运算*********
");
    printf("*********3.乘法运算*********
");
    printf("*********4.除法运算*********
");
    printf("---您计算的结果统一用分数[如:1/4+3/15=27/60]来表示(输入),注意不用化简!谢谢!---
");
    printf("请输入数字1-4来选择您要进行的四则运算:");
}


/*加法函数*/
int add()
{
    int a1,b1,a2,b2,ans1,res1,ans2,res2;
    printf("---您选择的是加法运算!---");
    printf("---请进行加法运算---
");
    /*随机生成两个要参与运算的数*/
    a1=rand()%9+1;
    b1=rand()%9+1;
    a2=rand()%9+1;
    b2=rand()%9+1;
    /*如遇假分数,下面两个if选择条件负责把假分数转化为真分数*/
    if(a1<b1)
    {
    int t;
	t=a1;
	a1=b1;
	b1=t;
     } 
     if(a2<b2)
     {
	int t;
	t=a2;
	a2=b2;
	b2=t;
      }
    res1=a1*b2+a2*b1;
    res2=a1*a2;
    printf("%d/%d+%d/%d=",b1,a1,b2,a2);
    scanf("%d/%d",&ans1,&ans2);
    if(ans1==res1&&ans2==res2)
    {
        printf("Very Good!
");
        return 1;
    }
    else
    {   printf("Wrong Answer!
");
        return 0;
    }
}
/*减法函数*/
int sub()
{
    int a1,b1,a2,b2,ans1,res1,ans2,res2;
    printf("--您选择的是减法运算!--");
    printf("--请进行减法运算--
");
    /*随机生成两个要参与运算的数*/
    a1=rand()%9+1;
    b1=rand()%9+1;
    a2=rand()%9+1;
    b2=rand()%9+1;
    /*如遇假分数,下面两个if选择条件负责把假分数转化为真分数*/
   if(a1<b1)
   {
   int t;
	t=a1;
	a1=b1;
	b1=t;
   } 
   if(a2<b2)
   {
	int t;
	t=a2;
	a2=b2;
	b2=t;
    } 
    res1=a2*b1-a1*b2;
    res2=a1*a2;
    printf("%d/%d-%d/%d=",b1,a1,b2,a2);
    scanf("%d/%d",&ans1,&ans2);
    if(ans1==res1&&ans2==res2)
    {
        printf("Very Good!
");
        return 1;
    }
    else
    {   printf("Wrong Answer!
");
        return 0;
    }
}
/*乘法函数*/
int multi()
{
    int a1,b1,a2,b2,ans1,res1,ans2,res2;
    printf("--您选择的是乘法运算!--");
    printf("--请进行乘法运算--
");
    /*随机生成两个要参与运算的数*/
    a1=rand()%9+1;
    b1=rand()%9+1;
    a2=rand()%9+1;
    b2=rand()%9+1;
    /*如遇假分数,下面两个if选择条件负责把假分数转化为真分数*/
    if(a1<b1)
    {
	int t;
	t=a1;
	a1=b1;
	b1=t;
    } 
    if(a2<b2)
    {
	int t;
	t=a2;
	a2=b2;
	b2=t;
    } 
    res1=b1*b2;
    res2=a1*a2;
    printf("%d/%d*%d/%d=",b1,a1,b2,a2);
    scanf("%d/%d",&ans1,&ans2);
    if(ans1==res1&&ans2==res2)
    {
        printf("Very Good!
");
        return 1;
    }
    else
    {   printf("Wrong Answer!
");
        return 0;
    } 
}
/*除法函数*/
int divi()
{
    int a1,b1,a2,b2,ans1,res1,ans2,res2;
    printf("--您选择的是除法运算!--");
    printf("--请进行除法运算--
");
    /*随机生成两个要参与运算的数*/
    a1=rand()%9+1;
    b1=rand()%9+1;
    a2=rand()%9+1;
    b2=rand()%9+1;
    /*如遇假分数,下面两个if选择条件负责把假分数转化为真分数*/
    if(a1<b1)
    {
	int t;
	t=a1;
	a1=b1;
	b1=t;
     } 
     if(a2<b2)
     {
   int t;
	t=a2;
	a2=b2;
	b2=t;
     } 
    res1=b1*a2;
    res2=a1*b2;
    printf("(%d/%d)/(%d/%d)=",b1,a1,b2,a2);
    scanf("%d/%d",&ans1,&ans2);
    if(ans1==res1&&ans2==res2)
   {
        printf("Very Good!
");
        return 1;
   }
    else
    {
        printf("Wrong Answer!
");
        return 0;
    } 
}

2.运行截图

四、个人小结
首先,第一次接触博客园,许多使用方法很陌生,但是通过这一次的实际操作,慢慢地学会了一些基本的操作,感觉markdown编辑器挺有趣的,希望能在平时多多练习使用它。
其次,感觉自己的算法相关能力还不足,希望以后自己多加练习。

(PSP表格)

psp2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 10 20
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 5 5
Development 开发 100 150
Analysis 需求分析(包括学习新技术) 10 15
Design Spec 生成设计文档 20 22
Design Review 设计复审 10 10
Coding Standard 代码规范 5 10
Design 具体设计 15 20
Coding 具体编码 40 42
Code Review 代码复审 3 4
Test 测试(自我测试,修改代码,提交修改) 15 20
Reporting 报告 10 17
Test Report 测试报告 4 4
Size Measurement 计算工作量 3 3
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 5 5
原文地址:https://www.cnblogs.com/666888ZWL/p/13940418.html