C語言寒假大作戰04


C語言寒假大作戰04](https://www.cnblogs.com/yulbo/p/12322742.html)

這個作業屬於哪個課程 班級鏈接
這個作業要求在哪里 C語言寒假大作戰04
這個作業的目標 使用上次作業的菜單框架,並在其基礎上增加各年級題目的答案函數
作業正文 如下所示
參考文獻 %g與%d百度百科

設計思路和遇到的問題

思路

在原本的操作上加入加和操作,然后先從一年級開始,再寫二年級,最后寫三年級的。

問題

最大的問題還是關於優先級的判斷

之前我是使用if-else語句,一層層的嵌套讓我的思維很是混亂。但是在學長的幫助下,我理清楚了中間的關系,轉而使用switch作為主體的優先級判斷,這的確方便了很多。

程序結果截圖

img
img
img
img

程序代碼

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
#include<stdlib.h>
#include<time.h>

void help();
int menu();
void error();
void grade_1();
void grade_2();
void grade_3();
double answer(double a, double b, double c, char d, char e);

int main()
{
    int grade = 1;c

    printf("========== 口算生成器 ==========\n");
    printf("歡迎使用口算生成器 :)\n");
    printf("\n\n");

    help();
    while (grade)
    {
        grade = menu();

        switch (grade)
        {
        case 1: grade_1(); break;
        case 2: grade_2(); break;
        case 3: grade_3(); break;
        case 4: help(); break;
        case 5: grade = 0; break;
        default: error(); grade = 1; break;
        }
    }
    printf("程序結束, 歡迎下次使用\n");
    printf("任意鍵結束……");

    _getch();
    return 0;
}

void help()
{
    printf("幫助信息:\n");
    printf("您需要輸入命令代號來進行操作, 且\n");
    printf("一年級題目為不超過十位的加減法;\n");
    printf("二年級題目為不超過百位的乘除法;\n");
    printf("三年級題目為不超過百位的加減乘除混合題目.\n");
    printf("\n\n");
}

int menu()
{
    int a = 0;
    printf("操作列表:\n");
    printf("1)一年級    2)二年級    3)三年級\n");
    printf("4)幫助      5)退出程序\n");
    printf("請輸入操作> ");
    scanf("%d", &a);
    printf("< 執行操作 :)\n");
    printf("\n\n");
    return a;
}

void error()
{
    printf("Error!!!報錯了哦乖乖別亂按哦\n");
    printf("錯誤操作指令, 請重新輸入\n");
    printf("\n\n");
}

void grade_1()
{
    printf("現在是一年級題目\n");
    int num = 0;
    printf("請輸入所需要的題目個數>");
    scanf("%d", &num);
    printf("< 執行操作 :)\n\n");

    int a, b, c;
    srand((unsigned)time(NULL));

    printf("/*----- 一年級 -----*/\n\n");

    for (int i = 0; i < num; i++)
    {
        a = rand() % 10;
        b = rand() % 10;
        c = rand() % 2;
        if (c == 0)
        {
            printf("%d + %d = %d\n", a, b, a + b);
        }
        else
        {
            printf("%d - %d = %d\n", a, b, a - b);
        }
    }
}

void grade_2()
{
    printf("現在是二年級題目:\n");
    int num = 0;
    printf("請輸入所需要的題目個數");
    scanf("%d", &num);
    printf("< 執行操作 :)\n\n");

    double a, b, c;
    srand((unsigned)time(NULL));

    printf("/*----- 二年級 -----*/\n\n");

    for (int i = 0; i < num; i++)
    {
        a = rand() % 100;
        b = rand() % 100;
        c = rand() % 2;
        if (c == 0)
        {
            printf("%2g * %2g = %g\n", a, b, a * b);
        }
        else
        {
            printf("%2g / %2g = %g\n", a, b + 1, a / (b + 1));
        }
    }
}

int num_dividend()
{
    for (int i = 0; true; i++)
    {
        if (i = rand() % 100)
            return i;
    }
}

char four_arithmetic(int num)
{
    switch (num)
    {
    case 1: return '+';
    case 2: return '-';
    case 3: return '*';
    case 0: return '/';
    }
}
void grade_3()
{
    printf("現在是三年級題目:\n");
    int num = 0;
    printf("請輸入所需要的題目個數");
    scanf("%d", &num);
    printf("< 執行操作 :)\n\n");

    printf("/*----- 三年級 -----*/\n\n");

    double a = 0, b = 0, c = 0;
    char d, e;
    for (int i = 0; i < num; i++)
    {
        printf("%2g %c %2g %c %2g = %g\n", a = num_dividend(), d = four_arithmetic(rand() % 4),
            b = num_dividend(), e = four_arithmetic(rand() % 4), c = num_dividend(), answer(a, b, c, d, e));
    }
}

double answer(double a, double b, double c, char d, char e)
{
    double result = 0;
    if (d == '*' || d == '/')
    {
        switch (d)
        {
        case '*': result = a * b; break;
        case '/': result = a / b; break;
        }

        switch (e)
        {
        case '+': return result + c;
        case '-': return result - c;
        case '*': return result * c;
        case '/': return result / c;
        }
    }
    else if (e == '*' || e == '/')
    {
        switch (e)
        {
        case '*': result = b * c; break;
        case '/': result = b / c; break;
        }

        switch (d)
        {
        case '+': return a + result;
        case '-': return a - result;
        case '*': return a * result;
        case '/': return a / result;
        }
    }
    else
    {
        switch (d)
        {
        case '+': result = a + b; break;
        case '-': result = a - b; break;
        }

        switch (e)
        {
        case '+': return result + c;
        case '-': return result - c;
        }
    }
}

Gitee上傳截圖與鏈接

img

img


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM