个人作业1——四则运算题目生成程序(基于C++)
题目描述:
从《构建之法》第一章的 “程序” 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 “软件”,满足以下需求:
1.除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
2.运算符为 +, −, ×, ÷
3.并且要求能处理用户的输入,并判断对错,打分统计正确率。
4.要求能处理用户输入的真分数, 如 1/2, 5/12 等
5.使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目 Myapp.exe -n 10
需求分析:
1.能够自动生成四则运算;
2.随机生成分数运算或整数运算;
3.用户自定义题目生成的数量;
4.用户可以输入答案;
5.程序判断对错并给出正确答案;
6.答完题后给出正确率。
Coding代码地址
https://coding.net/u/wumingxiang/p/ming_2017/git/blob/master/test1.cpp
程序设计:
本程序由C++语言编写,主要有四个函数,定义了一个 integer() 函数来生成整数的四则运算,定义了一个 fraction() 函数来生成分数的四则运算,由于分数需要化简,定义了 divisor (int a,int b) 函数通过辗转相除法求分子和分母的最大公约数,定义了 CheckResult(char result[]) 函数来判断输入的答案是否正确。
为了计算回答的正确率,定义全局变量 ri 来计算回答正确的题数。
#include<iostream>
#include<stdlib.h>
#include<time.h>
#include <string.h>
using namespace std;
int ri = 0;
int divisor (int a,int b)
{
int temp;
if(a<b)
{
temp=a;
a=b;
b=temp;
}
while(b!=0)
{
temp=a%b;
a=b;
b=temp;
}
return a;
}
int CheckResult(char result[])
{
char answer[10] ;
cin>>answer;
if(strcmp(answer,result)==0)
{
cout<<"回答正确"<<endl<<endl;
ri++;
}
else
{
cout<<"回答错误,正确答案为"<<result<<endl<<endl;
}
}
void integer()
{
int x,y,z,temp;
char result[10];
srand(time(NULL));
x = rand() % 10;
y = rand() % 10+1;
z = rand()%4;
switch(z)
{
case 0 :
cout<<x<<" + "<<y<<"=";
temp = x + y;
sprintf(result, "%d", temp);
break;
case 1 :
if(x<y)
{
temp=x;
x=y;
y=temp;
}
cout<<x<<" - "<<y<<"=";
temp = x - y;
sprintf(result, "%d", temp);
break;
case 2 :
cout<<x<<" * "<<y<<"=";
temp = x * y;
sprintf(result, "%d", temp);
break;
case 3 :
cout<<x<<" ÷"<<y<<"=";
if(x%y==0)
{
temp = x / y;
sprintf(result, "%d", temp);
}
else
{
temp = divisor(x,y);
x = x/temp;
y = y/temp;
sprintf(result, "%d/%d", x, y);
}
break;
}
CheckResult(result) ;
}
void fraction()
{
int a,b,c,d,x,y,z,temp;
char result[10];
srand(time(NULL));
a = rand() % 10;
b = rand() % 10+1;
c = rand() % 10;
d = rand() % 10+1;
z = rand() % 4;
if(a>b)
{
temp=a;
a=b;
b=temp;
}
if(c>d)
{
temp=c;
c=d;
d=temp;
}
switch(z)
{
case 0 :
cout<<a<<"/"<<b<<" + "<<c<<"/"<<d<<"=";
x = a*d+b*c;
y = b*d;
temp = divisor(x,y);
x = x/temp;
y = y/temp;
if(y==1)
{
sprintf(result, "%d", x);
}
else
{
sprintf(result, "%d/%d", x, y);
}
break;
case 1 :
if(a*d<b*c)
{
temp = a;
a = c;
c = temp;
temp = b;
b = d;
d = temp;
}
cout<<a<<"/"<<b<<" - "<<c<<"/"<<d<<"=";
x = a*d-b*c;
y = b*d;
temp = divisor(x,y);
x = x/temp;
y = y/temp;
sprintf(result, "%d/%d", x, y);
break;
case 2 :
cout<<a<<"/"<<b<<" * "<<c<<"/"<<d<<"=";
if(a==0||c==0)
{
temp = 0;
sprintf(result, "%d", temp);
}
else
{
x = a*c;
y = b*d;
temp = divisor(x,y);
x = x/temp;
y = y/temp;
sprintf(result, "%d/%d", x, y);
}
break;
case 3 :
cout<<a<<"/"<<b<<" ÷"<<c<<"/"<<d<<"=";
if((a*d)%(b*c)==0)
{
x = a*d;
y = b*c;
temp = x / y;
sprintf(result, "%d", temp);
}
else
{
x = a*d;
y = b*c;
temp = divisor(x,y);
x = x/temp;
y = y/temp;
if(y==1)
{
sprintf(result, "%d", x);
}
else
{
sprintf(result, "%d/%d", x, y);
}
}
break;
}
CheckResult(result);
}
int main()
{
int n,q;
cout<<"输入要生成的题数:";
cin>>n;
for(int i=0;i<n;i++)
{
int a = rand()%2;
switch(a)
{
case 0: integer();break;
case 1: fraction();break;
}
}
q=(ri*100)/n;
cout<<"回答对了"<<ri<<"题"<<endl;
cout<<"正确率为:"<<q<<"%"<<endl<<endl;
}
测试:

PSP:

小结:
这次实验花了我较多的时间,通过这次实验,我也认识到自己对编程语言的掌握不够熟悉,在实验中我学会了许多技巧,比如说,我们在拿到实验题目的时候不能直接埋头写代码,而是应该先做一下需求分析,理清一下自己所需要实现的功能,我们应该先在脑海中有一个清晰的思路,写的代码才能够简洁明了。
在完成实验的时候,遇到了一些语法不太熟悉的问题,我也上网查了一下资料,像sprintf()这个函数,以前没学过,但我知道自己所需要的功能,所以上网就查到了这个函数。其实我这次写的代码其实还存在一些代码重复写的问题,有些代码其实可以提取出来封装成一个函数,但因为怕超过实验的截止日期,没有实现,下次我会改进的。
个人作业1——四则运算题目生成程序(基于C++)的更多相关文章
- 个人作业1——四则运算题目生成程序(java代码,基于控制台)
一.题目描述: 从<构建之法>第一章的 "程序" 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 "软件",满足以下需求: ...
- 个人作业1——四则运算题目生成程序(基于java)
项目代码: https://git.coding.net/YJh_/11.git 题目要求: 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:/ + / = / 运算符为 +, −, ×, ...
- 【2015 软件工程 个人项目 PJ1】四则运算题目生成程序
1.开发时间预估 PSP2.1 Personal Software Process Stages Time Planning 计划 · Estimate · 估计这个任务需要多少时间 2day Dev ...
- 高级软件工程2017第3次作业——结对项目:四则运算题目生成程序(基于GUI)
Deadline:2017-10-11(周三)21:00pm (注:以下内容参考集大作业 ) 前言 想过和别人一起探索世界吗?多么希望,遇到困难时,有人能一起探讨:想要懈怠时,有人推你一把:当你专注于 ...
- 四则运算题目生成程序(基于控制台)(Bug修改)
针对上个程序中出现的bug进行修改 https://git.coding.net/cx873230936/calculator.git Bug: 1.控制台输入问题数问题 a.不能处理用户输入负数. ...
- 1st 四则运算题目生成程序
程序代码见此 程序展示 需求分析 需要程序能根据用户指定生成四则运算的题目,并且能让用户做题,并且最后打分统计正确率 功能设计 主要实现的功能就是: 接受用户输入以便知道要出多少道题目(-n x) 能 ...
- 四则运算题目生成(python版)
四则运算题目生成-基于控制台 项目托管在码云:飞机票 需求分析 根据控制台提示信息,输入题目生成相关配置参数 题目生成数量 数字范围 式子中是否有分数 .... 程序支持 10000 题目生成 题目与 ...
- 作业二:个人编程项目——编写一个能自动生成小学四则运算题目的程序
1. 编写一个能自动生成小学四则运算题目的程序.(10分) 基本要求: 除了整数以外,还能支持真分数的四则运算. 对实现的功能进行描述,并且对实现结果要求截图. 本题发一篇随笔,内容包括: 题 ...
- 软工作业NO.2小学生线上杨永信——四则运算题目生成
项目题目:实现一个自动生成小学四则运算题目的命令行程序 github地址:https://github.com/a249970271/Formula 驾驶员:梁沛诗 副驾驶:曾祎祺 项目说明 自然数: ...
随机推荐
- 安徽省2016“京胜杯”程序设计大赛_H_单身晚会
单身晚会 Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 53 Accepted: 16 Description ZJ和Z ...
- WebServices客户端代码生成
方式一: 官网下载cxf运行包:http://cxf.apache.org/download.html axis2:http://axis.apache.org/axis2/java/core/dow ...
- python学习===将py文件从打包成exe程序
1.进入要打包的py程序所在文件夹,例如hello.py程序要打包. 2.在同一目录下新建文件setup.py,内容如下: from distutils.core import setup impor ...
- HDU 4372 Count the Buildings:第一类Stirling数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4372 题意: 有n栋高楼横着排成一排,各自的高度为1到n的一个排列. 从左边看可以看到f栋楼,从右边看 ...
- selenium 使用随笔
今天闲来无事,有朋友问到,如何使用selenium.于是便便写了个简单的脚本,用于讲解其基础用法. selenium常用作web自动化测试.通过跟python或其他语言的结合,可以驱动浏览器,并在浏览 ...
- eclipse的xml文件提示templates的模板.md
eclipse的xml文件提示templates的模板 <?xml version="1.0" encoding="UTF-8" standalone=& ...
- 我了解到的JavaScript异步编程
一. 一道面试题 前段时间面试,考察比较多的是js异步编程方面的相关知识点,如今,正好轮到自己分享技术,所以想把js异步编程学习下,做个总结. 下面这个demo 概括了大多数面试过程中遇到的问题: f ...
- JSON以及Java转换JSON的方法(前后端常用处理方法)
)); map.put("arr", new String[] { "a", "b" }); map.put("func" ...
- Netty SSL安全配置
Netty SSL安全配置 [TOC] 摘要 在研发蜂鸟部署平台的过程中,涉及到平台网关和前置agent的通信加密,虽然目前软件在内网中,但是由于蜂鸟平台和agent的特殊性,一旦被控制,部署的软件就 ...
- 【Linux init】systemd 服务单元管理
系统服务管理systemd Control the systemd system and service manager 控制systemd系统和服务管理,并行启动服务时充分发挥了多核处理器的性能, ...