代码如下:

#include <stdlib.h>
#include<stdio.h>
#include<time.h>
#define N 20 //定义一个时间以s为单位,要求时间至少够做5题

/*
程序名:算数游戏
时间:2020.12.24
制作人:Bsheepcoder
内容: 用户需在规定时间内尽可能多的做题,
题目内容是完成两个10以内数相加和相减。
*/
struct tm * GetTime( time_t *t) //声明一个获取时间的结构指针
{
struct tm * loctm;
time (t); //获取Unix时间戳。
loctm = localtime (t); //转为时间结构。
}

void NewNumber(int *p1, int *p2); //生成两个10以内随机数
int Sum(int a , int b); //两数和
int Minus(int a , int b); //两数差的绝对值
void Judge(int sum,int a,int minus,int b,int *k); //判断用户输入的结果是否正确
int TimeCnt( struct tm *localtime,struct tm begintime); //返回剩余答题时间
int InTime(struct tm *lt1 ,time_t t , int *pn, int *pk); //答题时间内的操作,输入两个数。
int AwardLangurage(int *cnt,int *k);

int main(void)
{

time_t T;
int cnt = 0, k = 0 ; //
printf(">> %ds时间,准备开始了吗?\n",N);
printf(">> 按enter 开始 || 输任意值退出\n",N);
if(getchar() == '\n')
{
//定义一个时间变量
struct tm *lt1; //定义一个时间结构体指针
struct tm begin;
int time; //定义一个时间差
lt1 = GetTime(&T); //指针指向此时时间
begin = * lt1; //记录开始的时间指针的时间
while(1)
{
time = TimeCnt(lt1,begin); //传入开始时间 ,返回剩余时间
printf(">—————剩余 %ds——————<\t\n",time);
if(time >= 0)
{
InTime(lt1,T,&cnt,&k);
}else{

printf(">> 停!时间到!\t\n");
printf(">> 共 %d 题, 答对 %d 题\t\n",cnt,k);
switch (AwardLangurage(&cnt,&k))
{
case 0: printf("完全正确!你太厉害了!");
break;
case 1: printf("优秀!我看好你!");
break;
case 2: printf("良好!你很有潜力!");
break;
case 3: printf("一般,你需要多练习!");
break;
case 4: printf("加油,不要放弃!");
break;
case 5: printf("你完美的躲过了正确答案!");
break;
case 6: break;
default:
break;
};
printf(">> 按任意键退出\t\n",N);
break;
}
}
getchar();
getchar(); //防止程序闪退
}
return 0;
}

void NewNumber(int *p1, int *p2)
{
int born ;
srand((unsigned)time(NULL));
*p1 = (rand()+2 * rand())%10; //取一个随机数 p1
*p2 = (rand() * rand()+rand())%10; // 取一个随机数 p2
}
int Sum(int a , int b) //两数和
{
int sum;
sum = a + b;
return sum;
}

int Minus(int a , int b) //两数差的绝对值
{
int minus;
if(a < b){
minus = b - a;
}else
{
minus = a - b;
}
return minus;
}

void Judge(int sum,int a,int minus,int b,int *k)
{

if(a == sum && b == minus)
{
printf(" 正确!\n");
*k = *k + 1;
}else
{
printf(" 错误!\n");
}
}
/*
功能:判断时间差,以此为依据退出循环
参数:时间结构指针、开始时间
*/
int TimeCnt( struct tm *localtime,struct tm begintime) //传入
{
int minus;
if(localtime->tm_min > begintime.tm_min)
{
minus = localtime->tm_sec + 60 - begintime.tm_sec ;
}else
{
minus = localtime->tm_sec - begintime.tm_sec ;
}
return (N - minus) ;
}
/*
功能:规定时间内的动作
参数:时间结构指针、时间变量、计题数、计答对题数
*/
int InTime(struct tm *lt1 ,time_t t , int *pn, int *pk)
{
int new1, new2, answer1, answer2;
int i,sum, begin , minus;
NewNumber(&new1,&new2);
sum = Sum(new1,new2);
minus = Minus(new1,new2);
printf(" >> %d +/- %d = ?\t\n",new1 ,new2);
*pn = *pn + 1;
scanf("%d %d",&answer1, &answer2);
Judge(sum,answer1,minus,answer2,pk);
lt1 = GetTime(&t);
return 0;
}
/*
功能:用答错的题数来判断评价
参数:题数、答对的题数
*/
int AwardLangurage(int *cnt,int *k)
{
int LangurageStand;
int error = *cnt - *k ; // 错误的题数
if(*cnt > 10)
{
if (error == 0 ) //0%以内
{
LangurageStand = 0;
}else if(error < (*cnt)/5) //20%
{
LangurageStand = 1;
}else if(error < 2*(*cnt)/5) //40%
{
LangurageStand = 2;
}else if(error < 4*(*cnt)/5) //80%
{
LangurageStand = 3;
}else if(error < *cnt) //100%
{
LangurageStand = 4;
}else
{
LangurageStand = 5;
}

}else // 5个题以内
{
if (error == 0 )
{
printf("完全正确!你太厉害了!");
}else if(error < *cnt)
{
printf("还需努力!");
}else
{
printf("你需要更多练习!");
}
LangurageStand = 6;
}
return LangurageStand;
}

不是很难,不过很适合小盆友来学习算数

还可以写成乘法算数类型

哈哈