|

楼主 |
发表于 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;
- }
复制代码 |
|