這很簡單,應(yīng)該是習(xí)題,我給思路
成都創(chuàng)新互聯(lián)-云計算及IDC服務(wù)提供商,涵蓋公有云、IDC機(jī)房租用、成都移動服務(wù)器托管、等保安全、私有云建設(shè)等企業(yè)級互聯(lián)網(wǎng)基礎(chǔ)服務(wù),歡迎聯(lián)系:13518219792
首先肯定要定義一個職工的結(jié)構(gòu)體,里面有工號,姓名,工資等屬性。
建立一個結(jié)構(gòu)體數(shù)組。
排序的話,最簡單的就是冒泡了。
寫入到文件,就對文件指針進(jìn)行操作就是了,寫入結(jié)構(gòu)體的語句是
fwrite(w[i],sizeof(struct worker),1,fp);
顯示的話就讀出再打印出來就行了。
fread(w[i],sizeof(struct worker),1,fp);
c語言書上都有,自己多看看,都是每個章節(jié)的一些基礎(chǔ)操作,寫出來對你很有作用的
#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;
}
思路:
使用結(jié)構(gòu)體保存職工信息,設(shè)計單獨的函數(shù),實現(xiàn)錄入,按職工工資排序,分解單雙數(shù)職工,讀取和寫入文件,顯示數(shù)據(jù)等功能。
1 - 從鍵盤錄入信息到數(shù)組結(jié)構(gòu)并保存至文件,錄入+寫入文件。
2 - 從磁盤文件中讀出這些數(shù)據(jù),依次打印出來, 讀取文件+顯示數(shù)據(jù)。
3 -?對職工數(shù)據(jù)按工資高低排序,將排好序的各記錄存放在文件worker2.dat中, 排序+寫入文件。
4 -?將職工號為單數(shù)和偶數(shù)的職工信息分別存放另兩個磁盤文件worker3.dat和worker4.dat中,?分解單雙數(shù)職工+寫入文件。
5 -?并從這兩個文件中讀出職工信息在顯示器上顯示出來, 讀取文件+顯示數(shù)據(jù)。
代碼片段如下:
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.保存單數(shù)和雙數(shù)職工號信息至worker3.dat和worker4.dat
filter_workers(arr,?cnt,?odd,?oddnum,?even,?evennum);
if(?save_file(odd,?oddnum,?filename[2])?==?0?)
{
printf("職工號為單數(shù)的記錄已成功保存至文件?-?%s\n",?filename[2]);
}
if(?save_file(even,?evennum,?filename[3])?==?0?)
{
printf("職工號為雙數(shù)的記錄已成功保存至文件?-?%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個職工的信息,若要達(dá)到你要求的,直接改成10即可。運行結(jié)果如下:
完整代碼請參考附件 -?worker_manager.c
:by never715
/*測試方法,你可以把100變?yōu)?,10變?yōu)?,這樣方便測試*/
#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);//定義函數(shù)輸入所有教師的信息及工資信息;
money(s);//定義函數(shù)計算各個教師的工資;
sort(s);//定義函數(shù)按工資由高到低進(jìn)行排序;
output(s);//定義函數(shù)輸出教師的姓名和對應(yīng)的工資。
}
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 );
}
}
定義兩個變量,分別表示最大值和最小值,變量初值均等于數(shù)組第一個元素值,循環(huán)5次輸入數(shù)組值,同時與兩變量比較大小,記錄最大值和最小值。循環(huán)結(jié)束即可打印輸出。
#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;
}
當(dāng)前名稱:c語言工資排序函數(shù) 計算工資c語言編程
網(wǎng)站地址:http://aaarwkj.com/article40/hhhpho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、品牌網(wǎng)站設(shè)計、域名注冊、網(wǎng)站改版、品牌網(wǎng)站建設(shè)、網(wǎng)站設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)