1. 程式人生 > >程式設計:小學生考試系統(二)

程式設計:小學生考試系統(二)

問題及程式碼

/*煙臺大學計算機與控制工程學院
題目描述:做一個小學生考試系統,功能包括:
    (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,e,j,*p;//p指向子函式中的做對題目數p
    p=&score;//將p的值複製給score
    srand(time(0));//初始化隨機種子
    printf("                     小天才數學考試系統\n");
    for(j=0; j<3; j++)
    {
        first_menu();
        scanf("%d",&e);
        if(e==1)
        right_ans1(p);
        else if(e==0)
        right_ans2(p);
        else
        {
            printf("輸入有誤,請重新輸入\n");
            continue;
        }
        printf("共答對了%d道題,總得分為:%d分,得分率%.2f\n", score,score*10, 1.0*score/10*100);
        if(score*10>=60)
        {
            printf("恭喜你,成績合格!");
            break;
        }
        else
        {
            if(j<2)
                printf("很抱歉,你的成績不合格,請重新答題\n");
            else
            {
                printf("很抱歉,本次考試你未通過,請來年再考!");
                break;
            }
        }
    }
    return 0;
}
void first_menu()
{
    printf("請輸入以下編號進入所在年級題庫:\n");
        printf("0:一、二年級\n");//針對不同年級的學生進行分開測試
        printf("1:三到六年級\n");
        printf("請輸入:");
}
void right_ans1(int*p)
{
    int s,i,c,a,b,t;
            for(i=0; i<10; i++)
            {
                printf("第 %d 題: ", i+1);
                c=rand()%4;
                do
                {
                    a=rand()%100+1;
                    b=rand()%100+1;
                    if(a<b&&(c==1))//減法套保證被減數大於減數,除法要保證被除數大於除數
                    {
                        s=a;
                        a=b;
                        b=s;
                    }
                    if(a<b&&(c==3))
                        {
                            s=a;
                            a=b;
                            b=s;
                        }
                    if(a%b!=0&&(c==3))
                    {
                        a=a-(a%b);
                    }
                }
                while((a+b)>=100||a*b>=100);
                switch(c)
                {
                case 0:
                    s=a+b;
                    printf("%d+%d=", a, b);
                    break;
                case 1:
                    s=a-b;
                    printf("%d—%d=", a, b);
                    break;
                case 2:
                    s=a*b;
                    printf("%d×%d=", a, b);
                    break;
                case 3:
                    s=a/b;
                    printf("%d÷%d=", a, b);
                    break;
                }
                scanf("%d", &t);
                if(t==s)
                {
                    printf("    right! \n");
                    (*p)++;
                }
                else
                    printf("    wrong! \n");

            }
}
void right_ans2(int*p)
{
    int s,i,c,a,b,t;
    for(i=0; i<10; i++)
            {
                printf("第 %d 題: ", i+1);
                c=rand()%2;
                a=rand()%10+1;
                b=rand()%10+1;
                if(a<b&&(c==1))
                {
                    s=a;
                    a=b;
                    b=s;
                }
                switch(c)
                {
                case 0:
                    s=a+b;
                    printf("%d+%d=", a, b);
                    break;
                case 1:
                    s=a-b;
                    printf("%d—%d=", a, b);
                    break;
                }
                scanf("%d", &t);
                if(t==s)
                {
                    printf("    right! \n");
                    (*p)++;
                }
                else
                    printf("    wrong! \n");


            }
}