施华蔻400洗发水价格:C语言问题!!

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/05 06:59:34
我在VC6上写了个裁判评分的程序,调试老失败,谁能帮我查查错??
在线=。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define LEN sizeof(struct singer)
#define JUDGENUM 3

struct singer
{

int num; //选手考号
char name[20];//选手姓名
float score[JUDGENUM];//9个评委的给分
float average;//选手的最终成绩
struct singer *next;//链
}
//非模块化的实现
main()
{
int i,j,n,playernum=0;
float s=0.0; //和
struct singer *head,*tem,*p1,*p2;
printf("Please input the tatol number of player:\n");
scanf("%d",&playernum);
//printf("Please input the information of player just as the order:\nnumberofplayer name score\n");
n=1;

//建立链表并读入数据
while(playernum>=n)
{
if(1==n) //头指针设置
{

p1=(struct singer*)malloc(LEN);
printf("The info of num\n");
scanf("%d",&p1->num);

printf("The name of num%d:\n",p1->num);
scanf("%s",p1->name);
for(i=1;i<=JUDGENUM;i++)
{
printf("The mark of judge%d\n",i);
scanf("%f",&p1->score[i-1]);
}
tem=head=p1;
}
else
{
p2=(struct singer*)malloc(LEN);
printf("The info of another num\n");
scanf("%d",&p2->num);
printf("The name of num%d:\n",p2->num);
scanf("%s",p2->name);
for(i=1;i<=JUDGENUM;i++)
{
printf("The mark of judge%d\n",i);
scanf("%f",&p2->score[i-1]);
}
p1->next=p2;
p1=p2;
}
n++;
}
printf("还好!!");
//处理数据
for(i=1;i<=playernum;i++)
{
//去掉最高和最低分
for(n=1;n<=JUDGENUM;n++)
{
if(head->score[n]>head->score[0])
head->score[0]=head->score[n];
}
for(n=1;n<=JUDGENUM;n++)
{
if(head->score[n]<head->score[JUDGENUM])
head->score[JUDGENUM]=head->score[n];
}
//计算平均分
j=1;
while(j<=playernum)
{
for(n=1;n<JUDGENUM;n++)
s+=tem->score[n];
tem->average=s/(JUDGENUM-2);
if(1==j) head=tem;
tem=tem->next;
j++;
}

}
printf("haohao ");
printf("%f",head->average);
printf("haohaooo ");
//利用冒泡排序对average进行排列
for(i=0;i<playernum-1;i++)
{

for(j=i;j<playernum-1;j++)
{
if(0==j) p1=head->next;
if(p1->average >head->average )
{
p2 = head;
head = p1;
head->next = p2;
p2->next = p1->next;
}
p1=p1->next;

}
head = head->next ;
}
//输出结果
printf("**************************final result of singers is bellow**************************\n");
printf("Sorted_number player Average_Score\n");
j=1;
while(j<=playernum)
{
printf("%30d%30s%f\n",j,head->name,head->average);
head=head->next;
}
}
while 循环的最后一句是n++啊。

改了下你的程序,调试结果正确

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define LEN sizeof(struct singer)
#define JUDGENUM 3

struct singer
{
int num; //Ñ¡ÊÖ¿¼ºÅ
char name[20];//Ñ¡ÊÖÐÕÃû
float score[JUDGENUM];//9¸öÆÀίµÄ¸ø·Ö
float average;//Ñ¡ÊÖµÄ×îÖճɼ¨
struct singer *next;//Á´
};

//·ÇÄ£¿é»¯µÄʵÏÖ
main()
{
int i,playernum=0;
int j,k;
float* max;
float* min;
struct singer *head,*tem,*p1,*p2;
singer** arr;
singer* tmp;
printf("Please input the tatol number of player:");
scanf("%d",&playernum);
//printf("Please input the information of player just as the order:\nnumberofplayer name score\n");
head = NULL;
tem = NULL;
p1 = NULL;
p2 = NULL;
arr = new singer*[playernum];

//½¨Á¢Á´±í²¢¶ÁÈëÊý¾Ý
for(i=0;i<playernum;i++)
{
p1=(struct singer*)malloc(LEN);
printf("Input the id of player %d:",i+1);
scanf("%d",&p1->num);

printf("Input the name of player %d:",i+1);
scanf("%s",p1->name);

for(int j=0;j<JUDGENUM;j++)
{
printf("Input the score of judge %d for player %d:",j+1,i+1);
scanf("%f",&p1->score[j]);
}
p1->next = NULL;
arr[i] = p1;

if(head == NULL) head = p1;
else tem->next = p1;

tem = p1;
}
//printf("»¹ºÃ£¡£¡");
//´¦ÀíÊý¾Ý
tem = head;
while(tem)
{
//È¥µô×î¸ßºÍ×îµÍ·Ö && ¼ÆËãƽ¾ù·Ö
max = &tem->score[0];
min = &tem->score[0];
tem->average = tem->score[0];
for(i=1;i<JUDGENUM;i++)
{
if(tem->score[i]>*max) max = &tem->score[i];
else if(tem->score[i]<*min) min = &tem->score[i];
tem->average += tem->score[i];
}
tem->average -= *max;
tem->average -= *min;
*max = 0;
*min = 0;
tem = tem->next;
}
// printf("haohao ");
// printf("%f",head->average);
// printf("haohaooo ");
//ÀûÓÃðÅÝÅÅÐò¶Ôaverage½øÐÐÅÅÁÐ
j = playernum;
k = 1;
while(k)
{
k = 0;
for(i=0;i<j-1;i++)
{
if(arr[i]->average > arr[i+1]->average)
{
tmp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = tmp;
k = i+1;
}
}
j = k;
}

tem = head = arr[0];
for(i=1;i<playernum;i++)
{
tem->next = arr[i];
tem = tem->next;
}
tem->next = NULL;

//Êä³ö½á¹û
printf("\n**********************final result***********************\n");
printf("Id\tName\tAverage Score\n");
//j=1;
tem = head;
while(tem)
{
printf("%d\t%s\t%f\n",tem->num,tem->name,tem->average);
tem=tem->next;
}
return 0;
}

好像没有反回值return;

我C不好,我在VC上运行了
语法没错,不过你这句while(playernum>=n) 循环怎么才能跳出?