• 个人作业1:小学四则运算——基于控制台


    源代码地址:http://git.oschina.net/junge212/25eubiqm170p3nzgj4yrh36.code.git

    a.需求分析:

      自动生成小学四则运算题目的命令行 “软件”,满足以下需求:   

      1. 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
      2. 运算符为 +, −, ×, ÷
      3. 并且要求能处理用户的输入,并判断对错,打分统计正确率。
      4. 要求能处理用户输入的真分数, 如 1/2, 5/12 等
      5. 使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
        Myapp.exe -n 10

    b.功能设计:

      能随机生成整数0~10的四则运算和真分数的四则运算,并统计正确率

    c.设计实现:

      本程序分为主函数和三个分函数,主函数main()主要实现随机调用两个分函数zhengshu()和fenshu()并统计正确率,三个分函数分别为处理0~10的整数四则运算和处理真分数的分数四则运算函数;整数函数zhengshu()主要随机产生两个随机数和随机运算符并计算;分数函数fenshu()主要随机产生两个随机数和随机运算符并调用第三个分函数gcd()进行计算。

    d.代码说明:

    具体代码:

    #include "stdio.h"
    #include "stdlib.h"
    #include "time.h"
    #include "string.h"
    int score=0;
    int gcd(int x,int y) //求最大公约数函数	
    {
    	int r;
    	r=x%y;
       	while(r!=0)
       	{
       		x=y;
       		y=r;
       		r=x%y;
       	}
       	return y;
    } 
    int zhengshu(){//求整数的四则运算 
    	int left,mid,right,result,int_number;
    	srand((unsigned)time(NULL));
    	left=rand()%10;
    	mid=rand()%4;
    	right=rand()%10;
    	printf("%d",left);
    	switch(mid)
    	{
    		case(0):result=left+right;
    		printf(" + ");break;
    		case(1):result=left-right;	
    		printf(" - ");break;
    		case(2):result=left*right;
    		printf(" ×");break;
    		case(3):result=left/right;
    		printf(" ÷");break;
    	}
    	printf("%d =",right);
    	scanf("%d",&int_number);
    	if(int_number == result)
    		{
    			printf("回答正确!    下一题:
    ");
    			score=score+1;	
    		}
    	else{
    			printf("回答错误!    下一题:
    ");
    		}
    }
    
    int fenshu(){//求分数的四则运算 
    	int left_x,left_y,mid,right_x,right_y,x,y,GYS,int_number1,int_number2;
    	srand((unsigned)time(NULL));
    	do{
    	left_x=rand()%10+1;
    	left_y=rand()%10+1;
    	mid=rand()%4;
    	right_x=rand()%10+1;
    	right_y=rand()%10+1;
    	}while(!(left_x<left_y&&right_x<right_y));
    	printf("%d/%d",left_x,left_y);
    		switch(mid)
    		{
    			case(0):x=left_x*right_y+left_y*right_x;
    					y=left_y*right_y;
    			printf(" + ");break;
    			case(1):x=left_x*right_y-left_y*right_x;
    					y=left_y*right_y;	
    			printf(" - ");break;
    			case(2):x=left_x*right_x;
    					y=left_y*right_y;
    			printf(" ×");break;
    			case(3):x=left_x*right_y;
    					y=left_y*right_x;
    			printf(" ÷");break;
    		}
    		printf("%d/%d =",right_x,right_y);
    	GYS=gcd(x,y);
    	x=x/GYS;
    	y=y/GYS;
    	scanf("%d/%d",&int_number1,&int_number2);
    	if(int_number1==x&&int_number2==y)
    	{
    		printf("回答正确!    下一题:
    ");
    		score=score+1;	
    	}
    	else{
    		printf("回答错误!    下一题:
    ");
    	}
    }
    int main(){//主函数——随机调用整数函数和分数函数 
    	int h,count;
    	printf("请输入题目数?");
    	scanf("%d",&count);
    	for(int i=0;i<count;i++)
    	{
    		h=rand()%2;
    		if(h==0)
    		{zhengshu();}
    		else
    		{fenshu();}
    	}
    	printf("正确率为:%lf",score*1.0/count);
    }
    

    实验截图:

    psp:

    PSP2.1 Personal Software Process Stages Time (m) Senior Student Time (m)
    Planning 计划 8 10
    · Estimate 估计这个任务需要多少时间 8 10
    Development 开发 82 100
    · Analysis 需求分析 (包括学习新技术) 6 6
    · Design Spec 生成设计文档 5 7
    · Design Review 设计复审 4 6
    · Coding Standard 代码规范 3 2
    · Design 具体设计 10 20
    · Coding 具体编码 36 20
    · Code Review 代码复审 7 7
    · Test 测试(自我测试,修改代码,提交修改) 13 30
    Reporting 报告 9 5
    · 测试报告 3 3
    · 计算工作量 2 2
    · 并提出过程改进计划 3 1

    e.小结

    这次实验真是历经千辛万苦:(不过也总算基本成功了,感谢编写代码时多位同学的耐心指导;该程序还是有缺陷,没能实现显示正确答案,程序存在异常错误,可能存在程序崩溃:)

  • 相关阅读:
    vs2019 临时下载目录 离线安装 脱机安装
    直膝跳缓解腰椎间盘突出 腰疼 臀部肌肉疼痛
    fullscreen
    ubuntu 18.04 网络图标不见的问题解决方案
    采样率与比特率
    关于git的换行符问题
    在ASP.NET Core中使用EPPlus导入出Excel文件
    .net core 转 excel datatable list<t> 互转 xlsx
    .net core C# DataTable 和List之间相互转换的方法
    C# 的三种序列化方法
  • 原文地址:https://www.cnblogs.com/212junge/p/6515903.html
Copyright © 2020-2023  润新知