69,336
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#define DATA_NO 10
struct fileDataArray ReadDat(char *filepath);/*将数据从文件中读出,保存在结构体体中,并返回*/
void WriteDat(char *fileptr,int array[],int n);/*将数据写入文件*/
int judgeOddNumber(int x);/*判断一个数的各位之和是否是奇数,若是返回1,否则返回0*/
void sort(int array[],int n);/*从小到大排序*/
struct fileDataArray
{
int data[100];
};
void main()
{
struct fileDataArray a;
struct fileDataArray b;
int OddArray[100];
int i;
int j;
int k;
int sum;
int originalArray[]={1002, 1005, 1008, 1006, 1007 ,1004, 1000 ,1001 ,1003 ,1009};
/*此例只是在当前路径下建立IN.DAT,OUT.DAT文件,可以自行更改路径*/
char *infile="IN.DAT";
char *outfile="OUT.DAT";
sum=0;
j=0;
/*建立IN.DAT文件,其中的数据为originalArray中的数*/
WriteDat(infile,originalArray,sizeof(originalArray)/sizeof(originalArray[0]));
/*从IN.DAT中读取数据*/
a=ReadDat(infile);
printf("%s 文件中的所有数:\n",infile);
/*打印所有数据及平均值,并找出各位之和为奇数的数,存在数组OddArray中*/
for (k=0;k<sizeof(originalArray)/sizeof(originalArray[0]);k++)
{
printf("%-10d",a.data[k]);
if (judgeOddNumber(a.data[k]))
OddArray[j++]=a.data[k];
sum+=a.data[k];
}
printf("\n和:%d 平均数:%.2f\n",sum,(float)sum/k);
printf("各位数之和为奇数的数:\n");
for (i=0;i<j;i++)
printf("%-10d",OddArray[i]);
printf("\n");
/*将各位数之和为奇数的数进行排序(从小到大)*/
printf("从小到大排序后为:\n");
sort(OddArray,j);
for (i=0;i<j;i++)
printf("%-10d",OddArray[i]);
printf("\n");
/*将各位数这和为奇数的数按照从小到大的顺序写入OUT.DAT文件*/
WriteDat(outfile,OddArray,j);
/*从OUT.DAT中读取数据,检查数据是否写入正确*/
b=ReadDat(outfile);
printf("%s 文件中的所有数为:\n",outfile);
for (i=0;i<j;i++)
printf("%-10d",b.data[i]);
printf("\n");
}
struct fileDataArray ReadDat(char *filepath)
{
FILE *fp;
static struct fileDataArray dataArray;
int i;
if ((fp=fopen(filepath,"rb"))==NULL)
{
printf("cannot open file!\n");
exit(0);
}
i=0;
while(!feof(fp))
dataArray.data[i++]=getw(fp);
fclose(fp);
return dataArray;
}
void WriteDat(char *fileptr,int array[],int n)
{
FILE *fp;
int i;
if ((fp=fopen(fileptr,"wb"))==NULL)
{
printf("cannot open file!\n");
exit(0);
}
for (i=0;i<n;i++)
{
putw(array[i],fp);
}
fclose(fp);
}
int judgeOddNumber(int x)
{
int Array[20];
int i;
int j;
int NO;
i=0;
NO=0;
while(x)
{
Array[i++]=x%10;
x=x/10;
}
for (j=0;j<i;j++)
{
NO+=Array[j];
}
if (NO%2==0)
return 0;
else
return 1;
}
void sort(int array[],int n)
{
int i;
int j;
int k;
int temp;
for (i=0;i<n-1;i++)
{
k=i;
for (j=i+1;j<n;j++)
if (array[k]>array[j])
k=j;
if (k!=i)
{
temp=array[i];
array[i]=array[k];
array[k]=temp;
}
}
}