源代码如下:
/* zju.h
Copyright (c) 2002, 2006 by ctu_85
All Rights Reserved.
*/
#include "stdio.h"
#include "string.h"
#include "malloc.h"
#define maxquestionnum 10
#define maxidnum 20
#define bufsize 32
#define maxparti 1000
struct Examination *CreateExam(int,Examination*,Examination*);
struct Participator *CreateParticipator(int,int);
int Calculate(int,int,Participator *,int [maxquestionnum]);
int Judge(int,int,Participator *,Examination *);
int Sort(Participator *,int);
int Print(Examination *p,int);
struct Examination
{
int participatenum;
int questionnum;
int passline;
int passnum;
int mark[maxquestionnum];
struct Examination *next;
struct Participator *work;
};
struct Participator
{
char id[maxidnum+1];
int status[maxquestionnum+1];
int score;
int pass;
int priority;
int isprint;
struct Participator *next;
};
int main()
{
int i=0;
struct Examination *examhead,*p;
struct Participator *parti;
printf("\nNow please enter the information,end with 0 paticipator of exam:\n");
examhead=CreateExam(0,p,examhead);
if(!examhead)
printf("There is no examination today\n");
else
do
{
printf("The %dth exam:",i+1);
Print(examhead,examhead->passnum);
i++;
examhead=examhead->next;
}
while (examhead);
return 1;
}
struct Examination *CreateExam(int headstatus,Examination * pre,Examination *head) /* Record the details of each examination*/
{
int x,tag=0,count=0,base=1,k,status=1,score=0,tmp;
char buf[bufsize],*c;
struct Examination *exam=(struct Examination*)(malloc(sizeof(Examination)));
if(headstatus==0)
{
pre=exam;
head=exam;
}
else
pre->next=exam;
printf("Please enter the %dth examination:\n",headstatus+1);
c=gets(buf);
if(*buf!='0')
{
for(x=0;x<maxquestionnum;x++)
exam->mark[x]=0;/* Initializing */
exam->participatenum=0;
exam->questionnum=0;
exam->passline=0;
exam->next=NULL;
exam->work=NULL;
exam->passnum=0;
for(tag=0;*c!='\0';c++,tag++)
{
if(*c==' ')
{
if(status==1)
{
tmp=tag-1;
for(k=count-1;k>=0;k--,tmp--)
{
exam->participatenum+=base*(buf[tmp]-'0');
base*=10;
}
}
else
if(status==2)
{
tmp=tag-1;
for(k=count-1;k>=0;k--,tmp--)
{
exam->questionnum+=base*(buf[tmp]-'0');
base*=10;
}
}
base=1;
status++;
count=0;
}
else
count++;
}
if(*c=='\0')
if(status==3)
{
tmp=tag-1;
for(k=count-1;k>=0;k--,tmp--)
{
exam->passline+=base*(buf[tmp]-'0');
base*=10;
}
}
base=1;
count=0;
printf("Please enter the marks of each problem:\n");
c=gets(buf);
for(tag=0;*c!='\0';c++,tag++)
if(*c==' ')
{
tmp=tag-1;
for(k=count-1;k>=0;k--,tmp--)
{
exam->mark[score]+=base*(buf[tmp]-'0');
base*=10;
}
base=1;
score++;
count=0;
}
else
count++;
if(*c=='\0')
{
tmp=tag-1;
for(k=count-1;k>=0;k--,tmp--)
{
exam->mark[score]+=base*(buf[tmp]-'0');
base*=10;
}
}
exam->work=CreateParticipator(exam->participatenum,exam->questionnum);
Calculate(exam->participatenum,exam->questionnum,exam->work,exam->mark);
Judge(exam->participatenum,exam->passline,exam->work,exam);
Sort(exam->work,exam->participatenum);
headstatus++;
CreateExam(headstatus,exam,head);
}
else
{
if(headstatus!=0)
pre->next=NULL;
else
head=NULL;
return head;
}
}
struct Participator *CreateParticipator(int i,int j)
{
Participator *p,*pre,*head;
int m,n=0,count=0,tag,x,tmp,k,status=1,base=1;
int headstat=0;
char buf[bufsize],*c;
for(m=0;m<i;m++)
{
p=(struct Participator*)(malloc(sizeof(struct Participator)));
if(headstat==0)
{
head=p;
headstat++;
pre=p;
}
else
{
pre->next=p;
pre=pre->next;
}
printf("Please enter the %dth participator's info:\n",m+1);
for(j=0;j<maxquestionnum+1;j++)/* Initializing */
p->status[j]=0;
p->pass=0;
p->score=0;
p->priority=maxparti+1;
p->isprint=0;
c=gets(buf);
for(tag=0;*c!='\0';c++,tag++)
{
if(*c==' ')
{
if(status==1)
{
tmp=tag-1;
for(k=count-1;k>=0;k--,tmp--)
p->id[k]=buf[tmp];
p->id[count]='\0';
}
else if(status>2)
{
tmp=tag-1;
for(k=count-1;k>=0;k--,tmp--)
{
n+=base*(buf[tmp]-'0');
base*=10;
}
p->status[n]=1;
}
base=1;
n=0;
status++;
count=0;
}
else
count++;
}
if(*c=='\0'&&status>2)
{
tmp=tag-1;
for(k=count-1;k>=0;k--,tmp--)
{
n+=base*(buf[tmp]-'0');
base*=10;
}
p->status[n]=1;
}
base=1;
count=0;
n=0;
status=1;
}
p->next=NULL;
return head;
}
int Calculate(int pepl,int que,Participator *p,int mark[maxquestionnum]) /*To examinate the details of each person*/
{
int i,j,temp=0;
for(i=0;i<pepl;i++,p=p->next)
{
for(j=1;j<=que;j++)
if(p->status[j]==1)
temp+=mark[j-1];
p->score=temp;
temp=0;
}
return 1;
}
int Judge(int pepl,int pass,Participator *p,Examination *ep)
{
int i;
for(i=0;i<pepl;i++,p=p->next)
{
if(p->score>=pass)
{
p->pass=1;
(ep->passnum)++;
}
else
p->pass=0;
}
return 1;
}
int Sort(Participator *p,int num)
{
int i,j,max=-1,prio=0;
Participator *temp,*t1;
for(i=0;i<num;i++)
{
temp=p;
t1=p;
for(j=0;j<num;j++,temp=temp->next) /* Find the max score which is unidentified*/
if(temp->pass==1&&temp->score>=max&&temp->isprint==0)
{
max=temp->score;
t1=temp;
}
temp=p;
for(j=0;j<num;j++,temp=temp->next) /* Find the engager who has the smallest index*/
if(temp->score==max&&temp->isprint==0)
if(strcmp(temp->id,t1->id)<0)
t1=temp;
if(t1->pass==1&&t1->isprint==0)
{
t1->priority=prio;
t1->isprint=1;
prio++;
}
max=-1;
}
return 1;
}
int Print(Examination *p,int num)
{
Participator *head,*temp;
int i,j;
head=p->work;
printf("%dhave(has) passed\n",num);
for(i=0;i<num;i++)
{
temp=head;
for(j=0;temp!=NULL;j++,temp=temp->next)
if(temp->priority==i)
{
printf("%s %d\n",temp->id,temp->score);
break;
}
}
return 1;
}
了解更多浙大研究生复试解答请点击
http://blog.csdn.net/ctu_85/archive/2006/10/15/1334936.aspx
http://blog.csdn.net/ctu_85/archive/2006/10/16/1336101.aspx
http://blog.csdn.net/ctu_85/archive/2006/10/31/1357794.aspx
浙江大学ACM试题解答(四月)
http://blog.csdn.net/ctu_85/archive/2007/04/24/1576831.aspx
浙江大学ACM试题解答(三月)
http://blog.csdn.net/ctu_85/archive/2007/03/20/1535556.aspx
麻省理工算法导论翻译
http://blog.csdn.net/ctu_85/archive/2007/06/08/1643179.aspx
华容道游戏与算法
http://blog.csdn.net/ctu_85/archive/2007/05/15/1610722.aspx
中国象棋对战程序C语言源代码
http://blog.csdn.net/ctu_85/archive/2007/05/04/1596351.aspx
软件可行性报告
http://blog.csdn.net/ctu_85/archive/2006/06/06/775894.aspx
软件需求分析报告
http://blog.csdn.net/ctu_85/archive/2006/06/06/775892.aspx