|
楼主 |
发表于 2020-12-17 22:33:05
|
显示全部楼层
完整的题目(1) 设计并定义职工信息结构体struct Worker类型,每个职工的数据包括工号id(不超过8个字符,char[]型)、姓名name(不超过20个字符,char[]型)、性别sex('M'或'm'表示男性,'F'或'f'表示女性,char型)、工龄workAge(int型)、工资wage(double型)。
(2) 设计实现函数void input(struct Worker a[],int n),其功能是输入n名职工的数据并存储在a数组中,每名职工的数据的输入格式为:第1行输入工号;第2行输入姓名;第3行输入性别、工龄和工资,数据间以空格为间隔。
(3) 设计实现函数void output(struct Worker a[],int n),其功能是输出a数组中存储的n名职工的数据,每名职工的数组占一行,输出格式为:
ID=<工号>,Name=<姓名>,Sex=<性别>,WorkAge=<工龄>,wage=<工资>
其中工资保留2位小数,四舍五入。
(4) 设计实现函数double wageSummary(struct Worker a[],int n),其功能是汇总输出a数组中存储的n名职工的总薪金。
(5) 设计实现函数double averWorkAge(struct Worker a[],int n),其功能是计算a数组中存储的n名职工的平均工龄。
(6) 设计实现函数double averWage(struct Worker a[],int n),其功能是计算a数组中存储的n名职工的平均薪金。
(7) 设计实现函数int maleCount(struct Worker a[],int n),其功能是统计a数组存储的n名职工中男性职工的数量。
(8) 设计实现函数int femaleCount(struct Worker a[],int n),其功能是统计a数组存储的n名职工中女性职工的数量。
(9) 设计实现函数int searchID(struct Worker a[],char id[],int n),其功能是在a数组中查找工号等于id的职工的下标,若找不到则返回-1。
(10) 设计实现函数int searchName(struct Worker a[],char name[],int n),其功能是在a数组中查找姓名等于name的职工的下标,若找不到则返回-1。
(11) 设计实现函数void sortWorkAge(struct Worker a[],int n),其功能是将a数组存储的n名职工按照工龄从小到大的顺序重新存储。
裁判测试程序样例:#include <stdio.h>
#include <string.h>
#define N 30
/* 请在这里填写答案 */
int main(void){
struct Worker work[N];
int n,t;
char ch,id[10],name[20];
scanf("%d",&n);
input(work,n);
printf("WageSummary=%.2lf,averWage=%.2lf\n",wageSummary(work,n),averWage(work,n));
printf("averWorkAge=%.1lf\n",averWorkAge(work,n));
printf("maleCount=%d,femaleCount=%d\n",maleCount(work,n),femaleCount(work,n));
while((ch = getchar()) != '\n' && ch != EOF);
gets(id);
if((t=searchID(work,id,n))>=0)
printf("ID=%s,Name=%s,Sex=%c,WorkAge=%d,wage=%.2f\n",work[t].id,work[t].name,work[t].sex,work[t].workAge,work[t].wage);
else printf("ID=%s not found\n",id);
gets(name);
if((t=searchName(work,name,n))>=0)
printf("ID=%s,Name=%s,Sex=%c,WorkAge=%d,wage=%.2f\n",work[t].id,work[t].name,work[t].sex,work[t].workAge,work[t].wage);
else printf("Name=%s not found\n",name);
sortWorkAge(work,n);
output(work,n);
return 0;
}
我完整的错误代码#include <stdio.h>
#include <string.h>
#define N 30
struct Worker
{
char id[10];
char name[21];
char sex;
int workAge;
double wage;
};
void input(struct Worker a[],int n)
{
for(int i=0;i<n;i++)
{
scanf("%s",a[i].id);
scanf("%s",a[i].name);
scanf("%c",&a[i].sex);
scanf("%d",&a[i].workAge);
scanf("%lf",&a[i].wage);
}
}
void output(struct Worker a[],int n)
{
for(int i=0;i<n;i++)
{
printf("ID=%s,Name=%s,Sex=%c,WorkAge=%d,wage=%.2lf",a[i].id,a[i].name,a[i].sex,a[i].workAge,a[i].wage);
}
}
double wageSummary(struct Worker a[],int n)
{
double sum=0;
for(int i=0;i<n;i++)
{
sum+=a[i].wage;
}
return sum;
}
double averWorkAge(struct Worker a[],int n)
{
int sum=0;
for(int i=0;i<n;i++)
{
sum+= a[i].workAge;
}
return sum/n;
}
double averWage(struct Worker a[],int n)
{
double sum=0;
for(int i=0;i<n;i++)
{
sum+=a[i].wage;
}
return sum/n;
}
int maleCount(struct Worker a[],int n)
{
int count=0;
for(int i=0;i<n;i++)
{
if(a[i].sex=='M'|| a[i].sex=='m')
count++;
}
return count;
}
int femaleCount(struct Worker a[],int n)
{
int count=0;
for(int i=0;i<n;i++)
{
if(a[i].sex=='F'||a[i].sex=='f')
count++;
}
return count;
}
int searchID(struct Worker a[],char id[],int n)
{
int flag=0;
for(int i=0;i<n;i++)
{
if( a[i].id==id)
{
flag=i;
break;
}
}
if(flag==0)
return -1;
else
return flag;
}
int searchName(struct Worker a[],char name[],int n)
{
int flag=0;
for(int i=0;i<n;i++)
{
if(a[i].name==name)
{
flag=i;
break;
}
}
if(flag==0)
return -1;
else
return flag;
}
void sortWorkAge(struct Worker a[],int n)
{
a[n+1]=a[0];
for(int i=0;i<n;i++)
{
for(int j=0;j<n-i;j++)
{
if(a[j].workAge>a[j+1].workAge)
{
a[n+1]=a[j];
a[j]=a[j+1];
a[j+1]=a[n+1];
}
}
}
}
int main(void){
struct Worker work[N];
int n,t;
char ch,id[10],name[20];
scanf("%d",&n);
input(work,n);
printf("WageSummary=%.2lf,averWage=%.2lf\n",wageSummary(work,n),averWage(work,n));
printf("averWorkAge=%.1lf\n",averWorkAge(work,n));
printf("maleCount=%d,femaleCount=%d\n",maleCount(work,n),femaleCount(work,n));
while((ch = getchar()) != '\n' && ch != EOF);
gets(id);
if((t=searchID(work,id,n))>=0)
printf("ID=%s,Name=%s,Sex=%c,WorkAge=%d,wage=%.2f\n",work[t].id,work[t].name,work[t].sex,work[t].workAge,work[t].wage);
else printf("ID=%s not found\n",id);
gets(name);
if((t=searchName(work,name,n))>=0)
printf("ID=%s,Name=%s,Sex=%c,WorkAge=%d,wage=%.2f\n",work[t].id,work[t].name,work[t].sex,work[t].workAge,work[t].wage);
else printf("Name=%s not found\n",name);
sortWorkAge(work,n);
output(work,n);
return 0;
}
|
|