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

来源:互联网 发布:ubuntu ifconfig 编辑:程序博客网 时间:2024/05/02 01:18

问题及代码

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