C++文件问题求解答,具体过程发图片

#

img


#在datafile01.dat中存储了一系列整型数据,在progl.cpp文件中求这一系列整型数据中最小20个数中相对于第一个数据偏移量为奇数的数据中能够被2和5整除的数据的个数,将所求得的和显示在屏幕并将这20个最小的数与所求得的结果写入文件resultdata.dat中,要求:1)使用动态分配读取datafile01.dat中的数据;2)使用函数
int ICntMin(int*pint num)
//先排序,再求满足条件的数据的个数
求文件datafile01.dat中最小20个数中相对于第一个数据偏移量为奇数的数据中能够被2和5整除的数据的个数,并将该函数放在头文件“lSmin.h”中,以供主函数调用。3)resultdata.dat文件在程序运行过程中动态创建。

屏幕显示的是符合条件的数的和
文件里写入的是最小的20个数和符合条件的数的个数
运行结果:

img

代码如下:
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;
}

C++文件读取与写入参考

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632