问题及代码
/*烟台大学计算机与控制工程学院
题目描述:做一个小学生考试系统,功能包括:
(1)利用随即数出十道加减乘除的数学题;
(2)小学生用户答题给出每道题的答案;
(3)对小学生的答题进行评判;
(4)计算出小学生答题的正确率;
作者:展一
完成时间:2017年 1月3日
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void first_menu();//主菜单
void right_ans1(int*);//三到六年级考试系统
void right_ans2(int*);//一、二年级考试系统
int main()
{
int score=0,choice,j,*p_score;//p_score取score地址,指向子函数中的做对题目数p
p_score=&score;//将p的值复制给score
srand(time(0));//初始化随机种子
printf(" 小天才数学考试系统\n");
for(j=0; j<3; j++)
{
first_menu();
scanf("%d",&choice);
if(choice==1)
right_ans1(p_score);
else if(choice==0)
right_ans2(p_score);
else
{
printf("输入有误,请重新输入\n");
continue;
}
printf("共答对了%d道题,总得分为:%d分,正确率%.1f\n", score,score*10, 1.0*(score*10)/100);
if(score*10>=60)
{
printf("恭喜你,成绩合格!");
break;
}
else
{
if(j<2)
{
printf("很抱歉,你的成绩不合格,请重新答题\n");
score=0;
}
else
{
printf("很抱歉,本次考试你未通过,请来年再考!");
break;
}
}
}
return 0;
}
/*************************************************************
功能描述:选择年级题目的主菜单
*************************************************************/
void first_menu()
{
printf("请输入以下编号进入所在年级题库:\n");
printf("0:一、二年级\n");//针对不同年级的学生进行分开测试
printf("1:三到六年级\n");
printf("请输入:");
}
/*************************************************************
功能描述:进行三到六年级数学考试并累计回答正确题目数…
输入参数:right_answer-题目正确答案
i-循环变量
seed-加减乘除随机变量
first_num-第一个随机数
second_num-第二个随机数
t-学生回答的答案
返 回 值:…做对题的数目…
其他说明:运用了一个指针p_score
*************************************************************/
void right_ans1(int*p_score)//三到六年级考试系统
{
int right_answer,i,seed,first_num,second_num,t;
for(i=0; i<10; i++)
{
printf("第 %d 题: ", i+1);
seed=rand()%4;
do
{
first_num=rand()%100+1;
second_num=rand()%100+1;
if(first_num<second_num&&(seed==1))//减法套保证被减数大于减数,除法要保证被除数大于除数
{
right_answer=first_num;
first_num=second_num;
second_num=right_answer;
}
if(first_num<second_num&&(seed==3))
{
right_answer=first_num;
first_num=second_num;
second_num=right_answer;
}
if(first_num%second_num!=0&&(seed==3))
{
first_num=first_num-(first_num%second_num);
}
}
while((first_num+second_num)>=100||first_num*second_num>=100);
switch(seed)
{
case 0:
right_answer=first_num+second_num;
printf("%d+%d=", first_num, second_num);
break;
case 1:
right_answer=first_num-second_num;
printf("%d—%d=", first_num, second_num);
break;
case 2:
right_answer=first_num*second_num;
printf("%d×%d=", first_num, second_num);
break;
case 3:
right_answer=first_num/second_num;
printf("%d÷%d=", first_num, second_num);
break;
}
scanf("%d", &t);
if(t==right_answer)
{
printf(" right! \n");
(*p_score)++;
}
else
printf(" wrong! \n");
}
}
/*************************************************************
功能描述:进行一、二年级数学考试并累计回答正确题目数…
输入参数:right_answer-题目正确答案
i-循环变量
seed-加减乘除随机变量
first_num-第一个随机数
second_num-第二个随机数
t-学生回答的答案
返 回 值:…做对题的数目…
其他说明:运用了一个指针p_score
*************************************************************/
void right_ans2(int*p_score)//一、二年级考试系统
{
int right_answer,i,c,first_num,second_num,t;
for(i=0; i<10; i++)
{
printf("第 %d 题: ", i+1);
c=rand()%2;
first_num=rand()%10+1;
second_num=rand()%10+1;
if(first_num<second_num&&(c==1))
{
right_answer=first_num;
first_num=second_num;
second_num=right_answer;
}
switch(c)
{
case 0:
right_answer=first_num+second_num;
printf("%d+%d=", first_num, second_num);
break;
case 1:
right_answer=first_num-second_num;
printf("%d—%d=", first_num, second_num);
break;
}
scanf("%d", &t);
if(t==right_answer)
{
printf(" right! \n");
(*p_score)++;
}
else
printf(" wrong! \n");
}
}
运行结果
测试数据一:
choice:0
score: 10
测试数据二:
choice:1
score:1 1 1