四则运算

一.作业规范要求

发布一篇随笔,使用markdown语法进行编辑
文字准确,样式清晰
请在本次及之后的每次作业随笔的最前面加上以下内容
博客班级 https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18
作业要求 https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11377
作业目标 <培养编程能力和学用markdown>
学号 <3180701107>
二.题目要求

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

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

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

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

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

三.代码提交

1)提交你的源代码在你的博客上,注释好各个函数,给出相应解释,并把运行成功的界面粘贴到博客上;

2)要求逻辑清晰,界面整洁

#include<stdio.h>
#include<windows.h>
#include<time.h> 
#include<math.h>

int right=0;//答对题目数 
int wrong=0;//答错题目数

int gys(int a,int b)
{
	int i,n=a;
	if(n>b)
		n=b;
	for(i=n;i>=1;i--)
	{
		if(a%i==0&&b%i==0)
		break;
	}
	return i;
}

void zhengshujiafa() //整数加法
{
      int a,b,c;
      a=rand()%100; //随机生成数
      b=rand()%100;
      printf("请回答:\n\t\t %d + %d = ",a,b);
      scanf("%d",&c);
      if(a+b==c)
      {
            printf("回答正确!\n");
            right++;
      }
      else
      {
            printf("回答错误!\n");
            wrong++;
      }
}
void zhengshujianfa() //整数减法
{
      int a,b,c;
      a=rand()%100;
      b=rand()%100;
      printf("请回答:\n\t\t %d - %d = ",a,b);
      scanf("%d",&c);
      if(a-b==c)
      {
      printf("回答正确!\n");
      right++;
      }
      else
      {
      printf("回答错误!\n");
      wrong++;
      }
}
void zhengshuchengfa() //整数乘法
{
      int a,b,c;
      a=rand()%100;
      b=rand()%100;
      printf("请回答:\n\t\t %d * %d = ",a,b);
      scanf("%d",&c);
      if(a*b==c)
      {
      printf("回答正确!\n");
      right++;
      }
      else
      {
      printf("回答错误!\n");
      wrong++;
      }
}
void zhengshuchufa() //整数除法
{
      int a,b,c;
      a=rand()%100;
      b=rand()%100;
      printf("请回答:\n\t\t %d / %d = ",a,b);
      scanf("%d",&c);
      if(a/b==c)
      {
      printf("回答正确!\n");
      right++;
      }
      else
      {
      printf("回答错误!\n");
      wrong++;
      }
}

void zhenfenshujiafa() //真分数的加法
{
      int fm1=0, fz1=0, fm2=0, fz2=0;
      int a,b,c,d,t,i=0;

      fm1=1+rand()%10;
      fz1=0+rand()%10;

      if(fm1<fz1)
      {
          
		  t=fz1;
          fz1=fm1;
		  fm1=t;
      }

      fm2=1+rand()%10;
      fz2=0+rand()%10;

      if(fm1<fz1)
      {
          fm1=t;
          fz1=fm1;
		  t=fz1;
      }
      printf("请回答:\n\t\t %d / %d + %d / %d = ",fz1,fm1,fz2,fm2);
      scanf("%d/%d",&c,&d);
	  a=fm1*fm2;
	  b=fz1*fm2+fz2*fm1;
      i=gys(a,b);
	  a=a/i,b=b/i;
      if(a==d&&b==c)
      {
          printf("回答正确!\n");
          right++;
      }
      else
      {
          printf("回答错误!\n");
          wrong++;
      }
}

void zhenfenshujianfa() //真分数的减法
{
      int fm1=0, fz1=0, fm2=0, fz2=0;
      int a,b,c,d,t,i=0;

      fm1=1+rand()%10;
      fz1=0+rand()%10;

      if(fm1<fz1)
      {
          
		  t=fz1;
          fz1=fm1;
		  fm1=t;
      }

      fm2=1+rand()%10;
      fz2=0+rand()%10;

      if(fm1<fz1)
      {
          fm1=t;
          fz1=fm1;
		  t=fz1;
      }
      printf("请回答:\n\t\t %d / %d + %d / %d = ",fz1,fm1,fz2,fm2);
      scanf("%d/%d",&c,&d);
	  a=fm1*fm2;
	  b=fz1*fm2-fz2*fm1;
      i=gys(a,b);
	  a=a/i,b=b/i;
      if(a==d&&b==c)
      {
          printf("回答正确!\n");
          right++;
      }
      else
      {
          printf("回答错误!\n");
          wrong++;
      }
}

Void zhenfenshuchengfa() //真分数的乘法
{
      int fm1=0, fz1=0, fm2=0, fz2=0;
      int a,b,c,d,t,i=0;

      fm1=1+rand()%10;
      fz1=1+rand()%10;

      if(fm1<fz1)
      {
          
		  t=fz1;
          fz1=fm1;
		  fm1=t;
      }

      fm2=1+rand()%10;
      fz2=0+rand()%10;

      if(fm1<fz1)
      {
          fm1=t;
          fz1=fm1;
		  t=fz1;
      }
      printf("请回答:\n\t\t %d / %d * %d / %d = ",fz1,fm1,fz2,fm2);
      scanf("%d/%d",&c,&d);
	  a=fm1*fm2;
	  b=fz1*fz2;
      i=gys(a,b);
	  a=a/i,b=b/i;
      if(a==d&&b==c)
      {
          printf("回答正确!\n");
          right++;
      }
      else
      {
          printf("回答错误!\n");
          wrong++;
      }
}
void zhenfenshuchufa() //真分数的除法
{
      int fm1=0, fz1=0, fm2=0, fz2=0;
      int a,b,c,d,t,i=0;

      fm1=1+rand()%10;
      fz1=1+rand()%10;

      if(fm1<fz1)
      {
          
		  t=fz1;
          fz1=fm1;
		  fm1=t;
      }

      fm2=1+rand()%10;
      fz2=0+rand()%10;

      if(fm1<fz1)
      {
          fm1=t;
          fz1=fm1;
		  t=fz1;
      }
      printf("请回答:\n\t\t %d / %d / %d / %d = ",fz1,fm1,fz2,fm2);
      scanf("%d/%d",&c,&d);
	  a=fm1*fz2;
	  b=fz1*fm2;
      i=gys(a,b);
	  a=a/i,b=b/i;
      if(a==d&&b==c)
      {
          printf("回答正确!\n");
          right++;
      }
      else
      {
          printf("回答错误!\n");
          wrong++;
      }
}

int main(void)
{
      int choise,bot;
	  int con=0;
      srand(time(NULL)); //随机数每次循环都不一样
      printf("\n\t\t\t四则运算\n\n");
      while(1)
      {
      if(con==0)
      {
            printf("\t请选择:\n\n");
            printf("\t\t\t1.整数计算\n\n\t\t\t2.真分数计算\n");
            scanf("%d",&choise);
			system("cls");
            switch(choise)
            {
            case 1:
            printf("\t\t\t 1.加法运算\n\n");
            printf("\t\t\t 2.减法运算\n\n");
            printf("\t\t\t 3.乘法运算\n\n");
            printf("\t\t\t 4.除法运算\n\n");
            printf("\t\t\t 5.退出运算\n\n");
            scanf("%d", &bot);
			system("cls");
            switch(bot)
            {
            case 1:
            zhengshujiafa();
            break;
            case 2:
            zhengshujianfa();
            break;
            case 3:
            zhengshuchengfa();
            break;
            case 4:
            zhengshuchufa();
            break;
            case 5:
            return 0; 
            }
      break;
            case 2:
            printf("\t\t\t 1.加法运算\n\n");
            printf("\t\t\t 2.减法运算\n\n");
            printf("\t\t\t 3.乘法运算\n\n");
            printf("\t\t\t 4.除法运算\n\n");
            printf("\t\t\t 5.退出运算\n\n");
            scanf("%d", &bot);
			system("cls");
            switch(bot)
            {
            case 1:
            zhenfenshujiafa();
            break;
            case 2:
            zhenfenshujianfa();
            break;
            case 3:
            zhenfenshuchengfa();
            break;
            case 4:
            zhenfenshuchufa();
            break;
            case 5:
            return 0; 
            }
      break;
          }
      }
      if(con==1)
    {
        switch(choise)
          {
              case 1:
                  printf("\t\t\t  1.加法运算\n\n");
                  printf("\t\t\t  2.减法运算\n\n");
                  printf("\t\t\t  3.乘法运算\n\n");
                  printf("\t\t\t  4.除法运算\n\n");
                  printf("\t\t\t  5.退出运算\n\n");
                  scanf("%d", &bot);
				  system("cls");
                  switch(bot)
                  {
                      case 1:
                          zhengshujiafa();
                           break;
                      case 2:
                           zhengshujianfa();
                          break;
                      case 3:
                           zhengshuchengfa();
                           break;
                      case 4:
                           zhengshuchufa();
                           break;
                      case 5:
                           return 0;    
                }
                break;
            case 2:
                  switch(bot)
                  {
                      case 1:
                           zhenfenshujiafa();
                           break;
                      case 2:
                           zhenfenshujianfa();
                          break;
                      case 3:
                          zhenfenshuchengfa();
                           break;
                       case 4:
                           zhenfenshuchufa();
                           break;
                      case 5:
                           return 0;    
                }
                break;

          }
    }
      printf("\n\t\t\t1.继续运算?\n\n");
      printf("\n\t\t\t2.重新选择?\n\n");
      printf("\n\t\t\t3.退出运算?\n\n");
      scanf("%d",&con);
	  system("cls");
      if(con==1)
           con=1;
      else if(con==2)
           con=0;
      else if(con==3)
           break;
      else
           printf("抱歉!,你输入的指令有误!请重新输入!\n");
}
system("cls");
printf("您总共完成了 %d 道题\n\n正确 %d 道\n\n错误 %d 道\n\n",right+wrong,right,wrong);
return 0;
}




四.个人小结

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

a.理清开发的完整环节,争取在每个环节都有实际的工作,一开始边界不清楚是正常的,但请尝试按照自己的理解努力对应每个环节的实际工作

b.预估每个环节的时间,并真实统计这些环节的耗时,在完成后填写完整的psp耗时表

c.这些表格是给自己看的,请不要伪造数据

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

2)如果所有环节你都认真做了,那么,此处,你应该有许多经验愿意与大家分享。
第一次使用博客,还有许多的功能尚未熟悉,对于功能的使用也不是很熟练,代码的设计部分也仍有需要完善的地方,在下次的作业中一定会做的更好!

posted @ 2020-11-08 15:00  朱晓龙  阅读(109)  评论(0编辑  收藏  举报