屏幕显示的是符合条件的数的和
文件里写入的是最小的20个数和符合条件的数的个数
运行结果:
代码如下:
lSmin.h文件
#ifndef _lSmin_H_
#define _lSmin_H_
int ICntMin(int* p, int num);
#endif // !_lSmin_H_
主函数文件(.cpp文件):
#include <iostream>
#include <fstream>
#include "lSmin.h"
using namespace std;
//冒泡排序
void BubbleSort(int* p, int num)
{
int i, j, t;
for (i = 0; i < num -1; i++)
{
for (j = 0; j < num - 1 - i; j++)
{
if (p[j] > p[j + 1]) //升序排列,也就是大的放在后面
{
t = p[j];
p[j] = p[j + 1];
p[j + 1] = t;
}
}
}
}
int ICntMin(int* p,int num)
{
int i, sum = 0, cnt = 0;
//排序
BubbleSort(p, num);
//遍历前20个,第一个数相对于自己,偏移量是0,所以直接从第二个数开始
for (i = 1; i < 20 && i < num; i++) //这里避免不够20个数据的情况,所以多加了一个条件
{
if ((p[i] - p[0]) % 2 == 1 && p[i] % 2 == 0 && p[i] % 5 == 0)
{
sum+= p[i];
cnt++;
}
}
printf("sum=%d\n", sum); //在屏幕显示符合条件的数的和
return cnt; //返回个数
}
int main()
{
ifstream is;
int* p = 0; //数组指针
int size = 20;
int nmb = 0; //数据个数
p = (int*)malloc(sizeof(int)*size); //先申请20个空间
is.open("datafile01.dat", ios::in);
if (!is.is_open())
{
cout << "datafile01.data打开失败!" << endl;
return 0;
}
//读取数据
while (!is.eof())
{
if (nmb == 20)
{
size += 20; //扩容
p = (int*)realloc(p, sizeof(int) * size);
}
if (is >> p[nmb])
nmb++;
}
is.close();
//调用函数处理
int cnt = ICntMin(p, nmb);
//将最小的20个数和结果写入文件
ofstream os;
os.open("resultdata.dat", ios::out);
//把最小的20个数写入文件
for (int i = 0; i < nmb; i++)
os << p[i] << " ";
//把函数结果写入文件,此次只写入符合条件的个数
os << cnt;
os.close();
return 0;
}