C語言寒假大作戰04


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

設計思路和遇到的問題

思路

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

問題

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

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

后面又出現了一些問題,大多是switch中的使用,經常弄混符號兩邊的數字到底是什么,導致答案可能將同一個數字以不同的方式算了兩邊,而另一個數字卻沒有計算,而答案錯誤。

程序結果截圖




程序代碼

#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上傳截圖與鏈接

 

 

 

 

 https://gitee.com/li_han_lin/dashboard/projects

 

 

 
 


免責聲明!

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



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