四則運算
- 2020 年 11 月 7 日
- 筆記
部落格班級 | AHPU軟體工程 |
---|---|
作業要求 | 實現小學四則運算並優化 |
作業目標 | 熟練掌握程式碼編寫 |
學號 | 3180701209 |
作業目標
寫一個能自動生成小學四則運算題目的程式,然後在此基礎上擴展:
1)除了整數以外,還要支援真分數的四則運算,例如:1/6+1/8=7/24
2)程式要求能處理用戶的輸入,判斷對錯,累積分數
3)程式支援可以由用戶自行選擇加、減、乘、除運算
4)使用-n參數控制生成題目的個數,例如Myapp.exe -n 10,將生成10個題目
程式碼
定義變數
Scanner input=new Scanner(System.in);
double count;
int answer,answer1,answer2;
int a;//運算式第一個數字
int b;//運算式第二個數字
int sum;
int[] data=new int[10];//結果數組
int[] data1=new int[10];
int[] data2=new int[10];
String[] data3=new String[30];//運算符數組
int m=10;
int num,num1,num2,num3;
加法
public void add() {
System.out.println("選擇你要做題數目");
Scanner intput=new Scanner(System.in);
num=intput.nextInt();
int i;
for(i=0;i<num/2;i++) {
b=(int) Math.round(Math.random()*10);
a=(int) Math.round(Math.random()*10);
sum=a+b;
data[i]=sum;
data1[i]=a;
data2[i]=b;
data3[i]="+";
}
int a=num-i;
int b=i;
for(;i<b+2*a-1;i+=2)
{
data1[i]=(int) Math.round(Math.random()*10);
data1[i+1]=(int) Math.round(Math.random()*10)+data1[1];
data2[i]=(int) Math.round(Math.random()*10);
data2[i+1]=(int) Math.round(Math.random()*10)+data1[1];
data[i]=(data1[i]*data2[i+1])+(data1[i+1]*data2[i]);
data[i+1]=data1[i+1]*data2[i+1];
int num=data[i]<data[i+1]? data[i]:data[i+1];
int maxb=1;
for (int k = num; k >=2; k--) {
if (data[i]%k==0 && data[i+1]%k==0) {
maxb*=k;
data[i]=data[i]/k;
data[i+1]=data[i+1]/k;
}
}
}
int j;
for(j=0;j<num/2;j++)
{
System.out.print(data1[j]+"+");
System.out.print(data2[j]);
System.out.print("=");
answer1=input.nextInt();
if(answer1==data[j])
{
System.out.println("恭喜答案正確");
count++;
}else {
System.out.println("答案錯誤");
}
}
b=j;
for(;j<b+2*a-1;j+=2)
{
System.out.print(data1[j]+"/"+data1[j+1]+"+"+data2[j]+"/"+data2[j+1]+"=");
answer1=input.nextInt();
System.out.print("/");
answer2=input.nextInt();
if(answer1==data[j]&&answer2==data[j+1])
{
System.out.println("恭喜答案正確");
count++;
}else {
System.out.println("答案錯誤");
}
}
System.out.println("一共答對"+count+"道題目");
}
減法
public void min() {
System.out.println("選擇你要做題數目");
Scanner intput=new Scanner(System.in);
int num1=intput.nextInt();
if(num1<m-num) {
for(int i=0;i<num1;i++) {
a=(int)(Math.random()*100);
b=(int)(Math.random()*100);
sum=a-b;
data[i]=sum;
data1[i]=a;
data2[i]=b;
data3[i]="-";
}
for(int i=0;i<num1;i++)
{
System.out.print(data1[i]+"-");
System.out.print(data2[i]);
System.out.print("=");
answer=input.nextInt();
if(answer==data[i]) {
System.out.println("恭喜答案正確");
count++;
}else {
System.out.println("答案錯誤");
}
if(i==num1-1) {
System.out.println("一共答對"+count+"道題目");
}
}
}
}
乘法
public void mult() {
System.out.println("選擇你要做題數目");
Scanner intput=new Scanner(System.in);
int num2=intput.nextInt();
if(num2<m-num-num1) {
for(int i=0;i<num2;i++){
a=(int)(Math.random()*8+1);
b=(int)(Math.random()*8+1);
sum=a*b;
data[i]=sum;
data1[i]=a;
data2[i]=b;
data3[i]="*";
}
for(int i=0;i<num2;i++)
{
System.out.print(data1[i]+"*");
System.out.print(data2[i]);
System.out.print("=");
answer=input.nextInt();
if(answer==data[i]) {
System.out.println("恭喜答案正確");
count++;
}else {
System.out.println("答案錯誤");
}
if(i==num2-1) {
System.out.println("一共答對"+count+"道題目");
}
}
}
}
除法
public void division() {
System.out.println("選擇你要做題數目");
Scanner intput=new Scanner(System.in);
int num3=intput.nextInt();
if(num3<m-num-num1-num2) {
for(int i=0;i<num3;i++){
a=(int)(Math.random()*10);
b=(int)(Math.random()*9+1);
sum=a/b;
data[i]=sum;
data1[i]=a;
data2[i]=b+1;
data3[i]="/";
}
for(int i=0;i<num3;i++)
{
int yushu=0;
System.out.print(data1[i]+"/");
System.out.print(data2[i]);
System.out.print("=");
answer=input.nextInt();
System.out.println("是否存在餘數,存在:1 不存在:0");
int choice=input.nextInt();
if(choice==1) {
System.out.println("請輸入餘數:");
yushu=input.nextInt();
}
if(answer==data[i]&&yushu==(data1[i]%data2[i])) {
System.out.println("恭喜答案正確");
count++;
}else {
System.out.println("答案錯誤");
}
if(i==num3-1) {
System.out.println("一共答對"+count+"道題目");
}
}
}
}
選擇運算方式菜單
public void menu() {
System.out.println("1.加法");
System.out.println("2.減法");
System.out.println("3.乘法");
System.out.println("4.除法");
System.out.println(" 請輸入:");
String choice1=input.next();
switch(choice1) {
case "1":
add();
break;
case "2":
min();break;
case "3":
mult();break;
case "4":
division();break;
default:
System.out.println("輸入錯誤,請從新輸入");
break;
}
}
主方法
public static void main(String[] args) {
// TODO Auto-generated method stub
guocheng h=new guocheng();
int f=1;
while(f==1)
{
h.menu();
System.out.println("請問是否繼續輸入是,是:1 否:0");
Scanner intput=new Scanner(System.in);
f=intput.nextInt();
}
}
運行截圖
作業小結
(1)psp表格
psp2.1 | 任務內容 | 計劃完成需要的時間(min) | 實際完成需要的時間(min) |
---|---|---|---|
Planning | 計劃 | 100 | 80 |
Development | 開發 | 200 | 250 |
Analysis | 需求分析(包括學習新技術) | 20 | 40 |
Design Spec | 生成設計文檔 | 30 | 50 |
Design Review | 設計複審 | 5 | 10 |
Coding Standard | 程式碼規範 | 3 | 5 |
Design | 具體設計 | 10 | 12 |
Coding | 具體編碼 | 80 | 90 |
Code Review | 程式碼複審 | 60 | 70 |
Test | 測試(自我測試,修改程式碼,提交修改) | 10 | 15 |
Reporting | 報告 | 9 | 6 |
Test Report | 測試報告 | 3 | 2 |
Size Measurement | 計算工作量 | 3 | 2 |
Postmortem & Process Improvement Plan | 事後總結,並提出過程改進計劃 | 5 | 3 |
(2)心得和經驗
了解使用markdow編輯器來編寫,嘗試使用java編寫,程式碼有重複繁瑣冗餘,需要再加以改進。