永发信息网

C++问题,是根据条件寻找对象的函数,但是出错了!

答案:5  悬赏:0  手机版
解决时间 2021-04-03 05:20
  • 提问者网友:战魂
  • 2021-04-02 15:15
C++问题,是根据条件寻找对象的函数,但是出错了!
最佳答案
  • 五星知识达人网友:鱼忧
  • 2021-04-02 16:13
第一个问题看下面修改注释地方
class Human
{
public:
int no;
char study[50],expect[50];
float height,weight;
Human(int n,float h,float w,char s[50],char e[50])
{
no=n;//这三个值赋反了
height=h;//这三个值赋反了
weight=w;//这三个值赋反了
strcpy_s(study,s);
strcpy_s(expect,e);
}
};
class Man:public Human
{
public:
Man *next;
Man(int n,float h,float w,char *s,char *e):Human(n,h,w,s,e)
{
no=n;//这三个值赋反了
height=h;//这三个值赋反了
weight=w;//这三个值赋反了
strcpy_s(study,s);
strcpy_s(expect,e);
next=NULL;
}
};

class Woman:public Human
{
public:
Woman *next;
Woman(int n,float h,float w,char *s,char *e):Human(n,h,w,s,e)
{
no=n;//这三个值赋反了
height=h;//这三个值赋反了
weight=w;//这三个值赋反了
strcpy_s(study,s);
strcpy_s(expect,e);
next=NULL;
}
};
char change(char *s)
{
int m;
if(s=="小学")
{m='a';}
else if(s=="初中")
{m='b';}
else if(s=="高中")
{m='c';}
else
{m='d';}
return m;
}

int _tmain(int argc, _TCHAR* argv[])
{
int i,j;
Woman *head=NULL,*p,*q;
for(i=1;i<21;i++)
{
int n=0;
float h,w;
char s[50]={0},e[50]={0};//初始别往了赋值
cout<<"请输入第"< cin>>n>>h>>w>>s>>e;
p=new Woman(n,h,w,s,e);
for(j=1;j<21;j++)
{
Man *ph;
cout<<"请输入第"< cin>>n>>h>>w>>s>>e;
ph=new Man(n,h,w,s,e);
if(p->height==(ph->height+10)&&p->weight==(ph->weight+10)&&change(p->study)<=change(ph->study))
{cout<<"第"<no<<"号女生和"<<"第"<no<<"号男生是绝配啊~~~"< else if(p->height<(ph->height+10)&&p->weight<(ph->weight+10)&&change(p->study)<=change(ph->study))
{cout<<"第"<no<<"号女生和"<<"第"<no<<"号男生还是有缘分的~~~"< else
{cout<<"第"<no<<"号女生和"<<"第"<no<<"号男生有缘相遇无缘聚啊~~~"< }
q=head;
q->next=p;
q=p;
p=head->next;
while(p!=NULL) { p=p->next;}
}
return 0;
}
2: 第二问题是你的main函数有两层循环,外层循环20次内层循环20次,20*20即可算出总共执行了四十次追问我想只输入男生数据20次,而不是400次,该怎么改啊?追答main函数中第一个for循环去掉即可
全部回答
  • 1楼网友:由着我着迷
  • 2021-04-02 19:24
太高深了,望尘莫及
  • 2楼网友:时间的尘埃
  • 2021-04-02 18:28
你的主函数中有个二重循环,男生的信息在内循环中,当然要输入400次了(外循环转20圈,每一圈,内循环都要转20圈嘛).你可以试试先用一个循环把男女生信息保存了.然后再开一个二重循环来进行比较.比较方法和你的类似.外循环遍历女生(或男生),内循环遍历男生(或女生),然后比较(不要用链表,麻烦啊,如果实在要用用了List、Vector等模版吧,还有既然是c++,就多用string,比char*方便很多).
至于你说赋值不正确,我想问题应该出在构造函数传递参数和对类成员赋值上面。我在实验室没c++编译器,不能帮你运行运行了.
  • 3楼网友:骨子里都是戏
  • 2021-04-02 17:55
char change(char *s)
{
int m;
if(s=="小学")
{m='a';}
else if(s=="初中")
{m='b';}
else if(s=="高中")
{m='c';}
else
{m='d';}
return m;
}
这里面,s=="小学",这样的代码的不行吧!两个字符串不是这样比较大的。
应该用strcmp(s,"小学")==0
  • 4楼网友:雾月
  • 2021-04-02 17:07
其一,值不能付给Man以及Wman所以不能进行比较!
Human(int n,float h,float w,char s[50],char e[50])
{
n=no;//应该是 no=n; 下面的类似改法
h=height;
w=weight;
strcpy_s(study,s);
strcpy_s(expect,e);
}
Man(int n,float h,float w,char *s,char *e):Human(n,h,w,s,e)
{
next=NULL;//只要留这项就ok了
}
woman的类似
其二,只要输入20个男生的数据,而我却要输入400个!
for(i=1;i<21;i++)
{
。。。。。
for(j=1;j<21;j++)
{
。。。。。。
}
}
每输入一个女生数据就要输入20个男生的 20*20=400
另外,建议,请多看看c++基础方面的书。。。如:c++ prime追问我想只输入男生数据20次,而不是400次,该怎么改啊?
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯