|
题目要求: #include <stdio.h>
#include <stdlib.h>
typedef struct
{
char name[20];
char sex;
}people;
typedef people DataType;
typedef struct node{
DataType data;
struct node *next;
}QueueNode;
typedef struct{
QueueNode *front;
QueueNode *rear;
}LinkQueue;
void Initial(LinkQueue* Q);
void Push(LinkQueue* Q,DataType e);
DataType Pop(LinkQueue* Q);
int IsEmpty(LinkQueue* Q);
int main()
{
int i,pair,number;
LinkQueue F,M;
people p,p_f,p_m;
printf("请输入参加舞会的人数:");
scanf("%d",&number);
for(i=1;i<=number;i++)
{
printf("请输入第%d个人的姓名:",i);
scanf("%s",p.name);
getchar();
printf("请输入第%d个人的性别(F/M):",i);
scanf("%c",p.sex);
if(p.sex==""F"")
Push(&F,p);
else Push(&M,p);
}
printf("请输入配对总数:");
scanf("%d",&pair);
for(i=1;i<=pair;i++)
{
p_f=Pop(&F);
Push(&F,p_f);
p_m=Pop(&M);
Push(&M,p_f);
printf("第%d对为:女:%s 男:%s\n",i,p_f.name,p_m.name);
}
return 0;
}
void Initial(LinkQueue *Q)
/*将顺序队列置空*/
{ Q->front=Q->rear=NULL;
}
/*判队列空*/
int IsEmpty(LinkQueue *Q)
{
return Q->front==NULL&&Q->rear==NULL;
}
/*进队列*/
void Push(LinkQueue *Q,DataType x)
{
/*将元素x插入链队列尾部*/
QueueNode *p=(QueueNode *)malloc(sizeof(QueueNode));/*申请新结点*/
p->data=x;
p->next=NULL;
if(IsEmpty(Q))
Q->front=Q->rear=p; /*将x插入空队列*/
else
{ /*x插入非空队列的尾*/
Q->rear->next=p; /*p链到原队尾结点后*/
Q->rear=p; /*队尾指针指向新的尾*/
}
}
/*出队列*/
DataType Pop(LinkQueue *Q)
{
DataType x;
QueueNode *p;
if(IsEmpty(Q))
{
printf("队列为空");/*下溢*/
exit(1);
}
p=Q->front; /*指向对头结点*/
x=p->data; /*保存对头结点的数据*/
Q->front=p->next; /*将对头结点从链上摘下*/
if(Q->rear==p)/*原队中只有一个结点,删去后队列变空,此时队头指针已为空*/
Q->rear=NULL;
free(p); /*释放被删队头结点*/
return x; /*返回原队头数据*/
}
队列的基本操作应该没问题,在其他地方调试过了,但主函数总是不对,找了好久实在是不知道怎么回事 |
|
| 60分 |
输入scanf(“%c”,p.sex);这个之后你就不和之前一样把回车吃掉?
|
| 20分 |
仅供参考:
//舞会上,男士们(m人)和女士们(n人, n<m)进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。
//男队中未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。在第t首曲子时,第x个女生和第几个男生配对跳舞?
#include <stdio.h>
#include <string.h>
#define MAX 26
int m,n,t,x,y,i,j,k;
char md[MAX];
char nd[MAX];
char c;
void main() {
while (1) {
printf("Input n m(1<=n<m<=%d):",MAX);
fflush(stdout);
rewind(stdin);
if (2==scanf("%d%d",&n,&m)) {
if (1<=n && n<m && m<=MAX) break;
}
}
while (1) {
printf("Input t x(1<=t<=%d 1<=x<=%d):",MAX,n);
fflush(stdout);
rewind(stdin);
if (2==scanf("%d%d",&t,&x)) {
if (1<=t && t<=MAX && 1<=x && x<=n) break;
}
}
for (i=0;i<m;i++) md[i]=""A""+i;
for (i=0;i<n;i++) nd[i]=""a""+i;
k=0;
for (i=0;i<t;i++) {
printf("%2d: ",i+1);
for (j=0;j<n;j++) {
c="" "";
if (i==t-1 && j==x-1) {c=""*"";y=k+1;}
printf("%c%c%c",md[k],nd[j],c);
k=(k+1)%m;
}
printf("\n");
}
printf("%d\n",y);
}
|
|
我试过了 还是不行啊 |
|
#include <cstdio>
#include <cstdlib>
typedef struct
{
char name[20];
char sex;
}people;
typedef people DataType;
typedef struct node{
DataType data;
struct node *next;
}QueueNode;
typedef struct{
QueueNode *front;
QueueNode *rear;
}LinkQueue;
void Initial(LinkQueue* Q);
void Push(LinkQueue* Q,DataType e);
DataType Pop(LinkQueue* Q);
int IsEmpty(LinkQueue* Q);
int main()
{
int i,pair,number;
LinkQueue F,M;
people p,p_f,p_m;
Initial(&F);
Initial(&M);
printf("请输入参加舞会的人数:");
scanf("%d",&number);
getchar();
for(i=1;i<=number;i++)
{
printf("请输入第%d个人的姓名:\n",i);
scanf("%s",p.name);
printf("请输入第%d个人的性别(F/M):\n",i);
scanf("%c",&(p.sex));
getchar();
if(p.sex==""F"")
Push(&F,p);
else Push(&M,p);
}
printf("请输入配对总数:");
scanf("%d",&pair);
for(i=1;i<=pair;i++)
{
p_f=Pop(&F);
Push(&F,p_f);
p_m=Pop(&M);
Push(&M,p_f);
printf("第%d对为:女:%s 男:%s\n",i,p_f.name,p_m.name);
}
getchar();
return 0;
}
void Initial(LinkQueue *Q)
/*将顺序队列置空*/
{ Q->front=Q->rear=NULL;
}
/*判队列空*/
int IsEmpty(LinkQueue *Q)
{
return Q->front==NULL&&Q->rear==NULL;
}
/*进队列*/
void Push(LinkQueue *Q,DataType x)
{
/*将元素x插入链队列尾部*/
QueueNode *p=(QueueNode *)malloc(sizeof(QueueNode));/*申请新结点*/
// p->data=x;
p->next=NULL;
if(IsEmpty(Q))
Q->front=Q->rear=p; /*将x插入空队列*/
else
{ /*x插入非空队列的尾*/
Q->rear->next=p; /*p链到原队尾结点后*/
Q->rear=p; /*队尾指针指向新的尾*/
}
}
/*出队列*/
DataType Pop(LinkQueue *Q)
{
DataType x;
QueueNode *p;
if(IsEmpty(Q))
{
printf("队列为空");/*下溢*/
exit(1);
}
p=Q->front; /*指向对头结点*/
x=p->data; /*保存对头结点的数据*/
Q->front=p->next; /*将对头结点从链上摘下*/
if(Q->rear==p)/*原队中只有一个结点,删去后队列变空,此时队头指针已为空*/
Q->rear=NULL;
free(p); /*释放被删队头结点*/
return x; /*返回原队头数据*/
}
|
|