程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 實驗一(小學四則運算練習系統),小學四則運算

實驗一(小學四則運算練習系統),小學四則運算

編輯:關於C語言

實驗一(小學四則運算練習系統),小學四則運算


#include <stdio.h>
#include <stdlib.h>

int getChoice();
void showMenu();
void doExercise(int);
int test(int);

int getChoice()
{
    int choice;
    scanf("%d",&choice);
    return choice;
}

void showMenu()
{
    printf("===================================\n");
    printf("\n歡迎使用小學四則運算練習軟件\n");
    printf("\n");
    printf("\t1、加法練習\t2、減法練習\n");
    printf("\t3、乘法練習\t4、除法練習\n");
    printf("\t5、綜合練習\t0、退出系統\n");
    printf("\n");
    printf("請輸入你的選擇(0--5):\n");
    printf("\n===================================\n");
}


void doExercise(int n)
{
    int count=0;
    int score=0;        //練習得分,初始化為0
    int i=0;            //練習題數的計數器
    
    for(i=1;i<=10;i++)
    {
        count=count+test(n);        //間接遞歸調用test(n)
        score=count*10;
    }
    printf("本次練習十道題,你做對了%d道,所得分數為%d分\n",count,score);
}

/*
    功能:進行一道題的測試過程
*/
int test(int n)
{
    int ranswer=0;            //正確答案
    int uanswer=0;            //用戶輸入的答案
    int t=0;                //臨時變量
    char operation;            //運算類別
    int num1=0;                //操作數1
    int num2=0;                //操作數2

    srand(time(NULL));        //初始化隨機數種子
    num1=rand()%10;            //取0—9之間的隨機數
    num2=rand()%10;

    //進入程序功能,如果選擇5就隨機產生1-4所代表的每一種運算方式
    if(n==5)
    {
        n=rand()%4+1;
    }

    switch(n)
    {
        case 1:
            operation='+';
            break;

        case 2:
            operation='-';
            break;

        case 3:
            operation='*';
            break;

        case 4:
            operation='/';
            break;
    }

/*加入一條防止“不夠減”的語句,當選擇減法且num1小於num2時不夠減
的時候,用臨時變量交換兩個操作數*/

    if((operation=='-') && (num1<num2))
    {
        t=num1;
        num1=num2;
        num2=t;
    }

/*防止“除數為0”的程序漏洞,當num2被隨機取值到0時,就將num2強制置為1
做除法時,將num1的值強制賦值給num1*num2,防止不能整除*/

    if(operation=='/')
    {
        if(num2==0)
        {
            num2=1;
        }
        num1=num1*num2;            //防止num1不能被num2整除的語句
    }

//輸出測試題本身、提示用戶輸入
    printf("%d%c%d= ",num1,operation,num2);
    scanf("%d",&uanswer);

//程序計算正確結果
    switch(operation)
    {
        case '+':
        ranswer=num1+num2;
        break;

        case '-':
        ranswer=num1-num2;
        break;

        case '*':
        ranswer=num1*num2;
        break;

        case '/':
        ranswer=num1/num2;
        break;
    }
//評判,做對返回1,做錯返回0
    if(uanswer==ranswer)
    {
        printf("做對了!\n");
        return 1;
    }
    else 
    {
        printf("做錯了!\n");
        return 0;
    }
}


//主函數
int main(void)
{
    int choice=0;        //接收用戶的選擇
    
    
    
    //循環開始功能,本次用do……while循環
    do
    {
        showMenu();                //顯示菜單
        choice=getChoice();        

        //控制choice的范圍
        if(choice<0 || choice>5)
        {
            choice=1;            //強制做加法
        }
        if(choice==0)
        {
            break;                    //用戶選擇0,退出循環(退出系統)
        }

        doExercise(choice);        //做什麼練習,並啟動評分
    }while(choice!=0);

    printf("歡迎使用本軟件,再見!\n");
    return 0;
}

 

雖然代碼寫得比較簡單,功能也還沒達到老師的要求,但是這種層次分明的寫法還是比較喜歡。功能有待改進...

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved