c++问题,哪位大虾来帮忙解释一下这个代码每句的意思!!谢谢
#include<iostream>#include<iomanip>#include<string>usingnamespacestd;constintn=20;str...
#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
const int n=20;
struct Work
{
int degree;
int work;
int num;
Work *next;
};Work a[20];
void display(Work a[20])
{
void output(Work b[20]);
int i,j,k,l,degree,work,num,total=0;
Work *next,b[20];
for(i=0;i<n;i++) //把a的信息转给b进行处理
{
b[i].num=a[i].num;
b[i].work=a[i].work;
b[i].degree=a[i].degree;
b[i].next=a[i].next;
}
for(i=0;i<n;i++) //冒泡法排序
for(j=0;j<n-1;j++)
{
if(b[j].work<b[j+1].work)
{
work=b[j].work;
num=b[j].num;
degree=b[j].degree;
next=b[j].next;
b[j].work=b[j+1].work;
b[j].num=b[j+1].num;
b[j].degree=b[j+1].degree;
b[j].next=b[j+1].next;
b[j+1].work=work;
b[j+1].num=num;
b[j+1].degree=degree;
b[j+1].next=next;
}
}
for(i=0;i<n-1;i++) //重排b的名次
if(b[i+1].work!=b[i].work)b[i+1].degree=b[i].degree+1;
else b[i+1].degree=b[i].degree;
output(b);
for(i=1;i<=b[n-1].degree;i++)
{
k=0;
for(j=0;j<n;j++)if(b[j].degree==i){k++; l=b[j].work;total+=b[j].work;}
cout<<"工作量排第"<<i<<"的共有"<<k<<"名工人,其工作量为:"<<l<<endl;
}
}
void input(Work a[20])
{
int n,w;
for(;;)
{
cout<<"请输入工人工号及其工作量,并以回车结尾:"<<endl;
do
{
cin>>n>>w;
if(n>20||n<=0)
{
cout<<"输入错误!请重新输入:"<<endl;
input(a); //若输入出错,则进行递归调用
}
a[n-1].work+=w; //工作量累积
}while((getchar())!='\n');
break;
}
}
void output(Work b[20])
{
int i;
Work *p,*head;
for(i=0;i<n;i++)
{
head=&b[0];
if(i<n-1)b[i].next=&b[i+1];
else b[i].next=NULL;
}
p=head;
cout<<"工号"<<setw(15)<<"工作量"<<setw(15)<<"名次"<<endl;
do //用链表进行输出
{
if(p->num<10)cout<<p->num<<setw(15)<<p->work<<setw(15)<<p->degree<<endl;
else cout<<p->num<<setw(14)<<p->work<<setw(15)<<p->degree<<endl;
p=p->next;
}while(p!=NULL);
}
void main()
{
cout<<" **************************************************************"<<endl; 展开
#include<iomanip>
#include<string>
using namespace std;
const int n=20;
struct Work
{
int degree;
int work;
int num;
Work *next;
};Work a[20];
void display(Work a[20])
{
void output(Work b[20]);
int i,j,k,l,degree,work,num,total=0;
Work *next,b[20];
for(i=0;i<n;i++) //把a的信息转给b进行处理
{
b[i].num=a[i].num;
b[i].work=a[i].work;
b[i].degree=a[i].degree;
b[i].next=a[i].next;
}
for(i=0;i<n;i++) //冒泡法排序
for(j=0;j<n-1;j++)
{
if(b[j].work<b[j+1].work)
{
work=b[j].work;
num=b[j].num;
degree=b[j].degree;
next=b[j].next;
b[j].work=b[j+1].work;
b[j].num=b[j+1].num;
b[j].degree=b[j+1].degree;
b[j].next=b[j+1].next;
b[j+1].work=work;
b[j+1].num=num;
b[j+1].degree=degree;
b[j+1].next=next;
}
}
for(i=0;i<n-1;i++) //重排b的名次
if(b[i+1].work!=b[i].work)b[i+1].degree=b[i].degree+1;
else b[i+1].degree=b[i].degree;
output(b);
for(i=1;i<=b[n-1].degree;i++)
{
k=0;
for(j=0;j<n;j++)if(b[j].degree==i){k++; l=b[j].work;total+=b[j].work;}
cout<<"工作量排第"<<i<<"的共有"<<k<<"名工人,其工作量为:"<<l<<endl;
}
}
void input(Work a[20])
{
int n,w;
for(;;)
{
cout<<"请输入工人工号及其工作量,并以回车结尾:"<<endl;
do
{
cin>>n>>w;
if(n>20||n<=0)
{
cout<<"输入错误!请重新输入:"<<endl;
input(a); //若输入出错,则进行递归调用
}
a[n-1].work+=w; //工作量累积
}while((getchar())!='\n');
break;
}
}
void output(Work b[20])
{
int i;
Work *p,*head;
for(i=0;i<n;i++)
{
head=&b[0];
if(i<n-1)b[i].next=&b[i+1];
else b[i].next=NULL;
}
p=head;
cout<<"工号"<<setw(15)<<"工作量"<<setw(15)<<"名次"<<endl;
do //用链表进行输出
{
if(p->num<10)cout<<p->num<<setw(15)<<p->work<<setw(15)<<p->degree<<endl;
else cout<<p->num<<setw(14)<<p->work<<setw(15)<<p->degree<<endl;
p=p->next;
}while(p!=NULL);
}
void main()
{
cout<<" **************************************************************"<<endl; 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询