请问一下C语句是什么意思,麻烦翻译一下(C语言高手进,急,非诚勿扰)

void defen(geshou *p)
{
int i,j,linshi;
geshou *h;
h=p->next;
while(h)
{
for(i=8;i>1;i--)
{
for(j=0;j<=i-1;j++)
{
if((h->pingfen[j])>(h->pingfen[j+1]))
{
linshi=h->pingfen[j+1];h->pingfen[j+1]=h->pingfen[j];h->pingfen[j]=linshi;
}
}
}
h->defen=(h->pingfen[1]+h->pingfen[2]+h->pingfen[3]+h->pingfen[4]+h->pingfen[5]+h->pingfen[6]+h->pingfen[7])/7.0;
h=h->next;
}
}
void paiming1(geshou *p,geshou *ii)
{
int b=1;
geshou *h;
geshou *qa;
h=p->next;qa=p->next;
while(b<=ii->xvhao)
{
while(h)
{
while(qa->paiming!=0||h->paiming!=0)
{
if(h->paiming!=0&&qa->paiming!=0)
{h=h->next;qa=h;}
if(h->paiming!=0&&qa->paiming==0&&h->xvhao!=ii->xvhao)
h=h->next;
if(h->paiming!=0&&h->xvhao==ii->xvhao)
break;}
if(h->paiming!=0&&h->xvhao==ii->xvhao)
break;

if((qa->defen)<=(h->defen))
qa=h;

h=h->next;
}
qa->paiming=b;
qa=p->next;h=p->next;
b++;

}

}

这个事一个链表 有两个元素 一个defen 另一是pingfen[8]的数组。
for(i=8;i>1;i--)
{
for(j=0;j<=i-1;j++)
{
if((h->pingfen[j])>(h->pingfen[j+1]))
{
linshi=h->pingfen[j+1];h->pingfen[j+1]=h->pingfen[j];h->pingfen[j]=linshi;
}
}
}
这是从小大大排序 (冒泡排序方法)
h->defen=(h->pingfen[1]+h->pingfen[2]+h->pingfen[3]+h->pingfen[4]+h->pingfen[5]+h->pingfen[6]+h->pingfen[7])/7.0;
就平均(1~7之间的7个数字)。

while 循环做的事 是对每个节点 做 一个从小到大的排序后 取消最小分 将其他的平均 放到给节点的 defen 里。记住给定节点后面的节点开始。估计给定节点应该是 带一个有节点的链表。
以上是 void defen(geshou *p) 的 作用。

第二个 由于 不知道 xvhao 是什么东西 之呢过 给你 一个语句一个语句解释了。
while(qa->paiming!=0||h->paiming!=0) //如果 这个h 和 qa 指向的 链表 都没有排名paiming=0 就 结束循环。
{
if(h->paiming!=0&&qa->paiming!=0)
{h=h->next;qa=h;} //若两个的paiming 不等于0 就 向下一个节点走。(当然高开始是两个的是指一个节点)。
if(h->paiming!=0&&qa->paiming==0&&h->xvhao!=ii->xvhao)
h=h->next; //qa paiming 等于零 并h paiming 不等于0 h xvhao 不等于 函数给的节点 ii的 xvhao 时 pa 不懂 h 往下一个节点走。
if(h->paiming!=0&&h->xvhao==ii->xvhao)
break;}// h paiming 不等于0 但是 h xvhao 等于 ii xvhao 直接退出循环 这说明 在给定的P 链表中 找到了 ii 的xvhao 相同的 节点。
这样最里面的循环就结束。
if(h->paiming!=0&&h->xvhao==ii->xvhao)
break;他外面的循环 判断 里面的循环是 正常结束 还是 if(h->paiming!=0&&h->xvhao==ii->xvhao) 这个条件下 退出。 若果是 就表明 在给定的P 链表中 找到了 ii 的xvhao 相同的 节点了 。退出 大循环。 否则 继续大循环。
if((qa->defen)<=(h->defen))
qa=h; 根据程序分析 H 和 qa 要么就只一个节点 要么就 是 h 指qa的后一个节点。这句话就是比较两个节点的defen 是不是后面的大于前面的,如果是就吧前面的指针移到 h指的节点。总之前面的defen小了的节点就不管它。
h=h->next; h 往后走一个 继续循环到最后。
退出循环后 执行最外面的徐那还 qa paimin 给 b 然后 b++ 一直到 b等于 给定的ii的 xvhao。

大致上说
while(qa->paiming!=0||h->paiming!=0)
有两个结果 一个 找到 排名为0的节点用qa 指出。 再找一个 排名为0的节点 用h 指出。
另一个 找到 排名为0的节点用qa 指出。再找一个 排名不为零 且 xvhao 等于 给定的vxhao的节点。
用第二个结果 出循环 就不实行 第二层循环 直接到第一层循环。
用第一个结果出来 则 比较 前一个paiming=0 的节点和后一个paiming=0 的节点的defen
然后 qa 指定 得分大或等于的那个。 然后 后一个节点继续往后执行同样任务到结束。
这个循环结束 就会找出 paiming=0 等分最大的节点中最后一个(记住因为有 <= 所以 相等的也到后一个)然后到 第一层循环。paiming 设为1 然后 从给定的第二个节点 再找 paimign=0 等分最大的组后一个 然后 paiming 设置成 2 以此类推 给所有节点 按defen 大到小 paiming。

中途的那个 xvhao 不知道是什么了。
给分吧!!!说的口都干了追问

再解释一下吧,多谢void pingfen(geshou *p)
{int t;geshou *h;
printf("要给第几号歌手打分?");
scanf("%d",&t);
h=p;
while(2)
{if(h->xvhao==t)
{printf("请输入九位评委打分:");
scanf("%d%d%d%d%d%d%d%d%d",&h->pingfen[0],&h->pingfen[1],&h->pingfen[2],&h->pingfen[3],&h->pingfen[4],&h->pingfen[5],&h->pingfen[6],&h->pingfen[7],&h->pingfen[8]);
break;}
h=h->next;}}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-21
将两个学生成绩列表先分别对各科分数做从大到小排序,求出每个学生的平均成绩,然后做比较后排出学生平均成绩排名!

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网