题目:编写一段程序描述农场里的猫 Cat,每次出生一只小猫,就将猫放到围栏里,这个围栏可以容纳7 只猫:
1.每只小猫出生时都会随机赋予一种皮毛颜色 (black/gray/brown),还将被随机赋予一
种眼睛颜色(green/blue/brown )。对于这两种属性,都要有get 和set 方法。
2.将猫放到围栏中时,某些组合会引起争斗,如果灰猫比棕色猫多,会打架;如果有一只
黑色棕眼睛的猫,同时至少一直黑色绿眼睛猫和至少一只黑色蓝眼睛 猫,也会发生争斗
,编写check 的非成员函数确定猫是否会打架。
要求:随机产生猫,输出每次产生的猫的相应属性以及猫最后是否会打架。
#include <iostream>
#include <cstdlib>
#include <ctime>
#define catnum 7
/*Cat 2.0 updated by Chen on 28th May*/
using namespace std;
int BlackFur = 0;
int GrayFur = 0;
int BrownFur = 0; //统计各色毛发猫的数量;
int GreenEye = 0;
int BlueEye = 0;
int BrownEye = 0; //统计黑色毛发不同眼睛颜色猫的数量;
class Cat{
private:
int furc;
int eyec;
public:
void getcat();
string setfur();
string seteye(int i);
void show();
};
void Cat::getcat(){
furc = rand()%3;
eyec = rand()%3;
}
string Cat::setfur(){
string fur;
switch(furc){ //直接调用furc变量避免多次调用rand()而出错;
case 0:
fur = "black";
BlackFur++;
seteye(1); //产生黑色毛发则对眼睛颜色计数;
break;
case 1:
fur = "gray";
GrayFur++;
break;
case 2:
fur = "brown";
BrownFur++;
break; //产生不同毛发的猫对毛发计数;
}
return fur;
}
string Cat::seteye(int i){
string eye;
switch(eyec){ //直接调用eyec变量避免多次调用rand()而出错;
case 0:
eye = "green";
if (i == 1) //若为黑色毛发,调用seteye(1)对眼睛颜色计数;
GreenEye++; //调用seteye(0)则只返回变量不计数;
break;
case 1:
eye = "blue";
if (i == 1)
BlueEye++;
break;
case 2:
eye = "brown";
if (i == 1)
BrownEye++;
break;
}
return eye;
}
void Cat::show(){
cout<<"This cat has "<<seteye(0)<<" eyes and "<<setfur()<<" fur."<<endl;
}
void Check(){
int peace = 0; //判断是否打架 满足一个条件则+1;
if (GrayFur>BrownFur){
cout<<endl<<"**灰猫和棕猫会打架**"<<endl<<endl;
peace++;
}
if (BrownEye>0 && GreenEye>0 && BlueEye>0){
cout<<endl<<"**黑猫会互相打架**"<<endl<<endl;
peace++;
}
if (peace == 0){ //两个条件都不满足 则不打架
cout<<endl<<"**它们会和平相处**"<<endl;
}
}
int main(){
srand(time(NULL)); //设置随机数种子;
Cat cat[catnum];
for(int i=0;i<catnum;i++){
cat[i].getcat();
cat[i].show();
};
cout<<endl;
cout<<"黑猫: "<<BlackFur<<endl;
cout<<"灰猫: "<<GrayFur<<endl;
cout<<"棕猫: "<<BrownFur<<endl<<endl;
cout<<"-----在黑猫中-----"<<endl<<endl; //列出统计数据;
cout<<"绿眼: "<<GreenEye<<endl;
cout<<"蓝眼: "<<BlueEye<<endl;
cout<<"棕眼: "<<BrownEye<<endl;
Check(); //判断是否打架;
return 0;
}
良好代码风格的开始;