[原创]用C语言写的数学测试软件/附源代码
小学生数学测试软件的编写,要求:
(1) 可选择题型(+,-,*);
(2) 可选择每次答题的个数;
(3) 随机生成两个数进行运算;
(4) 每次在输入答案后应判断对错,若答案错误,应给出正确答案;
(5) 最后给出做对题目的总个数。
以下是我写的源程序:
/*引用函数库*/
#include"stdio.h" /*由于尖括号在论坛显不出来,所以用双引号代替一下*/
#include "stdlib.h" /*由于尖括号在论坛显不出来,所以用双引号代替一下*/
#include"time.h" /*由于尖括号在论坛显不出来,所以用双引号代替一下*/
/*引用函数库结束*/
/*定义全局变量*/
char operation;/*进入相应模块的运算符*/
int loop;/*每次做题的次数*/
int rightAnswer;/*做题正确次数*/
int flag;/*函数调用出错标记为0表示正确,为1表示出错了*/
/*定义全局变量结束*/
/*定义函数*/
OutputProblemType()
{
printf("*******************************\n");
printf("请你选择一个类型做题\n");
printf("1\t做加法(+)的题\n");
printf("2\t做减法(-)的题\n");
printf("3\t做乘法(*)的题\n");
printf("*******************************\n");
}
int AcceptUserInputChoice()
{
int userInput;
fflush(stdin);
scanf("%d",&userInput);
return userInput;
}
CheckChoice(int i)
{
switch(i)
{
case 1: operation='+';break;
case 2: operation='-';break;
case 3: operation='*';break;
default : flag=1;
}
}
ComeInModule()
{
int i;
i=AcceptUserInputChoice();
flag=0;
CheckChoice(i);
while(flag)
{
printf("*******************************\n\n");
printf("你刚才输入不合要求,请重新输入");
printf("\n\n*******************************\n");
i=AcceptUserInputChoice();
flag=0;
CheckChoice(i);
}
}
long ProduceRandom()
{
srand( (unsigned)time( NULL ) );
return rand();
}
long BringRandom(long seed)
{
srand(seed);
return rand();
}
OutputDoNumber()
{
int number[10]={1,4,6,8,10,12,16,20,22,26};
int i;
printf("*******************************\n");
printf("请你选择你做题次数\n");
for(i=0;i<10;i++)
{
printf("你要做%d次\n",number);
}
printf("*******************************\n");
loop=AcceptUserInputChoice();
flag=1;
for(i=0;i<10;i++)
{
if(loop==number)
{
flag=0;
break;
}
}
while(flag)
{
printf("*******************************\n\n");
printf("你刚才输入不合要求,请重新输入");
printf("\n\n*******************************\n");
loop=AcceptUserInputChoice();
flag=1;
for(i=0;i<10;i++)
{
if(loop==number)
{
flag=0;
break;
}
}
}
}
Outputexpression(long first,long second,char oper)
{
printf("*******************************\n\n");
printf("%ld%c%ld=",first,oper,second);
printf("\n\n*******************************\n");
}
OutputRightAnswer(long trueAnswer)
{
printf("*******************************\n\n");
printf("正确答案是%ld",trueAnswer);
printf("\n\n*******************************\n");
}
DealUserAnswer(long first,long second,char oper,long answer)
{
long trueAnswer;
switch(oper)
{
case '+':trueAnswer=first+second;break;
case '-':trueAnswer=first-second;break;
case '*':trueAnswer=first*second;break;
}
if(trueAnswer==answer)
{
rightAnswer++;
}
else
{
OutputRightAnswer(trueAnswer);
}
}
BeginDo()
{
long userAnswer;
int time;
long firstRandomNumber;
long secondRandomNumber;
for(time=0;time {
firstRandomNumber=ProduceRandom();
secondRandomNumber=BringRandom(firstRandomNumber);
Outputexpression(firstRandomNumber,secondRandomNumber,operation);
userAnswer=AcceptUserInputChoice();
DealUserAnswer(firstRandomNumber,secondRandomNumber,operation,userAnswer);
}
)
EndDoOutRightNumber()
{
printf("*******************************\n");
printf("你做对了%d题\n",rightAnswer);
}
int IsOver()
{
printf("继续输入其它\n结束输入0\n");
printf("*******************************\n");
return AcceptUserInputChoice();
}
/*定义函数结束*/
/*程序开始处*/
main()
{
do
{
OutputProblemType();/*输出题目类型供用户选择*/
ComeInModule();/*根据用户的输入进入相应的模块*/
OutputDoNumber();/*输出每次做题目的次数供用户选择*/
BeginDo();/*开始做题*/
EndDoOutRightNumber();/*做题目输出做对的个数*/
}while(IsOver());/*是否结束程序*/
}
/*程序结束*/