一、设计思想
  编写一个判断函数,由用户输入运算题后结果,并与正确结果对比,输出答题的对错数。
  二、程序代码
#include "stdafx.h"
#include "stdlib.h"      //调用其中随机函数
#include "iostream.h"
#include "time.h"
int wrong=0,right=0;
void Addjudge(int k1,int k2)
{
int k3;
cout<<"请回答"<<k1<<"+"<<k2<<"=";
cin>>k3;
if(k1+k2!=k3)
{
cout<<"回答错误"<<endl;
wrong++;
}
else
{
cout<<"回答正确"<<endl;
right++;
}
}//判断加法运算是否正确
void Subjudge(int k1,int k2)
{
int k3;
cout<<"请回答"<<k1<<"-"<<k2<<"=";
cin>>k3;
if(k1-k2!=k3)
{
cout<<"回答错误"<<endl;
wrong++;
}
else
{
cout<<"回答正确"<<endl;
right++;
}
}//判断减法运算是否正确
void Chengjudge(int k1,int k2)
{
int k3;
cout<<"请回答"<<k1<<"*"<<k2<<"=";
cin>>k3;
if(k1*k2!=k3)
{
cout<<"回答错误"<<endl;
wrong++;
}
else
{
cout<<"回答正确"<<endl;
right++;
}
}//判断乘法运算是否正确
void Chujudge(int k1,int k2)
{
int k3;
cout<<"请回答"<<k1<<"/"<<k2<<"=";
cin>>k3;
if(k1/k2!=k3)
{
cout<<"回答错误"<<endl;
wrong++;
}
else
{
cout<<"回答正确"<<endl;
right++;
}
}//判断除法运算是否正确
int main(int argc, char* argv[])
{
int a[6],ch;      //定义一个数组,用来存放可控参数
int temp;
srand((unsigned)time(NULL)); //使随机产生的式子每次不重复
int k1,k2;  //k1,k2为两个随机数,产生n个式子
cout<<"请输入出题数目:"<<endl;
cin>>a[0];
if(a[0]<0)
{
cout<<"出错!请重新输入!"<<endl;
cin>>a[0];
}
//输入出题数目a[0]
cout<<"请输入是否有乘除(有->1;   无->0):"<<endl;
cin>>a[1];
while(a[1]<0||a[1]>1)
{
cout<<"错误!请正确输入操作序号(0~1):";
cin>>a[1];
}
//输入是否乘除a[1]
cout<<"请输入出数值范围:";
cin>>a[2];
//输入数值范围a[2]
cout<<"请输入是否选择分数(有->1;   无->0):"<<endl;
cin>>a[3];
while(a[3]<0||a[3]>1)
{
cout<<"错误!请正确输入操作序号(0~1):";
cin>>a[3];
}
//输入是否有分数a[3]
cout<<"请输入结果是否有负数(有->1;   无->0):"<<endl;
cin>>a[4];
while(a[4]<0||a[4]>1)
{
cout<<"错误!请正确输入操作序号(0~1):";
cin>>a[4];
}
//输入结果是否为负数a[4]
cout<<"请输入几列:"<<endl;
cin>>a[5];
if(a[5]<0)
{
cout<<"出错!请重新输入!"<<endl;
cin>>a[5];
}
//输入几列a[5]
for(int i=1;i<=a[0];i++)      //由用户决定打印多少道题a[0]
{
if(a[3]==0){
k1=rand()%(a[2]);   //随机产生a[2]以内的数,a[2]是由用户输入的数值范围
k2=rand()%(a[2]);
if(a[4]==0)         //控制结果没有负数,如果相减出现负数,则交换两个数
{
if(k1<k2)
{
temp=k1;
k1=k2;
k2=temp;
}
}
else
{
k1=rand()%(a[2]);
k2=rand()%(a[2]);
}
if(a[1]==1){           //a[1]为控制乘除参数
ch=rand()%4;      //ch有四种情况,加减乘除
}
else
ch=rand()%2;      //ch有两种情况,加减,没有乘除
if((i+1)%a[5]==0)      //a[5]为打印列数,式子个数除以列数的余数决定了它的位置
{
cout<<endl;
}
switch(ch)
{
case 0:
Addjudge(k1,k2);
break;
case 1:
Subjudge(k1,k2);
break;
case 2:
Chengjudge(k1,k2);
break;
case 3:
Chujudge(k1,k2);
break;
}
}
else
{
int n1,n2,n3,n4;
n1=rand()%20;   //随机产生20以内的数
n2=rand()%20;
n3=rand()%20;
n4=rand()%20;
if(a[1]==1){
ch=rand()%4;
}
else
ch=rand()%2;       //随机产生一个运算符号
if((i+1)%a[5]==0)
{
cout<<endl;
}
switch(ch)        //输出分数
{
case 0:
cout<<"("<<n1<<"/"<<n2<<")+("<<n3<<"/"<<n4<<")="<<" ";
break;
case 1:
cout<<"("<<n1<<"/"<<n2<<")-("<<n3<<"/"<<n4<<")="<<" ";
break;
case 2:
cout<<"("<<n1<<"/"<<n2<<")*("<<n3<<"/"<<n4<<")="<<" ";
break;
case 3:
cout<<"("<<n1<<"/"<<n2<<")/("<<n3<<"/"<<n4<<")="<<" ";
break;
}
}
}
cout<<"您总做了"<<a[0]<<"个题,正确"<<right<<"的道,错误"<<wrong<<"道"<<endl;
cout<<endl;
return 0;
}
  三、实验截图

  四、实验心得
  1.首先,程序中增加了用户在决定所出题目做出选择时,如果输入超出正确范围,报错重输。
  2.以前编程不愿意用函数实现程序部分功能,导致程序写起来所有代码都在主函数中,功能模块不清晰。以后编程要注意经常使用函数调用。
  3.分数的实现过于复杂,这个程序只实现了整数运算的结果判断。进行用户运算结果测试对于打印题目中的列数没有意义了,测试是与出题同步进行的,一边出题一边做题。