日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

个人作业五:四则运算二

發(fā)布時(shí)間:2023/11/29 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 个人作业五:四则运算二 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

四則運(yùn)算2

一、設(shè)計(jì)思路:

1、題目避免重復(fù):

(1)利用系統(tǒng)時(shí)間來(lái)產(chǎn)生隨機(jī)數(shù),重復(fù)率會(huì)降低。

(2)建立鏈表,逐個(gè)判斷。可讀取寫入文件。

2、可定制(數(shù)量/打印方式):

(1)格式有默認(rèn)值;

(2)可以選擇重新設(shè)置分幾列和每行的間隔。打印方式用%取余來(lái)實(shí)現(xiàn)分列輸出。

3、可以控制參數(shù):

(1)這些參數(shù)都有默認(rèn)值;

(2)出題之前可以選擇重新設(shè)置某一個(gè)或多個(gè)參數(shù);

(3)是否有乘除法/括號(hào)/負(fù)數(shù)/余數(shù)/支持分?jǐn)?shù)/支持小數(shù):用戶輸入1/0表示是/否;

數(shù)值范圍、真分?jǐn)?shù)、假分?jǐn)?shù)、精確到幾位小數(shù)、每行的間隔:由用戶輸入決定;

(4)參數(shù)值得記錄借鑒老師的方法,用數(shù)組來(lái)存儲(chǔ);用if-else來(lái)確定最終的格式。

是否有乘除法:判斷數(shù)組中的參數(shù)是1還是0,若為0,則判斷表示符號(hào)的隨機(jī)數(shù)是不是乘除,是的話跳過(guò);

數(shù)值范圍:由rand()%(b-a+1)+a實(shí)現(xiàn)范圍為a~b的隨機(jī)數(shù);

加減有無(wú)負(fù)數(shù):判斷數(shù)組中的參數(shù)是1還是0,若為0,則判斷前一個(gè)數(shù)是否小于后一個(gè)數(shù),是的話跳過(guò);

每行的間隔:根據(jù)數(shù)組中的數(shù),循環(huán)cout<<endl;

是否有余數(shù):判斷數(shù)組中的參數(shù)是1還是0,若為0,用%來(lái)判斷

二、源代碼

(1)

// 四則運(yùn)算2.cpp : Defines the entry point for the console application.

// 袁佩佩 信1201-1班 20122785 2015/3/15

#include "stdafx.h"

#include "iostream.h"

#include "stdlib.h"

#include "time.h"

#include "Caculation.h"

#include "iomanip.h"

?

//******重新生成算術(shù)題******

void ReBuild(Caculation &Q)

{

?????? if(para[4]==1)

?????? ?????? Q.sign=rand()%4;

?????? else

?????? ?????? Q.sign=rand()%2;

?????? Q.num1=rand()%(para[6]-para[5]+1)+para[5];

?????? Q.num2=rand()%(para[6]-para[5]+1)+para[5];

}

//*****輸出函數(shù)******

void Display(LinkC C,Caculation &Q)

{

?????? int temp,count=0;?????? ?????? ?????? ?????? ?????? ?????? ?????? ?????? ?????? //count記錄重新生成題目的次數(shù)

?????? for(int i=1;i<=para[1];i++)

?????? {

?????? ?????? cout<<"("<<i<<")";

?????? ?????? if(para[4]==1)

?????? ?????? ?????? Q.sign=rand()%4;????? ?????? ?????? ?????? ?????? ?????? ?????? //有乘除法

?????? ?????? else

?????? ?????? ?????? Q.sign=rand()%2;????? ?????? ?????? ?????? ?????? ?????? ?????? //沒(méi)有乘除法

?????? ?????? Q.num1=rand()%(para[6]-para[5]+1)+para[5];??? ?????? ?????? ?????? ?????? ?????? //隨機(jī)的(下限~上限)以內(nèi)的整數(shù)

?????? ?????? Q.num2=rand()%(para[6]-para[5]+1)+para[5];

RB: ?????? ReBuild(Q); ?????? ?????? ?????? ?????? ?????? ?????? ?????? ?????? ?????? //檢查是否有出過(guò)的題目

?????? ?????? if(count>((para[6]-para[5]+1)*(para[6]-para[5]+1)*100))

?????? ?????? {

?????? ?????? ?????? cout<<endl<<"該難度的題目已出完,請(qǐng)更改出題設(shè)置!"<<endl;

?????? ?????? ?????? break;

?????? ?????? }

?????? ?????? switch(Q.sign)

?????? ?????? {

?????? ?????? ?????? case 0:

?????? ?????? ?????? ?????? if(ExistQues(C,Q))

?????? ?????? ?????? ?????? {

?????? ?????? ?????? ?????? ?????? count++;

?????? ?????? ?????? ?????? ?????? goto RB;

?????? ?????? ?????? ?????? }

?????? ?????? ?????? ?????? cout<<Q.num1<<"+"<<Q.num2<<"="<<setw(5);

?????? ?????? ?????? ?????? break;

?????? ?????? ?????? case 1:

?????? ?????? ?????? ?????? if((para[7]==0)&&(Q.num1<Q.num2))

?????? ?????? ?????? ?????? {???? ?????? ?????? ?????? ?????? ?????? ?????? ?????? ?????? ?????? //若為負(fù)數(shù),則交換

?????? ?????? ?????? ?????? ?????? ?????? temp=Q.num1;

?????? ?????? ?????? ?????? ?????? ?????? Q.num1=Q.num2;

?????? ?????? ?????? ?????? ?????? ?????? Q.num2=temp;

?????? ?????? ?????? ?????? }

?????? ?????? ?????? ?????? if(ExistQues(C,Q))

?????? ?????? ?????? ?????? {

?????? ?????? ?????? ?????? ?????? count++;

?????? ?????? ?????? ?????? ?????? goto RB;

?????? ?????? ?????? ?????? }

?????? ?????? ?????? ?????? cout<<Q.num1<<"-"<<Q.num2<<"="<<setw(5);break;

?????? ?????? ?????? case 2:

?????? ?????? ?????? ?????? if(ExistQues(C,Q))

?????? ?????? ?????? ?????? {

?????? ?????? ?????? ?????? ?????? count++;

?????? ?????? ?????? ?????? ?????? goto RB;

?????? ?????? ?????? ?????? }

?????? ?????? ?????? ?????? cout<<Q.num1<<"*"<<Q.num2<<"="<<setw(5);break;

?????? ?????? ?????? case 3:

?????? ?????? ?????? ?????? while(Q.num2==0)

?????? ?????? ?????? ?????? ?????? Q.num2=rand()%(para[6]-para[5]+1)+para[5];

?????? ?????? ?????? ?????? if(!para[8])

?????? ?????? ?????? ?????? {

?????? ?????? ?????? ?????? ?????? while((Q.num1%Q.num2)!=0||Q.num2==0)

?????? ?????? ?????? ?????? ?????? {???? ?????? ?????? ?????? ?????? ?????? ?????? ?????? ?????? ?????? //重新生成

?????? ?????? ?????? ?????? ?????? ?????? Q.num1=rand()%(para[6]-para[5]+1)+para[5];

?????? ?????? ?????? ?????? ?????? ?????? Q.num2=rand()%(para[6]-para[5]+1)+para[5];

?????? ?????? ?????? ?????? ?????? }

?????? ?????? ?????? ?????? }

?????? ?????? ?????? ?????? if(ExistQues(C,Q))

?????? ?????? ?????? ?????? {

?????? ?????? ?????? ?????? ?????? count++;

?????? ?????? ?????? ?????? ?????? goto RB;

?????? ?????? ?????? ?????? }

?????? ?????? ?????? ?????? cout<<Q.num1<<"/"<<Q.num2<<"="<<setw(5);break;

?????? ?????? }

?????? ?????? InsertQues(C,Q);

?????? ?????? if(i%para[2]==0) ?????? ?????? ?????? ?????? ?????? ?????? ?????? ?????? //一行打印完規(guī)定列數(shù),換行

?????? ?????? ?????? for(int j=0;j<=para[3];j++)

?????? ?????? ?????? ?????? cout<<endl;

?????? }

?????? cout<<endl<<endl;

}

//*****判斷難度*****

void YesOrNo(int para)

{

?????? if(para)

?????? ?????? cout<<"是";

?????? else

?????? ?????? cout<<"否";

}

//*****查看設(shè)置*****

void ShowSetting()

{

?????? system("cls");

?????? cout<<"\t/*************四則運(yùn)算出題系統(tǒng)*************/"<<endl;

?????? cout<<"\t題目數(shù)量:"<<para[1]<<"個(gè)\t\t打印列數(shù):"<<para[2]<<"列"<<endl;

?????? cout<<"\t每行間隔:"<<para[3]<<"行\(zhòng)t\t是否有乘除法:";YesOrNo(para[4]);cout<<endl;

?????? cout<<"\t數(shù)值范圍下限:"<<para[5]<<"\t\t數(shù)值范圍上限:"<<para[6]<<endl;

?????? cout<<"\t是否有負(fù)數(shù):";YesOrNo(para[7]);cout<<"\t\t是否有余數(shù):";YesOrNo(para[8]);cout<<endl;

?????? cout<<"\t/******************************************/"<<endl;

}

//*****設(shè)置打印方式*****

void SetPrint()

{

?????? system("cls");

?????? char move1;

?????? cout<<"\t/*************設(shè)置打印方式*************/"<<endl;

?????? cout<<"\t????????? 0.設(shè)置打印列數(shù)("<<para[2]<<"列)"<<endl;

?????? cout<<"\t????????? 1.設(shè)置每行間隔("<<para[3]<<"行)"<<endl;

?????? cout<<"\t????????????? 2.返回主菜單"<<endl;

?????? cout<<"\t/**************************************/"<<endl;

?????? cout<<"請(qǐng)選擇后續(xù)操作(0~2):";

?????? cin>>move1;

?????? while(move1<'0'||move1>'2')

?????? {

?????? ?????? cout<<"錯(cuò)誤!請(qǐng)正確輸入操作序號(hào)(0~2):";

?????? ?????? cin>>move1;

?????? }

?????? switch(move1)

?????? {

?????? ?????? case '0':

reset2:??? ?????? cout<<"新的打印列數(shù)(建議7列以內(nèi)):";

?????? ?????? ?????? cin>>para[2];

?????? ?????? ?????? if(para[2]<0)

?????? ?????? ?????? {

?????? ?????? ?????? ?????? cout<<"出錯(cuò)!請(qǐng)重新輸入!"<<endl;

?????? ?????? ?????? ?????? goto reset2;

?????? ?????? ?????? }

?????? ?????? ?????? break;

?????? ?????? case '1':

reset3:??? ?????? cout<<"新的間隔行數(shù):";

?????? ?????? ?????? cin>>para[3];

?????? ?????? ?????? if(para[3]<0)

?????? ?????? ?????? {

?????? ?????? ?????? ?????? cout<<"出錯(cuò)!請(qǐng)重新輸入!"<<endl;

?????? ?????? ?????? ?????? goto reset3;

?????? ?????? ?????? }

?????? ?????? ?????? break;

?????? ?????? case '2':break;

?????? }

}

//*****判斷輸入正確*****

void Reset(int i)

{

?????? do

?????? {

?????? ?????? cout<<"請(qǐng)重新設(shè)置(是1/否0):";

?????? ?????? cin>>para[i]; ?????? ?????? ?????? //此處輸入字符出錯(cuò),但沒(méi)解決

?????? }while(para[i]!=0&&para[i]!=1);

}

//*****設(shè)置題目難度*****

void SetLevel()

{

?????? system("cls");

?????? char move2;

?????? cout<<"\t/*************設(shè)置題目難度*************/"<<endl;

?????? cout<<"\t??????????? 0.是否有乘除法(";YesOrNo(para[4]);cout<<")"<<endl;

?????? cout<<"\t??????????? 1.數(shù)值范圍("<<para[5]<<"~"<<para[6]<<")"<<endl;

?????? cout<<"\t??????????? 2.是否有負(fù)數(shù)(";YesOrNo(para[7]);cout<<")"<<endl;

?????? cout<<"\t??????????? 3.是否有余數(shù)(";YesOrNo(para[8]);cout<<")"<<endl;

?????? cout<<"\t????????????? 4.返回主菜單"<<endl;

?????? cout<<"\t/**************************************/"<<endl;

?????? cout<<"請(qǐng)選擇后續(xù)操作(0~4):";

?????? cin>>move2;

?????? while(move2<'0'||move2>'4')

?????? {

?????? ?????? cout<<"錯(cuò)誤!請(qǐng)正確輸入操作序號(hào)(0~4):";

?????? ?????? cin>>move2;

?????? }

?????? switch(move2)

?????? {

?????? ?????? case '0':Reset(4);break;

?????? ?????? case '1':? ?????? ?????? ?????? ?????? ?????? ?????? ?????? //此處若輸入字符,則出錯(cuò)

reset1:??? ?????? cout<<"新的數(shù)值下限:";????? ?????? ?????? ?????? //但沒(méi)找到解決方法

?????? ?????? ?????? cin>>para[5];

?????? ?????? ?????? cout<<"新的數(shù)值上限:";

?????? ?????? ?????? cin>>para[6];

?????? ?????? ?????? if(para[5]>=para[6])

?????? ?????? ?????? {

?????? ?????? ?????? ?????? cout<<"出錯(cuò)!請(qǐng)重新輸入數(shù)值范圍!"<<endl;

?????? ?????? ?????? ?????? goto reset1;

?????? ?????? ?????? }

?????? ?????? ?????? break;

?????? ?????? case '2':Reset(7);break;

?????? ?????? case '3':Reset(8);break;

?????? ?????? case '4':break;

?????? }

}

//****主頁(yè)面*****

void MainMenu(LinkC &C,Caculation &Q)

{

?????? char move,save;

?????? cout<<"\t/*************四則運(yùn)算出題系統(tǒng)*************/"<<endl;

?????? cout<<"\t???????????????? 0.開始出題"<<endl;

?????? cout<<"\t?????????????? 1.設(shè)置出題數(shù)量"<<endl;

?????? cout<<"\t?????????????? 2.設(shè)置打印方式"<<endl;

?????? cout<<"\t?????????????? 3.設(shè)置題目難度"<<endl;

?????? cout<<"\t?????????????? 4.查看當(dāng)前設(shè)置"<<endl;

?????? cout<<"\t???????????????? 5.退出系統(tǒng)"<<endl;

?????? cout<<"\t/******************************************/"<<endl;

?????? cout<<"請(qǐng)選擇后續(xù)操作(0~5):";

?????? cin>>move;

?????? while(move<'0'||move>'5')

?????? {

?????? ?????? cout<<"錯(cuò)誤!請(qǐng)正確輸入操作序號(hào)(0~5):";

?????? ?????? cin>>move;

?????? }

?????? switch(move)

?????? {

?????? ?????? case '0':Display(C,Q);break;

?????? ?????? case '1':

reset4:??? ?????? cout<<"請(qǐng)?jiān)O(shè)置出題數(shù)量(建議100道以內(nèi)):";

?????? ?????? ?????? cin>>para[1];

?????? ?????? ?????? if(para[1]<=0)

?????? ?????? ?????? {

?????? ?????? ?????? ?????? cout<<"出錯(cuò)!請(qǐng)重新輸入!"<<endl;

?????? ?????? ?????? ?????? goto reset4;

?????? ?????? ?????? }

?????? ?????? ?????? break;

?????? ?????? case '2':SetPrint();break;

?????? ?????? case '3':SetLevel();break;

?????? ?????? case '4':ShowSetting();break;

?????? ?????? case '5':

?????? ?????? ?????? cout<<"是否保存出題記錄(是1/否0):";

?????? ?????? ?????? cin>>save;

?????? ?????? ?????? while(save!='1'&&save!='0')

?????? ?????? ?????? {

?????? ?????? ?????? ?????? cout<<"出錯(cuò)!請(qǐng)正確輸入(是1/否0):";

?????? ?????? ?????? ?????? cin>>save;

?????? ?????? ?????? }

?????? ?????? ?????? if(save=='1')

?????? ?????? ?????? ?????? WriteQues(C);

?????? ?????? ?????? cout<<"感謝您的使用,再見(jiàn)!"<<endl;

?????? ?????? ?????? para[0]=0;break;

?????? }

}

?

int main(int argc, char* argv[])

{

?????? srand((unsigned)time(NULL));????? //srand()函數(shù)產(chǎn)生一個(gè)以當(dāng)前時(shí)間開始的隨機(jī)種子

?????? LinkC Cacu;

?????? Caculation ques;

?????? InitList(Cacu);

?????? ReadQues(Cacu);

?????? while(para[0])

?????? {

?????? ?????? system("cls");

?????? ?????? MainMenu(Cacu,ques);

?????? ?????? system("pause");

?????? }

?????? return 0;

}

(2)

#include "iostream.h"

#include "fstream.h"

//0退出、1出題數(shù)量、2打印列數(shù)、3每行間隔、4乘除、5數(shù)值范圍下限、6數(shù)值范圍上限、7負(fù)數(shù)、8余數(shù)、9出過(guò)的題目數(shù)

int para[10]={1,30,3,0,0,0,5,0,0,0};????? //默認(rèn)參數(shù)

?

//*****四則算術(shù)題的數(shù)據(jù)結(jié)構(gòu)*****

typedef struct

{

?????? int num1;

?????? int num2;

?????? int sign;

}Caculation;

typedef struct CNode?????? ?????? ?????? ?????? ?????? //結(jié)點(diǎn)

{

?????? Caculation ques;

?????? struct CNode * next;

}CNode,*LinkC;

//******題目初始化******

void InitList(LinkC &C)

{

?????? C=new CNode;

?????? C->next=NULL;

}

//******添加題目信息******

void InsertQues(LinkC &C,Caculation Q)

{???? ?????? ?????? ?????? ?????? ?????? ?????? ?????? ?????? ?????? //尾插入

?????? LinkC tail,temp;

?????? tail=C;

?????? while(tail&&tail->next!=NULL)

?????? ?????? tail=tail->next;

?????? temp=new CNode;

?????? temp->ques=Q;

?????? temp->next=NULL;

?????? tail->next=temp;

?????? tail=temp;

?????? para[9]++;

}

//******判斷題目存在******

int ExistQues(LinkC C,Caculation Q)

{

?????? LinkC temp;

?????? temp=C->next;

?????? while(temp)

?????? {

?????? ?????? if((temp->ques.num1==Q.num1)&&(temp->ques.num2==Q.num2)&&(temp->ques.sign==Q.sign))

?????? ?????? ?????? return 1; ?????? ?????? ?????? ?????? //當(dāng)兩個(gè)數(shù)字和算符與鏈表中的一樣,則存在

?????? ?????? else

?????? ?????? ?????? temp=temp->next;

?????? }

?????? return 0;

}

//******讀取出過(guò)的問(wèn)題******

void ReadQues(LinkC &C)

{

?????? LinkC temp;

?????? ifstream infile("question.txt");

?????? for(int i=0;i<10;i++)?? ?????? ?????? ?????? //讀取參數(shù)表

?????? ?????? infile>>para[i];

?????? for(i=0;i<para[9];i++) ?????? ?????? ?????? //讀取出過(guò)的題目

?????? {

?????? ?????? temp=new CNode;

?????? ?????? infile>>temp->ques.num1;

?????? ?????? infile>>temp->ques.num2;

?????? ?????? infile>>temp->ques.sign;

?????? ?????? temp->next=NULL;

?????? }

}

//******寫入文件******

void WriteQues(LinkC C)

{

?????? LinkC temp;

?????? ofstream outfile("question.txt");

?????? if(!outfile)

?????? {

?????? ?????? cout<<"文件存儲(chǔ)失敗!"<<endl;

?????? ?????? exit(0);

?????? }

?????? for(int i=0;i<10;i++)

?????? ?????? outfile<<para[i]<<" ";

?????? for(temp=C->next;temp;temp=temp->next)

?????? {

?????? ?????? outfile<<temp->ques.num1<<" ";

?????? ?????? outfile<<temp->ques.num2<<" ";

?????? ?????? outfile<<temp->ques.sign<<" ";

?????? }

}

三、運(yùn)行結(jié)果

第一次使用時(shí),程序默認(rèn)10以內(nèi)四則運(yùn)算10道題,有負(fù)數(shù)余數(shù),分三列打印,每行間隔一行。見(jiàn)下圖。

? ? ? ? ? ? ? ? ? ? ? ? ?

?? ? ? ? ? ? ? 對(duì)參數(shù)進(jìn)行一些修改。見(jiàn)下圖。

?

?

? ? ? ? ? ? ? ? ? ? ? ? ? 對(duì)打印方式進(jìn)行修改。見(jiàn)下圖。

?

?

對(duì)題目的一些設(shè)置

?

?

退出系統(tǒng),可選擇保存出過(guò)的題目和參數(shù)設(shè)置。

?

?后來(lái)經(jīng)過(guò)我的代碼優(yōu)化,當(dāng)某種類型的題目全部都出過(guò)以后,會(huì)提示。

首先當(dāng)前設(shè)置如下。

?

連續(xù)出題多次發(fā)現(xiàn)

?

四、遇到的困難

??設(shè)計(jì)思想里已經(jīng)寫了,編寫程序的時(shí)候,我是漸進(jìn)式的自頂向下的開發(fā)的。但是我不太清楚編寫代碼時(shí),該不該用自頂向下。因?yàn)槲冶容^注重細(xì)節(jié),先寫框架 再寫核心往往會(huì)導(dǎo)致編出來(lái)的程序虎頭蛇尾。而且這次我是最后才加上的數(shù)據(jù)結(jié)構(gòu),以至于之前寫的變量名、參數(shù)等等都要變更,有些麻煩。以后我會(huì)訓(xùn)練自己自底 向上寫代碼的能力。我有個(gè)壞毛病就是,邊寫邊思考,有時(shí)候這個(gè)問(wèn)題還差一點(diǎn)就解決了,結(jié)果就又扯到另一個(gè)問(wèn)題上了。我在與其他同學(xué)交流的過(guò)程中,也了解到“下手”之前,必須要先把整個(gè)程序在心里構(gòu)建的差不多了,再敲代碼。多和編程能力強(qiáng)或編程習(xí)慣好的同學(xué)交流,多向他們學(xué)習(xí),也是受益匪淺啊。

? 最后就是,數(shù)據(jù)結(jié)構(gòu)部分我是借鑒之前數(shù)據(jù)結(jié)構(gòu)小學(xué)期自己做的員工管理系統(tǒng)來(lái)編寫的,回憶起了鏈表以及相關(guān)操作的知識(shí)。

?

轉(zhuǎn)載于:https://www.cnblogs.com/lrhan/p/5609554.html

總結(jié)

以上是生活随笔為你收集整理的个人作业五:四则运算二的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。