十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这很简单,应该是习题,我给思路
成都创新互联-云计算及IDC服务提供商,涵盖公有云、IDC机房租用、成都移动服务器托管、等保安全、私有云建设等企业级互联网基础服务,欢迎联系:13518219792
首先肯定要定义一个职工的结构体,里面有工号,姓名,工资等属性。
建立一个结构体数组。
排序的话,最简单的就是冒泡了。
写入到文件,就对文件指针进行操作就是了,写入结构体的语句是
fwrite(w[i],sizeof(struct worker),1,fp);
显示的话就读出再打印出来就行了。
fread(w[i],sizeof(struct worker),1,fp);
c语言书上都有,自己多看看,都是每个章节的一些基础操作,写出来对你很有作用的
#includestdio.h
struct worker
{
char name[20];
double a,b,c,sum;
};
int main()
{
int i,n,j;
scanf("%d",n);
struct worker x[100],temp;
for(i=1;i=n;i++)
{
scanf("%s%lf%lf%lf",x[i-1].name,x[i-1].a,x[i-1].b,x[i-1].c);
x[i-1].sum=x[i-1].a+x[i-1].b+x[i-1].c;
}
for(i=0;in;i++)
for(j=i;jn;j++)
{
if(x[i].sumx[j].sum)
{
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
}
for(i=0;in;i++)
printf("%s %.2f\n",x[i].name,x[i].sum);
return 0;
}
#includestdio.h
#includestring.h
typedef struct _student{
char name[20];
char sex[20];
double salary;
}Student;
int main(){
int i,j;
Student student[5];
for(i=0;i5;i++){
scanf("%s %s %lf",student[i].name,student[i].sex,student[i].salary);
}
for(i=0;i5;i++){
for(j=i;j5;j++){
if(student[i].salary student[j].salary){
Student temp = student[i];
student[i]=student[j];
student[j]=temp;
}
}
}
for(i=0;i5;i++){
printf("%s %s %.2f\n",student[i].name,student[i].sex,student[i].salary);
}
return 0;
}
思路:
使用结构体保存职工信息,设计单独的函数,实现录入,按职工工资排序,分解单双数职工,读取和写入文件,显示数据等功能。
1 - 从键盘录入信息到数组结构并保存至文件,录入+写入文件。
2 - 从磁盘文件中读出这些数据,依次打印出来, 读取文件+显示数据。
3 - 对职工数据按工资高低排序,将排好序的各记录存放在文件worker2.dat中, 排序+写入文件。
4 - 将职工号为单数和偶数的职工信息分别存放另两个磁盘文件worker3.dat和worker4.dat中, 分解单双数职工+写入文件。
5 - 并从这两个文件中读出职工信息在显示器上显示出来, 读取文件+显示数据。
代码片段如下:
int main(int argc, char* argv[])
{
worker arr[WORKER_NUMBER];
int cnt = WORKER_NUMBER;
worker odd[WORKER_NUMBER];
int oddnum = 0;
worker even[WORKER_NUMBER];
int evennum = 0;
clear_worker_array(arr, cnt);
clear_worker_array(odd, cnt);
clear_worker_array(even, cnt);
//1.录入并保存至worker1.dat
entering_data(arr, cnt);
if( save_file(arr, cnt, filename[0]) == 0 )
{
printf("原始记录已成功保存至文件 - %s\n", filename[0]);
}
//2.读取worker1.dat并显示
clear_worker_array(arr, cnt);
if( load_file(arr, cnt, filename[0]) == 0 )
{
printf("载入文件 - %s\n", filename[0]);
}
show_data(arr, cnt);
//3.排序并保存至worker2.dat
sort_by_salary(arr, cnt);
if( save_file(arr, cnt, filename[1]) ==0 )
{
printf("按工资排序后的记录已成功保存至文件 - %s\n", filename[1]);
}
//4.保存单数和双数职工号信息至worker3.dat和worker4.dat
filter_workers(arr, cnt, odd, oddnum, even, evennum);
if( save_file(odd, oddnum, filename[2]) == 0 )
{
printf("职工号为单数的记录已成功保存至文件 - %s\n", filename[2]);
}
if( save_file(even, evennum, filename[3]) == 0 )
{
printf("职工号为双数的记录已成功保存至文件 - %s\n", filename[3]);
}
//5.读取worker3.dat和worker4.dat并显示
clear_worker_array(odd, oddnum);
oddnum = 0;
if( load_file(odd, oddnum, filename[2]) == 0 )
{
printf("载入文件 - %s\n", filename[2]);
}
show_data(odd, oddnum);
clear_worker_array(even, oddnum);
evennum = 0;
if( load_file(even, evennum, filename[3]) == 0 )
{
printf("载入文件 - %s\n", filename[3]);
}
show_data(even, evennum);
return 0;
}
为了测试方便,此处的宏只指定了5个职工的信息,若要达到你要求的,直接改成10即可。运行结果如下:
完整代码请参考附件 - worker_manager.c
:by never715
/*测试方法,你可以把100变为4,10变为2,这样方便测试*/
#includestdio.h
struct teacher
{
int tno;//教师号
char sname[8];//姓名
float money[10];//工资项
float sum;//工资
}; struct teacher s[100];
void input(struct teacher s[100]);
void money(struct teacher s[100]);
void sort(struct teacher s[100]);
void output(struct teacher s[100]);
void main()
{
input(s);//定义函数输入所有教师的信息及工资信息;
money(s);//定义函数计算各个教师的工资;
sort(s);//定义函数按工资由高到低进行排序;
output(s);//定义函数输出教师的姓名和对应的工资。
}
void input(struct teacher s[100])
{
int i,j;
for(i=0;i100;i++)
{
scanf("%d",s[i].tno);
scanf("%s",s[i].sname);
for(j=0;j10;j++)
{
scanf("%d",s[i].money[j]);
}
}
}
void money(struct teacher s[100])
{
int i,j;
for(i=0;i100;i++)
{
s[i].sum =0;
for(j=0;j10;j++)
{
s[i].sum=s[i].sum +s[i].money[j];
}
}
}
void sort(struct teacher s[100])
{
struct teacher t;
int i,j;
for(i=0;i99;i++)
{
for(j=1;j100;j++)
{
if(s[i].sum s[j].sum )
{
t=s[i];
s[i]=s[j];
s[j]=t;
}
}
}
}
void output(struct teacher s[100])
{
int i;
for(i=0;i100;i++)
{
printf("教师工号:%d 教师名:%s 工资:%f\n",s[i].tno ,s[i].sname,s[i].sum );
}
}
定义两个变量,分别表示最大值和最小值,变量初值均等于数组第一个元素值,循环5次输入数组值,同时与两变量比较大小,记录最大值和最小值。循环结束即可打印输出。
#includestdio.h
int main()
{
int i=0,p[5],max,min;
printf("输入5名工程师工资:\n");
while(i5)
{
scanf("%d",p+i);
if(i==0) max=min=p[0];
else max=p[i]max?p[i]:max,min=p[i]min?p[i]:min;
i++;
}
printf("最大工资为%d,最小工资为%d\n",max,min);
return 0;
}