| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4086 人关注过本帖
标题:我的“舞伴搭配程序”还需要补充哪些程序??
只看楼主 加入收藏
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
以下是引用feng1256在2006-5-31 2:22:00的发言:

p=(QueuePtr)malloc(sizeof(QNode));
if(p==NULL) /*必要的*/
exit(-1);

我怎么连这个也忘了
受教了啊
另外,销毁队列的函数
void DestroyQueue(LinkQueue &Q)
{
while(Q.front)
{
Q.rear=Q.front->next;
free(Q.front);
Q.front=Q.rear;
}
}

在主函数的最后对队列F,M进行销毁就可以了.
一下是修改后的程序

Pb4BPwBz.rar (32.33 KB)

[此贴子已经被作者于2006-5-31 13:13:33编辑过]


我的征途是星辰大海
2006-05-31 11:24
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 

我来介绍下怎么动态显示。
实际上动态显示和动画的原理是一样的,都是靠刷屏来实现的。
但是在VC++中并没有没有象TC中的清屏函数clrscr()一样的函数,只能#include <stdlib.h>然后调用DOS函数system("cls")来清屏(我们现在写的这个程序运行出来是DOS窗口)。如果你要清windows的屏,那就用FillSolidRect()随便填充颜色就可以了。
光刷屏是不够的,因为刷屏的速度非常快,一闪就不见了,因此我们还得让它延长显示。VC中也没有delay()这个函数,C语言中也没有sleep()这个函数。所以我们得自己写,利用系统的时钟来给我们计时。
#include <time.h>
void sleep( clock_t wait ) // clock_t wait 整型参数,单位是毫秒,例如sleep(1000);就是停顿1秒
{
clock_t goal;
goal = wait + clock();
while( goal > clock() ) ;
}
以上就是动态显示的关键拉,然后在屏幕同一个地方显示刷屏显示刷屏就能获得动态效果了


我的征途是星辰大海
2006-05-31 11:52
杨杨
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-5-29
收藏
得分:0 


那如果我这样写这个题目的话,有没有符合题意????

#include"iostream.h"
#include"stdio.h"
#include"malloc.h"
#include <stdlib.h>
#define maxsize 50 //maxsize为男女队列的最大人数
struct Person
{ int num;//编号
char name[20];
char sex; //性别,'F'表示女性,'M'表示男性
};
struct CirQueue
{
Person *dancer;
int front,rear;
int count;//当前队列人数

};

void InitQueue(CirQueue *Q)//初始化队列
{ Q->dancer=(Person *)malloc(maxsize*sizeof(Person));
if(!Q->dancer)
{ printf("分配空间失败");
return ;
}
Q->front=Q->rear=0;
Q->count=0; //计数器置0
}


int QueueEmpty(CirQueue *Q)//判断队列无元素是否为空
{
return (Q->rear-Q->front+maxsize)%maxsize;
}

Person QueueFront(CirQueue *Q)//取队头元素
{
if(!QueueEmpty(Q))
printf("Queue if empty.");
return Q->dancer[Q->front];
}

void EnQueue(CirQueue *Q,Person dancer) //入队列
{
if((Q->rear+1)%maxsize==Q->front)
return ;
Q->dancer[Q->rear]=dancer;
Q->rear=(Q->rear+1)%maxsize;
Q->count++;

}

Person DeQueue(CirQueue *Q)//出队列
{
Person temp;
if(!QueueEmpty(Q))
{ printf("Queue underflow");exit(0); }
//队空下溢
temp=Q->dancer[Q->front];
Q->count--; //队列元素个数减1
Q->front=(Q->front+1)%maxsize; //循环意义下的头指针加1
return temp;

}

//将队列中元素的数据类型改为Person
void DancePartner(Person *dancer,int num)//结构数组dancer中存放跳舞的男女,num是跳舞的人数。
{
int i;
Person p;
CirQueue Mdancers,Fdancers;
InitQueue(&Mdancers);//男士队列初始化
InitQueue(&Fdancers);//女士队列初始化
for(i=0;i<num;i++)
{//依次将跳舞者依其性别入队
p=dancer[i];
if(p.sex=='F')
{EnQueue(&Fdancers,p);} //排入女队
else
EnQueue(&Mdancers,p);
//排入男队
}
printf("The dancing partners are: \n \n");

while(QueueEmpty(&Fdancers)&&QueueEmpty(&Mdancers))
{
//依次输出男女舞伴名

p=DeQueue(&Fdancers); //女士出队
printf("%s ",p.name);//打印出队女士名
p=DeQueue(&Mdancers); //男士出队
printf("%s\n",p.name); //打印出队男士名
}
if(QueueEmpty(&Fdancers))
{ //输出女士剩余人数及队头女士的名字
printf("\n There are %d women waitin for the next round.\n",Fdancers.count);
p=QueueFront(&Fdancers); //取队头
cout<<p.name << "will be the first to get a partner.\n";
}
else
if(QueueEmpty(&Mdancers))
{//输出男队剩余人数及队头者名字
printf("\n There are %d men waiting for the next round.\n",Mdancers.count);
p=QueueFront(&Mdancers);

cout<<p.name <<"will be the first to get a partner.\n";

}


}

//DancerPartners

void main()
{ Person dancer[maxsize]={{1,"小红",'F'},{2,"小绿",'F'},{3,"小黑",'M'},{4,"小黄",'M'},{4,"小白",'M'}
,{5,"小紫",'F'},{6,"小李",'M'},{7,"小周",'M'}};

DancePartner(dancer,7);


}






[此贴子已经被作者于2006-5-31 13:05:24编辑过]


不是每个人一生出来就什么都懂!所以我不懂就会问!——这就是我来这里的原因!!
2006-05-31 12:57
杨杨
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-5-29
收藏
得分:0 
还有,版主问的问题“跳舞的人跳完后是回原来的座位还是做到队尾去”,这个题目没有说明喔!!!但如果上回到原来的座位去,那又会是怎样呢?那不就是后面的男女都没有机会出去跳舞咯?????跳来跳去都是前面几个去跳咯???

不是每个人一生出来就什么都懂!所以我不懂就会问!——这就是我来这里的原因!!
2006-05-31 13:09
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
以下是引用杨杨在2006-5-31 13:09:00的发言:
还有,版主问的问题“跳舞的人跳完后是回原来的座位还是做到队尾去”,这个题目没有说明喔!!!但如果上回到原来的座位去,那又会是怎样呢?那不就是后面的男女都没有机会出去跳舞咯?????跳来跳去都是前面几个去跳咯???

当然不是,如下 ○选中的女生□选中的男生
第1曲
○●●●●
□■■
第2曲
●○●●●
■□■
第3曲
●●○●●
■■□
第4曲
●●●○●
□■■
这就是原来我做的回到原来位子的动态演示


我的征途是星辰大海
2006-05-31 13:23
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
我说的回到原来位子只是动态显示的一种形式而已。
我还是觉得跳舞的人跳完后坐到队尾去更符合题意,这个程序是要求用队列来编吧,队列有个特点就是只能队头出队尾进,因此我觉得插到队尾去比较好,更能体现出队列的特点。
你可以去问下你们的老师哪种更好些,程序都差不多,只是看哪个更符合要求而已。
你的那个程序,不好说,没有任何外部输入,只能显示第1曲的情况(好像还不正确),好像不符合题目的要求。男生和女生最好分开用2个不同的队列,不然不太好处理。

我的征途是星辰大海
2006-05-31 13:52
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 
以下是引用starrysky在2006-5-31 13:52:00的发言:
我说的回到原来位子只是动态显示的一种形式而已。
我还是觉得跳舞的人跳完后坐到队尾去更符合题意,这个程序是要求用队列来编吧,队列有个特点就是只能队头出队尾进,因此我觉得插到队尾去比较好,更能体现出队列的特点。
你可以去问下你们的老师哪种更好些,程序都差不多,只是看哪个更符合要求而已。
你的那个程序,不好说,没有任何外部输入,只能显示第1曲的情况(好像还不正确),好像不符合题目的要求。男生和女生最好分开用2个不同的队列,不然不太好处理。

还是去队尾好,不然第一队累死,别的看客无聊死

这题要是不要求队列,用个循环链表更方便


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-31 14:52
杨杨
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-5-29
收藏
得分:0 
哦!!原来是这样回到原位置!!!我以为回到原位置,然后下一首歌又是从第一个开始!!!看来真的是差不多!!我想我们老师应该也不清楚,因为听说那些题目是他从网上下载给我们的~~~所以就............

不是每个人一生出来就什么都懂!所以我不懂就会问!——这就是我来这里的原因!!
2006-06-01 00:11
杨杨
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-5-29
收藏
得分:0 
上面那位朋友说还可以用“循环链表”啊?

不是每个人一生出来就什么都懂!所以我不懂就会问!——这就是我来这里的原因!!
2006-06-01 00:12
杨杨
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-5-29
收藏
得分:0 
我发上去的那个程序是刚写好一半的,只是第一问题,第二个问题还没完成~~~

不是每个人一生出来就什么都懂!所以我不懂就会问!——这就是我来这里的原因!!
2006-06-01 00:15
快速回复:我的“舞伴搭配程序”还需要补充哪些程序??
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016465 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved