小学生计算机辅助教学系统--练习加,减,乘,除法
一.前言
最近幾天,老師布置一個小學生計算機輔助教學系統–練習加,減,乘,除法的作業要我們實現,我花費了幾個小時把它干完了,本想拿這個小項目練練手,因為要考研了,復習復習C語言。沒有想到這個項目涉及到的C語言知識不深,只涉及到了循環結構,函數,指針只有一個函數指針知識點。指針部分沒有深挖。行了,行了,廢話不多說,我直接上內容。
二.項目要求(需求分析)
項目是編寫一個程序來幫助小學生練習加、減、乘、除四則運算。功能要求如下:
(1)編寫一個菜單,顯示本系統供選擇的基本功能:加、減、乘、除四則運算,退出,并提示用戶輸入選項,然后根據用戶的選項進行不同的練習。
(2)進入每一個功能時,程序首先隨機產生兩個1-100之間的正整數,在屏幕上打印出問題。例如:“16+9=?”,然后讓學生輸入答案。程序檢查學生輸入的答案是否正確。若正確,則打印出“Right!”,否則“Wrong!Please try again”并提示學生重做,直到答案正確為止。然后繼續下一個問題;
(3)在任務2的基礎上,當學生回答錯誤時,最多給三次做的機會,三次仍未做好,則顯示“Wrong! You have tried three times! Test Over!”程序結束。
(4)在任務2的基礎上,連續做10道題,不給機會重做,若學生回答正確,則顯示“Right!”,否則顯示“Wrong!”。10道題全部做完后,按每題10分統計并輸出總分,同時為了記錄學生能力提高的過程,再輸出學生的總分和回答正確率。
(5)在任務4的基礎上,為使學生通過反復練習掌握所學的內容,在學生完成10道運算題后,若回答正確率低于75%,則重做10道題,直到回答正確率高于75%時才退出程序。
(6)在任務5的基礎上,使用隨機函數產生一個1-4之間的隨機數,配合使用選擇語句,來為學生輸入的每個正確或錯誤的答案輸出不同的評價。
對于正確答案,可在以下4中提示信息中選擇一個進行顯示:
Verygood!
Excellent!
Nicework!
Keepup the good work!
對于錯誤答案,可在以下4中提示信息中選擇一個進行顯示:
No.Please try again!
Wrong. Try once more.
Don’t Give up
Notcorrect.Keep Tring.
三.代碼實現(上述功能本代碼已經全部實現)
#include<stdio.h> #include<stdlib.h> #include <time.h> int main(){int menu();//************************************ // void exit();int submenu();void test(int (*p)(int,int),char ch);void practice(int (*p)(int,int),char ch);int add(int a,int b);int sub(int a,int b);int mul(int a,int b);int division(int a,int b);char ch;//運算符號 int opt;//選項int (*p)(int,int);//函數指針,根據用戶所選項調用函數 opt=menu();switch(opt){case 1: p=add;ch='+';break;case 2: p=sub;ch='-';break;case 3: p=mul;ch='x';break;case 4: p=division;ch='/';break;case 5: exit(0);break; }system("pause"); system("cls");opt=submenu();//子菜單 if(opt==1){printf("******************練習模式***********************\n");practice(p,ch);//進入練習模式 }else{printf("******************測試模式***********************\n");system("pause"); test(p,ch);//進入測試模式 } return 0; } int menu(){//顯示菜單,帶回用戶所選擇的選項 int opt;//選擇項 printf("***********************************************\n");printf("本系統供選擇的基本功能有加、減、乘、除\n");printf("***********************************************\n");printf("有如下選項供選擇:\n");printf("1.練習加法\n"); printf("2.練習減法\n");printf("3.練習乘法\n");printf("4.練習除法\n");printf("5.退出\n");printf("***********************************************\n");printf("請輸入你的選項:\n");scanf("%d",&opt);while(opt!=1&&opt!=2&&opt!=3&&opt!=4&&opt!=5){//防止小學生瞎輸入 printf("輸入的選項錯誤,請重新輸入!!\n");printf("請輸入你的選項:\n");scanf("%d",&opt);}return opt; }int add(int a,int b){//加法 return a+b; }int sub(int a,int b){//減法 return a-b; }int mul(int a,int b){//乘法 return a*b; }int division(int a,int b){//除法 (本系統開發的是面向小學生,應該沒有學習小數,所以不考慮小數情況) return a/b; } int submenu(){//選擇練習模式或者測試模式 int op;//選擇的模式 printf("******************模式選擇*****************\n");printf("1.練習模式\n"); printf("2.測試模式\n");printf("請輸入你要選擇的模式:\n");scanf("%d",&op);return op; }void practice(int (*p)(int,int),char ch){//練習模式 void wrong_evaluate();//學生做錯題目時,出現的評語void right_evaluate();//學生做對題目時,出現的評語 int a,b;//兩個1-100之間的正整數int answer;//正確答案 int stu_answer;//學生的答案 int flag;//標志位,正確為1 int count=0;//統計一題中做錯數 srand((unsigned)time(NULL)+1);//播種,產生真隨機數 //隨機產生兩個1-100之間的正整數 a= rand()%100 + 1; srand((unsigned)time(NULL));//播種,產生真隨機數 b=rand()%100 + 1;answer=(*p)(a,b);//在屏幕上打印出問題 printf("%d%c%d=?\n",a,ch,b);printf("請輸入你的答案:\n");scanf("%d",&stu_answer);if(stu_answer==answer){right_evaluate();//學生做對題目時,出現的評語 flag=1;} else{wrong_evaluate();//學生做錯題目時,出現的評語count++; flag=0;}//學生重做,直到答案正確為止while(!flag){printf("***********************************************\n");printf("請輸入你的答案:\n");scanf("%d",&stu_answer);if(stu_answer==answer){printf("Right!\n");flag=1;} else{printf("Wrong!Please try again!\n");count++;flag=0;}if(count>=3){//給三次做的機會,還沒有做對題目,就結束程序 printf("wrong!You have tried three times.Test over!");system("pause"); exit(0);//程序正常退出 }} } void test(int (*p)(int,int),char ch){//測試模式 void wrong_evaluate();//學生做錯題目時,出現的評語void right_evaluate();//學生做對題目時,出現的評語int i;//循環變量int score;//總分int right_num=0;//答對題目數int a,b;//兩個1-100之間的正整數int answer;//正確答案 int stu_answer;//學生的答案 float right_rate=0;//學生做10題的正確率 while(right_rate<0.75){system("cls"); right_num=0;right_rate=0;for(i=0;i<10;i++){srand((unsigned)time(NULL)%100+1+i+(unsigned)time(NULL)%100);//播種,產生真隨機數 //隨機產生兩個1-100之間的正整數 a= rand()%100 + 1; srand((unsigned)time(NULL)%100+i);//播種,產生真隨機數 b=rand()%100 + 1;answer=(*p)(a,b);//在屏幕上打印出問題 printf("***********************************************\n");printf("%d%c%d=?\n",a,ch,b);printf("請輸入你的答案:\n");scanf("%d",&stu_answer);if(stu_answer==answer){right_evaluate();//學生做錯題目時,出現的評語right_num++;} else{wrong_evaluate();//學生做對題目時,出現的評語}}score=right_num*10;right_rate=right_num/10.0;system("pause");system("cls");printf("本次測試\n學生的總分:%d分\n回答正確率:%.2f\n",score,right_rate);system("pause");fflush(stdin);//清除標準輸入輸出緩存區中的內容 }}void wrong_evaluate(){//學生做錯題目時,出現的評語 int choice;//選項srand((unsigned)time(NULL));//播種,產生真隨機數 //隨機產生一個1-4之間的正整數 choice= rand()%4 + 1;switch(choice){case 1:printf("No.Please try again!\n");break;case 2:printf("Wrong. Try once more.\n");break;case 3:printf("Don’t Give up!!!\n");break;case 4:printf("Not correct.Keep Tring.\n");break;default:printf("error!");} }void right_evaluate(){//學生做對題目時,出現的評語int choice;//選項srand((unsigned)time(NULL));//播種,產生真隨機數 //隨機產生一個1-4之間的正整數 choice= rand()%4 + 1;switch(choice){case 1:printf("Very good!\n");break;case 2:printf("Excellent!\n");break;case 3:printf("Nice work!\n");break;case 4:printf("Keep up the good work!\n");break;default:printf("error!");} } //void exit(){//退出 // exit(0);//正常退出 //}四.功能效果圖
主菜單選項:選擇要練習的類別(測試加法):
模式菜單:選擇要練習的模式(進入練習模式):
測試減法:
進入測試模式:
顯示第一次測試模式學習情況:得分率低于0.75,進入下一輪測試模式:
第二次測試模式:
回答正確率高于0.75結束程序:
五.函數模塊圖
六.功能流程圖
總結
以上是生活随笔為你收集整理的小学生计算机辅助教学系统--练习加,减,乘,除法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle查看被锁的表以及解锁表
- 下一篇: JAVA中JPasswordField实