四則運算

  • 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編寫,程式碼有重複繁瑣冗餘,需要再加以改進。