程式的實現思路:
1、產生隨機的數字和運算子,這是組成題目的零件。
數字分為整數和真分數。需要注意的是,為了保證正確,真分數應該要檢查(1)分母不為0,(2)不能約分;同時為了避免計算結果是nan或∞的情況,出於程式簡單考慮,生成的整數都是正數。
運算子是簡單的四則運算。
2、呼叫1中的功能,生成題目並計算結果。
在這裡控制參與運算的數的個數是隨機的、某個位置生成整數還是分數也是隨機的。生成題目只需要簡單的迴圈呼叫就可以了。
計算題目結果使用轉化為運算子字首式的方法。因為開始寫的時候沒有考慮加括號,直接用函式返回值壓棧計算,再在這個基礎上加括號就不方便了。這裡也可以看見,乙個函式最好只實現乙個功能。
3、輸入輸出部分。
首先在螢幕列印乙個簡單的介面,然後迴圈地輸出題目、輸入結果、判斷正誤,最後給出統計結果。
以下是**和結果:
#include #include#include
#include
#define limit 30 //
分母的範圍
int n; //
運算數的範圍
int findcommonfactor(int p,int
q) }
return
commonfactor;
}float properfraction(char *s,int *i)
s[*i]='
('; //
存入字串
(*i)++;
if(p<10
)
else
s[*i]='/'
; (*i)++;
if(q<10
)
else
s[*i]=')'
; (*i)++;
return (float)p/(float
)q;}
int operator(char *s,int *i)
int decimal(char *s,int*i)
; //
暫存陣列
int j=0; //
cursor
int substitude=0; //
替身while(num==0
) num=rand()%n;
substitude=num;
while(num>0) //
反序按位拆開
for(j--;j>=0;j--) //
存入字串
return
substitude;
}int rank(char x,char
y)float question(char *s)
; //
結果棧int stacktop=1; //
符號棧頂
int resulttop=0; //
結果棧頂
float newnum=0; //
新生成數
while(len<2) //
參與運算的數至少有2個
len=rand()%11
;
for(j=0;j1;j++)
resulttop--; //
修正結果棧
stacktop--; //
彈出運算子
} stack[stacktop]=s[i-1]; //
新運算子入棧
stacktop++;
}dorf=rand()%2
;
if(dorf)
newnum=(float)decimal(s,&i);
else
newnum=properfraction(s,&i);
result[resulttop]=newnum; //
新數入棧
resulttop++;
while(stacktop>1) //
剩下的計算
resulttop--; //
修正結果棧
stacktop--; //
彈出運算子
} s[i]=0; //
題目結束
return result[0];}
float trans(char *input)
while(input[i]!=0 && input[i]!='/'
)
if(input[i]==0
) num=(float
)p;
else
if(q<=0
) num=0.0/0.0
;
else
}return
num;
}int main(void
) ; //
題目float result=0.0; //
題目結果
char input[50]=; //
輸入結果
int statistic=0; //
統計正確量
float inputnum=0; //
輸入數值
for(;i<80;i++) //
介面 printf("*"
); printf(
"\n歡迎使用算式生成器!\n");
printf(
"\n請輸入要求:\n");
printf(
"參與計算數的範圍:");
scanf("%d
",&n);
printf(
"生成算式的數量:");
scanf("%d
",&questionnum);
printf("\n
");for(i=0;i//
生成題目並判斷輸入是否正確
else
printf(
"error!\n\n");
}printf(
"correct entry: %d\n
",statistic); //
統計結果
printf("
accuracy: %.2f%%\n
",((float)statistic*100)/questionnum);
return0;
}
(第一周)小學四則運算
兩人組成員 黃興 謝孝淼 需求分析 1 選擇運算方法 四則運算或混合運算 2 生成兩組100以內隨機整數及運算符號,並進行運算 3 輸入結果與計算結果進行判斷 若結果一致,則回答正確,選擇繼續或結束答題 若結果不一致,則回答錯誤,並顯示正確答案,選擇繼續或結束答題 4 在選擇繼續或結束答題時,若連續...
軟體工程作業 小學四則運算
部落格班級 ahpu軟體工程 作業要求 實現小學四則運算 作業目標 熟練使用markdown編輯 學號3180701118 目錄8.答題並判斷正確 9.選擇運算方式選單 三 執行介面 四 作業小結 寫乙個能自動生成小學四則運算題目的程式,然後在此基礎上擴充套件 1 除了整數以外,還要支援真分數的四則...
現代軟體工程第一周作業
軟體過程與專案管理第一周作業 1.選一種你比較熟悉的軟體,點評它的優缺點,並描述此類軟體的發展歷史。答 wps 文字編輯系統 是一款辦公軟體。由 wps文字 wps wps演示三大模組組成。2 缺點 相容性較差。功能相對較弱。3 發展歷史 1988年 5月,求伯君憑一台 386電腦寫出 wps1.0...