博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单元测试
阅读量:7112 次
发布时间:2019-06-28

本文共 6785 字,大约阅读时间需要 22 分钟。

设计思想:

.在结构方面,将题目拆分开来,一共有四个部分,首先是只有加减法,其次是既有加减法也有乘除法,再其次是加减乘除都有,还有括号,最后是加减乘除没有括号。

程序代码:

#include "stdafx.h"#include "iostream.h"#include "stdlib.h"#include "time.h"#include "Caculation.h"#include "iomanip.h"//*****判断回答是否正确*****bool RightOrWrong(Caculation &Q,int answer){    if(Q.sign==0)    {        Q.answer=Q.num1+Q.num2;    }    else if(Q.sign==1)    {        Q.answer=Q.num1-Q.num2;    }    else if(Q.sign==2)    {        Q.answer=Q.num1*Q.num2;    }    else        Q.answer=Q.num1/Q.num2;    if(answer==Q.answer)        return true;    else        return false;}//******重新生成算术题******void ReBuild(Caculation &Q){    if(para[4]==1)        Q.sign=rand()%4;    else        Q.sign=rand()%2;    Q.num1=rand()%(para[6]-para[5]+1)+para[5];    Q.num2=rand()%(para[6]-para[5]+1)+para[5];}//*****输出函数*****void Display1(LinkC C,Caculation &Q){    int temp,count=0;                                    //count记录重新生成题目的次数    for(int i=1;i<=para[1];i++)    {        cout<<"("<<<")";        if(para[4]==1)            Q.sign=rand()%4;                            //有乘除法        else            Q.sign=rand()%2;                            //没有乘除法        Q.num1=rand()%(para[6]-para[5]+1)+para[5];        //随机的(下限~上限)以内的整数        Q.num2=rand()%(para[6]-para[5]+1)+para[5];RB:        ReBuild(Q);                                        //检查是否有出过的题目        if(count>((para[6]-para[5]+1)*(para[6]-para[5]+1)*100))        {            cout<
<<"该难度的题目已出完,请更改出题设置!"<
((para[6]-para[5]+1)*(para[6]-para[5]+1)*100)) { cout<
<<"该难度的题目已出完,请更改出题设置!"<
>move1; while(move1<'0'||move1>'2') { cout<<"错误!请正确输入操作序号(0~2):"; cin>>move1; } switch(move1) { case '0':reset2: cout<<"新的打印列数(建议7列以内):"; cin>>para[2]; if(para[2]<0) { cout<<"出错!请重新输入!"<
>para[3]; if(para[3]<0) { cout<<"出错!请重新输入!"<
>para[i]; //此处输入字符出错,但没解决 }while(para[i]!=0&¶[i]!=1);}//*****设置题目难度*****void SetLevel(){ system("cls"); char move2; cout<<"\t/*************设置题目难度*************/"<
>move2; while(move2<'0'||move2>'4') { cout<<"错误!请正确输入操作序号(0~4):"; cin>>move2; } switch(move2) { case '0':Reset(4);break; case '1': //此处若输入字符,则出错reset1: cout<<"新的数值下限:"; //但没找到解决方法 cin>>para[5]; cout<<"新的数值上限:"; cin>>para[6]; if(para[5]>=para[6]) { cout<<"出错!请重新输入数值范围!"<
>move; while(move<'0'||move>'6') { cout<<"错误!请正确输入操作序号(0~6):"; cin>>move; } switch(move) { case '0':Display1(C,Q);break; case '1':reset4: cout<<"请设置出题数量(建议100道以内):"; cin>>para[1]; if(para[1]<=0) { cout<<"出错!请重新输入!"<
>save; while(save!='1'&&save!='0') { cout<<"出错!请正确输入(是1/否0):"; cin>>save; } if(save=='1') WriteQues(C); cout<<"感谢您的使用,再见!"<
next=NULL;}//******添加题目信息******void InsertQues(LinkC &C,Caculation Q){ //尾插入 LinkC tail,temp; tail=C; while(tail&&tail->next!=NULL) tail=tail->next; temp=new CNode; temp->ques=Q; temp->next=NULL; tail->next=temp; tail=temp; para[9]++;}//******判断题目存在******int ExistQues(LinkC C,Caculation Q){ LinkC temp; temp=C->next; while(temp) { if((temp->ques.num1==Q.num1)&&(temp->ques.num2==Q.num2)&&(temp->ques.sign==Q.sign)) return 1; //当两个数字和算符与链表中的一样,则存在 else temp=temp->next; } return 0;}//******读取出过的问题******void ReadQues(LinkC &C){ LinkC temp; ifstream infile("question.txt"); for(int i=0;i<10;i++) //读取参数表 infile>>para[i]; for(i=0;i
>temp->ques.num1; infile>>temp->ques.num2; infile>>temp->ques.sign; temp->next=NULL; }}//******写入文件******void WriteQues(LinkC C){ LinkC temp; ofstream outfile("question.txt"); if(!outfile) { cout<<"文件存储失败!"<
next;temp;temp=temp->next) { outfile<
ques.num1<<" "; outfile<
ques.num2<<" "; outfile<
ques.sign<<" "; }二、截图#include "stdafx.h"#include "iostream.h"#include "stdlib.h"#include "time.h"#include "Caculation.h"#include "iomanip.h"//*****判断回答是否正确*****bool RightOrWrong(Caculation &Q,int answer){ if(Q.sign==0) { Q.answer=Q.num1+Q.num2; } else if(Q.sign==1) { Q.answer=Q.num1-Q.num2; } else if(Q.sign==2) { Q.answer=Q.num1*Q.num2; } else Q.answer=Q.num1/Q.num2; if(answer==Q.answer) return true; else return false;}//******重新生成算术题******void ReBuild(Caculation &Q){ if(para[4]==1) Q.sign=rand()%4; else Q.sign=rand()%2; Q.num1=rand()%(para[6]-para[5]+1)+para[5]; Q.num2=rand()%(para[6]-para[5]+1)+para[5];}//*****输出函数*****void Display1(LinkC C,Caculation &Q){ int temp,count=0; //count记录重新生成题目的次数 for(int i=1;i<=para[1];i++) { cout<<"("<
<<")"; if(para[4]==1) Q.sign=rand()%4; //有乘除法 else Q.sign=rand()%2; //没有乘除法 Q.num1=rand()%(para[6]-para[5]+1)+para[5]; //随机的(下限~上限)以内的整数 Q.num2=rand()%(para[6]-para[5]+1)+para[5];RB: ReBuild(Q); //检查是否有出过的题目 if(count>((para[6]-para[5]+1)*(para[6]-para[5]+1)*100)) { cout<
<<"该难度的题目已出完,请更改出题设置!"<
((para[6]-para[5]+1)*(para[6]-para[5]+1)*100)) { cout<
<<"该难度的题目已出完,请更改出题设置!"<
>move1; while(move1<'0'||move1>'2') { cout<<"错误!请正确输入操作序号(0~2):"; cin>>move1; } switch(move1) { case '0':reset2: cout<<"新的打印列数(建议7列以内):"; cin>>para[2]; if(para[2]<0) { cout<<"出错!请重新输入!"<
>para[3]; if(para[3]<0) { cout<<"出错!请重新输入!"<
>para[i]; //此处输入字符出错,但没解决 }while(para[i]!=0&¶[i]!=1);}//*****设置题目难度*****void SetLevel(){ system("cls"); char move2; cout<<"\t/*************设置题目难度*************/"<
>move2; while(move2<'0'||move2>'4') { cout<<"错误!请正确输入操作序号(0~4):"; cin>>move2; } switch(move2) { case '0':Reset(4);break; case '1': //此处若输入字符,则出错reset1: cout<<"新的数值下限:"; //但没找到解决方法 cin>>para[5]; cout<<"新的数值上限:"; cin>>para[6]; if(para[5]>=para[6]) { cout<<"出错!请重新输入数值范围!"<
>move; while(move<'0'||move>'6') { cout<<"错误!请正确输入操作序号(0~6):"; cin>>move; } switch(move) { case '0':Display1(C,Q);break; case '1':reset4: cout<<"请设置出题数量(建议100道以内):"; cin>>para[1]; if(para[1]<=0) { cout<<"出错!请重新输入!"<
>save; while(save!='1'&&save!='0') { cout<<"出错!请正确输入(是1/否0):"; cin>>save; } if(save=='1') WriteQues(C); cout<<"感谢您的使用,再见!"<
next=NULL;}//******添加题目信息******void InsertQues(LinkC &C,Caculation Q){ //尾插入 LinkC tail,temp; tail=C; while(tail&&tail->next!=NULL) tail=tail->next; temp=new CNode; temp->ques=Q; temp->next=NULL; tail->next=temp; tail=temp; para[9]++;}//******判断题目存在******int ExistQues(LinkC C,Caculation Q){ LinkC temp; temp=C->next; while(temp) { if((temp->ques.num1==Q.num1)&&(temp->ques.num2==Q.num2)&&(temp->ques.sign==Q.sign)) return 1; //当两个数字和算符与链表中的一样,则存在 else temp=temp->next; } return 0;}//******读取出过的问题******void ReadQues(LinkC &C){ LinkC temp; ifstream infile("question.txt"); for(int i=0;i<10;i++) //读取参数表 infile>>para[i]; for(i=0;i
>temp->ques.num1; infile>>temp->ques.num2; infile>>temp->ques.sign; temp->next=NULL; }}//******写入文件******void WriteQues(LinkC C){ LinkC temp; ofstream outfile("question.txt"); if(!outfile) { cout<<"文件存储失败!"<
next;temp;temp=temp->next) { outfile<
ques.num1<<" "; outfile<
ques.num2<<" "; outfile<
ques.sign<<" "; }

 

转载于:https://www.cnblogs.com/dgj1314/p/5612344.html

你可能感兴趣的文章
python 网络编程
查看>>
aspx 页面数据绑定 前台数据绑定
查看>>
《推荐系统实践》样章:如何利用用户标签数据
查看>>
U-Boot Makefile文件分析
查看>>
Puppetmaster高可用和可扩展的方案设计
查看>>
[2013EJDE]Osgood type regularity criterion for the $3$D Newton-Boussinesq equations
查看>>
黄疸案
查看>>
[转载]ASP.NET伪静态页面的实现和伪静态在IIS7.0中的配置
查看>>
【转】Android源代码编译命令m/mm/mmm/make分析--不错
查看>>
C语言中不定参数函数的使用
查看>>
Ubuntu - No space left on device Is it a lie or have I run out of inodes
查看>>
解决Agent admitted failure to sign using the kye with ssh
查看>>
Linux Doxygen的安装和使用
查看>>
android adb介绍
查看>>
【SQL】SQL中笛卡尔积、内连接、外连接的数据演示
查看>>
HTTP解析
查看>>
MemCache超详细解读
查看>>
python numpy 教程
查看>>
手机web如何实现多平台分享
查看>>
策略模式和观察者模式
查看>>