基於c編寫的關於隨機生成四則運算的小程式

来源:http://www.cnblogs.com/hcl390220670/archive/2017/09/16/7532566.html
-Advertisement-
Play Games

基於http://www.cnblogs.com/HAOZHE/p/5276763.html改編寫的關於隨機生成四則運算的小程式 github源碼和工程文件地址:https://github.com/HuChengLing/- 基本要求: 除了整數以外,還能支持真分數的四則運算。 對實現的功能進行描 ...


基於http://www.cnblogs.com/HAOZHE/p/5276763.html改編寫的關於隨機生成四則運算的小程式

github源碼和工程文件地址:https://github.com/HuChengLing/-

基本要求:

除了整數以外,還能支持真分數的四則運算。

對實現的功能進行描述,並且對實現結果要求截圖。

主要功能:運算小學四則運算,可以選擇加減乘除以及混合運算。

設計思想:首先思考運算數字範圍,考慮小學生的運算能力,然後分類運算方法,分為加減乘除混合運算,

然後可以選擇是繼續做題還是退出程式,可以總結做對或者做錯的題數,方便計算正確以及錯誤的題數。

二 程式代碼:2017-09-16

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<conio.h>
#include<string.h>


int right = 0;
int wrong = 0;
char getSignal();
int  calculateIntegerResult(int num1, int num2, char signal);
//int getNumber();
void doIntegerSubject();
void falsePrint(int);
void correctPrint(int);

/*char getSignal()

{

char signal[4] = { '+','-','*','/' };

srand((unsigned)time(NULL));

return signal[rand() % 4];

}*/
char getSignal()
{
    srand((unsigned)time(NULL));
    int a;
    a = rand() % 4 + 1;
    switch (a)
    {
    case 1:
        return '+';
        break;
    case 2:
        return'-';
        break;
    case 3:
        return '*';
        break;
    case 4:
        return '/';
        break;
    default:
        break;
    }
}
/*int getNumber()
{
srand((unsigned)time(NULL));
int a, b;
a = rand() % 100 + 1;
b = rand() % 100 + 1;
return 0;
}*/

int calculateIntegerResult(int num1, int num2, char signal)
{
    int t;
    switch (signal)
    {
    case '+':
        t = num1 + num2;
        break;
    case'-':
        t = num1 - num2;
        break;
    case'*':
        t = num1*num2;
        break;
    case'/':
        t = num1 / num2;
        break;
    default:
        t = 0;
        printf("運算符不符合規則\n");
        break;
    }
    return t;
}

void calculateMarkResult(int num1, int num2, int num3, int num4, char signal, int mark[5])
{

    switch (signal)
    {
    case '+':
        if (num2 == num4)
        {
            mark[0] = num1 + num3;
            mark[1] = num1;
        }
        else
        {
            mark[0] = num1*num4 + num2*num3;
            mark[1] = num2*num4;
        }
        break;
    case'-':
        if (num2 == num4)
        {
            mark[0] = num1 - num3;
            mark[1] = num1;
        }
        else
        {
            mark[0] = num1*num4 - num2*num3;
            mark[1] = num2*num4;
        }
        break;
    case'*':
        mark[0] = num1*num3;
        mark[1] = num2*num4;
        break;
    case'/':
        mark[0] = num1*num4;
        mark[1] = num2*num3;
        break;
    default:
        printf("運算符不符合規則\n");
        break;
    }

}

void doIntegerSubject()
{
    int a, b, giverAnswer, printFlag;

    char signal;
    srand((unsigned)time(NULL));
    a = rand() % 100 + 1;
    b = rand() % 100 + 1;
    signal = getSignal();
    if (signal == '/')
    {
        if (b == 0)
        {
            int temp;
            temp = b;
            b = a;
            a = temp;
        }
    }
    printf("please do blew problem:\n");
    printf("%d %c %d=", a, signal, b);
    //giverAnswer = _getch();
    scanf_s("%d", &giverAnswer);
    fflush(stdin);
    if (calculateIntegerResult(a, b, signal) == giverAnswer)

    {
        right++;
        srand((unsigned)time(NULL));
        printFlag = rand() % 4 + 1;
        correctPrint(printFlag);

    }

    else

    {
        wrong++;
        srand((unsigned)time(NULL));
        printFlag = rand() % 4 + 1;;
        falsePrint(printFlag);
        printf("\n正確答案:%d\n", calculateIntegerResult(a, b, signal));
    }

}

void doMarkSubject()
{
    int a, b, c, d, i = 0, printFlag;
    int result[5];
    char giverNumber[10];
    char signal;
    int x, y, j;
    signal = getSignal();
    srand((unsigned)time(NULL));
    while (1)
    {
        a = rand() % 100;
        while (1)
        {
            b = rand() % 100;
            if (b)
                break;
        }
        if (a < b)
            break;
    }

    while (1)
    {
        c = rand() % 100;
        while (1)
        {
            d = rand() % 10;
            if (d)
                break;
        }
        if (c < d)
            break;
    }
    /*a = rand() % 100 + 1;
    b = rand() % 100 + 1;
    c = rand() % 100 + 1;
    d = rand() % 100 + 1;
    signal = getSignal();
    if (b == 0 || a>b)
    {
    int temp;
    temp = b;
    b = a;
    a = temp;
    }
    if (d == 0 || c>d)
    {
    int f;
    f = b;
    b = a;
    a = f;
    }*/
    printf("please do blew problem:\n");
    printf("%d/%d %c %d/%d=", a, b, signal, c, d);
    //giverAnswer = _getch();
    i = 0;
    while (1)
    {
        giverNumber[i] = _getche();
        if (giverNumber[i] == '/')
            break;
        i++;

    }
    x = 0;
    for (j = 0; j < i; j++)
    {
        x = x + pow(10, (i - 1 - j))*(giverNumber[j] - '0');
    }
    scanf_s("%d", &y);
    calculateMarkResult(a, b, c, d, signal, result);
    //scanf_s("%d", &giverNumber[i]);
    fflush(stdin);
    if (x == result[0] && y == result[1])

    {
        right++;
        srand((unsigned)time(NULL));
        printFlag = rand() % 4 + 1;
        correctPrint(printFlag);

    }

    else

    {
        wrong++;
        srand((unsigned)time(NULL));
        printFlag = rand() % 4 + 1;;
        falsePrint(printFlag);
        int *dd;
        printf("\n正確答案:%d/%d\n", result[0], result[1]);
        //printf("\n正確答案:%d\n", calculateMarkResult(a, b, signal, c, d));
    }

}

//回答正確列印信息
void correctPrint(int num)
{
    switch (num)

    {
    case 1:
        printf("You're right!\n"); break;
    case 2:
        printf("It's OK!\n"); break;
    case 3:
        printf("Correct!\n"); break;
    case 4:
        printf("Perfect!\n"); break;
    case 5:
        printf("Oh my gag!\n"); break;
    default:
        printf("Powerful!\n"); break;
    }

}

//回答錯誤列印信息

void falsePrint(int num)
{
    switch (num)
    {
    case 1:
        printf("You're lost!"); break;
    case 2:
        printf("Failure!"); break;
    case 3:
        printf("Come on!"); break;
    case 4:
        printf("It's wrong!"); break;
    default:
        printf("Incorrect!"); break;
    }
}


void main()
{
    int total;
    int con=0 , choice,choice1;
    printf("welcome to math world!:");
    system("cls");
        
        if (con = 0)
        {
            printf("\t\t\t  1.整數運算\n");
            printf("\t\t\t  2.分數運算\n");
            printf("請選擇:\n");
            scanf_s("%d", &choice);
            system("cls");
            switch (choice)
            {
            case 1:
                while (right >= wrong)
                {
                    doIntegerSubject();

                }
                total = right + wrong;
                printf("你一共答了:%d道題其中答對了%d 道答錯了%d道\n", total, right, wrong);
                break;
            case 2:
                while (right >= wrong)
                {
                    doMarkSubject();
                }
                total = right + wrong;
                printf("你一共答了:%d道題其中答對了%d 道答錯了%d道\n", total, right, wrong);
                break;
            }
            system("pause");
        }

        printf("\n\t\t\t1.重新選擇?\n");
        printf("\n\t\t\t2.退出運算?\n");
        scanf_s("%d", &choice1);
        if (choice1 == 1)
        {
            system("cls");
            con = 0;
        }
        else if (choice1 == 2)
        {
            exit;
        }
        else
            printf("抱歉!,你輸入的指令有誤!請重新輸入!\n");
        system("pause");
    
}

總結:一個簡單的自動隨機生成四則運算 之前百度的源碼,它的功能主要是隨機生成符號和隨機數來達到隨機的加、減、乘、除的算術表達數,他也沒有讓用戶自己選擇是否繼續運算或者退出系統,也不支持正分數的運算。 在網路源碼的基礎上,我將原來的隨機獲取函數進行了修改,其次我增加分數運算和分數判斷,以及統計正誤數據的變數並輸出來和用戶可以自行選擇是否繼續運算的選項。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 異常概述 2 異常體系 3 異常的原理 4 異常對象的拋出 5 自定義異常&異常類的拋出(throws) 6 異常的分類 7 throw和throws的區別? 8 異常的捕獲 9 異常處理的原則 10 異常的註意事項 ...
  • 簡介 網路無處不在,移動互聯時代也早已到來,單機版程式慢慢的已沒有生命力,所有的程式都要能夠訪問網路,比如 QQ 網路聊天程式、迅雷下載程式等,這些程式都要同網路打交道,本次將與各位小伙伴們分享的就是 Java 中的網路編程—— Socket 通信。 網路基礎知識 兩台電腦要通過網路進行通信,必須 ...
  • 一、添加 devtools 依賴 當配置了 devtools 後,我們在classpath修改任何文件項目都將會自動重啟。 (1)某些資源在更改時不一定需要觸發重新啟動。例如, Thymeleaf 模板可以就地進行編輯。預設情況下更改資源路徑包括了:/META-INF/maven, /META-IN ...
  • 最近做了幾道關於二分法的題目,覺得比較典型,因此拿出來說一說。 首先,先把題目分享一下。 題目描述:上題中講了一個故事,故事大意不用過多關註,有用部分為:某地主有一個大糧倉,這個糧倉容量為 n 個單位,但這個糧倉有個小口,每天會有一部分麻雀過來偷吃糧食,同時地主每天也會從別的地方運來糧食填補。開始的 ...
  • 我是一名建築學的學生,第一次瞭解到Python這門課是選課的時候。說實話,學c語言的時候我學的就並不好,感覺自己並沒有天分。我只是按照我的人才培養方案看課的時候才第一次看到這門課。起初並不知道這門課意味著什麼,就給軟工的朋友打電話咨詢。然後又上百度搜索,感覺還挺有用,就選了這門課。 一個建築生,平時 ...
  • 自己以前從來沒有寫博客的想法,但是學Python,裡面的老師也說了,寫博客可以加深自己的記憶,也能回顧內容。還能給別人參考。挺值的。2017-09-16 一、 Python介紹 python的創始人為吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆為了在阿姆 ...
  • 首先分析第一個比較重要的方法 put 方法,源碼如下 分析上面的源碼,我們可以得到下麵的結論: 當我們試圖將一個key-value 調用put方法放入HashMap的時候,首先會調用key的hashCode方法算出該Entry存放的位置,若兩個key的hashCode相同則在table中的存儲位置相 ...
  • 本文通過開發一個應用來學習Android基本概念及構成應用的UI組件。 開發的應用名叫GeoQuiz,它能給出一道道地理知識問題。用戶點擊true或false按鈕回答問題,應用即時做出反饋 第一步請先自行創建一個新項目,目錄如下 1. 用戶界面設計 在XML文件(activity_quiz.xml) ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...