鳜鱼不臭 2022-06-14 18:20 采纳率: 50%
浏览 245
已结题

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文件在程序运行过程中动态创建。

  • 写回答

3条回答 默认 最新

  • 关注

    屏幕显示的是符合条件的数的和
    文件里写入的是最小的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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月23日
  • 已采纳回答 6月15日
  • 创建了问题 6月14日

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?