四則運算:我的設計和設想
注明:此版本内有帶bug,結果部分顯示不正确。但程式可正常運作。因時間有限,修改版後續将另起一篇。
(一)主要功能:###
- 菜單多樣式:提供2種方式(整數和真分數),4種運算。
- 專題訓練:可進行某一種運算,打通薄弱項。
- 自動生成題目:100以内的四則運算,利用rand()%100實作, 随機數由系統時間函數産生。
- 實時提示錯題并給予正确答案:輸入錯誤答案提示,并給出正确答案,讓答題人在接下來的答題中更加細心。
- 成績顯示:答題完畢,給出正确題數和錯誤題數的提示。
- 作出對應評價:答題完畢後,根據得分,對應給出一句鼓勵的語句。
(二)設計思想:
- 自己定制答題數量:現在的國小生很有自己的想法,若讓其強制性的做練習題,結果可能适得其反。是以我設計地這款四則運算小軟體,題目不會規定數量,有很大的自由性,讓其自己制定計劃并完成。
- 專題訓練掃除薄弱區:可針對自身的學習狀況選擇習題運算的方式,掃除學習的薄弱區。
- 調動答題者的積極性:裡面的話語不帶任何生硬部分,用輕松地話語使答題者進入狀态,期間再加以鼓勵,讓其更加向上。
(三)存在問題:
- 界面過于簡潔:國小生大多是“看臉的”,第一印象很重要,有趣生動的界面更容易吸引國小生的注意。
- 功能不完全:題型屬于基礎版,可加入多種題型混合運算,或模拟試題等。
(四)改進建議(完善軟體):
- 通關模式:整體可設計成難度逐漸提升的的小關卡,以做遊戲的方式調動國小生的積極性和參與度。
- 搭配休閑益智類遊戲:完成答題數量後,以遊戲作為獎勵機制。根據完成數量制定遊戲時間,時間到便自動關閉,使用者也可增加答題數量賺取遊戲時間。
- 積分制:據答題數量,累計積分,可兌換實物或寵物等。
- 搭配對應教學視訊。
- 增加學習心得和吐槽子產品:促使學生通過自己的方式去總結。學生搭建自己的學習讨論區,增加話題性,聚攏使用者。
- 定期更新完善軟體:據使用者的吐槽和建議更新軟體,滿足使用者需求,達到使用者滿意,自發進行口碑宣傳。學習型軟體很容易通過口碑宣傳影響其他潛在使用者。
注:以上建議中的增加項要在對一定年齡層的國小生進行切實的市場調查和軟體試學後,才可确認。
(五)程式截圖:
1.真分數乘法運算
2.整數運算
(六)總結:
這次變成給我的感覺可以說是酸爽至極,程式設計中所遇到的錯誤可以說是一波未平,一波又起。同時我也在錯誤中找尋自身的問題。
- 會看不會寫:看代碼的能力比寫代碼的能力強,要進行更多的練習積累寫代碼的熟練度。
- 基本格式語句使用不熟練:轉換和調用等方法使用不熟練。
- 靈活變通能力弱:在遇到問題時,很難變換思路。
事情都是相對的,雖說所遇到的問題此起彼伏,其中通過解決問題能夠得到的大量知識,也是值得的。
附錄:源代碼
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int a,b,x,y,s=0,r=0,e=0,result; //s總題數 r正确數 e錯誤數
float fen1,fen2; //真分數
char c; //答題者輸入的值 (比如其中的a+b=c)
int m,n; //輸入的數值,确定性
printf("\n\t\t【小朋友~又到了檢驗自己實力的時候啦!讓我們開始吧!】\n\n");
printf("輸入要練習的題型吧(1整數 / 2真分數):");
scanf("%d",&n);
printf("\n根據下面序列号,可以選擇試題哦\n");
printf("1.+ 加法\n");
printf("2.- 減法\n");
printf("3.* 乘法\n");
printf("4./ 除法");
printf("\n 提示:1.整數間運算 要保留到小數點到整數部分!\n") ;
printf(" 2.按q鍵退出哦!\n") ;
printf("\n輸入要練習的對應序号吧:");
scanf("%d",&m);
printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
printf("\n小測試開始啦!認真答題吧!\n");
srand( (unsigned)time( NULL ) ); //取随機數
switch(n){
/*整數開始*/
case 1:{
while ((c=getchar())!='q') //按q退出
{
s++;
a=rand()%100;
b=rand()%100;
x=rand()%100;
y=rand()%x; //保證減法、除法 可應用
//加法 +
if(m==1)
{
printf("%d+%d=",a,b);
scanf("%d",&c);
if (a+b==c) r++;
else{
printf("要細心呀!正确答案為:%d\n",a+b);
e++;
}
}
//減法 -
else if(m==2)
{
printf("%d-%d=",x,y);
scanf("%d",&c);
if (x-y==c) r++;
else{
printf("要細心呀!正确答案為:%d\n",x-y);
e++;
}
}
//乘法 *
else if(m==3)
{
printf("%d*%d=",a,b);
scanf("%d",&c);
if (a*b==c) r++;
else{
printf("要細心呀!正确答案為:%d\n",a*b);
e++;
}
}
//除法 /
else if(m==4)
{
if(y!=0){
printf("%d/%d=",x,y);
scanf("%d",&c);
float shang=x/y;
if (x/y==c) r++;
else{
printf("要細心呀!正确答案為:%.2f\n",shang);
e++;
}//else結束
}//if(y!=0)結束
}
else
printf("請輸入正确序号!\n"); //輸入其他數字,提示輸出錯誤
result=100*r/s; //整體得分
}
}//整數結束
/*真分數 開始*/
case 2:{
while ((c=getchar())!='q')
{
s++;
float t; //t做轉換的中間因子。fen1,fen2轉換
x=rand()%100;
y=rand()%x;
a=rand()%100;
b=rand()%a;
fen1=y/x; //設定兩個不同的真分數
fen2=b/a;
//加法 +
if(m==1)
{
printf("%d/%d+%d/%d=",y,x,b,a);
scanf("%.2f",&c);
if (fen1+fen2==c) r++;
else{
printf("要細心呀!正确答案為:%.2f\n",fen1+fen2);
e++;
}
}
//減法 -
else if(m==2)
{
if(fen1>fen2){
printf("%d/%d-%d/%d=",y,x,b,a);
scanf("%.2f",&c);
if (fen1-fen2==c) r++;
else{
printf("要細心呀!正确答案為:%.2f\n",fen1-fen2);
e++;
}
}
else{
t=fen1;
fen1=fen2;
fen2=t; //減數>被減數,則轉換
printf("%d/%d-%d/%d=",y,x,b,a);
scanf("%.2f",&c);
if (fen1-fen2==c) r++;
else{
printf("要細心呀!正确答案為:%.2f\n",fen1-fen2);
e++;
}
}
}
//乘法 *
else if(m==3)
{
int j=y*b,k=x*a; //分子or分母間的相乘
printf("%d/%d*%d/%d=",y,x,b,a);
scanf("%.2f",&c);
if (j*k==c) r++;
else{
printf("要細心呀!正确答案為:%d/%d\n",j,k);
e++;
}
}
//除法 /
else if(m==4)
{
int o=y*a,p=x*b; //相除等于乘于一個倒數
if(p!=0){ //防止分母=0,即p!=0
printf("(%d/%d)/(%d/%d)=",y,x,b,a);
scanf("%.2f",&c);
if (o*p==c) r++;
else{
printf("要細心呀!正确答案為:%d/%d\n",o,p);
e++;
}
}
}
else
printf("請輸入正确序号!\n"); //輸入其他數字,提示輸出錯誤
result=100*r/s; //得分
}
}//真分數結束
}
//成績顯示
printf("\n本次答題成績:%d\n\n",result);
printf("本次共有%d道題。\n回答正确有 %d 道\n回答錯誤有 %d 道\n",s,r,e);
//評語
if(result>60&&result<80)
{
printf("\n\n評語:還差一點就要滿分咯!繼續前進吧!");
}
else if(result>80&&result<100)
{
printf("\n\n評語:就差一丢丢了!再接再厲!");
}
else if(result==100)
{
printf("非常棒哦!為你點贊!");
}
else
{
printf("\n\n評語:要多加練習喲!你的潛力很大呢!");
}
}