程序设计:小学生考试系统(三)

问题及代码

/*烟台大学计算机与控制工程学院
题目描述:做一个小学生考试系统,功能包括:
    (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





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值