题目要求: #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; /*返回原队头数据*/ } |