任务和代码:从文件salary.txt中读入工人的工资(不超过500人),全部增加20%(好事),然后对工资数据进行排序,将排序后的结果保存到文件ordered_salary.txt中
/*
文件名:main.c
作者:小风景
完成日期:2016.7.4
问题描述:从文件salary.txt中读入工人的工资(不超过500人),全部增加20%(好事),然后对工资数据进行排序,将排序后的结果保存到文件ordered_salary.txt中
程序输出:
*/
#include <stdio.h>
#include <string.h>
#define LENGTH 500
int GetInfoFromFile(double *salary);
int SequencingSalary(double *salary);
int WriteInfoIntoFile(double *salary);
int main()
{
double salary[LENGTH] = {0};
int result = -1; //检测函数是否执行成功
result = GetInfoFromFile(salary);
if(result != 0 )
{
return result;
}
result = SequencingSalary(salary);
if(result != 0 )
{
return result;
}
result = WriteInfoIntoFile(salary);
if(result != 0 )
{
return result;
}
return result;
}
/*
函数功能:从文件中读取数据到数组中
返回值:返回0表示成功,其他表示失败
*/
int GetInfoFromFile(double *salary)
{
int i = 0;
FILE *fp = NULL;
if((fp = fopen("salary.txt","r")) == NULL)
{
printf("salary file open erroe!");
return -1;
}
while(fscanf(fp,"%lf",&salary[i]) != EOF)
{
salary[i] *= 1.2;
i++;
}
fclose(fp);
return 0;
}
/*
函数功能:将数组中的元素排序(冒泡排序法)
返回值:返回0表示成功
*/
int SequencingSalary(double *salary)
{
int i,j;
double temp = 0;
for(i = 0;i < LENGTH - 1;i++)
{
for(j = 0;j < LENGTH - i - 1;j++)
{
if(salary[j] > salary[j + 1])
{
temp = salary[j];
salary[j] = salary[j + 1];
salary[j + 1] = temp;
}
}
}
return 0;
}
/*
函数功能:将数组中的元素写入文件中
返回值:返回0表示成功
*/
int WriteInfoIntoFile(double *salary)
{
int i = 0;
FILE *fp = NULL;
if((fp = fopen("ordered_salary.txt","w+")) == NULL)
{
printf("ordered_salary file open erroe!");
return -1;
}
for(i = 0;i < LENGTH;i++)
{
fprintf(fp,"%.2f\n",salary[i]);
}
printf("Thanks,byebye!\n");
fclose(fp);
return 0;
}
程序运行结果:
总结:这个程序运用函数的思想分三个步骤完成工资排序的功能,一个函数打开文件读取数据到数组,另一个函数进行排序,最后一个函数讲数组输入到新的文件,因此main函数中只需定义需要传入函数的实参数组,然后各个函数根据相应的功能对数组进行操作,包括向数组输入数据,将数组中的数据输出到文档,其中三个函数对同一个参数salary进行操作,三个函数都能改变salary中的值,但实际上只有输入函数改变了salary中中的值。这个程序中还体现了使用指针作为参数的思想,指针指向数组。