第1个回答 2007-12-24
#include<stdio.h>
#define N 10
#define M 50
struct xuanshou
{
char name[8];
int score[N];
float defen;
}xs[M],t;
void main()
{
int i,j,m,n,s,k=0;
for(i=0;i<M;i++)
{
printf("Xing ming:");
scanf("%s",&xs[i].name);
printf("Qing ping wei wei %s xuan shou da fen(60 ~ 100)\n",xs[i].name);
for(j=0;j<N;j++)
{
printf("%d hao ping wei da fen:",(j+1));
scanf("%d",&xs[i].score[j]);
if(xs[i].score[j]<60||xs[i].score[j]>100)
{
printf("Chong xin shu ru,fen shu zai 60 zhi 100 zhi jian\n");
j--;
}
}
for(m=0;m<N;m++)
for(n=0;n<(N-1);n++)
if(xs[i].score[m]>xs[i].score[n])
{
s=xs[i].score[m];
xs[i].score[m]=xs[i].score[n];
xs[i].score[n]=s;
}
for(j=0;j<N;j++)
{
printf("%4d",xs[i].score[j]);
k+=xs[i].score[j];
}
xs[i].defen=(float (k-xs[i].score[0]-xs[i].score[N-1]))/(N-2);
printf("\nQu diao yi ge zui gao fen ,qu diao yi ge zui di fen,\nxuan shou %s de zui zhong de fen : %0.2f\n",xs[i].name,xs[i].defen);
k=0;
}
for(m=0;m<M;m++)
{
for(n=0;n<(M-1);n++)
{
if(xs[m].defen>xs[n].defen)
{
t=xs[n];
xs[n]=xs[m];
xs[m]=t;
}
}
}
for(i=0;i<M;i++)
printf("Di %d ming %s%6.3f\n",i,xs[i].name,xs[i].defen);
}
第2个回答 2007-12-28
/*
用类结合链表来做,程序比较长
分为两个文件一个是singer.h 是singer类的定义和实现的头文件
令一个是.cpp是主程序.
Microsoft Visual C++ .NET编译通过.
*/
/*
singer.h
*/
#include "string"
#include "iostream"
using namespace std;
const int judges = 10;//裁判数量
class singer{
public:
singer();
singer(string name,float score[]);
void set_name(string name);
void set_score(float score[]);
string get_name() const;//取姓名
float get_min() const;//取最低分
float get_max() const;//取最高分
float get_final() const;//取总分
bool operator <(const singer &s) const;//重载"<"号,方便链表排序
bool operator >(const singer &s) const;//重载">"号,方便链表排序
private:
string sname;//姓名
float sscore[judges];//得分
};
singer::singer():sname("unname")//默认初始化
{
for (int i=0;i<judges;i++)
{
sscore[i]=0;
}
}
singer::singer(string name,float score[judges])//给定参数初始化
{
sname=name;
for (int i=0;i<judges;i++)
{
sscore[i]=score[i];
}
}
void singer::set_name(string name)
{
sname=name;
}
void singer::set_score(float score[judges])
{
for (int i=0;i<judges;i++)
{
sscore[i]=score[i];
}
}
string singer::get_name() const
{
return sname;
}
float singer::get_min() const
{
float min=sscore[0];
for (int i=1;i<judges;i++)
{
if (min>sscore[i])
min=sscore[i];
}
return min;
}
float singer::get_max() const
{
float max=sscore[0];
for (int i=1;i<judges;i++)
{
if (max<sscore[i])
max=sscore[i];
}
return max;
}
float singer::get_final() const
{
float total=0;
for (int i=0;i<judges;i++)
{
total+=sscore[i];
}
total-=get_max();//去掉最高分
total-=get_min();//去掉最低分
return total;
}
bool singer::operator <(const singer &s) const
{
return (this->get_final()<s.get_final());
}
bool singer::operator >(const singer &s) const
{
return (this->get_final()>s.get_final());
}
///////////////////////////////////////////////////////////////
/*
judge.cpp
*/
#include "stdafx.h"
#include "iostream"
#include "singer.h"
#include "string"
#include "list"
#include "iomanip"
using namespace std;
list<singer> singers;//储存歌手的链表
void print(const singer& s);//歌手信息输出
void input();//歌手信息输入
void show();//全部歌手打印(排序)
void run();//程序
int _tmain(int argc, _TCHAR* argv[])
{
run();
return 0;
}
void run()
{
int choose=0;
cout<<"请选择操作: 1.输入 2.打印 3.退出. ";
cin>>choose;
if (cin.fail())
{
cout<<"没有正确选择,默认退出.\n";
return;
}
while (choose!=3)
{
switch (choose)
{
case 1:
{
input();
break;
}
case 2:
{
show();
break;
}
case 3: break;
default:break;
}
cout<<"操作完成,请继续选择操作:\n1.输入 2.打印 3.退出 :";
cin>>choose;
}
}
void print(const singer& s)
{
cout<<"姓名:"<<s.get_name()<<endl;
cout<<"最终得分:"<<s.get_final()<<endl;
cout<<"最终平均分:"<<s.get_final()/(float)judges<<endl;
cout<<"去掉最高分:"<<s.get_max()<<endl;
cout<<"去掉最低分:"<<s.get_min()<<endl;
}
void input()
{
string name;
float score[judges];
cout<<"请输入选手姓名: ";
cin>>name;
for (int i=0;i<judges;i++)
{
float temp;
bool input_error=false;//输入是否有效标志
while (true)
{
if (input_error)
{
cout<<"您输入的成绩不在[60,100]之间或者输入错误.\n请重新输入:";
}
else
{
cout<<"请输入选手的第"<<i+1<<"个成绩: ";
}
cin>>temp;
if ( (cin.fail()) || (temp<60) || (temp>100) )//输入无效
{
cin.clear();
cin.ignore(100,'\n');
input_error=true;
continue;
}
break;
}
score[i]=temp;
}
singers.push_back(singer(name,score));//储存歌手信息
}
void show()//格式化输出
{
if (singers.size()==0) return;
singers.sort(greater<singer>( ));
list<singer>::iterator iter;
cout<<"--------------------\n";
int i=1;
for (iter=singers.begin();iter!=singers.end();iter++)
{
cout<<"第"<<setw(2)<<i<<"名:\n";
print(*iter);
i++;
}
cout<<"--------------------\n";
}