軟體工程課後作業一之30道隨機四則運算程式2

來源:互聯網
上載者:User

標籤:

一、設計30道隨機四則運算程式要求: 1、題目避免重複;
2、可定製(數量/列印方式);
3、可以控制下列參數: 是否有乘除法、是否有括弧、 數值範圍、加減 有無負數、除法有無餘數、否支援分數 (真分數, 假分數, …)、是否 支援小數 (精確到多少位)、列印中每行的間隔可調整;

二、設計思路:
1.題目避免重複
我用3個數組將第一個數,第二個數和運算子(已用數字0-3表示加減乘除)存起來,之後用for迴圈將新產生的數組單元與以前產生的數組單元一一比較,有重複則將當前參數自減一重新產生新數組單元如此反覆迴圈即可;
2.可定製(數量/列印方式)
我用for迴圈結構可定製數量,在輸出算式時用\t來顯示列印方式;
3.可以控制以下參數:
a.是否有乘除法:用一個參數控制,當其為1時表示有乘除,0則表示沒有
b.數值範圍:借用函數rand()%rage即可,rage為最大數範圍
c.加減有無負數:與是否有乘除法一樣用一個參數控制,當其為1時表示結果有負數,0則表示沒有
d.除法有無餘數:與是否有乘除法一樣用一個參數控制,當其為1時表示結果有餘數,0則表示沒有
三、缺陷及遇到的問題總結:
在控制參數方面沒有做到題目要求的全部控制實現,比如有無括弧,是否支援小數分數及列印中每行的間隔可調整,還有就是當有餘數時列印格式不能整齊美觀,可看顯示

#include<iostream.h>#include<stdlib.h>#include<time.h>void display(int number,int column,int mul,int rage,int neg,int remainder)//先自訂輸出函數{int first[1000],second[1000],opt[1000];//分別代表第一個數、第二數和運算子for(int i=0;i<number;i++)//隨機兩個產生運算運算元{      int m=1;//避免題目重複並初始化first[i]=rand()%rage;//隨機產生第一個數second[i]=rand()%rage;//隨機產生第二個數if(mul==0)//沒有乘除法{opt[i]=rand()%2;//隨機產生0~1的數字,分別表示加減}if(mul==1){opt[i]=rand()%4;//隨機產生0~3的數字,分別表示加減乘除}for(int j=0;j<i;j++){if(first[j]==first[i]&&second[j]==second[i]&&opt[j]==opt[i])//比較新產生的算式與原來的是否重複{i=i-1;m=0;}}while(m)//若算式都不重複則輸出{switch(opt[i]){case 0:cout<<first[i]<<"+"<<second[i]<<"=";break;case 1:if(neg==0)//0表示減法結果不允許出現負數,1表示允許出現負數{int temp;//中間變數if(first[i]<second[i]){temp=first[i];first[i]=second[i];second[i]=temp;}cout<<first[i]<<"-"<<second[i]<<"=";break;}else{cout<<first[i]<<"-"<<second[i]<<"=";break;}case 2:cout<<first[i]<<"*"<<second[i]<<"=";break;case 3:if(second[i]==0)//避免分母為零的處理{   i=i-1;break;}else{if(remainder==0)//0表示除法不允許餘數{if(first[i]%second[i]==0){cout<<first[i]<<"/"<<second[i]<<"=";break;}else{i=i-1;break;}}else if(remainder==1)//1表示除法允許有餘數{if(first[i]%second[i]!=0){cout<<first[i]<<"/"<<second[i]<<"=";break;}else{i=i-1;break;}}}}if((i+1)%column==0){cout<<endl;}else{cout<<"\t";}break;//跳出迴圈}}}void main(){srand((unsigned) time(NULL));//初始化隨機數發生器,使得每次運行產生的隨機數不同int number;//定製題目數量int column;//控制輸出的列數int mul;//是否需要乘除法int rage;//控制數值範圍int neg;//控制減法結果是否允許有負數int remainder;//控制除法是否允許有餘數cout<<"請輸入要列印的題目數量:";cin>>number;cout<<endl;cout<<"請輸入要輸出的列數(1-10):";cin>>column;cout<<endl;    cout<<"請輸入正整數的數值範圍(即最大數):";cin>>rage;cout<<endl;cout<<"是否有乘除法(0表示沒有;1表示有):";cin>>mul;cout<<endl;if(mul==1)//有乘除法時繼續選擇是否除法有無餘數,否則沒必要選擇除法有無餘數{cout<<"除法有無餘數(0表示沒有;1表示有):";    cin>>remainder;}else{remainder=1;}cout<<endl;cout<<"減法有無負數(0表示沒有;1表示有):";cin>>neg;cout<<endl;display(number,column,mul,rage,neg,remainder);//調用函數}

  四、各種情況相應如下:

 

 五、日誌表

軟體工程課後作業一之30道隨機四則運算程式2

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.